From ce1fc9438989ac22146c1c7e483933f3560e6572 Mon Sep 17 00:00:00 2001 From: Ed Espino Date: Thu, 5 Jun 2025 17:42:50 -0700 Subject: [PATCH 001/260] Prepare 2.0.0-incubating-rc1 release candidate on REL_2_STABLE - Update version in configure.ac to 2.0.0-incubating-rc1 - Regenerate configure script with updated version metadata - Set Maven pom.xml project version to 2.0.0-incubating-rc1 --- configure | 18 +++++++++--------- configure.ac | 2 +- pom.xml | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/configure b/configure index 1708007ee11..530c3d7f833 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Apache Cloudberry 2.0.0-devel. +# Generated by GNU Autoconf 2.69 for Apache Cloudberry 2.0.0-incubating-rc1. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Apache Cloudberry' PACKAGE_TARNAME='apache-cloudberry' -PACKAGE_VERSION='2.0.0-devel' -PACKAGE_STRING='Apache Cloudberry 2.0.0-devel' +PACKAGE_VERSION='2.0.0-incubating-rc1' +PACKAGE_STRING='Apache Cloudberry 2.0.0-incubating-rc1' PACKAGE_BUGREPORT='dev@cloudberry.apache.org' PACKAGE_URL='https://cloudberry.apache.org/' @@ -1513,7 +1513,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Apache Cloudberry 2.0.0-devel to adapt to many kinds of systems. +\`configure' configures Apache Cloudberry 2.0.0-incubating-rc1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1579,7 +1579,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Apache Cloudberry 2.0.0-devel:";; + short | recursive ) echo "Configuration of Apache Cloudberry 2.0.0-incubating-rc1:";; esac cat <<\_ACEOF @@ -1782,7 +1782,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Apache Cloudberry configure 2.0.0-devel +Apache Cloudberry configure 2.0.0-incubating-rc1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2535,7 +2535,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Apache Cloudberry $as_me 2.0.0-devel, which was +It was created by Apache Cloudberry $as_me 2.0.0-incubating-rc1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -23334,7 +23334,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Apache Cloudberry $as_me 2.0.0-devel, which was +This file was extended by Apache Cloudberry $as_me 2.0.0-incubating-rc1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23405,7 +23405,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Apache Cloudberry config.status 2.0.0-devel +Apache Cloudberry config.status 2.0.0-incubating-rc1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index cd459973d32..e9b3322383c 100644 --- a/configure.ac +++ b/configure.ac @@ -20,7 +20,7 @@ m4_pattern_forbid(^PGAC_)dnl to catch undefined macros dnl The PACKAGE_VERSION from upstream PostgreSQL is maintained in the dnl PG_PACKAGE_VERSION variable, when merging make sure to update this dnl variable with the merge conflict from the AC_INIT() statement. -AC_INIT([Apache Cloudberry], [2.0.0-devel], [dev@cloudberry.apache.org], [], [https://cloudberry.apache.org/]) +AC_INIT([Apache Cloudberry], [2.0.0-incubating-rc1], [dev@cloudberry.apache.org], [], [https://cloudberry.apache.org/]) [PG_PACKAGE_VERSION=14.4] AC_SUBST(PG_PACKAGE_VERSION) diff --git a/pom.xml b/pom.xml index 1e86880177d..daa0fd3325d 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ code or new licensing patterns. 4.0.0 org.apache.cloudberry apache-cloudberry-incubating - 2.0.0 + 2.0.0-incubating-rc1 pom From e3e3fcde8d53e7bd2c4512ff918f2e265a852c13 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Fri, 27 Jun 2025 17:40:36 +0800 Subject: [PATCH 002/260] Add the notice to greenplum-path* scripts Add notice header text to the following source files to clarify Cloudberry's relationship with VMware Tanzu Greenplum and Broadcom Inc: - gpAux/client/scripts/greenplum_clients_path.sh - gpMgmt/bin/generate-greenplum-path.sh Also, will print the notice text when sourcing greenplum_path.sh file. See discussion: https://lists.apache.org/thread/b8o974mnnqk6zpy86dgll2pgqcvqgnwm --- .../client/scripts/greenplum_clients_path.sh | 16 ++++++++ gpMgmt/bin/generate-greenplum-path.sh | 37 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/gpAux/client/scripts/greenplum_clients_path.sh b/gpAux/client/scripts/greenplum_clients_path.sh index a42d135c9ad..53dd4a286aa 100644 --- a/gpAux/client/scripts/greenplum_clients_path.sh +++ b/gpAux/client/scripts/greenplum_clients_path.sh @@ -1,3 +1,19 @@ +# -------------------------------------------------------------------- +# NOTICE from the Apache Cloudberry PPMC +# -------------------------------------------------------------------- +# This file uses the term 'greenplum' to maintain compatibility with +# earlier versions of Apache Cloudberry, which was originally called +# Greenplum. This usage does not refer to VMware Tanzu Greenplum, +# nor does it imply that Apache Cloudberry (Incubating) is affiliated +# with, endorsed by, or sponsored by Broadcom Inc. +# +# This file will be renamed in a future Apache Cloudberry release to +# ensure compliance with Apache Software Foundation guidelines. +# We will announce the change on the project mailing list and website. +# +# See: https://lists.apache.org/thread/b8o974mnnqk6zpy86dgll2pgqcvqgnwm +# -------------------------------------------------------------------- + if test -n "${ZSH_VERSION:-}"; then # zsh SCRIPT_PATH="${(%):-%x}" diff --git a/gpMgmt/bin/generate-greenplum-path.sh b/gpMgmt/bin/generate-greenplum-path.sh index 7f1f9074efc..5a3b6e35698 100755 --- a/gpMgmt/bin/generate-greenplum-path.sh +++ b/gpMgmt/bin/generate-greenplum-path.sh @@ -1,4 +1,41 @@ #!/usr/bin/env bash +# -------------------------------------------------------------------- +# NOTICE from the Apache Cloudberry PPMC +# -------------------------------------------------------------------- +# This file uses the term 'greenplum' to maintain compatibility with +# earlier versions of Apache Cloudberry, which was originally called +# Greenplum. This usage does not refer to VMware Tanzu Greenplum, +# nor does it imply that Apache Cloudberry (Incubating) is affiliated +# with, endorsed by, or sponsored by Broadcom Inc. +# +# This file will be renamed in a future Apache Cloudberry release to +# ensure compliance with Apache Software Foundation guidelines. +# We will announce the change on the project mailing list and website. +# +# See: https://lists.apache.org/thread/b8o974mnnqk6zpy86dgll2pgqcvqgnwm +# -------------------------------------------------------------------- + +cat <<"EOF" +if [ -n "${PS1-}" ]; then + echo " +# -------------------------------------------------------------------- +# NOTICE from the Apache Cloudberry PPMC +# -------------------------------------------------------------------- +# This file uses the term 'greenplum' to maintain compatibility with +# earlier versions of Apache Cloudberry, which was originally called +# Greenplum. This usage does not refer to VMware Tanzu Greenplum, +# nor does it imply that Apache Cloudberry (Incubating) is affiliated +# with, endorsed by, or sponsored by Broadcom Inc. +# +# This file will be renamed in a future Apache Cloudberry release to +# ensure compliance with Apache Software Foundation guidelines. +# We will announce the change on the project mailing list and website. +# +# See: https://lists.apache.org/thread/b8o974mnnqk6zpy86dgll2pgqcvqgnwm +# -------------------------------------------------------------------- +" +fi +EOF cat <<"EOF" if test -n "${ZSH_VERSION:-}"; then From 856531774c07342aa57f666f082be618faa09c5f Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Tue, 10 Jun 2025 11:58:14 +0800 Subject: [PATCH 003/260] Add configure-time check for protobuf, zstd, cmake when --enable-pax is specified When building with --enable-pax, the build now checks for the presence of protobuf (version >= 3.5.0) using pkg-config. If protobuf is not found, configure will fail with an appropriate error message. This ensures that missing dependencies are caught early in the build process. --- config/ax_compare_version.m4 | 177 ++++++++++++++++ configure | 383 +++++++++++++++++++++++++++++++++-- configure.ac | 36 +++- 3 files changed, 581 insertions(+), 15 deletions(-) create mode 100644 config/ax_compare_version.m4 diff --git a/config/ax_compare_version.m4 b/config/ax_compare_version.m4 new file mode 100644 index 00000000000..86173623ad1 --- /dev/null +++ b/config/ax_compare_version.m4 @@ -0,0 +1,177 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_compare_version.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# This macro compares two version strings. Due to the various number of +# minor-version numbers that can exist, and the fact that string +# comparisons are not compatible with numeric comparisons, this is not +# necessarily trivial to do in a autoconf script. This macro makes doing +# these comparisons easy. +# +# The six basic comparisons are available, as well as checking equality +# limited to a certain number of minor-version levels. +# +# The operator OP determines what type of comparison to do, and can be one +# of: +# +# eq - equal (test A == B) +# ne - not equal (test A != B) +# le - less than or equal (test A <= B) +# ge - greater than or equal (test A >= B) +# lt - less than (test A < B) +# gt - greater than (test A > B) +# +# Additionally, the eq and ne operator can have a number after it to limit +# the test to that number of minor versions. +# +# eq0 - equal up to the length of the shorter version +# ne0 - not equal up to the length of the shorter version +# eqN - equal up to N sub-version levels +# neN - not equal up to N sub-version levels +# +# When the condition is true, shell commands ACTION-IF-TRUE are run, +# otherwise shell commands ACTION-IF-FALSE are run. The environment +# variable 'ax_compare_version' is always set to either 'true' or 'false' +# as well. +# +# Examples: +# +# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) +# +# would both be true. +# +# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) +# +# would both be false. +# +# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) +# +# would be true because it is only comparing two minor versions. +# +# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) +# +# would be true because it is only comparing the lesser number of minor +# versions of the two values. +# +# Note: The characters that separate the version numbers do not matter. An +# empty string is the same as version 0. OP is evaluated by autoconf, not +# configure, so must be a string, not a variable. +# +# The author would like to acknowledge Guido Draheim whose advice about +# the m4_case and m4_ifvaln functions make this macro only include the +# portions necessary to perform the specific comparison specified by the +# OP argument in the final configure script. +# +# LICENSE +# +# Copyright (c) 2008 Tim Toolan +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 13 + +dnl ######################################################################### +AC_DEFUN([AX_COMPARE_VERSION], [ + AC_REQUIRE([AC_PROG_AWK]) + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + AS_VAR_PUSHDEF([A],[ax_compare_version_A]) + A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + AS_VAR_PUSHDEF([B],[ax_compare_version_B]) + B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary + dnl # then the first line is used to determine if the condition is true. + dnl # The sed right after the echo is to remove any indented white space. + m4_case(m4_tolower($2), + [lt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [gt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [le],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ], + [ge],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ],[ + dnl Split the operator from the subversion count if present. + m4_bmatch(m4_substr($2,2), + [0],[ + # A count of zero means use the length of the shorter version. + # Determine the number of characters in A and B. + ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'` + ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'` + + # Set A to no more than B's length and B to no more than A's length. + A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"` + B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"` + ], + [[0-9]+],[ + # A count greater than zero means use only that many subversions + A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + ], + [.+],[ + AC_WARNING( + [invalid OP numeric parameter: $2]) + ],[]) + + # Pad zeros at end of numbers to make same length. + ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`" + B="$B`echo $A | sed 's/./0/g'`" + A="$ax_compare_version_tmp_A" + + # Check for equality or inequality as necessary. + m4_case(m4_tolower(m4_substr($2,0,2)), + [eq],[ + test "x$A" = "x$B" && ax_compare_version=true + ], + [ne],[ + test "x$A" != "x$B" && ax_compare_version=true + ],[ + AC_WARNING([invalid OP parameter: $2]) + ]) + ]) + + AS_VAR_POPDEF([A])dnl + AS_VAR_POPDEF([B])dnl + + dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE. + if test "$ax_compare_version" = "true" ; then + m4_ifvaln([$4],[$4],[:])dnl + m4_ifvaln([$5],[else $5])dnl + fi +]) dnl AX_COMPARE_VERSION \ No newline at end of file diff --git a/configure b/configure index 530c3d7f833..8c6fc9acc89 100755 --- a/configure +++ b/configure @@ -720,8 +720,6 @@ with_apr_config with_libcurl with_rt with_quicklz -ZSTD_LIBS -ZSTD_CFLAGS with_zstd with_libbz2 LZ4_LIBS @@ -753,6 +751,11 @@ with_icu enable_thread_safety INCLUDES enable_pax +CMAKE +ZSTD_LIBS +ZSTD_CFLAGS +PROTOBUF_LIBS +PROTOBUF_CFLAGS enable_preload_ic_module enable_ic_proxy enable_external_fts @@ -844,6 +847,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -958,6 +962,10 @@ CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR +PROTOBUF_CFLAGS +PROTOBUF_LIBS +ZSTD_CFLAGS +ZSTD_LIBS ICU_CFLAGS ICU_LIBS XML2_CONFIG @@ -965,8 +973,6 @@ XML2_CFLAGS XML2_LIBS LZ4_CFLAGS LZ4_LIBS -ZSTD_CFLAGS -ZSTD_LIBS LDFLAGS_EX LDFLAGS_SL PERL @@ -1011,6 +1017,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1263,6 +1270,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1400,7 +1416,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1553,6 +1569,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1699,6 +1716,12 @@ Some influential environment variables: directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path + PROTOBUF_CFLAGS + C compiler flags for PROTOBUF, overriding pkg-config + PROTOBUF_LIBS + linker flags for PROTOBUF, overriding pkg-config + ZSTD_CFLAGS C compiler flags for ZSTD, overriding pkg-config + ZSTD_LIBS linker flags for ZSTD, overriding pkg-config ICU_CFLAGS C compiler flags for ICU, overriding pkg-config ICU_LIBS linker flags for ICU, overriding pkg-config XML2_CONFIG path to xml2-config utility @@ -1706,8 +1729,6 @@ Some influential environment variables: XML2_LIBS linker flags for XML2, overriding pkg-config LZ4_CFLAGS C compiler flags for LZ4, overriding pkg-config LZ4_LIBS linker flags for LZ4, overriding pkg-config - ZSTD_CFLAGS C compiler flags for ZSTD, overriding pkg-config - ZSTD_LIBS linker flags for ZSTD, overriding pkg-config LDFLAGS_EX extra linker flags for linking executables only LDFLAGS_SL extra linker flags for linking shared libraries only PERL Perl program @@ -2917,6 +2938,89 @@ ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_compare_version.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# This macro compares two version strings. Due to the various number of +# minor-version numbers that can exist, and the fact that string +# comparisons are not compatible with numeric comparisons, this is not +# necessarily trivial to do in a autoconf script. This macro makes doing +# these comparisons easy. +# +# The six basic comparisons are available, as well as checking equality +# limited to a certain number of minor-version levels. +# +# The operator OP determines what type of comparison to do, and can be one +# of: +# +# eq - equal (test A == B) +# ne - not equal (test A != B) +# le - less than or equal (test A <= B) +# ge - greater than or equal (test A >= B) +# lt - less than (test A < B) +# gt - greater than (test A > B) +# +# Additionally, the eq and ne operator can have a number after it to limit +# the test to that number of minor versions. +# +# eq0 - equal up to the length of the shorter version +# ne0 - not equal up to the length of the shorter version +# eqN - equal up to N sub-version levels +# neN - not equal up to N sub-version levels +# +# When the condition is true, shell commands ACTION-IF-TRUE are run, +# otherwise shell commands ACTION-IF-FALSE are run. The environment +# variable 'ax_compare_version' is always set to either 'true' or 'false' +# as well. +# +# Examples: +# +# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) +# +# would both be true. +# +# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) +# +# would both be false. +# +# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) +# +# would be true because it is only comparing two minor versions. +# +# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) +# +# would be true because it is only comparing the lesser number of minor +# versions of the two values. +# +# Note: The characters that separate the version numbers do not matter. An +# empty string is the same as version 0. OP is evaluated by autoconf, not +# configure, so must be a string, not a variable. +# +# The author would like to acknowledge Guido Draheim whose advice about +# the m4_case and m4_ifvaln functions make this macro only include the +# portions necessary to perform the specific comparison specified by the +# OP argument in the final configure script. +# +# LICENSE +# +# Copyright (c) 2008 Tim Toolan +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 13 + configure_args=$ac_configure_args @@ -9131,8 +9235,259 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: checking whether to build with PAX support ... $enable_pax" >&5 -$as_echo "checking whether to build with PAX support ... $enable_pax" >&6; } +if test "$enable_pax" = yes; then + # Check protobuf >= 3.5.0 + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for protobuf >= 3.5.0" >&5 +$as_echo_n "checking for protobuf >= 3.5.0... " >&6; } + +if test -n "$PROTOBUF_CFLAGS"; then + pkg_cv_PROTOBUF_CFLAGS="$PROTOBUF_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"protobuf >= 3.5.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "protobuf >= 3.5.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PROTOBUF_CFLAGS=`$PKG_CONFIG --cflags "protobuf >= 3.5.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$PROTOBUF_LIBS"; then + pkg_cv_PROTOBUF_LIBS="$PROTOBUF_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"protobuf >= 3.5.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "protobuf >= 3.5.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PROTOBUF_LIBS=`$PKG_CONFIG --libs "protobuf >= 3.5.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PROTOBUF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "protobuf >= 3.5.0" 2>&1` + else + PROTOBUF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "protobuf >= 3.5.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$PROTOBUF_PKG_ERRORS" >&5 + + as_fn_error $? "protobuf >= 3.5.0 is required for PAX support" "$LINENO" 5 + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "protobuf >= 3.5.0 is required for PAX support" "$LINENO" 5 + +else + PROTOBUF_CFLAGS=$pkg_cv_PROTOBUF_CFLAGS + PROTOBUF_LIBS=$pkg_cv_PROTOBUF_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PROTOBUF 1" >>confdefs.h + +fi + + # Check libzstd >= 1.4.0 + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libzstd >= 1.4.0" >&5 +$as_echo_n "checking for libzstd >= 1.4.0... " >&6; } + +if test -n "$ZSTD_CFLAGS"; then + pkg_cv_ZSTD_CFLAGS="$ZSTD_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libzstd >= 1.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libzstd >= 1.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ZSTD_CFLAGS=`$PKG_CONFIG --cflags "libzstd >= 1.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$ZSTD_LIBS"; then + pkg_cv_ZSTD_LIBS="$ZSTD_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libzstd >= 1.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libzstd >= 1.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ZSTD_LIBS=`$PKG_CONFIG --libs "libzstd >= 1.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + ZSTD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libzstd >= 1.4.0" 2>&1` + else + ZSTD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libzstd >= 1.4.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$ZSTD_PKG_ERRORS" >&5 + + as_fn_error $? "libzstd >= 1.4.0 is required for PAX support" "$LINENO" 5 + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "libzstd >= 1.4.0 is required for PAX support" "$LINENO" 5 + +else + ZSTD_CFLAGS=$pkg_cv_ZSTD_CFLAGS + ZSTD_LIBS=$pkg_cv_ZSTD_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_ZSTD 1" >>confdefs.h + +fi + + # Check cmake >= 3.11.0 using AX_COMPARE_VERSION + # Extract the first word of "cmake", so it can be a program name with args. +set dummy cmake; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CMAKE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CMAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CMAKE="$CMAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CMAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_CMAKE" && ac_cv_path_CMAKE="no" + ;; +esac +fi +CMAKE=$ac_cv_path_CMAKE +if test -n "$CMAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CMAKE" >&5 +$as_echo "$CMAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "$CMAKE" = "no"; then + as_fn_error $? "cmake is required for PAX support but was not found in PATH" "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking CMake version" >&5 +$as_echo_n "checking CMake version... " >&6; } + CMAKE_VERSION=`$CMAKE --version | head -n1 | sed 's/^0-9*\(0-90-9.*\).*/\1/'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CMAKE_VERSION" >&5 +$as_echo "$CMAKE_VERSION" >&6; } + + + + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + + ax_compare_version_A=`echo "$CMAKE_VERSION" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version_B=`echo "3.11.0" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version=`echo "x$ax_compare_version_A +x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` + + + + if test "$ax_compare_version" = "true" ; then + : + else as_fn_error $? "cmake >= 3.11.0 is required for PAX support" "$LINENO" 5 + + fi + + + # All checks passed + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking whether to build with PAX support ... yes" >&5 +$as_echo "checking whether to build with PAX support ... yes" >&6; } +else + # Explicitly disabled + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking whether to build with PAX support ... no" >&5 +$as_echo "checking whether to build with PAX support ... no" >&6; } +fi # @@ -18087,7 +18442,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18133,7 +18488,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18157,7 +18512,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18202,7 +18557,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18226,7 +18581,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; diff --git a/configure.ac b/configure.ac index e9b3322383c..4892ab89f3e 100644 --- a/configure.ac +++ b/configure.ac @@ -31,6 +31,7 @@ dnl your responsibility whether the result works or not.])]) AC_COPYRIGHT([Copyright (c) 1996-2021, PostgreSQL Global Development Group]) AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c]) AC_CONFIG_AUX_DIR(config) +m4_include([config/ax_compare_version.m4]) AC_PREFIX_DEFAULT(/usr/local/cbdb) AC_SUBST(configure_args, [$ac_configure_args]) AC_DEFINE_UNQUOTED(CONFIGURE_ARGS, ["$ac_configure_args"], [Saved arguments from configure]) @@ -932,7 +933,40 @@ PGAC_ARG_BOOL(enable, pax, no, [enable PAX support], [AC_DEFINE(USE_PAX_STORAGE, 1, [Define to 1 to support PAX])]) -AC_MSG_RESULT([checking whether to build with PAX support ... $enable_pax]) +if test "$enable_pax" = yes; then + # Check protobuf >= 3.5.0 + PKG_CHECK_MODULES([PROTOBUF], [protobuf >= 3.5.0], + [AC_DEFINE([HAVE_PROTOBUF], [1], [Define if protobuf is available])], + [AC_MSG_ERROR([protobuf >= 3.5.0 is required for PAX support])] + ) + + # Check libzstd >= 1.4.0 + PKG_CHECK_MODULES([ZSTD], [libzstd >= 1.4.0], + [AC_DEFINE([HAVE_ZSTD], [1], [Define if zstd is available])], + [AC_MSG_ERROR([libzstd >= 1.4.0 is required for PAX support])] + ) + + # Check cmake >= 3.11.0 using AX_COMPARE_VERSION + AC_PATH_PROG([CMAKE], [cmake], [no]) + if test "$CMAKE" = "no"; then + AC_MSG_ERROR([cmake is required for PAX support but was not found in PATH]) + fi + + AC_MSG_CHECKING([CMake version]) + CMAKE_VERSION=`$CMAKE --version | head -n1 | sed 's/[^0-9]*\([0-9][0-9.]*\).*/\1/'` + AC_MSG_RESULT([$CMAKE_VERSION]) + + AX_COMPARE_VERSION([$CMAKE_VERSION], [ge], [3.11.0], + [], + [AC_MSG_ERROR([cmake >= 3.11.0 is required for PAX support])] + ) + + # All checks passed + AC_MSG_RESULT([checking whether to build with PAX support ... yes]) +else + # Explicitly disabled + AC_MSG_RESULT([checking whether to build with PAX support ... no]) +fi AC_SUBST(enable_pax) # From 61e35f387e169551ad29b3bc11708a5a8aee0f69 Mon Sep 17 00:00:00 2001 From: Ed Espino Date: Fri, 27 Jun 2025 12:13:39 -0700 Subject: [PATCH 004/260] Update version string from 2.0.0-incubating-rc1 to 2.0.0-incubating Replace all instances of the RC tag in configure and configure.ac to reflect the final release version 2.0.0-incubating. This includes PACKAGE_VERSION, PACKAGE_STRING, and AC_INIT declarations, as well as embedded textual references used in --help and version output messages. Regenerated 'configure' using autoconf 2.69 to maintain consistency with the expected ASF toolchain. No functional changes to configuration behavior. --- configure | 18 +++++++++--------- configure.ac | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/configure b/configure index 8c6fc9acc89..3124f02b03f 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Apache Cloudberry 2.0.0-incubating-rc1. +# Generated by GNU Autoconf 2.69 for Apache Cloudberry 2.0.0-incubating. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Apache Cloudberry' PACKAGE_TARNAME='apache-cloudberry' -PACKAGE_VERSION='2.0.0-incubating-rc1' -PACKAGE_STRING='Apache Cloudberry 2.0.0-incubating-rc1' +PACKAGE_VERSION='2.0.0-incubating' +PACKAGE_STRING='Apache Cloudberry 2.0.0-incubating' PACKAGE_BUGREPORT='dev@cloudberry.apache.org' PACKAGE_URL='https://cloudberry.apache.org/' @@ -1529,7 +1529,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Apache Cloudberry 2.0.0-incubating-rc1 to adapt to many kinds of systems. +\`configure' configures Apache Cloudberry 2.0.0-incubating to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1596,7 +1596,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Apache Cloudberry 2.0.0-incubating-rc1:";; + short | recursive ) echo "Configuration of Apache Cloudberry 2.0.0-incubating:";; esac cat <<\_ACEOF @@ -1803,7 +1803,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Apache Cloudberry configure 2.0.0-incubating-rc1 +Apache Cloudberry configure 2.0.0-incubating generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2556,7 +2556,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Apache Cloudberry $as_me 2.0.0-incubating-rc1, which was +It was created by Apache Cloudberry $as_me 2.0.0-incubating, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -23689,7 +23689,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Apache Cloudberry $as_me 2.0.0-incubating-rc1, which was +This file was extended by Apache Cloudberry $as_me 2.0.0-incubating, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23760,7 +23760,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Apache Cloudberry config.status 2.0.0-incubating-rc1 +Apache Cloudberry config.status 2.0.0-incubating configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 4892ab89f3e..3b1000a3fee 100644 --- a/configure.ac +++ b/configure.ac @@ -20,7 +20,7 @@ m4_pattern_forbid(^PGAC_)dnl to catch undefined macros dnl The PACKAGE_VERSION from upstream PostgreSQL is maintained in the dnl PG_PACKAGE_VERSION variable, when merging make sure to update this dnl variable with the merge conflict from the AC_INIT() statement. -AC_INIT([Apache Cloudberry], [2.0.0-incubating-rc1], [dev@cloudberry.apache.org], [], [https://cloudberry.apache.org/]) +AC_INIT([Apache Cloudberry], [2.0.0-incubating], [dev@cloudberry.apache.org], [], [https://cloudberry.apache.org/]) [PG_PACKAGE_VERSION=14.4] AC_SUBST(PG_PACKAGE_VERSION) From 868c4694f4c70203b7a7235c2db8346de98f08c0 Mon Sep 17 00:00:00 2001 From: Ed Espino Date: Fri, 27 Jun 2025 12:31:59 -0700 Subject: [PATCH 005/260] Set Maven pom.xml project version to 2.0.0-incubating --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index daa0fd3325d..2816cb2d08f 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ code or new licensing patterns. 4.0.0 org.apache.cloudberry apache-cloudberry-incubating - 2.0.0-incubating-rc1 + 2.0.0-incubating pom From de84d5ab7986d8ffef8072da97a81d38c28b9a14 Mon Sep 17 00:00:00 2001 From: zhoujiaqi Date: Wed, 16 Jul 2025 17:09:15 +0800 Subject: [PATCH 006/260] PAX: replace cpp-stub submodule with local sources During the IPMC release review, bundled .a binary files were found in the cpp-stub git submodule. These violate ASF policy, which prohibits including prebuilt binaries in source releases. To resolve this, we removed the cpp-stub submodule and copied only the required source files into the repository as a subdirectory. This ensures compliance with ASF release requirements. Source upstream commit: https://github.com/coolxv/cpp-stub/commit/2ec4837af78eb07648d03e2e0e8162cac636e995 See: https://github.com/apache/cloudberry/issues/1237 --- .gitmodules | 3 - contrib/pax_storage/src/cpp/contrib/cpp-stub | 1 - .../pax_storage/src/cpp/cpp-stub/.gitignore | 2 + contrib/pax_storage/src/cpp/cpp-stub/LICENSE | 21 + .../pax_storage/src/cpp/cpp-stub/README.md | 133 + .../src/cpp/cpp-stub/src/addr_pri.h | 177 + .../pax_storage/src/cpp/cpp-stub/src/stub.h | 518 ++ .../src/cpp/cpp-stub/src_darwin/addr_any.h | 6 + .../src/cpp/cpp-stub/src_linux/addr_any.h | 5183 +++++++++++++++++ .../src/cpp/cpp-stub/src_win/addr_any.h | 66 + contrib/pax_storage/src/cpp/pax_gtest.cc | 2 +- .../src/cpp/storage/file_system_test.cc | 2 +- .../src/cpp/storage/orc/orc_test.cc | 2 +- .../pax_storage/src/cpp/storage/pax_test.cc | 2 +- 14 files changed, 6110 insertions(+), 8 deletions(-) delete mode 160000 contrib/pax_storage/src/cpp/contrib/cpp-stub create mode 100644 contrib/pax_storage/src/cpp/cpp-stub/.gitignore create mode 100644 contrib/pax_storage/src/cpp/cpp-stub/LICENSE create mode 100644 contrib/pax_storage/src/cpp/cpp-stub/README.md create mode 100644 contrib/pax_storage/src/cpp/cpp-stub/src/addr_pri.h create mode 100644 contrib/pax_storage/src/cpp/cpp-stub/src/stub.h create mode 100644 contrib/pax_storage/src/cpp/cpp-stub/src_darwin/addr_any.h create mode 100644 contrib/pax_storage/src/cpp/cpp-stub/src_linux/addr_any.h create mode 100644 contrib/pax_storage/src/cpp/cpp-stub/src_win/addr_any.h diff --git a/.gitmodules b/.gitmodules index fb447b2aed0..a7b61644ee2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -11,9 +11,6 @@ [submodule "contrib/pax_storage/src/cpp/contrib/googlebench"] path = contrib/pax_storage/src/cpp/contrib/googlebench url = https://github.com/google/benchmark.git -[submodule "contrib/pax_storage/src/cpp/contrib/cpp-stub"] - path = contrib/pax_storage/src/cpp/contrib/cpp-stub - url = https://github.com/coolxv/cpp-stub.git [submodule "dependency/yyjson"] path = dependency/yyjson url = https://github.com/ibireme/yyjson.git diff --git a/contrib/pax_storage/src/cpp/contrib/cpp-stub b/contrib/pax_storage/src/cpp/contrib/cpp-stub deleted file mode 160000 index 31374651940..00000000000 --- a/contrib/pax_storage/src/cpp/contrib/cpp-stub +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3137465194014d66a8402941e80d2bccc6346f51 diff --git a/contrib/pax_storage/src/cpp/cpp-stub/.gitignore b/contrib/pax_storage/src/cpp/cpp-stub/.gitignore new file mode 100644 index 00000000000..97c31142020 --- /dev/null +++ b/contrib/pax_storage/src/cpp/cpp-stub/.gitignore @@ -0,0 +1,2 @@ +.ccls-cache +replit* diff --git a/contrib/pax_storage/src/cpp/cpp-stub/LICENSE b/contrib/pax_storage/src/cpp/cpp-stub/LICENSE new file mode 100644 index 00000000000..6a89fb77015 --- /dev/null +++ b/contrib/pax_storage/src/cpp/cpp-stub/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 coolxv + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/contrib/pax_storage/src/cpp/cpp-stub/README.md b/contrib/pax_storage/src/cpp/cpp-stub/README.md new file mode 100644 index 00000000000..a73ccd8e78d --- /dev/null +++ b/contrib/pax_storage/src/cpp/cpp-stub/README.md @@ -0,0 +1,133 @@ +![building and running workflow](https://github.com/coolxv/cpp-stub/actions/workflows/make-test-multi-platform.yml/badge.svg) + +[δΈ­ζ–‡](README_zh.md)|[English](README.md) + +# Principle +- How to get the original function address (**addr_pri.h**, **addr_any.h**) +- How to replace the original function with stub function (**stub.h**) + +# Supported +- Supported operating systems: + * [x] Windows + * [x] Linux + * [x] MacOS(x86-64, printf '\x07' | dd of=test_function bs=1 seek=160 count=1 conv=notrunc) +- Supported hardware platform: + * [x] x86 + * [x] x86-64 + * [x] arm32 + * [x] arm64 + * [x] arm thumb + * [x] riscv32 + * [x] riscv64 + * [x] loongarch64 + * [x] mips64 + * [x] ppc64 (Generated by chatgpt and requires verification) + * [x] s390x (Generated by chatgpt and requires verification) + * [x] alpha (Generated by chatgpt and requires verification) + * [x] sparc (Generated by chatgpt and requires verification) + * [x] sw_64 (Generated by chatgpt and requires verification) +- Supported compiler: + * [x] msvc + * [x] gcc + * [x] clang +- Support function type: + * [x] [normal function](test/test_function.cpp) + * [x] [variadic function]((test/test_variadic_function.cpp)) + * [x] [template function](test/test_template_function_linux.cpp) + * [x] [overload function](test/test_overload_function_linux.cpp) + * [x] [lambda](test/test_addr_lambda_linux.cpp) + * [x] [static function(use addr_any.h)](test/test_addr_any_linux.cpp) + * [x] inline function(use compiler options) + * [x] [constructor function](test/test_constructor_function_linux.cpp) + * [x] [destructor function](test/test_dtor_function_linux.cpp) + * [x] [member function](test/test_object_member_function_linux.cpp) + * [x] [static member function](test/test_class_member_function.cpp) + * [x] [virtual function(not pure)](test/test_virtual_function_linux.cpp) + * [x] [virtual and overload function](test/test_virtual_overload_function_linux.cpp) + * [x] [functor](test/test_functor_linux.cpp) + * [x] [private member function(use addr_pri.h)](test/test_private_member_function_linux.cpp) + * [x] [private member function(cpp17)](test_cpp17/test_private_member.cpp) + + + + +# Description of the unit test +## Cannot stub +- Can't stub the exit function, the compiler has made special optimizations. +- Can't stub pure virtual functions, pure virtual functions not have the address. +- Can't stub lambda functions, lambda functions not get the address.(You can try to use addr_any.h api.) +- Can't stub static functions, static function address is not visible.(You can try to use addr_any.h api.) + + +## Unit test compilation option for linux g++ +- -fno-access-control +- -fno-inline +- -Wno-pmf-conversions +- -Wl,--allow-multiple-definition +- -no-pie -fno-stack-protector +- -fprofile-arcs +- -ftest-coverage + +## Code coverage statistics for linux g++ +``` +lcov -d build/ -z +lcov -d build/ -b ../../src1 --no-external -rc lcov_branch_coverage=1 -t ut -c -o ut_1.info +lcov -d build/ -b ../../src2 --no-external -rc lcov_branch_coverage=1 -t ut -c -o ut_2.info +lcov -a ut_1.info -a ut_2.info -o ut.info +genhtml -o report/ --prefix=`pwd` --branch-coverage --function-coverage ut.info +``` +## Code coverage statistics for windows + + [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) +``` +OpenCppCoverage.exe --sources MySourcePath* -- YourProgram.exe arg1 arg2 +``` +# Interface description + +## stub.h +``` +Stub stub +stub.set(addr, addr_stub) +stub.reset(addr) +``` + +## addr_pri.h +``` +Declaration: + ACCESS_PRIVATE_FIELD(ClassName, TypeName, FieldName) + ACCESS_PRIVATE_FUN(ClassName, TypeName, FunName) + ACCESS_PRIVATE_STATIC_FIELD(ClassName, TypeName, FieldName) + ACCESS_PRIVATE_STATIC_FUN(ClassName, TypeName, FunName) + +Use: + access_private_field::ClassNameFieldName(object); + access_private_static_field::ClassName::ClassNameFieldName(); + call_private_fun::ClassNameFunName(object,parameters...); + call_private_static_fun::ClassName::ClassNameFunName(parameters...); + get_private_fun::ClassNameFunName(); + get_private_static_fun::ClassName::ClassNameFunName(); +``` + +## addr_any.h(linux) +``` +AddrAny any //for exe +AddrAny any(libname) //for lib + +int get_local_func_addr_symtab(std::string func_name_regex_str, std::map& result) +int get_global_func_addr_symtab(std::string func_name_regex_str, std::map& result) +int get_weak_func_addr_symtab(std::string func_name_regex_str, std::map& result) + +int get_global_func_addr_dynsym( std::string func_name_regex_str, std::map& result) +int get_weak_func_addr_dynsym(std::string func_name_regex_str, std::map& result) + +``` +## addr_any.h(windows) +``` +AddrAny any //for all +int get_func_addr(std::string func_name, std::map& result) +``` +## addr_any.h(darwin) +``` +not implement +``` + diff --git a/contrib/pax_storage/src/cpp/cpp-stub/src/addr_pri.h b/contrib/pax_storage/src/cpp/cpp-stub/src/addr_pri.h new file mode 100644 index 00000000000..9174bb0cb99 --- /dev/null +++ b/contrib/pax_storage/src/cpp/cpp-stub/src/addr_pri.h @@ -0,0 +1,177 @@ +#ifndef __ADDR_PRI_H__ +#define __ADDR_PRI_H__ + + +#include +#include + + + +//base on C++11 + +/********************************************************** + access private function +**********************************************************/ + + +namespace std { + template + using enable_if_t = typename enable_if::type; + template + using remove_reference_t = typename remove_reference::type; +} // std + +// Unnamed namespace is used to avoid duplicate symbols if the macros are used +namespace { + namespace private_access_detail { + + // @tparam TagType, used to declare different "get" funciton overloads for + // different members/statics + template + struct private_access { + // Normal lookup cannot find in-class defined (inline) friend functions. + friend PtrType get(TagType) { return PtrValue; } + }; + + } // namespace private_access_detail +} // namespace + +// Used macro naming conventions: +// The "namespace" of this macro library is PRIVATE_ACCESS, i.e. all +// macro here has this prefix. +// All implementation macro, which are not meant to be used directly have the +// PRIVATE_ACCESS_DETAIL prefix. +// Some macros have the ABCD_IMPL form, which means they contain the +// implementation details for the specific ABCD macro. + +#define PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) x##y +#define PRIVATE_ACCESS_DETAIL_CONCATENATE(x, y) \ + PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) + +// @param PtrTypeKind E.g if we have "class A", then it can be "A::*" in case of +// members, or it can be "*" in case of statics. +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, \ + PtrTypeKind) \ + namespace { \ + namespace private_access_detail { \ + /* Tag type, used to declare different get funcitons for different \ + * members \ + */ \ + struct Tag {}; \ + /* Explicit instantiation */ \ + template struct private_access; \ + /* We can build the PtrType only with two aliases */ \ + /* E.g. using PtrType = int(int) *; would be illformed */ \ + using PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) = Type; \ + using PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) = \ + PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) PtrTypeKind; \ + /* Declare the friend function, now it is visible in namespace scope. \ + * Note, \ + * we could declare it inside the Tag type too, in that case ADL would \ + * find \ + * the declaration. By choosing to declare it here, the Tag type remains \ + * a \ + * simple tag type, it has no other responsibilities. */ \ + PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) get(Tag); \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(Tag, Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ + namespace { \ + namespace access_private_field { \ + Type &Class##Name(Class &&t) { return t.*get(private_access_detail::Tag{}); } \ + Type &Class##Name(Class &t) { return t.*get(private_access_detail::Tag{}); } \ + /* The following usings are here to avoid duplicate const qualifier \ + * warnings \ + */ \ + using PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag) = Type; \ + using PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) = \ + const PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag); \ + PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) & Class##Name(const Class &t) {\ + return t.*get(private_access_detail::Tag{}); \ + } \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(Tag, Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ + namespace { \ + namespace call_private_fun { \ + /* We do perfect forwarding, but we want to restrict the overload set \ + * only for objects which have the type Class. */ \ + template , \ + Class>::value> * = nullptr, \ + typename... Args> \ + auto Class##Name(Obj &&o, Args &&... args) -> decltype( \ + (std::forward(o).* \ + get(private_access_detail::Tag{}))(std::forward(args)...)) { \ + return (std::forward(o).*get(private_access_detail::Tag{}))( \ + std::forward(args)...); \ + } \ + } \ + namespace get_private_fun { \ + auto Class##Name() -> decltype( \ + get(private_access_detail::Tag{})) { \ + return (get(private_access_detail::Tag{})); \ + } \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD(Tag, Class, Type, \ + Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ + namespace { \ + namespace access_private_static_field { \ + namespace Class { \ + Type &Class##Name() { return *get(private_access_detail::Tag{}); } \ + } \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN(Tag, Class, Type, \ + Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ + namespace { \ + namespace call_private_static_fun { \ + namespace Class { \ + template \ + auto Class##Name(Args &&... args) -> decltype( \ + get(private_access_detail::Tag{})(std::forward(args)...)) { \ + return get(private_access_detail::Tag{})( \ + std::forward(args)...); \ + } \ + } \ + } \ + namespace get_private_static_fun { \ + namespace Class { \ + auto Class##Name() -> decltype(get(private_access_detail::Tag{})) { \ + return get(private_access_detail::Tag{}); \ + } \ + } \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_UNIQUE_TAG \ + PRIVATE_ACCESS_DETAIL_CONCATENATE(PrivateAccessTag, __COUNTER__) + +#define ACCESS_PRIVATE_FIELD(Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ + Class, Type, Name) + +#define ACCESS_PRIVATE_FUN(Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ + Class, Type, Name) + +#define ACCESS_PRIVATE_STATIC_FIELD(Class, Type, Name) \ + Type Class::Name; \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD( \ + PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) + +#define ACCESS_PRIVATE_STATIC_FUN(Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN( \ + PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) + +#endif diff --git a/contrib/pax_storage/src/cpp/cpp-stub/src/stub.h b/contrib/pax_storage/src/cpp/cpp-stub/src/stub.h new file mode 100644 index 00000000000..3b6946d407d --- /dev/null +++ b/contrib/pax_storage/src/cpp/cpp-stub/src/stub.h @@ -0,0 +1,518 @@ +#ifndef __STUB_H__ +#define __STUB_H__ + +#ifdef _WIN32 +//windows +#include +#include +#else +//linux or macos +#include +#include +#endif +//c +#include +#include +#include +//c++ +#include +//valgrind +#ifdef __VALGRIND__ +#include +#endif + +#define ADDR(CLASS_NAME,MEMBER_NAME) (&CLASS_NAME::MEMBER_NAME) + + +/********************************************************** + replace function +**********************************************************/ +#ifdef __VALGRIND__ +#define VALGRIND_CACHE_FLUSH(addr, size) VALGRIND_DISCARD_TRANSLATIONS(addr, size) +#else +#define VALGRIND_CACHE_FLUSH(addr, size) +#endif + +#ifdef _WIN32 +#define CACHEFLUSH(addr, size) FlushInstructionCache(GetCurrentProcess(), addr, size);VALGRIND_CACHE_FLUSH(addr, size) +#else +#define CACHEFLUSH(addr, size) __builtin___clear_cache(addr, addr + size);VALGRIND_CACHE_FLUSH(addr, size) +#endif + +#if defined(__aarch64__) || defined(_M_ARM64) + #define CODESIZE 16U + #define CODESIZE_MIN 16U + #define CODESIZE_MAX CODESIZE + // ldr x9, +8 + // br x9 + // addr + #define REPLACE_FAR(t, fn, fn_stub)\ + ((uint32_t*)fn)[0] = 0x58000040 | 9;\ + ((uint32_t*)fn)[1] = 0xd61f0120 | (9 << 5);\ + *(long long *)(fn + 8) = (long long )fn_stub;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__arm__) || defined(_M_ARM) + #define CODESIZE 8U + #define CODESIZE_MIN 8U + #define CODESIZE_MAX CODESIZE + // ldr pc, [pc, #-4] + #define REPLACE_FAR(t, fn, fn_stub)\ + if ((uintptr_t)fn & 0x00000001) { \ + *(uint16_t *)&f[0] = 0xf8df;\ + *(uint16_t *)&f[2] = 0xf000;\ + *(uint16_t *)&f[4] = (uint16_t)(fn_stub & 0xffff);\ + *(uint16_t *)&f[6] = (uint16_t)(fn_stub >> 16);\ + } else { \ + ((uint32_t*)fn)[0] = 0xe51ff004;\ + ((uint32_t*)fn)[1] = (uint32_t)fn_stub;\ + }\ + CACHEFLUSH((char *)((uintptr_t)fn & 0xfffffffe), CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__thumb__) || defined(_M_THUMB) + #define CODESIZE 12 + #define CODESIZE_MIN 12 + #define CODESIZE_MAX CODESIZE + // NOP + // LDR.W PC, [PC] + #define REPLACE_FAR(t, fn, fn_stub)\ + uint32_t clearBit0 = fn & 0xfffffffe;\ + char *f = (char *)clearBit0;\ + if (clearBit0 % 4 != 0) {\ + *(uint16_t *)&f[0] = 0xbe00;\ + }\ + *(uint16_t *)&f[2] = 0xf8df;\ + *(uint16_t *)&f[4] = 0xf000;\ + *(uint16_t *)&f[6] = (uint16_t)(fn_stub & 0xffff);\ + *(uint16_t *)&f[8] = (uint16_t)(fn_stub >> 16);\ + CACHEFLUSH((char *)f, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__mips64) + #define CODESIZE 80U + #define CODESIZE_MIN 80U + #define CODESIZE_MAX CODESIZE + //MIPS has no PC pointer, so you need to manually enter and exit the stack + //120000ce0: 67bdffe0 daddiu sp, sp, -32 //enter the stack + //120000ce4: ffbf0018 sd ra, 24(sp) + //120000ce8: ffbe0010 sd s8, 16(sp) + //120000cec: ffbc0008 sd gp, 8(sp) + //120000cf0: 03a0f025 move s8, sp + + //120000d2c: 03c0e825 move sp, s8 //exit the stack + //120000d30: dfbf0018 ld ra, 24(sp) + //120000d34: dfbe0010 ld s8, 16(sp) + //120000d38: dfbc0008 ld gp, 8(sp) + //120000d3c: 67bd0020 daddiu sp, sp, 32 + //120000d40: 03e00008 jr ra + #define REPLACE_FAR(t, fn, fn_stub)\ + ((uint32_t *)fn)[0] = 0x67bdffe0;\ + ((uint32_t *)fn)[1] = 0xffbf0018;\ + ((uint32_t *)fn)[2] = 0xffbe0010;\ + ((uint32_t *)fn)[3] = 0xffbc0008;\ + ((uint32_t *)fn)[4] = 0x03a0f025;\ + *(uint16_t *)(fn + 20) = (long long)fn_stub >> 32;\ + *(fn + 22) = 0x19;\ + *(fn + 23) = 0x24;\ + ((uint32_t *)fn)[6] = 0x0019cc38;\ + *(uint16_t *)(fn + 28) = (long long)fn_stub >> 16;\ + *(fn + 30) = 0x39;\ + *(fn + 31) = 0x37;\ + ((uint32_t *)fn)[8] = 0x0019cc38;\ + *(uint16_t *)(fn + 36) = (long long)fn_stub;\ + *(fn + 38) = 0x39;\ + *(fn + 39) = 0x37;\ + ((uint32_t *)fn)[10] = 0x0320f809;\ + ((uint32_t *)fn)[11] = 0x00000000;\ + ((uint32_t *)fn)[12] = 0x00000000;\ + ((uint32_t *)fn)[13] = 0x03c0e825;\ + ((uint32_t *)fn)[14] = 0xdfbf0018;\ + ((uint32_t *)fn)[15] = 0xdfbe0010;\ + ((uint32_t *)fn)[16] = 0xdfbc0008;\ + ((uint32_t *)fn)[17] = 0x67bd0020;\ + ((uint32_t *)fn)[18] = 0x03e00008;\ + ((uint32_t *)fn)[19] = 0x00000000;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__riscv) && __riscv_xlen == 64 + #define CODESIZE 24U + #define CODESIZE_MIN 24U + #define CODESIZE_MAX CODESIZE + // absolute offset(64) + // auipc t1,0 + // addi t1, t1, 16 + // ld t1,0(t1) + // jalr x0, t1, 0 + // addr + #define REPLACE_FAR(t, fn, fn_stub)\ + unsigned int auipc = 0x317;\ + *(unsigned int *)(fn) = auipc;\ + unsigned int addi = 0x1030313;\ + *(unsigned int *)(fn + 4) = addi;\ + unsigned int ld = 0x33303;\ + *(unsigned int *)(fn + 8) = ld;\ + unsigned int jalr = 0x30067;\ + *(unsigned int *)(fn + 12) = jalr;\ + *(unsigned long long*)(fn + 16) = (unsigned long long)fn_stub;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__riscv) && __riscv_xlen == 32 + #define CODESIZE 20U + #define CODESIZE_MIN 20U + #define CODESIZE_MAX CODESIZE + // absolute offset(32) + // auipc t1,0 + // addi t1, t1, 16 + // lw t1,0(t1) + // jalr x0, t1, 0 + // addr + #define REPLACE_FAR(t, fn, fn_stub)\ + unsigned int auipc = 0x317;\ + *(unsigned int *)(fn) = auipc;\ + unsigned int addi = 0x1030313;\ + *(unsigned int *)(fn + 4) = addi;\ + unsigned int lw = 0x32303;\ + *(unsigned int *)(fn + 8) = lw;\ + unsigned int jalr = 0x30067;\ + *(unsigned int *)(fn + 12) = jalr;\ + *(unsigned int*)(fn + 16) = (unsigned int)fn_stub;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__loongarch64) + #define CODESIZE 20U + #define CODESIZE_MIN 20U + #define CODESIZE_MAX CODESIZE + // absolute offset(64) + // PCADDI rd, si20 | 0 0 0 1 1 0 0 si20 rd + // LD.D rd, rj, si12 | 0 0 1 0 1 0 0 0 1 1 si12 rj rd + // JIRL rd, rj, offs | 0 1 0 0 1 1 offs[15:0] rj rd + // addr + #define REPLACE_FAR(t, fn, fn_stub)\ + unsigned int rd = 17;\ + unsigned int off = 12 >> 2;\ + unsigned int pcaddi = 0x0c << (32 - 7) | off << 5 | rd ;\ + rd = 17;\ + int rj = 17;\ + off = 0;\ + unsigned int ld_d = 0xa3 << 22 | off << 10 | rj << 5 | rd ;\ + rd = 0;\ + rj = 17;\ + off = 0;\ + unsigned int jirl = 0x13 << 26 | off << 10 | rj << 5| rd;\ + *(unsigned int *)fn = pcaddi;\ + *(unsigned int *)(fn + 4) = ld_d;\ + *(unsigned int *)(fn + 8) = jirl;\ + *(unsigned long long*)(fn + 12) = (unsigned long long)fn_stub;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__powerpc64__) + #define CODESIZE 20U + #define CODESIZE_MIN 20U + #define CODESIZE_MAX CODESIZE + // lis r12, fn_stub@highest + // ori r12, r12, fn_stub@higher + // rldicr r12, r12, 32, 31 + // ori r12, r12, fn_stub@high + // ori r12, r12, fn_stub@l + // mtctr r12 + // bctr + #define REPLACE_FAR(t, fn, fn_stub)\ + ((uint32_t*)fn)[0] = 0x3c000000 | (((uintptr_t)fn_stub >> 48) & 0xffff);\ + ((uint32_t*)fn)[1] = 0x60000000 | (((uintptr_t)fn_stub >> 32) & 0xffff);\ + ((uint32_t*)fn)[2] = 0x78000000 | ((((uintptr_t)fn_stub >> 32) & 0xffff) << 16);\ + ((uint32_t*)fn)[3] = 0x60000000 | (((uintptr_t)fn_stub >> 16) & 0xffff);\ + ((uint32_t*)fn)[4] = 0x60000000 | ((uintptr_t)fn_stub & 0xffff);\ + ((uint32_t*)fn)[5] = 0x7d8903a6;\ + ((uint32_t*)fn)[6] = 0x4e800420;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__alpha__) + #define CODESIZE 16U + #define CODESIZE_MIN 16U + #define CODESIZE_MAX CODESIZE + // ldah t12, high(fn_stub) + // lda t12, low(fn_stub)(t12) + // jmp zero, (t12), 0 + #define REPLACE_FAR(t, fn, fn_stub)\ + ((uint32_t*)fn)[0] = 0x279f0000 | (((uintptr_t)fn_stub >> 32) & 0xffff);\ + ((uint32_t*)fn)[1] = 0x201f0000 | ((uintptr_t)fn_stub & 0xffff);\ + ((uint32_t*)fn)[2] = 0x6bfb0000;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__sparc__) && defined(__arch64__) + #define CODESIZE 24U + #define CODESIZE_MIN 24U + #define CODESIZE_MAX CODESIZE + // sethi %hi(fn_stub), %g1 + // jmp %g1 + %lo(fn_stub) + // nop + #define REPLACE_FAR(t, fn, fn_stub)\ + ((uint32_t*)fn)[0] = 0x03000000 | (((uintptr_t)fn_stub >> 42) & 0x3fffff);\ + ((uint32_t*)fn)[1] = 0x81c06000 | (((uintptr_t)fn_stub >> 32) & 0x3ff);\ + ((uint32_t*)fn)[2] = 0x01000000;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__sw_64__) + #define CODESIZE 12U + #define CODESIZE_MIN 12U + #define CODESIZE_MAX CODESIZE + // bis zero, zero, v0 + // ldq v0, fn_stub + // jmp zero, (v0) + #define REPLACE_FAR(t, fn, fn_stub)\ + ((uint32_t*)fn)[0] = 0x20000000;\ + ((uint32_t*)fn)[1] = 0xd2000000 | ((uintptr_t)fn_stub & 0xffffffff);\ + ((uint32_t*)fn)[2] = 0x6bfb0000;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#elif defined(__s390x__) + #define CODESIZE 16U + #define CODESIZE_MIN 16U + #define CODESIZE_MAX CODESIZE + // lgrl %r1, fn_stub + // br %r1 + #define REPLACE_FAR(t, fn, fn_stub)\ + ((uint32_t*)fn)[0] = 0xc0200000 | (1 << 20) | (0x0);\ + ((uint32_t*)fn)[1] = 0x07f10000;\ + *(uint64_t *)(fn + 8) = (uint64_t)fn_stub;\ + CACHEFLUSH((char *)fn, CODESIZE); + #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) +#else //__i386__ _x86_64__ _M_IX86 _M_X64 + #define CODESIZE 13U + #define CODESIZE_MIN 5U + #define CODESIZE_MAX CODESIZE + //13 byte(jmp m16:64) + //movabs $0x102030405060708,%r11 + //jmpq *%r11 + #define REPLACE_FAR(t, fn, fn_stub)\ + *fn = 0x49;\ + *(fn + 1) = 0xbb;\ + *(long long *)(fn + 2) = (long long)fn_stub;\ + *(fn + 10) = 0x41;\ + *(fn + 11) = 0xff;\ + *(fn + 12) = 0xe3;\ + CACHEFLUSH((char *)fn, CODESIZE); + //5 byte(jmp rel32) + #define REPLACE_NEAR(t, fn, fn_stub)\ + *fn = 0xE9;\ + *(int *)(fn + 1) = (int)(fn_stub - fn - CODESIZE_MIN);\ + CACHEFLUSH((char *)fn, CODESIZE); +#endif + +struct func_stub +{ + unsigned char *fn; + unsigned char code_buf[CODESIZE]; + bool far_jmp; +}; + +class Stub +{ +public: + Stub() + { +#ifdef _WIN32 + SYSTEM_INFO sys_info; + GetSystemInfo(&sys_info); + m_pagesize = sys_info.dwPageSize; +#else + m_pagesize = sysconf(_SC_PAGE_SIZE); +#endif + + if (m_pagesize < 0) + { + m_pagesize = 4096; + } + } + ~Stub() + { + clear(); + } + void clear() + { + std::map::iterator iter; + struct func_stub *pstub; + for(iter=m_result.begin(); iter != m_result.end(); iter++) + { + pstub = iter->second; +#ifdef _WIN32 + DWORD lpflOldProtect; + if(0 != VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) +#else + if (0 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) +#endif + { + + if(pstub->far_jmp) + { + std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MAX); + } + else + { + std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MIN); + } + + CACHEFLUSH((char *)pstub->fn, CODESIZE); + +#ifdef _WIN32 + VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect); +#else + mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC); +#endif + } + + iter->second = NULL; + delete pstub; + } + + return; + } + template + void set(T addr, S addr_stub) + { + unsigned char * fn; + unsigned char * fn_stub; + fn = addrof(addr); + fn_stub = addrof(addr_stub); + struct func_stub *pstub; + pstub = new func_stub; + //start + reset(fn); // + pstub->fn = fn; + + if(distanceof(fn, fn_stub)) + { + pstub->far_jmp = true; + std::memcpy(pstub->code_buf, fn, CODESIZE_MAX); + } + else + { + pstub->far_jmp = false; + std::memcpy(pstub->code_buf, fn, CODESIZE_MIN); + } + +#ifdef _WIN32 + DWORD lpflOldProtect; + if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) +#else + if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) +#endif + { + throw("stub set memory protect to w+r+x faild"); + } + + if(pstub->far_jmp) + { + REPLACE_FAR(this, fn, fn_stub); + } + else + { + REPLACE_NEAR(this, fn, fn_stub); + } + +#ifdef _WIN32 + if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect)) +#else + if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC)) +#endif + { + throw("stub set memory protect to r+x failed"); + } + m_result.insert(std::pair(fn,pstub)); + return; + } + + template + void reset(T addr) + { + unsigned char * fn; + fn = addrof(addr); + + std::map::iterator iter = m_result.find(fn); + + if (iter == m_result.end()) + { + return; + } + struct func_stub *pstub; + pstub = iter->second; + +#ifdef _WIN32 + DWORD lpflOldProtect; + if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) +#else + if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) +#endif + { + throw("stub reset memory protect to w+r+x faild"); + } + + if(pstub->far_jmp) + { + std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MAX); + } + else + { + std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MIN); + } + + CACHEFLUSH((char *)pstub->fn, CODESIZE); + + +#ifdef _WIN32 + if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect)) +#else + if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC)) +#endif + { + throw("stub reset memory protect to r+x failed"); + } + m_result.erase(iter); + delete pstub; + + return; + } +private: + void *pageof(unsigned char* addr) + { +#ifdef _WIN32 + return (void *)((unsigned long long)addr & ~(m_pagesize - 1)); +#else + return (void *)((unsigned long)addr & ~(m_pagesize - 1)); +#endif + } + + template + unsigned char* addrof(T addr) + { + union + { + T _s; + unsigned char* _d; + }ut; + ut._s = addr; + return ut._d; + } + + bool distanceof(unsigned char* addr, unsigned char* addr_stub) + { + std::ptrdiff_t diff = addr_stub >= addr ? addr_stub - addr : addr - addr_stub; + if((sizeof(addr) > 4) && (((diff >> 31) - 1) > 0)) + { + return true; + } + return false; + } + +private: +#ifdef _WIN32 + //LLP64 + long long m_pagesize; +#else + //LP64 + long m_pagesize; +#endif + std::map m_result; + +}; + +#endif diff --git a/contrib/pax_storage/src/cpp/cpp-stub/src_darwin/addr_any.h b/contrib/pax_storage/src/cpp/cpp-stub/src_darwin/addr_any.h new file mode 100644 index 00000000000..de54dde2d2c --- /dev/null +++ b/contrib/pax_storage/src/cpp/cpp-stub/src_darwin/addr_any.h @@ -0,0 +1,6 @@ +#ifndef __ADDR_ANY_H__ +#define __ADDR_ANY_H__ + + + +#endif diff --git a/contrib/pax_storage/src/cpp/cpp-stub/src_linux/addr_any.h b/contrib/pax_storage/src/cpp/cpp-stub/src_linux/addr_any.h new file mode 100644 index 00000000000..bbbac3412e1 --- /dev/null +++ b/contrib/pax_storage/src/cpp/cpp-stub/src_linux/addr_any.h @@ -0,0 +1,5183 @@ + +/*** Start of inlined file: elfio_dump.hpp ***/ +#ifndef ELFIO_DUMP_HPP +#define ELFIO_DUMP_HPP + +#include +#include +#include +#include +#include + +/*** Start of inlined file: elfio.hpp ***/ +#ifndef ELFIO_HPP +#define ELFIO_HPP + +#ifdef _MSC_VER +#pragma warning( push ) +#pragma warning( disable : 4996 ) +#pragma warning( disable : 4355 ) +#pragma warning( disable : 4244 ) +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + + +/*** Start of inlined file: elf_types.hpp ***/ +#ifndef ELFTYPES_H +#define ELFTYPES_H + +#ifndef ELFIO_NO_OWN_TYPES +#if !defined( ELFIO_NO_CSTDINT ) && !defined( ELFIO_NO_INTTYPES ) +#include +#else +typedef unsigned char uint8_t; +typedef signed char int8_t; +typedef unsigned short uint16_t; +typedef signed short int16_t; +#ifdef _MSC_VER +typedef unsigned __int32 uint32_t; +typedef signed __int32 int32_t; +typedef unsigned __int64 uint64_t; +typedef signed __int64 int64_t; +#else +typedef unsigned int uint32_t; +typedef signed int int32_t; +typedef unsigned long long uint64_t; +typedef signed long long int64_t; +#endif // _MSC_VER +#endif // ELFIO_NO_CSTDINT +#endif // ELFIO_NO_OWN_TYPES + +namespace ELFIO { + +// Attention! Platform depended definitions. +typedef uint16_t Elf_Half; +typedef uint32_t Elf_Word; +typedef int32_t Elf_Sword; +typedef uint64_t Elf_Xword; +typedef int64_t Elf_Sxword; + +typedef uint32_t Elf32_Addr; +typedef uint32_t Elf32_Off; +typedef uint64_t Elf64_Addr; +typedef uint64_t Elf64_Off; + +#define Elf32_Half Elf_Half +#define Elf64_Half Elf_Half +#define Elf32_Word Elf_Word +#define Elf64_Word Elf_Word +#define Elf32_Sword Elf_Sword +#define Elf64_Sword Elf_Sword + +/////////////////////// +// ELF Header Constants + +// File type +#define ET_NONE 0 +#define ET_REL 1 +#define ET_EXEC 2 +#define ET_DYN 3 +#define ET_CORE 4 +#define ET_LOOS 0xFE00 +#define ET_HIOS 0xFEFF +#define ET_LOPROC 0xFF00 +#define ET_HIPROC 0xFFFF + +#define EM_NONE 0 // No machine +#define EM_M32 1 // AT&T WE 32100 +#define EM_SPARC 2 // SUN SPARC +#define EM_386 3 // Intel 80386 +#define EM_68K 4 // Motorola m68k family +#define EM_88K 5 // Motorola m88k family +#define EM_486 6 // Intel 80486// Reserved for future use +#define EM_860 7 // Intel 80860 +#define EM_MIPS 8 // MIPS R3000 (officially, big-endian only) +#define EM_S370 9 // IBM System/370 +#define EM_MIPS_RS3_LE \ + 10 // MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated +#define EM_res011 11 // Reserved +#define EM_res012 12 // Reserved +#define EM_res013 13 // Reserved +#define EM_res014 14 // Reserved +#define EM_PARISC 15 // HPPA +#define EM_res016 16 // Reserved +#define EM_VPP550 17 // Fujitsu VPP500 +#define EM_SPARC32PLUS 18 // Sun's "v8plus" +#define EM_960 19 // Intel 80960 +#define EM_PPC 20 // PowerPC +#define EM_PPC64 21 // 64-bit PowerPC +#define EM_S390 22 // IBM S/390 +#define EM_SPU 23 // Sony/Toshiba/IBM SPU +#define EM_res024 24 // Reserved +#define EM_res025 25 // Reserved +#define EM_res026 26 // Reserved +#define EM_res027 27 // Reserved +#define EM_res028 28 // Reserved +#define EM_res029 29 // Reserved +#define EM_res030 30 // Reserved +#define EM_res031 31 // Reserved +#define EM_res032 32 // Reserved +#define EM_res033 33 // Reserved +#define EM_res034 34 // Reserved +#define EM_res035 35 // Reserved +#define EM_V800 36 // NEC V800 series +#define EM_FR20 37 // Fujitsu FR20 +#define EM_RH32 38 // TRW RH32 +#define EM_MCORE 39 // Motorola M*Core // May also be taken by Fujitsu MMA +#define EM_RCE 39 // Old name for MCore +#define EM_ARM 40 // ARM +#define EM_OLD_ALPHA 41 // Digital Alpha +#define EM_SH 42 // Renesas (formerly Hitachi) / SuperH SH +#define EM_SPARCV9 43 // SPARC v9 64-bit +#define EM_TRICORE 44 // Siemens Tricore embedded processor +#define EM_ARC 45 // ARC Cores +#define EM_H8_300 46 // Renesas (formerly Hitachi) H8/300 +#define EM_H8_300H 47 // Renesas (formerly Hitachi) H8/300H +#define EM_H8S 48 // Renesas (formerly Hitachi) H8S +#define EM_H8_500 49 // Renesas (formerly Hitachi) H8/500 +#define EM_IA_64 50 // Intel IA-64 Processor +#define EM_MIPS_X 51 // Stanford MIPS-X +#define EM_COLDFIRE 52 // Motorola Coldfire +#define EM_68HC12 53 // Motorola M68HC12 +#define EM_MMA 54 // Fujitsu Multimedia Accelerator +#define EM_PCP 55 // Siemens PCP +#define EM_NCPU 56 // Sony nCPU embedded RISC processor +#define EM_NDR1 57 // Denso NDR1 microprocesspr +#define EM_STARCORE 58 // Motorola Star*Core processor +#define EM_ME16 59 // Toyota ME16 processor +#define EM_ST100 60 // STMicroelectronics ST100 processor +#define EM_TINYJ 61 // Advanced Logic Corp. TinyJ embedded processor +#define EM_X86_64 62 // Advanced Micro Devices X86-64 processor +#define EM_PDSP 63 // Sony DSP Processor +#define EM_PDP10 64 // Digital Equipment Corp. PDP-10 +#define EM_PDP11 65 // Digital Equipment Corp. PDP-11 +#define EM_FX66 66 // Siemens FX66 microcontroller +#define EM_ST9PLUS 67 // STMicroelectronics ST9+ 8/16 bit microcontroller +#define EM_ST7 68 // STMicroelectronics ST7 8-bit microcontroller +#define EM_68HC16 69 // Motorola MC68HC16 Microcontroller +#define EM_68HC11 70 // Motorola MC68HC11 Microcontroller +#define EM_68HC08 71 // Motorola MC68HC08 Microcontroller +#define EM_68HC05 72 // Motorola MC68HC05 Microcontroller +#define EM_SVX 73 // Silicon Graphics SVx +#define EM_ST19 74 // STMicroelectronics ST19 8-bit cpu +#define EM_VAX 75 // Digital VAX +#define EM_CRIS 76 // Axis Communications 32-bit embedded processor +#define EM_JAVELIN 77 // Infineon Technologies 32-bit embedded cpu +#define EM_FIREPATH 78 // Element 14 64-bit DSP processor +#define EM_ZSP 79 // LSI Logic's 16-bit DSP processor +#define EM_MMIX 80 // Donald Knuth's educational 64-bit processor +#define EM_HUANY 81 // Harvard's machine-independent format +#define EM_PRISM 82 // SiTera Prism +#define EM_AVR 83 // Atmel AVR 8-bit microcontroller +#define EM_FR30 84 // Fujitsu FR30 +#define EM_D10V 85 // Mitsubishi D10V +#define EM_D30V 86 // Mitsubishi D30V +#define EM_V850 87 // NEC v850 +#define EM_M32R 88 // Renesas M32R (formerly Mitsubishi M32R) +#define EM_MN10300 89 // Matsushita MN10300 +#define EM_MN10200 90 // Matsushita MN10200 +#define EM_PJ 91 // picoJava +#define EM_OPENRISC 92 // OpenRISC 32-bit embedded processor +#define EM_ARC_A5 93 // ARC Cores Tangent-A5 +#define EM_XTENSA 94 // Tensilica Xtensa Architecture +#define EM_VIDEOCORE 95 // Alphamosaic VideoCore processor +#define EM_TMM_GPP 96 // Thompson Multimedia General Purpose Processor +#define EM_NS32K 97 // National Semiconductor 32000 series +#define EM_TPC 98 // Tenor Network TPC processor +#define EM_SNP1K 99 // Trebia SNP 1000 processor +#define EM_ST200 100 // STMicroelectronics ST200 microcontroller +#define EM_IP2K 101 // Ubicom IP2022 micro controller +#define EM_MAX 102 // MAX Processor +#define EM_CR 103 // National Semiconductor CompactRISC +#define EM_F2MC16 104 // Fujitsu F2MC16 +#define EM_MSP430 105 // TI msp430 micro controller +#define EM_BLACKFIN 106 // ADI Blackfin +#define EM_SE_C33 107 // S1C33 Family of Seiko Epson processors +#define EM_SEP 108 // Sharp embedded microprocessor +#define EM_ARCA 109 // Arca RISC Microprocessor +#define EM_UNICORE \ + 110 // Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University +#define EM_EXCESS 111 // eXcess: 16/32/64-bit configurable embedded CPU +#define EM_DXP 112 // Icera Semiconductor Inc. Deep Execution Processor +#define EM_ALTERA_NIOS2 113 // Altera Nios II soft-core processor +#define EM_CRX 114 // National Semiconductor CRX +#define EM_XGATE 115 // Motorola XGATE embedded processor +#define EM_C166 116 // Infineon C16x/XC16x processor +#define EM_M16C 117 // Renesas M16C series microprocessors +#define EM_DSPIC30F \ + 118 // Microchip Technology dsPIC30F Digital Signal Controller +#define EM_CE 119 // Freescale Communication Engine RISC core +#define EM_M32C 120 // Renesas M32C series microprocessors +#define EM_res121 121 // Reserved +#define EM_res122 122 // Reserved +#define EM_res123 123 // Reserved +#define EM_res124 124 // Reserved +#define EM_res125 125 // Reserved +#define EM_res126 126 // Reserved +#define EM_res127 127 // Reserved +#define EM_res128 128 // Reserved +#define EM_res129 129 // Reserved +#define EM_res130 130 // Reserved +#define EM_TSK3000 131 // Altium TSK3000 core +#define EM_RS08 132 // Freescale RS08 embedded processor +#define EM_res133 133 // Reserved +#define EM_ECOG2 134 // Cyan Technology eCOG2 microprocessor +#define EM_SCORE 135 // Sunplus Score +#define EM_SCORE7 135 // Sunplus S+core7 RISC processor +#define EM_DSP24 136 // New Japan Radio (NJR) 24-bit DSP Processor +#define EM_VIDEOCORE3 137 // Broadcom VideoCore III processor +#define EM_LATTICEMICO32 138 // RISC processor for Lattice FPGA architecture +#define EM_SE_C17 139 // Seiko Epson C17 family +#define EM_TI_C6000 140 // Texas Instruments TMS320C6000 DSP family +#define EM_TI_C2000 141 // Texas Instruments TMS320C2000 DSP family +#define EM_TI_C5500 142 // Texas Instruments TMS320C55x DSP family +#define EM_res143 143 // Reserved +#define EM_res144 144 // Reserved +#define EM_res145 145 // Reserved +#define EM_res146 146 // Reserved +#define EM_res147 147 // Reserved +#define EM_res148 148 // Reserved +#define EM_res149 149 // Reserved +#define EM_res150 150 // Reserved +#define EM_res151 151 // Reserved +#define EM_res152 152 // Reserved +#define EM_res153 153 // Reserved +#define EM_res154 154 // Reserved +#define EM_res155 155 // Reserved +#define EM_res156 156 // Reserved +#define EM_res157 157 // Reserved +#define EM_res158 158 // Reserved +#define EM_res159 159 // Reserved +#define EM_MMDSP_PLUS 160 // STMicroelectronics 64bit VLIW Data Signal Processor +#define EM_CYPRESS_M8C 161 // Cypress M8C microprocessor +#define EM_R32C 162 // Renesas R32C series microprocessors +#define EM_TRIMEDIA 163 // NXP Semiconductors TriMedia architecture family +#define EM_QDSP6 164 // QUALCOMM DSP6 Processor +#define EM_8051 165 // Intel 8051 and variants +#define EM_STXP7X 166 // STMicroelectronics STxP7x family +#define EM_NDS32 \ + 167 // Andes Technology compact code size embedded RISC processor family +#define EM_ECOG1 168 // Cyan Technology eCOG1X family +#define EM_ECOG1X 168 // Cyan Technology eCOG1X family +#define EM_MAXQ30 169 // Dallas Semiconductor MAXQ30 Core Micro-controllers +#define EM_XIMO16 170 // New Japan Radio (NJR) 16-bit DSP Processor +#define EM_MANIK 171 // M2000 Reconfigurable RISC Microprocessor +#define EM_CRAYNV2 172 // Cray Inc. NV2 vector architecture +#define EM_RX 173 // Renesas RX family +#define EM_METAG 174 // Imagination Technologies META processor architecture +#define EM_MCST_ELBRUS 175 // MCST Elbrus general purpose hardware architecture +#define EM_ECOG16 176 // Cyan Technology eCOG16 family +#define EM_CR16 177 // National Semiconductor CompactRISC 16-bit processor +#define EM_ETPU 178 // Freescale Extended Time Processing Unit +#define EM_SLE9X 179 // Infineon Technologies SLE9X core +#define EM_L1OM 180 // Intel L1OM +#define EM_INTEL181 181 // Reserved by Intel +#define EM_INTEL182 182 // Reserved by Intel +#define EM_res183 183 // Reserved by ARM +#define EM_res184 184 // Reserved by ARM +#define EM_AVR32 185 // Atmel Corporation 32-bit microprocessor family +#define EM_STM8 186 // STMicroeletronics STM8 8-bit microcontroller +#define EM_TILE64 187 // Tilera TILE64 multicore architecture family +#define EM_TILEPRO 188 // Tilera TILEPro multicore architecture family +#define EM_MICROBLAZE 189 // Xilinx MicroBlaze 32-bit RISC soft processor core +#define EM_CUDA 190 // NVIDIA CUDA architecture +#define EM_TILEGX 191 // Tilera TILE-Gx multicore architecture family +#define EM_CLOUDSHIELD 192 // CloudShield architecture family +#define EM_COREA_1ST 193 // KIPO-KAIST Core-A 1st generation processor family +#define EM_COREA_2ND 194 // KIPO-KAIST Core-A 2nd generation processor family +#define EM_ARC_COMPACT2 195 // Synopsys ARCompact V2 +#define EM_OPEN8 196 // Open8 8-bit RISC soft processor core +#define EM_RL78 197 // Renesas RL78 family +#define EM_VIDEOCORE5 198 // Broadcom VideoCore V processor +#define EM_78KOR 199 // Renesas 78KOR family +#define EM_56800EX 200 // Freescale 56800EX Digital Signal Controller (DSC) +#define EM_BA1 201 // Beyond BA1 CPU architecture +#define EM_BA2 202 // Beyond BA2 CPU architecture +#define EM_XCORE 203 // XMOS xCORE processor family +#define EM_MCHP_PIC 204 // Microchip 8-bit PIC(r) family +#define EM_INTEL205 205 // Reserved by Intel +#define EM_INTEL206 206 // Reserved by Intel +#define EM_INTEL207 207 // Reserved by Intel +#define EM_INTEL208 208 // Reserved by Intel +#define EM_INTEL209 209 // Reserved by Intel +#define EM_KM32 210 // KM211 KM32 32-bit processor +#define EM_KMX32 211 // KM211 KMX32 32-bit processor +#define EM_KMX16 212 // KM211 KMX16 16-bit processor +#define EM_KMX8 213 // KM211 KMX8 8-bit processor +#define EM_KVARC 214 // KM211 KVARC processor +#define EM_CDP 215 // Paneve CDP architecture family +#define EM_COGE 216 // Cognitive Smart Memory Processor +#define EM_COOL 217 // iCelero CoolEngine +#define EM_NORC 218 // Nanoradio Optimized RISC +#define EM_CSR_KALIMBA 219 // CSR Kalimba architecture family +#define EM_Z80 220 // Zilog Z80 +#define EM_VISIUM 221 // Controls and Data Services VISIUMcore processor +#define EM_FT32 222 // FTDI Chip FT32 high performance 32-bit RISC architecture +#define EM_MOXIE 223 // Moxie processor family +#define EM_AMDGPU 224 // AMD GPU architecture +#define EM_RISCV 243 // RISC-V +#define EM_LANAI 244 // Lanai processor +#define EM_CEVA 245 // CEVA Processor Architecture Family +#define EM_CEVA_X2 246 // CEVA X2 Processor Family +#define EM_BPF 247 // Linux BPF – in-kernel virtual machine +#define EM_GRAPHCORE_IPU 248 // Graphcore Intelligent Processing Unit +#define EM_IMG1 249 // Imagination Technologies +#define EM_NFP 250 // Netronome Flow Processor (P) +#define EM_CSKY 252 // C-SKY processor family + +// File version +#define EV_NONE 0 +#define EV_CURRENT 1 + +// Identification index +#define EI_MAG0 0 +#define EI_MAG1 1 +#define EI_MAG2 2 +#define EI_MAG3 3 +#define EI_CLASS 4 +#define EI_DATA 5 +#define EI_VERSION 6 +#define EI_OSABI 7 +#define EI_ABIVERSION 8 +#define EI_PAD 9 +#define EI_NIDENT 16 + +// Magic number +#define ELFMAG0 0x7F +#define ELFMAG1 'E' +#define ELFMAG2 'L' +#define ELFMAG3 'F' + +// File class +#define ELFCLASSNONE 0 +#define ELFCLASS32 1 +#define ELFCLASS64 2 + +// Encoding +#define ELFDATANONE 0 +#define ELFDATA2LSB 1 +#define ELFDATA2MSB 2 + +// OS extensions +#define ELFOSABI_NONE 0 // No extensions or unspecified +#define ELFOSABI_HPUX 1 // Hewlett-Packard HP-UX +#define ELFOSABI_NETBSD 2 // NetBSD +#define ELFOSABI_LINUX 3 // Linux +#define ELFOSABI_SOLARIS 6 // Sun Solaris +#define ELFOSABI_AIX 7 // AIX +#define ELFOSABI_IRIX 8 // IRIX +#define ELFOSABI_FREEBSD 9 // FreeBSD +#define ELFOSABI_TRU64 10 // Compaq TRU64 UNIX +#define ELFOSABI_MODESTO 11 // Novell Modesto +#define ELFOSABI_OPENBSD 12 // Open BSD +#define ELFOSABI_OPENVMS 13 // Open VMS +#define ELFOSABI_NSK 14 // Hewlett-Packard Non-Stop Kernel +#define ELFOSABI_AROS 15 // Amiga Research OS +#define ELFOSABI_FENIXOS 16 // The FenixOS highly scalable multi-core OS +// 64-255 Architecture-specific value range +#define ELFOSABI_AMDGPU_HSA \ + 64 // AMDGPU OS for HSA compatible compute // kernels. +#define ELFOSABI_AMDGPU_PAL \ + 65 // AMDGPU OS for AMD PAL compatible graphics // shaders and compute kernels. +#define ELFOSABI_AMDGPU_MESA3D \ + 66 // AMDGPU OS for Mesa3D compatible graphics // shaders and compute kernels. + +// AMDGPU specific e_flags +#define EF_AMDGPU_MACH 0x0ff // AMDGPU processor selection mask. +#define EF_AMDGPU_XNACK \ + 0x100 // Indicates if the XNACK target feature is // enabled for all code contained in the ELF. +// AMDGPU processors +#define EF_AMDGPU_MACH_NONE 0x000 // Unspecified processor. +#define EF_AMDGPU_MACH_R600_R600 0x001 +#define EF_AMDGPU_MACH_R600_R630 0x002 +#define EF_AMDGPU_MACH_R600_RS880 0x003 +#define EF_AMDGPU_MACH_R600_RV670 0x004 +#define EF_AMDGPU_MACH_R600_RV710 0x005 +#define EF_AMDGPU_MACH_R600_RV730 0x006 +#define EF_AMDGPU_MACH_R600_RV770 0x007 +#define EF_AMDGPU_MACH_R600_CEDAR 0x008 +#define EF_AMDGPU_MACH_R600_CYPRESS 0x009 +#define EF_AMDGPU_MACH_R600_JUNIPER 0x00a +#define EF_AMDGPU_MACH_R600_REDWOOD 0x00b +#define EF_AMDGPU_MACH_R600_SUMO 0x00c +#define EF_AMDGPU_MACH_R600_BARTS 0x00d +#define EF_AMDGPU_MACH_R600_CAICOS 0x00e +#define EF_AMDGPU_MACH_R600_CAYMAN 0x00f +#define EF_AMDGPU_MACH_R600_TURKS 0x010 +#define EF_AMDGPU_MACH_R600_RESERVED_FIRST 0x011 +#define EF_AMDGPU_MACH_R600_RESERVED_LAST 0x01f +#define EF_AMDGPU_MACH_R600_FIRST EF_AMDGPU_MACH_R600_R600 +#define EF_AMDGPU_MACH_R600_LAST EF_AMDGPU_MACH_R600_TURKS +#define EF_AMDGPU_MACH_AMDGCN_GFX600 0x020 +#define EF_AMDGPU_MACH_AMDGCN_GFX601 0x021 +#define EF_AMDGPU_MACH_AMDGCN_GFX700 0x022 +#define EF_AMDGPU_MACH_AMDGCN_GFX701 0x023 +#define EF_AMDGPU_MACH_AMDGCN_GFX702 0x024 +#define EF_AMDGPU_MACH_AMDGCN_GFX703 0x025 +#define EF_AMDGPU_MACH_AMDGCN_GFX704 0x026 +#define EF_AMDGPU_MACH_AMDGCN_GFX801 0x028 +#define EF_AMDGPU_MACH_AMDGCN_GFX802 0x029 +#define EF_AMDGPU_MACH_AMDGCN_GFX803 0x02a +#define EF_AMDGPU_MACH_AMDGCN_GFX810 0x02b +#define EF_AMDGPU_MACH_AMDGCN_GFX900 0x02c +#define EF_AMDGPU_MACH_AMDGCN_GFX902 0x02d +#define EF_AMDGPU_MACH_AMDGCN_GFX904 0x02e +#define EF_AMDGPU_MACH_AMDGCN_GFX906 0x02f +#define EF_AMDGPU_MACH_AMDGCN_RESERVED0 0x027 +#define EF_AMDGPU_MACH_AMDGCN_RESERVED1 0x030 +#define EF_AMDGPU_MACH_AMDGCN_FIRST EF_AMDGPU_MACH_AMDGCN_GFX600 +#define EF_AMDGPU_MACH_AMDGCN_LAST EF_AMDGPU_MACH_AMDGCN_GFX906 + +///////////////////// +// Sections constants + +// Section indexes +#define SHN_UNDEF 0 +#define SHN_LORESERVE 0xFF00 +#define SHN_LOPROC 0xFF00 +#define SHN_HIPROC 0xFF1F +#define SHN_LOOS 0xFF20 +#define SHN_HIOS 0xFF3F +#define SHN_ABS 0xFFF1 +#define SHN_COMMON 0xFFF2 +#define SHN_XINDEX 0xFFFF +#define SHN_HIRESERVE 0xFFFF + +// Section types +#define SHT_NULL 0 +#define SHT_PROGBITS 1 +#define SHT_SYMTAB 2 +#define SHT_STRTAB 3 +#define SHT_RELA 4 +#define SHT_HASH 5 +#define SHT_DYNAMIC 6 +#define SHT_NOTE 7 +#define SHT_NOBITS 8 +#define SHT_REL 9 +#define SHT_SHLIB 10 +#define SHT_DYNSYM 11 +#define SHT_INIT_ARRAY 14 +#define SHT_FINI_ARRAY 15 +#define SHT_PREINIT_ARRAY 16 +#define SHT_GROUP 17 +#define SHT_SYMTAB_SHNDX 18 +#define SHT_LOOS 0x60000000 +#define SHT_HIOS 0x6fffffff +#define SHT_LOPROC 0x70000000 +#define SHT_HIPROC 0x7FFFFFFF +#define SHT_LOUSER 0x80000000 +#define SHT_HIUSER 0xFFFFFFFF + +// Section attribute flags +#define SHF_WRITE 0x1 +#define SHF_ALLOC 0x2 +#define SHF_EXECINSTR 0x4 +#define SHF_MERGE 0x10 +#define SHF_STRINGS 0x20 +#define SHF_INFO_LINK 0x40 +#define SHF_LINK_ORDER 0x80 +#define SHF_OS_NONCONFORMING 0x100 +#define SHF_GROUP 0x200 +#define SHF_TLS 0x400 +#define SHF_MASKOS 0x0ff00000 +#define SHF_MASKPROC 0xF0000000 + +// Section group flags +#define GRP_COMDAT 0x1 +#define GRP_MASKOS 0x0ff00000 +#define GRP_MASKPROC 0xf0000000 + +// Symbol binding +#define STB_LOCAL 0 +#define STB_GLOBAL 1 +#define STB_WEAK 2 +#define STB_LOOS 10 +#define STB_HIOS 12 +#define STB_MULTIDEF 13 +#define STB_LOPROC 13 +#define STB_HIPROC 15 + +// Note types +#define NT_AMDGPU_METADATA 1 +#define NT_AMD_AMDGPU_HSA_METADATA 10 +#define NT_AMD_AMDGPU_ISA 11 +#define NT_AMD_AMDGPU_PAL_METADATA 12 + +// Symbol types +#define STT_NOTYPE 0 +#define STT_OBJECT 1 +#define STT_FUNC 2 +#define STT_SECTION 3 +#define STT_FILE 4 +#define STT_COMMON 5 +#define STT_TLS 6 +#define STT_LOOS 10 +#define STT_AMDGPU_HSA_KERNEL 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 + +// Symbol visibility +#define STV_DEFAULT 0 +#define STV_INTERNAL 1 +#define STV_HIDDEN 2 +#define STV_PROTECTED 3 + +// Undefined name +#define STN_UNDEF 0 + +// Relocation types +#define R_386_NONE 0 +#define R_X86_64_NONE 0 +#define R_AMDGPU_NONE 0 +#define R_386_32 1 +#define R_X86_64_64 1 +#define R_AMDGPU_ABS32_LO 1 +#define R_386_PC32 2 +#define R_X86_64_PC32 2 +#define R_AMDGPU_ABS32_HI 2 +#define R_386_GOT32 3 +#define R_X86_64_GOT32 3 +#define R_AMDGPU_ABS64 3 +#define R_386_PLT32 4 +#define R_X86_64_PLT32 4 +#define R_AMDGPU_REL32 4 +#define R_386_COPY 5 +#define R_X86_64_COPY 5 +#define R_AMDGPU_REL64 5 +#define R_386_GLOB_DAT 6 +#define R_X86_64_GLOB_DAT 6 +#define R_AMDGPU_ABS32 6 +#define R_386_JMP_SLOT 7 +#define R_X86_64_JUMP_SLOT 7 +#define R_AMDGPU_GOTPCREL 7 +#define R_386_RELATIVE 8 +#define R_X86_64_RELATIVE 8 +#define R_AMDGPU_GOTPCREL32_LO 8 +#define R_386_GOTOFF 9 +#define R_X86_64_GOTPCREL 9 +#define R_AMDGPU_GOTPCREL32_HI 9 +#define R_386_GOTPC 10 +#define R_X86_64_32 10 +#define R_AMDGPU_REL32_LO 10 +#define R_386_32PLT 11 +#define R_X86_64_32S 11 +#define R_AMDGPU_REL32_HI 11 +#define R_X86_64_16 12 +#define R_X86_64_PC16 13 +#define R_AMDGPU_RELATIVE64 13 +#define R_386_TLS_TPOFF 14 +#define R_X86_64_8 14 +#define R_386_TLS_IE 15 +#define R_X86_64_PC8 15 +#define R_386_TLS_GOTIE 16 +#define R_X86_64_DTPMOD64 16 +#define R_386_TLS_LE 17 +#define R_X86_64_DTPOFF64 17 +#define R_386_TLS_GD 18 +#define R_X86_64_TPOFF64 18 +#define R_386_TLS_LDM 19 +#define R_X86_64_TLSGD 19 +#define R_386_16 20 +#define R_X86_64_TLSLD 20 +#define R_386_PC16 21 +#define R_X86_64_DTPOFF32 21 +#define R_386_8 22 +#define R_X86_64_GOTTPOFF 22 +#define R_386_PC8 23 +#define R_X86_64_TPOFF32 23 +#define R_386_TLS_GD_32 24 +#define R_X86_64_PC64 24 +#define R_386_TLS_GD_PUSH 25 +#define R_X86_64_GOTOFF64 25 +#define R_386_TLS_GD_CALL 26 +#define R_X86_64_GOTPC32 26 +#define R_386_TLS_GD_POP 27 +#define R_X86_64_GOT64 27 +#define R_386_TLS_LDM_32 28 +#define R_X86_64_GOTPCREL64 28 +#define R_386_TLS_LDM_PUSH 29 +#define R_X86_64_GOTPC64 29 +#define R_386_TLS_LDM_CALL 30 +#define R_X86_64_GOTPLT64 30 +#define R_386_TLS_LDM_POP 31 +#define R_X86_64_PLTOFF64 31 +#define R_386_TLS_LDO_32 32 +#define R_386_TLS_IE_32 33 +#define R_386_TLS_LE_32 34 +#define R_X86_64_GOTPC32_TLSDESC 34 +#define R_386_TLS_DTPMOD32 35 +#define R_X86_64_TLSDESC_CALL 35 +#define R_386_TLS_DTPOFF32 36 +#define R_X86_64_TLSDESC 36 +#define R_386_TLS_TPOFF32 37 +#define R_X86_64_IRELATIVE 37 +#define R_386_SIZE32 38 +#define R_386_TLS_GOTDESC 39 +#define R_386_TLS_DESC_CALL 40 +#define R_386_TLS_DESC 41 +#define R_386_IRELATIVE 42 +#define R_386_GOT32X 43 +#define R_X86_64_GNU_VTINHERIT 250 +#define R_X86_64_GNU_VTENTRY 251 + +// Segment types +#define PT_NULL 0 +#define PT_LOAD 1 +#define PT_DYNAMIC 2 +#define PT_INTERP 3 +#define PT_NOTE 4 +#define PT_SHLIB 5 +#define PT_PHDR 6 +#define PT_TLS 7 +#define PT_LOOS 0x60000000 +#define PT_HIOS 0x6fffffff +#define PT_LOPROC 0x70000000 +#define PT_HIPROC 0x7FFFFFFF + +// Segment flags +#define PF_X 1 // Execute +#define PF_W 2 // Write +#define PF_R 4 // Read +#define PF_MASKOS 0x0ff00000 // Unspecified +#define PF_MASKPROC 0xf0000000 // Unspecified + +// Dynamic Array Tags +#define DT_NULL 0 +#define DT_NEEDED 1 +#define DT_PLTRELSZ 2 +#define DT_PLTGOT 3 +#define DT_HASH 4 +#define DT_STRTAB 5 +#define DT_SYMTAB 6 +#define DT_RELA 7 +#define DT_RELASZ 8 +#define DT_RELAENT 9 +#define DT_STRSZ 10 +#define DT_SYMENT 11 +#define DT_INIT 12 +#define DT_FINI 13 +#define DT_SONAME 14 +#define DT_RPATH 15 +#define DT_SYMBOLIC 16 +#define DT_REL 17 +#define DT_RELSZ 18 +#define DT_RELENT 19 +#define DT_PLTREL 20 +#define DT_DEBUG 21 +#define DT_TEXTREL 22 +#define DT_JMPREL 23 +#define DT_BIND_NOW 24 +#define DT_INIT_ARRAY 25 +#define DT_FINI_ARRAY 26 +#define DT_INIT_ARRAYSZ 27 +#define DT_FINI_ARRAYSZ 28 +#define DT_RUNPATH 29 +#define DT_FLAGS 30 +#define DT_ENCODING 32 +#define DT_PREINIT_ARRAY 32 +#define DT_PREINIT_ARRAYSZ 33 +#define DT_MAXPOSTAGS 34 +#define DT_LOOS 0x6000000D +#define DT_HIOS 0x6ffff000 +#define DT_LOPROC 0x70000000 +#define DT_HIPROC 0x7FFFFFFF + +// DT_FLAGS values +#define DF_ORIGIN 0x1 +#define DF_SYMBOLIC 0x2 +#define DF_TEXTREL 0x4 +#define DF_BIND_NOW 0x8 +#define DF_STATIC_TLS 0x10 + +// ELF file header +struct Elf32_Ehdr +{ + unsigned char e_ident[EI_NIDENT]; + Elf_Half e_type; + Elf_Half e_machine; + Elf_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf_Word e_flags; + Elf_Half e_ehsize; + Elf_Half e_phentsize; + Elf_Half e_phnum; + Elf_Half e_shentsize; + Elf_Half e_shnum; + Elf_Half e_shstrndx; +}; + +struct Elf64_Ehdr +{ + unsigned char e_ident[EI_NIDENT]; + Elf_Half e_type; + Elf_Half e_machine; + Elf_Word e_version; + Elf64_Addr e_entry; + Elf64_Off e_phoff; + Elf64_Off e_shoff; + Elf_Word e_flags; + Elf_Half e_ehsize; + Elf_Half e_phentsize; + Elf_Half e_phnum; + Elf_Half e_shentsize; + Elf_Half e_shnum; + Elf_Half e_shstrndx; +}; + +// Section header +struct Elf32_Shdr +{ + Elf_Word sh_name; + Elf_Word sh_type; + Elf_Word sh_flags; + Elf32_Addr sh_addr; + Elf32_Off sh_offset; + Elf_Word sh_size; + Elf_Word sh_link; + Elf_Word sh_info; + Elf_Word sh_addralign; + Elf_Word sh_entsize; +}; + +struct Elf64_Shdr +{ + Elf_Word sh_name; + Elf_Word sh_type; + Elf_Xword sh_flags; + Elf64_Addr sh_addr; + Elf64_Off sh_offset; + Elf_Xword sh_size; + Elf_Word sh_link; + Elf_Word sh_info; + Elf_Xword sh_addralign; + Elf_Xword sh_entsize; +}; + +// Segment header +struct Elf32_Phdr +{ + Elf_Word p_type; + Elf32_Off p_offset; + Elf32_Addr p_vaddr; + Elf32_Addr p_paddr; + Elf_Word p_filesz; + Elf_Word p_memsz; + Elf_Word p_flags; + Elf_Word p_align; +}; + +struct Elf64_Phdr +{ + Elf_Word p_type; + Elf_Word p_flags; + Elf64_Off p_offset; + Elf64_Addr p_vaddr; + Elf64_Addr p_paddr; + Elf_Xword p_filesz; + Elf_Xword p_memsz; + Elf_Xword p_align; +}; + +// Symbol table entry +struct Elf32_Sym +{ + Elf_Word st_name; + Elf32_Addr st_value; + Elf_Word st_size; + unsigned char st_info; + unsigned char st_other; + Elf_Half st_shndx; +}; + +struct Elf64_Sym +{ + Elf_Word st_name; + unsigned char st_info; + unsigned char st_other; + Elf_Half st_shndx; + Elf64_Addr st_value; + Elf_Xword st_size; +}; + +#define ELF_ST_BIND( i ) ( ( i ) >> 4 ) +#define ELF_ST_TYPE( i ) ( (i)&0xf ) +#define ELF_ST_INFO( b, t ) ( ( ( b ) << 4 ) + ( (t)&0xf ) ) + +#define ELF_ST_VISIBILITY( o ) ( (o)&0x3 ) + +// Relocation entries +struct Elf32_Rel +{ + Elf32_Addr r_offset; + Elf_Word r_info; +}; + +struct Elf32_Rela +{ + Elf32_Addr r_offset; + Elf_Word r_info; + Elf_Sword r_addend; +}; + +struct Elf64_Rel +{ + Elf64_Addr r_offset; + Elf_Xword r_info; +}; + +struct Elf64_Rela +{ + Elf64_Addr r_offset; + Elf_Xword r_info; + Elf_Sxword r_addend; +}; + +#define ELF32_R_SYM( i ) ( ( i ) >> 8 ) +#define ELF32_R_TYPE( i ) ( (unsigned char)( i ) ) +#define ELF32_R_INFO( s, t ) ( ( ( s ) << 8 ) + (unsigned char)( t ) ) + +#define ELF64_R_SYM( i ) ( ( i ) >> 32 ) +#define ELF64_R_TYPE( i ) ( (i)&0xffffffffL ) +#define ELF64_R_INFO( s, t ) \ + ( ( ( ( int64_t )( s ) ) << 32 ) + ( (t)&0xffffffffL ) ) + +// Dynamic structure +struct Elf32_Dyn +{ + Elf_Sword d_tag; + union { + Elf_Word d_val; + Elf32_Addr d_ptr; + } d_un; +}; + +struct Elf64_Dyn +{ + Elf_Sxword d_tag; + union { + Elf_Xword d_val; + Elf64_Addr d_ptr; + } d_un; +}; + +} // namespace ELFIO + +#endif // ELFTYPES_H + +/*** End of inlined file: elf_types.hpp ***/ + + +/*** Start of inlined file: elfio_version.hpp ***/ +#define ELFIO_VERSION "3.8" + +/*** End of inlined file: elfio_version.hpp ***/ + + +/*** Start of inlined file: elfio_utils.hpp ***/ +#ifndef ELFIO_UTILS_HPP +#define ELFIO_UTILS_HPP + +#define ELFIO_GET_ACCESS( TYPE, NAME, FIELD ) \ + TYPE get_##NAME() const { return ( *convertor )( FIELD ); } +#define ELFIO_SET_ACCESS( TYPE, NAME, FIELD ) \ + void set_##NAME( TYPE value ) \ + { \ + FIELD = value; \ + FIELD = ( *convertor )( FIELD ); \ + } +#define ELFIO_GET_SET_ACCESS( TYPE, NAME, FIELD ) \ + TYPE get_##NAME() const { return ( *convertor )( FIELD ); } \ + void set_##NAME( TYPE value ) \ + { \ + FIELD = value; \ + FIELD = ( *convertor )( FIELD ); \ + } + +#define ELFIO_GET_ACCESS_DECL( TYPE, NAME ) virtual TYPE get_##NAME() const = 0 + +#define ELFIO_SET_ACCESS_DECL( TYPE, NAME ) \ + virtual void set_##NAME( TYPE value ) = 0 + +#define ELFIO_GET_SET_ACCESS_DECL( TYPE, NAME ) \ + virtual TYPE get_##NAME() const = 0; \ + virtual void set_##NAME( TYPE value ) = 0 + +namespace ELFIO { + +//------------------------------------------------------------------------------ +class endianess_convertor +{ + public: + //------------------------------------------------------------------------------ + endianess_convertor() { need_conversion = false; } + + //------------------------------------------------------------------------------ + void setup( unsigned char elf_file_encoding ) + { + need_conversion = ( elf_file_encoding != get_host_encoding() ); + } + + //------------------------------------------------------------------------------ + uint64_t operator()( uint64_t value ) const + { + if ( !need_conversion ) { + return value; + } + value = ( ( value & 0x00000000000000FFull ) << 56 ) | + ( ( value & 0x000000000000FF00ull ) << 40 ) | + ( ( value & 0x0000000000FF0000ull ) << 24 ) | + ( ( value & 0x00000000FF000000ull ) << 8 ) | + ( ( value & 0x000000FF00000000ull ) >> 8 ) | + ( ( value & 0x0000FF0000000000ull ) >> 24 ) | + ( ( value & 0x00FF000000000000ull ) >> 40 ) | + ( ( value & 0xFF00000000000000ull ) >> 56 ); + + return value; + } + + //------------------------------------------------------------------------------ + int64_t operator()( int64_t value ) const + { + if ( !need_conversion ) { + return value; + } + return ( int64_t )( *this )( (uint64_t)value ); + } + + //------------------------------------------------------------------------------ + uint32_t operator()( uint32_t value ) const + { + if ( !need_conversion ) { + return value; + } + value = + ( ( value & 0x000000FF ) << 24 ) | ( ( value & 0x0000FF00 ) << 8 ) | + ( ( value & 0x00FF0000 ) >> 8 ) | ( ( value & 0xFF000000 ) >> 24 ); + + return value; + } + + //------------------------------------------------------------------------------ + int32_t operator()( int32_t value ) const + { + if ( !need_conversion ) { + return value; + } + return ( int32_t )( *this )( (uint32_t)value ); + } + + //------------------------------------------------------------------------------ + uint16_t operator()( uint16_t value ) const + { + if ( !need_conversion ) { + return value; + } + value = ( ( value & 0x00FF ) << 8 ) | ( ( value & 0xFF00 ) >> 8 ); + + return value; + } + + //------------------------------------------------------------------------------ + int16_t operator()( int16_t value ) const + { + if ( !need_conversion ) { + return value; + } + return ( int16_t )( *this )( (uint16_t)value ); + } + + //------------------------------------------------------------------------------ + int8_t operator()( int8_t value ) const { return value; } + + //------------------------------------------------------------------------------ + uint8_t operator()( uint8_t value ) const { return value; } + + //------------------------------------------------------------------------------ + private: + //------------------------------------------------------------------------------ + unsigned char get_host_encoding() const + { + static const int tmp = 1; + if ( 1 == *(const char*)&tmp ) { + return ELFDATA2LSB; + } + else { + return ELFDATA2MSB; + } + } + + //------------------------------------------------------------------------------ + private: + bool need_conversion; +}; + +//------------------------------------------------------------------------------ +inline uint32_t elf_hash( const unsigned char* name ) +{ + uint32_t h = 0, g; + while ( *name ) { + h = ( h << 4 ) + *name++; + g = h & 0xf0000000; + if ( g != 0 ) + h ^= g >> 24; + h &= ~g; + } + return h; +} + +} // namespace ELFIO + +#endif // ELFIO_UTILS_HPP + +/*** End of inlined file: elfio_utils.hpp ***/ + + +/*** Start of inlined file: elfio_header.hpp ***/ +#ifndef ELF_HEADER_HPP +#define ELF_HEADER_HPP + +#include + +namespace ELFIO { + +class elf_header +{ + public: + virtual ~elf_header(){}; + virtual bool load( std::istream& stream ) = 0; + virtual bool save( std::ostream& stream ) const = 0; + + // ELF header functions + ELFIO_GET_ACCESS_DECL( unsigned char, class ); + ELFIO_GET_ACCESS_DECL( unsigned char, elf_version ); + ELFIO_GET_ACCESS_DECL( unsigned char, encoding ); + ELFIO_GET_ACCESS_DECL( Elf_Half, header_size ); + ELFIO_GET_ACCESS_DECL( Elf_Half, section_entry_size ); + ELFIO_GET_ACCESS_DECL( Elf_Half, segment_entry_size ); + + ELFIO_GET_SET_ACCESS_DECL( Elf_Word, version ); + ELFIO_GET_SET_ACCESS_DECL( unsigned char, os_abi ); + ELFIO_GET_SET_ACCESS_DECL( unsigned char, abi_version ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Half, type ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Half, machine ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags ); + ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, entry ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Half, sections_num ); + ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, sections_offset ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Half, segments_num ); + ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, segments_offset ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Half, section_name_str_index ); +}; + +template struct elf_header_impl_types; +template <> struct elf_header_impl_types +{ + typedef Elf32_Phdr Phdr_type; + typedef Elf32_Shdr Shdr_type; + static const unsigned char file_class = ELFCLASS32; +}; +template <> struct elf_header_impl_types +{ + typedef Elf64_Phdr Phdr_type; + typedef Elf64_Shdr Shdr_type; + static const unsigned char file_class = ELFCLASS64; +}; + +template class elf_header_impl : public elf_header +{ + public: + //------------------------------------------------------------------------------ + elf_header_impl( endianess_convertor* convertor_, unsigned char encoding ) + { + convertor = convertor_; + + std::fill_n( reinterpret_cast( &header ), sizeof( header ), + '\0' ); + + header.e_ident[EI_MAG0] = ELFMAG0; + header.e_ident[EI_MAG1] = ELFMAG1; + header.e_ident[EI_MAG2] = ELFMAG2; + header.e_ident[EI_MAG3] = ELFMAG3; + header.e_ident[EI_CLASS] = elf_header_impl_types::file_class; + header.e_ident[EI_DATA] = encoding; + header.e_ident[EI_VERSION] = EV_CURRENT; + header.e_version = ( *convertor )( (Elf_Word)EV_CURRENT ); + header.e_ehsize = ( sizeof( header ) ); + header.e_ehsize = ( *convertor )( header.e_ehsize ); + header.e_shstrndx = ( *convertor )( (Elf_Half)1 ); + header.e_phentsize = + sizeof( typename elf_header_impl_types::Phdr_type ); + header.e_shentsize = + sizeof( typename elf_header_impl_types::Shdr_type ); + header.e_phentsize = ( *convertor )( header.e_phentsize ); + header.e_shentsize = ( *convertor )( header.e_shentsize ); + } + + //------------------------------------------------------------------------------ + bool load( std::istream& stream ) + { + stream.seekg( 0 ); + stream.read( reinterpret_cast( &header ), sizeof( header ) ); + + return ( stream.gcount() == sizeof( header ) ); + } + + //------------------------------------------------------------------------------ + bool save( std::ostream& stream ) const + { + stream.seekp( 0 ); + stream.write( reinterpret_cast( &header ), + sizeof( header ) ); + + return stream.good(); + } + + //------------------------------------------------------------------------------ + // ELF header functions + ELFIO_GET_ACCESS( unsigned char, class, header.e_ident[EI_CLASS] ); + ELFIO_GET_ACCESS( unsigned char, elf_version, header.e_ident[EI_VERSION] ); + ELFIO_GET_ACCESS( unsigned char, encoding, header.e_ident[EI_DATA] ); + ELFIO_GET_ACCESS( Elf_Half, header_size, header.e_ehsize ); + ELFIO_GET_ACCESS( Elf_Half, section_entry_size, header.e_shentsize ); + ELFIO_GET_ACCESS( Elf_Half, segment_entry_size, header.e_phentsize ); + + ELFIO_GET_SET_ACCESS( Elf_Word, version, header.e_version ); + ELFIO_GET_SET_ACCESS( unsigned char, os_abi, header.e_ident[EI_OSABI] ); + ELFIO_GET_SET_ACCESS( unsigned char, + abi_version, + header.e_ident[EI_ABIVERSION] ); + ELFIO_GET_SET_ACCESS( Elf_Half, type, header.e_type ); + ELFIO_GET_SET_ACCESS( Elf_Half, machine, header.e_machine ); + ELFIO_GET_SET_ACCESS( Elf_Word, flags, header.e_flags ); + ELFIO_GET_SET_ACCESS( Elf_Half, section_name_str_index, header.e_shstrndx ); + ELFIO_GET_SET_ACCESS( Elf64_Addr, entry, header.e_entry ); + ELFIO_GET_SET_ACCESS( Elf_Half, sections_num, header.e_shnum ); + ELFIO_GET_SET_ACCESS( Elf64_Off, sections_offset, header.e_shoff ); + ELFIO_GET_SET_ACCESS( Elf_Half, segments_num, header.e_phnum ); + ELFIO_GET_SET_ACCESS( Elf64_Off, segments_offset, header.e_phoff ); + + private: + T header; + endianess_convertor* convertor; +}; + +} // namespace ELFIO + +#endif // ELF_HEADER_HPP + +/*** End of inlined file: elfio_header.hpp ***/ + + +/*** Start of inlined file: elfio_section.hpp ***/ +#ifndef ELFIO_SECTION_HPP +#define ELFIO_SECTION_HPP + +#include +#include +#include + +namespace ELFIO { + +class section +{ + friend class elfio; + + public: + virtual ~section(){}; + + ELFIO_GET_ACCESS_DECL( Elf_Half, index ); + ELFIO_GET_SET_ACCESS_DECL( std::string, name ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, flags ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Word, info ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Word, link ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, addr_align ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, entry_size ); + ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, address ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, size ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Word, name_string_offset ); + ELFIO_GET_ACCESS_DECL( Elf64_Off, offset ); + + virtual const char* get_data() const = 0; + virtual void set_data( const char* pData, Elf_Word size ) = 0; + virtual void set_data( const std::string& data ) = 0; + virtual void append_data( const char* pData, Elf_Word size ) = 0; + virtual void append_data( const std::string& data ) = 0; + virtual size_t get_stream_size() const = 0; + virtual void set_stream_size( size_t value ) = 0; + + protected: + ELFIO_SET_ACCESS_DECL( Elf64_Off, offset ); + ELFIO_SET_ACCESS_DECL( Elf_Half, index ); + + virtual void load( std::istream& stream, std::streampos header_offset ) = 0; + virtual void save( std::ostream& stream, + std::streampos header_offset, + std::streampos data_offset ) = 0; + virtual bool is_address_initialized() const = 0; +}; + +template class section_impl : public section +{ + public: + //------------------------------------------------------------------------------ + section_impl( const endianess_convertor* convertor_ ) + : convertor( convertor_ ) + { + std::fill_n( reinterpret_cast( &header ), sizeof( header ), + '\0' ); + is_address_set = false; + data = 0; + data_size = 0; + index = 0; + stream_size = 0; + } + + //------------------------------------------------------------------------------ + ~section_impl() { delete[] data; } + + //------------------------------------------------------------------------------ + // Section info functions + ELFIO_GET_SET_ACCESS( Elf_Word, type, header.sh_type ); + ELFIO_GET_SET_ACCESS( Elf_Xword, flags, header.sh_flags ); + ELFIO_GET_SET_ACCESS( Elf_Xword, size, header.sh_size ); + ELFIO_GET_SET_ACCESS( Elf_Word, link, header.sh_link ); + ELFIO_GET_SET_ACCESS( Elf_Word, info, header.sh_info ); + ELFIO_GET_SET_ACCESS( Elf_Xword, addr_align, header.sh_addralign ); + ELFIO_GET_SET_ACCESS( Elf_Xword, entry_size, header.sh_entsize ); + ELFIO_GET_SET_ACCESS( Elf_Word, name_string_offset, header.sh_name ); + ELFIO_GET_ACCESS( Elf64_Addr, address, header.sh_addr ); + + //------------------------------------------------------------------------------ + Elf_Half get_index() const { return index; } + + //------------------------------------------------------------------------------ + std::string get_name() const { return name; } + + //------------------------------------------------------------------------------ + void set_name( std::string name_ ) { name = name_; } + + //------------------------------------------------------------------------------ + void set_address( Elf64_Addr value ) + { + header.sh_addr = value; + header.sh_addr = ( *convertor )( header.sh_addr ); + is_address_set = true; + } + + //------------------------------------------------------------------------------ + bool is_address_initialized() const { return is_address_set; } + + //------------------------------------------------------------------------------ + const char* get_data() const { return data; } + + //------------------------------------------------------------------------------ + void set_data( const char* raw_data, Elf_Word size ) + { + if ( get_type() != SHT_NOBITS ) { + delete[] data; + data = new ( std::nothrow ) char[size]; + if ( 0 != data && 0 != raw_data ) { + data_size = size; + std::copy( raw_data, raw_data + size, data ); + } + else { + data_size = 0; + } + } + + set_size( data_size ); + } + + //------------------------------------------------------------------------------ + void set_data( const std::string& str_data ) + { + return set_data( str_data.c_str(), (Elf_Word)str_data.size() ); + } + + //------------------------------------------------------------------------------ + void append_data( const char* raw_data, Elf_Word size ) + { + if ( get_type() != SHT_NOBITS ) { + if ( get_size() + size < data_size ) { + std::copy( raw_data, raw_data + size, data + get_size() ); + } + else { + data_size = 2 * ( data_size + size ); + char* new_data = new ( std::nothrow ) char[data_size]; + + if ( 0 != new_data ) { + std::copy( data, data + get_size(), new_data ); + std::copy( raw_data, raw_data + size, + new_data + get_size() ); + delete[] data; + data = new_data; + } + else { + size = 0; + } + } + set_size( get_size() + size ); + } + } + + //------------------------------------------------------------------------------ + void append_data( const std::string& str_data ) + { + return append_data( str_data.c_str(), (Elf_Word)str_data.size() ); + } + + //------------------------------------------------------------------------------ + protected: + //------------------------------------------------------------------------------ + ELFIO_GET_SET_ACCESS( Elf64_Off, offset, header.sh_offset ); + + //------------------------------------------------------------------------------ + void set_index( Elf_Half value ) { index = value; } + + //------------------------------------------------------------------------------ + void load( std::istream& stream, std::streampos header_offset ) + { + std::fill_n( reinterpret_cast( &header ), sizeof( header ), + '\0' ); + + stream.seekg( 0, stream.end ); + set_stream_size( stream.tellg() ); + + stream.seekg( header_offset ); + stream.read( reinterpret_cast( &header ), sizeof( header ) ); + + Elf_Xword size = get_size(); + if ( 0 == data && SHT_NULL != get_type() && SHT_NOBITS != get_type() && + size < get_stream_size() ) { + data = new ( std::nothrow ) char[size + 1]; + + if ( ( 0 != size ) && ( 0 != data ) ) { + stream.seekg( ( *convertor )( header.sh_offset ) ); + stream.read( data, size ); + data[size] = 0; // Ensure data is ended with 0 to avoid oob read + data_size = size; + } + else { + data_size = 0; + } + } + } + + //------------------------------------------------------------------------------ + void save( std::ostream& stream, + std::streampos header_offset, + std::streampos data_offset ) + { + if ( 0 != get_index() ) { + header.sh_offset = data_offset; + header.sh_offset = ( *convertor )( header.sh_offset ); + } + + save_header( stream, header_offset ); + if ( get_type() != SHT_NOBITS && get_type() != SHT_NULL && + get_size() != 0 && data != 0 ) { + save_data( stream, data_offset ); + } + } + + //------------------------------------------------------------------------------ + private: + //------------------------------------------------------------------------------ + void save_header( std::ostream& stream, std::streampos header_offset ) const + { + stream.seekp( header_offset ); + stream.write( reinterpret_cast( &header ), + sizeof( header ) ); + } + + //------------------------------------------------------------------------------ + void save_data( std::ostream& stream, std::streampos data_offset ) const + { + stream.seekp( data_offset ); + stream.write( get_data(), get_size() ); + } + + //------------------------------------------------------------------------------ + size_t get_stream_size() const { return stream_size; } + + //------------------------------------------------------------------------------ + void set_stream_size( size_t value ) { stream_size = value; } + + //------------------------------------------------------------------------------ + private: + T header; + Elf_Half index; + std::string name; + char* data; + Elf_Word data_size; + const endianess_convertor* convertor; + bool is_address_set; + size_t stream_size; +}; + +} // namespace ELFIO + +#endif // ELFIO_SECTION_HPP + +/*** End of inlined file: elfio_section.hpp ***/ + + +/*** Start of inlined file: elfio_segment.hpp ***/ +#ifndef ELFIO_SEGMENT_HPP +#define ELFIO_SEGMENT_HPP + +#include +#include +#include + +namespace ELFIO { + +class segment +{ + friend class elfio; + + public: + virtual ~segment(){}; + + ELFIO_GET_ACCESS_DECL( Elf_Half, index ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, align ); + ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, virtual_address ); + ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, physical_address ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, file_size ); + ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, memory_size ); + ELFIO_GET_ACCESS_DECL( Elf64_Off, offset ); + + virtual const char* get_data() const = 0; + + virtual Elf_Half add_section_index( Elf_Half index, + Elf_Xword addr_align ) = 0; + virtual Elf_Half get_sections_num() const = 0; + virtual Elf_Half get_section_index_at( Elf_Half num ) const = 0; + virtual bool is_offset_initialized() const = 0; + + protected: + ELFIO_SET_ACCESS_DECL( Elf64_Off, offset ); + ELFIO_SET_ACCESS_DECL( Elf_Half, index ); + + virtual const std::vector& get_sections() const = 0; + virtual void load( std::istream& stream, std::streampos header_offset ) = 0; + virtual void save( std::ostream& stream, + std::streampos header_offset, + std::streampos data_offset ) = 0; +}; + +//------------------------------------------------------------------------------ +template class segment_impl : public segment +{ + public: + //------------------------------------------------------------------------------ + segment_impl( endianess_convertor* convertor_ ) + : stream_size( 0 ), index( 0 ), data( 0 ), convertor( convertor_ ) + { + is_offset_set = false; + std::fill_n( reinterpret_cast( &ph ), sizeof( ph ), '\0' ); + } + + //------------------------------------------------------------------------------ + virtual ~segment_impl() { delete[] data; } + + //------------------------------------------------------------------------------ + // Section info functions + ELFIO_GET_SET_ACCESS( Elf_Word, type, ph.p_type ); + ELFIO_GET_SET_ACCESS( Elf_Word, flags, ph.p_flags ); + ELFIO_GET_SET_ACCESS( Elf_Xword, align, ph.p_align ); + ELFIO_GET_SET_ACCESS( Elf64_Addr, virtual_address, ph.p_vaddr ); + ELFIO_GET_SET_ACCESS( Elf64_Addr, physical_address, ph.p_paddr ); + ELFIO_GET_SET_ACCESS( Elf_Xword, file_size, ph.p_filesz ); + ELFIO_GET_SET_ACCESS( Elf_Xword, memory_size, ph.p_memsz ); + ELFIO_GET_ACCESS( Elf64_Off, offset, ph.p_offset ); + size_t stream_size; + + //------------------------------------------------------------------------------ + size_t get_stream_size() const { return stream_size; } + + //------------------------------------------------------------------------------ + void set_stream_size( size_t value ) { stream_size = value; } + + //------------------------------------------------------------------------------ + Elf_Half get_index() const { return index; } + + //------------------------------------------------------------------------------ + const char* get_data() const { return data; } + + //------------------------------------------------------------------------------ + Elf_Half add_section_index( Elf_Half sec_index, Elf_Xword addr_align ) + { + sections.push_back( sec_index ); + if ( addr_align > get_align() ) { + set_align( addr_align ); + } + + return (Elf_Half)sections.size(); + } + + //------------------------------------------------------------------------------ + Elf_Half get_sections_num() const { return (Elf_Half)sections.size(); } + + //------------------------------------------------------------------------------ + Elf_Half get_section_index_at( Elf_Half num ) const + { + if ( num < sections.size() ) { + return sections[num]; + } + + return Elf_Half( -1 ); + } + + //------------------------------------------------------------------------------ + protected: + //------------------------------------------------------------------------------ + + //------------------------------------------------------------------------------ + void set_offset( Elf64_Off value ) + { + ph.p_offset = value; + ph.p_offset = ( *convertor )( ph.p_offset ); + is_offset_set = true; + } + + //------------------------------------------------------------------------------ + bool is_offset_initialized() const { return is_offset_set; } + + //------------------------------------------------------------------------------ + const std::vector& get_sections() const { return sections; } + + //------------------------------------------------------------------------------ + void set_index( Elf_Half value ) { index = value; } + + //------------------------------------------------------------------------------ + void load( std::istream& stream, std::streampos header_offset ) + { + + stream.seekg( 0, stream.end ); + set_stream_size( stream.tellg() ); + + stream.seekg( header_offset ); + stream.read( reinterpret_cast( &ph ), sizeof( ph ) ); + is_offset_set = true; + + if ( PT_NULL != get_type() && 0 != get_file_size() ) { + stream.seekg( ( *convertor )( ph.p_offset ) ); + Elf_Xword size = get_file_size(); + + if ( size > get_stream_size() ) { + data = 0; + } + else { + data = new (std::nothrow) char[size + 1]; + + if ( 0 != data ) { + stream.read( data, size ); + data[size] = 0; + } + } + } + } + + //------------------------------------------------------------------------------ + void save( std::ostream& stream, + std::streampos header_offset, + std::streampos data_offset ) + { + ph.p_offset = data_offset; + ph.p_offset = ( *convertor )( ph.p_offset ); + stream.seekp( header_offset ); + stream.write( reinterpret_cast( &ph ), sizeof( ph ) ); + } + + //------------------------------------------------------------------------------ + private: + T ph; + Elf_Half index; + char* data; + std::vector sections; + endianess_convertor* convertor; + bool is_offset_set; +}; + +} // namespace ELFIO + +#endif // ELFIO_SEGMENT_HPP + +/*** End of inlined file: elfio_segment.hpp ***/ + + +/*** Start of inlined file: elfio_strings.hpp ***/ +#ifndef ELFIO_STRINGS_HPP +#define ELFIO_STRINGS_HPP + +#include +#include +#include + +namespace ELFIO { + +//------------------------------------------------------------------------------ +template class string_section_accessor_template +{ + public: + //------------------------------------------------------------------------------ + string_section_accessor_template( S* section_ ) : string_section( section_ ) + { + } + + //------------------------------------------------------------------------------ + const char* get_string( Elf_Word index ) const + { + if ( string_section ) { + if ( index < string_section->get_size() ) { + const char* data = string_section->get_data(); + if ( 0 != data ) { + return data + index; + } + } + } + + return 0; + } + + //------------------------------------------------------------------------------ + Elf_Word add_string( const char* str ) + { + Elf_Word current_position = 0; + + if ( string_section ) { + // Strings are addeded to the end of the current section data + current_position = (Elf_Word)string_section->get_size(); + + if ( current_position == 0 ) { + char empty_string = '\0'; + string_section->append_data( &empty_string, 1 ); + current_position++; + } + string_section->append_data( str, + (Elf_Word)std::strlen( str ) + 1 ); + } + + return current_position; + } + + //------------------------------------------------------------------------------ + Elf_Word add_string( const std::string& str ) + { + return add_string( str.c_str() ); + } + + //------------------------------------------------------------------------------ + private: + S* string_section; +}; + +using string_section_accessor = string_section_accessor_template
; +using const_string_section_accessor = + string_section_accessor_template; + +} // namespace ELFIO + +#endif // ELFIO_STRINGS_HPP + +/*** End of inlined file: elfio_strings.hpp ***/ + +#define ELFIO_HEADER_ACCESS_GET( TYPE, FNAME ) \ + TYPE get_##FNAME() const { return header ? ( header->get_##FNAME() ) : 0; } + +#define ELFIO_HEADER_ACCESS_GET_SET( TYPE, FNAME ) \ + TYPE get_##FNAME() const \ + { \ + return header ? ( header->get_##FNAME() ) : 0; \ + } \ + void set_##FNAME( TYPE val ) \ + { \ + if ( header ) { \ + header->set_##FNAME( val ); \ + } \ + } + +namespace ELFIO { + +//------------------------------------------------------------------------------ +class elfio +{ + public: + //------------------------------------------------------------------------------ + elfio() : sections( this ), segments( this ) + { + header = 0; + current_file_pos = 0; + create( ELFCLASS32, ELFDATA2LSB ); + } + + //------------------------------------------------------------------------------ + ~elfio() { clean(); } + + //------------------------------------------------------------------------------ + void create( unsigned char file_class, unsigned char encoding ) + { + clean(); + convertor.setup( encoding ); + header = create_header( file_class, encoding ); + create_mandatory_sections(); + } + + //------------------------------------------------------------------------------ + bool load( const std::string& file_name ) + { + std::ifstream stream; + stream.open( file_name.c_str(), std::ios::in | std::ios::binary ); + if ( !stream ) { + return false; + } + + return load( stream ); + } + + //------------------------------------------------------------------------------ + bool load( std::istream& stream ) + { + clean(); + + unsigned char e_ident[EI_NIDENT]; + // Read ELF file signature + stream.read( reinterpret_cast( &e_ident ), sizeof( e_ident ) ); + + // Is it ELF file? + if ( stream.gcount() != sizeof( e_ident ) || + e_ident[EI_MAG0] != ELFMAG0 || e_ident[EI_MAG1] != ELFMAG1 || + e_ident[EI_MAG2] != ELFMAG2 || e_ident[EI_MAG3] != ELFMAG3 ) { + return false; + } + + if ( ( e_ident[EI_CLASS] != ELFCLASS64 ) && + ( e_ident[EI_CLASS] != ELFCLASS32 ) ) { + return false; + } + + convertor.setup( e_ident[EI_DATA] ); + header = create_header( e_ident[EI_CLASS], e_ident[EI_DATA] ); + if ( 0 == header ) { + return false; + } + if ( !header->load( stream ) ) { + return false; + } + + load_sections( stream ); + bool is_still_good = load_segments( stream ); + return is_still_good; + } + + //------------------------------------------------------------------------------ + bool save( const std::string& file_name ) + { + std::ofstream stream; + stream.open( file_name.c_str(), std::ios::out | std::ios::binary ); + if ( !stream ) { + return false; + } + + return save( stream ); + } + + //------------------------------------------------------------------------------ + bool save( std::ostream& stream ) + { + if ( !stream || !header ) { + return false; + } + + bool is_still_good = true; + // Define layout specific header fields + // The position of the segment table is fixed after the header. + // The position of the section table is variable and needs to be fixed + // before saving. + header->set_segments_num( segments.size() ); + header->set_segments_offset( segments.size() ? header->get_header_size() + : 0 ); + header->set_sections_num( sections.size() ); + header->set_sections_offset( 0 ); + + // Layout the first section right after the segment table + current_file_pos = header->get_header_size() + + header->get_segment_entry_size() * + (Elf_Xword)header->get_segments_num(); + + calc_segment_alignment(); + + is_still_good = layout_segments_and_their_sections(); + is_still_good = is_still_good && layout_sections_without_segments(); + is_still_good = is_still_good && layout_section_table(); + + is_still_good = is_still_good && save_header( stream ); + is_still_good = is_still_good && save_sections( stream ); + is_still_good = is_still_good && save_segments( stream ); + + return is_still_good; + } + + //------------------------------------------------------------------------------ + // ELF header access functions + ELFIO_HEADER_ACCESS_GET( unsigned char, class ); + ELFIO_HEADER_ACCESS_GET( unsigned char, elf_version ); + ELFIO_HEADER_ACCESS_GET( unsigned char, encoding ); + ELFIO_HEADER_ACCESS_GET( Elf_Word, version ); + ELFIO_HEADER_ACCESS_GET( Elf_Half, header_size ); + ELFIO_HEADER_ACCESS_GET( Elf_Half, section_entry_size ); + ELFIO_HEADER_ACCESS_GET( Elf_Half, segment_entry_size ); + + ELFIO_HEADER_ACCESS_GET_SET( unsigned char, os_abi ); + ELFIO_HEADER_ACCESS_GET_SET( unsigned char, abi_version ); + ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, type ); + ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, machine ); + ELFIO_HEADER_ACCESS_GET_SET( Elf_Word, flags ); + ELFIO_HEADER_ACCESS_GET_SET( Elf64_Addr, entry ); + ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, sections_offset ); + ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, segments_offset ); + ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, section_name_str_index ); + + //------------------------------------------------------------------------------ + const endianess_convertor& get_convertor() const { return convertor; } + + //------------------------------------------------------------------------------ + Elf_Xword get_default_entry_size( Elf_Word section_type ) const + { + switch ( section_type ) { + case SHT_RELA: + if ( header->get_class() == ELFCLASS64 ) { + return sizeof( Elf64_Rela ); + } + else { + return sizeof( Elf32_Rela ); + } + case SHT_REL: + if ( header->get_class() == ELFCLASS64 ) { + return sizeof( Elf64_Rel ); + } + else { + return sizeof( Elf32_Rel ); + } + case SHT_SYMTAB: + if ( header->get_class() == ELFCLASS64 ) { + return sizeof( Elf64_Sym ); + } + else { + return sizeof( Elf32_Sym ); + } + case SHT_DYNAMIC: + if ( header->get_class() == ELFCLASS64 ) { + return sizeof( Elf64_Dyn ); + } + else { + return sizeof( Elf32_Dyn ); + } + default: + return 0; + } + } + + //------------------------------------------------------------------------------ + private: + bool is_offset_in_section( Elf64_Off offset, const section* sec ) const + { + return ( offset >= sec->get_offset() ) && + ( offset < ( sec->get_offset() + sec->get_size() ) ); + } + + //------------------------------------------------------------------------------ + public: + //! returns an empty string if no problems are detected, + //! or a string containing an error message if problems are found + std::string validate() const + { + + // check for overlapping sections in the file + for ( int i = 0; i < sections.size(); ++i ) { + for ( int j = i + 1; j < sections.size(); ++j ) { + const section* a = sections[i]; + const section* b = sections[j]; + if ( !( a->get_type() & SHT_NOBITS ) && + !( b->get_type() & SHT_NOBITS ) && ( a->get_size() > 0 ) && + ( b->get_size() > 0 ) && ( a->get_offset() > 0 ) && + ( b->get_offset() > 0 ) ) { + if ( is_offset_in_section( a->get_offset(), b ) || + is_offset_in_section( + a->get_offset() + a->get_size() - 1, b ) || + is_offset_in_section( b->get_offset(), a ) || + is_offset_in_section( + b->get_offset() + b->get_size() - 1, a ) ) { + return "Sections " + a->get_name() + " and " + + b->get_name() + " overlap in file"; + } + } + } + } + + // more checks to be added here... + + return ""; + } + + //------------------------------------------------------------------------------ + private: + //------------------------------------------------------------------------------ + void clean() + { + delete header; + header = 0; + + std::vector::const_iterator it; + for ( it = sections_.begin(); it != sections_.end(); ++it ) { + delete *it; + } + sections_.clear(); + + std::vector::const_iterator it1; + for ( it1 = segments_.begin(); it1 != segments_.end(); ++it1 ) { + delete *it1; + } + segments_.clear(); + } + + //------------------------------------------------------------------------------ + elf_header* create_header( unsigned char file_class, + unsigned char encoding ) + { + elf_header* new_header = 0; + + if ( file_class == ELFCLASS64 ) { + new_header = + new elf_header_impl( &convertor, encoding ); + } + else if ( file_class == ELFCLASS32 ) { + new_header = + new elf_header_impl( &convertor, encoding ); + } + else { + return 0; + } + + return new_header; + } + + //------------------------------------------------------------------------------ + section* create_section() + { + section* new_section; + unsigned char file_class = get_class(); + + if ( file_class == ELFCLASS64 ) { + new_section = new section_impl( &convertor ); + } + else if ( file_class == ELFCLASS32 ) { + new_section = new section_impl( &convertor ); + } + else { + return 0; + } + + new_section->set_index( (Elf_Half)sections_.size() ); + sections_.push_back( new_section ); + + return new_section; + } + + //------------------------------------------------------------------------------ + segment* create_segment() + { + segment* new_segment; + unsigned char file_class = header->get_class(); + + if ( file_class == ELFCLASS64 ) { + new_segment = new segment_impl( &convertor ); + } + else if ( file_class == ELFCLASS32 ) { + new_segment = new segment_impl( &convertor ); + } + else { + return 0; + } + + new_segment->set_index( (Elf_Half)segments_.size() ); + segments_.push_back( new_segment ); + + return new_segment; + } + + //------------------------------------------------------------------------------ + void create_mandatory_sections() + { + // Create null section without calling to 'add_section' as no string + // section containing section names exists yet + section* sec0 = create_section(); + sec0->set_index( 0 ); + sec0->set_name( "" ); + sec0->set_name_string_offset( 0 ); + + set_section_name_str_index( 1 ); + section* shstrtab = sections.add( ".shstrtab" ); + shstrtab->set_type( SHT_STRTAB ); + shstrtab->set_addr_align( 1 ); + } + + //------------------------------------------------------------------------------ + Elf_Half load_sections( std::istream& stream ) + { + Elf_Half entry_size = header->get_section_entry_size(); + Elf_Half num = header->get_sections_num(); + Elf64_Off offset = header->get_sections_offset(); + + for ( Elf_Half i = 0; i < num; ++i ) { + section* sec = create_section(); + sec->load( stream, (std::streamoff)offset + + (std::streampos)i * entry_size ); + sec->set_index( i ); + // To mark that the section is not permitted to reassign address + // during layout calculation + sec->set_address( sec->get_address() ); + } + + Elf_Half shstrndx = get_section_name_str_index(); + + if ( SHN_UNDEF != shstrndx ) { + string_section_accessor str_reader( sections[shstrndx] ); + for ( Elf_Half i = 0; i < num; ++i ) { + Elf_Word section_offset = sections[i]->get_name_string_offset(); + const char* p = str_reader.get_string( section_offset ); + if ( p != 0 ) { + sections[i]->set_name( p ); + } + } + } + + return num; + } + + //------------------------------------------------------------------------------ + //! Checks whether the addresses of the section entirely fall within the given segment. + //! It doesn't matter if the addresses are memory addresses, or file offsets, + //! they just need to be in the same address space + bool is_sect_in_seg( Elf64_Off sect_begin, + Elf_Xword sect_size, + Elf64_Off seg_begin, + Elf64_Off seg_end ) + { + return ( seg_begin <= sect_begin ) && + ( sect_begin + sect_size <= seg_end ) && + ( sect_begin < + seg_end ); // this is important criteria when sect_size == 0 + // Example: seg_begin=10, seg_end=12 (-> covering the bytes 10 and 11) + // sect_begin=12, sect_size=0 -> shall return false! + } + + //------------------------------------------------------------------------------ + bool load_segments( std::istream& stream ) + { + Elf_Half entry_size = header->get_segment_entry_size(); + Elf_Half num = header->get_segments_num(); + Elf64_Off offset = header->get_segments_offset(); + + for ( Elf_Half i = 0; i < num; ++i ) { + segment* seg; + unsigned char file_class = header->get_class(); + + if ( file_class == ELFCLASS64 ) { + seg = new segment_impl( &convertor ); + } + else if ( file_class == ELFCLASS32 ) { + seg = new segment_impl( &convertor ); + } + else { + return false; + } + + seg->load( stream, (std::streamoff)offset + + (std::streampos)i * entry_size ); + seg->set_index( i ); + + // Add sections to the segments (similar to readelfs algorithm) + Elf64_Off segBaseOffset = seg->get_offset(); + Elf64_Off segEndOffset = segBaseOffset + seg->get_file_size(); + Elf64_Off segVBaseAddr = seg->get_virtual_address(); + Elf64_Off segVEndAddr = segVBaseAddr + seg->get_memory_size(); + for ( Elf_Half j = 0; j < sections.size(); ++j ) { + const section* psec = sections[j]; + + // SHF_ALLOC sections are matched based on the virtual address + // otherwise the file offset is matched + if ( ( psec->get_flags() & SHF_ALLOC ) + ? is_sect_in_seg( psec->get_address(), + psec->get_size(), segVBaseAddr, + segVEndAddr ) + : is_sect_in_seg( psec->get_offset(), psec->get_size(), + segBaseOffset, segEndOffset ) ) { + // Alignment of segment shall not be updated, to preserve original value + // It will be re-calculated on saving. + seg->add_section_index( psec->get_index(), 0 ); + } + } + + // Add section into the segments' container + segments_.push_back( seg ); + } + + return true; + } + + //------------------------------------------------------------------------------ + bool save_header( std::ostream& stream ) { return header->save( stream ); } + + //------------------------------------------------------------------------------ + bool save_sections( std::ostream& stream ) + { + for ( unsigned int i = 0; i < sections_.size(); ++i ) { + section* sec = sections_.at( i ); + + std::streampos headerPosition = + (std::streamoff)header->get_sections_offset() + + (std::streampos)header->get_section_entry_size() * + sec->get_index(); + + sec->save( stream, headerPosition, sec->get_offset() ); + } + return true; + } + + //------------------------------------------------------------------------------ + bool save_segments( std::ostream& stream ) + { + for ( unsigned int i = 0; i < segments_.size(); ++i ) { + segment* seg = segments_.at( i ); + + std::streampos headerPosition = + header->get_segments_offset() + + (std::streampos)header->get_segment_entry_size() * + seg->get_index(); + + seg->save( stream, headerPosition, seg->get_offset() ); + } + return true; + } + + //------------------------------------------------------------------------------ + bool is_section_without_segment( unsigned int section_index ) + { + bool found = false; + + for ( unsigned int j = 0; !found && ( j < segments.size() ); ++j ) { + for ( unsigned int k = 0; + !found && ( k < segments[j]->get_sections_num() ); ++k ) { + found = segments[j]->get_section_index_at( k ) == section_index; + } + } + + return !found; + } + + //------------------------------------------------------------------------------ + bool is_subsequence_of( segment* seg1, segment* seg2 ) + { + // Return 'true' if sections of seg1 are a subset of sections in seg2 + const std::vector& sections1 = seg1->get_sections(); + const std::vector& sections2 = seg2->get_sections(); + + bool found = false; + if ( sections1.size() < sections2.size() ) { + found = std::includes( sections2.begin(), sections2.end(), + sections1.begin(), sections1.end() ); + } + + return found; + } + + //------------------------------------------------------------------------------ + std::vector get_ordered_segments() + { + std::vector res; + std::deque worklist; + + res.reserve( segments.size() ); + std::copy( segments_.begin(), segments_.end(), + std::back_inserter( worklist ) ); + + // Bring the segments which start at address 0 to the front + size_t nextSlot = 0; + for ( size_t i = 0; i < worklist.size(); ++i ) { + if ( i != nextSlot && worklist[i]->is_offset_initialized() && + worklist[i]->get_offset() == 0 ) { + if ( worklist[nextSlot]->get_offset() == 0 ) { + ++nextSlot; + } + std::swap( worklist[i], worklist[nextSlot] ); + ++nextSlot; + } + } + + while ( !worklist.empty() ) { + segment* seg = worklist.front(); + worklist.pop_front(); + + size_t i = 0; + for ( ; i < worklist.size(); ++i ) { + if ( is_subsequence_of( seg, worklist[i] ) ) { + break; + } + } + + if ( i < worklist.size() ) + worklist.push_back( seg ); + else + res.push_back( seg ); + } + + return res; + } + + //------------------------------------------------------------------------------ + bool layout_sections_without_segments() + { + for ( unsigned int i = 0; i < sections_.size(); ++i ) { + if ( is_section_without_segment( i ) ) { + section* sec = sections_[i]; + + Elf_Xword section_align = sec->get_addr_align(); + if ( section_align > 1 && + current_file_pos % section_align != 0 ) { + current_file_pos += + section_align - current_file_pos % section_align; + } + + if ( 0 != sec->get_index() ) + sec->set_offset( current_file_pos ); + + if ( SHT_NOBITS != sec->get_type() && + SHT_NULL != sec->get_type() ) { + current_file_pos += sec->get_size(); + } + } + } + + return true; + } + + //------------------------------------------------------------------------------ + void calc_segment_alignment() + { + for ( std::vector::iterator s = segments_.begin(); + s != segments_.end(); ++s ) { + segment* seg = *s; + for ( int i = 0; i < seg->get_sections_num(); ++i ) { + section* sect = sections_[seg->get_section_index_at( i )]; + if ( sect->get_addr_align() > seg->get_align() ) { + seg->set_align( sect->get_addr_align() ); + } + } + } + } + + //------------------------------------------------------------------------------ + bool layout_segments_and_their_sections() + { + std::vector worklist; + std::vector section_generated( sections.size(), false ); + + // Get segments in a order in where segments which contain a + // sub sequence of other segments are located at the end + worklist = get_ordered_segments(); + + for ( unsigned int i = 0; i < worklist.size(); ++i ) { + Elf_Xword segment_memory = 0; + Elf_Xword segment_filesize = 0; + Elf_Xword seg_start_pos = current_file_pos; + segment* seg = worklist[i]; + + // Special case: PHDR segment + // This segment contains the program headers but no sections + if ( seg->get_type() == PT_PHDR && seg->get_sections_num() == 0 ) { + seg_start_pos = header->get_segments_offset(); + segment_memory = segment_filesize = + header->get_segment_entry_size() * + (Elf_Xword)header->get_segments_num(); + } + // Special case: + else if ( seg->is_offset_initialized() && seg->get_offset() == 0 ) { + seg_start_pos = 0; + if ( seg->get_sections_num() ) { + segment_memory = segment_filesize = current_file_pos; + } + } + // New segments with not generated sections + // have to be aligned + else if ( seg->get_sections_num() && + !section_generated[seg->get_section_index_at( 0 )] ) { + Elf_Xword align = seg->get_align() > 0 ? seg->get_align() : 1; + Elf64_Off cur_page_alignment = current_file_pos % align; + Elf64_Off req_page_alignment = + seg->get_virtual_address() % align; + Elf64_Off error = req_page_alignment - cur_page_alignment; + + current_file_pos += ( seg->get_align() + error ) % align; + seg_start_pos = current_file_pos; + } + else if ( seg->get_sections_num() ) { + seg_start_pos = + sections[seg->get_section_index_at( 0 )]->get_offset(); + } + + // Write segment's data + for ( unsigned int j = 0; j < seg->get_sections_num(); ++j ) { + Elf_Half index = seg->get_section_index_at( j ); + + section* sec = sections[index]; + + // The NULL section is always generated + if ( SHT_NULL == sec->get_type() ) { + section_generated[index] = true; + continue; + } + + Elf_Xword secAlign = 0; + // Fix up the alignment + if ( !section_generated[index] && + sec->is_address_initialized() && + SHT_NOBITS != sec->get_type() && + SHT_NULL != sec->get_type() && 0 != sec->get_size() ) { + // Align the sections based on the virtual addresses + // when possible (this is what matters for execution) + Elf64_Off req_offset = + sec->get_address() - seg->get_virtual_address(); + Elf64_Off cur_offset = current_file_pos - seg_start_pos; + if ( req_offset < cur_offset ) { + // something has gone awfully wrong, abort! + // secAlign would turn out negative, seeking backwards and overwriting previous data + return false; + } + secAlign = req_offset - cur_offset; + } + else if ( !section_generated[index] && + !sec->is_address_initialized() ) { + // If no address has been specified then only the section + // alignment constraint has to be matched + Elf_Xword align = sec->get_addr_align(); + if ( align == 0 ) { + align = 1; + } + Elf64_Off error = current_file_pos % align; + secAlign = ( align - error ) % align; + } + else if ( section_generated[index] ) { + // Alignment for already generated sections + secAlign = + sec->get_offset() - seg_start_pos - segment_filesize; + } + + // Determine the segment file and memory sizes + // Special case .tbss section (NOBITS) in non TLS segment + if ( ( sec->get_flags() & SHF_ALLOC ) && + !( ( sec->get_flags() & SHF_TLS ) && + ( seg->get_type() != PT_TLS ) && + ( SHT_NOBITS == sec->get_type() ) ) ) + segment_memory += sec->get_size() + secAlign; + + if ( SHT_NOBITS != sec->get_type() ) + segment_filesize += sec->get_size() + secAlign; + + // Nothing to be done when generating nested segments + if ( section_generated[index] ) { + continue; + } + + current_file_pos += secAlign; + + // Set the section addresses when missing + if ( !sec->is_address_initialized() ) + sec->set_address( seg->get_virtual_address() + + current_file_pos - seg_start_pos ); + + if ( 0 != sec->get_index() ) + sec->set_offset( current_file_pos ); + + if ( SHT_NOBITS != sec->get_type() ) + current_file_pos += sec->get_size(); + + section_generated[index] = true; + } + + seg->set_file_size( segment_filesize ); + + // If we already have a memory size from loading an elf file (value > 0), + // it must not shrink! + // Memory size may be bigger than file size and it is the loader's job to do something + // with the surplus bytes in memory, like initializing them with a defined value. + if ( seg->get_memory_size() < segment_memory ) { + seg->set_memory_size( segment_memory ); + } + + seg->set_offset( seg_start_pos ); + } + + return true; + } + + //------------------------------------------------------------------------------ + bool layout_section_table() + { + // Simply place the section table at the end for now + Elf64_Off alignmentError = current_file_pos % 4; + current_file_pos += ( 4 - alignmentError ) % 4; + header->set_sections_offset( current_file_pos ); + return true; + } + + //------------------------------------------------------------------------------ + public: + friend class Sections; + class Sections + { + public: + //------------------------------------------------------------------------------ + Sections( elfio* parent_ ) : parent( parent_ ) {} + + //------------------------------------------------------------------------------ + Elf_Half size() const { return (Elf_Half)parent->sections_.size(); } + + //------------------------------------------------------------------------------ + section* operator[]( unsigned int index ) const + { + section* sec = 0; + + if ( index < parent->sections_.size() ) { + sec = parent->sections_[index]; + } + + return sec; + } + + //------------------------------------------------------------------------------ + section* operator[]( const std::string& name ) const + { + section* sec = 0; + + std::vector::const_iterator it; + for ( it = parent->sections_.begin(); it != parent->sections_.end(); + ++it ) { + if ( ( *it )->get_name() == name ) { + sec = *it; + break; + } + } + + return sec; + } + + //------------------------------------------------------------------------------ + section* add( const std::string& name ) + { + section* new_section = parent->create_section(); + new_section->set_name( name ); + + Elf_Half str_index = parent->get_section_name_str_index(); + section* string_table( parent->sections_[str_index] ); + string_section_accessor str_writer( string_table ); + Elf_Word pos = str_writer.add_string( name ); + new_section->set_name_string_offset( pos ); + + return new_section; + } + + //------------------------------------------------------------------------------ + std::vector::iterator begin() + { + return parent->sections_.begin(); + } + + //------------------------------------------------------------------------------ + std::vector::iterator end() + { + return parent->sections_.end(); + } + + //------------------------------------------------------------------------------ + std::vector::const_iterator begin() const + { + return parent->sections_.cbegin(); + } + + //------------------------------------------------------------------------------ + std::vector::const_iterator end() const + { + return parent->sections_.cend(); + } + + //------------------------------------------------------------------------------ + private: + elfio* parent; + } sections; + + //------------------------------------------------------------------------------ + public: + friend class Segments; + class Segments + { + public: + //------------------------------------------------------------------------------ + Segments( elfio* parent_ ) : parent( parent_ ) {} + + //------------------------------------------------------------------------------ + Elf_Half size() const { return (Elf_Half)parent->segments_.size(); } + + //------------------------------------------------------------------------------ + segment* operator[]( unsigned int index ) const + { + return parent->segments_[index]; + } + + //------------------------------------------------------------------------------ + segment* add() { return parent->create_segment(); } + + //------------------------------------------------------------------------------ + std::vector::iterator begin() + { + return parent->segments_.begin(); + } + + //------------------------------------------------------------------------------ + std::vector::iterator end() + { + return parent->segments_.end(); + } + + //------------------------------------------------------------------------------ + std::vector::const_iterator begin() const + { + return parent->segments_.cbegin(); + } + + //------------------------------------------------------------------------------ + std::vector::const_iterator end() const + { + return parent->segments_.cend(); + } + + //------------------------------------------------------------------------------ + private: + elfio* parent; + } segments; + + //------------------------------------------------------------------------------ + private: + elf_header* header; + std::vector sections_; + std::vector segments_; + endianess_convertor convertor; + + Elf_Xword current_file_pos; +}; + +} // namespace ELFIO + + +/*** Start of inlined file: elfio_symbols.hpp ***/ +#ifndef ELFIO_SYMBOLS_HPP +#define ELFIO_SYMBOLS_HPP + +namespace ELFIO { + +//------------------------------------------------------------------------------ +template class symbol_section_accessor_template +{ + public: + //------------------------------------------------------------------------------ + symbol_section_accessor_template( const elfio& elf_file_, + S* symbol_section_ ) + : elf_file( elf_file_ ), symbol_section( symbol_section_ ) + { + find_hash_section(); + } + + //------------------------------------------------------------------------------ + Elf_Xword get_symbols_num() const + { + Elf_Xword nRet = 0; + if ( 0 != symbol_section->get_entry_size() ) { + nRet = + symbol_section->get_size() / symbol_section->get_entry_size(); + } + + return nRet; + } + + //------------------------------------------------------------------------------ + bool get_symbol( Elf_Xword index, + std::string& name, + Elf64_Addr& value, + Elf_Xword& size, + unsigned char& bind, + unsigned char& type, + Elf_Half& section_index, + unsigned char& other ) const + { + bool ret = false; + + if ( elf_file.get_class() == ELFCLASS32 ) { + ret = generic_get_symbol( index, name, value, size, bind, + type, section_index, other ); + } + else { + ret = generic_get_symbol( index, name, value, size, bind, + type, section_index, other ); + } + + return ret; + } + + //------------------------------------------------------------------------------ + bool get_symbol( const std::string& name, + Elf64_Addr& value, + Elf_Xword& size, + unsigned char& bind, + unsigned char& type, + Elf_Half& section_index, + unsigned char& other ) const + { + bool ret = false; + + if ( 0 != get_hash_table_index() ) { + Elf_Word nbucket = *(const Elf_Word*)hash_section->get_data(); + Elf_Word nchain = *(const Elf_Word*)( hash_section->get_data() + + sizeof( Elf_Word ) ); + Elf_Word val = elf_hash( (const unsigned char*)name.c_str() ); + Elf_Word y = *(const Elf_Word*)( hash_section->get_data() + + ( 2 + val % nbucket ) * + sizeof( Elf_Word ) ); + std::string str; + get_symbol( y, str, value, size, bind, type, section_index, other ); + while ( str != name && STN_UNDEF != y && y < nchain ) { + y = *(const Elf_Word*)( hash_section->get_data() + + ( 2 + nbucket + y ) * + sizeof( Elf_Word ) ); + get_symbol( y, str, value, size, bind, type, section_index, + other ); + } + if ( str == name ) { + ret = true; + } + } + else { + for ( Elf_Xword i = 0; i < get_symbols_num() && !ret; i++ ) { + std::string symbol_name; + if ( get_symbol( i, symbol_name, value, size, bind, type, + section_index, other ) ) { + if ( symbol_name == name ) { + ret = true; + } + } + } + } + + return ret; + } + + //------------------------------------------------------------------------------ + bool get_symbol( const Elf64_Addr& value, + std::string& name, + Elf_Xword& size, + unsigned char& bind, + unsigned char& type, + Elf_Half& section_index, + unsigned char& other ) const + { + + const endianess_convertor& convertor = elf_file.get_convertor(); + + Elf_Xword idx = 0; + bool match = false; + Elf64_Addr v = 0; + + if ( elf_file.get_class() == ELFCLASS32 ) { + match = generic_search_symbols( + [&]( const Elf32_Sym* sym ) { + return convertor( sym->st_value ) == value; + }, + idx ); + } + else { + match = generic_search_symbols( + [&]( const Elf64_Sym* sym ) { + return convertor( sym->st_value ) == value; + }, + idx ); + } + + if ( match ) { + return get_symbol( idx, name, v, size, bind, type, section_index, + other ); + } + + return false; + } + + //------------------------------------------------------------------------------ + Elf_Word add_symbol( Elf_Word name, + Elf64_Addr value, + Elf_Xword size, + unsigned char info, + unsigned char other, + Elf_Half shndx ) + { + Elf_Word nRet; + + if ( symbol_section->get_size() == 0 ) { + if ( elf_file.get_class() == ELFCLASS32 ) { + nRet = generic_add_symbol( 0, 0, 0, 0, 0, 0 ); + } + else { + nRet = generic_add_symbol( 0, 0, 0, 0, 0, 0 ); + } + } + + if ( elf_file.get_class() == ELFCLASS32 ) { + nRet = generic_add_symbol( name, value, size, info, + other, shndx ); + } + else { + nRet = generic_add_symbol( name, value, size, info, + other, shndx ); + } + + return nRet; + } + + //------------------------------------------------------------------------------ + Elf_Word add_symbol( Elf_Word name, + Elf64_Addr value, + Elf_Xword size, + unsigned char bind, + unsigned char type, + unsigned char other, + Elf_Half shndx ) + { + return add_symbol( name, value, size, ELF_ST_INFO( bind, type ), other, + shndx ); + } + + //------------------------------------------------------------------------------ + Elf_Word add_symbol( string_section_accessor& pStrWriter, + const char* str, + Elf64_Addr value, + Elf_Xword size, + unsigned char info, + unsigned char other, + Elf_Half shndx ) + { + Elf_Word index = pStrWriter.add_string( str ); + return add_symbol( index, value, size, info, other, shndx ); + } + + //------------------------------------------------------------------------------ + Elf_Word add_symbol( string_section_accessor& pStrWriter, + const char* str, + Elf64_Addr value, + Elf_Xword size, + unsigned char bind, + unsigned char type, + unsigned char other, + Elf_Half shndx ) + { + return add_symbol( pStrWriter, str, value, size, + ELF_ST_INFO( bind, type ), other, shndx ); + } + + //------------------------------------------------------------------------------ + Elf_Xword arrange_local_symbols( + std::function func = + nullptr ) + { + int nRet = 0; + + if ( elf_file.get_class() == ELFCLASS32 ) { + nRet = generic_arrange_local_symbols( func ); + } + else { + nRet = generic_arrange_local_symbols( func ); + } + + return nRet; + } + + //------------------------------------------------------------------------------ + private: + //------------------------------------------------------------------------------ + void find_hash_section() + { + hash_section = 0; + hash_section_index = 0; + Elf_Half nSecNo = elf_file.sections.size(); + for ( Elf_Half i = 0; i < nSecNo && 0 == hash_section_index; ++i ) { + const section* sec = elf_file.sections[i]; + if ( sec->get_link() == symbol_section->get_index() ) { + hash_section = sec; + hash_section_index = i; + } + } + } + + //------------------------------------------------------------------------------ + Elf_Half get_string_table_index() const + { + return (Elf_Half)symbol_section->get_link(); + } + + //------------------------------------------------------------------------------ + Elf_Half get_hash_table_index() const { return hash_section_index; } + + //------------------------------------------------------------------------------ + template const T* generic_get_symbol_ptr( Elf_Xword index ) const + { + if ( 0 != symbol_section->get_data() && index < get_symbols_num() ) { + const T* pSym = reinterpret_cast( + symbol_section->get_data() + + index * symbol_section->get_entry_size() ); + + return pSym; + } + + return nullptr; + } + + //------------------------------------------------------------------------------ + template + bool generic_search_symbols( std::function match, + Elf_Xword& idx ) const + { + for ( Elf_Xword i = 0; i < get_symbols_num(); i++ ) { + const T* symPtr = generic_get_symbol_ptr( i ); + + if ( symPtr == nullptr ) + return false; + + if ( match( symPtr ) ) { + idx = i; + return true; + } + } + + return false; + } + + //------------------------------------------------------------------------------ + template + bool generic_get_symbol( Elf_Xword index, + std::string& name, + Elf64_Addr& value, + Elf_Xword& size, + unsigned char& bind, + unsigned char& type, + Elf_Half& section_index, + unsigned char& other ) const + { + bool ret = false; + + if ( 0 != symbol_section->get_data() && index < get_symbols_num() ) { + const T* pSym = reinterpret_cast( + symbol_section->get_data() + + index * symbol_section->get_entry_size() ); + + const endianess_convertor& convertor = elf_file.get_convertor(); + + section* string_section = + elf_file.sections[get_string_table_index()]; + string_section_accessor str_reader( string_section ); + const char* pStr = + str_reader.get_string( convertor( pSym->st_name ) ); + if ( 0 != pStr ) { + name = pStr; + } + value = convertor( pSym->st_value ); + size = convertor( pSym->st_size ); + bind = ELF_ST_BIND( pSym->st_info ); + type = ELF_ST_TYPE( pSym->st_info ); + section_index = convertor( pSym->st_shndx ); + other = pSym->st_other; + + ret = true; + } + + return ret; + } + + //------------------------------------------------------------------------------ + template + Elf_Word generic_add_symbol( Elf_Word name, + Elf64_Addr value, + Elf_Xword size, + unsigned char info, + unsigned char other, + Elf_Half shndx ) + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + T entry; + entry.st_name = convertor( name ); + entry.st_value = value; + entry.st_value = convertor( entry.st_value ); + entry.st_size = size; + entry.st_size = convertor( entry.st_size ); + entry.st_info = convertor( info ); + entry.st_other = convertor( other ); + entry.st_shndx = convertor( shndx ); + + symbol_section->append_data( reinterpret_cast( &entry ), + sizeof( entry ) ); + + Elf_Word nRet = symbol_section->get_size() / sizeof( entry ) - 1; + + return nRet; + } + + //------------------------------------------------------------------------------ + template + Elf_Xword generic_arrange_local_symbols( + std::function func ) + { + const endianess_convertor& convertor = elf_file.get_convertor(); + const Elf_Xword size = symbol_section->get_entry_size(); + + Elf_Xword first_not_local = + 1; // Skip the first entry. It is always NOTYPE + Elf_Xword current = 0; + Elf_Xword count = get_symbols_num(); + + while ( true ) { + T* p1 = nullptr; + T* p2 = nullptr; + + while ( first_not_local < count ) { + p1 = const_cast( + generic_get_symbol_ptr( first_not_local ) ); + if ( ELF_ST_BIND( convertor( p1->st_info ) ) != STB_LOCAL ) + break; + ++first_not_local; + } + + current = first_not_local + 1; + while ( current < count ) { + p2 = const_cast( generic_get_symbol_ptr( current ) ); + if ( ELF_ST_BIND( convertor( p2->st_info ) ) == STB_LOCAL ) + break; + ++current; + } + + if ( first_not_local < count && current < count ) { + if ( func ) + func( first_not_local, current ); + + // Swap the symbols + T tmp; + std::copy( p1, p1 + 1, &tmp ); + std::copy( p2, p2 + 1, p1 ); + std::copy( &tmp, &tmp + 1, p2 ); + } + else { + // Update 'info' field of the section + symbol_section->set_info( first_not_local ); + break; + } + } + + // Elf_Word nRet = symbol_section->get_size() / sizeof(entry) - 1; + + return first_not_local; + } + + //------------------------------------------------------------------------------ + private: + const elfio& elf_file; + S* symbol_section; + Elf_Half hash_section_index; + const section* hash_section; +}; + +using symbol_section_accessor = symbol_section_accessor_template
; +using const_symbol_section_accessor = + symbol_section_accessor_template; + +} // namespace ELFIO + +#endif // ELFIO_SYMBOLS_HPP + +/*** End of inlined file: elfio_symbols.hpp ***/ + + +/*** Start of inlined file: elfio_note.hpp ***/ +#ifndef ELFIO_NOTE_HPP +#define ELFIO_NOTE_HPP + +namespace ELFIO { + +//------------------------------------------------------------------------------ +// There are discrepancies in documentations. SCO documentation +// (http://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section) +// requires 8 byte entries alignment for 64-bit ELF file, +// but Oracle's definition uses the same structure +// for 32-bit and 64-bit formats. +// (https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-18048.html) +// +// It looks like EM_X86_64 Linux implementation is similar to Oracle's +// definition. Therefore, the same alignment works for both formats +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +template class note_section_accessor_template +{ + public: + //------------------------------------------------------------------------------ + note_section_accessor_template( const elfio& elf_file_, S* section_ ) + : elf_file( elf_file_ ), note_section( section_ ) + { + process_section(); + } + + //------------------------------------------------------------------------------ + Elf_Word get_notes_num() const + { + return (Elf_Word)note_start_positions.size(); + } + + //------------------------------------------------------------------------------ + bool get_note( Elf_Word index, + Elf_Word& type, + std::string& name, + void*& desc, + Elf_Word& descSize ) const + { + if ( index >= note_section->get_size() ) { + return false; + } + + const char* pData = + note_section->get_data() + note_start_positions[index]; + int align = sizeof( Elf_Word ); + + const endianess_convertor& convertor = elf_file.get_convertor(); + type = convertor( *(const Elf_Word*)( pData + 2 * align ) ); + Elf_Word namesz = convertor( *(const Elf_Word*)( pData ) ); + descSize = convertor( *(const Elf_Word*)( pData + sizeof( namesz ) ) ); + + Elf_Xword max_name_size = + note_section->get_size() - note_start_positions[index]; + if ( namesz < 1 || namesz > max_name_size || + (Elf_Xword)namesz + descSize > max_name_size ) { + return false; + } + name.assign( pData + 3 * align, namesz - 1 ); + if ( 0 == descSize ) { + desc = 0; + } + else { + desc = + const_cast( pData + 3 * align + + ( ( namesz + align - 1 ) / align ) * align ); + } + + return true; + } + + //------------------------------------------------------------------------------ + void add_note( Elf_Word type, + const std::string& name, + const void* desc, + Elf_Word descSize ) + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + int align = sizeof( Elf_Word ); + Elf_Word nameLen = (Elf_Word)name.size() + 1; + Elf_Word nameLenConv = convertor( nameLen ); + std::string buffer( reinterpret_cast( &nameLenConv ), align ); + Elf_Word descSizeConv = convertor( descSize ); + + buffer.append( reinterpret_cast( &descSizeConv ), align ); + type = convertor( type ); + buffer.append( reinterpret_cast( &type ), align ); + buffer.append( name ); + buffer.append( 1, '\x00' ); + const char pad[] = { '\0', '\0', '\0', '\0' }; + if ( nameLen % align != 0 ) { + buffer.append( pad, align - nameLen % align ); + } + if ( desc != 0 && descSize != 0 ) { + buffer.append( reinterpret_cast( desc ), descSize ); + if ( descSize % align != 0 ) { + buffer.append( pad, align - descSize % align ); + } + } + + note_start_positions.push_back( note_section->get_size() ); + note_section->append_data( buffer ); + } + + private: + //------------------------------------------------------------------------------ + void process_section() + { + const endianess_convertor& convertor = elf_file.get_convertor(); + const char* data = note_section->get_data(); + Elf_Xword size = note_section->get_size(); + Elf_Xword current = 0; + + note_start_positions.clear(); + + // Is it empty? + if ( 0 == data || 0 == size ) { + return; + } + + Elf_Word align = sizeof( Elf_Word ); + while ( current + (Elf_Xword)3 * align <= size ) { + note_start_positions.push_back( current ); + Elf_Word namesz = convertor( *(const Elf_Word*)( data + current ) ); + Elf_Word descsz = convertor( + *(const Elf_Word*)( data + current + sizeof( namesz ) ) ); + + current += (Elf_Xword)3 * sizeof( Elf_Word ) + + ( ( namesz + align - 1 ) / align ) * (Elf_Xword)align + + ( ( descsz + align - 1 ) / align ) * (Elf_Xword)align; + } + } + + //------------------------------------------------------------------------------ + private: + const elfio& elf_file; + S* note_section; + std::vector note_start_positions; +}; + +using note_section_accessor = note_section_accessor_template
; +using const_note_section_accessor = + note_section_accessor_template; + +} // namespace ELFIO + +#endif // ELFIO_NOTE_HPP + +/*** End of inlined file: elfio_note.hpp ***/ + + +/*** Start of inlined file: elfio_relocation.hpp ***/ +#ifndef ELFIO_RELOCATION_HPP +#define ELFIO_RELOCATION_HPP + +namespace ELFIO { + +template struct get_sym_and_type; +template <> struct get_sym_and_type +{ + static int get_r_sym( Elf_Xword info ) + { + return ELF32_R_SYM( (Elf_Word)info ); + } + static int get_r_type( Elf_Xword info ) + { + return ELF32_R_TYPE( (Elf_Word)info ); + } +}; +template <> struct get_sym_and_type +{ + static int get_r_sym( Elf_Xword info ) + { + return ELF32_R_SYM( (Elf_Word)info ); + } + static int get_r_type( Elf_Xword info ) + { + return ELF32_R_TYPE( (Elf_Word)info ); + } +}; +template <> struct get_sym_and_type +{ + static int get_r_sym( Elf_Xword info ) { return ELF64_R_SYM( info ); } + static int get_r_type( Elf_Xword info ) { return ELF64_R_TYPE( info ); } +}; +template <> struct get_sym_and_type +{ + static int get_r_sym( Elf_Xword info ) { return ELF64_R_SYM( info ); } + static int get_r_type( Elf_Xword info ) { return ELF64_R_TYPE( info ); } +}; + +//------------------------------------------------------------------------------ +template class relocation_section_accessor_template +{ + public: + //------------------------------------------------------------------------------ + relocation_section_accessor_template( const elfio& elf_file_, S* section_ ) + : elf_file( elf_file_ ), relocation_section( section_ ) + { + } + + //------------------------------------------------------------------------------ + Elf_Xword get_entries_num() const + { + Elf_Xword nRet = 0; + + if ( 0 != relocation_section->get_entry_size() ) { + nRet = relocation_section->get_size() / + relocation_section->get_entry_size(); + } + + return nRet; + } + + //------------------------------------------------------------------------------ + bool get_entry( Elf_Xword index, + Elf64_Addr& offset, + Elf_Word& symbol, + Elf_Word& type, + Elf_Sxword& addend ) const + { + if ( index >= get_entries_num() ) { // Is index valid + return false; + } + + if ( elf_file.get_class() == ELFCLASS32 ) { + if ( SHT_REL == relocation_section->get_type() ) { + generic_get_entry_rel( index, offset, symbol, type, + addend ); + } + else if ( SHT_RELA == relocation_section->get_type() ) { + generic_get_entry_rela( index, offset, symbol, type, + addend ); + } + } + else { + if ( SHT_REL == relocation_section->get_type() ) { + generic_get_entry_rel( index, offset, symbol, type, + addend ); + } + else if ( SHT_RELA == relocation_section->get_type() ) { + generic_get_entry_rela( index, offset, symbol, type, + addend ); + } + } + + return true; + } + + //------------------------------------------------------------------------------ + bool get_entry( Elf_Xword index, + Elf64_Addr& offset, + Elf64_Addr& symbolValue, + std::string& symbolName, + Elf_Word& type, + Elf_Sxword& addend, + Elf_Sxword& calcValue ) const + { + // Do regular job + Elf_Word symbol; + bool ret = get_entry( index, offset, symbol, type, addend ); + + // Find the symbol + Elf_Xword size; + unsigned char bind; + unsigned char symbolType; + Elf_Half section; + unsigned char other; + + symbol_section_accessor symbols( + elf_file, elf_file.sections[get_symbol_table_index()] ); + ret = ret && symbols.get_symbol( symbol, symbolName, symbolValue, size, + bind, symbolType, section, other ); + + if ( ret ) { // Was it successful? + switch ( type ) { + case R_386_NONE: // none + calcValue = 0; + break; + case R_386_32: // S + A + calcValue = symbolValue + addend; + break; + case R_386_PC32: // S + A - P + calcValue = symbolValue + addend - offset; + break; + case R_386_GOT32: // G + A - P + calcValue = 0; + break; + case R_386_PLT32: // L + A - P + calcValue = 0; + break; + case R_386_COPY: // none + calcValue = 0; + break; + case R_386_GLOB_DAT: // S + case R_386_JMP_SLOT: // S + calcValue = symbolValue; + break; + case R_386_RELATIVE: // B + A + calcValue = addend; + break; + case R_386_GOTOFF: // S + A - GOT + calcValue = 0; + break; + case R_386_GOTPC: // GOT + A - P + calcValue = 0; + break; + default: // Not recognized symbol! + calcValue = 0; + break; + } + } + + return ret; + } + + //------------------------------------------------------------------------------ + bool set_entry( Elf_Xword index, + Elf64_Addr offset, + Elf_Word symbol, + Elf_Word type, + Elf_Sxword addend ) + { + if ( index >= get_entries_num() ) { // Is index valid + return false; + } + + if ( elf_file.get_class() == ELFCLASS32 ) { + if ( SHT_REL == relocation_section->get_type() ) { + generic_set_entry_rel( index, offset, symbol, type, + addend ); + } + else if ( SHT_RELA == relocation_section->get_type() ) { + generic_set_entry_rela( index, offset, symbol, type, + addend ); + } + } + else { + if ( SHT_REL == relocation_section->get_type() ) { + generic_set_entry_rel( index, offset, symbol, type, + addend ); + } + else if ( SHT_RELA == relocation_section->get_type() ) { + generic_set_entry_rela( index, offset, symbol, type, + addend ); + } + } + + return true; + } + + //------------------------------------------------------------------------------ + void add_entry( Elf64_Addr offset, Elf_Xword info ) + { + if ( elf_file.get_class() == ELFCLASS32 ) { + generic_add_entry( offset, info ); + } + else { + generic_add_entry( offset, info ); + } + } + + //------------------------------------------------------------------------------ + void add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type ) + { + Elf_Xword info; + if ( elf_file.get_class() == ELFCLASS32 ) { + info = ELF32_R_INFO( (Elf_Xword)symbol, type ); + } + else { + info = ELF64_R_INFO( (Elf_Xword)symbol, type ); + } + + add_entry( offset, info ); + } + + //------------------------------------------------------------------------------ + void add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend ) + { + if ( elf_file.get_class() == ELFCLASS32 ) { + generic_add_entry( offset, info, addend ); + } + else { + generic_add_entry( offset, info, addend ); + } + } + + //------------------------------------------------------------------------------ + void add_entry( Elf64_Addr offset, + Elf_Word symbol, + unsigned char type, + Elf_Sxword addend ) + { + Elf_Xword info; + if ( elf_file.get_class() == ELFCLASS32 ) { + info = ELF32_R_INFO( (Elf_Xword)symbol, type ); + } + else { + info = ELF64_R_INFO( (Elf_Xword)symbol, type ); + } + + add_entry( offset, info, addend ); + } + + //------------------------------------------------------------------------------ + void add_entry( string_section_accessor str_writer, + const char* str, + symbol_section_accessor sym_writer, + Elf64_Addr value, + Elf_Word size, + unsigned char sym_info, + unsigned char other, + Elf_Half shndx, + Elf64_Addr offset, + unsigned char type ) + { + Elf_Word str_index = str_writer.add_string( str ); + Elf_Word sym_index = sym_writer.add_symbol( str_index, value, size, + sym_info, other, shndx ); + add_entry( offset, sym_index, type ); + } + + //------------------------------------------------------------------------------ + void swap_symbols( Elf_Xword first, Elf_Xword second ) + { + Elf64_Addr offset; + Elf_Word symbol; + Elf_Word rtype; + Elf_Sxword addend; + for ( Elf_Word i = 0; i < get_entries_num(); i++ ) { + get_entry( i, offset, symbol, rtype, addend ); + if ( symbol == first ) { + set_entry( i, offset, (Elf_Word)second, rtype, addend ); + } + if ( symbol == second ) { + set_entry( i, offset, (Elf_Word)first, rtype, addend ); + } + } + } + + //------------------------------------------------------------------------------ + private: + //------------------------------------------------------------------------------ + Elf_Half get_symbol_table_index() const + { + return (Elf_Half)relocation_section->get_link(); + } + + //------------------------------------------------------------------------------ + template + void generic_get_entry_rel( Elf_Xword index, + Elf64_Addr& offset, + Elf_Word& symbol, + Elf_Word& type, + Elf_Sxword& addend ) const + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + const T* pEntry = reinterpret_cast( + relocation_section->get_data() + + index * relocation_section->get_entry_size() ); + offset = convertor( pEntry->r_offset ); + Elf_Xword tmp = convertor( pEntry->r_info ); + symbol = get_sym_and_type::get_r_sym( tmp ); + type = get_sym_and_type::get_r_type( tmp ); + addend = 0; + } + + //------------------------------------------------------------------------------ + template + void generic_get_entry_rela( Elf_Xword index, + Elf64_Addr& offset, + Elf_Word& symbol, + Elf_Word& type, + Elf_Sxword& addend ) const + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + const T* pEntry = reinterpret_cast( + relocation_section->get_data() + + index * relocation_section->get_entry_size() ); + offset = convertor( pEntry->r_offset ); + Elf_Xword tmp = convertor( pEntry->r_info ); + symbol = get_sym_and_type::get_r_sym( tmp ); + type = get_sym_and_type::get_r_type( tmp ); + addend = convertor( pEntry->r_addend ); + } + + //------------------------------------------------------------------------------ + template + void generic_set_entry_rel( Elf_Xword index, + Elf64_Addr offset, + Elf_Word symbol, + Elf_Word type, + Elf_Sxword ) + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + T* pEntry = const_cast( reinterpret_cast( + relocation_section->get_data() + + index * relocation_section->get_entry_size() ) ); + + if ( elf_file.get_class() == ELFCLASS32 ) { + pEntry->r_info = ELF32_R_INFO( (Elf_Xword)symbol, type ); + } + else { + pEntry->r_info = ELF64_R_INFO( (Elf_Xword)symbol, type ); + } + pEntry->r_offset = offset; + pEntry->r_offset = convertor( pEntry->r_offset ); + pEntry->r_info = convertor( pEntry->r_info ); + } + + //------------------------------------------------------------------------------ + template + void generic_set_entry_rela( Elf_Xword index, + Elf64_Addr offset, + Elf_Word symbol, + Elf_Word type, + Elf_Sxword addend ) + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + T* pEntry = const_cast( reinterpret_cast( + relocation_section->get_data() + + index * relocation_section->get_entry_size() ) ); + + if ( elf_file.get_class() == ELFCLASS32 ) { + pEntry->r_info = ELF32_R_INFO( (Elf_Xword)symbol, type ); + } + else { + pEntry->r_info = ELF64_R_INFO( (Elf_Xword)symbol, type ); + } + pEntry->r_offset = offset; + pEntry->r_addend = addend; + pEntry->r_offset = convertor( pEntry->r_offset ); + pEntry->r_info = convertor( pEntry->r_info ); + pEntry->r_addend = convertor( pEntry->r_addend ); + } + + //------------------------------------------------------------------------------ + template + void generic_add_entry( Elf64_Addr offset, Elf_Xword info ) + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + T entry; + entry.r_offset = offset; + entry.r_info = info; + entry.r_offset = convertor( entry.r_offset ); + entry.r_info = convertor( entry.r_info ); + + relocation_section->append_data( reinterpret_cast( &entry ), + sizeof( entry ) ); + } + + //------------------------------------------------------------------------------ + template + void + generic_add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend ) + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + T entry; + entry.r_offset = offset; + entry.r_info = info; + entry.r_addend = addend; + entry.r_offset = convertor( entry.r_offset ); + entry.r_info = convertor( entry.r_info ); + entry.r_addend = convertor( entry.r_addend ); + + relocation_section->append_data( reinterpret_cast( &entry ), + sizeof( entry ) ); + } + + //------------------------------------------------------------------------------ + private: + const elfio& elf_file; + S* relocation_section; +}; + +using relocation_section_accessor = + relocation_section_accessor_template
; +using const_relocation_section_accessor = + relocation_section_accessor_template; + +} // namespace ELFIO + +#endif // ELFIO_RELOCATION_HPP + +/*** End of inlined file: elfio_relocation.hpp ***/ + + +/*** Start of inlined file: elfio_dynamic.hpp ***/ +#ifndef ELFIO_DYNAMIC_HPP +#define ELFIO_DYNAMIC_HPP + +namespace ELFIO { + +//------------------------------------------------------------------------------ +template class dynamic_section_accessor_template +{ + public: + //------------------------------------------------------------------------------ + dynamic_section_accessor_template( const elfio& elf_file_, S* section_ ) + : elf_file( elf_file_ ), dynamic_section( section_ ) + { + } + + //------------------------------------------------------------------------------ + Elf_Xword get_entries_num() const + { + Elf_Xword nRet = 0; + + if ( 0 != dynamic_section->get_entry_size() ) { + nRet = + dynamic_section->get_size() / dynamic_section->get_entry_size(); + } + + return nRet; + } + + //------------------------------------------------------------------------------ + bool get_entry( Elf_Xword index, + Elf_Xword& tag, + Elf_Xword& value, + std::string& str ) const + { + if ( index >= get_entries_num() ) { // Is index valid + return false; + } + + if ( elf_file.get_class() == ELFCLASS32 ) { + generic_get_entry_dyn( index, tag, value ); + } + else { + generic_get_entry_dyn( index, tag, value ); + } + + // If the tag may have a string table reference, prepare the string + if ( tag == DT_NEEDED || tag == DT_SONAME || tag == DT_RPATH || + tag == DT_RUNPATH ) { + string_section_accessor strsec = + elf_file.sections[get_string_table_index()]; + const char* result = strsec.get_string( value ); + if ( 0 == result ) { + str.clear(); + return false; + } + str = result; + } + else { + str.clear(); + } + + return true; + } + + //------------------------------------------------------------------------------ + void add_entry( Elf_Xword tag, Elf_Xword value ) + { + if ( elf_file.get_class() == ELFCLASS32 ) { + generic_add_entry( tag, value ); + } + else { + generic_add_entry( tag, value ); + } + } + + //------------------------------------------------------------------------------ + void add_entry( Elf_Xword tag, const std::string& str ) + { + string_section_accessor strsec = + elf_file.sections[get_string_table_index()]; + Elf_Xword value = strsec.add_string( str ); + add_entry( tag, value ); + } + + //------------------------------------------------------------------------------ + private: + //------------------------------------------------------------------------------ + Elf_Half get_string_table_index() const + { + return (Elf_Half)dynamic_section->get_link(); + } + + //------------------------------------------------------------------------------ + template + void generic_get_entry_dyn( Elf_Xword index, + Elf_Xword& tag, + Elf_Xword& value ) const + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + // Check unusual case when dynamic section has no data + if ( dynamic_section->get_data() == 0 || + ( index + 1 ) * dynamic_section->get_entry_size() > + dynamic_section->get_size() ) { + tag = DT_NULL; + value = 0; + return; + } + + const T* pEntry = reinterpret_cast( + dynamic_section->get_data() + + index * dynamic_section->get_entry_size() ); + tag = convertor( pEntry->d_tag ); + switch ( tag ) { + case DT_NULL: + case DT_SYMBOLIC: + case DT_TEXTREL: + case DT_BIND_NOW: + value = 0; + break; + case DT_NEEDED: + case DT_PLTRELSZ: + case DT_RELASZ: + case DT_RELAENT: + case DT_STRSZ: + case DT_SYMENT: + case DT_SONAME: + case DT_RPATH: + case DT_RELSZ: + case DT_RELENT: + case DT_PLTREL: + case DT_INIT_ARRAYSZ: + case DT_FINI_ARRAYSZ: + case DT_RUNPATH: + case DT_FLAGS: + case DT_PREINIT_ARRAYSZ: + value = convertor( pEntry->d_un.d_val ); + break; + case DT_PLTGOT: + case DT_HASH: + case DT_STRTAB: + case DT_SYMTAB: + case DT_RELA: + case DT_INIT: + case DT_FINI: + case DT_REL: + case DT_DEBUG: + case DT_JMPREL: + case DT_INIT_ARRAY: + case DT_FINI_ARRAY: + case DT_PREINIT_ARRAY: + default: + value = convertor( pEntry->d_un.d_ptr ); + break; + } + } + + //------------------------------------------------------------------------------ + template void generic_add_entry( Elf_Xword tag, Elf_Xword value ) + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + T entry; + + switch ( tag ) { + case DT_NULL: + case DT_SYMBOLIC: + case DT_TEXTREL: + case DT_BIND_NOW: + value = 0; + case DT_NEEDED: + case DT_PLTRELSZ: + case DT_RELASZ: + case DT_RELAENT: + case DT_STRSZ: + case DT_SYMENT: + case DT_SONAME: + case DT_RPATH: + case DT_RELSZ: + case DT_RELENT: + case DT_PLTREL: + case DT_INIT_ARRAYSZ: + case DT_FINI_ARRAYSZ: + case DT_RUNPATH: + case DT_FLAGS: + case DT_PREINIT_ARRAYSZ: + entry.d_un.d_val = convertor( value ); + break; + case DT_PLTGOT: + case DT_HASH: + case DT_STRTAB: + case DT_SYMTAB: + case DT_RELA: + case DT_INIT: + case DT_FINI: + case DT_REL: + case DT_DEBUG: + case DT_JMPREL: + case DT_INIT_ARRAY: + case DT_FINI_ARRAY: + case DT_PREINIT_ARRAY: + default: + entry.d_un.d_ptr = convertor( value ); + break; + } + + entry.d_tag = convertor( tag ); + + dynamic_section->append_data( reinterpret_cast( &entry ), + sizeof( entry ) ); + } + + //------------------------------------------------------------------------------ + private: + const elfio& elf_file; + S* dynamic_section; +}; + +using dynamic_section_accessor = dynamic_section_accessor_template
; +using const_dynamic_section_accessor = + dynamic_section_accessor_template; + +} // namespace ELFIO + +#endif // ELFIO_DYNAMIC_HPP + +/*** End of inlined file: elfio_dynamic.hpp ***/ + + +/*** Start of inlined file: elfio_modinfo.hpp ***/ +#ifndef ELFIO_MODINFO_HPP +#define ELFIO_MODINFO_HPP + +#include +#include + +namespace ELFIO { + +//------------------------------------------------------------------------------ +template class modinfo_section_accessor_template +{ + public: + //------------------------------------------------------------------------------ + modinfo_section_accessor_template( S* section_ ) + : modinfo_section( section_ ) + { + process_section(); + } + + //------------------------------------------------------------------------------ + Elf_Word get_attribute_num() const { return (Elf_Word)content.size(); } + + //------------------------------------------------------------------------------ + bool + get_attribute( Elf_Word no, std::string& field, std::string& value ) const + { + if ( no < content.size() ) { + field = content[no].first; + value = content[no].second; + return true; + } + + return false; + } + + //------------------------------------------------------------------------------ + bool get_attribute( std::string field_name, std::string& value ) const + { + for ( auto i = content.begin(); i != content.end(); i++ ) { + if ( field_name == i->first ) { + value = i->second; + return true; + } + } + + return false; + } + + //------------------------------------------------------------------------------ + Elf_Word add_attribute( std::string field, std::string value ) + { + Elf_Word current_position = 0; + + if ( modinfo_section ) { + // Strings are addeded to the end of the current section data + current_position = (Elf_Word)modinfo_section->get_size(); + + std::string attribute = field + "=" + value; + + modinfo_section->append_data( attribute + '\0' ); + content.push_back( + std::pair( field, value ) ); + } + + return current_position; + } + + //------------------------------------------------------------------------------ + private: + void process_section() + { + const char* pdata = modinfo_section->get_data(); + if ( pdata ) { + ELFIO::Elf_Xword i = 0; + while ( i < modinfo_section->get_size() ) { + while ( i < modinfo_section->get_size() && !pdata[i] ) + i++; + if ( i < modinfo_section->get_size() ) { + std::string info = pdata + i; + size_t loc = info.find( '=' ); + std::pair attribute( + info.substr( 0, loc ), info.substr( loc + 1 ) ); + + content.push_back( attribute ); + + i += info.length(); + } + } + } + } + + //------------------------------------------------------------------------------ + private: + S* modinfo_section; + std::vector> content; +}; + +using modinfo_section_accessor = modinfo_section_accessor_template
; +using const_modinfo_section_accessor = + modinfo_section_accessor_template; + +} // namespace ELFIO + +#endif // ELFIO_MODINFO_HPP + +/*** End of inlined file: elfio_modinfo.hpp ***/ + +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + +#endif // ELFIO_HPP + +/*** End of inlined file: elfio.hpp ***/ + + +namespace ELFIO { + +static struct class_table_t +{ + const char key; + const char* str; +} class_table[] = { + { ELFCLASS32, "ELF32" }, + { ELFCLASS64, "ELF64" }, +}; + +static struct endian_table_t +{ + const char key; + const char* str; +} endian_table[] = { + { ELFDATANONE, "None" }, + { ELFDATA2LSB, "Little endian" }, + { ELFDATA2MSB, "Big endian" }, +}; + +static struct version_table_t +{ + const Elf64_Word key; + const char* str; +} version_table[] = { + { EV_NONE, "None" }, + { EV_CURRENT, "Current" }, +}; + +static struct type_table_t +{ + const Elf32_Half key; + const char* str; +} type_table[] = { + { ET_NONE, "No file type" }, { ET_REL, "Relocatable file" }, + { ET_EXEC, "Executable file" }, { ET_DYN, "Shared object file" }, + { ET_CORE, "Core file" }, +}; + +static struct machine_table_t +{ + const Elf64_Half key; + const char* str; +} machine_table[] = { + { EM_NONE, "No machine" }, + { EM_M32, "AT&T WE 32100" }, + { EM_SPARC, "SUN SPARC" }, + { EM_386, "Intel 80386" }, + { EM_68K, "Motorola m68k family" }, + { EM_88K, "Motorola m88k family" }, + { EM_486, "Intel 80486// Reserved for future use" }, + { EM_860, "Intel 80860" }, + { EM_MIPS, "MIPS R3000 (officially, big-endian only)" }, + { EM_S370, "IBM System/370" }, + { EM_MIPS_RS3_LE, + "MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated" }, + { EM_res011, "Reserved" }, + { EM_res012, "Reserved" }, + { EM_res013, "Reserved" }, + { EM_res014, "Reserved" }, + { EM_PARISC, "HPPA" }, + { EM_res016, "Reserved" }, + { EM_VPP550, "Fujitsu VPP500" }, + { EM_SPARC32PLUS, "Sun's v8plus" }, + { EM_960, "Intel 80960" }, + { EM_PPC, "PowerPC" }, + { EM_PPC64, "64-bit PowerPC" }, + { EM_S390, "IBM S/390" }, + { EM_SPU, "Sony/Toshiba/IBM SPU" }, + { EM_res024, "Reserved" }, + { EM_res025, "Reserved" }, + { EM_res026, "Reserved" }, + { EM_res027, "Reserved" }, + { EM_res028, "Reserved" }, + { EM_res029, "Reserved" }, + { EM_res030, "Reserved" }, + { EM_res031, "Reserved" }, + { EM_res032, "Reserved" }, + { EM_res033, "Reserved" }, + { EM_res034, "Reserved" }, + { EM_res035, "Reserved" }, + { EM_V800, "NEC V800 series" }, + { EM_FR20, "Fujitsu FR20" }, + { EM_RH32, "TRW RH32" }, + { EM_MCORE, "Motorola M*Core // May also be taken by Fujitsu MMA" }, + { EM_RCE, "Old name for MCore" }, + { EM_ARM, "ARM" }, + { EM_OLD_ALPHA, "Digital Alpha" }, + { EM_SH, "Renesas (formerly Hitachi) / SuperH SH" }, + { EM_SPARCV9, "SPARC v9 64-bit" }, + { EM_TRICORE, "Siemens Tricore embedded processor" }, + { EM_ARC, "ARC Cores" }, + { EM_H8_300, "Renesas (formerly Hitachi) H8/300" }, + { EM_H8_300H, "Renesas (formerly Hitachi) H8/300H" }, + { EM_H8S, "Renesas (formerly Hitachi) H8S" }, + { EM_H8_500, "Renesas (formerly Hitachi) H8/500" }, + { EM_IA_64, "Intel IA-64 Processor" }, + { EM_MIPS_X, "Stanford MIPS-X" }, + { EM_COLDFIRE, "Motorola Coldfire" }, + { EM_68HC12, "Motorola M68HC12" }, + { EM_MMA, "Fujitsu Multimedia Accelerator" }, + { EM_PCP, "Siemens PCP" }, + { EM_NCPU, "Sony nCPU embedded RISC processor" }, + { EM_NDR1, "Denso NDR1 microprocesspr" }, + { EM_STARCORE, "Motorola Star*Core processor" }, + { EM_ME16, "Toyota ME16 processor" }, + { EM_ST100, "STMicroelectronics ST100 processor" }, + { EM_TINYJ, "Advanced Logic Corp. TinyJ embedded processor" }, + { EM_X86_64, "Advanced Micro Devices X86-64 processor" }, + { EM_PDSP, "Sony DSP Processor" }, + { EM_PDP10, "Digital Equipment Corp. PDP-10" }, + { EM_PDP11, "Digital Equipment Corp. PDP-11" }, + { EM_FX66, "Siemens FX66 microcontroller" }, + { EM_ST9PLUS, "STMicroelectronics ST9+ 8/16 bit microcontroller" }, + { EM_ST7, "STMicroelectronics ST7 8-bit microcontroller" }, + { EM_68HC16, "Motorola MC68HC16 Microcontroller" }, + { EM_68HC11, "Motorola MC68HC11 Microcontroller" }, + { EM_68HC08, "Motorola MC68HC08 Microcontroller" }, + { EM_68HC05, "Motorola MC68HC05 Microcontroller" }, + { EM_SVX, "Silicon Graphics SVx" }, + { EM_ST19, "STMicroelectronics ST19 8-bit cpu" }, + { EM_VAX, "Digital VAX" }, + { EM_CRIS, "Axis Communications 32-bit embedded processor" }, + { EM_JAVELIN, "Infineon Technologies 32-bit embedded cpu" }, + { EM_FIREPATH, "Element 14 64-bit DSP processor" }, + { EM_ZSP, "LSI Logic's 16-bit DSP processor" }, + { EM_MMIX, "Donald Knuth's educational 64-bit processor" }, + { EM_HUANY, "Harvard's machine-independent format" }, + { EM_PRISM, "SiTera Prism" }, + { EM_AVR, "Atmel AVR 8-bit microcontroller" }, + { EM_FR30, "Fujitsu FR30" }, + { EM_D10V, "Mitsubishi D10V" }, + { EM_D30V, "Mitsubishi D30V" }, + { EM_V850, "NEC v850" }, + { EM_M32R, "Renesas M32R (formerly Mitsubishi M32R)" }, + { EM_MN10300, "Matsushita MN10300" }, + { EM_MN10200, "Matsushita MN10200" }, + { EM_PJ, "picoJava" }, + { EM_OPENRISC, "OpenRISC 32-bit embedded processor" }, + { EM_ARC_A5, "ARC Cores Tangent-A5" }, + { EM_XTENSA, "Tensilica Xtensa Architecture" }, + { EM_VIDEOCORE, "Alphamosaic VideoCore processor" }, + { EM_TMM_GPP, "Thompson Multimedia General Purpose Processor" }, + { EM_NS32K, "National Semiconductor 32000 series" }, + { EM_TPC, "Tenor Network TPC processor" }, + { EM_SNP1K, "Trebia SNP 1000 processor" }, + { EM_ST200, "STMicroelectronics ST200 microcontroller" }, + { EM_IP2K, "Ubicom IP2022 micro controller" }, + { EM_MAX, "MAX Processor" }, + { EM_CR, "National Semiconductor CompactRISC" }, + { EM_F2MC16, "Fujitsu F2MC16" }, + { EM_MSP430, "TI msp430 micro controller" }, + { EM_BLACKFIN, "ADI Blackfin" }, + { EM_SE_C33, "S1C33 Family of Seiko Epson processors" }, + { EM_SEP, "Sharp embedded microprocessor" }, + { EM_ARCA, "Arca RISC Microprocessor" }, + { EM_UNICORE, "Microprocessor series from PKU-Unity Ltd. and MPRC of " + "Peking University" }, + { EM_EXCESS, "eXcess: 16/32/64-bit configurable embedded CPU" }, + { EM_DXP, "Icera Semiconductor Inc. Deep Execution Processor" }, + { EM_ALTERA_NIOS2, "Altera Nios II soft-core processor" }, + { EM_CRX, "National Semiconductor CRX" }, + { EM_XGATE, "Motorola XGATE embedded processor" }, + { EM_C166, "Infineon C16x/XC16x processor" }, + { EM_M16C, "Renesas M16C series microprocessors" }, + { EM_DSPIC30F, "Microchip Technology dsPIC30F Digital Signal Controller" }, + { EM_CE, "Freescale Communication Engine RISC core" }, + { EM_M32C, "Renesas M32C series microprocessors" }, + { EM_res121, "Reserved" }, + { EM_res122, "Reserved" }, + { EM_res123, "Reserved" }, + { EM_res124, "Reserved" }, + { EM_res125, "Reserved" }, + { EM_res126, "Reserved" }, + { EM_res127, "Reserved" }, + { EM_res128, "Reserved" }, + { EM_res129, "Reserved" }, + { EM_res130, "Reserved" }, + { EM_TSK3000, "Altium TSK3000 core" }, + { EM_RS08, "Freescale RS08 embedded processor" }, + { EM_res133, "Reserved" }, + { EM_ECOG2, "Cyan Technology eCOG2 microprocessor" }, + { EM_SCORE, "Sunplus Score" }, + { EM_SCORE7, "Sunplus S+core7 RISC processor" }, + { EM_DSP24, "New Japan Radio (NJR) 24-bit DSP Processor" }, + { EM_VIDEOCORE3, "Broadcom VideoCore III processor" }, + { EM_LATTICEMICO32, "RISC processor for Lattice FPGA architecture" }, + { EM_SE_C17, "Seiko Epson C17 family" }, + { EM_TI_C6000, "Texas Instruments TMS320C6000 DSP family" }, + { EM_TI_C2000, "Texas Instruments TMS320C2000 DSP family" }, + { EM_TI_C5500, "Texas Instruments TMS320C55x DSP family" }, + { EM_res143, "Reserved" }, + { EM_res144, "Reserved" }, + { EM_res145, "Reserved" }, + { EM_res146, "Reserved" }, + { EM_res147, "Reserved" }, + { EM_res148, "Reserved" }, + { EM_res149, "Reserved" }, + { EM_res150, "Reserved" }, + { EM_res151, "Reserved" }, + { EM_res152, "Reserved" }, + { EM_res153, "Reserved" }, + { EM_res154, "Reserved" }, + { EM_res155, "Reserved" }, + { EM_res156, "Reserved" }, + { EM_res157, "Reserved" }, + { EM_res158, "Reserved" }, + { EM_res159, "Reserved" }, + { EM_MMDSP_PLUS, "STMicroelectronics 64bit VLIW Data Signal Processor" }, + { EM_CYPRESS_M8C, "Cypress M8C microprocessor" }, + { EM_R32C, "Renesas R32C series microprocessors" }, + { EM_TRIMEDIA, "NXP Semiconductors TriMedia architecture family" }, + { EM_QDSP6, "QUALCOMM DSP6 Processor" }, + { EM_8051, "Intel 8051 and variants" }, + { EM_STXP7X, "STMicroelectronics STxP7x family" }, + { EM_NDS32, + "Andes Technology compact code size embedded RISC processor family" }, + { EM_ECOG1, "Cyan Technology eCOG1X family" }, + { EM_ECOG1X, "Cyan Technology eCOG1X family" }, + { EM_MAXQ30, "Dallas Semiconductor MAXQ30 Core Micro-controllers" }, + { EM_XIMO16, "New Japan Radio (NJR) 16-bit DSP Processor" }, + { EM_MANIK, "M2000 Reconfigurable RISC Microprocessor" }, + { EM_CRAYNV2, "Cray Inc. NV2 vector architecture" }, + { EM_RX, "Renesas RX family" }, + { EM_METAG, "Imagination Technologies META processor architecture" }, + { EM_MCST_ELBRUS, "MCST Elbrus general purpose hardware architecture" }, + { EM_ECOG16, "Cyan Technology eCOG16 family" }, + { EM_CR16, "National Semiconductor CompactRISC 16-bit processor" }, + { EM_ETPU, "Freescale Extended Time Processing Unit" }, + { EM_SLE9X, "Infineon Technologies SLE9X core" }, + { EM_L1OM, "Intel L1OM" }, + { EM_INTEL181, "Reserved by Intel" }, + { EM_INTEL182, "Reserved by Intel" }, + { EM_res183, "Reserved by ARM" }, + { EM_res184, "Reserved by ARM" }, + { EM_AVR32, "Atmel Corporation 32-bit microprocessor family" }, + { EM_STM8, "STMicroeletronics STM8 8-bit microcontroller" }, + { EM_TILE64, "Tilera TILE64 multicore architecture family" }, + { EM_TILEPRO, "Tilera TILEPro multicore architecture family" }, + { EM_MICROBLAZE, "Xilinx MicroBlaze 32-bit RISC soft processor core" }, + { EM_CUDA, "NVIDIA CUDA architecture " }, +}; + +static struct section_type_table_t +{ + const Elf64_Half key; + const char* str; +} section_type_table[] = { + { SHT_NULL, "NULL" }, + { SHT_PROGBITS, "PROGBITS" }, + { SHT_SYMTAB, "SYMTAB" }, + { SHT_STRTAB, "STRTAB" }, + { SHT_RELA, "RELA" }, + { SHT_HASH, "HASH" }, + { SHT_DYNAMIC, "DYNAMIC" }, + { SHT_NOTE, "NOTE" }, + { SHT_NOBITS, "NOBITS" }, + { SHT_REL, "REL" }, + { SHT_SHLIB, "SHLIB" }, + { SHT_DYNSYM, "DYNSYM" }, + { SHT_INIT_ARRAY, "INIT_ARRAY" }, + { SHT_FINI_ARRAY, "FINI_ARRAY" }, + { SHT_PREINIT_ARRAY, "PREINIT_ARRAY" }, + { SHT_GROUP, "GROUP" }, + { SHT_SYMTAB_SHNDX, "SYMTAB_SHNDX " }, +}; + +static struct segment_type_table_t +{ + const Elf_Word key; + const char* str; +} segment_type_table[] = { + { PT_NULL, "NULL" }, { PT_LOAD, "LOAD" }, { PT_DYNAMIC, "DYNAMIC" }, + { PT_INTERP, "INTERP" }, { PT_NOTE, "NOTE" }, { PT_SHLIB, "SHLIB" }, + { PT_PHDR, "PHDR" }, { PT_TLS, "TLS" }, +}; + +static struct segment_flag_table_t +{ + const Elf_Word key; + const char* str; +} segment_flag_table[] = { + { 0, "" }, { 1, "X" }, { 2, "W" }, { 3, "WX" }, + { 4, "R" }, { 5, "RX" }, { 6, "RW" }, { 7, "RWX" }, +}; + +static struct symbol_bind_t +{ + const Elf_Word key; + const char* str; +} symbol_bind_table[] = { + { STB_LOCAL, "LOCAL" }, { STB_GLOBAL, "GLOBAL" }, + { STB_WEAK, "WEAK" }, { STB_LOOS, "LOOS" }, + { STB_HIOS, "HIOS" }, { STB_MULTIDEF, "MULTIDEF" }, + { STB_LOPROC, "LOPROC" }, { STB_HIPROC, "HIPROC" }, +}; + +static struct symbol_type_t +{ + const Elf_Word key; + const char* str; +} symbol_type_table[] = { + { STT_NOTYPE, "NOTYPE" }, { STT_OBJECT, "OBJECT" }, + { STT_FUNC, "FUNC" }, { STT_SECTION, "SECTION" }, + { STT_FILE, "FILE" }, { STT_COMMON, "COMMON" }, + { STT_TLS, "TLS" }, { STT_LOOS, "LOOS" }, + { STT_HIOS, "HIOS" }, { STT_LOPROC, "LOPROC" }, + { STT_HIPROC, "HIPROC" }, +}; + +static struct dynamic_tag_t +{ + const Elf_Word key; + const char* str; +} dynamic_tag_table[] = { + { DT_NULL, "NULL" }, + { DT_NEEDED, "NEEDED" }, + { DT_PLTRELSZ, "PLTRELSZ" }, + { DT_PLTGOT, "PLTGOT" }, + { DT_HASH, "HASH" }, + { DT_STRTAB, "STRTAB" }, + { DT_SYMTAB, "SYMTAB" }, + { DT_RELA, "RELA" }, + { DT_RELASZ, "RELASZ" }, + { DT_RELAENT, "RELAENT" }, + { DT_STRSZ, "STRSZ" }, + { DT_SYMENT, "SYMENT" }, + { DT_INIT, "INIT" }, + { DT_FINI, "FINI" }, + { DT_SONAME, "SONAME" }, + { DT_RPATH, "RPATH" }, + { DT_SYMBOLIC, "SYMBOLIC" }, + { DT_REL, "REL" }, + { DT_RELSZ, "RELSZ" }, + { DT_RELENT, "RELENT" }, + { DT_PLTREL, "PLTREL" }, + { DT_DEBUG, "DEBUG" }, + { DT_TEXTREL, "TEXTREL" }, + { DT_JMPREL, "JMPREL" }, + { DT_BIND_NOW, "BIND_NOW" }, + { DT_INIT_ARRAY, "INIT_ARRAY" }, + { DT_FINI_ARRAY, "FINI_ARRAY" }, + { DT_INIT_ARRAYSZ, "INIT_ARRAYSZ" }, + { DT_FINI_ARRAYSZ, "FINI_ARRAYSZ" }, + { DT_RUNPATH, "RUNPATH" }, + { DT_FLAGS, "FLAGS" }, + { DT_ENCODING, "ENCODING" }, + { DT_PREINIT_ARRAY, "PREINIT_ARRAY" }, + { DT_PREINIT_ARRAYSZ, "PREINIT_ARRAYSZ" }, + { DT_MAXPOSTAGS, "MAXPOSTAGS" }, +}; + +static const ELFIO::Elf_Xword MAX_DATA_ENTRIES = 64; + +//------------------------------------------------------------------------------ +class dump +{ +#define DUMP_DEC_FORMAT( width ) \ + std::setw( width ) << std::setfill( ' ' ) << std::dec << std::right +#define DUMP_HEX_FORMAT( width ) \ + std::setw( width ) << std::setfill( '0' ) << std::hex << std::right +#define DUMP_STR_FORMAT( width ) \ + std::setw( width ) << std::setfill( ' ' ) << std::hex << std::left + + public: + //------------------------------------------------------------------------------ + static void header( std::ostream& out, const elfio& reader ) + { + if ( !reader.get_header_size() ) { + return; + } + out << "ELF Header" << std::endl + << std::endl + << " Class: " << str_class( reader.get_class() ) << std::endl + << " Encoding: " << str_endian( reader.get_encoding() ) + << std::endl + << " ELFVersion: " << str_version( reader.get_elf_version() ) + << std::endl + << " Type: " << str_type( reader.get_type() ) << std::endl + << " Machine: " << str_machine( reader.get_machine() ) + << std::endl + << " Version: " << str_version( reader.get_version() ) + << std::endl + << " Entry: " + << "0x" << std::hex << reader.get_entry() << std::endl + << " Flags: " + << "0x" << std::hex << reader.get_flags() << std::endl + << std::endl; + } + + //------------------------------------------------------------------------------ + static void section_headers( std::ostream& out, const elfio& reader ) + { + Elf_Half n = reader.sections.size(); + + if ( n == 0 ) { + return; + } + + out << "Section Headers:" << std::endl; + if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit + out << "[ Nr ] Type Addr Size ES Flg Lk Inf " + "Al Name" + << std::endl; + } + else { // Output for 64-bit + out << "[ Nr ] Type Addr Size " + " ES Flg" + << std::endl + << " Lk Inf Al Name" << std::endl; + } + + for ( Elf_Half i = 0; i < n; ++i ) { // For all sections + section* sec = reader.sections[i]; + section_header( out, i, sec, reader.get_class() ); + } + + out << "Key to Flags: W (write), A (alloc), X (execute)\n\n" + << std::endl; + } + + //------------------------------------------------------------------------------ + static void section_header( std::ostream& out, + Elf_Half no, + const section* sec, + unsigned char elf_class ) + { + std::ios_base::fmtflags original_flags = out.flags(); + + if ( elf_class == ELFCLASS32 ) { // Output for 32-bit + out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " + << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) + << " " << DUMP_HEX_FORMAT( 8 ) << sec->get_address() << " " + << DUMP_HEX_FORMAT( 8 ) << sec->get_size() << " " + << DUMP_HEX_FORMAT( 2 ) << sec->get_entry_size() << " " + << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) + << " " << DUMP_HEX_FORMAT( 2 ) << sec->get_link() << " " + << DUMP_HEX_FORMAT( 3 ) << sec->get_info() << " " + << DUMP_HEX_FORMAT( 2 ) << sec->get_addr_align() << " " + << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " " << std::endl; + } + else { // Output for 64-bit + out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " + << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) + << " " << DUMP_HEX_FORMAT( 16 ) << sec->get_address() << " " + << DUMP_HEX_FORMAT( 16 ) << sec->get_size() << " " + << DUMP_HEX_FORMAT( 4 ) << sec->get_entry_size() << " " + << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) + << " " << std::endl + << " " << DUMP_HEX_FORMAT( 4 ) << sec->get_link() << " " + << DUMP_HEX_FORMAT( 4 ) << sec->get_info() << " " + << DUMP_HEX_FORMAT( 4 ) << sec->get_addr_align() << " " + << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " " << std::endl; + } + + out.flags( original_flags ); + + return; + } + + //------------------------------------------------------------------------------ + static void segment_headers( std::ostream& out, const elfio& reader ) + { + Elf_Half n = reader.segments.size(); + if ( n == 0 ) { + return; + } + + out << "Segment headers:" << std::endl; + if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit + out << "[ Nr ] Type VirtAddr PhysAddr FileSize Mem.Size " + "Flags Align" + << std::endl; + } + else { // Output for 64-bit + out << "[ Nr ] Type VirtAddr PhysAddr " + "Flags" + << std::endl + << " FileSize Mem.Size " + "Align" + << std::endl; + } + + for ( Elf_Half i = 0; i < n; ++i ) { + segment* seg = reader.segments[i]; + segment_header( out, i, seg, reader.get_class() ); + } + + out << std::endl; + } + + //------------------------------------------------------------------------------ + static void segment_header( std::ostream& out, + Elf_Half no, + const segment* seg, + unsigned int elf_class ) + { + std::ios_base::fmtflags original_flags = out.flags(); + + if ( elf_class == ELFCLASS32 ) { // Output for 32-bit + out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " + << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) + << " " << DUMP_HEX_FORMAT( 8 ) << seg->get_virtual_address() + << " " << DUMP_HEX_FORMAT( 8 ) << seg->get_physical_address() + << " " << DUMP_HEX_FORMAT( 8 ) << seg->get_file_size() << " " + << DUMP_HEX_FORMAT( 8 ) << seg->get_memory_size() << " " + << DUMP_STR_FORMAT( 8 ) << str_segment_flag( seg->get_flags() ) + << " " << DUMP_HEX_FORMAT( 8 ) << seg->get_align() << " " + << std::endl; + } + else { // Output for 64-bit + out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " + << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) + << " " << DUMP_HEX_FORMAT( 16 ) << seg->get_virtual_address() + << " " << DUMP_HEX_FORMAT( 16 ) << seg->get_physical_address() + << " " << DUMP_STR_FORMAT( 16 ) + << str_segment_flag( seg->get_flags() ) << " " << std::endl + << " " << DUMP_HEX_FORMAT( 16 ) + << seg->get_file_size() << " " << DUMP_HEX_FORMAT( 16 ) + << seg->get_memory_size() << " " << DUMP_HEX_FORMAT( 16 ) + << seg->get_align() << " " << std::endl; + } + + out.flags( original_flags ); + } + + //------------------------------------------------------------------------------ + static void symbol_tables( std::ostream& out, const elfio& reader ) + { + Elf_Half n = reader.sections.size(); + for ( Elf_Half i = 0; i < n; ++i ) { // For all sections + section* sec = reader.sections[i]; + if ( SHT_SYMTAB == sec->get_type() || + SHT_DYNSYM == sec->get_type() ) { + symbol_section_accessor symbols( reader, sec ); + + Elf_Xword sym_no = symbols.get_symbols_num(); + if ( sym_no > 0 ) { + out << "Symbol table (" << sec->get_name() << ")" + << std::endl; + if ( reader.get_class() == + ELFCLASS32 ) { // Output for 32-bit + out << "[ Nr ] Value Size Type Bind " + "Sect Name" + << std::endl; + } + else { // Output for 64-bit + out << "[ Nr ] Value Size Type " + " Bind Sect" + << std::endl + << " Name" << std::endl; + } + for ( Elf_Xword i = 0; i < sym_no; ++i ) { + std::string name; + Elf64_Addr value = 0; + Elf_Xword size = 0; + unsigned char bind = 0; + unsigned char type = 0; + Elf_Half section = 0; + unsigned char other = 0; + symbols.get_symbol( i, name, value, size, bind, type, + section, other ); + symbol_table( out, i, name, value, size, bind, type, + section, reader.get_class() ); + } + + out << std::endl; + } + } + } + } + + //------------------------------------------------------------------------------ + static void symbol_table( std::ostream& out, + Elf_Xword no, + std::string& name, + Elf64_Addr value, + Elf_Xword size, + unsigned char bind, + unsigned char type, + Elf_Half section, + unsigned int elf_class ) + { + std::ios_base::fmtflags original_flags = out.flags(); + + if ( elf_class == ELFCLASS32 ) { // Output for 32-bit + out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " + << DUMP_HEX_FORMAT( 8 ) << value << " " << DUMP_HEX_FORMAT( 8 ) + << size << " " << DUMP_STR_FORMAT( 7 ) + << str_symbol_type( type ) << " " << DUMP_STR_FORMAT( 8 ) + << str_symbol_bind( bind ) << " " << DUMP_DEC_FORMAT( 5 ) + << section << " " << DUMP_STR_FORMAT( 1 ) << name << " " + << std::endl; + } + else { // Output for 64-bit + out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " + << DUMP_HEX_FORMAT( 16 ) << value << " " + << DUMP_HEX_FORMAT( 16 ) << size << " " << DUMP_STR_FORMAT( 7 ) + << str_symbol_type( type ) << " " << DUMP_STR_FORMAT( 8 ) + << str_symbol_bind( bind ) << " " << DUMP_DEC_FORMAT( 5 ) + << section << " " << std::endl + << " " << DUMP_STR_FORMAT( 1 ) << name << " " + << std::endl; + } + + out.flags( original_flags ); + } + + //------------------------------------------------------------------------------ + static void notes( std::ostream& out, const elfio& reader ) + { + Elf_Half no = reader.sections.size(); + for ( Elf_Half i = 0; i < no; ++i ) { // For all sections + section* sec = reader.sections[i]; + if ( SHT_NOTE == sec->get_type() ) { // Look at notes + note_section_accessor notes( reader, sec ); + Elf_Word no_notes = notes.get_notes_num(); + if ( no > 0 ) { + out << "Note section (" << sec->get_name() << ")" + << std::endl + << " No Type Name" << std::endl; + for ( Elf_Word j = 0; j < no_notes; ++j ) { // For all notes + Elf_Word type; + std::string name; + void* desc; + Elf_Word descsz; + + if ( notes.get_note( j, type, name, desc, descsz ) ) { + // 'name' usually contains \0 at the end. Try to fix it + name = name.c_str(); + note( out, j, type, name ); + } + } + + out << std::endl; + } + } + } + } + + //------------------------------------------------------------------------------ + static void modinfo( std::ostream& out, const elfio& reader ) + { + Elf_Half no = reader.sections.size(); + for ( Elf_Half i = 0; i < no; ++i ) { // For all sections + section* sec = reader.sections[i]; + if ( ".modinfo" == sec->get_name() ) { // Look for the section + out << "Section .modinfo" << std::endl; + + const_modinfo_section_accessor modinfo( sec ); + for ( Elf_Word i = 0; i < modinfo.get_attribute_num(); i++ ) { + std::string field; + std::string value; + if ( modinfo.get_attribute( i, field, value ) ) { + out << " " << std::setw( 20 ) << field + << std::setw( 0 ) << " = " << value << std::endl; + } + } + + out << std::endl; + break; + } + } + } + + //------------------------------------------------------------------------------ + static void + note( std::ostream& out, int no, Elf_Word type, const std::string& name ) + { + out << " [" << DUMP_DEC_FORMAT( 2 ) << no << "] " + << DUMP_HEX_FORMAT( 8 ) << type << " " << DUMP_STR_FORMAT( 1 ) + << name << std::endl; + } + + //------------------------------------------------------------------------------ + static void dynamic_tags( std::ostream& out, const elfio& reader ) + { + Elf_Half n = reader.sections.size(); + for ( Elf_Half i = 0; i < n; ++i ) { // For all sections + section* sec = reader.sections[i]; + if ( SHT_DYNAMIC == sec->get_type() ) { + dynamic_section_accessor dynamic( reader, sec ); + + Elf_Xword dyn_no = dynamic.get_entries_num(); + if ( dyn_no > 0 ) { + out << "Dynamic section (" << sec->get_name() << ")" + << std::endl; + out << "[ Nr ] Tag Name/Value" << std::endl; + for ( Elf_Xword i = 0; i < dyn_no; ++i ) { + Elf_Xword tag = 0; + Elf_Xword value = 0; + std::string str; + dynamic.get_entry( i, tag, value, str ); + dynamic_tag( out, i, tag, value, str, + reader.get_class() ); + if ( DT_NULL == tag ) { + break; + } + } + + out << std::endl; + } + } + } + } + + //------------------------------------------------------------------------------ + static void dynamic_tag( std::ostream& out, + Elf_Xword no, + Elf_Xword tag, + Elf_Xword value, + std::string str, + unsigned int /*elf_class*/ ) + { + out << "[" << DUMP_DEC_FORMAT( 5 ) << no << "] " + << DUMP_STR_FORMAT( 16 ) << str_dynamic_tag( tag ) << " "; + if ( str.empty() ) { + out << DUMP_HEX_FORMAT( 16 ) << value << " "; + } + else { + out << DUMP_STR_FORMAT( 32 ) << str << " "; + } + out << std::endl; + } + + //------------------------------------------------------------------------------ + static void section_data( std::ostream& out, const section* sec ) + { + std::ios_base::fmtflags original_flags = out.flags(); + + out << sec->get_name() << std::endl; + const char* pdata = sec->get_data(); + if ( pdata ) { + ELFIO::Elf_Xword i; + for ( i = 0; i < std::min( sec->get_size(), MAX_DATA_ENTRIES ); + ++i ) { + if ( i % 16 == 0 ) { + out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]"; + } + + out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF ); + + if ( i % 16 == 15 ) { + out << std::endl; + } + } + if ( i % 16 != 0 ) { + out << std::endl; + } + + out.flags( original_flags ); + } + + return; + } + + //------------------------------------------------------------------------------ + static void section_datas( std::ostream& out, const elfio& reader ) + { + Elf_Half n = reader.sections.size(); + + if ( n == 0 ) { + return; + } + + out << "Section Data:" << std::endl; + + for ( Elf_Half i = 1; i < n; ++i ) { // For all sections + section* sec = reader.sections[i]; + if ( sec->get_type() == SHT_NOBITS ) { + continue; + } + section_data( out, sec ); + } + + out << std::endl; + } + + //------------------------------------------------------------------------------ + static void + segment_data( std::ostream& out, Elf_Half no, const segment* seg ) + { + std::ios_base::fmtflags original_flags = out.flags(); + + out << "Segment # " << no << std::endl; + const char* pdata = seg->get_data(); + if ( pdata ) { + ELFIO::Elf_Xword i; + for ( i = 0; i < std::min( seg->get_file_size(), MAX_DATA_ENTRIES ); + ++i ) { + if ( i % 16 == 0 ) { + out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]"; + } + + out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF ); + + if ( i % 16 == 15 ) { + out << std::endl; + } + } + if ( i % 16 != 0 ) { + out << std::endl; + } + + out.flags( original_flags ); + } + + return; + } + + //------------------------------------------------------------------------------ + static void segment_datas( std::ostream& out, const elfio& reader ) + { + Elf_Half n = reader.segments.size(); + + if ( n == 0 ) { + return; + } + + out << "Segment Data:" << std::endl; + + for ( Elf_Half i = 0; i < n; ++i ) { // For all sections + segment* seg = reader.segments[i]; + segment_data( out, i, seg ); + } + + out << std::endl; + } + + private: + //------------------------------------------------------------------------------ + template + std::string static find_value_in_table( const T& table, const K& key ) + { + std::string res = "?"; + for ( unsigned int i = 0; i < sizeof( table ) / sizeof( table[0] ); + ++i ) { + if ( table[i].key == key ) { + res = table[i].str; + break; + } + } + + return res; + } + + //------------------------------------------------------------------------------ + template + static std::string format_assoc( const T& table, const K& key ) + { + std::string str = find_value_in_table( table, key ); + if ( str == "?" ) { + std::ostringstream oss; + oss << str << " (0x" << std::hex << key << ")"; + str = oss.str(); + } + + return str; + } + + //------------------------------------------------------------------------------ + template + static std::string format_assoc( const T& table, const char key ) + { + return format_assoc( table, (const int)key ); + } + + //------------------------------------------------------------------------------ + static std::string section_flags( Elf_Xword flags ) + { + std::string ret = ""; + if ( flags & SHF_WRITE ) { + ret += "W"; + } + if ( flags & SHF_ALLOC ) { + ret += "A"; + } + if ( flags & SHF_EXECINSTR ) { + ret += "X"; + } + + return ret; + } + +//------------------------------------------------------------------------------ +#define STR_FUNC_TABLE( name ) \ + template static std::string str_##name( const T key ) \ + { \ + return format_assoc( name##_table, key ); \ + } + + STR_FUNC_TABLE( class ) + STR_FUNC_TABLE( endian ) + STR_FUNC_TABLE( version ) + STR_FUNC_TABLE( type ) + STR_FUNC_TABLE( machine ) + STR_FUNC_TABLE( section_type ) + STR_FUNC_TABLE( segment_type ) + STR_FUNC_TABLE( segment_flag ) + STR_FUNC_TABLE( symbol_bind ) + STR_FUNC_TABLE( symbol_type ) + STR_FUNC_TABLE( dynamic_tag ) + +#undef STR_FUNC_TABLE +#undef DUMP_DEC_FORMAT +#undef DUMP_HEX_FORMAT +#undef DUMP_STR_FORMAT +}; // class dump + +}; // namespace ELFIO + +#endif // ELFIO_DUMP_HPP + +/*** End of inlined file: elfio_dump.hpp ***/ + + + + + + + + + + + + + + + + + +#ifndef __ADDR_ANY_H__ +#define __ADDR_ANY_H__ + + +//linux +#include +#include +//c +#include +#include +#include + +//c++ +#include +#include + + + + +class AddrAny +{ +public: + AddrAny() + { + m_init = get_exe_pathname(m_fullname); + m_baseaddr = 0; + } + AddrAny(std::string libname) + { + m_init = get_lib_pathname_and_baseaddr(libname, m_fullname, m_baseaddr); + } + + int get_local_func_addr_symtab(std::string func_name_regex_str, std::map& result) + { + return get_func_addr(SHT_SYMTAB, STB_LOCAL, func_name_regex_str, result); + } + int get_global_func_addr_symtab(std::string func_name_regex_str, std::map& result) + { + return get_func_addr(SHT_SYMTAB, STB_GLOBAL, func_name_regex_str, result); + } + int get_weak_func_addr_symtab(std::string func_name_regex_str, std::map& result) + { + return get_func_addr(SHT_SYMTAB, STB_WEAK, func_name_regex_str, result); + } + + int get_global_func_addr_dynsym( std::string func_name_regex_str, std::map& result) + { + return get_func_addr(SHT_DYNSYM, STB_GLOBAL, func_name_regex_str, result); + } + int get_weak_func_addr_dynsym(std::string func_name_regex_str, std::map& result) + { + return get_func_addr(SHT_DYNSYM, STB_WEAK, func_name_regex_str, result); + } + +private: + bool demangle(std::string& s, std::string& name) { + int status; + char* pname = abi::__cxa_demangle(s.c_str(), 0, 0, &status); + if (status != 0) + { + switch(status) + { + case -1: name = "memory allocation error"; break; + case -2: name = "invalid name given"; break; + case -3: name = "internal error: __cxa_demangle: invalid argument"; break; + default: name = "unknown error occured"; break; + } + return false; + } + name = pname; + free(pname); + return true; + } + bool get_exe_pathname( std::string& name) + { + char line[512]; + FILE *fp; + uintptr_t base_addr; + char perm[5]; + unsigned long offset; + int pathname_pos; + char *pathname; + size_t pathname_len; + int match = 0; + + if(NULL == (fp = fopen("/proc/self/maps", "r"))) + { + return false; + } + + while(fgets(line, sizeof(line), fp)) + { + if(sscanf(line, "%" PRIxPTR "-%*lx %4s %lx %*x:%*x %*d%n", &base_addr, perm, &offset, &pathname_pos) != 3) continue; + + if(0 != offset) continue; + + //get pathname + while(isspace(line[pathname_pos]) && pathname_pos < (int)(sizeof(line) - 1)) + pathname_pos += 1; + if(pathname_pos >= (int)(sizeof(line) - 1)) continue; + pathname = line + pathname_pos; + pathname_len = strlen(pathname); + if(0 == pathname_len) continue; + if(pathname[pathname_len - 1] == '\n') + { + pathname[pathname_len - 1] = '\0'; + pathname_len -= 1; + } + if(0 == pathname_len) continue; + if('[' == pathname[0]) continue; + + name = pathname; + match = 1; + break; + + } + fclose(fp); + + if(0 == match) + { + return false; + } + else + { + return true; + } + + } + + bool get_lib_pathname_and_baseaddr(std::string pathname_regex_str, std::string& name, unsigned long& addr) + { + char line[512]; + FILE *fp; + uintptr_t base_addr; + char perm[5]; + unsigned long offset; + int pathname_pos; + char *pathname; + size_t pathname_len; + int match; + regex_t pathname_regex; + + regcomp(&pathname_regex, pathname_regex_str.c_str(), 0); + + if(NULL == (fp = fopen("/proc/self/maps", "r"))) + { + return false; + } + + while(fgets(line, sizeof(line), fp)) + { + if(sscanf(line, "%" PRIxPTR "-%*lx %4s %lx %*x:%*x %*d%n", &base_addr, perm, &offset, &pathname_pos) != 3) continue; + + //check permission + if(perm[0] != 'r') continue; + if(perm[3] != 'p') continue; //do not touch the shared memory + + //check offset + // + //We are trying to find ELF header in memory. + //It can only be found at the beginning of a mapped memory regions + //whose offset is 0. + if(0 != offset) continue; + + //get pathname + while(isspace(line[pathname_pos]) && pathname_pos < (int)(sizeof(line) - 1)) + pathname_pos += 1; + if(pathname_pos >= (int)(sizeof(line) - 1)) continue; + pathname = line + pathname_pos; + pathname_len = strlen(pathname); + if(0 == pathname_len) continue; + if(pathname[pathname_len - 1] == '\n') + { + pathname[pathname_len - 1] = '\0'; + pathname_len -= 1; + } + if(0 == pathname_len) continue; + if('[' == pathname[0]) continue; + + //check pathname + //if we need to hook this elf? + match = 0; + if(0 == regexec(&pathname_regex, pathname, 0, NULL, 0)) + { + match = 1; + name = pathname; + addr = (unsigned long)base_addr; + break; + } + if(0 == match) continue; + + } + fclose(fp); + if(0 == match) + { + return false; + } + else + { + return true; + } + + } + + int get_func_addr(unsigned int ttype, unsigned int stype, std::string& func_name_regex_str, std::map& result) + { + // Create an elfio reader + ELFIO::elfio reader; + int count = 0; + regex_t pathname_regex; + + if(!m_init) + { + return -1; + } + + regcomp(&pathname_regex, func_name_regex_str.c_str(), 0); + // Load ELF data + if(!reader.load(m_fullname.c_str())) + { + return -1; + } + + ELFIO::Elf_Half sec_num = reader.sections.size(); + for(int i = 0; i < sec_num; ++i) + { + ELFIO::section* psec = reader.sections[i]; + // Check section type + if(psec->get_type() == ttype) + { + const ELFIO::symbol_section_accessor symbols( reader, psec ); + for ( unsigned int j = 0; j < symbols.get_symbols_num(); ++j ) + { + std::string name; + std::string name_mangle; + ELFIO::Elf64_Addr value; + ELFIO::Elf_Xword size; + unsigned char bind; + unsigned char type; + ELFIO::Elf_Half section_index; + unsigned char other; + + // Read symbol properties + symbols.get_symbol( j, name, value, size, bind, type, section_index, other ); + if(type == STT_FUNC && bind == stype) + { + bool ret = demangle(name,name_mangle); + if(ret == true) + { + if (0 == regexec(&pathname_regex, name_mangle.c_str(), 0, NULL, 0)) + { + result.insert ( std::pair(name_mangle,(void*)(value + m_baseaddr))); + count++; + } + } + else + { + if (0 == regexec(&pathname_regex, name.c_str(), 0, NULL, 0)) + { + result.insert ( std::pair(name,(void*)(value + m_baseaddr))); + count++; + } + } + } + } + break; + } + } + + return count; + } +private: + bool m_init; + std::string m_name; + std::string m_fullname; + unsigned long m_baseaddr; + +}; +#endif diff --git a/contrib/pax_storage/src/cpp/cpp-stub/src_win/addr_any.h b/contrib/pax_storage/src/cpp/cpp-stub/src_win/addr_any.h new file mode 100644 index 00000000000..5d815ae7a4c --- /dev/null +++ b/contrib/pax_storage/src/cpp/cpp-stub/src_win/addr_any.h @@ -0,0 +1,66 @@ +ο»Ώ#ifndef __ADDR_ANY_H__ +#define __ADDR_ANY_H__ + +#include +// Now we have to define _NO_CVCONST_H to be able to access +// various declarations from DbgHelp.h, which are not available by default +#define _NO_CVCONST_H +#include +//c++ +#include +#include + +//dbghelp.dll +//symsrv.dll +#pragma comment(lib,"dbghelp.lib") + + +class AddrAny +{ +public: + AddrAny() + { + SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS | SYMOPT_FAVOR_COMPRESSED); + } + + int get_func_addr(std::string func_name, std::map& result) + { + CHAR symbolPath[0x2000] = { 0 }; + CHAR szPath[MAX_PATH] = { 0 }; + GetModuleFileName(0, szPath, ARRAYSIZE(szPath)); + CHAR * temp = strchr(szPath, '\\'); + if (temp == NULL) + { + return -1; + } + *temp = 0; + strcat(symbolPath, "SRV*"); + strcat(symbolPath, szPath); + strcat(symbolPath, "*http://msdl.microsoft.com/download/symbols"); + + HANDLE hProcess; + hProcess = GetCurrentProcess(); + + if (!SymInitialize(hProcess, symbolPath, TRUE)) + { + return -1; + } + + BYTE memory[0x2000] = {0}; + ZeroMemory(memory, sizeof(memory)); + SYMBOL_INFO * syminfo = (SYMBOL_INFO *)memory; + syminfo->SizeOfStruct = sizeof(SYMBOL_INFO); + syminfo->MaxNameLen = MAX_SYM_NAME; + + if (!SymFromName(GetCurrentProcess(), func_name.c_str(), syminfo)) + { + return 0; + } + SymCleanup(GetCurrentProcess()); + result.insert ( std::pair(func_name,(void*)syminfo->Address)); + return 1; + } +}; + #endif + + diff --git a/contrib/pax_storage/src/cpp/pax_gtest.cc b/contrib/pax_storage/src/cpp/pax_gtest.cc index 198788540cc..2cf803c46ed 100644 --- a/contrib/pax_storage/src/cpp/pax_gtest.cc +++ b/contrib/pax_storage/src/cpp/pax_gtest.cc @@ -32,7 +32,7 @@ #include "catalog/pax_catalog.h" #include "comm/cbdb_wrappers.h" #include "storage/oper/pax_stats.h" -#include "stub.h" +#include "cpp-stub/src/stub.h" bool MockMinMaxGetStrategyProcinfo(Oid, Oid, Oid *, FmgrInfo *, StrategyNumber) { diff --git a/contrib/pax_storage/src/cpp/storage/file_system_test.cc b/contrib/pax_storage/src/cpp/storage/file_system_test.cc index b881d6c95f0..4eeb810e8a3 100644 --- a/contrib/pax_storage/src/cpp/storage/file_system_test.cc +++ b/contrib/pax_storage/src/cpp/storage/file_system_test.cc @@ -29,7 +29,7 @@ #include "comm/singleton.h" #include "storage/local_file_system.h" -#include "stub.h" +#include "cpp-stub/src/stub.h" namespace pax::tests { #define PAX_TEST_CMD_LENGTH 2048 diff --git a/contrib/pax_storage/src/cpp/storage/orc/orc_test.cc b/contrib/pax_storage/src/cpp/storage/orc/orc_test.cc index c7c82d252f6..5be2a860d58 100644 --- a/contrib/pax_storage/src/cpp/storage/orc/orc_test.cc +++ b/contrib/pax_storage/src/cpp/storage/orc/orc_test.cc @@ -40,7 +40,7 @@ #include "storage/local_file_system.h" #include "storage/filter/pax_filter.h" #include "storage/toast/pax_toast.h" -#include "stub.h" +#include "cpp-stub/src/stub.h" namespace pax::tests { diff --git a/contrib/pax_storage/src/cpp/storage/pax_test.cc b/contrib/pax_storage/src/cpp/storage/pax_test.cc index 5fbf4509c87..5f8a85c6999 100644 --- a/contrib/pax_storage/src/cpp/storage/pax_test.cc +++ b/contrib/pax_storage/src/cpp/storage/pax_test.cc @@ -42,7 +42,7 @@ #include "storage/local_file_system.h" #include "storage/micro_partition.h" #include "storage/orc/porc.h" -#include "stub.h" +#include "cpp-stub/src/stub.h" namespace pax::tests { using ::testing::_; From cd544ffc51ac245b0bc713cacde7fdd4e0abf4f5 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Thu, 24 Jul 2025 17:49:26 +0800 Subject: [PATCH 007/260] Release: Use pip3 download for Python packages Replace bundled Python source packages with pip3 download to comply with Apache Release policy. - Remove 7 bundled tar.gz packages from gpMgmt/bin/pythonSrc/ext/ - Add download-python-deps target using pip3 download - Update build targets to depend on download step - Preserve original compilation logic and --with-pythonsrc-ext functionality - Update LICENSE, python-dependencies.txt, and Windows build script - Add .gitignore rules for downloaded files This maintains the same build behavior while ensuring Apache compliance by removing third-party packages from source tree. See: https://github.com/apache/cloudberry/discussions/961 --- LICENSE | 27 ---------- .../install/src/windows/CreatePackage.bat | 4 +- gpMgmt/bin/.gitignore | 2 + gpMgmt/bin/Makefile | 47 +++++++++++------- gpMgmt/bin/pythonSrc/ext/.gitkeep | 2 + gpMgmt/bin/pythonSrc/ext/PyGreSQL-5.2.tar.gz | Bin 267557 -> 0 bytes gpMgmt/bin/pythonSrc/ext/PyYAML-5.4.1.tar.gz | Bin 180590 -> 0 bytes gpMgmt/bin/pythonSrc/ext/behave-1.2.6.tar.gz | Bin 4562652 -> 0 bytes gpMgmt/bin/pythonSrc/ext/mock-1.0.1.tar.gz | Bin 818644 -> 0 bytes gpMgmt/bin/pythonSrc/ext/parse-1.8.2.tar.gz | Bin 27980 -> 0 bytes gpMgmt/bin/pythonSrc/ext/psutil-5.7.0.tar.gz | Bin 449628 -> 0 bytes .../pythonSrc/ext/setuptools-36.6.0.tar.gz | Bin 669121 -> 0 bytes gpMgmt/test/README | 2 +- licenses/LICENSE-bsd2-behave.txt | 24 --------- licenses/LICENSE-bsd2-mock.txt | 26 ---------- licenses/LICENSE-bsd3-psutil.txt | 29 ----------- licenses/LICENSE-parse.txt | 19 ------- licenses/LICENSE-pygresql.txt | 30 ----------- licenses/LICENSE-pyyaml.txt | 20 -------- licenses/LICENSE-setuptools.txt | 17 ------- python-dependencies.txt | 2 +- 21 files changed, 37 insertions(+), 214 deletions(-) create mode 100644 gpMgmt/bin/pythonSrc/ext/.gitkeep delete mode 100644 gpMgmt/bin/pythonSrc/ext/PyGreSQL-5.2.tar.gz delete mode 100644 gpMgmt/bin/pythonSrc/ext/PyYAML-5.4.1.tar.gz delete mode 100644 gpMgmt/bin/pythonSrc/ext/behave-1.2.6.tar.gz delete mode 100644 gpMgmt/bin/pythonSrc/ext/mock-1.0.1.tar.gz delete mode 100644 gpMgmt/bin/pythonSrc/ext/parse-1.8.2.tar.gz delete mode 100644 gpMgmt/bin/pythonSrc/ext/psutil-5.7.0.tar.gz delete mode 100644 gpMgmt/bin/pythonSrc/ext/setuptools-36.6.0.tar.gz delete mode 100644 licenses/LICENSE-bsd2-behave.txt delete mode 100644 licenses/LICENSE-bsd2-mock.txt delete mode 100644 licenses/LICENSE-bsd3-psutil.txt delete mode 100644 licenses/LICENSE-parse.txt delete mode 100644 licenses/LICENSE-pygresql.txt delete mode 100644 licenses/LICENSE-pyyaml.txt delete mode 100644 licenses/LICENSE-setuptools.txt diff --git a/LICENSE b/LICENSE index 155c2f8e660..8d457fd6652 100644 --- a/LICENSE +++ b/LICENSE @@ -218,11 +218,7 @@ The PostgreSQL software includes: src/bin/pg_controldata/pg_controldata.c copyright (c) Oliver Elphick , 2001 - gpMgmt/bin/pythonSrc/ext/behave-1.2.6.tar.gz - see licenses/LICENSE-bsd2-behave.txt - gpMgmt/bin/pythonSrc/ext/mock-1.0.1.tar.gz - see licenses/LICENSE-bsd2-mock.txt ---------------------------- BSD-4-Clause (University of California-Specific) @@ -250,9 +246,6 @@ The PostgreSQL software includes: src/backend/libpq/sha2.h see licenses/LICENSE-bsd3-sha2.txt - gpMgmt/bin/pythonSrc/ext/psutil-5.7.0.tar.gz - see licenses/LICENSE-bsd3-psutil.txt - contrib/pax_storage/src/cpp/contrib/googletest see licenses/LICENSE-googletest.txt @@ -262,15 +255,6 @@ The PostgreSQL software includes: ---------------------------- MIT LICENSE - gpMgmt/bin/pythonSrc/ext/PyYAML-5.4.1.tar.gz - see licenses/LICENSE-pyyaml.txt - - gpMgmt/bin/pythonSrc/ext/setuptools-36.6.0.tar.gz - see licenses/LICENSE-setuptools.txt - - gpMgmt/bin/pythonSrc/ext/parse-1.8.2.tar.gz - see licenses/LICENSE-parse.txt - dependencies/yyjson see licenses/LICENSE-yyjson.txt @@ -312,21 +296,18 @@ The PostgreSQL software includes: test-ctype LICENSE src/test/locale/test-ctype.c - see licenses/LICENSE-test-ctype.txt ---------------------------- regex LICENSE src/backend/regex - see licenses/LICENSE-regex.txt ---------------------------- PostgreSQL-style License src/port/gettimeofday.c - see licenses/LICENSE-gettimeofday.txt ================================================================================ @@ -349,22 +330,14 @@ The Greenplum Database software includes: Stream License gpMgmt/bin/stream/* - see licenses/LICENSE-stream.txt ---------------------------- 0-clause license ("Zero Clause BSD") gpcontrib/orafce/* - see licenses/LICENSE-orafce.txt -================================================================================ -PostgreSQL-style license - - gpMgmt/bin/pythonSrc/ext/PyGreSQL-5.2.tar.gz - see licenses/LICENSE-pygresql.txt - ================================================================================ This product includes code from pg_cron under PostgreSQL license: diff --git a/gpAux/client/install/src/windows/CreatePackage.bat b/gpAux/client/install/src/windows/CreatePackage.bat index b6a782bebda..99079b11cf1 100644 --- a/gpAux/client/install/src/windows/CreatePackage.bat +++ b/gpAux/client/install/src/windows/CreatePackage.bat @@ -11,8 +11,8 @@ type nul > %GPDB_INSTALL_PATH%\bin\gppylib\__init__.py copy ..\..\..\..\..\gpMgmt\bin\gppylib\gpversion.py %GPDB_INSTALL_PATH%\bin\gppylib\ perl -pi.bak -e "s,\$Revision\$,%VERSION%," %GPDB_INSTALL_PATH%\bin\gpload.py copy ..\..\..\..\..\gpMgmt\bin\gpload.bat %GPDB_INSTALL_PATH%\bin -for %%f in (..\..\..\..\..\gpMgmt\bin\pythonSrc\ext\PyYAML-*.tar.gz) do tar -xf %%f -for /D %%d in (PyYAML-*) do copy %%d\lib\yaml\* %GPDB_INSTALL_PATH%\lib\python\yaml +REM Install PyYAML using pip instead of extracting from tarball +pip3 install --target=%GPDB_INSTALL_PATH%\lib\python PyYAML==5.4.1 perl -p -e "s,__VERSION_PLACEHOLDER__,%VERSION%," greenplum-clients.wxs > greenplum-clients-%VERSION%.wxs candle.exe -nologo greenplum-clients-%VERSION%.wxs -out greenplum-clients-%VERSION%.wixobj -dSRCDIR=%GPDB_INSTALL_PATH% -dVERSION=%VERSION% light.exe -nologo -sval greenplum-clients-%VERSION%.wixobj -out greenplum-clients-x86_64.msi \ No newline at end of file diff --git a/gpMgmt/bin/.gitignore b/gpMgmt/bin/.gitignore index 3e4c5a452b2..7d8d57c93f8 100644 --- a/gpMgmt/bin/.gitignore +++ b/gpMgmt/bin/.gitignore @@ -27,3 +27,5 @@ # ignore anything in ext but keep folder ext/* !ext/.gitkeep +# Python sources and temporary install dirs +pythonSrc/ext/* diff --git a/gpMgmt/bin/Makefile b/gpMgmt/bin/Makefile index b61c4faf52d..c863cb7bf19 100644 --- a/gpMgmt/bin/Makefile +++ b/gpMgmt/bin/Makefile @@ -79,26 +79,41 @@ endif # # Python Libraries # +# Download Python source packages using pip3 download +# This replaces the previously bundled tar.gz files to comply with Apache Release policy +# +MOCK_VERSION=1.0.1 +PYGRESQL_VERSION=5.2 +PSUTIL_VERSION=5.7.0 +PYYAML_VERSION=5.4.1 + +download-python-deps: + @echo "--- Downloading Python dependencies for gpMgmt modules" + @mkdir -p $(PYLIB_SRC_EXT) + # Download psutil + pip3 download --no-deps --no-binary :all: --no-build-isolation psutil==$(PSUTIL_VERSION) --dest $(PYLIB_SRC_EXT)/ + # Download PyYAML, wheel is for metadata vefiry; + # cython is used for building, see https://github.com/apache/cloudberry/issues/1201 + pip3 install wheel "cython<3.0.0" + pip3 download --no-deps --no-binary :all: --no-build-isolation PyYAML==$(PYYAML_VERSION) --dest $(PYLIB_SRC_EXT)/ + # Download PyGreSQL, the `PATH` is needed to avoid cannot find the pg_config + PATH=$(DESTDIR)$(bindir):$$PATH pip3 download --no-deps --no-binary :all: --no-build-isolation PyGreSQL==$(PYGRESQL_VERSION) --dest $(PYLIB_SRC_EXT)/ # # PyGreSQL # -PYGRESQL_VERSION=5.2 PYGRESQL_DIR=PyGreSQL-$(PYGRESQL_VERSION) -pygresql: +pygresql: download-python-deps @echo "--- PyGreSQL" cd $(PYLIB_SRC_EXT)/ && $(TAR) xzf $(PYGRESQL_DIR).tar.gz cd $(PYLIB_SRC_EXT)/$(PYGRESQL_DIR)/ && PATH=$(DESTDIR)$(bindir):$$PATH LDFLAGS='$(LDFLAGS) $(PYGRESQL_LDFLAGS)' python3 setup.py build cp -r $(PYLIB_SRC_EXT)/$(PYGRESQL_DIR)/build/lib*-3*/* $(PYLIB_DIR)/ - # # PSUTIL # -PSUTIL_VERSION=5.7.0 PSUTIL_DIR=psutil-$(PSUTIL_VERSION) - -psutil: +psutil: download-python-deps @echo "--- psutil" ifeq "$(findstring $(BLD_ARCH),aix7_ppc_64 )" "" cd $(PYLIB_SRC_EXT)/ && $(TAR) xzf $(PSUTIL_DIR).tar.gz @@ -109,24 +124,18 @@ endif # # PYYAML # -PYYAML_VERSION=5.4.1 PYYAML_DIR=PyYAML-$(PYYAML_VERSION) -pyyaml: +pyyaml: download-python-deps @echo "--- pyyaml" cd $(PYLIB_SRC_EXT)/ && $(TAR) xzf $(PYYAML_DIR).tar.gz - cd $(PYLIB_SRC_EXT)/$(PYYAML_DIR)/ && env -u CC python3 setup.py build + cd $(PYLIB_SRC_EXT)/$(PYYAML_DIR)/ && env -u CC CFLAGS="-w" python3 setup.py build cp -r $(PYLIB_SRC_EXT)/$(PYYAML_DIR)/build/lib*-3*/* $(PYLIB_DIR)/ # # MOCK SETUP # -MOCK_VERSION=1.0.1 MOCK_DIR=mock-$(MOCK_VERSION) -SETUP_TOOLS_VERSION=36.6.0 -PARSE_VERSION=1.8.2 -SETUP_TOOLS_DIR=setuptools-$(SETUP_TOOLS_VERSION) -PARSE_DIR=parse-$(PARSE_VERSION) PYTHONSRC_INSTALL=$(PYLIB_SRC_EXT)/install PYTHON_VERSION=$(shell python3 -c "import sys; print ('%s.%s' % (sys.version_info[0:2]))") PYTHONSRC_INSTALL_SITE=$(PYLIB_SRC_EXT)/install/lib/python$(PYTHON_VERSION)/site-packages @@ -140,8 +149,10 @@ $(MOCK_BIN): @if [ "$(UBUNTU_PLATFORM)" = "Ubuntu" ]; then\ pip3 install mock;\ else\ - mkdir -p $(PYTHONSRC_INSTALL_SITE) && \ - cd $(PYLIB_SRC_EXT)/ && $(TAR) xzf $(MOCK_DIR).tar.gz && \ + mkdir -p $(PYLIB_SRC_EXT) && \ + pip3 download --no-deps --no-binary :all: --no-build-isolation mock==$(MOCK_VERSION) --dest $(PYLIB_SRC_EXT)/ && \ + mkdir -p $(PYTHONSRC_INSTALL_SITE) && \ + cd $(PYLIB_SRC_EXT)/ && unzip -q $(MOCK_DIR).zip && \ cd $(PYLIB_SRC_EXT)/$(MOCK_DIR)/ && \ PYTHONPATH=$(PYTHONSRC_INSTALL_PYTHON_PATH) python3 setup.py install --prefix $(PYTHONSRC_INSTALL) ; \ fi; @@ -207,8 +218,8 @@ installcheck: installcheck-bash clean distclean: rm -rf $(RUFF_BIN) $(SRC)/ruff.txt $(SRC)/.ruff_cache - rm -rf $(PYLIB_SRC_EXT)/$(PYGRESQL_DIR)/build - rm -rf $(PYLIB_SRC)/$(PYGRESQL_DIR)/build + rm -rf $(PYLIB_SRC_EXT)/*.tar.gz $(PYLIB_SRC_EXT)/*.zip $(PYLIB_SRC_EXT)/*.whl + rm -rf $(PYLIB_SRC_EXT)/*/ rm -rf *.pyc rm -f analyzedbc gpactivatestandbyc gpaddmirrorsc gpcheckcatc \ gpcheckperfc gpcheckresgroupimplc gpchecksubnetcfgc gpconfigc \ diff --git a/gpMgmt/bin/pythonSrc/ext/.gitkeep b/gpMgmt/bin/pythonSrc/ext/.gitkeep new file mode 100644 index 00000000000..206c64c1e62 --- /dev/null +++ b/gpMgmt/bin/pythonSrc/ext/.gitkeep @@ -0,0 +1,2 @@ +# This directory is used for downloading Python source packages via pip3 download +# The downloaded tar.gz files should not be committed to git \ No newline at end of file diff --git a/gpMgmt/bin/pythonSrc/ext/PyGreSQL-5.2.tar.gz b/gpMgmt/bin/pythonSrc/ext/PyGreSQL-5.2.tar.gz deleted file mode 100644 index 9c39e0acc34b42298c3ce80229c0d601b88547c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267557 zcmV)AK*YZviwFq)f$v@d|72-%bT3eOM{;FTQA{m0E;253VR8WMy$3)O%l0_D6ak}D z3!n%KDn;pCkluS0MQTU_L_-pj&{PB)C<3B_irBFC-W9=)0#d}TU`MebVnHB$v%5)1 z5V`uj`|f+c|I6r--8p5>oH=vOnaS=(-$38M-XEXhPQnvO4Cvod46*X7PeVf!)82EW z-pI(*%ou`GpnsqwGFf;AX#Vf+HobwoLqc^T=ZEf ztiOByo12^d%KsaiSs3@3|7HjnHvA{&|Np4}pUNP!SR^VOlL|X)IWP#Ru&2I{KJ0`i zQ(p$ zax9sEXOU@CCTOn@orRvUp`m4eUHCl~fO-;OVQh%70N60M$FMUgiA15%6G&7R98AI| z;BY(;nF%vU6cVb8L@J1#7$uF#io+1R$pjLWNz#S!FohgLVt{V>(Se47Xo(C02}j|A zndAgA1rNw+CG)rP6keN&%Jc5^q&>?-$#rg$4ftq0=naN_1 zV-i^;zzN95q{Xt5@n8@TAeqI)5ov@(q%Wuz;8@TMo|+2N6B%?G!ZDf5il-&A;8+p~ zW5}(*^M)5p0ul*ffdl-3UP(Y>=)52ibzwS#mP953eX!#3EVMKD7+MmEPuo-)3-k%) zjYx>2;~B`bqQ`TpNI)nGg_caF#=)#)8q9+;VLY8q0$KuQiKkEymShrBABH`sIJB=E zU7LG99OUlc?F|RJyTBZ_u%ip??cw0)?E(k;!4AHmu)jlKa478R7YI9h1iCl{ z>%tzsoHJaIzl)QHgEvy;{D z6b$weYLC9cp zIKn;-9=^dYz7D=lF1kQR{{DV}V9=-dJ39n}UgKPR-4PI?{~&a*ef*qJU7?Kh|4VW# zVg4`7|AqO#F#kvMe;)^54_B9b zUzLHkAIKx3cnKJPvmkM08u;L6l48jel3;BDsMU|bvjl5V_I+yjh2~TtGINDMtH>ae zPeCz%792$&&=L|7sbp3vJYirokP=hTehz>|q$N`+G(2%&tSBauuoI9GVltyx;FCmz$o4udCm`Vg3&g|4od{ z`{w^<#>U3N`2SB79}){s#Ix{vAtVN}y<`O&>l@*G@d+d=-d+ff2Lnce3rb8#z%x=2 zFe{!$<=^u106~utizkqnICokCNso??18m}1EV`9}L2`032+9DHIg5g9CE^?s0X@U2 zche5$?%H7xJyHUmOtFH0-i5?*_SUTU8pkGAlkYMjzx023*m5Psj*OUq(Klx5&nq zH<`)m<%8%zKM5oyR1yolNWfDKC;){_jivDf6y$_$F~UwXBI)-8!a0+e1O}PTLPwc@ zj}uRYX><}*kBPD5jClf$m`EXE`+Q{Hprc!CIG9uT>;f^c7(A1t4|}j+QbG)g$n3jY zIxCUHNJTbE8NjwsM#w%Oj~NNiOhvXmVOlIoNv9=)MiVLgEMiG`RwB>_9Lu03z<92# zSjY5nUZm7y8iUBRg1JfqTu@@>J{oD0n8597`r4 z7R$FS90Y78kqKK_!RD|Y7(+w^0c2!SP?23xheRToLuCuo(q-8>>oFX`vn5O!CN6_icC{7iODCq59$(_{GLS53GaQ!D-|NXT7GZC);{x{cu+#H(}7pI5jmw(&*|Fir5ER2Qs|NRg7 zf8qCk|2h9}+}Hn`3cvpo`hTwf|66th|9Jn;*w93{|0mr46Yl>B_y2_Zf5QDg;r^d+ z|4&$i>p$W8Pq_XQmVb2p7vwi3(8(p}Uwb0#uhxGS#(nnxjE#&8&4lZ}f1>c;y~%g` zFOKg1!YMM07wlw9z(RP+iTLrY|#YU8`);o_-OS|V5i^dbPI#v(oDTyP$g>V@-e zZ$+;dq*;k%2KoRNvzIGk!F-LdXoTJi&ds9+vG^o1XbZV@R1m;h;-WW~{sM;FYTD<< zQUeM;73mv#cd6j5u?F#A@z3P%BNxzndu?9;x*+Zkl7Ov>kri)$V2&~M2T7#UX$%1( z&ib7Y57KCm&&KrwBcAU}1BR}U0P>5qby$f7aG{W7D+8Q_U{ zI<^(jKOC8fV6p#8I58#)n_0htCNq%7=@|XPf7Kfl#A1NiJwVf_8;GLCAe#}tXrJRB z`h_75gZr3f{}`Ab=?_GV`76Z%jK5GFf|1Bz(ip#j{#rRG@GsN@a0ci-fFi?2z!TyJ zMCezqoUII?f+RffFvNjy!1|9&7ziO2IH`f)ztjR3ftkt#gV>9~+jirg^aDbiD6^mX z-o~)!1frrqXkbM}p@9OeLHBEn4SOq)zflBqNlWOzHj2*>`bQwfaA!&Xa70Jw)5O1k zqcZ_agkOLKEL{+#|L$;VqmUrc2gLIx^i<*cPq_XQuK$GPZ(9HLmo@+0>p$eO&-%~A z*j%{&`$vj!stfmjh4Eh)|Ap~i82=3h-VXbB?f>=@|BXydh4Eh)|Aj>u|Ap~i82^Rk zKNbH4zVG_C#eXByzVY9})KnP%|A`VskHew=i7~=iFO2`f`2W8h|Ap`W`(KX#y*K^* z?el+t_-|xkV)4`a|BTFq@&BJ3e^`%uBRB7P4)g`ld=J>z{B{w1O*Z~Fo*L=*X%XBX zJ}vUgr$lhS|CC6tmc#Dm~#@IOu@$hLk4CX-S+`Acry2StDhb{vyF}d4LY#k1TuqxbR+g>iC_XA*a9;3 z5Q<|Y<>zW+BeH!~8x|NkE;V`1)i zqs#pudOVq$BDf~Ojm6={!lAT8baBEYp+D^e7THO71{qlgahB4^S_XOg23dQ7)fia9 z2Kl>t_)hcl4-P_BbT*u8$0;7(&d4>)L>tqKNhDK7%*? z3uFcfP6g_U$0w1v8s)4~k)O!|isGpe=GO^{nnY&MsOVGnT;(F`VmggXWpRHWEEbWM zjt6UW&ie5u*+?lQLLv(x)`uM^=p%Y8auNyXDwQ*acp~;=TSTxvCa`FXRBX|YRP_=g z4FUoN?C%ilt`B>}qU1yxRg3kjo`D$>gX~M7_P}`q3ujb-MWKse9UK@oax5~A9-PMq zdksk+vjSi-QFv3%xa&E?$n$0?QFJ_=#E4>&XOnF3roD(15(}{T1tJE-Ie2>u*djnC z0&C!!m=5CjSPT-d4zFmrvpWx40xKLBCn?bopML29ci?g0%O22tAUzx=HT?x z9%_w(dI9YrwftC^xe8!;>TqAKk-8hzh8dXreY$x ziHk%#1}!lz9tP+rS$}+H;QxRRN@PGxA_Kw%0e0v#6znEi^^=hxQ?(Bws7k~m@ghzT z6)-^V@8Cxb=2ZQ}mW%i+-2OX+;2}8toH$N`pOe2IoIqkS5f?(hgE&Hq6KI?3c?1ms zaXLw4QZf<((O-i^v4{pBu7STq5*A^{_ArPwUU8 z(3zw}A`PYH&1r6x9*+V|Lx^N17);*JY6`IFb)X0v>ImqV>%)0Wc{P}X{ccnXa>Jn! z2>5+Q0<6b~6$q{qKu`eg3jq5hV0tl_e;=nU5TJDgsL|)kF=2T!J0ejRsGLd$=^aSB zkQ5DdFQ}cvNDKxV=*vYPh{=f!{mR0P8v}~NLHgGv;xIyl>Wwq~%EcFk1{AFq?~kNI z0&gGLdO0EDVZp0k(KvB!K(R2Kfkm z2*&?kF?ypiA_O-Y|I(z_`&uoa+uUTW2^{(BRz0f&Hx_B%5lWfubywti+lkCA?F|9tfw_0i>jGP?GQL4MX5 zTOOin0qea)Dg~J+$neq=Sx60;%0Gbf46rxGr5Xr)-D-f^F&gWzuX#~IY|)7b!g)HL zpHmE2W`lJt;>oe>v42m_$t(x<aZSYcbvPQkBfmmg+{jSM^Al32upYBN;r^Ht2L|+mB+LCO2hFVq)C_|0JBEaE!lvU-hJ?V7VM5c|e&xWj z_W=b#QU1!YAmbsBUjH0xQ9gV_83_Cjwj9;MQYAc#Z!d(C1Yw(8+;mnOq~$tTrq5@N z+I$OJZq~1b{w_Mgg-F9#;}co51muM}z{XQ`cv=Cte}`hw?ohF}L-uN+@A^bvAL;)% zZ660O7to5+&+L#?QV*c>*m6nx=-S`e^{+LJ>sgh0jYGaI;# z3NYo8^_dACzo}##XQkh7FS)w_PE2k$Qhu?Ikn&d>2r0j}bI`lp)z3sr;p`c3H^=(lHsI~1 z4ZL%}Mf)A8Fl4;}h2t>!1nAgumZ#q3%SWDbr=H+mqe${xrXd`_m9as-ESLl5L~y9aW;(*wER>w!Fw<9-k1`Je~#0*CkA9?0iW z599}M{T}x~0Z)3MKyXZX(F29lf&HCq974y zaR3A@Zt8(D!Fg5?1Z73&Kue}V(2_7wXi4M*Xvwo4D0`|XlpU=LWdmNzqP3xAcs(d5 zLJrD_(T8%*UxIQ#o4FuO$|a41@`#4ea-spWoMZ&$#|(z@V~wE|amZl;4pV3q#TF`@ zVFYcQI|bUAO@WTQ>4EC6oPt_jK7l@U_CVcTT@bsw8)CEBP)|>f&@Bne{}aUrEv|#d z`0y1K@j+73^1Mqm4@D_yIeU8>&b5V>zLES$dwYBI3KEsT$;gjX=3I-2N(_-vFrPG< zb1fz@RMy^Mlq!r|dwcsx4wcohxA(M1iWh(nl^tepZwg@cwzk?6eSAg?SF*Ra1J|~b zeXOhjg1QEB?dCJt%E!!D6I1}8y_1ivmDzZou_oZ!8C)CKPPR1EbJsIOnzTo$Ee&-i z=#As=mZOW$Pvu|LpEk$G+W&>0HNDaUnO^OI%)lqt=bBgaKo-bxy$7j$gI|bant{hnxdHYG2#GuXeoE13BFi^x1C60erOk-9G*sTzlT* z`0@LgFZX%~{P`Wsr+Xv59l3tQ=ieVKp$}%iw}`NhDaboG;%bvp%@?^0klm5a>Ri)DX)4U zYGVgPeFl!#SUgF3+XH2Q5zeT4#)~Zr{2*u{kZYya!qu0zpfsfn&M^v@~o4 zv@~iW7PCSjC_79H$_^LD;ul^Yi(%n|1mjr5FeoQd5gaOlF)exwIMl$QfyFl>jK;WJ z(1*Ne7>jk$63}vjHaI5y9QR_4z|klEktd)raMiL|XdEmA@*uHr+d@3FGb@f46Hk{c zh0bovgU-G0fi4^-=L0fU!l$)9Z*;252&lF6OFsw z-Q3vAiNF5`V{pSCl*4wTM!4+z6;w`Skkk;_VM=2R`UQiTE)BrSV_*%fe!xW{4GrZO zSkrvRfuG>+gRV4~Vc>~7Kq=`1_Z&P_cI0SP^|6{0qY(IxKJb-l)OU7&IneOQe zkM;2K@%0Z3o)R*3f}W}68Wet&2No5R7%U^NI9g489H6$Gya;Jfa+8iV+oF$^~l+lEz27k&LZ#=sLDf;${Yl~v;l!`+0rnhJ_%)jfK3t+___v+ z2?C}yY;H(Dj=&8y^-L{L_S-QyfNtL0KrU|Bv>Ab4GcvWb7KCr!T->mFb;Ii7Is~D@ z&oP__KUdhWWpi6sj(m)4rJkQ9eD12kXQPBSC{F%2JW~Zj6p6+)hAp>`6ch;e* zhQFcwr~QvMCr8Qni#)}IlcylLiRD$!y0D6qe}EjtrW(sPxOs+49hO(PgIMi;hm%KC zadL(SSf1d^%?rS1Ajn?=0e;{^EH?-S{DL2Fa)Za5yx=yL7ohn7$Pq#xv!PHB-@`y$ zkErA11dlj*!RtOb0g!_Tc*g=>aSuA6_?KO1Zjf+?FFydW8Oaf7AlIP-x#%q*UwG8U z%NbIhe}Ph;v_Z3hOzGZGZw_($CA7d5Md*m$Tms14QMtFa#X3Snd!m4`oM4fgC~-98zd5u`EIc97-UM(1DhnDTkI_uZ41^OF=nd z;!sYw7&yQuz{!b_=j0a3Sbh;bQZUB=d~-n#ksGZF4s|FOKOV}B(do@KW*9=bC(mLz z2XO+HbKn&~uAv7lPYuL!4U!&boox!OhzEHF%L`f=rvt5=7Y?mlli8bdBsidXN5KpO za2SHa6e^(FLIv4Ws312HD#)J=6|7kT6&&0L6&%_H71Ev2{A3Ny8Y(I&fQoh$K}A5f z>sap4`u$s=4YLD4?h*oRPMZR4Sr7>hJetSs$czEGOe~tq><0PEo}8KBNPza_&4Tvl z&w>sYrlL8{vEl{LiH(`i$&zJgzH@p@4s-_OJZC@kpm|T}&J|GUu2tYDfG+G`2VFS0 z5zT{;9O&w?ZBWID?NG(3-Do~kb#6aYef|)d6V+Wl!OM#puAPM%DoUZdRTrWA)t5k? zbQyYBR{=e$zYaAvR6>ontDz@%ZbDD*--4b$Y=B-i-i2N@-h-N-+!x5D-Zeji-oJhh zy?^r(`t-g9`ozhr+PZq6_D>(6FKw;R*LIL&f$Q&I+o2ASWBus(4*dZ67B|P@-_v0K zKU&HSl}6wsaU;}q_I&+gVn2CtQBhHG@j-*6q@;!nRi6CgkEkUe5fLu=;K7533>m60 z`S;0HAV^GHfP9FwwCtGQ6+s&kfxognxa31na%ow)3BO1FRSc3xKCK1GW#xvS`7Qb! zNW=sAd?VF|d|hF|iC2G3Z!RJNBcBz61;|H*6(VKP`M;uvMMQC*z~=}7a=C;;PFeXE z^kaeMaq8oSN^umAk&n;i(ieXFD|(=LZr@RAKt9ZsM_zbpVES>G(eaZH8#a7rFMZg+ z^z%JD{Qaj+jRYk&)(LHV*zn;Sd+DS8z>?b(F!GUWdg*h!`!yRscN}HXU1^H4I>}Du$R8@`OoA^(7@!QXYkQq{)zm62tWCd zpUFpu@zHPoiC*F_$W>MO>3fTOlMmowJz;ktl<(Om`;cb=`P+Nx)%lIiq=2sx zRPGdZ*D3+>f|G#gdM~{mzs+vrp*>^YKtES?v3qB40Vru~wkNym4v#*T-{iyitc-Jh zl-H^TO0N}&IuJRbj@W_Yn<4GFF zW@mCvzpzty)CC1k*^LDV{mfnk^2mqxj`ZT*al6Yt&m+$ZVzYztX0h3Ec~xBc$=vxm zTrIO#Q(fHt7hYsnajEn29<%S{0Vds<2q%v3RltJ8@R4qOqx6kOU&gNEQs)7w1M>0$ z*d5^fHJ1U;O>gC+Z)YcQPAl1!T=KjUb}RTB#r_EX^33q-7>s-*pP?6gMzqE;#KTFMbU*zeQx@)*2%bWIKObaMpSkK^e-j!OBK&s@Dx9NC!76!Z&Yc^g%9j|1swA9^bhRn*6-f~yVzbdaMdhGzq(Lh{7@Iw z1&*0Ka+(*oe0KX$H`|3qqop4fq%Yu~rf=EHH-AKG-$oVi$Z52IE({l;N4W8qLP0Ni z6$tk-M{?kwU=%jOv#@H1sXI5pY2m+!vsKD4>8V>=!@NBjmf;Z0}Hv zUT^@r^ZRrlsy})leNZSyAKu4+k^}^J#(voky)&DAC6q%S*T;anvib;6{1ZK>d>G21 zcljxkX%=wxo7n6Hg7hI^$~9o*5u~7g61i^yeDt{>Tfdsgqfei51oU@H1XcoX^`CRL z9u131O^pgjE_;h=r@JzUoR!On_FDB4Tzz&yEg;n8(x0rzy1O}wt~tJ*M%!?@sgo@% zSP_0BE-b<#y#H5t|F7`=Ut#(0zWpc$$!N;MGwOph^;>I%7u6| zQ0p^D6!Z;ub5I>1&(rJSDdae+6-*(;vM|li@kAn-8fOI?8PZc=BQtsmR*&@qRD)V3 zjY1~EV@YVizzKLp9GR*YLu0XM2^cX~(}K#V8?3i3KYQWQplydNlv zNFvY}@LZThi=ojdTpQ|@NRLIMTfv6beXF^Wa3K7{`U|b-Q)qECj&5RURF)p{Hdrgz z#GKm|tdf;V0kvc>1Y`nMkG&L9k4eW9P|fjl#!(7`92d{Bf{jTD*8jb2<8|QyfL8Iy zW8)kFWAKETaSY_;#a1v2_&3lv1K1?iE`dg&F_1aM8A`w?2G2lW0DwSX?hNGG6O~5g zm=J1@=y0QNaQX>^**bqUVq3hqqJh+-*7S>hCQ`TxrqJ*}C#Y)pl?Bv1We0GUbjm^4@H{coH_y zMwS8=lgz1(p;3ta8w`&PzdPVl4NpWvOf!78h0Z*^NnEKhnUPwU+t=QnVDfXNG&UA= zE4_Zh^k?_N#~VZYbM~mD{qq)PbHeqXaQ!D-{|U?Ay8fe6CXa&F?ykP-!dy~Dq*2OlF@F4I^}3=;O@=V0J1AVYHl zLo)+IQ=jv%W&sRImWPjvkO? z@bV#D_(2dfp6KE15S;SheVSyn%I%__;uEEwdmDAHyXdc^EJ{!wHk$ItP=w<6vD?vP zoCsrWthx5=rx`;u>Bq{*=Fws&9=*(_e2ENsU}bGW`%qo=A^yaSsn$o< zTc;0xUQ}27wY#zN$DC!KCd>NPeV4awG-yrV;45NylZDHewIc}1G1(v*z5dN`=(+cc zl(KRU&kFNq%bR{CV)`F9S3b0U@=U#fY?ie5dQ5%XwA@iEFVE8Lmh3i=v}ZBIr%Db> zS&a9fSH1ky(_OitbM)CWl8?lwQDqiSO2kYrm7JBc%=}Kh6Hw$DLCqvzU9`R^DEkKP zXu`;`E(%-cIK6YWig_I>l9_nsTtw-@2(bfSRd?R?T2?B3>#b?WeeQOwRVqb7RN~^ik+VhR=>D|2p1Dc)UpB8d zCj=h$_1eIKHfyy{iU@0wDLZ|79)V!6EmSp4cIn$$ITsBtLravdeO9g5nhp&y61`;h zqUipsRMMm&do;Z#8dS`hc6@jtB-1`(jLps5s1Ng=eNOWci&VX~Z#Y#^O?KV&$hl zYtuQs_vWs(CZ)$;rpfJ%-@3AB?`g?OyG6%%EJ@G(uK%*+Tn+t@R{56{<#50K zVUxSp6@JDsjSIiIN|!Yyv)CVdCTv<`SpQzU7tci1Czf=uYS}$da0r2Z{&7g>v|ZaefQ}D%jHUgpcPrWdaSzF1dmLZ zHfOQJ&O(Ep_Tth?wT_1kIrnU)4_T;H9JS&~shJ#m7pLBeH?z+icQ!6`cS)<Q=x zn}1Zb^cguQO;l5C2@&d$gMNR@Hhzn+(-dKOMNZqnO$B)>>9&jb9`4WqoDraCHlfj!yVw@#k7k zcz!knyL~?V?fgO08Npp`rTRaX?p0K9ZXJK}o#k9s`NXggtyu9z8wc$mw#=N@Jv(U5 za+XBsH-nzfBTAt-Jg$3l?Y55AhhjGlY#jxq`QE)_zBAK5SLgLvQ>*F)>u_)6LZ2m< zeI*r=?!l8TycC!EwsfS=n+OA$(`og}TO-4ITFu-f-@GVOzON}ceYOp|yfxwW?6Nes zu#WaekEL3+-Op0=yE|h+X3qseLg(zqp4Xl^=Rr$rZ!vY=ZArgh?x4M)XnII%>z+x{ zw&wS(qo?hxynE-i!KMI7s6pA{BUSs>ZskWGS`GJ(3>oxMwtN*W-RAzj9do^w5)Zu} z&JHDfoH+VqMf#cMJ>!*JJQu{ju$`|SwD?WSm;%3DVi|YUEbl$oyXAe&r@6Z$qSmV& zJO5a<>22o&Z}M`(B8NKb!J{S)KAgHPl=*gV)QubVJ4T#E$n$wOec7Hf{1m3fM zRi*9df`)v{emIm9g`LYc)g6h|I(xds=f0uWJTvWCH11o>V8(v z8!LaL>Fua{)n(t6@p6gvrvol=JEt9=xUr+w&!m1SdDxJe3C!=4ls+dLtD=^4#qT=)CPZwQgh(BJ9iBJ%#_lV={MkM!KGeIWL1SMqHaAJIYZdzhdFrK%0F z(ba8GSX26A(6IVlCOdu0b4QU*z&}oyUR(2uq;2xOMJaF86q}4!(A2O1ZM8dNW?a85 zQ>JD7JzRIPD>HtZl<^eZRKviOrFjkVmn`x3D&{v{PAEusk+pe7NU_UO-c@9tMqYh; z+xGm|J+H4Fc$~E^u10%Ukv$t9`em!y#~Z_{KdqgXbd=60aq7@Ygbd>w+M)RN)#E4C z+s0f-cC$9oSwFwaLG9A_(>g_&UNbbSibH}6*61wNS#zzdtfaeI@5?6BFTTbzs)KWe z=dLU^>d@bmLk;~XGkhH@{WM!^h;Q-ALVSt4F;UKC_VecIgXhwpf1PVHVpd#gR%{1( zd+Lp{J(ny?L)=&I(Of)j?JE3=B=r||Ge5jnYpc0&_}uw3Np~Nei>>BZa^CX$k#_9$8mZ(Uo z=-#XhR?E2F@zv*SgF}YmKC4G6fkCF1e3REkO`G%SMg6(8W|KW53tq&P9{un@v9Y7& zMDD|xy3^$vZ#|b@kRrBVajUlUa+|cuMGN+gi`w|ya=fC3>7;tKQx2m8CX^^ZgJeq1 zyX}9XG{5q6l<5g`yV*{ZodwM$N>KSMZ)!$T&zomQH>mayq8iqWXN^%9qTwu=B`Ue; zROI!v_EQdPP9ENWc58C}Q+TCI?82**hABS!D?HVrwfCx+m}TZP4ACOG4u^M(*}H_! zJ8-4e>PdjQYz}L}((6f%m)F1}L4IN_Yo2hQ*|lu!`#BFHUT-x~x!R<^{~V=5Wz{Z) z+7V^vW?W~6E#IP_)2P)5FS(ZdW@*H{uT3GrQwv5^B%FVk#(J~KZh9y&DtO8QYUih~ zTR%3O9GoF*#9p4h^}-$+_O_2|?Q>5ZxBV8^Gq3&l!)=#sT1W;F z>0jI8Y;CLe<(~3exnNi2rAKq07PURi{C478+wJ+!{lepLsak6euC;zyxP0S%#-YuW zXLVXnvvn{73pd0*5jvkO?Xwaei2jc^X_}=+H8%j zb`q73n(V9Zn6F;rvpiw;w~`@MSMid##IJetETj)TSV;+;WR}?Oq3<=cXes_wruNP1 z9LxRFyN=9=nKyMp$LUil^5;fWWVK(n3j`_0~-A3obxIL@Bp`8|FxC5S+CX56Nl zO^GeaJ1()Xz_m2#{-UAlmdV4Ho@ME6_m^!Gui34g-}xo)$8$r!j!yBcGxQs6{lnCeOnlM3c+Qd5J<5Zu5{S+=+vTD8J%-T_pfo9+xpH&8 zTk+dZgv)8Etkr;~NnWZbt$)6~yV2e!FW|mJ+7{*VPLQpAAEW4QC7t&4(}@pXn#{m- zo_yHS&Fbi}85g&1`fyWm2&-ck*HSyq>>81v;l@*(AAD+@W|`0$G_Y?-cAa#bjUWS zXmdHO9B4v>DYVxsOFy~mT(-ZC_Z^dAKl*j*D8q=1ZzYo12kfM*MsHa%V*8*SSLTd- zH9S%J(}QETE>6}WW^7MuxG+m}`Pa7Euoti0Gx2NeJ`Wz1nkq44hexHu_a-;1P??n) ziZ}8H718}&326vvh>rF6}a8F%;)pyKX%M$jUQBQPj{U! zeLBDHqv1*!r5{6CY?)dgNJezY4_hrM4OP#_8Wn>-si~YvpYG8vv9dZ(Q={UjI#erF zolKd&z$hJb~$4tJ2zaocgojk%G$*6eXYcpq1q}vCD(FI_p{bMKZM6! z&{##cmp@YJIAnvtyGY~MX&KgYd|j#(^ME6m-T4u^CA&F_Xqs~&*>JLGZO@IP5{H7b zi3+u?$*mX12FlGCcjva<@Gf(e;unU8uTNQ(_0ZA1dX`Q1g@)77{)G~&^gJCedhQ)h z8XXJ`9U`V9HB?e@HIewB3Lbeya&z^-^0$@tPW|cZ9L;y)umQ*XYHHF1L|y z-Mpss+rG>(qrCE+k^TK<2zE#YK##ax&Op()HV5qWC_u67;`P^86qrvU(dy&Ny0PanTwFM}>={)7>?daMMK( zz8%$~EaiE0=-!U(7LDXnKI7NUA6hVT?6FZ3p4rr;Nhp2ayUE*p)G=7*iYSygw@3bR zHQcl?M>SP^bHbDWyXg9)Yjkh@tk`KI89GCCh>E92*pw3+w9Z>P1l~HJ)$_IEroRcj z#wCvZ8s}{BIWtFp|7wlg>5)e6wbwNj({A}SkNNovr}Jpf(Xv@uT4;D&E&`!wj($z}CwnaiQgPpp@;i7hDipWEaU z^u>uhRCHXMXZxu8$6D*>7tEcxZA4*504sIn{g!y8T0-c$4t$f*8@Vq_?IMoTH!YJn zn`7^~X5Z&eOG9H_)jzd7ZXY{!(_*cvu`b=xhc_zAz4Qx?Q+s8tws`)d%*ZsWTTckC z(ol<;*`$#Bac@-V^Mk|Rs#iSpxwI;4^7)L#?&?pJL@u$8e*G}j;(FjbkM}H3#XHxk zhd16ck~=dp*r(!CCd*cIL4$wX&2{U)FAXrTI2D?2=a6i1VzX@1gsY40FJjXnTm(pefeO{sZgtfb@?9~55<41 zZG{b=NoCk}95TGsFe0!aYi<>DZ`_b|lgyxVlFnsomc3w0DYY6)g!s7moY<(m-}=eI zLx$Hh)lPhsc^S0(a+UJ5k)9eFQ-YJvxn<{F8P-1bqG9!((&j6E#5t@t$|gs=tx^Ls zSCpTT%-ZT&@esGDK)kYTjs6CcXF*#;c1^9=^ukD~QK2^Vu}XxbjVIyQrsqSBW{JeV zWsVN46WMjLIV<+4gy_2y^JFK*Y`{C#5BvTqr1|E;-1?GCji$5Am*>@|PhTV&x>rvu z@_y*7d)4-rchpr*PQ>Tl-!=LZ`za)KX3bK)^uY3rh{*RJKIJJuN~(VNQ^Pek)Txy1 zs-Olpm>#i}Sbn5BXtr9rgUP-#VH-Q$W&Cc3_=JZSJe7Bm*4$Q;sVCEMXQ9Z42cKV! zXZFyc@P`XurHg)8zC>h^%WBPf`#fK%q7~{NN1LA<6C2T1|L)MH)A(82-?h{3Ck7u} z7E!fIVW|7CcP+DM2dsw^mGeqdzAes@>^8C?!%02YYV4|GMx}1g(}rHh8nsK@x@>>x zWK$GDMQKX>1IK9Tl4BZMbQTxodW=4 z8a^Zd$z_j7w=|1C`ATFeyH?wkp5C8ct2aht+a~t? zcPDJ4-nT29uKqxX*tYQu>;AhJWm82m;MC}8-%X4p@T$sEN8M5*W!I$#5a>H1wbZM( zSf!kcuyRgnFFUwCb?&$teW>Hsk?JWWw+&xI%w|bzt=B=}Hk555D|TwBrKYW#o6_C! z`S?6j*M*gKuwHl7oy>34s2z8A7#8^}Tg+PaDt#z5^Si2b*XDBjuh}am$b_e5ep_pu z-?g{G^uBv(>jhcH&a&8-lar&x%?{PL*d^U|oRsmY`sP@X^yr3{BJy>rMMn}}tSXj0 znWdOO*y9bVC8JCv&DtahXHc#ErzE8?7V;N3FXO4~3C3xuC*LI(Rj7MvC$G4fp zW~Y$if~L|8_tA{rG@VYI6;WoOYFBqlJA1tv<41tsx#rx1d#WC6Q(dj0L<)IdcK*li zM`BYq*m#+rX?zfTGVSqr=Lsv8)1mcEq7@TTtQ5A2Ecp>M?VhigmFl{K??)B7h0NGC z@0(iji{^0poqcDU{T|83&B{r#`}{q7M(XK{KQiy6*-($)$rsGg0?U*rs{1nX>Q8(vNpW9f&Z_KD&7NntO-m z$?Z@GG|I>2x+xBCdDB2(zFrV&-reP9aU(=>)PuL_sh^f9-u=+>Nk*Gx9awfeb@jR0 z%QY9&Ycd~KlMl$RU7ItGO|C5OEKa^2mw(%E`?zbXFOOO}Sj7KEKC!BL+#^#JnSEi` z-zDD~Tjt(gjNcsYraSM6*>Z!FNel;CWa;LY9br?w4IbTY-aESeTkX5^4n1QkV{bft zYmlt+DhSuO-S_q98M+Ua-J#8(4B5Ya0e(t=7k<1)cKxBo<@TLk8SfRtMO>;&)^;yH zTKMqtL(!_`Yo^^PoH8nL>)P5S2kbK`l9^v@=9HRGV_x^FNj&p9&CUA!5N01s z>?lhcq3uK3b9N}y@~UPN?QF-pOG;`>zBsEqDaf}O(NvUK1kz{a_9s0Zr5~Sb`fYbP zP8z*6YN+)2B-yi1&n%w0(R!*4^dNGi8&s_OZPle{C?szG(VAo1H8twCTd!yDTs`Wp zZinjgH_m?ID?VNqyH)Zb`!l;LP(_tlPn@oMsoXaC$%$KDcORdtFNpjm`P5UX)XFwn z+@9FEYyXB_J>8+NRtL8gELi|gK(N1M9o{Z>{HocqlZ5qduZLB56r89Cd3EXJMX4v3 zFFt)TQfy(+(e!(t4|ZD)>Ryj?`RqC4^WkqBjXJKM4cS@KO^2$EF38$LfbNHlH2tC} z4LxHok9@V7{2)>B4xX;<@^;zEuyqwzeaeWkr(6k=*T&{Ghc1{l=MrxFs&{SQU)YmJ zL2|C`Q3ZOJ-SFi*b3~rJ|31ITz*uXTn#-o!Z{ie3DAYtAUY;SQ6B^}nvt`+xn%QqV zJ5*vBVoEJ9(63tQ~0UiVyLJUp0w#%KLivAi!ELfBy^G{@fmPLJ91_OluL zQ>KE^`eP(#@{aAH$5%1D+Kjh_cCn#{jqfS%XW2$I85!LA z-tt)Sh0dKlA}fZOnucaj3tJW9BHfurwQ-*>oK}L54eQXFrPg|(W7OIsp>*FedF!^i z+uOa&zx$qi`<(2uZlRv;t&X>OZ#Y(s{PWEjv}?;`wF8)7XZg_`C5^`!p+0 zeZ6(zY{+n>3e5)Fn#SB!GLgCD7q2xf=Rb5RlYX*QEb8Q>y}AqT`b1y!9@Ox}ea+{r zJM$D5IaPEIpLZlfO!Wj~(ud z@U>xqa}>Tyjk)RO(==wx(kXKsEUe|C@q6dQl^A7R++LJAv_{sUQB6+6N@~xbjuT!p zv^H6%y9Q8W&$+z2q>R^=T%-yY)0D*I?n}?#GBYdrQthT^F`2U#zBRBe=!oCF_{x{3 z!=~3Yefu)!YophTH%W`v@3*AO5a4(4ho;v0Z95#!`1`e~e|~ea^1Wuuu5E^}U+d7z z+J$!l$}=l9_s2S2Dn6-3ZlSa=zRJ#)yBew-d-lG6K|*!nJ>z{9p7l9PW?MpcQtj7@ zzEsGaG+u2)*yb1KV}=|e8k&@=6{q7T{8*T_AW~~zk1kujt!rcC$2(`2kiQ`S;(RFh8Hr zes^HW%$IWNGDfSG>Gd2)yW8YioswOkq7&%$*1&r{>!AvpYrgEIg*2kYo6%tR>~&eshN|yA8PBYw!J=0JDvbfKdY0e zQa|)z?yCnY-VKVpGEGHRrQ~?SRRt(VyvR$$bx>zS%hE%21Vf2CYt9^w-|Mj<-_;S4 z8xbicbyR7?)n|0Wd4aa2hazsgsaauo$tV%Fx42}sEz@(-e$xpMeM|*=_o2dtlUJOW zwB#b>jE627J=uCnIRcW)RkoXbTI<9Gdu`Q1)x(pcNVfxK?CgBrIo!oU)JdnjU47`q z)5=#j$GcwZ8n)zF?C|UrCvh8;2gMpoI6eqm93Yp`bxe0y-tP4?^3ttypdeL|QIh4y z)MFPjO%xXHGJ$>L)JnGL8?E;sjI>%Pwp`A}YqZFVdBJO5?q=^DGx$>jap5DcMM`D| zr1uXgICrXf7%n&1XxY5%EuoVwub5a~eYOZUcJtz=1$$R*kb~r2M&Yt)Vh<)~j9&ah ztfW+7u-uhoIrFYzyQ_nZ#Ec$PYG>l*GBvI;*G@PtuM)NXt$UBTe1Y?z(&sAC#bWC= ziY&BV)ylAN`m&aa<_{5MJLV;UQ@h745~`p^-g@8WJc`` z(Hm;edfD~_(F17sAkyp6HS% z`bJhPmUk`1k>s|D+G{w<9;s1e+vQ!Bo`2OEYT7jS(8xDX)@mv7z;$#rkNoB#Rnr&x zcCTwXyuWF**u~4NK_jPrbABV66US^{%Sf9aASc$bPG#AdB4{aC^gMAgDRQV^r?&36 z^QdK7Ql=HEW4-Ri@KL(Mp!=N=O} z7Jl;HnA=phair*e-Sy_`ak}?RzCx$ILTB{$+|k~sC+>P=iDRanyA?_LUcK(?#kIKl zB^u(VJY2{x=RL2xCze48!GEO)@?s2r?HuZ`;)0k*#*-~W$1Q%byj3&h$l*!0 zs6UVHei$fc4X(tZ_9@$XW@;4d*Pxr*W87tWOo z8lt7^wVt?mTlfaW2sH_B=gut)w&bZ>o=No@S5DBM%a#>|{J&P`&$#l%G2iUljpz@< zBr)Qj%H|bQeV0{dv+?P0Wbu~k`{I}~0F(y!Q5^>WtvVyLKjDKpXD+jhso3+vA%EY~%9 zr!-iMm3VT~{kJim$#dvm&#cZ7J^sLozX8PE|o$5`#OkXvxmI_J5;PCXuN6#jIxn=NN1R{_8 zar~IV)_r!vayH{LYM}(%UGs)qo@k)-UDVW0+OoNIQ8!C- z!nM=c*K$g$UW~Qb?zGu;=k^=f%+E(D4fjq>UrK)GmeD=5mLj@O>EiGgkk&Y}Ikuwr zo3Buty3f}_7oRFC<88&=6I3p%I$36R9A#C9n(VQ^IxTgYNBzBt_;G z-zUjBr#{Yd>+Ub(pV$l^8g)&(3?%x>haotmCFzl7Uou0dEdg6t1 z`t2fTB;S?Eu+j~OianOd+b{N*CU!^9*mwG*k&6g&CdMlaDUw@^R)wrJgx)erx)|rk z?-Dbd#lkLp+6g_@>C#;9Pg**pL~7fn6&~5km=8;)c2(!uYbS19&lq}f2t<@uvn5Yz z+q3rl6+Ns<|JZxC7|HT9KWM<~l{t%ywZeL*Mx67%eE;wN z-7j1J=HY+&%YW;i|37}|7k+K)Dr~J)7`Skv;|LFejwEo3E{a^hD z{oUXG)<=Km)_<7)!k_zp|D}KSAO6x`>;L{={#$?J7k}$-{&Ro7`|rGbl>XX(^zr@w z{N-Q!7k=>Iy`TI2-~6rjZvA@lr+;Vj7yi;e{i3_~&wT6UFaFh!{>i`humAq>?`{8$ z;JbhB&-@SnY5FJs&hHhk|EK>V{NZ2P{ZpU**Z;-=zuo%R{y9D z|ND*KJ^J}y|Es_I-#yCy?#sX4+4=MT+yDG~f9BPnee}Qoqo3P)9enif{>>-<%HOVj z@xT9n`v2hDKmWh{!O#Dbga7-t{@~eSP}3j$i9hw<{N6wQ>%aN;-$%ID(Ua$gzx}xL zum0hR|6TR}`sv00uKIti;(zP$zg05kj>_fc*LeTmt^e2Eovqzf|F2d4$BO>1@;_ET zKQ;P4if8$>iiXvA^pnf~*t)fKcWW{Kf0h67jr{!Zy;hjKsgkT;hHJf1KJELbzGl+d z%cKfX2SQpaKk$D4PWb8CvXT*NpUJy7IC=AAn3kao9L9Z`D-MxP8%jQ{_8;e_*j1eM z)AT*(hgwrCli7WtUI9r1YhDz3QobCy^1QBm;#IcKAXy_~)v zB%gBLJ!i9MFYaER5e%wwGwi2D(yQ`f*5o(iemvm@-gqjD&(ndthfLM=Zb8fM71MEd zBaA1LBA*l~U7XP@3T`;KrDa=(C%|EqSv*c6pj}m7q}6bJyCiJd_MLtR%tT~vi(Yd5?YZP~r(StRU zLhXJ3kRbm4bo7t`|Nba__roJzTS}aZ-hVk(b~h0@^SM1X8iE| zO?vpsxBB@-Hp=7vrvLh(et5kh<{)T>@Q~@cfey^4{vhvf3N(C3BZ+@a zXLt*E3~k4dJQ@x2FwlR@zjDfQwzY$n3%1P_D?lacc-GSD4K#H*og~FNrsTm!WipQ) zE}eYs;oRqf1Dg9y`|`gw8S`ro_x8e?|e zW)D~Gbmtv++LEodmhV;4+uyd`A8Wb(!j>=hnoD)-sJ(El<*X#9KOR3T{colJt@OW@ z{^#^RlEq2xF3Rd_z5iF}fAr<;x%+?T?)Iwx^EdLdkJAnf76cD!KS2;hq#^Z2(|$rC zm|#ZrrdnN_75`uH{}umV{rs`z|6eDSe+&QL-MzED!2fqv_TO*h=jKg=0XJ`kX&J^@ zcr%|QS*y&aMK8G-cGSf3{;;Yhdz+gV7Z=flKZ^2V@UYWXb4QQ9qH`WNGmM)^gU#N{lU zmWi?QPVx&{!*mpQubw7xHKqB~Tx{${Wv@slRTQv+=S#6tm-%UR0Shwy-peO5E}$6x z?f)d)zJLFAGkh7By?7MvXZ<3H^t}(J1x;K466tB$V`E^+R_OTw?zVQew(f=9S$Npk zFM6}^i((j$_d<_i3!1EsVu*(qjy(Bp%zr@`B*iOR^Fs?0!8NamWg^CQ z0@5hlqg%h%v4eLA8iW)UbczpQUn{CeP8r5g@Hi$oDCPry@MZ1?-LJcVaPV+Jz$U?K!29S{hU6c9Yw(j z-GqdZzfM>Pi)M;HAtB_bC=2lAEjA8zW}V{-7;MNwe9U@ z_$;r|(`I;bM!&{A`p*Xk8&UW?xd^+{bX2v{%iJ?EwIJ@SX2O z{yD;9H7yy0F&``Y*-C;)V2+Ay*ztt!kh$ngMYDv?D-O-!@(>mP3>7;M-M_^1W_cuw zhUk)NcUmOLXl54zAk#%EQu>bXaX<%>@jBp`NQz!c*L7;qv&I|DtZIN?O7T6S`%@(8 zVI8it8A~5&BT7~PWP(RU*Pec*cVjy93RhInqsahFjq`Cz$3thw7d>Yh4L3PKj_~M$ z5!G8A26nhW?`A;gP_HJS(hu^?QSS2oZ6PlPtB9=otR`HK@z0~)FdfIU=sb<1q&JC9 zi;XByR7PgaVw(1&EU7l=62sNl#}){*76R;g#4W&`4(M(IC&Qg+i&tGH1$?Zr zoYmUn!w;UW;T+8C1WO=bZ(6`x7@F7Z=p;xo0+&8GNU6XQ?nifUGTZ#e_6}cqLwa_i zyZG)_bQ@pZitZ6@ISps|RIUSkR!%3AyddC@Ky<#J?jb=N z!_bH|#<}Y~%(xwtRZ29(Op7Ae(H}R}Xr=$J^#7IqztaCb{Xfg{X-0C!*X9Cvi~hg8 zyEPyGe|LB5&PxCPCVn0){c+OLzG4Gp%rdy->7aG>Pw*-sok7GoJF*cR2=U(fz8wI< zMO_vVfy!xQ=;Z)IL%FxPIUzLy_JvK7q@g!$n)f#Gq6ild=v6#Z>8}}%^8Cz1hE3w$ z8Aq1cz%W(%jC5NXHO0vMv3bV~@d1h8kSZZXKtLajXdsnJWm`pZ3N~S^ir#aqQE+Fa%EFp&Lw|4l0JG#mzey0 zJJSSQc3qev*V2`E*3{C*fceb1=b0GU`F*;lMMP**PR8 zFUp|I#h`BYg_waZqU9tq&qj|l5eSnMS^5KwBuU4#h4Z8z%_UCI`bKFs7^NjA*35k? zuv+p(T9#80z~|qPvsv(; zlCXbx;|FOqoOUC^FXxB1zsSRz4?FE>MSWKK|BC;w`2XtXr_BH7)RvzZ|Gzz-|F^TV zy?blL|G$Z!XL80N4mqfE|L<$K{O5U^1s%?D@*Z}49iK+$$s6Px@E_wi+r%TJv*)%Z z975KRn3a~jX<3po&3e4A;%lylGbfnL5~KyB60L_Iw}1r?jrWJqpgTe;4@aE2EI7Xo zT#uCU!bHU-fn>bZ>%hGqMVs{sUk^JbYL5OlMdaED)(fPkz;H261Pqeqgai;CTx}Cs za$yrxf^Gt!#r-}k11tW&;{PlDzxw$j!2g|L@+YeQZ|@SbpV$9a`TyU{&wj6$l%>gq zQ?osE{xU_Z``aV)Puy#qzvzef*8}sBKnmMH%_7h$dt){UKt6EuA{*1#5w2xGV8cNz zF;VKDhFvL<5!{q!R3y5o)iV3IpvY?I;)82OD8ySHh`%- zDoNtCH31?)=LhK|L`B#1Jh`T=M4#T2(IOf^c7I^J7%UqZyG)VOmen#dLBhYa++1%q zyi=k=109K+2r}hQ;Wn{}r0}QY#TgzM#l;{goJWOIFN2BXIT-2BgSHa_lLB&d0Z0diAq6B zqdh$|Sr+&?|6VQl(;(L7Vif4dIq~dH%?$Ka<$%!Gj<}4(Fd0oq0vg0cAA@>{q+wW- z+v4&pbcUwIH|TlDsK-^@I}2Z&C&ei&Lw0>7KF{@I7BcK$n^im*Bz=F8JiX?EqU_06 zlv#LfqZwCq>0ZN!hgJu$li_){XD$SX!ZCwnF6Y*+m0r>^Fk{jpqya-tVpl&sPy5LA z^hCQ0)Y2Fv844uP+Av=?p`qfeykP5`B-oB-Q5f#iqjn)psZ5jU23X6GJl8TD)Af~M z%4v6u$|-%L%hd1&JDVijo!~r8E_fgjqw&aOT0llFe+FHTEBS9F|E=V|mHg++f7vN9 z`mg!^UoQXc+_^h%|J%NE>(0(f{`)3=ZiKCyE$~$0gL~n$I&Iy_MY!mLs-}?MJbU|X-i}D-V*O*U(Ag1tcCAJq#)cwBs3n1=UZ8+ z%+#|}sUAZ}R>^v<<5f~)ZdgIlT{lk-wo*ce7IBqm)o-El2A3O*f zC&e^r?6DQ~1}5&IvQQ;u{ia2I;1HhEW=M1PlJM2ZVF=N=Nc)ND8pdT$q^v0o(B_4< zWuFhi4+s`XfF3t8T~*BF7yKw#<&AQ}@7OOF$HJ=lYjy0(Av`IHyx6^d$z;yphFL?DW^|FN^{wXoNb8NLvB7|8wZacY zm6*G^t#|xUD9?bA_5DZV5m9pBr8>_znX{F%}#Z6}@t~Gf`lYXy{$TzZ(Ia?2wQFM0vhcbR%$erRjT= zlqLv--wEX%vs_a-3bTh&ddem25Rx^#&Wf~WLgik?MMR5)&RXpa^d1fOrH=I_YvErO zQrhdwrm2`KfjXvUudTGo6=sJ;J{=5o(=?XUuQC&tMg-B)*7mMSf($dX(PS8Jc9SaJ zEP7!T(@nD#P#=W4765|eVS84!a=oU}T3wpxnhPFzu)Q(QP}2dr>q%G` z%EO z=oTS}gMa78+iN{1raiiC@5_B_=-1uWHRLYIH(gQUWxJvq(&lP4!f&z{uI4+Sat_(WqHq47Yqe}fd`CB_sLevRh$nes%KKxGBS)(*6YkTh?A0C)H36n656k zTSN#r!7ocsuQx3s7+|K=^6w8HM?@n9Pw;!5Wm1>4JtQ_VN(%jgq>FZu47g3hWdn)I zRv8*WpA-oa!E5WMOU=t)ep5I2!5>8_8Z)d5-Q(s8O!=%jK$7c;F{^Nk>2RH;04;}F zhUi-{o$Q4jh(sM32Nok=NYwY+{Js-!p!OD!L>lWG4Y9Ix6K0%QUmQz&I5-k*s$LZK zio7gamMesqkH#h)yKU%RTUu&EswxfD_vi7=VV*i@r=E~lW#{HiB+}nN1WKvdiWbRb zxL!^rq%4X;GyUG)hAv13ZwnJyvXD|vUiAb>5%Pw9Ai_y%? z9&0E_roA)&2J5s_O7t8DGnNy4yZP9t(Ex6me>!{p17IWWCe zmj_{js}O%#5uKfHSno>;0t{55jweJs>1j{|?}>646V+*xER+}e?T+*&C=q+|5 zHABe(Uc+|e&Egr4`0d7LHL_ueKlDt3y_&_`9Sd=lK<2r9ltps04w1V0*9G3O*~yq!V-9%W+8 zFcvJ<8Z(+1#}+7~LDxBAE4PJLZFlyWGG8e24U$mfu<h1Z%QOioPs_P8neA%l)PVKAF1{XbZ!PlBX_S0h{W2`j%5g) zlp$^=#4eXk8QU4!Vly*S6JXgK*`#By3x;&Q*3xT+>F20A)kdsaZ(gQ$!(9G8Kr7!~ zq8Hd#%gHF^K5MneI$66FDMl~>7Z$8|#SXtHPL9&-%qIP?MkN+Gxka3*YQCMQVcPJN zi?%$9A(kzD?LcdN3Bn5}UgLdu8iPoIr*tbJIe9z{20&Oo6gbeyRm{3-8`HUFO!G$ApMEKT)H4rIzAE0{(--Go1C^Um6t(cFg zIb5g}+BnKg8tG{K9`I7Ue)Uvr`C=DlBY2vnbj?-DW`U?UuOl7Q@=|ufhIP;9AR`zh zR2^Sdcvr%mM1v??i{4KjYOxzbS0}!3 z8bzf!H2@oHKNpMzVwvi3mcXel^z>O!>tgbQ> zEH5OQ7b^t_OTi2AdkeDE*W`)hY+QsgVDz6KEl6PD=cJ)%*TiLl;CzUUFBPIm-VN7; z5`I?QTOqczutbJe!4U<#xuzc$Q)63EeG~E`Yx6S1=Osh;g=nR`QoaRN0bnfR_-=Nf zBr1^NlQy2@2R+#xuI^>Z@6-4s`L!QQ`warHn>X#mfCJi@fO`^8Xg4s?v(XR4nm=kl z{A|R#@&~R{gMVdXKAoHYXw#hCX^!@}GS>E%;Oh1^{mX-G@6c~DQchgMj3f`v@z}DW zD{Jvmc0M5jKJKz2(J;Sb0D1W-b{H}~(DZES-ymw24l-<+UXicb{1ILoR^17`%82(N zNhQprmc59n;im|jSlwkLXo~6tVN0FYO*;oWEy7QU z(pNd8g^XBe6VL*$;4eShi1hTV*62Jk&L`h=_!Cvosy$usu%^|iHf>hYkV#<>{p{;i z#ApNvJNSc@J+K`*JK2nCV}>BZM6o6-S##=f6LyozFoDAQVrg*c*E>w&zF4>rSVz!j z-GWPN4C6_~6+Cr9uo!+~so=qZaV)2K-Zar-QZ?a=aAL<}?u<9+g)7DcFC@8z$WCcT zM5N1QBTkD^ZL~vs=&-c1#aFxb${)nm)C4QgbHnNPA_Q8^;d+v!LAa%&fF)v2(<#h`&L*KpvD89>Igt43KDe!}}=c-l^fVMh=+8kudeBpH#?g!y&6i zvv!hC*62ABa7#XYZ;p(1;a)JP{)a#RXVw4hrW&Y>bIH z3z%nHoO-E`a$N_~%`l4gA!pyyETgkzw!`GxsdELl+>MK+-qjd@$i25-g)` zWqwCo9Nn3ld|mR$yjJHAAB6X#ZB!4D)uwdYHX?6fUrgaYMzm+%4?E*z3={6+D#jc? zD|TQ~i}Ri)qUf^lh>Wy!3EMl@UIB+BL&2=CfvuOEaDV`2KP?HNTMCmoYF;$W)FM~3@>B)t9KTjd>lUOy&NWly*IWUC}2G9 za6oRy+W-N!BZnZ%>u^>a?h`^u=~76tOsqL@7Efa5h!I~i?fGJeUXT-5nmLEXPptMw zLIs(uXG6zK>n2{Cot|@(nV?L z0=te2S44XxWhAqi^vp69uQ?z|7u8Q3AtLnNl}>K^rR4 zb2zQxWTSRiM zr~pd^#q*$yChGr1}HB3=c zG%hPnjFu=5Aduu(d0=3yjso{*lZiv+-hyzehX}Pokjr4Pfycc%E4B(I0h7oSM0kLiIn5<>Fu3pejro%%DT%y z>XCG4+SXN?H!cOX!sN|ll&3Zz2L-qM8Oo$LEz)Who=-@SFZ8F_nx$N zwzluJwzqEI!-8IsmMe)Y*oSkg)Lh8l{(VqC>3^hz>DIjx#Sz7H5J z7h=6NjZrW_J~h}QV-8~kf6?g{?8)zAtYbJ!EIZMnX|!U$tpGy6Kq~84j&t0;Plwpr zzI&xy`(p@~$DVA042~FNfb;D%slf%W5C;{O#`m5tEt>b)$`ukwpz*)+WKZd|U+BzI z^ux#DMFF=+VaYmTAee(CZ@5n0z>{%GUsSM^zOM_BTppn}G$P^fdRH0F6rp&dS$#AS zClmqW(^L91>DM@*2$-@me`=G^3y(Mw1uLY?renegWK`>NL~7}(#@{+EW?Fe^PxK!kXyP(839o9(Wkp+n|q2)$#ce%Fp%L>r(@)5ANH zr&Z=f#53@Mbp(YT9kpTcmv2;RXjFu>{O ziI8qCeU!Y3Ifz>V*wgAVCmpJe^Dd?_L4$Hz0s)PVgX;stXjFhC6&pPa>H+yjLpA2<_UHT}( z5;|OgKqRh8s({HP+>sbUuvN*3rg6EDxaZQ{N)?*~cSj*Cszj`Dl+#@vP_vQVJ&|2^7KO3GE9POl>W?lUvc2yK5qn z^oB|AOpFFo#8I8843V(nPJbBT1KiuUT+uq_uheCix~6E#{pL#>zBmqlZDEwW9MXS= zBs7?N>5lsrANQTs_73UCZ!?!v#=~LjSDMsDlO89e3Z@RnM`;PnyM>-u+g?vfh?z^! zAU&JkZt&L;2m3jQjzV8awEfJ|))lSueCIh{1O*<~ko}iHssjw)XVx8F`t4}$Kvj9jksab+oC{J#DK{jMQz~`0}Ojrm8HE>%k(dj^Q>aH_wSEe$Sm~WUb zdi3Rj&3USYq?x5P9-*1LcRPCTw(hsK-$rH~C(n=}RYBi@KF1CqF&>)5dt6-_YwqUfDcW2LW256FJWODE>YZJ{ zs0yk}7eK6xFxS?acJ4-RO!6FVD=*tW@P5k0@(k627y!i8E$O&EcrZ*HzLF}!|~FT zs((0K!cUb&7%RN_j1y>4L{T+DJ@&>sv`l>Fqt-?s>LBDhWOOAQBxz$?Z|-Rfg_F;v z*~YRxEi(9hAdhCD&lhag`ooS=sk7MdC+kXu$$<~QEL|$>qKKt*uMYjCt6J(Pk#s+0 zX>-I=@Ds1T&Une@3*Tsq#u=iA8N=)#F1kn$L2VC_c?C6@`Y@x##a8iol*DIm)q#B~HVuZU-`=M9w%c}?0dvk4X!io2sYl%FdLq`qH%(KNIawRU?xEf09^%Jor zE*RWmOF+WPwP>u_y5uHAq9u&;skCXvYqil5YXf6v+2S31<{V{XrM!sVVf zSo&cPPb~p`fg$s4MwxArZb~oMWlaWJGk!%CJxhiWaN5_IZp)q=_`-}-+K~yKVJEG+ zYcRHTnZR-x5ud2(Yyp#Z^I9SHv>)yzU1hT+#Pj9G6iM zYo!8mCXi^Yv{H-pF&>9_VJS_m%qk?&fIT!{(v%yD71uavseMS)3lhK6aFPE2))<6XI9-5qOIdsJ zba}0nTN9=v&0YgRP?dd&xwE+htDJ0a7Kpl`%5&Y)#1CO9jSCCmr;T&c(;jUFbTx?U zP;~#q><*DqY{^^>gv5sweXgu}%V5Xgb5Q?^dz;bvOqdI8M!YU2G-Q5@c-m~F3D>+- zaLyXy6nDN%R(z-I#+oE;o`h+)ic!MiEMepTNSlt&GU5;gvHkEXLsYH}Da_fH1@zZp zUEWwA(RdC;DNzrspDdDUu8XY}ijb>8kMncW$yG7Ih~grQ)%sS*ux0r1@r&mIT&;1x z09zXxWVPp}yp5;%b+xaMlF9cF5Yd_miOy5lwb&RQQ*nyT)^wx0g{|E{x`tKM7nvBB zy5oc3Xh_3x;!_E}Q5NQxHiVR`v1XnfMa}+7->yLytcSe@N#{dGHH{h3c2c4_;BF41 ziUj2WORoKdU(oxw zvTS*deHqkeHrHO_^^991dP_8Al0b;j#Wubz_>va zHY1AMVs4-@+;<7N&IA``hBAy3(A~5gmo=c9ux!|O(T>54#JXUSjBN1GeC&4Q8W4y? z#0uny6>k%ZXc#ghQ4hz1>6Y7g*yS=EXj=$3rBoR5|eHIoc1;_1xn+}>6ao*(G5hR#2{P~bY8RKh3`8y4N{0SYR>>?+p^Ww zxM`Ly(y(1~;_f=-MQHaZ1rG2$8@YU-F!UvgfOxhDH+6U{(TcBjwVy0`LZr0|=bR{w zDcMATEeWIWMNXjd%;;EH-l_7+`Kq)Cr=(jz^vXtTy;b0X9}8_Y#KFVCT6L+{!0daf zEY}HnpVd&>GI!cxBlT zXo62`(xfJqEyIzTTNSq*St4+ia%`7g;l+pttq9^>7ZweqaJTld)jl^CR_d=}j&$v1 zp$eUI5&;jZ3)~czi3vhUY-7D^0V`VI(KqIZ&@-Q@P&ezkfXJi{0$xZP^hN#1wbGKb zM$v%grE_N$a7(j7(y|$<{EG4CRY=|H9BJ}ld$*-3vb9R-55&#t+P~=q8GyzbXvT=Bzv8wz(QyxQncVCr~S#3Og4XVkKA0dBvn7Zq`C$ z)rll2C9-VYX=9!v#_dq3FFcf1Ho9XIC(zx`^Qy!6kS;@=$U>q}&SZd|Wx+>hwr-LruO8UD|54qRXcqSl z7R3N=K#{-wEYD_RO;GffPL_q?6RcjC0sXgkd-wf z2JE)^6y_qm7OeD_+-l7TagLfem4pM7_^vP$Vev_2`cnE^(k}K#1c>p>?91X2{9HEc z(z#Mg-z(Ec@);ZK+(6-WwC&5xwANlC{v7stsYtjtKOd)6+ZYT)f(rqzH9erU6EQ4O zRG%uRT_cBD0j}0X3a6fhp97Hdy>95f5Y0_{(@|VlQZOea2sMIMDF;kYh80AN5WGN6 z0|CwsU;~gjGZ%)=aeyiSD;)c6V>N9N6>>&9E3S!q z!XgMF_$PVR_fj+sczxNEdm$Nl+Vmt)W3D9vY|@Po|CA6;BCNF*>R?-9f}(h-W_DrL z3sHAYTxn+SCy2T}cR?)Jk2KOT2dpsmwH_|8To2IeOBXkqd?Q+Rv1@wG+LY+}nuzGa z<<#}Y7XK*+1F$#9;D1d30q4s4zHK4Ic+ui&!)Q zaR}C>A%iNh?^qCeZ6pwFPAM8DNVoL9)~-exKu;|1qhss_`8Iq_JZ+T;_Ar%I%-@A8 z-~(^U8t;*R?RtW~@uvHH(n+HpDLW5YWe1$&|RJVbqX*QWw zo~>Ms2inLAPc3-)n~OrB(qI|eBNp@0nk`4L&{$f%*c?u*QmF>pTBc`AjNCA})kkfO zQq?YTZ`Z=}YCf-O=0!`f=-{i>R)X<^mCWf_8w6&+_2hRG;D!wuEWGt zn9$Z>YaZZG7nVB_xVZEpL3|wV=fXvhpp`|=PD$Tq=Gl;)NV8tq^wz~HBHF4~8l7#- z!On)2?z|m#X1V1UHgm+T@@i?*mf2<8t`d4=0x_2JwXNPyq9Sa4+=xwLu3MA1cNPz9 z9)~9V)BndQ!=tP(*DQAXZIy}Y;a>H^L?VOiM7tX9_0Hj4_arh*!@G{@%wu(zS&xn( z3}~fkx;d<|zn%8l0^>)6ofg9Nd(wZW7B$Df$a1Yrfd`+@#e6x!=!v_v59gwStVb{~ zE}=Qy4ONGcc}@Qm)2zkvRXuIQ%Nr&#pYyJ{g9JOUmNEc$$;)95&7_VjWF0$SvCUs z)~6DRT5N9WTu3Zm3**C4b+!oCH79-H#+sZJd)2&P+FI@lhidYrQWvS1C{-MO?oIlU z%qb~fCMK({BM>mO=?0T_W;A2oNGir5uJCSRDXS^^UdJQt5TYE4-43xS5N}XpuK7|c z{16^XNdW6I@h7Yg=W=pdM2~uIM8BjHF^S&$?vaWWe_aiRFQa5XuVP1Y$!l#_%%46uKM}0WIkx99}VXjOq=yEQ|$E3|zg<gfBKj$~XhJbJz?urH6ExKvNG6N^lon`2C!Q#CMD7YXETa#495+L^b&(%B!4j@vi zRz-5fq%FuIVda&cUr+cD?=`PQHcO0{SO11hqiZaR<{X)=r8UglQ50<;fMFr6V!t1c z!w-rCRk?a+d_a%I9&WW*wJ6n9WDRbV&?Swv)VH^y ztu1SM)@FGlCi^c%O7*ik`dqu;Si3y^nl-~qUgAbND%Ll$IBRGdfzyU3iP!-|`Zg(l zN?2=|eo|VqZm%_}u3w@cEWa4>(KrPza;lNAHy4gr^H?ehOyU_@mD@bf^&8u_EKc*@zrH_MRa8BvHh84;{TC@FK6OT*n8x9;-lUNEzs zuZ*Cn3%IwU(1?53yKL| z54XRyoZGWuz{|SwGFbVx!6zAyjEzYIX^j{{9DTsCo8^QAJ$86b>Pgq-WhZgm8%_zL z!aGoB4kwzJx`2F#y}Blb?>mQ>5DWihzj#DhH?l0yUPd!TE05=jRjSgU5?nr13mG|S z$ctW6-OpJlRG}~3)21;t>uO%MaX1f>hn(1Qa&@A>o>!&>*6-JpxNGS) z#I0Tp)0f(K%-9*|A09om(UTImS@#!R2aAqQT?g?dOYlnWqeGRamxL^sEJ)8lz>_XjFRlE_y^#Gs z;L3Ph6IAX&*|b$mOsb5Nj`P%()q_7(V$C@X3H(iGG=)!W03WjV&B?R?(W((%Ux@G$PhNf(4gx~jBZxFC|9eSI<+MxpNduYHI%G=idgUkU`Y1;- zaUn@knvrEOo{H|tZMKb2Bd}5|vU%~oWNTu**DUnca5@rsND71>7Y|o!aITIhDfsJs=wh!J>gQYvS6qzr?AoHp=&;w7fU)ATAiMK)cnKM0 z{qh#bv_KrPC^Ig<%|Csuw4nARmF}gYG*Un^7pJiXBfV#K54@m4Kifu4eDt>oKj5U$ zVj;Z27k=XKSCg5k2%Ms2crDWenb4<*#KPbY2;SL1WUUp>x0&+=)} zPZ2wo<4S@5#DiSfw;DvH9RZqyCR}OJ2uR$DoUVOeO>%17^W-B#hm75qYe%A>;?RE=E+>AA$i#?DgN>f*? zRuL=Y{_iLghX|~KRV+#M#%1%Tj7{V@GSm(-ettr3EYtu zZ92^sMN^)6pR+W94_1*~UiV0JEQD&9Sutqm@Nq{CS*17w)%fPX4n+1!!AU)+C6NVq z-B^x1$NF-MuH|~gY8`!b)_7Z|0ObeC(P7NsC#_dI| z4Zdv#-)?PhU&GCRok4lXU9N$5HG@#2pe>cW<@G~gvxn8w)1<&DfpDCg9J2$fs+ev- z4ymBv!dgz_8lt5Yjx%E+@Oij)P~aZ1o{5H?Yv*DUvo|VPvMTRl(2Q5uQap)WutKk` z#y8mRM{Jy}N-5szN8;A6xgWJixL4()W|&mHNHqQuC3SA?NECswa64+m*LpgsQKH*= zc3bzZEG!y)u#~0=E$H`cRHrG4VZwm4txJmwXA(hC;IN$l7oH;`rJ@v@Rhb=`+^RRh|i?lo?1N{VHE1KKfV#b`7#zsEh zfkrognxLC6zl(py2!Uf~JicPzDLpjydmCGLON5@}OU_-LT?2lIS66_aLucya;XtC` z#7kwB((J}5E0|=15Ytkx5?i-HeKcX&v!0?~HF8Nuxn+x{;RL7f=A2Z;CRVOJW%R9p zFQeGH)YCsVs%`#)45|@=?9>Go1=d_;ZLx(hQy4vmX|uQ+@nCQXN9He21dRm`22RmYgqEfU-eNG&0~;#iJ%L?o_53Yxyt+PZ>g1pDDBDsAh45v{STq_RJn`ox-? zg(4%;rR}|0**Aw!=o@B6TKPR=I1IU5`fNCPNaAp+$nLXVff;!7JISYVBAobPwnL|`7KT4mOeSx3QnIK zJtvZHRw8v66GUjTFlvCVoWVE+*6DVUirjzHO$TU49`%zAU)EO+ZR9f3VkcbBK&+#3 z92eE2q??d>M;v^^@=br8ybq5KEbPHQ4iQVXNG72Zxl)F(Yn&GvOOEfK*cc5%=@B+l zDy5HgXLL0J^JTl7iF?5{g5)d4 z=T5kebg@A+nTc%!*}at-df6KcErUO^aYN!cXHmv4_Mmpx(h9H~M%pKF9C6>rPo6$G zIB^y)G&r=~(5#CqWzRiV&lf$2)@LJgVNNLJ#SQRqB;8fj$e0ve%+uo+FP@r`5-zvF z0lEYI1+C8xkZIDfl@Hdd^GDqT-Kcy##KQz07R3^@^y3=brR5DE964fv>n$8HUZ2FD zeDG+rH6f~__$e7v0&=Z}fN(Rl1GubfOY22ylzwPl)NS3uSCgf-6o*N=zIAo!LOm!# z7j%NzkkS);Mw0=vz&4u?oYPyX0`n8%7{fMS!N*N^_%ZQ_vpDMgU_(#DoRGGnaAmbM z&q)fufv~w|4MI#zbru;%%4pg*ef0G-wNISDWpG;4jFhwLXr9z>eUk*tfjWPB;d+b` zrH{_jI7)hx=(N~aeA9TC40bGi$JDYnE<+&NkkBj{Pb5lJLl%8=&?uf6p~!u!QU@rA z7l?rdGU0kLiZ2QX7mpy%FcD=`ql5Wm|JC!O=O69~2je_Hsl0iqQ4o@3>7gl4p&@@# z5E-}9b6dDahqSj=H|DCSneZY^wK*+|&2E})CfT{}lP$GOKU}?!F3A{Y;X3BoVC%ri zi^Kiz(+l5a{J?@sKu+w*Bj!;jSga`-v1^YQFaFDufB!yU8eJdUQN z%$LnP&51}M7;hFTZUB!lqUm*j|e&6p;(jU#jF?@ook=6G4{p zf|Ns@=N8VFGv~*FxgTGo{kjQGJ3NVYD@J(lO%qcKWNf$ld9U4efmX{1--n6ix8hrp zFkQA0(<-nS+lAG~pIZihcHd^fQNvp_%u9zwYv}qp!bfWoEul{d7-J^vnS?kpQ#6s=c1g;KJ$@rt zk3jk?cSzp~=cfufG0dU^4(8wwn7lxQ)r#uMehKy;$Hm!M9-i%0$rrEnQY0M zvPm@-8U5TtZT zds)_a)3zQ6nxuS8RcnPj-@zU-xuH3qE zX|I{Qd+uHDGTh$`_GS$Bv3`-^Ni8-Km$vp zx~OMkSl4`C`m?-$d&7Iw*8FvCgr%?naHd8Dq*kTNza@-h)+%7`X!}c!w9%F!wk&5( zYM~eX#1f8EB_ub-8!PZ?n*k8UR?*`2nkc9yI1$TQVvlI z6`kL+ZiXReYP^EdhU{5jFN{g#JVSmh;uZXd)vF7sxaPHVW_FJ~`H+6%8O*ubTCLr- z%aSu*EFT83fx*_5DkbcCqjb!TetpC0Gxe9C)5M%t!}tw3#pAjll^r)Lf@q6zwS-` z5&7BK3CFN6KG?o}f9LM)o!htXM_a+SRzE)@KSrQv-HvuP5zes5sbfULHj_8;nA>I( zef-K-xFIq<3w#@Jin+LuU|dYci4=aONANYyI|{kgv@)LiT0b?xIxCV{@_&3e%8IIbQMpd?6; zKpeh5tg6Z0=4LK`N8R)+;fJDL{IJsw3~1+Cvbb8W5a>+(DR~jw*EPT(d=`r5645cJ zKWyt%4)|@DhD3SGr>H+6;i$ojQ8EZ07x}Cj$C*_BgF~X?l8zejr*H{6uReV26|GCg zZd;RKznF5f?#<);w7Q6kWK-nM%^Ss_+twkl(-kfLY5c6@zm@#AlK)on-xB$6kYuQ4 z@s-8Dx5mON64O39{Pu_5!Z) zck`y($IY9z%8DsU!39;0{gx)-IXx+TDp`81^*izHk*b(@{cpKBEl$oYSO)UzVrsit zEfT5GXbv;X`X0BAk3NKu4v(l*J=BJP!<=MbaROg*PpmIQw@&-mn+MmM)Walwar>cy%4M>P^6Dno>)^`j5=4Yiu@LGd9|$)`rAN=2{U;-0)mi zFDY7#AWF7A8cT0#v$`Y+c^IP@gt3a#MreS-^k)FV!nfKK=ah+FFq&7ryrb2d4mmU2 zt8uKOO-6AA;EGlVyp}cQoP?KT=V_5=98hQyxypc}qFxR?uMrbhTc1Fy57sme zi6b9a2`7zuEpkQDVV@|qW{IgT9iK@<0FL1{NM(!^UyQypnaM8%9=N5UIPV#^^dp2< z>;V9qmT9c?zm@*C(*IUJKMDO$8Uuf2?eFdO|1G-gb^UMa_U`UV|NAC>PHG15T2#Y> zOMimkK#?SHY99$pRgO@bWKWup?2Y3$ePWiwy>MF?omK~^2@~(DaQTp*_=H5OM#-gi zz`Z|8OD+#ZikInk^1j55jPilJv7o?u#X4w0Cz!vl_6&LL1NQnKSIK0q%6a&{iI;k4 zCI16W^t8_$SxxKx$v`fOds-#`1FN{zp6+-3=l6XD>t#WNxS)q>P78U^_-VYRGj7Gk zLGh3jS(43qrhvSN!^?E^o8cY_lzSb5iFiirCu8(du6-ie(w!AkSlRzq^507STmAgZ z$bZb3f715QuHmXJO??j%T z#<(qNW?opgY=6Dxg4I_`2M6uRAS&~4otF1B&8BZQqhi6wMLFBodiogV}7X)1ir&TGc%<_=clekNv%!N$(q|< z6nu<(h_)Eg9^SMtG;N+!y?qtZ>#}$xrbZfMVH#Z(LvXIKSm8>VN^;*t#`P}ZTBMX( zyMvAb_@%&>v>wtT#MoOR5@f>_} zNCh+aFK90Ozc{_Tj1Kqi8eB&3tzo_)(oE~)#KyCPzeg-rV_cpz^aHO zd0APD^!ZMUgHHWC=^o3x1V+% zp#+|PI11t+>%+=k=6I{RCZ*FBL=SyB(5DOkKwuK$oV~FY3^eJM?5<@W^qK)6r$8fF zR;i!s188wct2IhF3dd3PKuZ_OfK{00-xGE-%FS{6@aO`QAt4T2#kY;}Kj|QVAI@*1 zD9h)k{RrB*ZJ1qXS8n0WK~1`-wPZK`G6klFTP)w*V-yaM!qApBTE=^5GW~;p`C32j z!b?2@pWb>6zrl_=c5Lgvgtp{!G<_4CjTU-nxh0nn1Ze7HNAC`4A6@2Tj@yHvnp)g_ zB+!=})Xe$3%eXz~<6XW3>t<8|D5<6>u3$xKq5&6vhtF=}N)6P5x-Gb*|A$H+GBX{} z#ILiK)^9e~-Ad-TSRh5|9cFL^fPQ*$)mQ>g1yzs@>W@nT6mk# zb!PJ7nze`ldmR~X{n@z=j0rfZmCOXQcA#36_2s(RJB>0DHk;e*%Z?0^A4sA6s@~&} z-P1axYjeye?wx}2Fb?XM>q-Y;p)7TAP5s4Fue+z$%fRoxdJVWbpqe$Y;Dyrz%&cr7 zC!A}?4Z!z0r-t6M0qGT-rHB9@qlVheo4WAzw$uk8uG-HAAsBJ5$fd(k(CH8swU3^E z@PgDqtBe^anhUb=4=~_@4pRBl_d7IQNx#y=thlIEX=E{>9xx;VCL<{U?;JN>xvpf}64jKF zR1q9axG4DZnTp53GCF?Zgb~i@l~^(J>hcD;th?LVLlL8u1Q(HBs`%qBfDxH}IWU$O z!B&h8Lpo|8!iUFI(rQ5oWupX&w4okZaLj}3W02r4x*vFHj*(7rzkl@nfPeYW{Bq2{Jf%;b9z70QqsbQ@zyfJw zK&NfRP>ISi)5(AjLX_DJ=l9QYq=;AA4_JQIjgWzGL?T68)aXo$8R=`Aa*-vzPgXlO z%Yv+S#e`Q*G(at1I??*4HeN@UaD3$wRIIsT371T~sc&9Bzdm6gfm6D48Coxg^Y7&* zqE3Z{H_t$yZ{YAe8B+KID7~!%NxvZglBOZ92<5d7!rJ*i=rEPW=wXYi7zheP!;U+? z#fR9y);dk>W5-J$Gmvnj5eP0BjnKT~?ahWd;u@*EOLQ6%uOpMbD(diBmTcc5?qT$z zw5Tn2`6DekwAzaOCuy}j5Pg3vmFa|)X;81%_B$=P;+I)i>+tZ&2m7y|p0vNW|LRz9 z%Vg!-=t#pt%o|6qo*bOC_YV%99Lp=(6G;uUt|c3ue!Bna!zb+*k3Xh&?NB(;F@S*Z=(0lt) zzf05t48T-WYH)3rMzdk7IW;!Crz7bvw089T_{pmiv`2a&r60ey|Mc~f<8Zx!qomhK zI2trI*5uvod$+cBmyDuyDQ|`!yn6AB$I%xOx_)2&;37%opy=m2Y%E|AjwbjL!}DM3 z+vsSp0jPZ-6_}f$G1Jm12yX*x#2qJz55IDCn~qwN`NFfxVfbqb^e~qE@1K11;2%V1Vxm7F8r0C1M(BO*+ zOMVm}{W;mea%*hv7*a6ppT(t7dhYWAMcPhBs)xuf%4ydQWjlQvqq>M*t~$C@x|z(R zhwPZsP@%tsb5e`eU%|o{`MH{C4Y@(!00drkgIC?)w+yP&DTjUy$+t)_R&1$}^LG;< zM2KfL_+v`|i(~v)?Ase;#V>v)`Gs#nwO%^84NHBRosK+1lbPzMDTb$ob1H&urKML< zq&>cdQuv+pGS-T?e?pZnxM-Dr)>fiHcAbtah`-Y3X&qe_EXArTZF-POG}cWM4p-dA zoHly^nqsNBxh4dq1v007pq*#dBfF-5p2p2J890s7l45W_Cde<9Aal3EnX{VT3|}Qi zJ$H($^xz_S*{#Kv7+6jwyE7CspJuAhF>qR^>@EP2h=|%pgb`gDw4;UDm{t7WHx~bQYj-jJZ)X+%_l?B= z-K)j_?cTX}JKEX3wY#;uv!Ve%+wp&s!RFU@|L@+teOdlTofh!@zk6$&?*Hvo{NF16 zdqw|O@!zYTpA!A&vazf)e3dBhtK+|Sw|8&do{Rt9*9q#D$tibQlU|4 zKx0IZ>So$)u}XW9OD$^?F%-I*3ohgp7K>6EKhc)wtBb2q!8Re+K2RoTuj|(s5#Km6 z^r6AK1~Jm2!j(ccj!&U|{9tPcn&Na;o zKe8QuZX0IeH-@|v9-&^EZ+8{;|zU%3Qd?7sf>} ztZY44+@=4d7b?;lrpdV$dFal((h6Zf^lMgSq<0^l6T`ofCd*a<8}Q2XA`;{|RhcxTfn6H}`6727bx5X}!j>@SlD% zs^VZMHAb)8Oxml0&r5`%;lJIh;aAM-YV-(`7a{V7jITH>FZFBIre4jL(|D7{GAZsN6pKy&i~0Z${89Ktv> ztYR`FyTl86T_dz%sNq{X-dnQs(ABk1MztR20z+NN1yPnb%SzQ5pg2^mXm+>G&5ZZjOb zkY)%BHe|1xc)_G>qTk*CG}A#w=-jtUlMZ|6#L8)HMj)}JtMYj;L^VFbv6P`9Lv~}1 zDL{6BD*~-hU4*QS0`Kr9+YH9_jgA@0_FV8Q*wspS1)j);=I~bBxV({x%^ES`j8gGU zTPT|T9)3$pVvGv~_&C0C4^QuP4j)I-;f9uui|sy^j#%{ZvV^`~Y+{On_>x_i07Ha# z@`@x3UD}J)>iAVUE!|0I(EjdTk;!e;g0sN3-!qJ#E1fOB13|PG56rC~?;@ z)h+do;VX`2ip$_8|9R7<2iVR22&z#74OJ5dvkE;tfU; zBM!RZ(xh_2sl-Jvb5mqcsxrVcny)qGF0$Uic(IwNkxdj`n`{zTxmhnwUb455RwSXd z+V2W7Va~lL|V=T^Gk18G!d5qhHHn7{h~KRMY(;WdD(5Jw#z3*U5tvbJR_*_ z3{zmV@YAK@($ReZ_8t>{kg$&GlKwR}7u77#znQ#}q%GZjL;EF;%9-J=akm1JMIUB1thonX z(<1+-G;M+i6k3_UvIJQ%a|5eb1{hFDvKp|v$+AnQl{gi z3Aa*FDHCoJADHHU{C3K$Px4zFlQUUb?rq!aJI#h7JKJKf|bCC63o;(oo{b%~yqgG9q?pao>vV>msPM~x%JWpdD zYVIPnZRb5Be*O4(@m^WSi}%V!ym0dghP+iOaoIi>i4{(lft{14E+HU*PBQ?9l4KO2 zk*w14St6+u^TdNV&FpM_Z9!|e2cKPFkia`GB>&5anj0$AxrtFe$8DDoFd3t?2oPL~ z0Jz4&tyV2MnAE%aEs6hTzqj#y2b zLl$Lv^Ek7vm{8KNb|P>64|wtN@`D=kJkU4aigRwXMRc=WX;ie*$hXTcMdPD{s8Ta* zgkOG%8$kbU{Q1VU5q}BBL$MIy47~cx1tdE9hg>jiE@PMIN4GbTo^k1t-{D>^E{{#4 zu5#cLNauUu0Z)y~(odw6M&g;EePxxnhghver8IPlH+co}b!~pAk~p;b@$I<2He3}X z&EjRFX_~M??i;FC(4(mV6aQG*uK!JQUZ1T=_0B{An@M1$A;a{I8gYTw@-yhK72Q<$ zSen+ELj#DXK?GYyyTG)r9>;x&V?|GTO?s@n{9_mDZc2{xi<*iq7!t@Lh9cu}H4Z+h z0jjh6-X@xbm3*4Sot+RZz{Tf6lF!HKvXLv-;%rD4#(Dy>1xDOo2Ec{dGrClWC6*f}U7h}~c9md}$NUdY zifOWV?M*dtaBlR%iqB--sd19AMotnvu6kv}U9&gOq~+(9v+S&ud5jay+rIeWuG-$- z9^4i`#wI@?4zy&KM=G%<2HS>V)}l}l!i-$)dS0`XsBkPmg{in|24eSO9XZr& z8>`JrfhFNOq^C`#xCD)}05kS*1|rh*NOK%#O{+f0EiiSHHNtU78J`8Ns6E@vNL(@P!m})4Xn<05Q>{pRr;S#b@&UE4NDa$reBS&1E9QI7O zkVzX^&nBzIGNu!$%Jft|DqQc|xYod24D>#Z@YXCR=I8)nC``Kq# zGGU8d^6mx=PTTzSvo&SS3vAi&9WzO&v-r}Xh;E*YXwh9PT)s>vWsGPXcjBye)1W!duPfU}11H(xk9=iV7ZxppYn0K4IdazO$SN@kmG zR4&YbL@~Ho({daxcao}u6r`Dt`HJJkm4L`B6O_*L>tGbrc z?ZK-j`zKGrll{j}pU|yq4{-z5ZEkUj;u-3dK$d+@=!(yp_K99TC4!>v(`0~5;@}fl zgv#kSv2~ferQzoKLv=c?Vx2K&JKOLzmj3;hPv%w^?jL)5V20}Z>)>q;{EVGZN@BUX z5p@^tfk^>FuKQ63?gmqAQ+6)lgBNoy=2I%dl1COI?t}0<5d%8kAHS0iLB%H`OhdI{ zCM!Rhcgf?5v(aW`*0=q@duF|+VKnMbHi%F(@GSk(@F0LcdA|*!Q^9NNk8lAFbw`WQ z^7tx2A{2xHEZ{Pbl0Au*1(~-zsplb+6ccmvMU*zKY`Sst;r#MZyl@Hpas3R z&gi*OZmczH@L>9krykS+v)(wJ{@@3w3f2Q`c6XZLc69$fF>fB|!S>eH*2czLQ&DwA zYnPGhSNX-#*>NNf>PzrW=K(FJmi5m^^+3Y~)*D!9W23%S?PNOVXEQ3R*VV)-O==%; z;-WMZ@(-k-vwiT@VCaKTeSZyw8ok3Qxp?A-4SuJw7vilZ5E&Yg%4!XD;7Y2AAu9aZ@4_sWe1+;IzU)b`U{Sb5W1+y?TVRm-|ajGs-do1jl> z(|GAQ;Dr7$PTnOC@z>^)-W9?h{yF&pN>VgN){W{#?p8Sg_=y5tD-{g znKwj5qwC~ZJm!?7ujy2;1;6wZUxW`Hgbj#&jlHF(sZgfj1WV>0dgoK{S6!DA_Me_S zc{L|)?;jq92QQw!e)b$Sg5%=MghH-4HpzUp2D8i9?B!gV%X7&L`o~vi$nVaNug8ns z^9@-s&EbuwcNOpBuJXnkKMK6Q<uvKEU!&(yDB-HUtVod%~ zZCFN0)!*bv0dCQCb&C^y7rIG`_ZmH|)) zV-d1ib=F^8n-^iN`n{B=GgAu=1dsrlLsC zh45d9W`YfSarx>i^aN@W5D=bbyocXqE4L^0i#3Xb>vR+sw%4hXB)B@K8ZzK&A~fpS z!YwAi-v(tw3-xZNWim&8>u<2Fuiw|&*cTZ{VwMM&&%w9Hl~`mA%}60uKoAcwLjv!i z!%x*VLv`#}w9iir)7J+FOCJmj%jyl2-kIJ=e?_i}FwG>Um@Hphe87QPl`gv;1EJW< z0Uz;2XdDUFWa-5R)uWcI30C`i`mHfBzBA%sMR1Lc>1C1zPY-HC-CIOMN%PJpY zB)Zb9l0%**nY3gC{UkBf&T55N7x4@u7*L3?Yx*Cf{A4%bddCU9-$OA?(}z~4hiNg* z6mUWgOS^D?%XFGn%2hKBt^+D#Ex9bF$f-3_2!Kps%%EQC)I!J9*s4_o(b=56ZUI@9 zGQ-B1a(NdMG;785IWv)P91_`#ZBT2vq6Q|1m8p5t)>2`4&yMO>9rblt&|VIE!aZk> zDv^z}0~76OT#SpySicX$xD1RH&j8ajtMFsOTw_~93(X96UrKBa+5j{ z5P2Ozalj=U(S zbFb*Yhv;ro0sHV7WbW99>q(ijhAVC-uOWJsS-0l3f*APQC(h}#z(Dkx*vC|yfJFsg z1#w3tnp!xb*~BmgEwn9w$IWv^j$qkQ1liAXBc>CY>6lASx?>FDV?Dh$5>W+CD28jd ziZUp}&mol7?hOpq9Vrm_WTiY?wRHZcrEv%sUIYn_c|NWd<7o-8SwTLiM0LEoJpV4L zrhR!n$3ogrTqVz6@cS$i?T(_`%CLJ!1g}d%09C)9ucn-mpj=dtok*i;ysc+b#}vI7 z`*ir0-23-FTq4gQX6r*~g%&?e|MY)HbwicEfWLQ;lP`9`@9`f!%X*Ld_W!@%+T^7@ zdTDo%?d;mOp5R*s)me*~5b6iTufyMA5v62WJ-IW`u*F@H@`5;?>N&o%s{?6`?!)9);{k^ThR%qOsgE4>o zBYbV5Vf1iNJq)?%&F!}LIpx*VRW9T9q7%;%mSDAU4I zQA=9-%aA3*>g3V~KgeWIc%tW~P$?n&W_Z~mm z-P_%6ep=Wue%*h#`zZMFHo={LfAsaEr+d3!J$?N3S5MU&Ps2BC+mCl`A7W0VZg)29 z&%TW#^!;A9+aLcYz~J2DKi%U$-Qz#q<3FYGpOm5Jv*AB|_4MoAy%_(=is^g&r!VpI z!kce)cF={S3_7F<;8wYFjilZ{@^#c<-A#`(kX`1SEhM7yVAe|1f^1WqqIt8O^ z1pa~0>yk%{IS3&zItS3HDK_@fTrNq)-hNr@oUHR~HJid)zUz3<35Uj5kNX%09 z(NQ%CHwUU%i3O2;FoxnqWXW)N$2`2dUb0tjV96-7+VY}@T+q3(9GJ9WEnB<(lHR7+ zkIfM-|M$I}Rr6z?L2TA_i%;w$W57qQz?6PgKLZW#^D5b`iZe9mQM#kr=lJ3le24M1 z&iU|vI7#|7l**z9iVB=~;C<$ttr65*A9 zQA09K!<)(A4`C!PLfQD3e#{Z%z+aVfLMd7j4vd#etO;9UpbA?g=~|DELQwdd!A^rGV%pESKSD2oBft;t~QiC|1Vg`2(8LLtYs$0l5%}2avoVulE^( zgegTvP(*At%-(>gzNi4Rq;ey*Vi4F5OAbhknWPej4d_5g3@#@dAfb;`<#a*^H_aE! z(#|aiu!8VaIxZvENH)A$xN;EC0-M4ia9Kw=$9B_TCX%-6g=u{UV{dsj+z5E*oUN&{ zQ!w7KLd~Gx)Ay11GS!KRI|*X^!s?vN@$*GBTPAkH@NPin9HBl6L-7U(`UgNH)##Nu zihvowog%_~>S__{+;pWgDc}dgzz-P#KMVl*L5E&(P!q}|EZ0gQB#12G(u*1+(N-LU zHqn`?xc`#*e&pU^Xvk4xw{S&Xe-nfV*v`mdMxpa;yQ!86fO2996RXji?b_ zyX>@72p$5>ju0c2;Bb?$+zkRmvNfRvx?PgLkwPnG%WA3`mR3Euw9%kkATaDrnVLaR zsb;{^6A>zqwM6@Na5@ZckQgK5UB+FY3Xheh81iZ5f6e&4GooWkp)SV^{{(FDPoTF+NBusT67` z>n_^C40v-=0)FA;F#9vYbE2=UfN0VIO{x91mq58hdJkGVjoJk61BhSNR%k(XeCV)T z+c~PnbZMlqMyEAOB0;M`bHo*~9V!nlQro_t(65yOzD)Cg3)r5PCrd^QSj|=qXBZWD zN*xlGchj|Ayi|nFBKZ^^z>ayrUNSleU?5i+RK;aPdWT`1u`OI`vv#Q?5V}sXF>5z| zNWkw~6p7=gMj^+u*`@(?rXfIYE9Lh=1MgfSw@0`|gCxxunTQTthRsH)%%^ZK-`dLi zV9neTbSvAHRf7r^en6Oo=~yIBQsIE?UI$bN7oroqY2|~EKJin~CDLE4&hvqRlR3Pm z(7hukWssmWF;c6b@uC%=W5|Z#BWLw&hXxy%1%@3x$^5X##MN698DZCPFm1;$NRxJI zFzC8FsO;`c%4v0u7@P_?6Rr=SY~wY+bf0l7H^6st4gK$S{7u%AxmqT{2=BU*QpAPq&j@)dZB-6=6 zO0rTTZ=@-=e?)f<^zonKx%z?VPqXY_2~o7>J1MJ0@bJH8Z&x#ne-fp@ZY>#<0213W z{CuAu?D>#Twnm86zpy+F@*Im@(8KP)_8ZAjCq6PCjAazgxX}t0gVA72EBJ|5Zt|@B z-I_&{H_O2Zy(a}WPkGO1aL1qATKc1}7d&y<{Y3lY_3KUG2BJM7u5VE-+bSedd@;G) z--x}Lh(sE$+@4kGv*ZQ!bPj=Gf()s!4ZnL}))1Io{_+!?(#OrLm^Wv&?fiG0;n*dkI0gZ_TnZ40XQM+@lSr@i*0?T_@H!mYWI z8ti&`-52bfI<{x*9BcaqUMlygJMPRK85F`^Ns4zltrDY%Z3XcDKAl1WFx!6V-ih@y zIkBR5-^fkgz24p|A5~m_0uMlNg{8Vi;^x8F^-k?RuvCzF+9cgy@tE+#-tv-W!$)FV=K>TamEds}q&o^LJ^q{WDEK;V7eYAZ|av?n`h!1JNRb)-fKzPT@F%5hQ2^0&l zqX{~w%F6DP`#ImM$)H9&#MKj!t3WT3DE>C-M{Xs9&XYyCgAxO{rp+witqs!A?LYu3 zbn-jW`@k+^ujp$$70wxfP!?y(M@{2Lr~^tIqDUooDHJ_UA-y*ZL*M-jPC53eg>puF z<@xvFv%db`&?4KEEV~!(ANC zR~VLMHy!vWw{8*wh$IaxqK3_NaN$L8_`>~s0SL)xAm_d6I)V>XTp8OY$)?7;WkR-K zHv@?#XTF!ZE{Y-ACOXq$qRU#AIA^81!u(>{1k)UWHRzYniC}I<{Mb~FiT$l>*Vl6bJ**D!+4HFjOwYY*1@$?;+u20IHzjF(AB}n2%+ENFom9 zWSG4H_d*oz3-JXFm>;U}{gSCEKz=TZV5_W9wfgO_mTL|?o;c>WSbLx)bsQ2SS!`^DOC8=$Ii zVo}_(lUhzjTTn{UktA82$W+P}TCtmwO$!h%-;?R@VhO*~*YwF^OkG5yq^A*C-abJ= zpIJ{m_vTLn{TeMvU)gAjfu*WJ_Nnj|;Kjs#wj@h0Bu-h;;|;b5&$P7fIaJ4sVm~l5 zVog>1jsP?!OVDb!ZvAf^n%C_EtUVQoHk|Z-PBvso`EonaXAGQ!V0_D zgep?9y#{M?^XaND!gm=^ME%Q&`SYj}SirOKNx&Sc)LsxHEZ<%f%QIxT2cw8H;im#y zZo6R6xYICPPoGIW3#|pvThleMVVq$E<|Km!2x@}k!($u+Kb`k0JVPnkd*bj_4Il4V zn6XCS_-b5%t&f(tT4Kr&j1Ug|ODfF*o@#gxCFsj38C|%j~z=?o*+MO|jYFc*q4^i*cY$qPT%3b}5aAUpk%GbZ328o&t z4?1-3D>5T3P>!dgx6fa{J3f5*>LAa09&N6gOv}DM;pnO7FOClX0?+yI!wNmNbFkl7 zChia7c3fu<~_c+6~wnXZZT} zumAM=%@421oK!N>Ky}jQ4P$ToY^mYpOV3=lLy;W7YK4jm15^WuDP2a9nR2RKmP>bC z05O=gC|Q4_!EpWxCpcX~p&*0mAl71ZHe&DB_1gGe$(Y?#rO{Z@UIDRr`jo#L*X zq13e#@D}uIDd=;bZZFCOnF%9r7Kf;W7ciY7V?b=ckmSnQ8R<2zF zQxd$mkc}Zg&mijE67Ghlgt1ei*%KEJ>v#BIC%wEBgHBEtx1g3gFytPYaU0fhTR6r~ zxFWL@KG@1-@nb{`D~TYN@j!<@rc75!>PrR z)D`uZ;HKeD># z|4VUeIj2?~L#hzyq!1v6m3OcLR#c6stj@nrbOKwNFf^&=9eE#k(29RbLOD-hnHo!9r>iv$ZRInt>b&!|L~ zfa|fX)=`KX4$2fyC6nI5mM0ImGuPkhiHjX zBkf~7{bZn+A+4%2BuH*M$=cwuR8 zuyE7HLVFU&Y*fyWbCUR~@9S`XGl^h#W4c1GafpV#3Xyty8I*c95#XP2^w5&c9Dd13 zc%tsSsG#(cFZ30jQF3>2Gt~wpFI)1C%fIDRzQHRdrPwI06k2D>iWacNooAsq^Fg2@ zZ#bF+lk%I@B#Rg6XEC#Oa_wq10jzF}k8?wg=4)CxzyfHkicqXLJB|XA(CUaj!XacE zEstmR{BbtP9hV~y;l1wT@aAzdEBXez9uKEC8%d^7YED|P8>u5z)bh`$be79m32ouAV6UZ<&pglY?rDL)q zh{pM)Panjpz6!WO8PF-o29yMjNbI&7S|ulq@TaWT%dUr6UVX)ct?q-{$4+dA*i0^;@3b%DNzG7eQ^REFbW|8ZQgF$X{0SNNl@uo^#vZE?vr`a_b8bTF@a zmdEBFrVj{ObYr`En}-KC3*Gs1d0sCrU8}fIqZK%pRkA%Ih5(kky^nW>1g~bkOajk6 zN(&{AdYx_mw5rA*rkC5&A?X1q|M8SY%!A4Ss_dIXfnFgty*R6<4y?iNrjO{s*Q^L~ z_dO6K##Qck@#ed~Iy)}QgCuMi+`y>)Hd4q#DpeaohPhDz=ai67r4eeVL7)!9k3k%s z1m6*Z4O~6aYzlFmh=05S((3`HSD!l=nmlJx%5z4yana@t7*DujfF>{YYICF=l`4tX zgCxU6fq7cukJbAKp;-VYfq3KI$i>l3#dusVCS1?Qvkfi~h89xVkQM8Mq*m7-FdK_v zC>G>!CHq>FA>v5QSZ`z{qqHSF^dEu>k3hm_U|X>Q=frL`Ruyd*-nhdf-}f0G`(Z%` z2T^CGFcedX>y)gs>a?EsGtnXfE?6Y{ZsCLr%r~-vZYpBD@pTVtSM+&4U7hY!Gb2S| zyQ`}Np;H}ZfKFrxz2eZcx~CPU2(=!Zh#(GtD zmB(fE(OZyZ>jEL^;*P|CRY=i_lh(%I*^CjC#_v4FSyK*3U zg~&e6AwMpWRk}C6d*>1LWw{fzg}^FY&R{(zQbPi(D@`xWg*%2?)gdZ0@snZABQ=2y zB3XJ0LJX3{t3VT&VD^J5Ji)}Bb*^kTC5v#Ptv_~K4=#M#&WI@P(DZ!T?zhY38xLZQ zJc^0fQSY5gBR*wLeH3PD!4iT>bZo;qHmlgFZ0ObsQ4)(N$6PS2qi0a#(NpF6sb`zW zIMA)v$+&paT9U4Vbkfpn(`EYtLakG#T{*ZRK|mGqB=`vnNg!{U;HHuc!#8 zc3RF#0;vjXoK36I{HK9bBzMhG(kGVtl|T>3$#&F~i}&rknjP~?P0pAOoy+6Iq05AV zsg@Hqp}KD=D*|fCK&S2|Pk4wD?EV_t_9z;ZpW@1ThXp7gfN=-JvvB}a4eNB46y0b0 zu=mjHaDFB`zNmV><{R|x9?2#!{3Ue{;?j8-i#!&YgN zSa0Xn?d5-XI?T4f{P5yn3rJ<_hv#o!AHM#>*4p_}8JVyHsV#%Gmv>wcD1{&g6HPZd zDXl_3^=*c_xn0i*w7zk3XO-lCv>IETTKXf(LhA$>4Fty)sKO5Xyi**_S4)g$wg(f0 zx0ZOxq3C91yJ0IZ!1LbWLB)Od;6E(qezc}*I9QAtOJ!A>@op3xm;PmhG9>hb%PxSn_^Y})q(*{+UqGtq-qe164RO! zHFa`u;6SP(ut>nhHh1hGmQnP;M-k@?uNzGuxd3Yw8rTnC;c3A)5yNTFdx;%T1}oi4 zGUx9VJn#m;&p(qSyfVuVX9p)0o_k&C!t2(M%xCC3laL2afVB$Uo3}eY-CnXCBn3iH zlRC2=4qyKT!{i0PN_`A@0SAD(_1zSUglz&XUvQo&!?c|UI(+G@cPR5Q<^f_rCh^Qs zERih}5?yXa%4=nR-Lnnfih}L?`x=qkWkn~*@kzaS}jZO2PeMg}M+IANM<+DPcZ3xWz5 zu;3hOWOu-(B4Z$PH=%B?v7< zq(e2A4OBqBdPNrXvL4q{30?LhvnLsphMGJC%T5W^V);=W@9Nhp70KJ(Z5S`@JC(k~ zJ>A2)nrI>T?W4z!p5h_>+u`Hk(;M|l$t`{ZJHm^w+x-kcxFBipk^R?-inZ&=x{J^fm%sac+F*bj8hJS%=LlMIjxd8v$(S6Z zT7V$a(|U19O+1G;o-Y=~<$&7zrmm-DF|&WYfUjP-#^QDmnSYzm{RpFfL8e(~jKxy0 z{!`xR5SWd^7f-P0lOA{Qval|`ugnpt*UYzAeGnYP&A{HK%2xDgJw|hp!;Z`6r+A>6 z|2SJN=lc&IUR+!Z=k!AJ({xxbPWccff%y>bqt*DKUCClvpYF_0ci{Em+46k)`}~+n zdk9y#EH)(o$;vbc3Jo|3ihq+V>xenv_xD2^AvX|+x}F_Z6q^(ZSC2jEu=85$sf>sA zll`Q$0!hb~>LO}^-Y01RuX8HBPsDTeof!TP3^nc30te`$Y`vW9UImFLORPc=XyzjL z$R7|Kt?hvIt|dqWceO&=Tu(ld#V-*XOWm`AH;|lP6U}dcQwqYFx_eK|v)A-D-)V`g zSDTRDWDMw5t-^4+mWC{$V7g2%5{$5$lu#RKHyQ@~uuEDMz!al0@PpKZkx)vRW`W%!6-5ohFEE!0oPMNVf>6P7X3Jb6yk##mj6* z-mO*`|E**XDw>!s&~|N$xRb1rR{d{Z{A7(b&sk0*s+|%f_UN!oXfJ?y#c&&pJrE{C zvS>$9V|m}xX+5%P5yqdf;oNDG?n#a?o}Ug|(Z}k$AOJZiHa@A*B00DUgOp1}!Ogpx zQNl4-)U7B4M^K^}{2(!@pk92;4-v_!dRz*QHqB`QFbk{3l`!o!U^1c`05&JSDk-71 znxW%K*TAFge-7I;b2OkwC0$0=(A#3%vg5X=MN1+x`0Md;9N~_&GxSONV=jYMHsQ9rv5iR;y!1^l?hP zxmZ53LpYW2o7}Jk6!e8+GC^Ol)mbsT^sG9C%MBg)(kPtCQ0NEL2sy@$k2M7NBWw&k z-VNsh0-b+aLSRpE$`++K_veU;4xE$-RL%w7JwO~q9#+^O8BJV~Lk`uNbBZDk%Ib)DNBdB;jq>t+6?ZTr`4ZEJiVWb{uvU{1m*j%?Fy|IilL>FRg*)@$-NCDa z7f1G)8seH3*|%@s{2Bf_wtpOxG3AFiM9|UJve~v-jqq>E#*_;2Wr!CYEgUuQ@|)vDH7R?zf@%~G z9z1vp*{e>cW;*tEUp0zyHZJCN9>p>SsP%fGLmi`gE9aZ|F zlLNkSkOU{?h4%}&i3}Z(D&^MZ`DBzmv!saSy79tR&)J3ofC^I&5a$6wR74s^W>Ka* z6d}uVS7OmN2buT^gEAUqMkvL+IOIy1`5;{%3yoE%>5s`MHyU{PJ1Png2Hv0`gp2Rg zmp<{iYFG`-K4JKY*q{U}lINWH7Q!%NMboLu>_SQre7R^U0Kg33%X@?=TS0EH9{Ov2 zWmNEyh{_xkN3kC+O4ya~ys2i4NcFLFVh1p$0lD@=c}c}l&?Ki*#^4*YGT#d4#10Ai zAYc<`vAU|W4)793Pby(otS_&F09!C&(<$okaDt8;p2OOdpFfqCDrc1OAEcfSItvTk za5pMldYblRe#fNczsD`}&efuEZbfC|@Re-D0dO)cPKTNDB1t-+H0j}U=3wGLuOtW% zL;%q!mP8*?uEMQ>sZKUq1o=>3;%jua*-e>EVFgg3JDMWU_P-cWagm9qtWHnCD8<)I_7&eDTbF_;7 zi)tp)LIvKMyF-KHRdpTq-djC$g4KR$F@Ee==BtJnGdVW9?-SbUMF9VTX4h%C^qCC` ztdK^s@9jFwVv3(pLZlTRCrm%pu2ya(_B1tD|fewwmXQ z930(fjYoF~A}p9Zukdr*O!*1Q@x8-8W$WRSkNC;Qs=R=|#(CTM4$U<59;mLx6dqjS z2S;z7zdLdQ_wdAxxFV1?F8WF3(HObNgw&vm%V#}_vPCTgNrF5meQus;58FpMU7H-s z4zbgTNpnf+A}Wt|VvTLL1l`}Q4A{+U^l0#3>;*UUII8OSO}|~<-U{}M66zRvd^P*a zrF*bCoz)A>gh0za4JDE={OMham!x2!etK63leMGSR2*<48_9yT9d__OVr$vf7t8UA zZl`%3%FeCD)__L?dT)rPM@*bP2qe%zBSX6Q4EEOFL|a?GH$J>Usc(O{y89dGZ|j2+ z;=ZE5gg+2gT964OC9W!ft6xdk8YHHuwV{XhEL1L!8b#erZYkkVM26zXdsVhJR9e{(5fXh7~7NP&k~p@~X| z;G=_FH?hzdy6czFmx|n?S1JK0vcr%FxzL+tI%4IRvg|-DwG+!9Tb=P^H7!pm5t`uF zP`Pwpm|GEWq9?&ubRUT47<(6KA+Ac7j;P`zq5-Z!S=5(bMezPv*UG;Cm4h>IHKd{| z?kdQZEjqxrBF?$Nuv>t+X>8lL!Ki?T8?^HY;vw6aha_N9t#T=-=`Azxo$i1)M(42J z**W8jq`2QAf#zyyq{g9l&wacvF5l>J4zRG@svrmamctwv2UnsUK-8?ktipjoo8HIV z?l8W|CR=Z1fgW-eXqZv#n_E*zyZtJVJjOR2CW?&|4i-`s8l)u;;%tflYPM?DRg-Bi zgvio@@*$N`2?z~Qc*2s<1)yHp8-`MI2_JJnrv)t^<2Qv*z$n7WH(is1c}0bC+byVS zFHvuFZkbkR1waqs09)dG;Lc7eCF85Z_!AW4e^jsERsu0f#|)JYruHrSD;OupUFAd0 zpjX)FG zMhMkhs?!xEDXZ9EOaH%PKURhMK@rhd+ME@w62G9TI&j^^rt zS4(*K|_Y|)7Xwv;Lsv~gc0il%YOPA zQH?}7qGg-{?2HSQOiEjkI?b|PP`R4KS!AN_EvT~L(1ymzSCKSYz><$Nl#(Iax#?1h~XH9XM?PbTx_ElwfQ-fwfjX728g=WKWXw zsnmq#nA7Es%a3u;ooFOM&&6p`LG$nU%hu3o{lQsVEC?9-BgD|j`>xhS`KcVQuu$P@ z*$_#o2@H(iYF$YY8;8{M>ioQ%Ktj>Mainf<6FxFAT# zQJqLSySdY1Hg>sjJiYe-G9(AkH}Fw7_tw>mV5l^vpdKwk7D=h7EdWT$-n@SG*DZw# zP7X%`Z)(-09AvDH4p6vwpD-78;V=hcDz|GmXqExGNh%)RB0Iy;(+SeU!eRuqxe+8Q zobphUP<$X_pYm?xCWwCJWmgyVs5Kg*tE!8CrFMiO4)E)yt0-){bxW+9k5rgc4|Rj} zkhSc+2RY`#=WEzAz-nDjUIgVMv;{(Z;ocNL33oMi%%i3Rk2m~$dRf3&)r<>@RtGAB zB_tf@roCjvsJ_njdP-WmYzbvi=Awa+UQ(F=x_?Bo?Z!WXD=|X$(0V1_#d$ylx{*DK z&yW>^r|^`lX6p%S6Ivjd7EZ~IxCX=7#`6)V95*^ZXQXD-boi4-x2!R=B51d3O$)9( z4r_B!U(iV&7Xv}XvMMjk?ae4+L9>0?TY}Y1G%x*O!(nV<9(E6_XKl;-k_#MUInz)Jz?~IWR`iZyWMeSUuWu#%*2uulQ0UyGKrdV z<(+|+1Z;4#I*cZ;2VX^+T5R5nV;JN)c#T%dMRUbqqbx}%2jRQ~8B{grzLF9jX;=sZ zql%hl1tx2k*s#s3yzPV{kpF5{+2hi`hDl?i2*OLkZP*qL-Z?Ip6x9HsYmD!Sk-MD~ zRyP;DVu7)ei~dbW)7-Wr$RSQ2G5jB=z zr>hCkKCjqAN=lp;)q+K55q1$Z4}g#SYU5!#S&|s?Rg)=&r3FE!&X!olINAu72VsBM zjn%~JVxps5<(x#$oL>4J6L|n;<9Rj4L|U15Jt588^3-BQ!4p*9&Q)z)%g%J$p4WCK zM+DC4xX=szVrD$%f^fAmSyjsxkK2BcH1YP#zscs`hOJvnO>J+&)Zbqkj1VI?0@j{(Fb})?# ziu5wjk912LZ|7`RDyd_jMa%P5xhxxJ;jqT4a@FUqF{=qFIFrlN>WPRS}h)*!+}9(etb*J;4)y=azU zFherHM|^aKD&wd(xI4LC%_$khsXB}WE_zP;F7-Wmh1K|0PA>Tzoq?lF?VzIMeCgYu zY`tuW5ZH8Zpb`;_IH9tf9(sj(oXBc$6ffxck6g3DO~ zW5ukzaw(oSjp%dalKV1Ol3Bq9Js=uA(hc9fnyv;hS|LK$emb)c(UrC0wf&R4xc>{b!TU!) z+W+BW|7zFjF1zgMK2x2N#5pEN+$F`md)ebZzNr-2Tr&AFC>iC?Zn(Z;LIeC#&7g2# zTVAal?{y`Y?|WaLU3C;5=(U7aJ3bUrnpq!LiSr919X#GwtKSgBue`c>%+I2w^QjBb zTzrC7sBVI0bT5i;BZ|H0?l`CIh9ZbTwmN{v^*b`=w0ztpE+UFk;Fg(>{>-c1&fwD_MF&P~=(wx2Id~x@ z)6nUvM0Rj)eF;zo2<{Q&DyTUP%mo(gw(AHnpi;GOQCzgxKMXdc6VP6+?7+%N&VxrJ zdpeB~6C23I1wNgt%Mxd(+xwTj_XX)6pap#oX4Dg%& zb#C5|<_vw`;DpS~V$ubKpO@ZVeTh#kx|hyIUv=&m8Z-0&bS`ai5L zYeFdys^acbXLB}pqIFBVd{fxODv%gTI$Bek=@T#ATM2$f)%40TqU{ayNpxtzjOvL( zNLZ6OXG!b46St1CE-1y-=%klG?FtTYk1>#-C#i_50(`wg*N=zaRMFVqN#aw8MWWKP z3e`QOcrZ7hb(rwWj9;i8U@3CRMO9=*U;(Dp34+u+fHnp|^HZ@~+#WEO?{UT(OL@yn zhkEDZM3!CQ$|IfjT?~e|0fN8@;4lt+$Qh=Xgp8`iaMVUja{u)xh z$Ob(sz1H3okk|n>nO@n9i#gcse_GkDCjDV&)kU6eP^10E(ytAPMlG?p;{}LISZ^TV zuCg9nPYSZ=x|XPFP*z=D78!mXaLG|`qasG#Ak zPg2ZTAIFOSL(2r16ae|@-}d0&ayiyki7BF{5T+Z)H-+{BKE|n(2^)OFsvqqv@ARgF zH!^8nz8l&3-P?ojp1;+yvvs|)YN!aAEee~WtHah{qw9&Y=9bkAjJc%bTI#bm3os#g zSXcXizp5Q@Q`zB5cVRsmt62!4JF+zO!9%>RyY~gUwbK`)xj_$NXl^;{vLE!d znBfrVY$nFxd%Gmi3O~tpo}dn?sn#KiRtOF%Sy}ZQ>Q*873In3NqD&w(k5D@Rw^~ER zWq*l|!dJSFD1mnkbanagE|m4;(beiTOs9Lfw*On7O`%%-Gbz+}ps6~1z#^KGRD$7U z7R6CoHwjry2NR;5B(0*NPm&~8G1QJ$lIkA@82BoMVW=bRR%CCbbD6oI9xW+=VtKYe zTudcDajHYG%Tjaszy#mmr!brV??QjKI(HDa>lg&w_7Qu)N1x>;8}$~mMR&hnR$=?) zvBIQ;G*3%bv%W*Ft}{sFFrRA81}q8udQ}_6QacCf&g5(WpwxRS>tIn z-XDpj1!MgOv9F;f4`Zc04FU8(JL2I_Kpi})1!QwBk9?6Ypc=AOvSUP0)wIaQ}GLK>0fE7+DiRgi0t@AVF2h(18BIZqS znQTkfxAL-23Nrk{W29Gmj+}$`amYe7Y zzDxCt)sr~TSvnh)=&H=hp%o{TkrwZ#8C|*pm&_^p?nnu#u(6Pa7Lk!1$Z}zY0%xPy zJLdR@SI#C5(#p1(Ts};0*rwl*je>)2!$sG#%blT1kovL05+q- zrSxQggy`_WR4fV)PX(jkC-e%9bzeLI07pB&2ZXSEjp!-Us9Mff(E2fWqnv+!5X~Rx>Eq zPFACr2d@r}4uJ2=Vti&)W(nP`E2R>;M9&7U4sJI&o;y2%lA4xyzg;b0RUkqe&r-|W z)1o?u3iHhetI9!!hr&A=SU%v`B8K#XbfwP;QxpMy{t}WJ0O4^g`yfoUVS5cHBoyWBhhUGnR&Q{a3HLtp>e{hyoD#- z9vB^Gm;Dg!(=Eg>d!r)GiY(8!!M??%lbkuy2Wb@U`-adyGd$M zTmdY28|5Uu>`sP(pm1oANa@DTd|zdb`M#`V zIH|BCDt1P-#8Q1>3!8L?s~b(Kfofn@eqbMO-o89|n|<@wL^u3y+|3}v>rARQNXo-) zw3=V>sXAYsEByygg>W@r9sc?7D76)s-G^kbAGg5XxepcAyQ4XL`z@5@O0+}B{YXX8 z8R(Pn;&iVL0Dms70fii+3_VAREeQV(14txlNC#h10*ez%e9U5QP@&89xoSIwb|tk~ z`b2~-R^tKR3I$`bK@S%}!ogZ@XvHxIQgBH@f>9n3FBPXtK}eo*w|XR!G_Z-K^{GiN zs5qohOrNbz$r27>awh=Ta#^nyY*(-y{;|G*n<~1~QM5~P6<+Jl>($H!XnNxF-gBCk zkI&HIWk;ce1`gjAC`x;I=FA_mPy%Yj49{1pLr)rkOpH!sm1fmy+A{RUZJVHNUNqPM zZrGn}VC2$?T$l;zLI8~yHwZ<6R|v*qa;Q2Kj?x}73I_$ngy$K4sIjzZP=pNYzN{3C z{6NQS3J{1CZD6a5y5cdSZGok|N&7)RP?-IWX=uX$AXdiftufwi2Z51eRFzyngN(Hm zOT3NZZ5t_anv-x3Nwxrxs#kXc?7YSvWNHd`EFwPc%uSkGxGnwKXKsDNC7%AnC zRJs=J8RJmH>_80wr2ltOcNDuM%gi?xK6w;d=@{n$W*$Es^%GiBjkC%M;2?no!0Y=uSkhUDwZ zH8mVIQ&G}JKPGUwfQq}vc1*a^3pZF6ELYkpt$^2!N|~yJ^|FOI*rXCw)Ww9;Rdj7N zSwiDrmvG^fm<{ll2BE@IenhmHMX7W)DSPbCC{O&M>J#N{J1j`nBQ(4MMNW7n#y9DJ zxI4m8XgJueJgN_kHhf;8N}~m38ISmo_Z2DN@)|V8B_>k`nakP+n~*!zpj3sp;#@BT*7UAswx1h>O8@civ!00Rf*z4d^CS8{5ateU@!2*4j2o&BSaV zub4T1qv$1mehLZF?Wo~k7uSID%3oi*F;2U25b!Ps$qU2u1YM;)D`mS+eTs=Z=IE%0 z)x>TIjC=8rJX;S(mzI?<4ji9E{S)pMH#a?mRh1=nmz&3`eNTdH7oIoHE*}`b0itw|*_PFmt@770DDQ_*8Ig%JJ0<~S zxI`yDrN;MV(31>R6|nL&T#1N8ecLpBijiQ^nLySKwzo$k7rQ&HxU0B%LJ*(=vJ8vJ zhZ9B4A)HT<2w9-__tn~Du6hr0GY8%#jzs=OGR@+0yulGc&o-R{jyFEkkZDC3XF}Fg zzy_PvB+(_V)7ysG3r-*#pV^s@@s80GOnHnbrm~Cxv)xP!z_0GRghrVs+~5~*?jR|j z6H@D_B-9hzr2P^onoBNNlIDvQCQ}xRrd(_ca?M-sIr>JsZ3Q45Eif22{HLm7=UY(vTT}Z0b#ZdHsv!`fvpQ;HUYyhI= zw%4>amBOe6*3w;b z`ddWf{$e{+VG*!pHD1|44t$+hEBGhHVzL96Q#HgBow~Cg(_pFSCG6sArbmwOuKbC! zUoI*u=T*|~T@>eTV=M;a2)Xuq8Ihw4wbf3c_ag-|vf9^LR`yM4re4!nNI~$jyvagM z^ln9rZK^Wn1?G4!DWEl=!Gx7v6E;_-LKJXe4{tIpE`l++rV^vdump~(v;pV%f?)7E z^h&4!)o5zwCs1L%SV8R+-K?g#PzhQRF0kh$Juf@-+%b<;^JZm;~dtD z(}%y$j~S35RWHWPsaKEwCc=`ZCKp1ErCuvAp$UPrfZs=v@U(60N9_@aw3vHnC^$`= z3k_MD!Jvf+0@#TIS4DjZV|0?Ty5MsEb`Gtcx-=)N0$2^D`g_^5mW5G2RZ~mPQk;c1 zGqQ_*@%S&Z?Za{HwvK2iEud}>`smrWP{kun68*Gl+iDVACiQ4BWaD2I=!imW@$7N zA%TD{6y-{5Kvf~NhLqG2n#t~4=FNy7q6ou)a?|r^t%chthppp@9-@%jc>_RY)HG}*Vrc{wy`n5pQH&v*~ao5W{PK+2HLTYUn(mT zc36_q>FF43PLxYrF9H*sdxC8YPCbKCp)d#qLL zI<2OQf~VgEU6zJ&bQTwzwH$^IWWE_2fI!!fxU{v!xqCO-N^Z~bF zRUi0)Jy0WqI?G_6|4_{)f>*+gavH3t7988I>d%{S9D z)3wS&4f&}9z(mvGI`*9NR4v7uEXAO&+!oFoLD+zGclTMnbjU8pSc{SBsk>}-{XoVK z+=3}ccSW8^b=^ag764*Eoxg$ag8hroJJ5NIpn27KS+B?yysYQP`1Fr)#(QeW=*j_D zqt>ki+Xy|wa5ebIX|r&)ln7@Q#O?F=_Q6lWzdPa7$_S7tgmopAwf%&H(J@OS%%$RZ zWtuoU>FggnVAw}P&qYBXwl#|Y--Yjo)q3+4lhc2Q2J!}O?OKmEvcbcEM_1TanQM8#Rp=|)jzQmfBHzmkI& zr<7$Sx5O=?)Ddoms)4G@AUt}?RdMlDsMK-^G6^#}iCw$eE5fR4tRrytb(f{)6{TV(S zKK$R`6`%fC7FHsCo<1JYPuIVX9_@YQe}~U^cb`0c{4d$3FR=hCNHMV8-}NMaB|m$6 z**ToC&vu{wcJJ$_drzPK_Sa3&_dnPAkxTo|)8XDjtBy1eIYg^@I6r-em1>5IW_fGY z`0A@C@bB)|Pao-j@#o3ck3;_7+ueQo^}l3~z9j#DEbPr});-ayzWh-M-=pwU6>iiU)9Y}@d8UNrT%X++AlmKXhpgIsc z53rANbDmm2lU$2N zwV3G^CnITd7(3~8RKKNpG+L4YW(-M9jZbi(!c%^bb|6FX8AJmob1nFS7Nx?uXVqe0 z%uZ(=AhGZ^5}i+N#qm2C6zdIcKJ8yrPvPtdf03z2mWn^krw z%Kvwh*-6E7xW>g}i<6+VK#uh=1}hsZg$|-@(a`v(%z{P?T6Tt3-ApYaencjkrYylN zA-IR^{g66)fC^lY3kPuh2`yeQfT`vlnyFksvNKc>+Ducj!3eFl!{I}2qsc8{omy(U z*Z=PIzkB`f{^!@P{{^?>8!Le8^*_t&k7E1J-d9ie?)ASf@uRc@aGv9z*&8;8JX`bA zsUIp=xoX^)L#G|^SsNbmftn)W8E{;)8X>qkPVKRDIxZR8ze`gYaxp`u;0!BEp%!&! zl@H@pDVPYQ94;zG>tVkxAgXbNB~~^111U^}AwL(zrCF=gSrrrFoK~z>ekjX1#-dfH zGc+^>g@Pcc$%P7mf4-rJi?!Muwu!aO1=0u#U3Y1l&S5QuXP1n3h^XZahmXrT8wuq= zFB?3oJ#Eitmt1jHO6+*ZDab9P;l!Tt#Avw4q+O(fAhoVkVTa~r+=2bBT0%a`nvNK? z32;_xyV2+5t~MMXcY)4qk8TR8sw(xnc0k5Y7_qzT>exAXFQ-G>I4x(0$Vqtq=T_au zIIbCeKzXWGr?i6&pFk|l@Ulab+Oli}F4+CNBy@S_kA?ErB`3PZp5@@;b0R@X+8yna zFmugS{_>R{AKM;|k245gZa98TLx#{$&k|+H(KT-p4aceS@c2Fr;T)s00p!0@Xunqj4Yz@U2M9jw19IEw!*Ll& zZuRgDw<$FTU|@i_frG~;aHzQ3VcZIQ-bAy-&4q>_nUyO`qYNut!nqyI46DbY)cAf@ zeZrP{eJ_j8pCBT%b&c-rLdXygqkVRk3KET!ht?Xbm zqJSXrOutq2+6}f6hSzJVzl$7r3wQ{WKn8(FYvlpF<{>!XFVR{?s}rv3jz||pDnkr` z>*&EmBF{DCheM;FO(L+{8wwR&1*A(@q@R@{FquSs$^NlkH1Qo!MfNF^w7 z)RGqw%^|uY;X4PA;Ziwd*uA+(bzvfb-(LuR?Al%210C3pD1~}cp=o;q`dI~k=c?np z*DgB?c()Q)EV}6MW`jis?(Pw)45kcPMMoqhRUwHt5TwdlJ`;!<_X2$oKSq7+CrjW& z{0AW3x_h0|!JAplmYeS-7BRg;HoSU^VU<&&oT}AOvO%<7a+OsD!21!6r~61~743(9HPrkNcstmgp2KMBr^s70t|Ag? zhmcOz81&u1kFN4F-{thJ}1lEEeBQMI4zq?Lcirg@JAvq_5_DVz4uz&)v=8Ujs zkYD@>V3vSb8Z3uC_qU4`}!>=5o4D!F^T<>&S*6B6_Xt_Co*=JstE(Dgy{|F#cbPiDrXi| zFIf#>zZJ?KSXC;{+mkvKc9iwF!o_i^5y3L|?2`1?wmCl?&p!E9*I4bY>TGQ{OfS;S z6!ImwEbPO`26qzYiog|vCc$qwr}8X2Urm?Q4*2^EFv*p(kJX}{VFuJd405e;qBPmK);rC>pyGboTl^yn&uPKKBr!7w>&Pb7!; zv>tyz7$z!vj|C6eXYK^7CMPr*%nAQ6bG11uFh^3?cACqJlCM&@T62tQfC-9SyS+@7 z(v$^LB)LR{si&8>SfKIWR>3}WVY=}m&)6Hl^V@0CcrBw>1 zwMqz5oCI=bzC3&+&7&OaNK$|NnaT(O0efkH=3Q-TVK)#Lu5YT(U-d z-DLk+8v(E;1|S(ANy;nuB2LN+)guNA;t7uU0d&|JRMK4dqW?Y+{0-->f51he zt){R5&pzU`d3{Xz_0jDOXeG`7Kmnaiy4i~oO=IA!r*H%sC~F!Vn}8180t-Zl-l$Oc zL74!(`>ZTJ0!;1%?;Thef|aLc=m2uZE*-6zP0vs$MS3h!~H+jyl9oyF$KyaCh zo~SUK>>H~&-miw{&wP7Zlv8v;P%LZ3>Z=1FmV%bWY4-l*Uw*V32A*|4HdVbc&*2iA zg90gZ$3X$r-zCC<5SRtz$v7OAG{Ja4Nyek#U50BvyOxzPNjdwjbL$sw*x#2HdhaQ} z9S|en`UwBR_F!3oIsO9#f*)Hw_F@9R&1%3@_%U>Rdqz})3y>a0VZ~j3teklM>oIE1 zvuqze+lQToFYJF$UUvxgS_Q<|MjO7dg(Ab#X_qRCj$EqZ zC{cR2L7AnKlA6qO;L%*!C>6wnkqT3cskZ~~Ifmz43z^`zcsfIwRX{mbxEiL8it07? z^q!WmWEdkR4aKZ)dtBL>W6)OH`Y^Aj)0|a;1c*nT6G!Q(`2sy+$|)uj_=nY1`Lhy|}WPx`|bityI-st^zE_=Ni=fSNJ~12|mTTpF-ddK; zax&T)WLxK#a5mZBo<4cJH$Z7=KONQZCH&EsCicQ6XjPv1mY|tuzBwR?XV{Kw;c+ww ze1l$~$L-U6pg*H#WetuQO6l3|Bj4PUs5u|IxBu{=ZR&qh(+{bs|4cST#T(~8O{>wd zRG?7)Gx^BUf_-BClevC)kJ64>UG-E+rBrtg)|nvYo%%0!`-G#dHR28ZY>9&cZ$eyu zr^4{Lb18?4V7_v8ofm(r7lZ7)n!!K76cDb3qoB7NDNah0k|7d|??t^cv21%@Om`;L zsl6e{JD4vv7er`)+qZ)}#WQ3X4cK+x>XEh&S$=)r#?x{xm6tJJ28LtQ^7(olf` zD4f{{$96+fGg7goc(Eh4#EE7;Z zOXkg3vEA#>!HSvMsvi8OgBR6W>U(j_i}+aQrPu93i{q}|f+U)8f@83yZjON)puMVB zjkz|jWG!AX*Ws1G{sp59dBxrYfK}WR39G<$S!O-w*jBq3r``7^Y$U_{*$%hFlHC!1 zWl8=rn;&(s*gU2V2J2jNXDNcu+8md7FR&5OTipj>ixux=8}I7;OKj<9JPj3xn;V>l z0f+N&LncSthB^?Py#wtH*XQpJ)`lj#csuBF6SfY=__HzhnqdHKnV*NRai!ru9bBDS zZO#|4pSHQ#KkJ#8p1h_CdxyJrBVKN^ayX*3C$#y+aB*9wMRQt;h4G6!V_|6RN*0EP zuEoMQ#-E>s+r#)7Sr}Iu{&N)ztJT(CmY9XZ=kJP*Z@+VQ&Biz)7n2_<$;ZyO zbwhQ#^QMYjUdhwa{k8bojrr&2?etK7M*ik?r+=>E@o4o!uV*KxySMI&+wW#S@0#NS zukWvc;e#rbs?hSfYMXb!@V}OFpLatx&b@ohBElwBA$Id3!ltW;aCVI%!sd!1!r4_t zgxmFIhf<^|Dv>%b7vQC7C=LkyPrLnNuv*GDE#C3|-#HMc}d1q%WjhHtuP390BwwR&MP zi*j66u2v_w>}Sh`U2`i&mS>k)Q?C|)xPnnduBxwJ2g}^{psALZ*`jJb?4#EhT=XAT zQ;3WkQP$A|f`a@T&G-S~DKD3>&oIbE3H5zv;HS0&(KLf?ozS*p?3&BmYPoGu(RpTj znXi_;2e0j4|Cv1?cjx@f3O)OsU39AO(0kC7Q;3D2Z*c0RZLGd5OCC{14%*)|TQpqw z`AsA^Fe|GMsR0CX2&zL|8nxV{itR0m6SbvUM>*Z{*I7>Y)*|qLh2ENpN3|3k>xL^q z@H}BnD>xOY3aM~9zQc7DDHvtjuhsU@Jm;z%R_i>gm1q^=Z%q++ho@To1! zAU~Vjia2v#jZs;6M#wT-r^Vu=DyNg-X>|fY6pPVTpD;UIbb_!cWxh)bs7hF=cZz%& z@aZ48%@ns1LvS1Y{?!GHuPQrv7r-ToZ~v#%F}^h`|HA7a2ORwiD1v-7|3lfWtN0$# zpAeLck&)qn;I5AGCv;P%U#Wgu9n@}`*-ZrKGX|u%QwBQq!)V{$Hy%>rgyOhF!Yg#| zsZf`w2~G1gmLEc1n?r&K-lTRUTcD7hw33{Rh1^2X7lotbWu=_Z~zm9+l(f6o8Hm zz=D@9;v%sP-Tjhwu<-Ib9fhW1IJ+5fG-EC5{UNmk}&ccYkb4pjD);Sz6Bo48M zRB#+^4Ywc|wozPz>o}xp-RfC;6*N>|ZxWSa=7S8vx~F9#&uNg2R!d#>&hS~KdAOew zMEX)!M-G>XVw9(sL#XXXi)ly^u9aW+ye#Y*$14RFIS4b>mvjsT$My{`6pd5|AIgo@ zo}$y01T#uKYy`7{v^BJKjxX2M(Cn06Ot*pB^^U~^AAx!iDs>XL$xuzl6iv5Pu$vP1 z=7Mc4Z5vJ7SvPHm=L&7J?cdTXpaZ6<)jfqkt5?&iNztm+PzZ;B!KsR=TdqQ9^-xT^ zVX8;@y&}Xz%T)v5Diw^b7)`Gb4t`)J;b z^rxI9%fn$3ZI*p=DRN?9Xb=sj4h2gA_YXVAkAOuI9!Z>AO7|Dwbb_$Z(~*7K>?Rw}M;N zF=EAHQCw=Fh99)a2Wqh2i7-n^G3+xf#x@zwdhw+n{jB1PhZ-DvOuu>zge3itGf(_=pA;CI}iIP(|r7HxLl+KO>742zKQfCmlkP#p(tXvw`&xx%Kp#8c#Lx)U+w z&E-6SYG!22pd1q#qB7Z%C$$Mow-Jr%1u?Bj_@<&(LYgHS3x$!s*#{eQGocjjZCZ`G z{@!-$QNiZ6#FX3JJ65O?JDhF2!{+K8&aU2JbL9@V^`l^K)+tI?%BF9;&}b`3@nUSO zD*dggXZCgqus39#tnpg;U+><$W&@77o#gQy#8yW~8fX@nlufxnAQ-zBs{5s;Oe867 zA#`n|tb-WkvRI9ma<0h{gQSt}BWXfcbAWFGGkQ1+BqBAH&Y374LtzlDNN7m+4Z6K? z4QUhya(amw1G!aj1zKa0BWzrsgJU1Ev0zn#T9wFCCjrc)wma&n6Gnss>v3PPsDl+8 zPU~XQ22JK9Nw6Tp6lnU8o@T%%;Txv0#Co)(Q z5e1XdX(Bh{S!^|A+1sfUh%vvsoFcatO|v>L5iR!Ko3cXn-KOq6OdBWQiw4ddfj`kB?OY2&4UnizP*Q`-h1 zj)f0$1uZ!!0yHA@7|colxB>fHPdSqfQ()gxpZ4AQ$WJ7mZOePx4rHM{XDOz^5W#|l zVmoxu&B2gtZ^G!(s8og!?}NMQNE#R;l)U_Ah_DR8S7=-?3HTECfa(l=(ZMuGmXY1G znb(M2VAx>n!kPVi)rr{d5}rGz2J`D^Jf1k+Z=p<%3Bx-Mfvq)}g@hY<16=F-$!&}q zWPt5%I^~z+_l)s|YD>W!j~ANc=ap5}S96MIs7}w8>lhHfVznkA)k}omA<@a&OGW4` zdJ~x#4IB0I{N2G(_R_Ze4*JY<7lN8)5`#*RQjG0hVx_q1V`)b(Sa(2C9^A(98}p(I z5&c+CKSI#DlkZF5DLE~`wC`7p5>t) zpi4ttO7Uuk!<1ZE#b%S5y7Sy(JSQtgZbC-psdclC92-I$SdVMfEP*5xy=;0+xJ5@F zj%!qbMS@qRS-OxNJo-q(aD?c9{guJN-6mGm66s%v5o&=~;}ulB@~_!`hYSj-x-LFY z;po}v)P)K8kR@1M=eld$_89i+6nGMV)fHoz7ryude}&vMR7>DWWJ?7`D8Be2vq!n* z03Z^^H>8r-?X_~{UVx1NHcU^CuNYMu8w#rcwp$w*P1sZz+hde_#3uJbRCeT45lPSf z5*_-d(|QD9D^Bmvg92Iyl2*fD_#-%+tqG}+8 z^wPly)4c%71O`I18%54QHUq&a_+nB4!1Eg6BT+R?6EHZ%pmL~cs1_1Lr5udJbaVjd zi;c>q=OOx00#&-TMa}a zc~udNnRSgP^_UYWv^RX|ub3&?^yiLyNkgQKi!l$2axl>Mn?)iRxn9pulAnA);Rpgd z8&|g?q3#VR#>DE0ATXCHQO_kbR7X>*S4@@EVLen-P40H6MGX|83cuAX8EC5V01ik! z!e=d4DzIndWVF=NlTAZkJBB<^1zVyZy}VF7Gm$X`wIu4r#1)`x0J6jh2GO4y)X*@6 z4$DQjG94t0t%kGx!2EV+oW7|+wH4LN;JtnGf2_l4nu9b zfq-TE)laKx@xd=HEK6zk4Q|S|3;XT(!}O8_*McE+NZz7)wD6UY6MBi)UoPr!r4-^f zcVS?9%+_$mfxRLO=H~Q*P@UTse+t`EOqZ{z83b$Qzg({7Sk0Cz;^<)-SA{&hC}|sD zr8rkkr1lnpV(OJrNNT7gTdrBMq{VSy*i$09I|xXE=t3j8A1qqoz(BI6Cov^1yt2u- zEO%1sfMW=EB4%A(*40hK73-UF(tIZOoafrst zi%GgIEotP=VMQ$4=A@}O%cNtM3)7llkMu#{5mcS99&w&;{r7+G4)*@>-;W1R{_zh8 zgCSsDMANi-7s|3?N?z>#AW0+J@aMKOGpaMEBnt)YCJG-gO%T`+7$y?5u#F#XXT4Q} z@wEu6dwyQ@2TI{>yvCc}-qw^+d&CBpK+6UJs_o^1zZiHlQ$iscK*j?|>@~-l@&<=#^3({>aOH4wV$|b#w=#TfxL7X{LYxABDG8+&%c9Eu zWffm5!+9tspjVRSH$Mzaa2N#K*`}fPs*YfQXZ3jvMQiF+V|az_0%u#rmOU8&x*UVt zH#rr6Kh?otnAq>;U@#o+b&G=m*98T$i3D?N8ufy{5YI|r)sIgH6MJ&koeq8wt<%Az zPKWGvr-L{0jLHUYV00t2QqGPF?m3N4iWu2mOG+(Rlyrec%SE#qEvKdPk&jhG41!4T z?NY&bz`niy{?#k-42jhA!o;|U19eS;ufgEwzKd?O18>mN26;5q#YyK!2qs-l=Wu}w zuhT%gt*dEZyI%U2l^xp~uPzqF+(ea~;!%;$4>nh4f_VoErnKiEUZT&AT?|JaTq{BD z`U_`~ok5--RdNMi2jPddt4&lVpycqK9wQAF9^k{($NjWyUFk3isE4`QtTa5wiO;zj z6(m5CzMz7eHq=!9_zqIAdy{IsT;KLAJHu@43?79x7nd7$@n4PQW-Ax2YG3MTOPB`x zL?ND{v!|ngT9ltr6OO<(Kmwe7%t7W5j00G$x;K7^@Gg+B1)|*>pCyDN5OjvIb^rnf zvvnv=zZReys>Om0!l9O#8BC>XTzBcyWB}Dw6QaNEIk1 zv@b%MP;DH({>$;(gXb@!kA8T2cyvIG>YB4Abp$DOgF`jFc@^mO^`Cbief9OzsQ&Zb(py>q zAGp%IR=b@25lb2`%(ZJiyDO@_y_by`KgZL`KDYyBh_EuBCM~X`ydZbv1th~1po?%! zLY~i0@$t*t6_dVLRQAR+19j!~Y4)AHV4Y^~Y*VM}5D5-RW3CEkA4`qGTqCBP0$%om zCFB+CO-2+53(1J~dI5N*gY3Q40gvIr0;YK`qX)m*+wS}rpLV8tRHxypDpxbP<|hZO z4cTBJn2h$r5Yf0iD&AS)sm=na-pY>y+Yc&k0{9x?uTpkpi5}C?qED0FM<)#Z?&GYq z-MxbNE?$@Y&@}3I4caI~5nv1b3+f%_KTy`kKrgsAA%3nJm=5 znBoUA8YZ-D!O4M$TDwM*#`FrJJ2ciJo)?#noRl-fMLt;+5=wR=Z}rKrTrDZIAB^h8 zyfp?j6oP)*o(n>KSuXW9r0*va^*z_BY^PiBs|tjq@`^f*Zi}^b;PE zZB<5%kkZq-p3`2@1~hHyEeZmyHKE?tb3=c!NC5l&4{!#Q73CP8u*E)XsZb!;u$PUo z1FgpuF75Wbnpjp6(E}ZAm!Fo4VjD8IVCOC&^H2nX%fi-O^w}!eP|Y9XLs2^l4N z#4RGc2bcx4^sagPiGHDJbD+#z6E)9~(BI`iLgIx#8%690;9`5iCz_Da4re~(o1*r0 zOepcSkhN^8LzZRCE@F9;W_he%P91mhJ4!Bmbur&;l+|aQ&(9GY`Nr9<3;bn4*){LDL~khS zI@r*OIr~yX##S9>I+y6+Jb(S>=016K(PcZuHsIa)YjjwAQHgqlh7Ey{|q#lO=s|(nB#+Zf(p_nXV zFe*T4a*<-l6AiUOkq(kFF52dVV+*HDu4_?*PHuse{ZDG*cXqX@33(T5ZD4#$b06MM0bsgPtGo$>pDhI2VnwEaG{HG2Z2jv1Tf?OJe zUv^j2Wb%WR&s0L7UUE-6O>qJavFEE#)wBXJD;Wpr+u&N(pv916=Xc9uu~gF5#W=a6 zj3TQ1ok0_ak6Z!RoN8P_n(sv<>ob3546h#EY8DSLP<=kf_>$robXNkqrvRO4jg|n= zfv4qiqp9FK9rHl&LioP(a_qz_D=}(TK4yaNUh5VTF_v|59d!%Th5li+5|oRF%3jx~ zK)bXDs3?2D`NO*~)85 ziqp74qn=!AB#y;C%n$lYP6d%qlkyW;=d50h7g9F6*@GTCh%p|g_Hn_8Y&CB9S*g*%zNx1|&x(~W-$_32NQn3BrxEm2sABNhO z;}zXg?{U5!Zk~Zb~{98T};dVi}bE2 z`42{pW0Ln={UoTYMrK)(qO}!}nA8L1BI+?3I4RY20atV|h0-)1qE&QB)xT46(pgQb zo7X`}NlQP3O~hp|ip_;)@Y*k4bn4M^5Io_ZeS4V+x`6x{ngtR*C6TggG3@McH=sky| z&NCBCL^y>qcQv7T_UopMuC0ot_thJvMb*tWYqqAHU*C@T*_e1X8*N)!nwx7Hj?hd6 z24x6d(POwPixT6ScZl^4%ByGPL;HWY@4&w(X5kkeA&VwR(C5*BnnE3z+ZK_DNZxj$ zX&w8lFZ^U%10Z(P&@_&^XNWVQ-%c>H1NLB~jux&;7y|w|N&GF7H3kQC%{(>eVaOhA zh~@Z;bNf~Wk0X?5Q2TL#UD($TmyV}kssJ6Jy2Q%gaMm-Z3yw|RzK%R&8oS8`YZQPR z?6P`YZ!qQ^`~vq^g>|}Hywb0Xj6f3bY7M$MH= z{+TYzzZR0EWAOSks}J}a5pB>wa4<3Ci&B2RJo!f2m&;9S%}i6Yp3*HzKwXbM6E#pY z{X_Z(wIlkK6eRjR)R8#;{!Z1TP40Bqt)@^J$W3*p)cZHlo&xHcpAHWRjqWWr!gLmI z64uo&KNakN#8G@XvM$!G-3Hp1zMPB-uwQ)lNU!yqwGm`c#70-LxziZlWsmmJ^{~C>XL)yPuXa4oEz*P+JKS$%f z=heIB)%HDMV`g1@uvT^lkw&t?2j{5z6-1EUYKJbC8aQ#6`x0Z6Y zTTQ0s_SYQWp)lF2t2%8tJiIP*Z6Agr<4#%7ogN^?j`J!~ez>Pea!9bc z6*%ARrnq3?K_;=mSdhkb{E$OIsUiv@LEh1I({6`cwvfF78t;}BgvD*!L zqHCjqeQK7At8mVBF{BZuG=T}usU7XYLziZQu?E|ZWo#N3gj*z+VNuLJ@Y_Q` zcqLb264ighc*PgA;doZr{o)M||U4w;>bDQDA#Lh%prgxL0 zKW57>ylJc1hgp3w(_>9?Y!ObM0Pbb}YM%ro#Ee$ebkeHG%{7Ny5&#MTfd?lv7$~9! z_~rK6NHdZWO=rbo0#&~!jK_<@qM{V*BOlN0tFSjJ#1E-T2lP3qLJvT$0@Yk!78NGr z!UvSK5IBw5e6w?x0s{K#y~kgFR0OBf%yuLXSrXL#s|*Cayz>v1BTww%vJOe!A`ljxHS<79&0+R)#6u&_PjPeS{r#z0teTuHzUOc4W;Av0;`!D z0^v?m*@d91`J((-0Y+Rvq;a1EEf0;BhgR>I&&y)b!5f6)?MC6O!eM@vTAF+S-5ieGn)^Yj+XPhs+AZ zK<&V;KoHzQ(Y|u;cqpBFchzt@H!*%Or5}Ih4c%l2UF?+g070+O2=KpumhJBKe_hG* zzX<$?$4}b$4}16c4_^fT;ok%NhbLeCyQS?XkDokxvUiUH@jo5^VKRDnSN#7qVLT`B zA0k`gr$o3;+MoJ^ud} z`FUGXwK04BeD1aytqe#1KYMS!-NupS4bHz`o>T9TAG_QDSRh1j(ZVXa8zL#2{wPvS zQg-{O)kG3Vl4$`*7zv0*S)MZwF;6&8GIxz77m(EAt_AEa89+wHawFo#jl2A=%^hBu z4B$R^LH)}hc#c4_ZeC`nUt$``4kr2NdhvMbCn)E5HwvnvH07AXHJwcev(%;~bn^^i zvUyI&I)~fzP*S@~rg~lN0pHy)b07{nmsMUNymLt^C-Kj-WWrZmJC?x9_h&=5_zvl2 zu zL;@ijV~PtQ83n8_Mm>kYj8_appfsxG*%x6-=0!?eIl2}=MMlF8E@PP2B&A!n5*?vr zOon+oq@V(8+RwG8&JOlP$Fjxd5ifncnP~@!_%i*)CgCLfdk*oll^5zoFiIYJP#mRO zvT1;9qTWps)0$2QkJsYqD#{j3f}6*VoMv(1W`acuq`G^*g(X|iSu~Y@l0x|78o+Fy zuqns1zmP5Mnq-^c|~ z%m3zI@ZsAFD*qm+2@_cLr^Z^;D-rDemZW`nT3VbQ1*6#zn(Q^hVLFQEr3LrnUNVdZ z2(KL9K?5v;(pL*V1o){*4hGY|-t_|hLodKC9FF-d`j~swYk^)Oz4iNOaG!4BKmB+x zjRHx>xo|M(75P(!Mm+rYaxvW}Tz)o7`gafsi?m+9KHLvDxBbFDs{GBrP)S$@lK*(o zA6s!gZa3hGhf#Y9X?)-${&f=EaxcV-gTjX|mCYc#!tAvZM6w#$_7PBN`c^J2G&4yG{{7z}RKW$XY$ zlYP70AYA0@5iIAv=^A7IA?`aNrKmt6++76%hYT(69HG2Lp|T+}FncJV>_8wam~j?` zf@wT(oNT)^$O|H4z0uXGjAcMD1aqPXB2!zL4antK535!D29yGg2i6sIeQ?+grfkH(O7(n_=xH2Faq$S6kql3Nk@GCgr?f>9KTXmyFF}WPNiZyXVathRI*kY|wXwyK^Io>_D zF)bF54`7sVxTPS+ktK9s1sZbEqS<1!0XH8tWx(KQWLJ1HFmZN97|I_#57sURY406K z>e4}8J0XWnn?A2(s%PZ z(2Ie25q*2;y+V@hOUY=$Q!!L$EzZp2rUVK~#)z^gA|OKhtE=3D)m2Jt7W)&3yWv60 zGyJM*eWFvrE#i)&XTpeu)TXynDfuy7$}kJN$f<57C};QH#^UEJ>k&ru%5!Drl=58X zB^HIXNQsQ137r)N`zGjiWszYTpe(KE63H&WczEq68l_?J($S>e4EU^YhZ1qML7jpgB^w>C=7ubl|%@@eWOfVHXK4B#=Oj#9I0?sCWk7;kbS_Or`cd;6$A&k zjiHAbZT5r{e(SB%>^EE?=~da*8%FO4Xfk*|8;k^10+U3f>R!8o{ZB?e@%?9o?x|@q z#ob9u2+#BBH0r&JCz3-a3t;mnJ@OM_t^#K&3tyC52ZwI%#gy?Wmef~%X7IoOB!uA) zxP*}6(R;XEm>XOVZkLG0FsIe4Sp?AGd#t(G@=QT4)UxiOcIqc-0B8du%IP3Y-_flc z3XiUv*y8|ahlR6jD*i5(WYEL2Gz1<%Ia??bO+TfkG#>|?9=IKGRKqbG6vdz`{7kbxb@yShpw2e!tO z=AOs~WR#|B?#>s(=7uFJi8iXA8_ucHidN$0bDgF%jVLY4GJyFU2uz1f2f{lM6(F>y zpfgr19Kw5%CAs`eyTF9xw6M~)5;0QQi#Xr=Wz&qdZvE<5t z)D8-96buOLF2)Jmt$izU304K)I!84t%mHtM7gknQ^o%s`HL~!-hY((?;eWqkpV&;U zP%ZoqK5m8kDJO+OD&o!DD^6wptp@eGlBhYEp>+`wy#x5o`dcc_J#U84vmyI@$~3+Nn3&WwYptYv~&q%9e#&3h6QZC5m6lS9E0%4 zJlqAG<7_Vif*l<3Pso!+2#q`^7{2yaPaZwree3^(33-)uI+t+#I*r8KlNM=v$9 zl|>}gDnqH$h2yhMJ=c_Q#)4*2V#6H5UKm}&5h^?tgDFI%XF!3bRy7V2hKj)?8;0d- zJyGegr@u(zbR41RBKyvO^w6)g`0qZeJEy0eA92u3MjCMkJKmHt28BG6Z_Y#~f>Vgx+r2?e8|+Q$Q5Q{u(+Q9TXSnr_;%SXo;OHGE{ACl3 z=!Hb0LOqEjO_sO`%{Hzag%MOe&EO)I>dmWUQ4Z^>hC}SQp(^(s{D6bH+eH60X`C zjW*^f+Rg?b+g*q@UPfUHj3-IYeP8S#4ax|L@g}pt{^n9#f%7>q0(cG|ioihGLtNA5?>AtC9S>(PB1@J44w}z1`ug!sJ?Szr1 zc2#C72(1h@I3!w((p$WZ`DtIhcyURkH)8Qm#Szy1WR;A_-RHVq?JmdWWtZc+#68~h zIS%q5EVb)Xq+Yw4{q?VNe2zrfg1y>qJ$r_X2rJrcudlB+?!^tHQ{}v%tYsGAz2==M z*@dnI?((Ji*)>X5>?NF=UO$82+w>N%pQPf$)GT;J>1ktcATF|QZx@!xK}=fe zn-t?yW(Kg)Zce=Hc=JT5e-3qYhcLJuCB8oi@l|+nf#F^k7j;aduJ%-C+)W;6W5;`w zb}YO=_|CH4%L};sde^PEyg2XjU2b$ir{SoSK9}@NA{J_2WnrCmF={12;{D@SSp!v* z^}-w8c$$TtH=WMGtUiZ%B7*|V>Xa4RDv*q9!f8@OQ36Sv4mWfXuF$w50t2Csyourn zzW8qQR>cE0+aZcZS5Z&n9pJ`@YZ)y#IRg%!Eq~!L*SywhUn4$pGH}G9G6Rt8g~W+e zr&ie1C)Y%{CLoL|ZU@;g)FR%PFq1l*)N|EyGPJ76-D4y>a}5dPPU?igaI;VpBsMp7m}5cVKa5Z{0&! zi|_f$?3`YgcrWjBOy|llx=wm4;_eaHT)(*Zy4{P5@%06o&n_J{r(K$7}lprBgLFRcRe$M%-j5UzG87H>K+0fhQGZw;M`|9_>SB}vd+Lp z?nQxtm5jt-9G;*kdz+vV9STtbW4w0>$PB6hNDtVTwTxG2N6~-_jy-oO47(j37Uom# zVR)qNzlRj#7$7_|y?9oof!cWUUU9c9rD*CsvGl%AB97u^#s3N&_bbNNiI6(jFsn*x zOk9s|h%!a225458t|cSu7N-nB(gL|x#aZUs^^0#1+53Ig*kUMng5jw_bsIEg@1tZ8 z5vKc;f#kWfhCj?qiarV7%i`&UR^=oF48tFC2?MW73kJGqdp9wNeQfe^dnC@3Flo>d zI}l2RXnS|631xm#U#2lvF-+i zMTJ|KxS}e7YLJ9w?k<~UvQH&MQk0pNT4>(Fp*TyH%4|U)I`?EnnvLS=V(UtocFsBUfS?C?lR6hB)V zt@XSf)J=Kbi+VS4`9jIa3`@Enl$_a85lmuWRimmb)r8bw7a!Md!ktYrcBqHWS)yu>p6q2BPbks=4(!*bn{j<{|@g7IKxKffO`GH4(J zMR@}GS6QBU)X=wx6-SIPDl&-ZFPeHsw(5)G1|>`h_$doeW_04kJq3bd@u_A+BwQ0a zFM4ND*U2$xs=^EqXry8@09Qb$znH!3JcQ1s9DKdt({4BaQhvvI*Y8{va(N#_!^?ie zJ8j38g6gZbtvVHGG^)CrEo!-GTXb}2(@Fh-H(JLegOMCz1GD%O6C+MAm4?>J+r zaeuOKtC0a3t1*ms5aWeV6$WnXMR*;fWn|(77XaatNpBFN^Me9gUL`r+Gy(*vwd^l?a*uyeeRm71S6&{v?^ zI%kv;I#AsaWERt7Vw@)E;gk<}QX05gm49)KyGEHqJ}z}2AbJt8(Jsnz;YR9j`K-0w zXa#2}?wuOSb;xyL_4CqK#ItlZWyKGRC?zFm8q@d}nXkJ8SK?tw{z)5-^!2 ztk-tKFNrd|6f>p#B64xyuGFbxbvk_NW0V`@VgO&-ZyV;@q~R-1D%c+PU-_PFSJs5c zwh?-exF<6qatCu3;$tHE{X9dlk~f;Se|WX;hQIb&4FA^C9fLwhk3z)C_LxV9oE*g! z=uQBMy59JWWp*dokqbpVjK*WTpafOXEW-k$&01)ALlVF`POj$8%}40qIB^aoVocE4 z2J^z`>Fck!qj&tNRF>CTZ-{9E_js<5VR29jM)@Kc(G^1G$fWHi9MIC8P6q&uw9vCR z*r~TI_pQ2lvQZPs^o{iP*`xN8@K536t?kEK?I)WXo9pe3_G)RXc$J?7v9&bBuZ2NCO-J5M_Ly5u7uHCaec$<1?+kI%WZr3H3tUuXmZxrw!+S^O~hu`DRCcj0n!E;|fDmaXvhW&sKShX11#z^4H zN*W^+UDQl!c#ORXh)Kz_(RI5d9NUVm7|2RAG)8m$tLT2w?+LL2qw9Erd7GzcFC8?) z1S7HLK3F4SRpV8^i$WMWdTNMCD>Rvg^VuVvzHCe<%R0z|&L2fuq zrYMD`lVFlkJPi2(F>*ZmyNLtUF9?u9dUm`pkuk*!JCJA)93J@<1F3q0G$R~I{@^RX zg9o5NI$4sbDg}hxE2)>%7hH@joY>QHR}n zqqS)$9M!{DK8%RM{A+^&tsshU3SndzzeqV?xjI@9{OKVpV$qtQ+RUQhx(U%ZW-Eic z4{|z{oy||d4$R`jOYe>Qjyu}LDV`*ka9M@LnDyWz zg*gr=A)KKf;;*K-T8NkrqSRt?X$uBc)wJ>nH1pHx8GEWtO_RE#Nu7ZE^vZ2FaN2Fr z27ln{4DIR+9=1Ap16kPH2zcAAzpp-x@W!Uc&?~%nPOw0heFSsDh|_}9ahvk=;30QbZIC`(9y-8`T2^*vKU;8QSe{{VHXi2 z2jgSgEo*ZB`C8}IVYp%1X7F9}R>?8c*JjvPV-=ODtD1AgnH}p~O>d#0nt$pcERrN5 zSlAj(45{Gk$P5q=FCA-`72g(j>6Eyz821!$Hq+Be>5*R)^pzdTZhX5t^E^Jegso{% zr8=^47sXNUM{&dm$h!lbAWO=cL!0Fy;2aXgULZ@i0wsBU5k;+4iwW8(%|C}0NVI1Q zG*e%|C33z?j3gB}CPkhHEUH=A$sV7}KTzTVMckEbWQuK7X`ISzD|s2=EaoGhx8m4A z$td$p;Ay8sAcUTfeGEbE@umbt@5o1tDBvv&Aju>3(y(tKkUSl|jH}Qjna1o%C%~O| zFWM)QQI_;`hcS#@BaH$Mp;j<3@yi5~AdcFfMY^Q`F_hH_q0DQBgOs!I`_A6$*Docm z-vl{V_aF$K&mFU3eqVIE$RK=$T7ZV+wX7)Wvr4@S7NNgh4 zAiuzc3P2{54B_-kkfpQrw!qm{+V_KuaYqIvJ5mH33`fNC7OnxNH#osI9+yMRVFd?# zi@^cx09EKJlc@VG}`FS~AkwC?vF_`i=IKgr|& zwx6s&Uh02;7yYlfai6o&(z$4Vy1tjHQ(doB@CtOC2i-(P9hXM+$7NNmtG(rz0`eZP zTDz7smKldC>-vbAI!98Gn`e+@DLGrQ^0!GE5LI9>I94uH6N7w|M3j$D<+i~*c%N{L zfXE{pwajI+ioV$Z2Hz!n6yUvsf=5Zpwf*eJsu>aqaR8F#fMhdAQ^e&B=7io+-P=-G zX{iiIze1s?MlHR9DUW^4=3P2^PE%zr`#F`pTxTma^_QvK{Rl=2-IpXtHpuDk!wUU9 zzsD#`0?Z~7w5#0@sD-*B!Aac*sX2 zT*dlU-5&&1q3{1HX)Z4inaX>h+0=?pFsD|6!n*e>rs(y{jb?+vMfz^lYG)iQN~acD z3-Uf~V@$ytmjDm}|C0-&qr!e}Fx~7cL`}7^mGX`nl{vqY0+!%SO8NfxTrt}G>)#|Fw zavuBnu$Wz{Y65G2&OqzxLb#3Y&bj-ZShEQ77F9j82ubUH%Pj@fd9T&pB4`@d|zwAZVpwKo_6TrN3 z;g^NNRMYEMgpUFx*crD$DNPe$x47Wtu=4xYOULsIJfO%mykuxpV48M~L6&xi$CK9D z20eb1ay%{8V{8*JXrqud`hPvtR0v_6npqXR2B;qL?6#}iDunuoMK(-ERxyxhl$EP}}l1pAhB?@h)M>~>eky_X%|3A#gZ@mA=>L)EhaN{WzZr^U(S8o7H_!-OUA zE$4MLZ;3@L$rN!H#W%(~o2oa48ae0?oF+rcyE?Tx-IhUJ9wN}U36_zhzt`ymmi;gj zm?4{N+ub90F=++}7Gec>7YA`-CjobSo$^wWHoPIIlw*H}H3HGjLzJ211R|j!NF)+o zV%CRn3?>MHLuV1mu{d=Dr>hPQ>AQqs*@2N<$IOCEqS9c&;Urj%YD=-{Nv$xiTz={r zHaR_~g6;0hmSXN?wa?cvT)|2~;0cTah0=avBO>vM=9;L@af}K|hhl7dm(!RHJYkHORs$KyTThl!wGS(a0TS*19E}Z@CnJm zOLvf)O@Klqsa4}-BrQi?yGWLxgd;BME4|}hku0hou5`XI-M8_k16*TdB}WI=M4hX} z`bUn6X>L%JK{3HDJWNZH>%?$$b1<6pp6V0apU9OTB`pN&&HQ(~9Bu?nM7ez;be)Lj zR1LW%DPx7jHkzW8h`8NB$G`f8RaZaMaF|=42NOYC%;u+fnD(L%{URSOR$v5pTs!-K zF2mdc>U@$co5i1`L-IW5$cf8UAt6C%ajM|s><8+OuT1)ceQ}QsLW0j5R1xmtqC!~e zcX2%4B?pJMvDtn*{Yh^hrCM43S zd}NwKEpbvSdfT5GA(71N|6tMn5AVJIgN6G)ywCnWFI@q=?#F0=k^{8hFSE+ZYjYsB z&^<9R$ay5rG@S#eX0BIe1$3>pEvF$3ic8U?%TlkiRa`Zzu6&wOAbiunZoR`~puh*o zJ2v08j9nOl0kP+iM;YH7cQ<$|jCwD= zqsgU%pC}H^&HC(={lVSMN z7e3ywHFLV*m(O&nRUc*)r0*VC*lK+O%PB!N+gN;LdFO$!?uFgH=W%eqPPoT`=ID}2 z1J6nteiBy??kCmdxjI4}IZeXC2z*fDR52s%n|#+KEHJzc4EWtv0q3onaa&srA)v9- zDe)J(2?GVtwR+<(wyaIp!nF#aMix7|j8GEO&t_`30*$ft-rag&Y=#Br>cvLGLRB1J zR>fJ!U?=_?^me-m)QmTz9A0@1Su$U)Kpo| zFiX?0$=D_!YqQ$vEh!ww_#d>;(^r^k{I7Uzyfp!9W6r0|?4E#RQDeaM7DWI~f|*nG zK*=33I@))Qi$dK3zFsARc#Vv@Y}9C4Tx4=~VFwnJKP>MOkj+M3y+l3nbxV%&ko%c? zg^9Bxt~;ckbNH63M%+O-i4Itm(e2hy`&@&|a@_%+Yhdc3S}%J~Y5eF)UAv^s4nO3( zk>Rz$tX_npih6ibOBOF+g@$x4zFmT@6}A7Ow#oG#Zv+ftR%_~y(1ik}a0%>qiu2MW zrX~p=pa1^Q)m9Uk3j|MFSr7l~7<%LN0`Fh;>P8GtQ55&0P9S4rkpMMs!8 z;)G)EqQgKBO!uiAc<)<`Y|V=^|y=`%i;-I?kS|f&78D%^6E!| zGwODgVtg(1+LE3b`)xug8;86{^V6#-j*(3S1W|;}X}A~&<&Ov3u&kn4%`3=P3sqs0 zKrMwvI^qrzeNg#ID%z<%;m<8kP=3Yf-C;*zgS?w11Ueqex^ka}xAn~O2@0FAr4j1xg0vc5 zoSUA(yo5`g2)uIMv;=NhzT)9$gIPG>iu*P+=1FKNiTexV!Aj4?X?p)tkwHE0J{L<4 z!H_dPiH2RyysCrIE4AoE3>|gs#~gW#yWZ`x(-bTZ62zAW;orzXh{{4ilHI|bM<#Cm z-ZyaK8QpXp&57v%Iclb(HJ^VJ+D3hn1)L2x8=va{jY7`6Ib}~wS6knpzdvZQCIb-wq7rd8LneXWa=K17? zMLy|5`C7zC+zI~x5`vg!{|=6ESRxl!5vC-Z*Wt5qlu3Iy)g;heveL!qh77ALusSHd z;{p>6=IjSROWHBP7L2d%t$_kZ#9J5NvDSRgcFmkyZ0jCJNt}pzX&yI(H0lm1r?nG{ zdElfP@!D*KZiKNh+PM40kBQK14;UlDN*q^NrTGLI4*`cN6QR)80^<<4sW8OcVBG@W zC2Yu7(UE=4NqOj2NlOIP(t!(Gz$Dbk$czQ0w8Jj{$*GelU;Bl#mP9bXP$Z(g=?QAB z`g0%?15*XMbd&25`i*#8#ETz^SnoGShsvZ!Y#rqgbxsigX9o^GK%@sauw&F@o=o~c zuKqs$)Zl#Ug8}ENhQ75fqKpz~0i(87B#KS`dr%OHb*9rfHU^{R>*hfzKGZq?qK5~gy4_4s-DwWidm2s=B3T{Sx+rhU9aKHq% zjz00~$j^{Hj>#-Bp?#92N1&&Q{ehy4xdO`!Mj%<3WR>uOP{lj*8eQx7MFPiAU$hrih+<=SI z?0kvxA+SqP5fXwkA2qoE;mJDk-P! zhJA1>)D)z+Ah+PyL}&fnIMYWonzkNJAi?>mB9OrLd|m?CNXEY{DlPFpmiQk_{Ey|| z7sdZbM*aAgPlNxs3;%h2YjZn~|FQLWbBX`)d;C4n!oM>Fk)JS^yWyIEhKR9#PY*1c zt@xuHkbE?eJz0%`hdeS(d(%mbeg=}gkv!Q<2nE-n7a&Dol)F?WS0k%eWmvzS1Q*-f z?*9yIaC!bO&;RB5zdZk|&wtBXKUNI51w*alOc{kg^n0-J8Uv25!Sz<}T-)GFv2vuAI(jDvAeE(}=v~)$6adZg0P~ z#=xmDbZbOegzGfcDRnt?eF|Z5&#VHemy+g)AYW_`+$y0fP~YmR?bYgPSQlHe2AN~2 z@Qf`#910%3hmwteftkDqR~!gF;*fR9*C4fIVI4gnsWUbJvk{P)Ra!Jb@C2IDN35=N zY>A=$dcJmc_zmhd+RvUnW0$0829GAml+2nqFR+k@L+pYZey8iaJ^o&@ zFlG}Pkl{Wh1F)lYc`yp>d8vSg7B`9)jlvyla;GZ-QP*NCaC{1-e@9ONDG+*2+D*tI$2e#AJsOa{pmZJQznN=HD3xQ!9r1D*Cj6hs&u6L(2+Ek!12>uYP_ z$r!D+E&89Y3$GzPpVk z*TzlP&tqeuZp)JfSx-=Cc85LsGLVmY;!le-A-A%8aqM0WLkE9i+><=)i3}lEUVqLP z$5C=o{8WaL;=ZB3Rb#4nr4yJzCfJT5^I95J;)AYal0R)cUYPA4dq(}r53wEAFMR=_K01eftNtS<{K*Mcp>Xi=E9Uwe6-`=MrKi1 zJ8pcf_2m{%VB@L5cZ{IhtWQUd~ zy(8Eefk~rvSg@CV0#`?lCgvf&i|4cq6__SdR50;~L8@c8buaECJ^*_juHpbzZF35H z6NLy9gBIOFm&H?32an}wu!k}t7|5!3P31AFiv^NM{b1pGHPVrrlo;%6Yso+_ME$&&<2!5f#s!SxfSpEi0~?`z?sz@QBl4MO zIV2EmO-2qj(>2@?CvIdRm9I1T}Yo`h~`OK~w zM=;oIC(mynSstQW0toWYSCy;g=?}WD47)LKGa73M@rF(v%wS z;KK-BNpG~9Ae+-@^0Ja-odd?b*T**#&udnioZetycNSg6)46RHEsNJY9o%kvL3>m5_GT2Imc!cu_W;58_2s9?$u9S|GHm zY%mz$d_q%o_kjAnCr&)+L=4Iq*)lmzCHikIzHFTspc$@u|o(!ug4l>k%pyL28NNRJ*d-t=&GovTiAN&A02p!gDWEB4O%E zTO!y14@U<6h<^dm7|LdI*h9Yv-9$}$<|bUi7a4oO;ge!LvO(}ofu@n1h?upITG#sZn6pf0>Ho3x|5*BeEdM^2|A&c<_yiY_JN$ni zKiBjO^7>b%Wx8@ak+Vwk zOrYi&&XI))vBWnRPE^9S*0UM!-;~tp3NdF?Bt$h435ryY=q#sh-{8{GAIJlrdg7vN z$)0$T>geN=kSK^MZA~@g=n}Pwz$g{v28Lfx4)^J@XY5cbM%$RJC969>z|ufn1Bj%yFex^ON2{ThGpoSlNpMo)axp}MLxi^7 zkiD4@D~`XT0t=Cy;m201<-Uyw_SYc$n;JU&MhBJURK;`t;dz=4;%HQ;fMAyRZG*TZ z>P3ry2>T^t%P^|o-PhqBfW**IvapRbVZV0iw(tlt4@lZ%)bPfI*S4yP&hTSY^z2 zv=UyT_UoWD!S#-BW$+cww0W`;1Fyeb4Nw7>XB>kZ8SiV-l(iY2~i9=7|%4cY-vxO zvUn?s>AcsYR0YOE^NX@4*N>{;gyd&-C^@Z2uT0i)lbJCpv+c4#P-%k=7ujHq`O&ey zie}n%G!w^e@_x;mU!6xq%PY~uDUmZq@)kykTs$F~pRctBakq@O>Z$8tZCC7 zIKD6}23F!ynnVH52aH(>PbR7;D5*N=a*8qg-cMON z>Z*8yH=Z;^SWKfN8%eNT9FZLsF9W1@&6+0u<#rN{i_ttRNZ-T*%yDU53yZM_I9=}Y zlK4aH`9MOa7#*0}*5z;9iEdIDB;AQX>Sa{OR`3I>$=vImKnfd`lIci~oli!TDpPZ; zO>p`0?ZN1cy){fr30FL2bJttQVBV?>tBij^dvKOhYEJXJ3+G7`;z4P=!cIOwaUY0N zpTh(-p{ddIrU^@OZgPW2&9o)?R*n?o#H+Z3oZF03=Q%8=`b|26I^PUID4)ihkpy~5 z0guC^H%aZ+>0eR3`}SUqQcAVTMq!l0abYwRVmX_<{X)H=M$7wz#C-vL<~-@W%j#47 z_kpCfY>Mxut5nHqH3>eZIZMfkyac^Rs`=jU3)!C`t>(A@h`X+h|K20#ejAWE3@$vG=Tq+O7FL2 zUcWxve^7_M&49{r9Toe<2I%-eW{ZArR8_ud>DptQJ~0_@ME&QBdw7t^8C=l5kwZT_h^A z0QR(s%Fb1B;GK$BW2*V?P>3+OPK*F9GLFjLnpv>mtnV7-MeMkT71#us7cH`w*(UIF zj3{ci&Dq;xS9RACO{N00YI&w()bgrz+R=tuU79E8VYTl4MiWy=Z2XQp|0cCFP|TrR@9}g#ikbNEbL0|-qj$Dv&T2`q4?{Zh*cg*9%&HadgtD?zgPB@>gLgADkZURlaOiX!+|ePmT|MtbAEk zbor~euq)q`TYu?`3wDEHa+NQhop)ZoTKIO3D;DSY^!v`yg5Ag-3b-TP4OU(q%9xd% zna!L%mV5Erv-6YFYAUc)nR~fHs5Et2`LCo#QK0bQK{Cw)Yww(%c7D8r+e=7E&d*Hz zf9})B>A~K~>HbHxGKo>Skv%|0B-|&LWfet4h9;4;NA<=-1xQKcL(8femWz}5s1 z!u={=R<$nYg}O-(L{cDhvEFYPDTlo*$?LEnT{(?P$98vl8&hE4WENKype?(okSXvY z8f0-!R^H{MS$JQciX>rQU)oas9{>I(?7y2^Mf>l@(*FCq*ngjT_TR0?Pq$keTTiyu zw>FnM`k&nXE6%r%KF8L0@?^U*|BJ^9$o{*&jr)IlY5)D_;QveipQZoL^6zh!|404z z=wQ(QGWkE+?Tz)#LjI4fW&Gdo@+UX!Ot3b2qQk40QtN&s{xgN%5CTP}AVjz5k)Pfw zU@f}f(oMe5qOaBrEX0%K8YxLN(h7nf5VSa(4V@JC=<#D6eC5&`m4G9c;N><^tseg} z9zYWQunsPj#Q1MCow?-^P5}#M35A3sJTXsB=pHC z-f&4PX1h1_8b7Qx!#DI0L51{hrFI5`egV6)hX@={<_TP34*s;=3?FZR_c2CjAl;h0D&LVZN%UkSg)=AlwE2Ra4iOV?kkW))T}JAa)SI_H+mrV{pq&vgy}#E|`F z&g9NVsyR+Gb6Q&TR6a{bgLyMZT5$_KHgTRZXQJ$!pkHM}KlE}a95Ul*esMX!_<0sh(0f<@U|P1`ysat> z^-LoB3KV`?QaHo7G;|3mbmGn1H*Xs_GXaW_;(^4D;DXM^AifsZpruiS6z)&dn}GCO zP9yjDQWEJI<{#J3lfeM}q<(GVwWnG5_qST^eE;>?#>VF66S(v}e!9K&$MSH1DpWY>Fd9m$})1$Uvhn(nLoc1pfi!MXrRNS-B-r zx)dCa!n{LiL%hQ4m^^9u8{$p-ZTP=;s~&E=HM3#T$XFgilxF_WCTS@MPGjh9{GLE2 zC;d>j5LBz!n9#}~oyVo)kl1>W|gW$*t)iz3J7D#k&K;nPOr z@s`D7@`{#>%pG6Jeyn=%q-v~J$pj;F4b|53=v{;~@p^pn4;3<`I?2dsL^;YO)q4-;MpA_MSbo=Wxi-f^3)f%-Z$?MH<2d z`ce!nRY~u>=O?e@_{JIS1gKm1~%<={Fy8}$R8 zid*=Bv6RX(a+<2$JQf=9P5J%cGt8q+MWMJuR}xB}&t95oI*D$VZVTORpvkP9oV&O* zDKro!h_l>M_Q|Xy!GYO^5_D3UqeHHIH&~AHnGkeF*jqOpIrojG6O|R6Z1IR@p^Sa{E0b_E6bFle=J?Lcc^YWdoM5 z$p7Iiq#Tiipb%>qXF1BCvG*~<_Vy7#;wnK#VG5Zd4oA8s_(g@BBNQ*5mn4@N1l6Xw zSs?&3DlJC*H?{HXasc9xF{A1aGF7#=RwGLpG`$UR3^P$+#dHt|^|>B*o-hxxp>x717W? zO<2Ksf39H>r$9?t+ona+8isWWlgg|&0_7Vbq!A3>l>Lm{oH?INg~Yn{QaEa|aq93G zPJJc3Py3e7tsD5ukoS7ku5y*TGE?4?R7G#W0>1UQ8E&sP!}Zn%+Kk)nM;lKbwVyrP zs#Wg~x3Ll>wbUC@OB`nQ_ zcf*(aKjN@}&rIW}&pOmGaG_)h-MXD5Mqm;uTmFGZ5T2J#=>yo|I zv;;9onhC^?VyiO|&fq`IB+d>GkRZxM|As%$lHNN+D$%a%H08TV#kH?3qo+qo zt~Y)MSq$bIrKI&q1WyIy>eenXksjVzv!5m3pgJ=MHzZZK9KNjm1{MYrgj)?=@B}Uk zVF7Lx@~Xr~z*EFK?tOU|6cq#u{wh|tPO=^OyvS<(AS?I-N^Bow(N{b8c>n!VP8(lz z_JQ+_|GT~Z0gt#3xQ*7@?X?ZI;mAgE+;D)Y${SnsU;DL1LE2!g));ec0MKyC$WzLZ&h`KJC1h89LDhiv@f({h@B-{f?mjWF&b)oW~ z^ssrf5ke>ETlD_AX{qk{QRsxOxUN~bDTLSWp0@i;Rk-!^9@7(UZC6jpp`TN7qINll z#lYE}!8|GEG~x;|hJKwKTq4ZV3U3h)YczB6h?XU`#~TXnv9pZDQM+vdZJB3P&wrRv zZ`>iL%NpUu&^LEgPN%=qO3Yg{JG)^{_zFA6`+O(*8brPIg%kQey(f(+{9DRZg8BvW z1?J?Z?Dhp5s}=6g)5s15B`eA}vk|Zo=yiG?n%2;?cWBI3P8$~I^H09i_;i$l)7jr(}wSi^6O_elB z?%X>Kz@z+p7H7-dP{oxC-eJ#b>8T*x;64!5kfitw zG!u*B`>@{`YmrpT73Sb>{)445))E;N1$80NY_-f@M@bLJDH1OB53YgakRRP5HV@pD z!{@W9FXl|Fb3z<2gUuLmN-uBI*_cjv=(1JXihMzR!@D!T*)?G7c||F8SCysw?PJeT zIY@1*b(!!tci-vE_Ns}Z09j7$4#SKw^ML+U60%+xk zE1Rr_91$No#5K>5Yr-=kzy2m16@G@9@qQen@Z;9w-{e=@vYDdFHlG#Rq)9AkbE~Ay z%_qOX1iwfG_OEh-lur!jk+9Q%r(R(qsE|JsEzS&~zK-EFT#AUb!;VQ{GB4xlZ5)pR z5ly)PO)kv`fg}kfjMWVFW$q$zH=%WA|Jm(Iy|I(i72-O8k}VdN@DphWwN#N^h82Q} zBbn%0C*E0D@aEQp9h5X$#S2aKy%YGrM_xLS?*P5({!OxxQwus*(hzRNyeJF&sL#Jt zuGs}kwq(VYEm(iO!kvXRd~oGz=B|7$MHHvaOE+fj{(Ra8lKUsaTX81p40TttV6{1Y zqG+N-U|=;ODx5Hv31_O8V@aHiY|>Re-_(7{{H}Sh1#AT>n^zBv6<8x=s+di!Pa+7J z36iNzY0J0d+b9b(Fii5U!=w$75-{N6ZCGx%oL0Kj;8A8>?C6MaGqG=}8Ja8jxNG0G zrs-*@y(&$bIUA|^^MjYKPEI?gKZ;@$*9W}*kzz6O6<;hys}4*DY94U?VD;&Q64nq^ zSERiarD-<16uXMK^NapAoglzgG;j9F6iAML&UcVvt-h5IvLpoR^&VQFOHdX1qwm#EDkRE1e3Ww-#O$RV* zk5G9`V){f&n6pM>BiSq)1t@7=0sbG2l?9jI0C<}O%7I@4;4&*N8KUMs<{8x9u7j$zAnUcTP(JINB+MiNf8@H)r z(Qs{gmJwk=UgA0C9jGL#cJAWYb%!cWt;0<^c<#`=HLIhT#DAF>NrgJc7^3fa3fznT zlM%1Ez1djI`Ogw$7df4#BL5ET1h8`z2{NQ=nEEzACOW>`3Uil7gx?zw+P%tX{nX#0 zG^=w$Ru_AEFB<55zsdH#*(AH)?CI^G*RnHs+u}Lo`$FX`hPOJ8VNc}|^*`ro{}yNP z^|;RtDn(lfTyCb`T(H&8ia_dpWgrSJ;Z7&^bu!9&8QcPi7p5A~XMjCl5Gr}~^(zGX zb1f#$kwEFva7^#zw&U@9Xqa;I>Y7Whu27$|5%yy^>sj`PBjGrGA8tJ5)={578}~KN zoW>GmvZAU4RPJJ_@OgG{ZhTaB&8M|+qiG#kcFiaFy=0?PZ@y;R{8P3A8q<8OUAw2y zm=loxPHZvT^2Wv;wirKypiGFpi5LYH$rhaZpxXuFA!ae=-s!0iUNjBjU!oq`nb9id z+|Fq^(=v{Lb@d#)a$Yc2yQLSMexZsecO@;T7UjAZs5P3htN12qU7avith&Ua%|#r$ z=YBkhD|a$_o#At_lF(v_6e$3`&h}v)`8&|P+2wX4#{q|keH~BOsWr}~7G=aSg~)un z>^ql@cxt)^1IgSDnxmn7PjZ)YqLFtGR7HiekKnQrC8MTsq$sWxoIlCeDmgZDYbTVo z6I8Ap9#22-Q7XeUBCP;4C~V0k-u107haPWyRmBAFMw}t)?4O>zQV%;)SFmX$b7XI; zL)RqIYU`)6+7@=C94=-Q|1wnv>6UNGSU3-#%D8X>%lVbZtg3kwbB=Xm=^#0Ulyo|2 zw=mv8d^NQO+)D+7kpZ#jPj-EyYr-qPzg$?Tbj>5MHEu~9$*fPP*mp~~NA$UQhuKWk zyn~B4ydyYu*F&{ph+GwbS(v5gIH;Q#Q$wzYjRC! z<2pDwKB$F9o#Ss_cfL8mKCxlaPL*p}l>i5iZ1Hug#QQW%CjsX5!n{Z%yZUI971uEC zJ9IG`Ww-Vo#@`&}kcH1^`+7w3Ap%;Xi?p{C$_Qv+fy%ab? zmP{YAi>*c%UGgXjAcch_860J{%-#yi_g2p|tQ+ike3i2Am{h@exzaIQ@229$X=*K? ze8K`hc=@WR<0%i)!=fb-dS!rSSu}{)d1%Xj5M9G41=uVXh7pga@E?u$Yd>!Iu~Bf3 z&k%bQ(L0A0{qu1%tWDE-9=3C(wg*gpg4q`dQ7hcsfP&dg8W&4;M*TUITWeE6EC)Nk zUs9#OlxC0DvO(a|odD9xT)Yiij`7 z=n&tQ6%?T+0HZ)$zo?)_OW1gz_5!0$Bf9}^e6uzrzo71X_DD61#b`dr)r@?}TA`m+ ze6^p>pq>j}7psA=Aug=;>U%9k!&tl;>+tUV8B0r+=W0m)`SR`Fj3x(=Ske)wv=7^H zShQ8)7+FUOpIWr$cVz(^;}ll=!M2OWkVLWEcK`PI2`5tTg4_n0J;sor(JX7zrs zIL5+t0U$R5j<$?4FQyQ>0K>f3bb`c!fKko?j-;ZA%h`H}^fmNotL^L{>%meq6$Kn! z+|hQ1i_bT<>4dm0c~u*5_z_Jj%$QfUY}FX8GbslN7L3x}YSP8o)DJtM9Z5UEb%YL9 z%;b$y0Uji-F`lG9iKuH*M^act7lhbJ{VGixUCl3=z*>MEi)!a?7oM~(G1q3p;5fo$ zce{r6WGj>Lm4Co&Z z+pi>9gav5lUBT)|%K5;}e*k9j!7u^O`theCpC$_{gIBj7e*iA;%;blVB$E#ynS4Mo zf*#Sh;U$tqpv1-pk{isdQ-xbp;pSue8m|L<^pqa0JFgYctt)p5`gx2lNXqliQdp-& z{^(kr{8LRf%3s3uKNnsL%?%9JesVp6wQ+%_h>zM&ro(m3tH{47Bw;zWrhjqz8(ah* zJJDMfDU-}UxvhAMOiUFfiG-C4XjAYp+h2V4)Yx=W(jsr|ibgfwfE`ni*ttj`vNGi` z8C(NYapjtYP+H8g-bJO%LAIz+@mjm6G~Mn?3fOzqUgvDDvwyJicZp=VwEryaKTG@1 z(*Co^{*#RQ@h@Kt{}G;T7VJM;?I%n7&+qY9CLMHKe6&{+;0}{ghZfRXD0HNe5a7x^ zo?7%KSW~2UVqXxFDag+Y)kvej_^LTAg2*t72I89RqDm6Zh*QvDNZt!IlIx>LHN*fU zcOmq+olesJtfvlMw)!Taj8V!CxCjZ_QS6$_oKy@_JK^crbWb>>SO@9wIygdJx=l}BjU!MPq&VS}cA1?sh<^Qq%B%l9t<8gaydH(+o z`G1gIV4h9mA)J=eXpmmt?FDj&FUWbZN~KPc z^0d30Q@*ktd?*;7E>v%zs66N{Z%hGFVb%&mFOR3_68Agjo#&mi0~uAu-qnGzD6WpL zFVq=lRl5@YfB(<_%jnR(>5M||nPyo5eY&4y?^j_u_BR-BMIUsSS zN1*f|BbbIqCvJf9KWf(4;3&xu&l%0ac`pVD(C3#1RF2jGJMhRWdGK59TDi6Kve$x@ zOnOvAW<#Q0ShJnUc;=O&TjPZ!qH9IdsY&l-EUK`g7{BPU*R)>}{zC7E34Jyxs=~reis4VS#3Nd}ylFZXfSmdGRv$I*cg2k%c(#iKyQn?iC4DIlpW&=%RIH5N9rI6(zr$$v-LN)c z7&p_QYz!OyfA4mVj_RG$)6S1?yk6C?5#}JZCVrWwQHH4RHRoKo;IpUpc4r3;D^uy4 zw~fMTFw5ubaJ~GYE~ophrsDFkl)h`dSYN)6T`wh7EnWzd)+CkgO$RO7e1#S>K8Xi#SlS1L*G)$;FI`RL+*%2_ z&3Je;9=THrq)jJ9xQJ4cPLk`J>Dr7!lgz7&37WRj@kIG4y?;UP`@3skh)qUmtQu39 zO4yY1h%N9m1BGeP9))Ss%+g?LKXYxlnWFyT=G(=shvcVUC^T#r`&CAKD#F!4A?c-C z&`@87qC_vHDz^0rM8((3Xgc{)G@U$vrh}S8Fr0m)*JmbbhYkS5O&!G!SvALP^3jy# zSAhnL2+M04-fHGnG0hA9?!Ww5$$$UljlAUYfs^5Ff`xPBF%@fuB_FT>NbIxdI=+L4 zf0Mk&uxoTL(r7&MYLn+za~WITU^z%8*RI2MK;+;UXIKXn-O+WR-;qGs&x6{6#W8L{ z=eSAvI6=X^`k+9_n{Z51WSSY+8Ou)=Rf+|X=!WL>D~ya@!6T(?z6LFLPtYd**e-4v z={Ss~8P*M18+OtRG?L?C|G)!RHe5+f2HKB@El~d$2tGF;f#dNYvA$k+PCzx$ZTnF( zHwmRw2YKcC`f9`n_P9V@LJz}sVX{epU_rZrHQD|xIBmnLXqXI=O0hagp9C3WPJ=;0SxRLeUNH*`NgscamHZ#4_)VpSt?Ke0sfZu zpQZh0Y5!T;e@g5>(-|C0Ni_JB(BFI5e>OI@w{rV`qrKT)#{d2<=zTgd@Rw!o8?Od2 z>Y;i!sX!@B>a(YX( z_}Sh##tt_PQfY>&yR8^sDif!g>nKMVDlgEaMYmvBl1>iM#K%Mwl+uK>n-Sjm*<|PC zgrxX8#WQtN&1hCsS<^r|vCLs-1BsyGtfqQv%Vj{tpBLn7rBxeHepX742sA~?;3yCY zT2~N82-&0^eC5H^qncQPfdvNwQe?Ijr5s(mBjso?9?UYfwndH`>yo_VzC`M|UCHM2I$t;;>^#pCM#EBdn@1~cFvf+k! zaWEX-3BB}LSsCn;O$1rduj)*Z+&jz*3A63((h2yrqoQ zGPBYIcVXzlVA{!?W#X`~ck=4TKtb93%;ZkKRpA(@5yFG#GMZvHRm^D$q##y5>)ixb zQ8p#;Rq{OL#EX>H4=wS)MQ6aTBm!LhH{A7$JorKgup8ETKzHD6bC~cMu)0wgUtiPH z@G7|uK|~$L^tIN?#)D+)I1x~ncZuoM;}Og%uDH5WeUqU=b~hW1;_e|rI&+A%HB1~4 za(F@ec8@&Vk`eEXOqaa+|9VijL6HG20N$wim~_hUxYr3GVH@RU5qC9gf1o|iUp7AQ zI^=Jg9}Im375@X1nZIp+P-^q{#~*;`{PD>LOM4FKdSY^}+3hBx8;vKQ(p(Zc85zxI z5em@C*)LRq+|-ncl9L90%%&bNub-}|GEZRzNo`>_uaXhd-XK(m^3f*#)P!-vPtH2T z97zrZiV393M&PG6^1JP2Bhq9<%&eUgjyv_6bV>?5aSAwH#4JBQ=92qhEWQC61v!|cQH7f&iutX8a(pr1@)g5wp3c3?Ji zX7Zt)#Djk3jYR1#0;;%=VN-#McP@g7)|Y9vAgaVoDAe?bgBUtl4`VGum8?(bu+Yls z9^oZH0w&tUlPLcqSJM?h8y|uc&3gEKYBJ1U;ZRwaV)Rby(kDV!VAB}WIINh5#+IG# zAO;y&?JjWOy*5&ZoD(^5EW1E5bnSe>1vT++W_*w_M!R5o7qY;@X)qpZOOE790)w8f zt4QP3GQp2~;jm^V+b&92ybw4wu7GZ)Ro2yR#cH_)f9Ycg4L>XKwHwIJwrlJ#O@j$$ewg(rvmBKXnu z{?cjPL>j?`XwnRlE9atP4){FuzvQT*97i3(r#*lfX3F_lVF>@0wQITH8tBIQ1%5)lqKKu*!6hW}2HtZMpRaXZ z9fljN^^ehIS7@>Omy}Sjpf)#Z`KBX)v3e4ZNzP6}Dr?xFM!Ox9YqvvJxoxsYDRz*^ zX4sdOywnZUw;sC6kAR_3uYH|%sV2KbeciuQnN8j>1>igS>+-L4?R}*-dk2-ZwLA6L z>BQA!cgzV`Lf*Nn=JwUv=m8W&6WJ=P%~rrc0=|T+qE%oRBZ4tSIO!ghOige4>}?EI zMurkMX_q-@7wrc|(E%KIhAweZ+5Jp6z_=X12Y|yor<_!qqwDh)|9;n&7KTT|l{&J<|z-v}D zo7_q-9nUXt|8<>3^7Aa|y~BGawHgc%>JMGDW{AbB*)h!Oal)0*;jOHJX{z@ixBC8U zI1bAzFBLsiH|r=-QNOBMPQkIeQ5-`>FU+i&i4+rr!iRZ`(^25som6>3N6=jI>JX1K z5Pf&Ec}=ztmC0+;Jb8&Gx_=BCWug~;isByu{*j1r5@QQUxu!(&h+ zS`+M82dq!ZK* z0atN$Ip6NmiI-|Ae|-;lli^S#gB83WU}hE&&$Vylp;a?J2CrgN+56d&?9$Z}Au1*# zCP{}*tWn@{C^A4_amXhyeXifA)5_C@la3*zfL? ziYi*3KGCN+RXNfgw(NK&v@gphZ&M+ebgwjOy8hxTu)(2lPTOe~x|>7z)5c7P-NqfG zmIoVoyWiU{bu%-P$)dX%48vT`LYJq0#tU2jQm<@F|KFwm@6!Kw`SNG|3Lb0 z;M>y4b>n{ZLY2>;-i>wjfi%W^5GjWsqP>FaT|yxI;&M zF2m6!iebInvJh{9Bnwbwfimlj@o;t0(cThR3qQ|L^&dwQQY0bjcREf8eC81Gz7uo= z=)tvKL_Q!^xYBuj{_V->*$N9&B<90t@osf{!}<{P@@9JVX6;y~BN|5I;l7y%V@n{>N+h0iK5YotK?&4$i35(d+%g<8Q*Fle6>i)#=HL!}GId z&^bLk!(UHcpNA(es5`IE4*28YS$KBx;{1os=>bLN!3*L3$=>Ui*cyTlH)$y0;fp|r z@NMV&0~iPV*xCR7@a$k;D}8lxc6Rvu@aPZ*1V5d<-uqTMhxa0f2sEx2hkHPrA7R*M zdq3%fs`7{owqhNi80}e06jP9k8!q!!Hj`_r8U% z9q9{>3n+1XaCSz7?hw%r_g)`$PJ>skPodujuqLoVLkl3@_dxRf5W^Z@A7d~gkm>}+ zd<<*k48E*{&pT&_&`+!$-u3ANOW@@B(cw2l!!w+0sWE)nIXpf;IPM(p9W;SPuU?&C z!YtM$z+@d9e~XWh{%17VFHiP~R#Z{zA5kp&n~?uEw~F%r#!~+OUF83#p8UV{_$dg2 zTTiyuw>FozfPYH)zn|WY25HoP^jY`+lPBAi_|G0Mp#A^&@%H2YE8Jen|4aSPlK(ID zKg+-W3I4AizHt2aI*1$V`S|aRjb;4z@1y?_M?#~$cn=rvg#boQ@-ST?_HARdSzQ$m zpjT1v9YQx9q9tT?HH@Y~xEkI}r{iqr(WCKvoS@R>ktD`@q%}SIm#btDXF;&KdX$W2 zzl5i+Uc%dBuFWL)y-H^z0tuQ}Luay~ZOwd; zcd|#&@E#E6Phc9dDMHK-Nryx_(-olQoCISv%F>q z41G9`r}yjv5OC5f>w}Va(rab0-;%;P(s0vpJUV-Qc2M2e^k#y-YtrK7EE$mN)_YQV z`E#Jkxfa%%&9azRF4t?8(7*94T%bzJrTpv5*=Rbe?g(w2qX=Uj$5CPa2l@cDtdC|? z*P}mW>1@)AA33f3kc|3h?IrlVB+j6{dPGhE@gQsDn#`}UyEdb(p1c-dRwmTI!G9i* zHt^-yp)~O&He_%zKxdkJb1Em$J5Aq_?ldj0;Q@re+|21@{tqJ|E#?2E{J)g{m-2s! z{7*dpa~Of|lKu~}-=t-FMCdqgjbxt=ljMi3AWvrYTiq`K{2!l2mmPx2VuJ z6fbi&zDY*EwDPZa&{G=o+0zyx85s7$X?%7r$q)VvH2?PerI9(q^eSIRFVa0$^WXtcXA#DmAU-{41Z@Qbd5tna2(%e&2W!HzepAMVurC2;XYzb zrektHyk8vpnZ#3Y5Jju?C>o7Yko4m&$uSCiFoG6a9Hn7{WXR1>I-w!eQeMTb5Axwd zz*zw??A1JlF>tgWYYfFB()7e2BXb*r^tvn9o0`oI;%-KFTn*~FJP zTe(>_DuCSY-tcbH;pfp4EdQ4B-%|ct%74qh|4I1|^$V@bX!?2g|APF_kJ}sh_@BpH zkK0T6@Avro_k+D}Pr{QIFa8kxAvisF8SV-Ctx@2z#>f6KP|9t-X z@M!<5m2h`ATv-Y0e+d2;;JJdc{5)Gx{FZ^D__0pygE27bT-%Qeh89Q z{L95S8po51Ect7^D=&s$c}2gH_j9c;tiUh(712ZJ+17qtryv2|#Dj7E5&p*A-r>jp zEAHK-Es+5+!o5ox!vFru6xHC<|NgowkO20VQ1bnySNeKL8bwt^3S0%FW(=?-sV+$x zv~Tp2iN2(7*kTf}&UZ*EmRR*`;#R{*2UNtQtycI0*5sR7?Mq{XB#FJ=%1^mY{*-|f z><{a^vyD^mSw0p9N}(U9khlfd*MFYM%L`tYGKF_R{@0f)-`$rog_q;;>@qhz z1WbWnZ5djKewm}_JpNB^!7Ac$8PgKojkXYofjV%T3qkoy^0=MP$Cg{^9eUHvP@hyFDZjAj$ zQNIuW_7Sm)G3SzLJap>&#cU8$-+qd4B!g^i1Z)v5j{jNQCF3lf^;3G+tW^DJ&6Foj z+fTCbATrT?P9=k6^saXk_uhq!5s06#>u3%lTNoDLN(eD=0{1d!g#p_{R1xkt+FJ<1 zoPW*2cz7B2`!-{_Z-W5d6OYhasP9k~X@^8N6`EhTZvwlqpeEvP@u*+I{CdF3M$F=H zK#$-E_$tB9)$LL6U#ktoGMfy6rG$@u4j*M$2;S(&1O4t4E;cBK9rYF(ch4sR-mpGW zcos&2e?!rRWP4J50)lytfY#ng7`DGYeti^f;J-Ascrr;RoOk2d`ua2G?%d`Do4)=K zxWA?Eu!lRj5`50N$Eujk)`s$8>*4}Uj29RA4sCoLj%I_>zSMPI^}ndlsJR5GDP&W4 z8!;vlxhS^6mvl;?5(9Y%sZLm0(5lo;tSZ@=bPTbv2(B7tZCXhT))cdcjXm+`M(UX0XAk%=QJeo6+1$t!N%Rn(E|u?Zqsnh zHuC~|xS)mWo8BEfoNpjiJY4Q4i+DH}`2>EqxPy4-spuVDk`{DLu1lZ9hp7!-2U%_@ z;G;V_Pgk^x-t+ZsLHDV^r>uWmO3sb2)<;_d72D11xq)*~+6m zRvVMt#d81*<~>GYREM*yM5zgHnL@Xj!V{<@Vjwap&KB9{&I1dhS5Z6GLW2WNNz79q ztw@Fy9mU67sJB>&6-2gGN3DoFtchCTBDY#PD33v~FebJUt;rPGPQ0}HwCmZIz?>x_ zaLAH!GwV;=Na5R?O7@FmNU0qyxYu8Gas{nYmKSDuI0#IH?!ie-<=0{Qrs%0 zdA*wVHqzia_S*`On>cV&=w0W+4LxX@lI<%pv2FVLUakJ#{^z~@&wKly_kaI}_CJ_| zAfHRN1h{yAZu=jK02A7OfAZ*k{NG>XZ!j*F!+tr#bR*dpI}dw*>OFjaD&F7!@9+Qj z_y7C9|Bd%Qo`=QVT>NX^|DSyJr_lcQPoKSy|Mtt^|DKB#z&V;woNdF%FN#6Z9#K{% zNk&Wr17#=6I+!1JJSZkvqQbCm)H#nW*m`$+n;hS_FZ1Crn@Z{)8*iR|8JDjO_Tbn4 zh*H`*Gr32ew^iV;l%5yMyWP|8@BjDr|NHy@{ojAy{SRpRjxpuR`~TC5|Ia6Xde8s= z+V_9;@~2#)cXj_y($~Xmwz%9*9x)9-m-Np<4ZJ_*@9+Qj_y7C*|NUR{{ZAp~exCDR zd;fp(@X;SX3-kYc_VD3*{{I*G`{4H2RFQ(PZkJk`Tf(4*NK|Nv<#R!6m$kbhz~}IlM@oU1rmZBm*P2 zz)5m6p5m}DCDK?hC#YbvAy3jNP-+B{aWiCkw%O4%r=35?@-Y!9RXj?!^Olk>aGG7i_%NuY-AMr4jSY&S-tTi{oqiudSj-nN zS7@Sd#@kJX`BlzAG#B$5CP%p@08Faf-^gAMfILkO==VMv)Nn~DP?Y*tdBZ&tXe!stK#r1xiXi~e9hF+;hn5wzMvc%xxZYr1IBxy-e>MH^mVnKGNHnyzDf*UMgG zlp<5K_s=4qw((mxX^r#q*{j}gJZ^P@`uIn?1FFFW=|h>mb*Zy$rRODnQgg8u;>!@0 zIG<|NvYN4 zhldK=e9OoNOP#<94pIP{DfiXQB1`ejw-_uw!*Bmx7E}Cul0$px*p#Gwh0niF=TkV0 z=J{hd<@ViUIr8#=OB@(KUt8?J925TuoX?=*6`a`Nb27ZMMW4ct9PkZ4F1;FuMNk;v zaLi$Kv!Pe=XqIstR@-ONdNwcM=A2AmcK$dH|K5MTzx$X53g5qfesHpHUOqc|^5o#~ zoBq+?s0sP?_3puw{m1$VHUOXc5w=5*xTWL${lE41UOdMl^nL&EvHgC$e`3m=Jl{P$ z?(goM9Q=Ks7L|S6CTTDZ}ZM{&dQ^>6HF-N`E?~nvPd~26x=`P!%zAEUR-YgE{gOiZtCv2Pwcv zrl?>iEThm?>uh7g+&US$cbQ+;j6zEL8xZ9@8_BJR@IXe-U{?IyP4G$AzT@A+Y`jR} z>yLQZNM#0=sr#6J^1BILJNzOqrzza8aJf!L{MNakm8K986pJMwn{IM6A7=Ax_!x*J zE?>;V9nQ44$R^}EFz5GliNpHa)+kDz8Oz*G52**F$5JHVF0$ABo*Y4?1WJ)geD78R zAhDdx?89tIDTb-$a+wcJ%@;2Y9xKw}1E4~I#GOeDz-Kovra<@=W1tzIV;*B@MlN{H zj&w6as>^^9X5LMnz@^(wUQ9W~O@gtf`%-QvIhilB7&U@D3vK?_&=@u}%CP{w8)hp>i~Q2<@?NpH)Rg#p0Py0h+=)0~!L%@Ig( z7zCipI~xRL86xz%?l@cx7)l$ybrZx{WhW#)D?58UU-k!>MrV!1f7H;YOgW=1=Z@};E=qgFBqtSpPV-~hs{{fwblpb*^deF9P+ps9X086NrPk}Srkz51qj`yCs z+(~|V<2?qv2@mOI559Zv#;_*vlGY|@ZC(^u@ARzlv`_Ij;1&MpGJ2_&I^8~VW%%Di z0094cwh?k30%2r%wzeyA`3XR>b=v^K8omKeG4yG`M+Ixj0cSYH;(kxrSd9djSRCp* z4hA5OWx96t;v<57v3$;fRZQ7adA_N$*GdVDzu zc52H3?5L;!j~6Xz_>-+|_wwo1S!4Ox{HmKwU&9XW(^4{YvCmc2P9Gv*p=x76cn?E> zf>5Ke;25J6^T1b)8H;l7QhJ>cV*x1&)mIm_?Kgw_ZuaULJBHDWpeMV$O&bS#LtzP> zgXT>`S3})PLLAsva~s8YsP^7EMNc0gh+&j#75=2@7&q*Gyiufyhi9vLLXgR>dbF}I zFRmFJ(HgJPqG8{USDX^ zAqn0L9@vO9;ghg!`Rv*{9oK=>ur$@i#>NN9?(#LzwCVhYNm7ZcXcI^Q6`C%@({Y&1 zGWci80p(Hd?J`nr--?fLB)Jr|!s7g5nxcey4Z{AD+E(Cpgr&wuj&5bi&qYauq`H3v zD6R?@=;5yob(^oz21c=O+ZjkZz=Q)E1oV29tqJ80`29ybzw0nH8;*-G_1Y|#h!EqM zE#p)t9M!%;ahouC!X^}>QJKNfL&?MrB9{vNJs$PA5Ml`W5|XhG)ub4< zAIOs~G~B7L2^AjDmyPw2UtO1tJ+i7JX}vhvyZ6!7C&TS~TaSjVJ6r^dDf?JK+;3pofcj*%#kDrLtR8_FF3ZkbgYYO+MvT{#4V-i#^o} zz{CCce&4;ZPz~*>1N!LhgKlLW0^m0 z0ba?c`0DiG_9tf@7^?jIWc#zTj)Me|4Ldk}H%Zry!4`V_kzFdKcFb8t$+4YGkq`SX zvzs=>HH;1;HY?Vm5!IN0CX!zJFKW{<8EK49ai9Y4bcIdXZ=^pVv!Lsev!RyxBlhE#q#X*$(a88!@o|G?#>ry=1~6^wGNl(WihmOFt^eki~$Fh{?06&cp|bdTZb>6 zJZWtN_Y%tEF(e#pN@&nYB*SZtg{5tUZ>51U-r44+>xwG7y}yZj{~!O@Y5L@YaXA4(6{wJ1;J?GNZ{|QR3S1FjCnNq z)-^D^8C5x-4K7o%eK4Q6>+tgm5neivEh^n%U8Aym1t4h#>k%cmP2s2_^9ENImBj|^*t~N)1#e9iIKyl3H^Kb{48yPzLQO>s@0ZR)QGbec2MY5r^_}Lq$!PY*i zqVhY*DU>_|atMEV?+NE;n0J`oRe2oj=oDU|zylhIv1JNxLcuOxr8OdOYOK}gyGI&@ z+vxO+2%JdkBxO{pT|{WX#ZFz4R=ufH+A!E-rAsD8O5~UaAvMyU@QT8^L0x~@UQ8K> z8dOU{6u@*dxC-DY+5ut|N4<*XBBlf53m#}CiRY+pkZ*wdP7|OnD3gf2EQ(Q5Ovh|6 z%K5h=eNmGFqnlaBtT+7%@A*14O$^|y&}Fa_fzaoBhJmr;-*+AJ)=d+Os2V*V29}H_ zLZ+XO`pfC7Wy)&DHVIu=XyI)3d{=!l2VFqvSf^NeRPl-QiGEyR=XP_wOGOR#4k-7%Y3Lrqu|Ss9P8=2eOSaHMfM{k`<7mCrM?V z3w9o=HK2@=K53Z_heA~n;Yk}jBr2hTF#DAo7Xt&63fz4_VhuJOOawkp9!0l<+qo>Y; zf=9x~jc^4quU03LNcI}*B;zY+Ba}3Vu37G)RRY|26sqI682aW6j> z9#rS*oseh`<{rJO+`U(g_=YDATyeW*$|5>gF>4-o^81}on->FsKQI{r@LPBq_y-A8 z+)t8JxSuejjmq{V8M+XSH5-`Z=J9!Gk>BvVryUXyq+xF;e`)TFjI@8wof4Z_ut zs74LAm`Apa1qBH}dBzb)u$ZbD7NThQEkT22YHPuxQddcQBQ-?{bJgk8-`3v-07>qZ zB*?m+8}Stq%U5e)ZInLnjnas>C}{!nLRfZP9IjY8^GDsHnGT|*a12rX%1`&oH#i-u zvJgguAdE8VCUH=>rMA2RCVGSZTfIHm9 zx43@R#6(wS*j2hJB7V5_ofK5O)up6Xletl|k}NBXE+-dMWDH4QS;mgUhPSk+qmbE? zapqz{LbW!w-eYvy?o_OoP|X2o1iyzzR7k;y~vD&h+dQ&P(qex-cx<=hfCF^ae z`Icn2({?K@2YKG=+``^6LXySKfflXQ9fals;R#r3PlR1~E6lD6vWdJr{Y@|!xLSs67}`2LYjxHfPvoWz@uXQ0-rOx2*u7E$ z8{mPX0i13>cy!ijoS9Nat+TCGjllKY*|=4go<6HVPNsLS(p4K#`aDCyU}|=QuYOdw zVoamtADzeNC$8El6JyUn%_vBO-kN}x<<&c2L2M;dXF+C*f}!eb9M(d{&r z{+wje;cT_B0U5)rn!87AL?<3B3{M`zFBByp(K`Txnv@w$IIW-FG_Z?RB+C3^pio1t z`1}TSHB>Ty57x814GezXQg{5Vy>y!zh@*qL){+3wByf5 z)2!T&A>}$@xn5t-hY6B?1)oPR=9Ng@t^8V;9kIB>>2zNSje*2i#o&~M9N1=s8(1lE zaX@O?uIsZ0(LEM6P{*c(fVDhVKc9~CY38$DQ@9|q;SO2dG_hagJBxuUmtoIARr(tmCZ^xU@>tZx1d8>-+;g2kfOwRe z3&>qR<|?Yafb5hEZ`gTDGNA@GTs8(AS&B`-->prQC9PhQ2KoXO2`#sKL}!3I^(`m{ zDL86}c%w4*2M1HkmbwS#FoUERT9dKlDQe+xT;$`LkieI6pH z?3E|(6O>VP+&aBip3%}U{*blVeg1s+2YMA%{%WZZ?#)+-P6Yv>nO>(8VB)v9&{vPY zR!}8Fy6q?;G+6VwamTX$@N91*{kG;2iqdg+F$SgqtD~4*^wHwHP6UPTA~GnE)k=Yw ztlE!lT2=bA9<$RDiUE^L_z$iemVD41&teWm8+JA#0xs;ly<$z<61b2KNE2Yai*=>w z1g~N%eeZLOg^B~jbFP+#2GAV**IFCa$wNzJw2cmPRF|B9rerp*ik00R=~B8;E`M-y>+7pFP(H!hD?8VfM= zq5za~X;fthB8E9nIliNe5{L#Gy$kIwQ0l7Oj@T|-3@7~^TQx?+zGp^h*Q})Y?BZib zM#Yug&gS6$;cvu3z~Ye0h;=-w(la#tdSP($J;+Df+7zE^@h{(iOtYK)bGDWkdWcBY zoZn$gvL1nSt*kI>a%2zqCSo`F{E6vuT_5d08zde1&~A==H8Bt@+L^V21y>%cG4y7lpqX~b>9ZjkUv5qMlX!R}dRI@)T>iY@Cv0blmiya{6Ipdbbc$U8TMG$2iheb}t z&y9c#^yK98stO{Z@HgnvvmRQKonBJP0fSH9yd5rz4(rZ_p^#VQ=+tDZr~!MG>{Gl4 zUNpF*tqNCRDH=lqlM68=8X!j%ErdV?Y+7ntR~ADl4_RDqlS80g4F~7gKmEW27DD%K z*F76-MZ5p+>frduIzXFeIFWBM=wiwdZ7d}+wf^;Df|k7SqM0 zrGg4(->(bP1Ie;4i|Y)>YuoH@Skee4hY7J32~^CGP(pz}5?TN>Oc~=17aq^%nBZYd zMy#a`pta%Y0w^L`ZbYe-jgBzyP4a2A(yBV?>&OPz9D!-=^ua^MUtjI5=-+G0M0*tr zOd)r_NFHuA4`?(Y!*aXLdgR~0d#CLk7bEWP0o#Ly22QR$S#+pc+dDI^NM-AiXQ#h) zc^s{K-)`S~x_$4scW>0H%;nD_&^3ix>kp3}P>hUuro$9Uq_lSLey4r<(StMiY*l8l z__1LgiywoTaI`$tO^-+xO~X+DyZ|?Lx#Hr--o?CF&Wu&9e{E9{3EKCLV1rU#%*GH^ zf7BfE&vgC~_Wollw#S-R1AyAuxOEMCCn%6$NYk^}J?c-46!SLl(oaRg1| zE${@_yE|Orjbn|Yj`74N3uTG;;NA}{_HOmI)T5e<{q*7XXJ?@`IKRPIkY6O9Mg?J& zsk`Bxw(bEvd)_ibQ}Hw54UA3p_IYw|SPgAee=trTokh zz(==fSP$dFI%_^Et;92Hh91lVJU#KFV6fVHhoOSz-XDjxj>CV>X$WsBuDA^_?>g|u z&rM~hKRgHxoEvXVJQWoylOJmg#!qoT(YthokxO{D#*3~8g5L&j*sz6JFuG! zn3*pd2AF&aeAbE*$dY~e^GyQt2c8#Y7EI>9k}rSZ`M44k<9$Up`E&(PLJ%Zhmf4{E z62G+5iy{J%ye#^E{^Qoe020r_-hZea*VEcJkM*0A@a?y^Xt92V$7Y>9(Fo10K`=t^ z-&s^~APteYqMMwf$={+?+AyFC;Qt3%S*C1m>4X5R`n6I3V*c|*FG&uddNP7>qTr#R zSbx&m;4&M$M1@TPd$`QcIk`5BvFsW_$XwjHL^J_349Ou_o-mQitg`S?UT~r!pd-p3 zlJ)Rbi)1XM)|uFg>`a9X8kBw5W>8~-5xv@;@h8@+GYl0427X>jWq=!S( zRk;)}{5N#bMTN%z5z)l=cIDo~C|gwW0e*)1Cw{ZEul%dE0RrpehC#X$VaufXDWepnFL9azpS&W(miPJl^3lm=u zvnX^-(&l z*NQc*CwVJttI4DK^}XF1zvVjHb@A4Et9Gq#yEksLKkj0W2+-`5>eZoC1ecM%)E2{$ z(0(au_RH#Bx#rGXYj>`-Ls#t5W;JTn@@X%fl2VGVblJq)VsWW9E~y+o+DSh7<7dfz zf$vAjCzz|mLQf?b;oKrvX-6&ej-MB3hn9V#4i1<_X@~d3Bp=KR^N1$xqC1*cxN9UN z@a-unuA>R0Ym-$Fo$*AL&>6Bul#~X?4ys_JuF==>WdIc=ANs^`&Eshj}BZrKiJjhGCjV7=mjN zP7rA^3bQ;E5FBDWN3ui|kDGj;qJ&G+u2~M$yoc5~*%Wh~_Y5F!IKsD?@Ofq{5e-N= zzA1nOS}0PC6!Jfv0#M5!x5EbvPKm|pFOU>K6KJ(+6w&-*T41zWBzP~=E0|1{k z|3#%G6R_z3iQkT~I>j!6{1FuWe>BqPxWeYhl(lB!4$SrK9r;# z)&;@Qabn@Zei(u-I4xKZV%)cL5#>9@K{SZ0f`o$n;H3`xH0--IZR5LYemzcM``jjBg%3We}zwL==v#*olUWUXV{sCw9$H#I3b;^Pj<8Rdo=533Y* zYhG4+CCUM5SnB?&H@l!DEY8TpRJDu&z1P$77rkO7H*ja!2$_%P8o-O%m z>a7tZ0L3FrG8u$NmGBW?PY+>uIqz$YPBBimaR|1FN5e=5ZF{o1ivEl{xcQOdBUX3f z=;cP*qLqTqNnNDFdU=OMJV#Q`IgUJHhw+J<(BD;Pk%yef%3@Jnc{8{c(J9+Jt}azD zq;T1*-Z7YJhiYln<4(|N$4k!Q@Oszaok(mZ6BeX8V@lp*U1RFwf~d%Pyq}RP6q_g) zRmLArbxDpXTTJ~Z2kNv+!fyJ&M*l>mFk9h_+_WPBBkDkW(G+KX7s zCa;9aB~&R{-TT&bay-UNim{y&yUkdZ>>SUGajI!&vvbRtoi5JSzml3KYc~b*QEFR6 zcIWe~4EARk*%7i4%JM9zfx_~LE? zWHKI>!R8V{2b}=zObY8QKD!Rzkb-{b{3X5qt&eXplCWDf3{VhaYxV5ye38=@Tb^2H zW|AUt?h&@8<_fo-o9gSfGec9Ddy@zEhAJ0bl_lZz!n0b%4~DZf5qcel@Yary0zUUJ zg5%Z=!{m7RGe5mJdotA1c_z}a8fQHhpr)yr4W1__L*pH2IF2|ok0pnCTSg`>I~i3K z)Kqo;Qr`eTgcfIN^zxp%W3NCx#?Bgms_fidA=00O8BPUO5;yX`8X>}#p-}_b4V}r* zaBohgY_7bEadDoG-~K9*KCS4wr*B)n^)}26r$^%5ZuVw-+tGw#UPr@~EXfH3ti9xf zq_^b~rM9Nq!DTwV5Z9G5ndO6*8ATd6zrjGs%jpy))~@L;rzRYp_lD{FStVqd4&@5{!SpCI+u?NlK#zpX|2@xmQ zMiO3I7tUg&iHjguXN9o7T?kSg6Te>#Ul$y-P~Wyk7y}^?+k{T9mK)?UNoS=!5Ijel zDV)0yJy>Znlfud{o>6B{ES+Fn#UM`?p+F$a4UP#BOiTflstx_^IQ0?~5br*e+T%Z; zCZt1Y@-S_2ILBgD{|Y~ik_Ooj9)WMaFwu~8`?Rc;xYMa^5?Bj zx3)t1!DLm3jXo(p0Wu98aOG*p&ifdg)}`BItyrs#6^C`W@v0| zu;+!T7L7_g+PA<#Cp{3XLk)$I%~5-W!`;C_$Ag3ifwS=)kAQ-NdC_0-of*K6SrYFp zuLy^qfiK}ZsVU#Qw`S=`P{Cil_q3oGEd)P<5sh;;tRDw+?5~YOW1&K;D&9&mcrE;= zt%6tN#J6CH>3bX1LpE?Djyh0(UZj=|{qyaKmBBJ)Gb?9y`jYtT}QNrd#0@=#)7GFY4u#vOdemHvEp@ zU*l`6qVRHH6W~|jwSSGC%C=TTT3l1&i#?O@xT4Nf^ zp&Ud0QV92W)YOsh@{6N zmi;j^S9b*Pw2C4{Iv6F=l8QMo6JEK^dqcYk zn`&cJNuyet+sFu%UupOj!_&ycDM(=1cKieC4|LT?p=NvTk8PU0UW8-AXVe)nI+c;? z!G+43ropwPFFSy8kd9#iZVw%9~hITTAiTChRyC zFvG;W$99~RK^=(Ji3U|Ukp2|CvK9=p`9(wfp_pJr7h!Qm>sokE9x;<*xE#Z^SgK%o zCdC6iQ~?s*SANAZlS{fO%C@}%x(eTR6@Ke#RO5&~pi$BApEV}zd^0yl;!wT&mS45` z+Hv67)zZbmIM1ew2W37)wad+Pa5*og#j=d{(uhTd=UtLBELbUgo(^7e?DndzC53gv z$(uOu`6PoYU4Fs2n)Run2y+%JM|6-*Y5PO5WFw^+DUO{w)Y8dXm2F5Bk}){(APt3- z3a%?ulTWiTStTNV%9u4I|4%!6OA7=eLQ)3UcyWLj-AI^rac?uQNxZP}HtwjC))0|3 zy#S&rG;ppAperL2K!@2Xrp7@pX{W68Lh7I6R!*0b^9+qHVg9HSou@+H6eCls)AQoX z6GxPuQ?PYpClw(#9^26J>^4Gy?_fkds;bi&n4#wAPe!t;ZhUSQMC|S+LUJYD4nQOs zl5kku>kTZ4<@lvn0OXI^yy$w+mi@&Y&I+7_+7m#zy3;ehQK=Xr%Wqa*Z#n$Vd(B&U zA|qiuWqvVLiOKYU@GTq~*@XaRlEZ9Vz2K?Za>^5GD{5yjF3K!IcpL`{jOJTdR3e;5^~gpK zGdzzd^i=1Scf<1@k0bid-1;7cmQACBPUj0XY9l`5^|ldIacaC%>wGV46Wh_jvhtuM znAl63P3?AWTg&arNL9THk-v9#Yq5K93d@gc@%wX`t?Q zmSJN^>>IdhhEdhUl=2)R%cd}_!lOr$tYv)DCH##zRql9c)`?DPng}pIfqpbjfe=jj zhj-ySPfWqjwjFviNSAUHYjJYmN4YH*UX+BPTThJb&=+bd!GJH(OPglw;>0NOW|)si zRFP9c8uN5=~oE&Txo;Xp@|~v{w}sV~e+s-HPq- z;=q3Cu#jT8W`kq!ZQc#l?q6a2gH4Pi$2st%U{sT3wUeIB4_+}<#7;EoRq=8y`t(F? z7?P}xi(w$<BrPn>T{4hQ+kCNDP83wGnCzPu1x$Brf_Sr7zfY15H|?Z3sv^0lBu5Y*q5!LAgM0 zODP`2sTl9eQ9cH4Nc#?7U&5nCL>N(UkN}&UQvM#=*xJkiFlJ07mW?rh2!FKaoB-+c zjQ`U!>YQ$!RZ-pQ(OHcGoY8?!M|hDfus7$hf-j?Q z<>1Xw@y*$RcBF^8F$nWgkhf9WT?gF?4YS=4tEZkQuG)+^*->MzlGYQC;=}8V4kUiz zkbR66Gjfoj+pe*_dyTUb`AetM45yu)u;RNx#p98B%Nd2fht=ER6(mWH86Pg^4*lEE zmO=4tujOdWt?F^D-(O_em`D;Tife?ThmG4#*&m|#qLDmub|Hu5K6Dc9rVT0LR;&vO69PDM zGZv!hvDAm+-*YcWs>Afgux{g>M_zc^n21qN*vct61x9E<9-{l)WE0)C7U^GEn0-$= zwz-5FF-%i`rhQPHmBWUmD@_2ET*7{gtkejaAXtxYd{35Iv1WBGD_&RGb)_LK>>=u0 zrQ=jXS4j#CsKA@=C<2;Y{dHS52ml{vc2sZl}$s= zH{5$06>iJ~umD1n@&Y3mXnCS9i1`U4%g_L2qxi?aYB~;grGypXaxbqVg-GB;jyfV$ zS!Iy!S`8Md+FnFf7!_I$&&2@8U-`9MD3mF0C_n7aD7|6q#XP?P;_McV%ZVgn1?arIM8|XrawX=Kp7_Ff3 z`r(10cS$Q$b!Uxx=Y3HFOWZ*C%fl4v2)-*9MOl^q; zn!XgN360T+n<~|(HzvOu+;n1+D-qWdxD!x<8w?`A`t&x`!}QUo1UG^uUh$}?i~ECQ z7ZBpo*uw#(h{|0S_m;w*0Pvy&^7cx#lJEyI2D1%h5G(U;Dr1q>o?;J5lQldawmkXk zFpn6{e30w`42wwuZ&iG+>0rDZ8jo@1;%i9b$SkoGd#JD-P_N&o!_)8g`oxc-;h$I7 zu)b2du?!5)0H_+hKvJ4g1smrCV1l<`GD)ZD1qNRcDqle)n?{X^fOOxVE`<4*qmXYx zQ^w|mksxUxMG{0Sfq6PD(}-Itj`uu+L)-4eted={yjCn!Mv@6Yvw>smJ``Fts7%DZ zb%R2whSlg2Cy`xwKNsgsv7Cy@#LGcmbAinZVfQ;LHMZkX^1W1$O=r`v7O4cLk_T481P-~xpHVQcNlRT!6)QOiAQw~bN8 z5eSjd*jQAqQfIrN#df()4l4nLKD82p*?K6Fxt*+eu-^Mr6c*eTW{I2=@orZGcwoBJR^P+5rK5L1?rrpLQjagNE%0pkIDOL8)&n$;(2wP z$jlQ(k!ts0>;XH-6-h?fXC;^yd2tT$n&JGlV!_VFTeb3_RsOKWe0fmrG0$jL3<|M;A>ETZj!3m9C66T7S4V+_^UwCyzw3C*wDSdq#08NcK+s zcaw)5OFcYWo{uqvg~oaxB(fxiTE)v#1t@1>ByMG?rg9BmQ=~v3B7>mjY-lerzu^0I zCZ=XVv7JPNvF*QYgf!dJa{lrF#*gWh$zU$Cf-9cbh0ymo2I_X0;GB+-Gvc+FBtEok z>V`H939!h}46?w3nG?2%4GNp%mZ8zrhGKixDl8&x58}z7c)d)@%M=aS$NBjjZ$?Ws z^D-kV2E^CkB{L%`CQpp6`L`xf)-!v1OGd^YTPqqVHRgz_v;~B~O@Kb9I#Bl!vUk9{ zp#cYZBIM#pJqF^!1>i9yLD3JwE zsRpd1Q?p6d$|X<-H3zr1vF@h#h4`LW{dDUL1^WK8NZQfpQtRbjb<9^8o!(ZwR4d`H zVeK3mGt+cCikV%e4JUwrBesfPVUY%=`4uKG!4$mv-y9saygY5tU=Umb%VGj?_}@qL zKI%jy#%LHCkB7>P`wkCR-4M*&My?2Y;f4FG8-BIl*51+6rw1qI;30p$BVDPZSSSrX zOMqgY_GsTiYT0#$Vj%ha=*g3>cK80~0h46HHNZSMB6tQN_Zr}to)-j9GYb{p0FEj7 zMa1Q6M1v4j#9Con++6W*3G(CJzwbXgIygMB6Y)aYJ6k*;UR~VMYRI zN4RPT&-b6~?;h{R27pA9y^UlT_IErK1rzBM%VWNrJ|N+bt>PQ$vTdOul5;0r?Mk>r z=VZ@!7P;0CJH+Lb%LKcA=tVGzFhvkp9gMLpOcx>VXVm+cNvcF|mUOK3`B0%igInOA zkWL{2J7Lo;yw*_!j^;9c40FFEj>-*09LwXA#`!8sUd{YeTarmz>rmG#jclZBID^i4 zTazz@3;)ZZ1-dpd7n_*cx`DsCjpMFH@pUe?+&P;RT6^XJu^+Z6C&5Q+QAv%ZljIl& zsE|goo%yiQ#+BG2s%g~r?W=C;4tOdm=(7>N;Jj9125hY zF!OBR=+SdEWR(&IsUB-(L2mXt$*KKuR?XgBR!Q61-rBr{$yYbbZfF}jJzJ}(5(UFH zZewk0N-y5fnu=dpX`#9o>xfPl?7Tvxv`#!sWaK3d9aRo@t5dNqHPu(7D>^JxPtF|J zM4eF$Gp|oj3bu#|;X;6s+^cR~koSB^aWU%#MUT;ZC%eH+5YqPK=GZRrwXVj zG?m(ykytAsP*z8uw>g~bcv}&3e;V@+AJ3T8KfF5r_UQX$_sNs0sioa8zH7{@cr>!= zMm4GJw-b|#o>LD=20r&>oAD{F&^ShQ;P;*HF;p`({*z7Q*W`( zD&x~vd+7((s->|cYLxg`jnSlB0)Tapzr8ZoRHZC z7Z_R@6#ENP3~uA`Y*KJ~&bZTha?NIV;rI-4wVQ+?+-t-m_m)(gM^X7C4nU)TZG35n zN9%nedVZWdrBZj@l$RpJSISm`RAJkQ6LqpD1IKdD>d#xlk^xEy1)0{OY@QPEJQ%7Y zL@a?8INJ#&2m=gAMeK&CDe-{GOC6jm*i6}T4;JPRbpNu zuJ44DBY~CEm1q(U$x0H9Rd-@p$yj6-E9!$trxvTA?PJ$%apbJ&+>vETHX5O^34(*x zO>2^3d}WgClFZKNxf6#g@6huGKsrWa|BjULNOZ_vVh0d`E$ z{n55WqAfV#(uR#fnZ3>i%LNRBWI+GY<%-`5Y9h2>WJ6x z&AU>`k$b1PLO3KFw<){;I-PZ|ebrJAj|?8wYIAo$#IKwz5zGw@_{74ZA^kd9kn`J! z33=EQ<2TGJ6bt#;_JSnhp{Y(n?Vj4yNh&vYbTqA9|7tKig(LLi)i{M}C>6;T0YQAn zOC6y;bv#K#<8g9qZD1%Ui00v~AmN-qTb=)CjxXfqx{lRw1YN$!CS|+xpU>Q_w;9*p zkkw7O)}Ca0+UmZfQEzr?_%K{go)?XK9Ud`c`+P=%?`D*LKRMdleL}_z{EQ76S{oJ4 zF5Et4eD5>|k+p2#^Zn!flY6D%1gURfTGqLzn3a?kP=+6Ar-HqdcZjj(des#4LVNV{ z6Ui#eR9DmrY@g{CKm!y%OXxE`3^l3JD2)9L29KbmyjYI|>V4m~In7pSWSJjQoFJS1F$=>t6}`SgZ!4M972 z3t_khlOL{>_>;yK!E`GoHDPG0a(ND%+Jg8D!$kU=bajl-+p`L1FN~;VvCmD6VBSVd z#W7btXUf(Eo2b#}H(TF~w39?H8WpKxfPV`^dOt2!x!r_9EjFy0sA^52#i}*scRtl2G^DH+vI#q8 z_AoIFR<7h@FOk*+MwZq36tGwaqsKWYbTi~YNdk{RP{qmB=4$qo;`*IJIwiH zsqNm)MK-b7zn#h{nay!H_K>g>T_a6nYS4`BB^1&%*TwuLM#7OWM?6}S>$Pi4_Y8ev zHmykDJjtX7SgZT>LUFn=x$&3<_reX413iVc6>mWdK|kfF&yH#`%Vp$GjXv&oiD!)s zca>%quj5whR%p4k|3CYCFHZJbW?|Pu&u&x1YBl%KjI8~Z)n=6E-YztVJ#Hnv-Ztcv zxn*>V1j$VdzBciwY(p;6Kh+qgNLTRQur`-=kGmO~%^uJ|Y|hX07jH$tFaw*CxUw4q zTYp9FBN3K8u#)ELK1M{iTojl&aX{p!NyPlQ!>|@n32iI!nJERvrJ~K9e*s%p>IA-I zCzMyRLo-qr;c+kdKBE-9lL^XX)A4nBQ}U(f=|-$osuAy+X&GZx5*DL|1=D;YRW!;- ztPV@36bMY-Mkmjl2U$FE_IbuO+Wj2p~w&z*w zN{E=|J(l8YA4Q)%3E2|q-KbxLapJTUrM5VtySjRoBY8P`=E^UOEhA0cYpEXj8*mJb z8jR2AkQmK#%wAp}@bEUv8mv-v6#`7jO!L}{L>zYA5(O(X%rIQcz#&Xy3mC5*z}!2= zT|Q;1Jyd5_maR0v9Tt4HOuTEav7WM)jheQAHt2k`gG%)WY^n{9{nq!Y* zrp?FuyH8L`cCw#fgf4Wi5&x+c+KF^)ug6y_xEC#7!XO|f@e~R$x-N~G35hxyFU!jq z7xE2@m`$)!V9zJWETRDqQApIF$Al0+s>)UK0EzD2IHhS~%Jk#%tYKtSAi7+7=1S9y z^A$K|s5hN1xHHKJqAlY|szI0)_oK-rrwT{0u8oJYj zicx`MG)QPWANT#bUFZ9_#5d{|<7sbovtkNkO)?weL zv_|#W0bN6wvl6!bWhN%y6}HQq$aW+ehzUIbBvUV+4x#629E*6g4k(?yPV#8+NT`m+ z;2s>XV|Ba@8e>gJ5ec_pCREqN?%@w@Gu2LQE7fQn(V`qD#Et6h;)F<_)J$HQGZcvq zf;hBNyD38`?V&J7sO+);r*@MzBhXI0U7pcCK?8NlCzbY-aLm1uPQbC+HN^scVT-`e3Q8Gn;G; zMZP%Bb&M7KAqUog8v95ohig>a-h8BPGRjQvXC~x{vhBroYy)zM%3Y67eK!ajF)QMA zgLk+w+j5b$WJSxH66l?n6UJ$2U{{*N&h9LDgKY`UgvN<{iC{w0Z_7J5XZ|DrKQN zg;X(Yqfr$QJq2JyHniY8oN$H~o^hE_tfW~WCLNpdJ4gD~U;=XCR#cdYEl)rr8p=?_ zrpAR|M9qnPr{hGzHAzA}JNsOq=I>uBXe?GY=a^2GW&n3y`(D`rQnxJ-TxhEWXKb~2sl zb^5P=h1d2b1xlzXTh|LM8}(9YEpo&;RO-A^G(zZ*USWn|K+8&T^ipq%N@fQ|4cv<~ zV2A<>q^_$(1Omamg6`(_s;Hv7S50V(?g4|d>hY8$2Q#ROYsK-@I~`?dxbYlop3%p= zt$E8#qSKs0n^{SlAevPk^^7FRPkiyZG%?IC63TsanTa2mi8kbK>KcQ=4$T0}6Kha~&RU6)3gF+woOpRMFU-z}T(9$0dQ;mAB}(W93YITkZEB zZM#iUI|^LD!2#0YuzjDNJ=_K+g`?$=@K#Vne2f^B?J?R|N6G|y05cO%tr**(@+&J( z9`B@>{Hqtv7{SNaFUrc%v)Ik*Rq04GG3^S3QSxl~;;7`>mtHdX>@b^bXkAcbik@VC zSGaLo@b^14z0`(~2+DDO^y)UKhGLE)i%P?>LIMukk6k^$BTQ(x(9QluY#;Bm*chzU za2xLtW&k>fql<{p8g>Yq06QLurJ%O$x4o}|X5R9`QuRq3yM|Cxhq(?TU#}8x+JfuL zI9+!uvA->g0t5?RF@>(&5o!67n+$i0t}Vzx?S=L43hbcyrl@ixu|0VY+WNyI!s~Y+ zhkMn4x!o)~od{H3RXsXw0umL_jYx)?b+3YxP{5)I>B5IcHv5NkUR;x4t46Q(4f*cd zMB+MJ4~P7nCs%oPU84dO6Iv)w0oU+gD5bGgM=2eQcT`VQHyd`tn6Yup{=%(6DmN(Ec?3jK!xm9wkEz!NefWfWcQ3_1MN^ zlr1nHEq3f|=#Af@u}${rYRNw@u`>*lG`GoJ#d^Ub`mO1QiF1Ll!pUBzzIUu^GB8F# zD{ivsK$AVpr8_m|Zf+2snho(JiTTb|UYvaDEcGbih>8bEL9>hbOXk2PaL99FE{ON- zvek)7RfsnPj(HP^PDUSqp_bMwQxeALgt(&EtkJ~tTU731|LxZOR);X^WiIwVsBeeY z#Gx}kE>gh!Vv63uKA|buBIxsU`@zGr-ducRYWWwBBM%e>uTXrllOU1aN8K;Krf8W+ zbdxQ+X|C!+g91I-g($LC;%a%^;J|1q0!?fRd!jlTSUJl8;)}Q(U2v? zCn^GbTwh$DQVBxM@B^!#h0;M8OEo+orRo_4$j3uEuv6VWQAaZ7og`DI^_f|~ca!QJ z6T6N5)8K1^B2jVukulJSFps$>tpRttH7YQUEG`x9-X;ivSTfD#7sit5_R25GqZNWG zT>+_qN9>X)A63z!*&<3Zz|e6g(g0v=w6!oBz0(6aYI%-NpkSviFVFhR7B1cD1zK~F znindfr)b$6efi}0^dR&q;;#d_!UPJ@w@cwwXHEWMF7?} z1r{)|he#HoD35V%P-LaTNU?g0QlQ*#**(a5iuxg zgC>3L%d@T%cDyvwla~sZ-Y%*?6*BJV*5GSGt_;3E{Me7#IQB|h1BnlUd6E(YK8>m; zd2;ad;3RoiohHIm@{H8P0XO0+)(+L0eTfmi5_3dZq_EJO2!~g_sP~neuz4s6`5-|y zNtSsqrcBehG31pX^gz;};?jndt}5W5Usl8kso8GDw+BX>-U-h~kn$3pl_>xzTKvw5 zOt@G6W6J%|H>3t*`^=JA0%5Zlk?7g#h3D;tt#E)_9Vcd`}`)E zFNv=Ln*ZX0{C|KI{S9$Pxn=Vs5@xz&Rm=jEVMsO{oi?!XGVw12oQ#+ji@UHs(7zn3 z_6t)65@bq6TkM9B{ib@vRYI z5s;!}PonUZMy>|e!$lUj^Shg0Zm*t`43dlzMXcy`G028w2!~--I2Ih7iLwY{CzBJ| ztN=!nVoDTd8Wls=1?|L@7p1-0NCY~f*a_(Q#>ynTj)(#|_XC|tr$f$}=k7we9Q|l( zx4$CSz4gd$H{-wonYlv!DC57Vv~c~Kmts8K=8|P&k^u?JaF`_WN4kjJt0)aGi5k*T zwzyg2hPPPYuEmUTF-=tBv$3YU#)-Su5<*7Po&2&=$-5Bpy{){?x>2q#kqgc7eMwf} ztRqX>`W59e|J%eZv9R8HL%WrJ3mQ~t0Xgwe4MCOWL~!pI$TFF#fmtC$E0icV7d3&= zTD=HW`A#(Ci)WA7$1pkGKk-CX?@m3M>rUh=#{4!87pv{lMKQ?-&R5^i!v=Urlfn#@ zrX1x%IlD|42al@)$yY^vJ~44hL`q=7ltiRq#(F~u)i!)u&;-E_MN_7Gqtdr=OazIj zh`3rfRI>q0uErXNp`myo5>Ej+1tQLSSx=R+ES2AuSet7(W3neOE6ceLEn~mA_FVmqnejg$PN6pg~q;z!+`m5~uJ;;v4*y)BmtOGE2 zU7Zi95~)p+I1KcT6Wr^tZpTJ`7#7pk!j5A|dDSt^(uLWZUQju;M`=aJ8IrJ`r47*| zCG)x66~jQh?+4W-bzwCm74e9ZVve|GnmqtiOrD(>BX14_XE9<`AMl1&=xk$;N5XCy zw|#+P_4G4~U)tdO6(i53>|YG`kiAAX{gUvfvA&W86$D@+xMw;#ma65Vq>os9?KYJ} zy4P2R7I-_J=A431jPlopxl+byyi+$hg*%}2O-3<`!fQu$xZ*rlI@9F8-zhe{374gG z+$7Ghk_@DIQG!7?y_0IFiy(l2r3;)lh`au9F6g?7aX$2ohEWu@X&6Evkgfyks=#oY zyk|F)QI-NtlL<~%7Fo>KU!^&vUY3wNs)fJwKKpmoF5Hag-a9({`pLoG2^W5R zRFQLZ?m|t*TfYlHy0y@wa+ueWg2+J*x$5m`W?Z;VfG+OCe-wx6ugPDwKHJ*bUM;eX z8@auh@%>~81Y;_@oXsd`2U0ic0+)WH_B?Q1&9evmy_n}0nBs@6ir!J+L-ZQogt+@Q zf3u>VnvB4Rdlb9TC>dgxq^MvhOv_Fz9je?sUuGl{=}J7UjhJ-q4LP+3g3^9t&q=*G6k1hXa$AV>Dn**J~Q zhcVnCfuCYnF(@RE#ZZgFJWkTZfEYCkh#*U7O15qp#e$;^<;KtB9%myIh%~yLeUR+J z(I`-s#YuQYOvO39+5U&UaztlX8i$|2QfVE^6T4&ZaqLzLEs8_L5PK_XP)^K3U#_*b zZ%s!8InI0S z$u%Mb*%qon7rleZffd&m;hNZrw=xCLB3tgzod$1bk?)o%K^6ca>C}FSZ*2jf!w0;J z1wf#{k0pw5w$?nGA*V-ZlZ0iAiWud-H<#<^}J~ z3w|DNj>r2?_D}XJt{iWt3ct1U#ylRIq*{zFz#L<8p-{*Y7mGPiqE$=7j4ahnaNj`+ zgC5#gzlijr2}g*AOxIi_zT(dhVB?F>}e~aYryL&HQ zJavq;M7$tLeo3waqvaT9H%9S775E1uv%HFf;@Ddzs9>2C*TT!WK<7Mb*)BsLZ0)kc zn!O;fJ#|CTh@n^6MU`Ijg|90zeehloIE#MdiqKvLWXA(Ud6p(3W)#`9ARs$m!)}j+ zd7OJiy$9bby&CzR^zlrR#~&{>m-Z>As~{d+&2Au6D9X5v8Be*j@HjF zi(RcwFDv7-E|AgZ7TUAv9Nos01LG!+mI;zY$G9OY8934LSL5QzK6-!xN+rl>=JZ+ske{qOO6k1w? z#&tSpf!rAPcOZPX8kFbz$0xg}czC>jcye&^gMR>IPu5l5+dbafeZ1fD2iG#gd37hb z9Ej5{nfCYNaKgPJG9{uy`FnIjkiValr7(^1y%>!E`CyQ|AD>lR>OKXU1kmVwCz9sxdK_|}Dn;aQGgv7(;@LmpFB4Y*pNJ9mC$8*x7GV%}-h_fY!&PxV4)#lP()?kh5$Q%*Z#YDhmOJNQv!WB^izO znwOcwYe_a^u{Hy2c%9xfrX-7yQw=n&iJ&xLF_(XLB35bQ7C1o0DsI7qCb4(?B%QV4 zH1PG;sn8h`dbuuJIKSSZ$_;e9=`}D@IF(2st*(UkXrU0vL^3?{XAh^VdHUo#v3mXy z8J&UwN}qxNioNXh0?Cup7Kyf6QtZrIod!5X#l8k`>kEC`Mhx1m=rtnqjCQI!w)9U- z^$-b5^)`brN~{W?8o6F9um;;J^N8$ZdR4!QCc1q~O8N^)xUr5v<>)l`hDcshL4OYr zDy^$~^!3-|IYgDY=)2Il5qp=aw+~^(8tV^2(Tr+CE2dK7J_VUy;Kf-rSZ7%wtw|K& zk=8n1=dVg=*Th@&B7m08DO~dk9Ttt6EQ!@zKGcDviKYz7>Z-CYcvqXOp`2?}r|2VN zb4T;{l9Rwco9`Z?DMmrm%9x?JiP3LLYu^zV#W+($u5DTc=V#)kntEMKH<`AuiP$LQ zu)2xk8R0nM+#r^ZP8uX?!8C|8T>PGw^mj3$!CI0lp{Bd3zc(i0Rk}WDnNVw%aj>}$ zk)EW$%!~Xg^D^$)psb~kv#a6ng1~x7@3Vz?Rn-ysnrtGgao$+QOij$mP%z&OeKjmZ z-F`b_vK3>dYo>>gs}s*!lX^pmR;hCp{?%i&cH()MdNikj} zL!*<&CUOqrI?aA5@~tt5=ACGTZ+ADpt0vgLv~LsF^i;kElJdat*S6S12voAcsW8a( z0%B_FJ#qaXL0lUc$*RAnG=C*ZGnN5lFvfTKhOui&W=e>hSB6j&IuqJzd(I4Hwy2F@ zkZ0o|4-1!;f3{=T7^*uH6fU;{!x#$`8}B%@Ie{1XbVvq@n5`}9RFiiT^3cqtXcUab z2hqOU+!iHQ5OWWlHNlRX@0c~uy#a98^c@qX6$@fwNm~RKi<2XwMC5|PPqyz%K@Y}I z1ot|ZC#wh#ic#*t%$vWQZa+K=-<#q2cYZ|s=ZZ>z*~(1pAQEO%sJ!0_?o2Xs)0369 znmhOAv30f)Sj3E^={nmbYsq@bO~5`tb1j+?5mYEj!a;4+&H6+K?IN1kt_OLshU;OM zz7`m&P?YGv9!TXh#57y&{!@~sQ$F}Mr}{Fdt(qk!+M#zIPe-)x?Wtj5W>!G;Kzb5G@a$$+47;CbEr~)e5~DOY4qkQ}13jZTByq>WxGwTZ24t;aV;9A&Pwmy@wa~*zWEd<0ozQc6= zPsZo{{v^$({k|BWQ?+*M+08e;lT7lF`P$LtTKZQXZnr_d-`N0MK%>9--OupX`?&Y< ze?3cIe+vwMHviqv^0&o*b)Q>XkN)Vs9Z~U3Ew{b&pZ#&`cgfZ-dH%1`i+MU-)RtTI{@?Wce|&!4B5@ zQZBa<8oU}~CgtSm($yx^zzGRjDVZ&qc%1(eO?V%$m}``Cf~HwY0jflzxR(&WNy5KL zF@&4ZP{jW{!v|RKri{hoUQ7M2#+5po;4l$fQafwct1CH`T4j^cedzBBDY~i~g;Sb7c zC4cQGyEZLopIM|=S+L7?-WeG#U3uFCRZ}9|M-tJxGu>z1!8BRUFL2AE{YY0?6Ony1 z#S;>-E^bDijMxCU_-PM-=r2kWS!HgMA`dAU3AWB@8lVZg`xf)TWY%W6?9w4 znEbwGU+&N6{o`yQ0EXYM2Yo9#h9>shl*I;{Y#%q(1~nx6iziP$myKy=MDk39OcVfx zyHeAiLAeQ8=_i+HCa>~MMC;3b7k79zvc1FpIY5p3PcknV>aC&4JlASrGOhgnirV&*@!rS-jc`*_An#1-c zHfdCfG)x*_Z+1G>J`Sb}>f=cPJ*10b+_x0UpKIy_l^z^_xDZ?jt=`re@niEj<=I7H8|sY%UNIv z$<~hr%d7_#EE$Iebhs$cHO(mh8uqsoHQ_AQ0fMRXcdim21BwYUK-a5>;K$QgYZa(Q zWB2I)ff5CDw714)dY3SMX&4n1@bO*kc&MyD5Fg<@J9vx(FhBtaV*cHR?xkdZhFE`{ zF-QgIsA(L=H*?|BlN4&~`1nZ^Jj!uDpZ1q{wc&U^$VVswgG&8_!>^A#bPo_I#|P6F zrFUA@B!ogbI3xlIzLE0sb2mA9;4u3eKfpypLu~A!TcRhrsSh$OUM{l*D?0m=@}hlM zERIdw6>}LQTu>I3jFwZTX8rgqwYTyIupap+SOIKJkv+`-cLke)F5RM8ieJsUk$=UB z+vN~)_nT~rQBQ!##mwyOwj)nF2@|Z2>STJD^J=R-OB7MQxY6`5@KhUpB0~ExhuD$vGfc-3vd!9=5H%PB)z;^VpO9w{?QG{61%@h?b6^mw z+!0Y;MDlYHkzt+!eYLU4kJ_E&0noDC5GShjniIAY%_QuwftadeEu_&#&Z0oKegj~x zV9W9_p=)(%<3g2oA-%H@tRk&k1P#W>U&CLPG-ozumnrKW+HOe1^T^IT%&yyd=-uQ) z{)zN?XWcOXW4Xv-UO$q9g(PiPrq(hLvu`52tG_ zw$mBL>zwBly^QEXrk_ZCpgcTuISK5BoZe`jW!lynwX$*Mw@+IX2GXa2^hM=Nss!#4 zCdm))+fhFI25Tkv@syiAdz~+U>9bU9Rb}%uYzcv-$NyMWN8t7oR&?|Ygo51A~I5g6w;(f{5;MsSB z$?$}14;y+my+a*fgiV)n3<8gclzjAoWvJ<0%Z`%!28D%uZx$|xSN%H%c2+c{K=wsGtM6+ziHeF?~5L zuBR4d3uo=!kI}K}%hbseFn%73GNy8qBTV@A`3gZI=Gh}kfq+;_JRs4l%1P{A=F=gW z+F~0ylihW<2%9oB(K$%vkmEAO*uqRvL;jVPH`9T+N?dWil7P6!tFxQjCo(|D4tH;d z_Y*&*y4=ux{?WJRkTDQFu3{5umFZ1S{SZHkQtybsve^O{k}Z%7$iHKXE$Hn00G%2 zrlak3?sdqMLDb9Tt<2o7^0{BZJonb0(L^R*d@zC+(;SAFtv3eMBr<_C;cVD1BcthB zaD+lyzmLj^w7$SHG6Es*42`L71rs&v^|xW|O||*dgwDYu+(F+`*sRWK9t}-c+;4(8 zuDNj!Mu|JMq-nzld=a(eE>x$zXwem{ogB6IISd=3)D48)%ZF z?ObOq>#>L?J?QLcJsj_oNlqqN0ln(vabQg|J4{joySFGX+~|3BnO^1S7=4|VrY)#| z&A}l-TnYfBgankUv&^)2iXjLmfT;2rIV4Xe&^{}t%!YD@R4uN?en7EEV4eQgX}R!& zEZBnGrgfG2WJ1K*TVhK~+dDd(Kv!3HZln9dzuhgKMYf|8&aMB={z)GhECm%sBO=Q< zVpUm7=gu)(fikf0F7vF_y&ype$-x(CE^bKVM#F9_c2o59QAMzrVFQ;~g^Rhu=+ML$ zjV5+*vj4QL7Hlg39b+^!uoHA<8|PI!tua8tBaFjC z@mvL53=(Yl>v@*7+gC)~cX$+?&-FVT=jUslfBmX%u`Th8m)2py7O3rxMiF{d$%oIz z0pg>{LAvB*k8F~c2V&oWu(~ewG3Piwg!oO64)o=~xEA>ChLQ&{#)n;WMVn{owLn4S z@CrcBt^%!xB?2}4I68Rj?KLE>+c{E@KvkkF3OC%010qh!&yzg)t1RH>$wwdMUHE5K zk4x6aB6-L~6Yq}IcMPu*!w~mp9$^*d5f!1ONxeF(Lv2QANX^wFH_LN0(Q|cF zTzFPum)#ntC0d@HLfd8Xd)fdfz9=6&_*~)R`*_gatm>?K{BC&-M~XMy1O}O|N4&1Q z@9QNF_sfqy;=|F8ib~>JC_cx?Hd=49STQy<-;M+1{pJXZ`rJl?ylq`Jg!~Vb>##UZ z3KQaoYuaoUdEN2u^9;LI?LBpItuUp-J;lXdCABjHKDj0g&m4SFU8ZZRKA9);shw(B~% zEyx_$)&P)QB$@T^>p>MYi`=*k+PF2Uh@yuYxxw9S(h979E1PPoX|dPbPOB#Ot{Wn- zImyJXlcRds0AtM4mL?iE#*m{Z7fLtUfbnZEe4tyF2}D)QRVCkQ1zwXa+8S~s&PI^l zutBOMIx#5&vvP4W=5)B%r1KOlDkXnnS18j*J{5miObAn;PJfh1_LUsrd_9&V&C~4l zg50mjs1|x~S_K|EHs0sPF&L}+^|>7{33}lXMlQxlY3orR%(8D3kmbdP9~zx1oicuU z%(ir*1?b=|V+F^_i)T;ZC1p3VX3_R4Ns50rZ zZ>$)pL{X=zG)Z6k6@vGeXU2Ma#*3g0B6FZMQt=fXKl^UF2sE&(1_D*Y2fV3@9vJds z_IKNCw`luu;kw^qL=fp=yee_#N~q1VhJf--y;+CSDzRSev9VCL3b%^U5!cZ+M=Y8x zUyZxTX*$0+s~R79hBy)1qkq8vHa9jg4h)6pupAqju(u_4h(Tj?z)T#T!p0M)O4LlM z9jcWeRK@B1N0YhJdRjoE?DNpmD@#9g6V_sFG0nx`-NkcsIWMLKV8h{RSR+Xi0l0hI z2=!F=#-04;VXvlkcMI^)F2KGhFDw;i6R-CgHoGZZ-SzgBSZ=zNFlv%C(pN3W$v)h| zT%5V8_4O)HOTkJccX9&U-0o;49_phYR*vf~gp~7EK%NQc;UxG+;Aet6yrNd3#{+RR~H5IbkBuBZQp%b{d}I!&fO&ZZZOOLIT*FW=Yz4VajY_?0aKFrRq2 zzEwc^LHU8QL;H|n@u4^C4~1d+P)}bdx;xZ0o5kx;)-~8l*H+MD6*p@FVNiD*6zy2Y z;99~E-7|PZipgX6SPoL_y=oaapL~xK?Iej0%=x@+Q)iXbWRVnDBN1`E9B6-uHyi6( zF4lrn?H&auZ=4PQo#qL}O_yM-LQjz^%K7?uZYUMvcTVLk;XXop=GD)F_?mH8byT;< zW=&Y^KLu}Xc4OG8)A>13QW_$pH77T$-?+EKNT#8fSc^9AFMx^^k8e!!ZXpS%W9B-y zQw7JF|CIuOb%X%*tbU`(Ta4k2NdW#G`R*0m?(J@phQshn-6i7v_4wfV{@zJ{cW-b1 z_&7o(FBju{8c@mntd0NBO@S;HSsY9;+}<33Grlniqs5aDkv-mC^p;Y2!hK;p!L}1= zvMCyY>GgIu0amHp1T-Ua6Z|{ke4K!M{5&{cVEwK*A2&wH`vLMkgJxPN$TRz`Jv>Z5e5JQuz% z9gPj^oIc(CpZ-@bzW#duIhmlHeZEmK1uz0sWBTyT-kufN|Ejj%vagK(L42*AeP`ei zY^ZJ$Otw>T$l3~A6KL`kKN#AbtNoH5uH((cce(+|S4;FTu$hK7D|)nf)D$V!`~K0_ z+qZJsFq4hA#HjXt!7tQVbu#d{4~p4M{Aj>ieCZtxdB#V>h#S$fkjW0tCqN$i4QIkM zvi_O)^|mshNIv)kDjz+XnZ!Ncf9r@5m5%4*V(=304%VyH_#Feygo-#*I1o*!sEz23ou7ioY%?(MUDq#3-tA+k_bRI_Di|q#ntAE>ngx@3PV1has+iHSrvjJz z=S2GPm)WA~fGHstn0vzx#)roR=J)3WM8)6B4o&#A2RhrBo+%BnQtu8p`X zw`a^@QN%PQXaBjaLW!-js5+%h)`Y5d$HEfc#3saAP>Ew$S1$0mP85K9$rbu0TO7cH z8dp~B-Br^S7g^O8m#XXRmspn|?b4=Sd4(I|>ZP*DqJq^jn@`QLvWT$_O5SY2TAFg7 zhv^U`ePw)6Bi60e#cdvfTH|%b5LxUsVu7tN=3gmTd#4RxH^JgEpU3yW8lI$tou(lS zIZ%YzATIeVqQpya;~EyBGt1kCet1(8R4L(m&yS=e&vtz0zKZl_U2Do)x$BeZWr~T- zTzm)=f#9tS4e-!-UQ7^Sqnu6sUJ(H$)xZgublwAEK0L*{GBokDOIP$IMco#ZM?M{b; zKsXEpw2bk&px?Xo!+ST+yLXA6@Q(BLZA2r^J@w9HYj{DerIjEKz{h_~{flophk+I! z*UiRt!w{ycjw^w}`VmJ!QhPe?m2_gM0rDxu*v}7>FOy9;UfaoLHyoTh&rqjR#g%jx z!Xrp}fpP)+Wz(Rn^_1qJqXuKLCRMq^$VMmrQ_PFTYv|{9d#I>6ZQyNk2Qf^l?`X_U z#S`);_Chc+uf&HF$-@87-n;j;aU=`F`S<8kOvvL%vV{!T&L%h{ivio5V;cv^X7dsr z{RU}(i6xDqk!+J3KcD@rTVJPVGyPmlVXaY9NewRttt&^4YD6M!2#)@z!11%I1{hBOJvwB%jnr5Wf5w zy+g*~4WgW|KLT^xrnre}zzNEU7D^Z!svkqFM_DQjs&n`5r#$^fViJ zA-{L383>Xn?xA`gHgbq8@u<3iZ&geThFwNXXJ2=HUeKWOi0XZ!X3t7pBZ-@n>9 z;*bY)ff5Zt{WR}NeldBBFAbE3$6hJw94x-np$2w zV#|mPFuJ<_*wLA?O}{Q+JC?Y*L76Op@3#g z0az9}Un*bw*0&5X(r!)6+@}4Lw<^Q2^q1MjVG)_D+!uHTe{uUi z3b(fw<}EY)u|I*}Ny#FuW z{}=E7qwszi|84Mn!?QP{yFvCI-BUSf5vgGg8GY?+2+?n}{>0PXMycIls58p~+JXSe z+K;Qzdi(x{jcD4xTFd~vv^D;IU_+pGJf06!bXhx|1#{KzrvtS88}4(~4NtAZ%ozY5 zS8ZKXAhdJQhZbH}+B?@-I>xPnZZV6S7x`{nscsiSgjRc@fdGNTb5IQbvVWZ9(@aP|J zPWy=j=TD4(FZQ$`mRz>fS|HN@lPm>9+O4hxM%N9Ofu{4;0Zyt$Xa!v_cCjPpDxn5! zp-+TsyFwnna?CSzZl^-4%tJ2$_{t4W z+WeE+fosh3m_sNBc%tOJoZM0E+K_1s@`~tWAc(?n2V^21P&K+s z1pe6U23A?xM_qb9Ns;H(r2LCg%D?c2A+gGlYhH`)FKW}h%ZPl+_vZfbV<%S0%rVvX zC*05lmV8`=Pbb-(&2`H?dnVb?-HP!AV{RuKfp|XSb7D!;RqiC%(4Q%0tG2AK?K^S{ zfm{XM*Nom;6-kE!yUJ9(#%=;4UPTa{Y2T!jd42HW1sT_D@4wjF4W3n6`=WwYGl5-_ zg-i_F_+X`D=LWIzZw1)>wYOY}539D;YqA#(uZ>lEs%jv(xAWcIWNjhMgJEG*Z@1Zh z!A|ReP}sn{?|-CScX`mg9T-D>zoJ5iY6hHW-%fQV==L9I1NW)tPq2+wt+R{ZkgP3z z`89U2St%_(_sCuhZ3Dc$&xv;C@Q3wcwG%ZkjDLo6rUw@W3u#pFQpOaXrJB+i0ap7e4 z35y)AGS1)REOA4%%?;mh_kR7|c{)z>%O&<~UDAu2y{x;YBk3V=pI=q4-}5Vf+45Vn zShXgAKZG(c*I2aY%VbA+{Y?70%YXkEqGe7)e|2!Y|MbUb#K8k{qlrTYLSVc5wh zjP%O)?J_LNBA1a#x#M2$ZJBkGj8^ST2EjDfD*GJTa9Qy&7&>?t%0R?bF>~LLHT-^1 zjFMOsUh577RxCm^H+ZmoqdN5A-f?gLc<*J)8{t|9EsffxgLGt1HAGASinn&c!-!4f1*cWQ^hQem0HaziB?pqvUOZw|-GJ97M2PrflJe!4lj1q`=GpQ^~wzTMRg@*P~b zMgCURq;pAV+CRi}S zUeVD(r~D$x8H{(rEgzDvAz3i6@ZsMXUahY4g zz$#F=hKo6@bRSmysc;`wfvQmyqkb9Yqtw(T97u-{s$@f6Tr0y+O?a3RR%!}V4WJlM z2shwxm>BNa4f_!8+$~c=X~A$ZdVmFgr~ETK{USWTf$E^(Vjl(#D%7qEv=vl5Z81VQ|< zs#!NVt;a`AvcM`PYD!gd&_Xsy!{726eR+kd#uQFI=@51?31HBRg5gu9;9Xtq7=(r+LPiH`^6gBIE(b5?` zpi%zerC&a~m?r2+SWv>EiqAcVk*6WdR60(TNt!-NciLTtAE5(Iom$p z+urT%zuG@;G2CmcabKBSbWKlyz{m@JKb!O@vYzF6mz`V3^>(LF{w&VZJ{DA!);d)Y zskstH8Mf=RK(H4_9(^t#uiB2OBX5@JhSIJqQvnDLkH^bY$(OH!Cxhu*qi3&IXR=fu zF|dgF=qy>bQjQjJ=yR}KwNX5oST37&YF)%#F_Y4gdCmAnTJaWq)$yi2 zyT;sSOCrn79`X9Bcl`S4i|uDez1_X1+uy%9E-te3VQj1~EdJ6d>t(RqLII%`)lEyy zIwkN~iiFetWj`C?xqX>x?~?cpY8$ijbF?E^j>}A!Ek91)&m2UHma9`z$5NNUKJZDs zf8G1t`+t8Ozki;@gJk;2NBOtL|H}TZt!;c^e&hS~^@oohd=kC?Qk*Z-r38;?GT)_%|R|2Dpu#^YIOxkcaqr0f5)Pw&t3>HV{G ze1CEU`^UKPS>v-vQAM;G#qfad$rEvU9$P-3)?q?f5Ok^fG1?B04}s(%W9OFLC#&19 z_oI!7w%%EaHcd!!=zBXKO5GheAy3nb%URR{`DkNpV=X$n;_ehsyUE*Rm`x}s$Z-;n z7-WzEa`evN2*oe2zK-$F-`}QjH|bBh=hJVxjUxbR68GQ4 z7jT@)`eeC9E@RZ@`FsixV@7#ah0%#@9Q73kLa;#~fN3_rxRlDOLA0BDlU(sn<@(r-j-_TCnZr6) z!W(vR{HJDBWvv(8)Uufzn73TaV6CktCMF)zKp#DPu+eNY3j6bEo}rDS<(kLuS~d#l zja{RQc{k^?gsi%*PC5)te%cnm_xLl^<$FI2C`92oxLnkVqXAQXJiTg5lyZ#6pI9SL z27s5#MAyx)fau;M#gPXTp37tYeFq_(#&BAe>PT(6gERqY70u4Z8Gw_aSsXSp$i_gl zfkBPp@l{LUR@eFrcggS~tP!CAlbewyasQI5SwmIevAZE#4Y)9zC$l~*gM{!;4-r~h zPP2EN=;STBLU$th)9rRoi*;i%6<2lfj0klBu9HCRvNi|9m6u*sAw$v4_ zVNk62m@dI4mTcUMF@0nKsIDxYkc~#^jOdDg+6h|l%mv!~%7QP;yPVJiHmC8dNdy9Icf|yzha?_-vlX=-bfPcYn@&DakZCT-bSv*BXq`+ltR}{7cP+S_n@=At5KGCUcU%x-CuPR01}+-}rr_r>u#9 zI<}OB8@`Uw<^f)vP>rTh4mV-wJ4BLAW(!SBU4d_pf$yuoAjXd-b^$bhJ5Kv=a#f=6 zf~r_=x$YARz=vhXm>9Sx{{DWR4pfQfIiQs~{_mW@lX&seFi?{!cyxTY|LPgOeX{>* z`|wBn_3HbVPxcP+*Y5W5-tqp+J^X!m@WcKt6+Ae2p{u{#Mz@}0g5}lm-ZQTE;(*(H z`r=^wSeo2B+~2{UFArYr{iv}39S}&;3I07g-hTO7HF)@sZQa@T-!lNukB$!xsrY{% z9lXN7+lPnS1p49L&cWfXsz56eU;hwK$FS|H_xtLcpbPAZeCNE-4}SavyPb<^I=j*( zUr#eQg8>g5U+8zh>5teRG8s74;|WOpa8AHN!lm#hOB0y(1fM`qOyWTv!`6GHDxz(G z@bbs)|3;Wp!&K~l0R~|t)JDLsTiA&CbfK@S^Yb=9A&0j~vy7+6Fk7MA`z@W$H#GjF? zj)4#1v4ZyY*H=4of=hv|T^arjTl+APV^w_CS1s=2>VRD@#L}^GIbnVsJ?K6NHdbh; ztN`-v0pg?Jzo{Eja<@*GUv zd^FK7InH6Dp(bI=o`W((em@3!%7$-~!C`WqO!2-W@8D|?pT>h1INSdKIhqE|@k_=R z3XQK|umvQ--t?fmrpp2pu=Urcg(l#r(O5AR%4!tuB!rVHJzdCgq33f>jB& zp?Jf~5o|#MXHEq5hQI*Eu}nwLUb`&mFP0a#Aysy>)GgB*!A%fBRB-~Iajwc6E5lZP zeeBR-0m-j?jKg&N#$d2rmA9CR3i5c;s%|)iv^6cCtesYtpG@DvG5vv5S2! zs&=xDh=r<^1>rk@fV#Ws+scANj7q_PFM=71a_>^Q4#ZeMibD0pMRoht=)N6VtwAx& zW`sTI>8&Ch=nW6dv<|9?hPH;XkHk2zuj)3k;lQH3Iz>-55XAsxt-=qgmT?93&?u=vMl1Jv5j9XNxjS{PDf7OF?L;(ii zcsfs(+CF5D==MY=9gy-x@qv)zpDV()WOQ8lVon+py5BSi+I@Tu7 zW@!S$akGaVh>)x(RLNTL;F33tz5oH3T=7SOBEJM-yFWL6YM1fb1OQ6LDBup~0~Os+ zjRuv84WnV6CaBQmuH}joN*?V$*081*;~3St%bnuAR?xO>dV#NuppP0Ce93`BHhn5GRk%PGpBk3< zQ=<*M?P=)|NINE$PvIQs>ud1$ugLJ~oB|u>*rn>VSf3L(y(GGfxpE+NSn-I`>!Bg8 zK3B078V4=iBKL9sz%o4VimBR`l=kI*q(iJ<~GbjFc z+R2bj^WNI}+FG*{?eW6~ zKODis>e?fG2++l|msEC*%08#E>-_N2Zt^9!^0$&!zTdH00eqN;ANKSYz)^#iwt^mw za)lCRzsh9b9sRFev{RbpxIMO7&3mY5UUlw)M3jJ9u*4n(rxCDqFKR-!jlzfSG?@(J ze$r}gV$;pG?Wb*Uiz*E00!n!Blh)iYJAn&2+$tMe!{stxtN~w1$N1@Fee=O-8$gxE z2b+)NGMq3$a@H0O-we{Uqqv2Wz@tc|Qff=BRn)kv!H80wbo?#*!RE5SoiP9bS{1>c zi(z&qF+%Y+R|V1`V+c_P(=~i97rf?z+LBg8h2#W3WCInHa$w(zV%1R}B!UYT_&}JM zr2RM0+kAp@L>x`$W4w^Dn(pvDGrZ{1g*&UG+?$M6yQ>C9f2Aj-z!vn|=m;PAjr!Xz z>%{BPT{g$_Q8G>YKyr3rhxoJxo#uudVb8K`*dlzI$=E@x;fDl7Ci;dPLr1m|p$_K; z%5>ErVMJ86ATZEdq%>%x)ufA`V@>S@#0W-x6@-GmRKg%*ssMv)Z}DHVI9syreQ>40 zR}CNRCmDEF4}58EXGSvfV9xtm3M*A`%T}4!H1oGDWK_0FmqiHS4iSjaeuNr6^NgH46&>aoz>)Sgf?DPW--6q+pqS zr?r#Sb>`$xb{6#Sw587Tvf(k6M&Cs1Yt;aqk7lm9o#lSqa#)U%{$bCZPVk4KQD~w~ z)mqM)F+~cbOHzzWx(rA2&hyPXFE{TTb?=-v3uF0`!#wFi&HCWc3k0t>O>DV}?lpmf zbnmuXC-+uQ;cv4rirKFfGw@`v-$gP5`RhUH*jcf2# zUDlh|Wq1S))jr&aNwx1)KOzRnssr*Aep+kdgsSxn`0!}B(+hpCxejs=+qa! z`3nlK-$W0CB6wlw2Hcb8ok4Wxtf@e=1b+AeunBFSMRx|p6G!>NIN3N2t__eRV92L| zwdd4cJN21s&EdeGP8C?|VX#iCmr64d5r=08dQdNL^@Nv#;%fC4LxIixwH#_Khku{d z;O|siaT9RfG3XDkn*yjmf`ILgy>i#YRpBe?> zUKqx2HDFf>9A>_)05JL%&RGje;F0Xxk2eT3{X9eCcy};=kG}n#$74#6QhGr*>39KB zd=y0A=1D*Q7Jszji!6YVG|zfpezCUhVdAyl`;Vn?y)6B*YkxWRzdm20#qtpzsd;u( zBQ&-O#Rz@Bv8qBDo|C$QZv)d=Q#m-$olSyCr!W`0qXa;gKuZfihyQfejiP<19-RZ6 zsCdYtpXa$!d`Lv{mI>03mEg6M-g*H>`_B7Lxhw{ zG@fjJc?z4hyl8#ZE(~JG6$9OV9!NVn2eGM3ClaB6BC{g zH7T@A&~4A)JYaRV1i3r6lg{Kk2u@BN`oE1ikO6D3Hm`FTE4MZ3swP~Zba5@1({how zFt@gNR6f7U&G9woSDuUBUKT3-sBt$P+3B4?) z%9@l}i#lsj=mILOwo4#ixyYnnZZ&r}L56JULd2WVog57hEW)KLhkIMmgD)OMcLl%q zq6c`nszIQTFXO<6hPM(3scy2dNGD>1|(z}1GacD zkn3v^8sk0+oNZ-qg$XQ%Pd{`Mt2pq~^xW$8e^n5Hh-)l&fA zCn$>UUhvX(1*3Oo?n~3o`7nzK4*JoN7hmcZrlh(N-&A+HP?#>16%h1bRY0AB`o?aB zO~oJ7YxQg+KON~>?0nediwFDV>{qV_JK1h}>eY_*(QQCpd2_>;#};t%2HHU{MfiY@ ziB=`pcqtfxszMLsirLSm1ND}lJ~WC!IcVhp`O|tlqnlFP{>Yco$-}7P!{}^F#=x-G z8>N)ySKHqKPjc<~c2pvHZ@r#VAQ85eAj=CCQNXnX;fy=PE174|E`Wha{wKNe(v0D1 zRZ$mcbnh+`%H%{tz)?9Muv2;02Daf@0iwGn54r^d>)r=M*trj4Q|iZ-+rbtyAv6@EhuNho&^zhh3fIsQjjHHEwx8ATe^+HaYKJ8N)8HV z*?4%Rin2)(&wt?DRDuYR5a=Df{5!{eWy@o;CU9@eZDf1ax40-szktWY;wDaeYwkn} zay|64(o-4ds(+LMbj!2)HS@?ux-Ba^l#!*v7LII{SP|8Li!}|TO=Kb1IbD4ioOtBN zyn?3E!OQkw5FR**JC{iSTewn{-lrQ_!c0q6Sl_96U7RWpB!Akycj7lqwd`xOEw9tI zW0Gw+Wk;=K-%?rZ=)xmbk;X1k%!=fQg$@EN`&OoBvb$sZ9t}_K!c&}*BTB$s4uxzF zAQ(B2wDPt;8$L5N{>T1Z&=uxuBA9)CXgnaD_#6le84_JhHiHYA4uj(E*)A{9>x*?QG(e<&#=ZVOOMoMokyChz=W0+ zK4Hv?{>RsNc5I)PIloylh~GpVQN$Jiw8w;k(wuh~gxmwc5k#~Qa$PX~G~NXkg7U;h zgrLc*?QPA@w(Q|5_i$9UGYhV+yD9$(5zVrW&>|}uD7cPUQTms`^UHW*kkElW8a-PP zETugeO|m?liLSOono@VaEC#Cj>YBJxRr9elHJ)U@P&@E1JN;K^HT zU|CM%QVCzV_#u0obc4*B-xT3g)_3%Ivs6sOwoV8TDoLy8lyyt^j8w)=gfGT4JW`$9 zIcwJr%(*Qj5DRprg9=Huj?$*EIdj(3m+{q;l|m+>Hb2i-oIr^A`L)%-h+ z+|%eWUAFo|pusF1D4}(jj5$;22Q0}RCBg`-D01@N+d3Mlh5U>*Sm zViokq?_Cnv$CP665F>qA>zAAs&Ej<^V~#;bG;%teNxQ52@kqtZcZf4Re&2Q8dFAtI zUrKTE=0bz^8N?HtN{d>1R&f_At>g$p0Fk2^L;#(v+|k$3munB#*8GE6HbgJPX);0? zRZUkOVXAcu29e@5(eO%TlTQW#O_0jhe9@D&)GF*qD@S`T_I8e$SwJb`7c0eL_)T#U zW+WJPo1(~HO$<+g2VpDli`H1Et*3_vFC%~o>czwCqN@P>;rZU-9)c1byxu$9K0Y{X zS*5nx(VcvyN}cub2mQMbwn8d?lU$YS;c5AsX!&}%*AS5{jUaS^M+RS8%zPX^R;w19 z-6mg6j;^f+-e{h zV88R>fU2A!Kc0^V29dUYhVAupJGhpSi?;MWBa*JWhR_a;>$WM%7WuKLmmBcXAL7Y_ zQ!e;W{ywrQd~s?4RzJp(ElV@lC|@Ym>j_XmOMhvfiXcHxh3FajL*VX|h5TSkf1-+g6RHo)Q?2qH$k}a0~704`8kc~K*X^HRvfu^M0f}Fh`9FRpk+ggh@ak>9+9g2dqhOtH+R<95%Bur{Kg|cz48z4m2Zy_RhtZQC zr7_~68ljz{F84%>zoKQ<(}@cimR`GEJn*7G$fc2Qr{e;rTU~FTy2Ps$VGGFjR&JZS zK}D~1;~W6zBVIlGAo;3Q=hia-TCMBPTZ7KlN9s6ME=i-w7{(5@Sga5*B z^uoLQf12FVu}P&wd6pa8qdUh|I7_HbojXS{gRM z|i7wR$QQtGK<#NHXe!?l$(~UesMH)NcHc5*!R$O zo97OY&^wPgw+{(n?lop?4@b%o&Y+&)kwgDmJd&C*ab0W?Q|8=OWWlsHSv8oWI8Fg5 zF>D{Km{I&Du~QNlySq)XP-kz#e1`hp7$X&(4U>_9hgIp+cEgUiNNV?{6#;*68_Y0V)hsLlPXg z6W(4pA&2E>Gk?A}97h*8RVq6JWx;SS^$Jw`x75wu>Q-qa_x zcFQhd2M9I`oAWV62c+5Nwat47e`vAF+rk%@7k`N=P2u3Iper=Db#^OS`p~SPOmpa& zMXKX6^@Lj9Gh4^T->fh6P}D5Kh@sMT0A#{1h*zuZsE+ zm)sWUGpGioC+StxQ|)phzO86=-Th=z7h;TL_p$&4AE-%MAQRS92r-!Kgf79~sI+)? z@>-E&DESwm9k|&n>s#>!3zq|?vy#**P;+lgZrX@?7#;=?LnS?CgI6TqFD$1;ojD0v zFa^t7;5lbrzwgu8HM$&*xVEQ)Sk5fgpLH$qB1H0H*sl8*cG$)s9m&9{%7=`WJRN zq_X}vQ~~=dwVH9>Pt#_d5Hh9kism!`u*?vtUP)WPI9Y&S@{bCm_PpiORH3WYeHC?S z#n8{!(Hc9fuQbi)Vh7`Rytso`@hh)x@YEHiL-Imn?=$V}C8-44VT;5Xt*RI^MV#?m za{!r&A(3X>^4<#0RYi^ZbBmyc$0==Mf%?te&Zw6f@QU)jT?`qy+E$KMx#`s(G5X0> zHi`ap^_#;e`2_<{n@Pv0?~N!SBt;#WP3O2jclq`i{&$wlc<+K@WTD|TrpXQMQnu9eVjvqG>v)v#`9}NW0Aug0XErTPY2k1w}b||MtOSQ@?2DO`Ei^>C5ZyA45oP*P?CReAzjV1!E47RO3Gb5OkirWgP%cq>ZPCKvGYkTb*-}Wu0#FWBj&O0i7hwiY zeH3LmPtNDwinuoMw(jKZKN8&*;i*fqOXSjQlnZ`6yrf10H^+iT#=5PJqM_?Ux;}Pu z{T2-+n!6cI<(n~_Aur+o#9HGCGgNUIrfXIe|E|4YQMPDR%2rh-x*N*yPJp1ynZ^7l_Mr_bTMCjD@T1t0&DFJt1QnlAPos|!S|+l^2?lN$f<2q;h16wZ{t-u z0lFVn3kmJWDU*-|g}FG-GiDg?5{~LX#?v_<4LwZH5_p%QMliXE`Nm|DO#Ao=bL3Pz ziksdxYp*-8!h*RbpA8kcL9;)?e~vwOZ=33|pDpw7aqbfV4X z>Gjd+cm)2Pa}-F5V@|u`lAwPN9S>GX!Y~@rO6_RZb(e*bM)PZWDyT>uH7YQ2yw~uk z3zvav%3nNQGGy-c1WUDOLD5Pf+d9XX0k<=J>xTymX?E$Um}(DSmS7ezLN^@&w0=L< znr8}dG){3tQdal~?1c&_d8x%T_qNEk@fcvr6dhkojHxy7rxgH_iO_8UShP1X0In|v zkU%13W)Yqpd|yW!O7mJ!iQ0C89s4TLu;zdf#_K6cCkY7+(gLSN@$NvQ7Fixftfn48 zan}NakEPajf+-Z^Va~2;+KK}tb0kQ*)#BS*klT{(Mb~NwHc5PG<;<=}ig)$j+^1=6HdQ>ui8t7HAtg;6n?ovK-^!z|2pEa5|Ed=p3;$S4SrM z9))4W3p6z*iN~c6FQX(Li_wC2db5NcU`yLD_(y-BKYJz$S`yy zEC31#$CtX6BvwRB{foVdi?Gi?44a~r6bA{`Y-5Pxc7iGf!yHWm=C&aJ1#@_DVPa3~BOA4+Vje+i^)fy{+TJSZ z)6BA75hdTPlZHAa|1#`UvL@OOw(8CvP!U#O8<8pJD?{qpefc7cWJR&}wy5H=s0=Te z#Wb`u?I@a|k1>^65J7=VpmB>!rh%@F=~dBHgge2kZm9dG|3>WEfRhEa+8s}0Q&9P6 z+77~6AZ?v>IB~nale_(T)(&W|qusxhWmo(z;weGSQ7NG#HE}KW(AkO(_l~}QaopSe z?#1Rp@fp_*aYwWt#>?gb?k0mq6^)pF$AR4}Y**l)+k%D-B_W(#(}!@?)S*!t31&S}Qc%a5GGe%K>e@gRC)>>%WfL%~9SeBfH8ZpF!dwkH$ zjG89-W4*&+-GdxEbl|*_xNZyybX1LZV8a-tr!i~K(1zIL&&NegP!pKSu+0C$4 z&A8m&Euo7{68WtECP^k+T)qm=XziArmqF#~KgaXY8D~(W;vl{7Vuf9bBVgEZI>i6F z;V41$&eTPtJL6A7`l*gZ!Oc9<#zL01KrEa17N!Uex<(;Hcvyk5&ggG=cvItUCi+&kpeO9APXz^l&tF?7+7{n(HV8VRkmgdSb^SFJ4XjdLbdWsS za^Moq#kjN83P8RfGW2B~;ZIhwRi6KMVltK`v!#I}d-Rh5MwAJd^LlGaonw%UZ3O_D z<%4G3r=-JfBg8>5O-@fc*yI?EIdz|sAe z)&usUL42%&LQq%GhU8A6gE*GFFFC&h`tej{-(F%&#O0nT=)w9n|QT?)(nCQhhx!%#CA z1uFq3S3LyOT)`zVI!ELEb4c~fcjK}R<;g^Tp=0@$(L>8m(F%ta7xc^FCwlxYLQwF64Da6= zzhX*&GRxG{y`dkDvsf|iGc93dp6cH+aw;O_n1hy{fTsK{Hho5Rie2Fx6F4C9ePl9o zSFz|@b2=7cM(7rKv}2cTzO$4CIfmNYs7f!?^|pLq5ne9@5{5}B#_lJtENPlX?Q=Ua z%J-VHE%ndl=jX636Nq%9igTiJ513?dND%%k`nR=6x0X&xW`9anq5YZI69LaT6A?(= zPoU&5&OB5~lo&S%8N)o%F>|2DRE7Wdc?Ba`k~;zqP(Oeh@TX?gP9G20^cBdsi%-j# z1c;bY78usbX0dXFGeLw$H#*`L#*vgfWUmxsVA&%q_D1BOVmFX=Y$yzA(i0CPN++PA zp)_k)zPjye>)+~5bo&)1!iwKjMo=yKO{;1Ku6E6&A}fY-DJCEXcMW@|-7W)R!8DYQ zuNYZAq)%iTH2Fw>8aFFy(N4wO7t=ID;cG-mE$RAfslKUnqfnSOxXbzY4Vfu9W%~-X*W>+ncHqRCBpi@EzMj z{}xelm`-J6)nsbB>tgw(D3#bfp}vY(7ZYqb5NFFmaaIWi(kRzm`d1sph2yhJGEFGPqzS_9ixP@WO0vg`WLn&ws63gZTw_tb zyM+BOU~}L^m}Jpqi^WLy5FVa5uCZuwOS`}p@NmIT?da>0P2GVAAPEx2wb>v`$c;k4 z4ibeWuYnyqgpLU1J7)<&N_&bBXW5EleaM3TFngCwTWu%mC!edD!CveQ_9fB_3v*Yh zyN+Cs(pjpK?io5eoDnx*>KLh$onv7T%BGS_o?1oONqP&z9y$kS?;VEGWSLQPX2msE zTvc3Sf$S1oUecGh!07nI4HZ|IRFODPElwl_=U6zq;2#ll+jRs{mBNOb^tuw1>2%Q2 zuV7e)>>8}%S!oHhLGkP0%sP>2jpy)^_WsDhBMf7!OZGID^6~}Xj7L&*d3-cXU$gK3CHr+nQ{Ag zykN@xu~F3p!@@FdLMA?pE*g#$TQDMZvfVPOCd1O;qj>SdFS_jE(*B^74nqw~E3y;} z?EqU;rB~=6pU>cg@3MG7)@I$#^Z=w{JJ>CbG|~m-rL~)Z5JdVWTcs}V!g@E~2FH%g zUpU1(f_?dBD;=`9TTtUaK^4At8SEeUD{j(__xO2+?1AE#qbh?`7}I2xsT>P%SdtKA ziFZZ4@Rn0mw9HJGxVQvnfjV#7uj z>l4k#!z9nuHJ%_@UD*Y5^(mU6F`;Kw9Eq--b??X_QJE&%Mn-wyR_5PD2P@Yh|0ar2 z6y%udOSkr*xf+{3Xay=gh8$U{w5XNmXLm`Kom>9+C#5n8BP^uv2m$C2Vw#l+_4!9B z=kTQWZvXJ~*MV!9^TS`Ktyg_%)F#ibbpB>#WNmY7yJaud-AY~y0Z%HjmfI4ND4z_); zhUZf<*>Db5a;yKPbS@ZnZ2X>aE zCHh>hY;erc)9$BXD?XIPaA3v*u@We>A|>d+fv#O?zKoX9&O)DZ46#61HR7m8vuv_I^L<2&akEm3m;-W70ajI5 zjP4f}nCPY=P~!14m(jP{yS}Q{;l~`KU?JPx;D}Hg1bF&y=yh|lcDm`sM+=#uV9}6ewdJ_OJ$~?pGRJFh zYbbq?Bar4UP@yzVtWP>mWaMo@m`sz|xU%W8Dq%>a;k)=MCmmm)wLF|(PH~2PoLRJD z7T#buevvMUtp7=Xz)+GLsC-;v)ogo9`Eh7c1p#jl)NSsyNz$bg3R`@3yNlM2;%)2# z@eb35!B%ZA0w!i7jiu)lm1t%GfW(R>nCREwpWEgWuX?#w_drn?(O&v4?OHkMh z{DJ4jUiPMGg`nRt5seQd!Jr+7*`(tv#9}rT{dmk6T5h7^8|Wx=IfXk@I?G&BpWhBO zu_v+V_w=>S4>8*e7#3)^u-gpckED&xk+-*TT#D=O~1YD7I#2|qYJ6!KqDIX@Q@ zl=ENd9xq@8T-jZk7aDFGX7i;WEs(dM_pW{xJslZ45CgkBFa-y<#{a^En+krO4k|@D z1@_9-p3CgqR}m81q%cH?y&%C3ujM7=1#i|~;su>XNdm55Tn068-0W#L z3fEki6!)UUuO~Mpbaz9C8p#B0%|RjH7~Mp%<{j1b)@)%=4ujGW1{NxHGjs7@*v3veCUGu|QG<%gezW5(E1a~DVVH}k#kt|gvP>q#990hRb z0u4o7GAX5rWTsAr94_On^Ef*zaZBXA7^$d^qw;WwhdDb?PL23Gm8?#Civw+L2A#2S z?v{;1VL^KR02FxcDdA!&UQqCBjckAg0yj9qc$;TQGG@%0^Jg&_6MYY%9-|VVsD{x8 z{VDL8$E!ySggVXMB;#87>rAi^9BMYTSqr(M(^ZDg-nDKy*e0z@%NB#kF)%P@jqw=H zq!NVQW}qrvk<9F^kXd1mT{a*}nC0#qynMNTyz=J@k0QHMmdm2H9o?X98_M|%m!7N9wCW~TT(8Ey~nu(bh4|J6DO4(*cll@EEEyZ1EJ z!SM=)ZZcs<0)x^4rE4c_44GG>y6gLF$+d7yVg*HvET^Asu7E>;$=3N53O*~tf}Y;Y2sm&e@PB5 zd1?*vF`GI%UBIzuDi)9^NntSaK&i_tSC*8Df63$ByLfAGkry-~Y>!sh=2ajyR4R)7 z4p~+19=&32az=MC+WvKLhJ9n~v=w<4FHrrABe0)o7z6uFHnAFTc!#zi0_1dapyyd@ zWz$;Ox_2&Uhn>-Y$ftGtlfWdOHtbItJo)&*{>YHZmxrfz?zfg}=hm?T-gJ!M*4}ik z43r`YHH}k@yny;UC#F2SAYg;mAbKG9M-^9OQdY$pAQw~>P1^HtMZu>krmE2l1gjLb z0X>~qCp4c6=F}lTOr)#lwx9{AHystBwe9KQq!VhOL%c%82aPy^7-@L3NSpc?Lq&PU z{Gu|CCJNGLe5IuF7pPbyq@A=5A{1QL^2x>!IJDkPLH$9}wlXI+!{qr!g`*{duQ z6)pwsHKV3ZE>NE1$;;T(mFO&C!K^ol}@w*uU3L1)s`f8@+~p= z(?e~yiwjPhj|lb@&zK~>YC3GMzb&-$A{CP5({)d8JZBslg$cGJE3Cupt|P?R(VU}g zCr7n3@1*@yd*Cr8Nq-I^&=93aOIMFyTCk=3ngD@Vih6u6*L67g7{Z@|t;3n*HGp+7 zO^&{M!Djv(@R-+$^$nA9km$OK*DQDqwJFKk@s3pPX;|~~g9K!lUC#Noi!`*7<2{em zT?N0!8;v}es27ChUa!?3<}!QswRIq&LzQh57f`7xa$%0e;P#Zf7jZ@Db}?&j5eP>S z_ls7;k*Hb&3Mmsa{A19HJz^hwi$`7TNRRL1OthtwyC%q< zDP#a_nW;m{2UK&aIC;?R%oW{Iq3zy6GqD9Jb)30XAxWG4W}_^C$1=o1ZSk<1*C7;x z-WyTMM?}`Aw}`AymqAvTL>+{|-u)7zwvn9#K`UX2BFVIj(IPdUw!}b$=;!U4Lk4# zZo?0O?@cis0{s4x(_=p5KVL?Y)+8E%(0m0=>~0_L9q+%~(~V$4Mao7PajL^eXKjqE zjE|AZL|BXn(v0G>oEn%WL;Txpi>GJK`H0?9{(<43ad_~<{;uvgO9zt8eS0uS`SRUG zXls-i2d_R_B0V`ccww-TWkYD;=;ii{7yGY{9kjrEc(wN|h%G`BqYTQuIIt!LKf$}F zFAla%gAPV{8ukwNcl39aI;P!tdGKn_Oq-2!2jB3{nF9;`^6BV!`{irrdtpjsh=>2! zeqn>pv(#>U|GkB4O!^4#o*x|_9GY$~DS9Nl|L>!NSNiSGIV@ZJ&lyh7XY|%iu+3pY zqZVB+C%?>zen>%{PH9atFUINOY=>Kh$G3tls{C&);0Tl z2ZuN^vnpG`WqFwlCm0*CYFQ%Z+l2wNu9A3)`FzH+OVkcsIhr6&2tf)p2Kq8n{-(5g z_za|!Ln{4Buvt-O9m6!XF0(m)OviBk-daQ91r8en`~@QTG&7H!snphWE`*CHDhSui z?^<>2bgMeG0VcXD45<@gV+{48k$Al0y5r)dP>OXLVHnKnF$YhtE*_9ro=&sTaoT^A zw`Ta?4$BF?*{Orc?Mk0+ZCPVJewCPaovmVk&zw+PXL%`Z+1#Bvk3 zc#@ZcizzgKE{2WeM^3oiqBwxn5cT5;`^=tOz=;n~3zIarRUS11QD{F?oQNdXt7jy) z3iH_)hTQ@Z&6!4XvzBtRm~wA5<=X7J9y-;|P|g%68?gfi{nx-Ee+@+Pwlp^Z%Z_8lRqgKR-QrF{J8JH34%hCSS}8(l9Nh9wQKMrYRA4+stGlxNuWDS{kM2&s^^GVL ze`&pGcOsKk^-YH}t5Q2!`Kw6ozjJlT>aMuxosbX>vw zy-t*jbyN>)kOUZfM=i?P&z|SoSX?;e2LOXY96v2YA2+JnFFW`lWD8GSR&^(-69Iy4 z7?et8`}$bb=|S=2FA0sSaEX~^JoHKWnqP(sabiQS%UkJj$%%++64&29=WEwIV(V`V z<(^{x)NJIWZ3fPt(s>)seb@+)ey@i)8hSl(<)wP9rrIj-043(%@~dqZYuZn}-XQDu zdhNz1*Z$YN-@X6$*YW%3NjylVpL~>mYy7Y5@7mhN7v?v_;>wpkJjwJ@N47I!@~Oi;^D)!PolNobN#=KFQ)N$R$6Y+_dn_Szkjz8-PPxm zXccx{aVAW)v5vAm_bwgDNCs+S13D3yN?o2qQ{*CsKHDhqPSBb%RspegqU8N78B+7g8HaDVe{}8`#XED zj`q68|2$?Oa2QIxsH0G^D@Anoexq^U!h>_&nXAu7WXWdUea70R==G1!4)>0FsFqy! zUy{Oc!+*;v#|QrF-MyXtm)kF*hyDjvH9qoRlZNyQ1nn4A%Iq9i2Hx==VB*U{6F(mB zZAV}EuSrR`zUIF^IDWo&7_F~km)qvrEYKTk1J}P`#9hXixW*6%<(EMjk;Uf$hvUEp z6_X87&aSyIE9~F~(|nQ4dK__K(BqOV%Hc`@XrjCDssqJ)IeOIfW|0o|tUGHrep6N< zEe!xjWgzFN$KHH){$=4%f>#?9CZ)Ga{eOS_^vf3Y$DOP&J*~7KFKmB^o|fwidw4;` zuGvSN_tSJ?7u!cW`}-9=z|`pu=;k87%;p$SnrwkVU>{zwo$fG}cy7WxE)zI_!xUEZ zZFOr5z^oC>vK~&V9%0*o?n4=M@X13{hxsZ|ZhCaCxn+{r&XF9BxJ#>}+aQMRoC)Dt ztuG>j?VL!UwC#^W0NeQ<&r-49YtjP1`JD7_7LO68{VbW4@^v<=vGz55-Nl+hTu`2< zip;VP(g8q4xegS`pc(UHJ}ctoc>gkLNr~t;JrV#S_jV2w+z_`c*f=&0_IEc6Zyy%l z?(FXtUmk>B{?mI&`fYS;)w|W>Mj=+r<05EZR<(lLTa9LDzYC0p-dA=&C2I5_*K}1) z$?jUCv7POs=fRd>?@34Tus6wY>c4fj=S_R3taegp0K~4Y-F?erf`tpA za;Dh62C&ElZ;C29Ctag!WR2IylgEC`@DyOj*TEC=))I0jCVl;J*qpp<5Jk>@t+^&v zU&i^$KVg3*pM>+5d`0$O@=5l9o01+qE`>{DQ|>>NXgwxhdIix2H>-Ei9$qGgO&_--4T*_%##uQF(iVrn_) zz(Ka~h6}A};1BivIQlvIS~dMRx_9qqyY;)Xd-ph~Ba8a4zdNVDYP>(U+d+&|%YyZt zm|X5?)yuuyfKC03UWQ%FOIOq@_c|IQ{ChR)75Y30fRnA6DCoCOkS6zr%Q)iuo zF`sdd`46_#67`6hD^n6+;DK?8*=T|%XMUxWD6?sAn2cpQVW6znlXI3j5mE*zPW7u& zYP$RnL#+W_%9&6)0-OtMFsI+m$6WXcR&2qsFi$VWGH56Og!Q=qBeTI5nXj*~Lf%6I z6h2XIj|Z4yvL(HAU^Qx`P&;zlK>Cz&HbnphOp|1kjPyrE0PgjtH~Y)X_c%!gJlp=P zvR;JaZOD zs9L3ZF7aMvp=~qWDfK0K;czJ2CQZ=y4%VDNGgQ}89%KxA1@s4@+;ItC`3#>g(cO> zEAdhb3%9ZE?d~gPrHl`RCnPA&MRZBn)burM7nJ_5?|Tq$<7=Bzk)to-@s zRwuG_-(l1@v15_my>1nmsOjiY#6t2PZLPEp+ACz=;&o}yAM>0Zrnl#xmaN%PO$X{j zS8)0{+% z2E~!Wb~FYd^(>uDV`U~?+>RuuMNB(41>R6Qd;N{7V{I(fMIjS5wnCAjD5Rjp^Kt7k zV#F*n;zQM5M_wAWw>hJ-b?g>RqtxbQmc1zvjVv+4-)i&X;O*m&CH|UDYym@eWR{TL zaZ47-Q^A&Lu@k{U+n1HrQR?Z(jYTVEff!@yt80ibae*%UbU_kXm+g8HYm3Dh24TTW zFDJsB&CgH1czBB69_uqp3etTi`iLUT{;Ok`?PDBKIr;!Zz!|KkleN=!v>L4!xdE>L>^-o#0L}VytX^QB;fASDnAZ6aoqi`~iI|Gw(uZP*E{y6b{cL&HS~WUpcAMAerP*pm|NFm@Jgn9k4U}5c(TBpS zmeGWor>0MX%W2V;E3M*&o8x|qQ%FFJOY86|&##$;{PuD!O$R)#VvIRjT zYD`0jhF9Cui@X&|Tf`F}-7}MGqt^NNU^IA#P~bEDZ2UHvQsgLfP-QlQX~5t?tA$?eQG2{&9yrem&6mp!$;wIbh+U4w6qkwNLlMi#Z@veYF0v0@U?|rBk=yt z(r$_9m*0}$S0)AJA72J4XtMs}#U7D&fSK5m&R;^#EekoW6hmrVJZ<>Y@O1mdi{s~q z2j4$?4)cp|#u*cpHqWcS=PwYfmXVzDTb7&hk0&){9FedM>5p@q4e-2EQIkDS3S1m3rWodZ0_Sjcg>t%2}~jxU6)f zB@D7i+E)`knbY@S4VBUQ3S^@9R>Tn!uD;I`PwK!-MZVgYUL+i0I2WNT;ZT_g%3hRn zRws>SJ+{e1tDIX@0|Y5&uOnYhrZS0SJeSl1LYP)F7$=;9n8#I89gVH7@|tN?349$- zY29Jzjvy!sgUW8QlzfR* z8bfrxp>5viw|#?WnySyYqW@=Gy*$R1i!pQ&fjV-Gy(al0klK>;Fa=x755}Z~M{f1X z^GsP(?ZSG0mhVvDHzIBI-27l3;R)kbI%;~nh&)PWN6MjK?|r{#Vx+>ZrXp>#wWp>D zo5czf!L{x%7c>orb|=x_mG}E!o=K=hnfroRfm0Y5J{apZyb*v6g!nTr z)0sm|GmFp31CAarpvAP`npX&0uXxV({LvfOx@TU(8odXi2BB)8tH-Z|nLoX2LTc7L2$C2;gpDhyBNxgqmg3JeRBPlaKGRU6k|bj|`inx6^M z-(!4H4C)6b1zdvXn6`T*Fdp|9FNFFy%v0+qT5R3Ur$Sf@u%zjWB1SQxx%^!|vShxx zO5}A~BoA4B+Z-8P3G}-8cFDi4~?>p>gZ=l zJAo(M)u>2p*JPd{bs0{~d|Z2K0>HD0AjuYSI#y@G6y%Sv?Pb+O!b2ItH3PRQe6Suw zr{GuncOwj9!g|(cAfD08AR6FlHCk`$^UCV#EWCMs+EU~-6Y^@8p&+MdZG*>kw%HHC z&TNHYLgvlXd7ErY@hxc{B{^rHRg3uQFrB63lcdCan!nLBmLZ1sfobV(t~P`8aU)m+ zR}JSuR@UiS?OK8aocS;-uu!zX$Uh0#H#n40hLOcPLbdICHSOEhM^iOSGC<D?(CvCVuVwrW7tx|x=; zy5&4b7+ciGbtKpSPFE!zl-x`brnKF48Kz3i-ixqR1{#UJWj3@~ zI>>+peGrY63yXni%Y~+n9Hg^^;Vr==1Ga(A3t=n!;=sx+?rm0E4wh;Owhu&d^~$#_ zzY(V)>9`EaWh|x~E=zX?(vp}?J+8r=0L0o1=tDL8w|sz-q9aXlet-LY&Ue36+*rad zipu)fnFD&aX!{JG-_+o$Pj9N!;~ShC0l*@i=|Hqa0Iww&kr&LX zU>iU=7RQg+hKUeXFdpzM2ZqU*)a{pvN<2lbOJybocy?zqgDcDcQEg%n4*@Cj zi%Wl)@ZlYDEi^R{ivo-?ty`-yFJK^-w=cLGHZZWN114%3900Au!3h-*RvD z+qZP9FEjtIzSa*g!q#muLQbwzwmkuv1Jz!F0G!vjXS)9NQOf$G~Gx`EH`)E6$Wz@x{{9(jjX7 zcG(noYQL2QO8g2vMPb>@>MWbl8%3s^q{0b*`oSy-g*sZfiMh@G@HAYCc^3r9>UONJnZg6V?Dvf7oR?v=6dZ>oH~$>1Df_}Zt1nsjiU zybF;*Jt&kC*l2aO^JCQJ>ROF(W3Kl2`l{mrXX*j*WC{JTn+CK(ZOR2}s!hvOpXEx= z#|>XGwhO}{#aP<}RlSkED@4!?%A4e>6Ws+IJPxSA;3Egpzydud_?U$QECpDzr0L3N?~76i@f=3ASr$ zZt5#+u5q)8oXv`6K`6exYsyNsC{Nstrftjiq>BFRa|lgda}HmoIWZ4t;bTmmWnGJt zwi*=%k7JOR?V$D>byv)%JOP@iphmRakn~xKvFoYiJ`}>SLkB_noR(_Zh}5QwmAO+^ z=2FRg301C&CpRsRCue>M^ABiXXfCQlTL$OWIuaoA-BO=Qf8}y{T^YRea^jkMjpNS9 zTqF4Do8}GN{tAL&U^yC8C|q6Vh_VD0uD7XTUim-SrYcg)fB2@#6L+I&>-_6B)sHZT zZ^N-{me^G3a8W&d%dh1y#J2VSTa2cITP}{E9r9@|D8pR-85p^>kz@VUD2Q;W9NNs? z4V^%|J9}IL-13{c-bhMjtv=R+Rc~-FH{;=!UcF5hU%gH1IndM-49c~dr2@ht)t{UX z1HuB6Vl82zKtGnifRh>!;-uedLGGq2tdePlj6DoCDvUjDPfQ7OW@fP>n{+;w?P{s~ z0pjAzrUe?1ax?KEkYj^w&asl>IKr`Yo{kXG1&V#29- zf*E0_DH>(4O$gnIo=>w;l>ahB-CJ4Icgov~RXF*QlhIjfDz%%6SgGDqFv8#5C~VEO zrh9o>sI-0>+`Oprc5}08gLswAj^>j|Hid;v1W_ZPncKm}O`ux~K*wL!tKoh<%`T?# z2;|O-0NCZwdCly`v$(SUgX;R2DE?xa&aNsOd00BiM~j=s`}xY&zbI|}Z>3+ptnT+< zl1wS4>w>PIlypH_9)1P^m{XtTgo|SBP1P=GS;K%Z z!&f}mA^(EXBEGU%;TtXa3FTMU+Z@~A%{Y5Ew(qH>O%jAva`#=bPI{5`<6+VwxGh5k z$6CwO4p=o&O+S6tFd5^AcEQex4hz!W!ch12t^lubp(~li%#m8dOS*dP`YYC7ty*3!S@0UF zPSFBTPgp6}A)y+294GAQ1nu63*DREm16~O<1M~VBHXGgTkKf~ioA*@>%4Ir^s>$Y2 zQNX&<&WbgDU%aoz2?jurz`rAyU-E2FY4>0(Mg5JEYs*K^bHM=i`n&!xg#+B4yz<)j zO$JUTjh0i5UQfj+#!3$ttGw41Tr1p1!Ew*5u<2`nVO~Z1U@zq~E;?kj5>_izsT~&Ry%u+=cdf#@ zu|+9ei7AlwVcen>5mFp_3|F5`NAXPA$+SjUJ{w-4ALRLbNOLzx&gK^vxapG>5S+x5 zO-{gp7BlH69l{*VGB*XG_6B|Z-2}!kYjI`$q(ZLGF+ajt(vQ*c@)8yRS$AVl@fanK zBpxx>RnDv#wZgqnn(cT@;m4=h*)SP#D(!Owg@ynt==?lEKe}j`o^c*-ZZ%i=5mn!8 z++^UR+=-JOJt|<)2xv6oV1#JkH_E1Ex|MUnYLBrhsuhQ?Yo<=0D6u!uxTMNPR%Q!C z&Qk~!<^`YKhuNRRk{dFrt z`22J3r(m+6(KKQ-kz2Dulkd)vQXX{wnneuDLgDbv=13>r@+WzA*q;w^zv0m%RS={c zhtKmSv6FG=G#o)KdVu9JhddtxTf|Xe^7F?f^>BzxU|ffPn_7ix1U%=i$fIwSNS|X8 zr?v2P4>wtMEy9ykmC{SKGtx7PrN558ED!ku=wA8yEXD2an-%toJx^z40foF_eOW&; zPdFMDAr|wNo~t0}CKr7PR&5o+xgU%@c*fs9?Mh7Ezsr(wExzFK z2GhrFOhDKT`#$e)XmpNY0H@izx|;*1t=}>L-}60hF(7gZ!g4g8kIp#h1+r8dpP635VuJ%ROE7t>$=;$sjG~_ zBSR=Pier%a)|+V6P=Vh1F}c`A*``KP?|Ey|iB|61%~v{-i}w?#)0C?O>S^%f+gk7{LSj> z;$f^dZv`9oZjKFiNt|VatI`EgYhPL(!`>32Z3^n@?dtJ@TJ>kh*$Efb0y}M~wAooZYWwlWaqM)K`gMU#bIh`3L5nD$@oRbhTJTqKg(cR) zBJNOOxK*_-K7>}v`7{9;g{;^@tHd(BV(KNs5B-jhzKfP%c$@ZTvvp^HV!|ED{Wt1F z6s>7p&rH4&?nkso?DNFhief*OQ&lmUGH%b0t43a0#xrs$M|Nod$vW6w*70D0zV3Fq z{NUZJGztci9->!TJgNCmcY>UE$#;|6EJFJ?&h#AoBPe8Vb$yACN`s|%@@!qt;Mu| zIc=fy<9de-69e{lZQo;;Gsc#MrWDdslV+FQ#a(U#;9WoUtpko2SX9pbLEwA{a6Tx& z`HbOo=cS~{M^RxabzvaP^WEg*2>LDqMTX z>gGd>7KYV{etfx$>%nXxxOUZYc9w;+TDgv_W3{wPio^QS#c?I8#qAVVE7k?(0kzJ{ zyI5Q|tcpLR)_IjX#hFgHhAIAtit}QxTHBNx6jt|-fz>@Kvr0PIs4z#mUu`X9rtJY! zV2Gd9(q$DIT;~Q$S+BciGPHw_JI06B7(HI>w%D!P;v;S`%pI1;*@lm^0F)o96Yv(= zv{*|SFL^hOClf0aDu@hepPbo~6z|yj@o;z+_umw37r0Q3(f$=VM&fNg~iLqSPIGTjsM}%!PceDWXjuY13H|L?Ek_s>be_;LDJ<9}s;*VZ<^Fu(Er`uf914?c;G+hF^$Kw(sGNw z|4G;X{kx6mZltInS~W43D1zyE+)uR7W?4Had(-9#C0>pA;JL1UD6;~Y=U z@OOftjAFdr!^UR(%w0@8kxeL~ z-fed$Uz=s_2i5FoxK2WK#;#zM|<7le;zXsWOYRW`a!&$V%R#iYsB0FVuZGv zsB6M#XpN~Lm(s`HfJ?XN$(A0KAc~3E$V}~rMCA{jO|K~Nz%a`hOuL_ml1awnE41j+ zitjwd6b4u}Po`v&HlJl=V+P${aZ`De&QzRv2|5NpRSPqq-8|;wd^$#L1{`{z!n-&Z zh3=pm9kJ=0Kr*5!h==fXaHZNgOSrc|N7{Io4u@E49I^G9V?v!r+1LWRt6JF~M;W}v zi`v;d=3ET#66w((MgYNV$4NYefg*AmM#^Q9AYzrG=YWqKLxJJ&^L{o-C}%912hI>s zybi{Z;$(XQA`9^(8Mj?IzqgwV>9f{q9`XsunYcJt5zPR5{?mNT5iWg;e zWrrrWq;Mx{4YTn@+jI$E+#qiS?J$Ril(27?N&gKeTu*0|!J}-6!RQ*jJ{Ip`FK0g& zvBT~#oUmCCMJB>h4W^Om+0)wgb=hmSZLu>b+tAxF`*-~p;pibSiD4!?OSkYA3enaM zBurRyY?4i~-Or<)=X*Q<(>r**_sY*}ZO`%7uK8uT&+`637{-hUq9pJ9T8S-h5zd_# z2SXqyABAH>y5cQd|XgPs~)s7u4>n!n;zMR_5 zWzedE3H~=sp~}Q;uMVtihpTxO6p!;f>!)POGP$t*K%|CfVVJCE)Bb2eeFA=IA*{6h zX>->a4{)trp7)~2EWL@bJWbkBN%0S!%gzq$-qV(Qd@t21Xns@lkwSdh_#+KNDMsLH zZG41A`uYl30&%<-z#CiT9P*>0b2wH%sZoST(m)-j1pxL&;d zqwbm>q>I*b24C}{DoGIw0*e(HCZnSTgGIa8pe4-;TX5v zm6JTrPgjIe^%6Ey`MBV0kt=lJ)?d2E5{F`xAdl_!23fz?qsx^Qe9;1_Ji*k*#Db%^ zj{)LQa&?f-!CP6T26lvXej5KYUTLgghAez!LrD-E(Hs%xZ2#3idWU=4yB+%V!{Pq% z9y)vA2|!Zx5eJ2{R^IMHOEA8&sU$Ef=hB`@ve^fKI??&S5HGO!92KE+$B>>@&g-k~ z=|%5#Jk1l1c8je6;#0u>=Y*Zbfq0P=7R3)nOwmx1!QGx=2C zm9*?Zg;<-tq1SPwf*ugw+$9C8m)1E(mBT)8SU&IQIP9?#2`a_Yco9a8u&@)4n=H;a zfYeA*Ws50W4mpf7;i;QaH&?7zjjxPZ`;1y-UOLUxSc7!zaTX!HY0(PgGf~MB#ItzS zD&cmPV0nsw@?|NAMAw=GB!|{A3WC-d?h4{LAGDVt7y2s~`Pep|)m%Yqur%qcu75nz zIRyEaea>o-4+_f;_23IOT}A?$2HQeXqEKFPbQR7mRH6AcA0Sgc&@xXyOU^O2HtHWZ zFf~Z*%)1t_YyxX3mTf$xOc}>Z>IO`l@N+v%oHuep5vvLX5Pj{Ppl%SOJ_ue! zi6_&yi2*ae)>iXTIfYipiJd;WzD?(_x`-U5KW)Qbo{mOa_j4X2G3z&bmiSWuw7hnz z7*EHV6Yg*OsCRUHxc}-I3V!s;Isl2GVY?H#5f0U+=b5uC!^x)Xb+Hn@_AFR9R^WNc znc8eD3mY>|El{w&g3@-l+Ih>lG&!x%R<#vpLwj|s}j^a$oACa5n zaIDIsU*^fwY28}=LTr`GU#PpnG+i%rgZNLk^uv-1{t2(i8L&O}U>eK`!31he)ZVsu z@+`w8$2$n$D%4oos48$)HojP zTT7{|_>wqjTz6NomDIbw#dgx>bo1z?CEDgj5>--)<2~(ve=#$-3_y^gWG78`?X#z` zL0|w3W(L4uF6L^fdMah?5?;oX&D4XaO^^f}>9>E{>HMR6+Bs{|Z#%C~AQ2k=-Z|V| z^n!}Bt1KYkT7{TE;VXw4rm#DUnG2Qx))F{*A4OwK8!hC28eE0ru_5IV1P1_}JpsZr z9TJjB4!huq36D%_t-g_qb*J)VfCw}4WOAM4PEgqwFG|Q@NdTwmu$P2Vk>YT{9h?mW z69E_WrfHT`&0DQxgJx`3d1t9R$*ihC$&Sg=3*-O@M@tUCX+mCA@{eoqm8q4Id3k>Z zmqOoj+>deFhQvG&XNTzyK0U=D*NWxDKqBr6(Kdz&gOK_r(O@w1`aHMNh0~W9&O{QJ zHKK~7hO>dUYVS-aiIV1`8O*cV)WZ6%X2nNVaYndnfzBJZF3R0BW0mHU5t8iGZnc<@ zC>FyW;h|=85vSSQE3AYG`GA)R5{SlJC`d?v>COve3edYHQ;-2rra+vxJl{A+mQN>O za3G5an0wjs=_n3oqiL@55lxm{laA>q{)o0i1vD37GmGk|s1A+b`3mVT@<0c*t$o6U zCdEWZb~kuBSbzlOsOG$^!US$hgL6GAEOO6Hl?p|Z$GmJ!<(U+-3UEpSm8Y_s} z1!sF((Ji}~^-Mz4BrcH)^AvUD>bV7{y2ZZwD>3~rSh;dCS@*}fA}5lQYoSm`A< z6$SO}ctrO5IbKTUVv0VZGh;S!VElwVf?715fSFx3rPm>wwB(e^N$Yk*MP1BERMtxh z7-*Qw>3pPS8J;TB14C$nc&6e5I6}jx-ALLDbY)c_I63eCt98LPpxdos+~FPNW6}t; z-9R%44mxK)b`Ou*CofMaOzZDW*%}TB1x?{olbXJ1pHSP}%ew}IL|gy~zcuYq%eSqkje{R+xLPI0I@r8EY+1fXwHeHa_a#~hG9Ic%`m$%F z4Jv$bs}j;CNwvrz^YEsDBTMG$n<9VC(?Xgp&ebMcpbh9CK|eW9n=~5F*GZUlWw^09 zTV>I&Q&fD;*=`t)$1ILnrDj)Qb~PXB1RZF~0i2MNs5S?0=GMooO}A;nMB=c8pR}Kc_TG=WZ~HK2B_WO99p_XvE~3*fZ{3-e0WRP46F2>|Bq9NwJQgFp}8j1zL8Uj2BdubvwQHbl#AX>?iY1-2+wd)Tz(8xsG z=Fj7SRBbY7Hyb?!mD8q5CE}q*k`~xdHo2c(5f)hn<7Pq~;OmdNoEP&t zzQAe6H^-N6#8n3PXWO)-EX%L@6FNEZ#i;KlZINCrBK@)3xu`NtG3TjEB>q6(&HbyLe+< zY;mbSKKoH1Rq4TGW6*3}gKc6oo?L;aS2zm7G!1W*ygfMDeZAiaUhW?~Z|?_h+9!MM z=lh*g5}}lsO6m(hLwcH*EJCu$h-BR>u@`Nr=Mf@Log)ptc|8DGd#G5{Ug;Fe+9zY| zp10?IxMPyfGk}2f*(wBrPsTGKOoi-sAV5)-8H~d$yY6rCrdX7ueUmQ{A@fDS#ma&0 zi+y&8xv@xtt42hnxNUhN*FC_rViPpmSM4Bjv5GqhJfqA2Fy|MsZsvsrQ|{ZqieO>Y z*}za?G7}is&vJlXcv&wTgsC;UB6w7_baem9l95boDYK{Lpy6i#2X&=6c2*FUlSSp^ z@T@?ekV^rb@~^`i$O)HChm=Qwza+@@7Gwum^fxaE)neZpK@;3_PTcf+<76a67L zPm%#>7ALd_tCGmCuObW_0-wd94V0+ok$f72Q=2$}N;MaQg+j;y#$e&+tTMFon@JRQ zBe727sGo<1pFO}-1I9l9jVDN)PA;C(Luf&TfhZlVl~%zdi}E#9ob8XE|Gl$wcDl4p zKk#CGfDGZbg@kXTd35 zI!fA6O=xHm1zv|~pD!65u=JVE_XY{D&M-qJ0i@q?Q1q*bvDq{amRnYj60X&;9T+O` z2Q1A;D{T;DIXD;M5=;dSL`2+9ECPHn)s}+t2hZ7Co?JzA`iA!w{Xj#hIdL=TjXrMW zwEsG$GdqqzPQ-!U#|t))Ee(QiAN?p5xR3;?7U&d1EU`i+Pnwg+JS?-}sm)|dr+mOvxh8#Xz6rrZy~7so z1Z8|(+>#!O3)Dk#Ez-e2AWn*kd4U@+_`4~OPrNnY1q9goB7zXj_L{T42JI0LBG_+b|3GadeLVEWKX@q4 zNUiEL=O>|g=tpMZg;2n>G$ZLn2KHa1;87Ffp?$51@eiJfvDn79oY-gJjWD|z^*HMy z#{!k&m#Z`xB~x+=icNxq+cDRlh`^op4|?JhkGryLueG}3!*n<@J2nsy?!_MZVdWn3 z(K~oUYZ3O_Coel)b@sglNmZaG$ka(Tj9YvMEsQ_~LF>Riek&-fe$iJLVWvzLMp(HA zBl_^tVA+-}oG6Vt~ zb)BjtN>o*T!j%*AkOyxs!{64p_ET!DUc5fsIomrr)VPzFpd=XjJ;c2ei@TX59Xqy* zJjwUZDJ~bNteOFt2qt6kAJF17Ng)HVHp6&Afna#2p7$7L8qFwnnn~+n=1nV3n_@?e z(k!TxwkjMngZI%5=zqkeP{{VE*t^xtibc8dxfAfeL4{M2-{bu?Si|^|dk~T!13Wl$3%hkpQBSd8d`-$n_btVTAERx%8kobi${E`C9Di+|Nph+hf$;uonS)0`_x z5_ExCS%dom^g%ARqxaV)6(=n`m~@g|)GzBQaHln2iR)ja*&@v!vLVWX2dd=TVC`M* zb>ac3O{%rdr#OJ$!75#1h43M!fcU_F2_N_?-~)dld?+oEvV^3ep{N8x1J~$2+?I?V z$4?L?40jp|@v3~6eK@aW}LkXu52EH970>X{x zCz*;1YCLHL!QMr%r{MGxhz~_qt0*9RfKtaxbr{1orm+p+?GL>O6sSEFwpSnk66}Q- z^%jCMDPM4{WD}L*i41jH=D*S&_5UGBfQ5fUo&in~MEu*o{~iBZ{6E+x!)PBoXwYyC zF??g__8Udh-w>7JFG$?qD2o0@tsrKUK%wG#4*J{>e7bqLZ_%YNQyOIOgGghDd7EM8 zZt$OyzU!bf5+AdM+%U zp9(sY{7$I|$%Cw&q5qfz!0PTR#C)zJV6B3Fi0jJc1OS~rXz6p^;3GysKbot{x&i=h zUqC^*o=`9p^dyBwSw9HV>4yk3zeXf^idIRhux-?$)@I;H@S zqiwM_2Ee0aZ%4@Jtxs&5=y8Dix|y`x+QipyzkP=r4?g!X-ywnxEHMkTe2OcD4v%>` z;F7s!!Iy`VGVoL--vg5WEcke~DT9trfH~Nb*k?gkFMg#x@Kcc0hm@On|MOuq6iiTO zXCU;@mq!y;%+ty0oT0o`4HGd^Up$+8ekO1vESZG?$|vH2G0ooD#4M!F^Ulk?!)|+j z|LCXg*^dyy^wi67@?7}W;P{nf?Ne|yK86!_R#!bXWnWG3yfabQb({WqNdp})s&lyO zj7YD~@hgf7T(`!DH^iNz!@~~VX1dSYyI#@d6I&2GT#l~Rw5Lr6ZGQ|hRk4Cp^F@y~ zCslJ4IexXj_q@Az_~J+h4EP}JV<0Lpm`>?8%kv1dD){7>znfi(`Hp`T4Z5<0Wga&MsPfWq7%-~C zco2u;+%CssD{jn9YJ&c`wnD~kBF^*@?MgRKS!4zBsjp<3>Y!)x)&n;URO*>{XuN09 zt5U`?6R<>X31puaHbh1E*75EEqejnYZC$}0f1Iuc`?TKS*z`br~n z4)08Lh zyDsk0Iw~HU5NIg2%pHJHdV{t9o;MN8j9e#V=f%Kip4}dOy_qrdA&9#C&lR!9K3wOB z77}1P&=Eu_vGxHa|Is~4e0WE2{EAR37iN+)16o?&7#mx;^fZdn*xB09w>g5z{?)yu zC=@Dm&k)VX#B&#bTj-ge++acP6sK@oY@^ zp$-~RzAK%_BiITs>PmiNLR+63)#4J)(auj#hrhKTz@@^$|d`BR4Ci+PyE&~wV|Sb7u~0E^ugG07D{vn?!8R^gJk-b zCY~z@-kjL}vq@k#Gh4AZRwCHpmb(|issj?k1=4q3Is26mOGa%1I5_35q|_%8D$IUvl{?ioUY&m&1PTf_+J!-5J!U2a*}~%tWEU`<)00z z{4w8`;m%ldI*-DOg!210g!0o6OXK;?LAxq=Qee;3L%f3hFdq7xM4W$4A&mT$zR>y! z5}+z|Gr{1QqhfXgpB05(uSP(Zg#>izU_vT2iFVL(w=w};RwN)N!l@twhBi+iyj(&$ zRvnN@{c#xOqHi{Csj$N;MNPlFRSo0VtwBdrE5^S{Lj^8i(ho|OP&&TfrSdTy%`YY65>pZ zY@NAqS?R*%zT*C*1?=q?FPmfW3YX4)kwsaY%^`zJMR1l&i1}4!C%=TQYX4ki4{rKs zC58cS_YdmXw`+~yx8DNHKzWtcYpv$ivtaqb!|wn4P4x0W^pXeaPlm*Y<9eAr$hPLE zo;$st+8c}<-Y`sACWBgWYp`*WBn547EyLc#pN#4E0Q;SNdB_m4Ifc~m~duA`JS$|4QP(er(VJj=Z7Avp!2ALKM;a#9BtAsA- zwp1i&#t}6^xuBTAmb2=_EISmeV!QF)hOJ1%K!Q^+29uX87`HnH2^T(X%^H-b^d+)- zRW9#IY?K`{3->i(@G0i@71w6;ekD>WVs!MMb-5f0WkN|z5X!x2qj01=alu+robf+I z5E}z2S$r>LaRhvO{69otFvI=!JcP@llZG*L1ISa%TK%M6(TbC)w>NYhRAFVME-$$pcCl>_;O7w z%<30)3U!IS(phwI&V|*dly_IrU@S<$xDM9AKy(Z_f&}f2r{@E)?(O5f29J5dX%E44 z2~3uwJ?m@zf&4{NpmIzs7)&YY*`TYD-eMZFPUVzq|Puh1wnDI^^@{uC=SFW|FBnTh3A zI#F+sz!_>wf>K>D=+)1ABC^@LK@2UOWcj4Cf=RP-ZW)s?kaloHliWQRr_qNPLRR2W zV1{OL7DnlrG|$AEgzoB*7z~5@|C(kKiD@-Qh*!3qCkkU| zC1%Jb==#Wd-q)bTd@pRJ&jIqHaV~ku`xzJAeDi!;GV9DgYg1grv?>7bLhL#d5&ucd zN~H7IcUh!`3Y@CqGJFz7Rlw)vQx)R5gi)c2k5i$%oK+R@S-gsnZpW-L{)3-e$*(=n zuGZuW7&bS1R$kXxnKKX6#W&a)`1nuaSxH2nooR_ADsZiiJ@QG|Rzt7Cx14lUw1twb zhGH%FXqUd!6^!C@B8%xzO0W{(q9pqT)2E!--BD;cwXx_kpM>5R{5-|Yub0)-n51Q@ zm0V(bR$jh?$WR=my9YwK-R>bng7|k2Os(K!!GcL=1(Rmw7?>o-b{GU@;Z0)(8aNU# zU@iuslOgEV7u+_A`4X}qe}l6`!%duU@ICmZH9m#)6oRj$V;m=0Jc&O<`08^RVf5LR zwNJLs5b>BuHzv+afdHTtq3~cjA_t?-TXDYvK5Mrr32Ox}?hrRy%R%sb7Js3^0c4+z zGJ(Tzq6|1x;uZ`u38od^xRwwcDsRMLigow|DB6b6HzAjOJltMxF4L>LH7Hn4*)#Bs z6K~Rh{RAN=A)7c30)j_ESMV>6RmPC~-DNfz7zO>XC~P_R19Xh*A1F*9NHCOdE^oR1 zbr=CV=iJQwnC1^5c=X#*kG(yrFoH4|BD@5$X?&xm0Z)=J(8`a4MX^876RUds581a4 z1_Bu20itxJ+>_31Z|X|%LvrJ_x-@Ot+3T|xPfvM}5GTSB8O@t7ckKgM31J0TfjlFh z*j|WntKUiRB2Izz=RAXbr5R0ZPloBd4})m`EUWNx$#p6?m8!87I81Ct^t+FMzRH_7 zD^QKkgG~MKCeWEhLaz1a!Y4f{dZaZFk@5M)z->k_kX*>SU0O^~Wb`%976e%uAQcsE zK@*U6g?kXy%x^+ezQ`^lJ1^LUB;5btZKw%8+V^|W{a*ARvlmI8{bZX_wcS8)l?fB> zP{EAttkRZM+QIP+GO9a18vVXt!Pz4}zB!G4or=Yay14RYC^oT)+IPI=-s$zTh$7UE zT6P(QG*iaj{vccG>N>VrS1P-HQd5KjVfx3a+wALRr>Al<9>VGF8lP$W+eX z%zPI>s#UP}N)We?5SiN==f98LKH6bcSx(NodlUpSDcv?cfBcf{i`yq8ecjbQ!8ltH zzsuCKW0>R_7xH^3;bZKtDL+hKW%ZG%2H7haWx&Bed=SoMH@W~E%Y24({-i@z&4l>{ zyGMnh21{pRuz1ip`w>)4?UR?Mzu_PM=)C>u=w$b_nNNT6dsFscMVj>WV^wf^J8Bk% zsCD5}JilV__`M7|4@ISc+i`Gw;O!dT4!qH>bQe}!4POsd1*e0Or@`P`&r!}j?Y(|H<>6P`!hBRYx)uvTEp&3*0Qd(9F zS$XdkjT*j{51F~mTH`H(n)#u+==OotUXVqj#gFB~JKw3n5$XCPh71 zm1gwhbDXhPl=}n~E-kM#V~sstV)kOs>M)zpVQ%@$dbC|Pisol(lus__D`Cy7yq~PB zAH#gbT^RkFcdyl7t8cgNtBl>1RBRRXMW5&E%u>JEy~(3|QE&9wi?#ecLO?D`MD%~$ z?7!A@`~#W=l9t=iJCc?G%5s468-o`TvqrXt1OZCHb|6II|q z=)R8HZ;X&Cu3qArGr$~~TR96rqjU&r$2a0;Ga^^fi?D~P3zjr-_c=4qFn1%oHo@I! zsDD!zBlZ;&hl+vjozaYI-7#Eaq@BSKQ^u<)=wUVKoA_OQf<%HQGU~94Nsmo4c{ihP z>JK?_%->1L)&5Ot8tuS`$aT+YOzS2d@0B$ygc0n?%E=P*bZ;Bg-0?l*_E} zo8z13;y0NRjB><#6N?5afol~2lyCHF9kN*uKRL$)y7usOp=bD}0UN$4{DyMHRv&m_ zQ#EADlxmb>Smz`P`!{u#CS45_wavT=Pybw4i6!|htiuyz7tYJuGM6w{SFQT!1T4cT z{$(`T6-9MH@r>3xAA6B<3^3}N^BW|@jfZjwpF~^=vud}*T$DE{9J2F z)z+!ZxG8fru~baQH!uuPjO|S#9Z8ek;}i`1SB>%~nbW(lXIbHveH$q9H`V{1lGP;$ zFqvV+cd!qWx3%@Rg(;Pwt16;YeHZ9__+n73ztzx= z#Jx16oWfN{=Qde*fF3|@k=D4T$z>W2hoW`WVY*Eg9;OG7Tf`UoGL0uU^Q^RKaI2-Z zz}N+xHRfT9+YQQvU=8IknVe3?aI}y5Rfm*ov+&S-kaA^aQ891l2?kTBzOZg1j)gfE z)&nMAXs|lpD6RTl$aA3724(%N#&;kJ;_)D&Pg&Jr`kLKtv;`1-#q3aU5WbJBbb{fB zFebw;l}*9tT5x=Gd@0lYRT!GN!DSU{cg+pWYN1~6Gd6sh6$U-c@ZJGOwK&R50*T^& zPCBP>5$zltpS{Hcg=Ig@zcwn2TGrn^*e`@7zRd$^w*=DeT##OsKzfCc6h6<=aFm78 zOnw4SDpfFfcG5mP?e6XFck=xlzcOE|jG1b;ch2_Slt82J)#2?O;=d)sqYCpt?3|n& zos>bu3e_RLKK#ew(NBlP5M>3vUdPE`00(9n7N^Q$9UtxQ?;XDE9{t19(@Q}XT~njV z;8pDx?Y;fZ?kt#8YaY0eSXTTy3$Uy<59FUt_RcCmmemmLg*Q8+rWj&`B(Tqcd!5Xs zQ)y-P4&UH3@&i&|s>}}R!jLvUX5`d zg(3x}!^GE4ut+#V9`$gz7hwxI|ye5V9W_|yY^8dpJOMy69Nh%0df-uOvnyS}C_H?Raor%@}01Q%z zc2w%h711OHlUYh5hGBt2uvZ00J3;hu5{*#ZL63q8&`vVGN#o0_Nl@=Kg7ww)Rd^r4 z-qjd)qYu#_8DnU#vnU+OmdAq#&S~P*jMew|b~=Zroz~gUXEX?yMK+Fl@kQK&+nPAH z(yJwO{ZL0ouxAlYM78tj#15d%?9!<^ylq3(I{jG~)gT;3VAreOU0=%lm*fogK>P)- zcB0YB590T&T(UiUQ&zelWmR2QP>rqnMH~(K6o{5bqRr;<;ty&&;RpgckQ1XZ~t^@d{{e-l)4z0t>7F7p(j13yAusV)X`?~1>`LYjYVcsx$z z@t4=yvg*j;Gk=0cz-qe=DIUx7S)Tm9SRAgGi^AB&bT9~pQHJr`i!mi@)EZUN<{iIE zjVkkiTGoLU8t!`GYdVBl$YM}FA`$7+uqG+vUgQ~BCRh_52x=^|7jJp|vb($2ektyx zZ#v=@{C3OnsdXqKjfY`66WBrL^t3H*k;f-{2kny?F#Cd0<3UxByPdQ4-hMg6E3hxF z2=B+e!!v_CU6Ze)N#$m(+zY4+>((?KIQ|-$%K$|rku?^l>uR*DD@h}Vm(d8)UkUlz z1}T|iw`O33mX#hF0fxaYKjg1U5 zMSByblEkzrTAc>DO43L^Z^Dk<^f@y^3h=RIs0P+&$%VC~jb^TeIQYdqZm71}3`&2f zSv-k`ycO8AnH8-LrymK9G8S~z8VOz*P3CJN33k3l*&>a4$q*Hrb2S1N&G}k{S$8xY zo=5XH%cR%u+zp4}c+B#`S8I0_W><3}P*8+wQ3u3OW&d|MLatf6>nRj@7?2^uJFw*4Eb@{(t;LRKM5%{<-wOl!)z5tp44li-q!Z;q&3w z;15aMUm_P=c@?SSU%o3a56F^JLK^jEFBzbdg`=T8h=$^V97VZWJQ9Y1Lh2$5#49{` z+25V;!Ai9e4X|3n(Gw6B7E}`umOx8Th#{#Y03adwlEM((@md2KM5D{e6~%}vS|St0 zMGiqUa$?4KBgEulz+f1(B^g5nH9=s^Vys%~d}2xiwDQ9+{Mb#CYl&(VI|-Y%vr~f2 zfi5V**fz_Q&9|GE8~1z#veonf;gtbk>W6=uor_USQ_a>j*z(s;- z1^Q|S1JBHZ!vsBojM>C1aa)SB(R47dma-{z>vD8}qNW1fs2Ca7r+@sNM?J>*OJdE3 zF*4XQS_pAwkDigd68{Sa*N|rz2EQUC;4mJAm}3|Y`9!6bT`o)&0al*rmOEH2+E5#$ zR*=?HcBMSJY&q}?ReEQPSumbbF#^O|B}T&MpJcF`Z-V2uXnxl|IcdLbxR~b=BkfQ+ zhznxR%E+)GP(2gwYJ%x1l~QZV9w)>}qk%qud)8_D2TE}SVDYrt+XLX}?8nZD9{|3J zeDaw(&@W(o4rB#}zfXyt&`&-|-n*02t9aJ=`OH5xkVAcmo6oV5wq(O0Oh+_`EFMA} z@=RCEi99CJC`4y2CTL!`iMp6p8)KZ8?9n>+q^M89-Q3i||KcyHbzV21y1I{|7 zwDJTecpr@?^3-d=2_fe!%UZ7b4t`xri zIwwzr=6|`zPata7T&h#x*6hb}Xv%wbv}d@0`cNv@yBYKoqy>T*UWW0AN20T(k{nX7 zZg*@*`*-%(>l=yW$I7q_g`$jz4GGY8XR{n79JHm}-7Q z1ec}x!RvYF<=$bpy}y6-Q}^sgFnK@qtZM$MG2^;nBbZlEho}>N^jEu^Ww0Se*E!rR z8QWK7gA=q93Be(bSBm8$!HNnakQBxt80PO(Xg|WOQ`{J)x3dhfCRQhsVMYO`SYTti z0ZA&zbK>mv@jjeu{*fmoc~=QE_Ax?Vca)6Ou1O1#XCCab8Tbwa-u3dVv<@Me#qgYj zauVb?3h!_LcgmXpiAYE=XFZe^lV@#}FItGwazvKgt>C997)24r5XToHPG=1)#dirI zXMF)*neh@jVzq)Z7%uG;oRugD2F8X2RcfnP^2|%|>gW0jR2ZeaSCI$rZcJ5Kq$;b} z5+eVX7RhSB-Z06G8ulj3S#XVubsou}A#f)W>(05}iaJt63W9pXc>yR@(Gu-3)6paz z1lJLVh;-KrN6Ql*D9As9Mt##^L>u>oxM2=xENU16U_TK6g7+hF+{FWt7^M#!JdcI_ zeoXG|M5vVU=OP&ll53nWkS)f&7Y86cRxdQcI>YhgMu!AOFh9B zM0|$iT+^hQyJP+C6PMK9D=mr2r2YkodW5IVtcW4p(>ArC-^<(RYq)3vM=Jfd_sYa> z1zWyN%c}y+^H^i6`p1$3{O?L(keVBorN5O2Q;cUV<1N8~*n6N=RNyhD1R&03j?`6P z3=&+3g)i0OIf_KkDv5TU=+9bV7pq&Hb*BAQERlW6B~{&4kqQu#Z3zluC*3+}06nK? z&`sdp>&`rP?MC>1b>b;01?x1AhM0)FEfX0l;$DU5xu? z!m#zjwk`N)QTXX38ShPGRG2DZyxCxUl+2b!GN06<1mAv}8|_xHIz&3Z9&`?lPTqD; z_x`tI{1V7=ODrU)G(k;GPgQ-C%i5K|=ybV#A`N*+_IFlXepzNEbS&=b{KgXewXMR1 zS8(T8dwmyjWum(C97Mw;y`c#D*1d;tryW-r`Yg{5JuQ$AEkBOrX~DvgIzjkxL?4YZ zM&Zbx`qAoTA?#RQ)i%{D{)c29WG0Sw)fsKHeB}ye4|Y>@NU;!LiU|jP_?jjPr_JEZ zF>_Fv#5`34^y%*01XijaAqj+e6FHy8aIPc%~7^iLBl8pre$v@DeuxRKtH5R1dMH0k_3Bt4)h7>0exd z2JqxmN>$hvnp#AqOX~ub#ahq_BsRb<8EMh);$$lGfhMCeVl(hdX{`dKxhYkvB{_~E znQDATnN!KWJuq`>1e5T6gc@>{6LtP6lArC@%S!xIxe#quHb`pwC6=qQPC!Iz+Yq2B-E3$X(1!Q#;QTG#{-SQVMJ%cs$UH zB1t{?&7mJTvu!s8a0TLjJpvVu6sr|8#(4I55Rr;Np9B5tb2(;hibofT4!(6Gr-@(a zwoS7te=J3|B2wxCyt+P9K0voKX$I0oY3-iYp@BM~!&vM+^%2`d;j@iHXUBpHnCQym z%1F$O!%;(NSPukVSZldpGdN;>o9 zp6XGoEhff(I|4a|U_XH%lc*y}hRZXST3aQ`MCssWp1s?EAY2GQe4;cHHjy$p=+A1F zM+WY;rQ*`f`=x+v`5st_%gZ{m)N@kTiiRa%H^Mq-Iz}gr{JS!wG;8?vq6TUZ0>%OnwixK0wXd>2Z# z3+H!Yqot}m9X%I!f3EPPGq<6T>Ai{jhi`jRZ#)9e^6?;zqYn`ZPEh&b;g}il_-(@2 zrY0I%+ZkvBaU+Axvk0oOGXCf2pQGAR?MO)I!rC!Y12NU9y31xQ1c9%}QZL&R_cwT) zg!jdMFqDyE@fkT|50yiRxQ1FQgs?Y}A2ND2qz6JZihdH22}my)P2iCdswfBmpk!kP zq})zjYpKb(+O$MjzU@(#3lj9$om5r&&L6$NFlKdK?>ze68CGzbzR`GBh`GUnWKL}@ zN~a=2>|XlDr#{`Ur1rCd!C0?<^HY7wo*go{ShGH^ufUky#}9_~!OR0yAD$@Md0v2b z^s7*yHu@O$CWd{R2=DqT?pyJPDtD8=xt1;R+-T1n`GILq*@Sek8V>(<1`G7Y$~z zUK)(ZTJ_oP1#W`#Lhk~oSk<{erU{zmTcEQEVW4H8lP|@SU`|&8m`D{*0#86`)x24t z)Bjh4`xw|=m-!w5%#!u@(t$R9nA`TDfI6z~`WC(X!S)YwEFR+bSU=#xS2BKZ)}z8D zuTPGI_E4@D6*Ssrqf1Yh(>4$6=huXj=mtk~`orzny(W4&(P@1ux2>w==2ubb$ zV?J`nUKv%n6pk^&zibNsY7P>Y(}8o}+1uj|)?WERMmleJ@}0~}__PA^E2lDXya-d7 z^tI>+h;=+7pMNlX;C4o}vN@!_H7FS_Lx-3oX&=fW3J_!4;-jPb?YYC6-R<>QpG>9ylE$&PGOkdt@U5)6XvyuaruYuT%BXl$f3R%1GyRw{=Sne=q(4JUAj6lJHd~`CTU{f{0 zxPH!YfCGhbKJ_|a#Bx=}9V_yKC)hO*D|EghkQZfUh zOPtw(Zw_L2EdUI`Wy?Ss-&+lgw#@=~^syAA<>$zU2rE!LOmr!jF;r$E>kPL9wy98I z*uEZ=8A9>c@$;;~^Y?FO^kv{#jSA!Ucf#)NMZK^p<=x~JxlTVNWX`V3v->C@boyAl z7W94AVpwN*XEjQD;8iNDhrb^kEv%pu{oU!|P5Xp*;f8N>;7^C8;HSeX&~>;h4cx>E zEC6pRlp-h>($F40gdZpyKZfaPv>(Ea*#q zE$zz=4hnr0#nYUb4V?g5$Y0ekQaXx2) z^V00*I=N!AFtxdxr2HjMQtr=dUVXun`Oq{gqq!DNzp-yWw%>H%q3ERP&vMR1P4jjs z&KJmUK5ugK#WI_hr8Te9{nerfdMEJaG_R|4<-9)GU=<}ax9)q*FFc$1{m*^=_xt?s z_xa!Ne-_ODo+ZoE@ud-+lyzHUB{4a)0zV&vEr|LJy?~K&Z#)! zcXwayKl44Cm1ckU0@`JOtPcnN9z4OMd&9mri=w~B&cX57TLW4qAF9?@txj3h7z0_0 z)Tn9GCR#}})O8k8h3DrBCU|tIi;;l4a=}Dp&w^3(?g20kr%d@ijF5|soQ}paP)s;b zkD(H_&fM4=Bw6J17Fo@kY~d(^Z-Sj4J3IgA5_TKGH{S$>**opw>`Kv-dzf9MdqI%c zcaDPLk=hV#_0jAbTf=_bM=K(g`-`-J3k-7S@Ml7hTxuZ;Xq}mC@L1EW`d)$8c*t-^ zQiwZ!d_JA{GiDi?AT$6ZiR{r9CRSzt@NDg_F{G!1XK*3dI= zT}RA457v_|NH<`(CelaBFYd`ys@fIb6HI4PuU*oU(w$fA#w0+}T}ZQ)k}l-yLd7nu zj6kXvaoBjD>D(Yn4^qDn$Aa^)_rBp|Ml4Xr<((=h<7iI3s9cJbzku?=N}sLXS6o`4IXT1+EK&Oc3d(cf6 z8p!bh&)P05+c<%Vi!{QlYGf#X5r}Od$}))k0>SuVG7k(PJzaidC^|^Y$c>yo1Z-QU zzpbURtk!v-SW0_@c3w`pRi19VXmfBk1|kr3-k@bFB9Z80)DvW85s56TXTJ`RQsm!) zKJh%N5(f+HAvHI22#6q?_5k-yv*MPWr%8nuUR;Qk5ClTLf#SjiLq{-h`w|DKpnlrf z@9dm4gI256VCjlm0p1}mBD_%GKlMhF{>Dh{Wzk$xY8gTiF1-bh6qJD zDu6^8eQL~q8FFXgbY$SE4JL+T)w1S zUlko`%yF?wv{2P2ro8A4VzCSzS>((Az2r|20%+mAk@(ooXUl+!JkCE$i1B(9LpqNF zhz7@=%pan1Gw@{mP}x49rR^DsC(AG++Lb-yyh&>FbSQ;$QGj#vxx<_>iYgo8x3Qp~ zTV=l@X*y1$4{kA{=JkMZm8+&d-d_M2I+&k>H z_xF!}>Yn|0(rNFWE_ud&{0cChqkL%}Ve&0^4tE`3s(YQaeH4Kl66BQ=1>xw1JW0&( zel`hXy7v7?iU2u6uOuj3wwam9#B|}81K3nAqddb`qbuAIhT#pF;S13w&IvSi+?yvi z1D16@ldk9RNveEQAK+wzK57%pW7d;90i9L^KCcHi!H(!-83nao_khPj~@(2M#E)kL}*Ia#&(S}gQ7h1v*?vm(-RCQ(doKfcJ{EKZ34$1?8D|&)Zp%~GaOd$Wm6x`F z+Y1;}w3As~OWKv)fs5|J4t{oy4i4Ia`w&3_KZziwRMA0JfYhC%DcLB438wfDQ7lar$p@At!_LvIyJG3j&U z*$GFWi&TexAwY)WFkNdd`InXNe{ji2djxFwTo z4gX0;d900$OIpNFcO}P~!Xr(!>!Gz-8dYl|Zh~?ffvXU6Nw3T7xT17Vkj2TFxH+xj zpD5oNMRz;_kpSARyQN`6K8# z?%&0|Mm`l(x!TZ8Te@R1)bo_D3Es_*Ux|N_vE2=Pds{gn9@(!W3u<%yqD*EY6@$>K zz8820Mlp#Vm}M!4C93eSWGCyy8?=*ITYGmxUOCf&j*+0WEh8D>M5+MxF0jEk6fz|O z&5t-aCBt|EL}WB;Mm^9ZGXuX=em{qyXmQpM>gJ+~@k zJ{>^jQ+yM+o5ZJv{+g7C7$~SNRk%%^x3p35{z{5=B+@}V;x^QSSWqHOT-+VbDIu~9 zdl3$k>4+j*hm#O4Az^Pa#REUySNQ!GF$c#I$V}-ttghs5tPP0Q0_fr|gB<%MZF7%2 z%IE;Y(SYR7-_O6QTk*$qyqeWU!wLN4(lEO*+gIouLCeJIcIP@S^s3+&UwCL48XD*f zB0@LCf8P6Z%!tY|zm-1hvh+7r3LKS$sCqulTx^=sz%*{io_Uhy*pm_$dr$nF<5ysq zn~kP}fs?o9J*2KF2&_|jK|%_fq=*#fj+8$;7o6Marb2f%F~ASGeNT>W%Qrf7pY2W* znIi=93%Zf#68iujt_l?4OjS9#~QYvTpfgZ;=>4>obQUKL?3 z=8yC0`EG4jO}x_Nadf*}!G*m2X;#A@8OiH}I01g;jEyz<3jSXcT(y zOL5a4kHzpbYhkQ(O1xE?1WM-Snu|Hh0L_X$`hKe{)Zz}RsH`+kxGUjJ<2nt+98(kt za6G9&&ZnAsWoQ(o1CzTvR4%l=fsgEU>n_g@)z1qs^(>d}%u#FMNL~9ayd!rHj^1=$ z?46vRJzFY|WtNL~=DQLbnEUN2Al-d+ZJsU;J3l*J_=C}Ws^;bkh4yq2B3nQ_+AAVOFJCj}3)OS;g+hD29;h?tj8N`+&LC9uoR6mvxomucm!6_o zj;9m&Y)w*@)yY#2XPSu}pDs^gx)d)k=uhz}3%j6jQxkErDxJ83Tt08vZ?#AE5qn(o zJ+KR4TV7W>vHM9^#4rowYqENtGp};$usb@3GuIY}AY<1+ghs0s^^0o8VRmUoORY%# zIHcz`z2A?JU$*>SfBiUxX_+uy7|KyuZrJ++pln&!jh(=Lf+~Srxy@1DN zXIcG*4BRk6QnNDv(JPK241lm43Zmt-Z4J~JpTISPZ^SR+zeJbS3@T=gWJt!sqq|V1)gvzOd5LA+xMm*`ho`bEos#1(n=|dB# zn&f=~w>vZf@Jj<55_*>`BtqqaeA(xb==gi@^-0?<~-32J^Dpj(N2ec@CN8^8U=Y=nvp zA>cw~y|vS&W)@QSj%J~B$802E%Rw(SfF)4f#3MYObj81DVpy}I)aOlZD()@zHUxS! zk}APp1ro&Sg7?}k9&~cAs3?R$)zFY_8o@Jlh4oUKObVdDc1C>WBDrFg|U#qAgP*hpVkgUSv0bgdjg72(P=KTqJqcz4#^zOrGg~-%*GbmzEp~B z`WMB@MGShMk`os1+G9v&|tDq&n!|( z>{yn{4OP4^{>*}dtW*T)Yl{*=(XLsCTF6=U8^14=sIE~&X;QaD`wYU|s$kZksoY^E zdkTf`2a8%rRyQedqumqf;wcv7oi@M5b%7up+Uj8DHBgXh?iwh|>ZJdc@5jAJ9FEFv zf>1i?C(}vkMNq-6{)CIsi=-+Z-)Q9Bh)N(BOzz$%B+Hh4;S(c_A?|(d-sd@l`!0Xh ztq*UIzIOS0*ni&ztoVgFh8Jc@Q}exW|Dh+Aqt|Dj^~eIAI=M4T5su{PLvA`Hr;l&c zF>|$HWj~_!zx}2leJ=#K+@kd@CF!BUxo=;(KF4`MO>f(b>V9|skK5hvj+VZV-P%5n zhWN;)Pr5n@OYXEQx3s_d-m!B+Me#GSNTsWI;M%wrJty0+IaR*`>&js?wDl4G^NHMS zOHL>+VsPi8#L`qns*_TFQ?{n%ls*OO z;)f0~q^+e-^Ip5;@m;liSS+NlzQ|>sv^_WnYbOO0D`4^qYUtQict(+NJCX<$G z-*vV1F{=Wl4R9p%x?&EBi_oNK!C*68df9|N_KMh|YEHyv@Bl`}?1n$p zu27ACyhfTlso`8!lSLgFt50d(=`o6ot(Xr2N07fHFOok0KD^@`H zaT7<^@OTKIV~CB)LR#mf&gry@dA<`OT$<>sQi%K9(|jOfltp}}Sd;@y7v(H~1DJ94 zK|6DBsPU0|osI;agP3)CZU)ekkwofY#Ei3n&a=$d84^Fqlc4qF(U8|d=Wbr^5mLO~ zMT84-FqdXeA38jF^*9Fd%Walg_Uo=T0-e34e}?t^WNTRzW{urb3XGdQ2}b1^!stxV z8%Cw~T_`|SKThkQW}A1z0r=|Tj=%F);9UV!{{aVPPby|NLLelOq!lr^LBQfPivbuR z8%XV!41V4*UqBg3%Zl)0hks%rns_KB`@A6MBLf&&sPyHTGC78nsgozkP#3V;{;kpt&TQVI&sU zcKrlR{tIx?DFTikixOXWyv{UKZMRtjSyw0@wrg2xbpU&A8GQIY8$7e)w4j4oVi|M{ zm_8FavzfG@g8^U}bof3SIEa%U%HjIbxu_dU5omSWC|^70GNhoFrBjhDz4=tE4N4|dk&?DzMiqjv zKuVSVd5e0QE2|1Ww=|l$7V{-mSv0qb9ln?4N|-0T$^scyiju6`CITzEcU6mSVmd zXIGKfqr;TaY(Vhfewg-oyS25}8opCZRv-`u0H$k>*v!%p1H{rpf7*KpVX~u9|6xzu z4hPAlAVIXO==NJu`*0rhLU;&81GX#NrF2q}ED^h%5MCKtQ0X{E*beLtQ2R(x;#kW} zg@_%eU<@?43F1+2FzrYE7PfqwOfjHrILHziqe+fRHKg!?<{hB51hzz9#}^~W&UyT@ zd-nFY)7|a?stjukxaGELyXQ-gI`(ju7JdI{)wpi#Bx8N$2J9$#me`1N5 z#+fWJllWPdm^tjolJ7ViGqw#gkH4QD9pY@)%rJgFAk;lt=SA(4llEIG->{mS58s*o zj$a-g?RL&iIue(U_?O+i)3d$99h~dN#^xIPw%a-G9PV}wclJ7``1#T5I{&=8FYUDO zqxp1t@RHEJX6AN$Brp$!o2#a9|FrXx%2>DUvmdE!oe|K_RJ6h1?Z16V=-OO06WZT9 z#7S4; zV8-|Q@E?aqKOIu>V@4w?Wt3$hyH|d!A|=WvGn9SGw_3>!_He%`#UrEgZ55) zcNf>>={jen4lc>l&F?t1V!h4Bt8R0`$&*JGUmJp3WjI9k=AYIqF6Up?EoSFmHY{%D zUmkn-oPXc6*qwiQ;&MIz_|#&4{>9>5_JL8^ne~BD{?GP@HI8cjVLdM&_-BKS=f@5X znYeh1ZY}(w(KRvN{lz(|@aVr1v9p_h$B!{>7f-sRye8<17yWGb=Zn!+i zKR(KHBLDo@6(jtknR#fPZu^Y(ht;R+41EWxaKkD*J!>Bv(`L2yDF4NbXpIpd zbiuwj{qQfI&d&Zt3YQ-9ql=1n%-@zQyUiQ$vZi=Eder*zO*<9mhvq5-b2 zGa)U7V`umENk@L|MZZ~WK8yoqq!*7^~EOUs z{$hImj`5Qa1-#v6?gMYe27Jm}J$1`@Bfey3|I3;&R?uHqL&glS5AcTT`7gYobr5{Y z8m@2Vzp#euoWpjGPKblnAARQ(Gmd4OfZSWDoNd$XLs|F9CNE<^o){o+)SYqt2}A11 z-piLtfIcy!>AX2(pEjOuuse*H+UxeqPWMM~-P%`epRU>)+9B<9;)B8U(Q#YwhAdv^ zBkt^X4mxxx6Q4Htr$crm64S9J+7Xn5<9p06O}jtwp>3>L$Iji(&)xQcRe_zs&Q9%5 z8;p=de`dX(id|TS2?T{d(=~v`|33fsz5f4R|9}6psQ&+Eqj%TJ{|fs5)yFyg|Jvhw z{r_ju|L0O}uRU%CCs9B6F`P7my-}|PR>BX#b{7KHTwFlVwMmpg&h7oU7mXn4+H{1; zd#=Rwe(x+8Q1KQf<0hh_9NS7o4ncu;z{B;peb)W4tGBwM^5eJN)6>2G?R3w&pbb0} zfJkK@d{2>Iyp#ArwlkS_&$*DNcg5TE$m_@;l3d^(+;GYkTdY`;E8y8>hbVJ7ksH+3T|xPhIRJqn`y&0W`cMfk-BQHJv1AgRb#IbYXTm7HBw zHTuh~a@yTLI((_?(4RRtuSZ#YIg0vF3I6{e%-$QgzOOkD&IEOV41e06!c*xeo>+@} zaJ2h+zk_z2-50M9cQB!EBlxGZ2os<6C+sMmbc3(IM%SbI2h3G6M_nAr5x&CO1f~to zer&(#fX~)RunLq9kGUgClopS)%;qh@H}_P&JW~ufD$|kq08I1|Jru!%mcdzv>l4IU zclLz!qCH`?+MYla%C-bqW9E*)>&@H{WaYW`gIt>m+W~7+VK>OtF4+uZT~$&f=M~5* zVqVsrQ_5SdW(#>)UCDSIj$lA_m1_>))R@Q4Ai9`vpCCMdH3HWqh$8<(2;4(etq@OP8?Z4_;DJYp< zWKc&Ff#rcHhckn(yr1;8+}Lcxu1RgheFq;5l?n9L((il(Tlw*KchX2)W$U8Y9DcfR zgrV;nb^NsQ0}ZVi=s&d)wk{E4Y*aj8rEx|mWga6AN#zd3f=NiG%lFkq% z|Gn3j{ipqW5&Hj)M|u7K`n~@Dv*`byTKfM-n@=CN)*r7u0;`yN?)Wd$|7YSPKW_Cd zE#e7 zA$2>5AXz3@4M64ny`9eCX{UAe^BKAPVG<<@nAU?ZZj&^|7%W+9X{lDLodWp=Suc&p zltx?k25|-8RY(x|(vmKXA^sTz1Rt%)I4W|gL(+Sp%b}h&x($X)zDWmrlOP(NgSVlB z7jhpQ#OEpGsRICmL2|t$rg=l*T`4H}IJp*`Ob5K_MHEh^kgElKCG|4U^u&bQQ}K67 zA>6JYC_#GjZ0UiS^K}|eCeaAI;GO{bcbD5~?!20vgz+f&z8{K$zxC5;+;5Gd z$q%A6Os5|t5R1MaaS)FI#BrGQ!a>j;_0uT$K7@b%*1L*_;Z5s99JZp~xOI^Nn2fJP z50z|vK?kcy2M1yLK4=f3k0Bb3d_TMn|8^;As4>LDahiN!4gMab(eNht@n$d)Bm4ee z_~+kxqcm;-5hSD5hp;ux+_r1b_GOe_fqUwYVT9`8?=Pv~Z|CvlMUqTf{m5;%3G1}J zy7m;>?_8yT+woQKzha59-qm|C^Ikkj{+8fN54K-APQ{phoyJ)_Av!q+t*MYKgF)1% zRgpXdRx2=$KG1(K4twt*0a)E~PlXlji(aRbc#t)qwV?_@O0oh6kXaBERf)ReUjvE@ z?tmFzc6-U_BEA%ZO$I@InoY%6jVCNTm;wl^7YO}Rhti+oQ6D0Ct0__ufq6C+Q?pxRN}Z1?#ORIOC1hV?gaj>uGZd{$|tBb;aQY z>U`JQ#3pO_*V?*Zm)GF5ESM<)2F#u*X*SU$PA44ivHLzH=u_sP;H=OiIR>5 zdsv3g?W~a=ZL5bf;tib&7;+Hhu&mWl1xq>} z#Ohby+(rT=k_%WPS~PJd?lt+}f|-_<)IPEuEQ_sVS>XQytrhA5QcHfs+w?Eb*55%; z%ldjVcw*wcLsZ?3X7IQXe7_xd+k79?A3>C@2BA0&V?npttignFteqxldeb!G{x6Ud zLwdqXRw6%jo1JRGU(~PgToJqwL!#Xy?qRNsFcW;l;A)_T!Xefq2Jj4kUIlM_9n{7* zf)%r02Q?)uAmbSdgvoUx2zk6RKv6>6ltBQoS`*0mL)@3?HwBp9Aj~of>Q9?)6WJJ} zjn(wIL%@jAQLy`brG307#KWqoFU}t_K!M$@wXtVGcBSJNK!~!Pz>sFGD@G>RYkbpH zwYP&`mdBUN&0rbEvHWhSC*z{3PgJqh6Q7or;QdRB*Lo%wQgEvdAIrHuJcooYdauwY z6(K>5d}{%(Bgcsj6CqdN%u-)ALVRWAFWItK*^EdHG&mPxZw&jeMb#TEI4OE^#&Y)U~M6nl*ta^5?#&NEn+9$LaU}BLwUah(oQmk#0Ckn8qh3{qEIt4kTwN< zgHMT=x`j`ucemhLHwIksdbqq({WaBG_0w8*967dl9`zp44>u_9U5ar zWWNgH`dXZwatWOzY1=1=6!u)07UZ~!1d4&XL_Iok8gw;vd<}*|2!3%D0-=KW)U`65 zYF#bK;{k+O#bMd>^S6@DU3;A(g z?JE;su~bT;y;}l9FL%`Iecg_%tVxI zBNi>~CfEjMq`PWaAHEHK(L`EbrW?~TWgBeHg!s!0q-X?^K&7mvufc_kk?DXKB`XC`#MWFL%$GBgfuO2rg@SPAM}l8f;A6Qp z=Y~-LLJea!40+aB`4FZaWYEVze2k$W1M116!V5xUVm1sx#UaFG1g7fcM978V` z{H(0%dV+1?ZLr zAe#DaA!2XW1H;f-;Q&mUBt5vpGlWxA*NVvBA_@|#`XU4?XX_iSWLFBaZKP|v1}~~RxJkhot6^t7 zQ`=h$e#xg*tL5)K<}$@}I-V0JoPzbbV&=h;RV8huOi+lK3NoGaMx8GL+14U7Lk|8f zI5HSL*ht79iCW=UTq*i>apu8Ie>o4xCLVDIPzh-BU+vzkBb@4}zP!74(%Cudws&?q zr>9cLHuBxt6zO(reXZ2(e*5HQr+f7L@1paPZY?s;O_qJEHdl(Q3t`bq`gAzQ?bZJL z%*~L@NdJdzFYT8MuyeX2?$U=Z(OA(lM3u@d53p`=)U3In={P7pqL1;UQTOIbt)0!_ zw3@$}pJl~PEktqQfkE9}`8qK121 zi+7OAD}N__(+2(X^K!GG-Y)rZTWB0)k8r8R4g*q+0$>~5(uQa?D9r3DL^Y558_FE`JbbIj>MGK8%T&^q?pks z7>Ah4*$V=6fD_2h1->NP%M*dhhk_*Hk;KXS=;k^}``NaBa)8vS6ZxxtaTMEp&_5Ud zl_L%DwS2p#U%>zTWHNsC@Zt6KbxVzbRp}?! zqd^k(yJdABs#*_at8toOz7^3Z+cp>S+HTUrBx$H2uRRM8U?w11&?L^XhdhbbUY1Rx z;4Fm*%PDVq8BeaJ=WtJbsHSLsiJ_GZ=s@5E4o#2+k;4I8wLU~2;o%1*VD#48& zAcrJV)9fVusOo@fGDVIO3)%KBwQzJ(dnYN7LQM#2)nuwLsvmH+&96ERwf^>teuOmQ zbh(SqJ^Goa$#t_OHP_qx57S;t=WYF4(<5uP^F&Yz8aA0a^rDWDBGW;;cRG$LQ56s!9L?EUzlVk3fZ^ z)4iZQmPQ=nZzi>5E#B}*KoT4!X!`Ufn?yr`Amm#=f(-(a60+LI^yofB9tcO5Q!v>O zEp}L?<)TU?MVBkrgx}WZtloMuUxSS~tG6D{+hB9v2J_CK^>n$y3K?lYXToG0_mG_A zHc|Q!et(e)$-2@R^)qkPQ*jQshQ~He;G%qAzulQplS^S%d$-j1g6wPW{lD)0zwZ6N z?(M(P{u{USho6N1pFDY7?Ekg8>e_#=Z?64M@c7>T``-WOUjE1ku?psSsDhn3*+uQ^<$utcH2^a}8v;N5h zZN=hIuz$4E-tTIa+4!bqS*TA(;7XEBjLGy>m_h#1y7~fkD(~YldwE9B7N=J0O#Ej@ zbPm;{$?NeBXdLEgB>I3q=V&52h|Oj=1TVvSAQmI+T#esleSg4gR_2t&GWn7B&DoOGC{r`Udzu*7w_kXtk7 z>fQMPm+${i9z9uKbNBz%%_sN!{~zQ3izfoqSnfU#l!Hw_jlqEro)iXg2ugX_r0f&J z*%hYblp0a+Jer;l;$E2lOKT%;aGu$e>&&7sq0>*9!c0gH# z^lSJmc=2?7O}W4whQo*);NZJN6GRvnGSdrF|6Ve_^JF^e@59OJjWn%pmJEAJA)Kp@ zNLGi}`bjDe9^$w4bBH8Z&pw0$dHRU4T>18>X0T{+hNl`a0<7PJddzg7I>zw?BOt(F z#6PV*hEA>52JjTKR%<+@>JRZaoambZ9abxtE97Ou97I`BJUWWaP!3{aX zfhCFRnsA=UNQu)_FhrJ+Qx7GqWh2PwAU-{(iGf$2evK2KGK~8gjnFNKaVRht_DPO% z=%p@OMjv6hqQ3GX5(7~KQ#>lFgd^q&d@+SlDpCoD=kcZBdwAjy=!yE5(DkTKiGtDp zNF7cgt*%NO94sFpHwYTg&#u`rRtKuPi6)|Jw6qqZ(G4wBWLM}yW?>_s`vdfrk~<+@ z4Vt1nOm~xOY2Co!G-0$Ov{(g)ARu#9@cx=CVgtNc=y(ITs04;aaBlk(6J|&t$sN?Z zhz3I-%}HHttvT9c{Pat!)slAlyUA#I5-dxoxkl0fmtZb8VIjmV4FmtGAetAHI+=-U zL0T)pzr?Pm;VJ+v#SGLrI#ODUAl)2^+6@+rlXP$`D3=PBB|4WSEDD$j6i?pq7a;V= zUV?x#TW)JuKeO#^;s_4U<813WnEd=Sls0<-P|6Q)A6WO+bM!0G6{F4|DAHH~>X`KSilPm{4d z)S_{HR0Fe{(6EXciLF9hrlA%6w!9=SzZd~y)I+m4_yaKx+Z(JpI4BFGkJF?V_0jzi z7ySc(f^AFuiH$%SD)K!|L|Y{`K&q*AlX3zHRj|iZGyubbCN5v}F$6Ilgnf`B5>g1{ zJRHUoA*wDWGSNx&G3rg>;G=B*Wx?+5{uGs%q!U#SWhe$m^xzI3*5fY<)0byg`*ohPDJ1m z5Q4LMHtk)3&_qI34mBop3>&BZ9XQ-fOUZN3%+ACow7vQylk0)YR@LeCqd}ynhoi~Q z@$AZY)B*cY_d6=zoi-oH2{d^s?vrKFS zQgZd;0VgK{RB=AdtVMHwkgP5Af;Z2=w=^(u^44E+ z=4#(I?4~x~Xj*XiCbu@)tXHB?waX3bfpm2C{_*lL=aLwh1Ff8uZ)c@_(y zU4-$VUOUu#yy8+kKmax7PbkbVTizy8E<&Iy_NSQd4c7hQl|LNHjz1DD7!=L&eu#mM9e zqECRO;pApKj6^MJb%OZ;a3vcT}+uU{FnW z)g=#7&(f(_@#%S;uh&oH3e$8Xe4|kr0;12;zA^x9>MtSXfX^`)b#c7|P||Q0GzfP9 z4JLV+#*>>nf|cIQu$VRL9Y8xwCa2`e6!lBM74b_u+o7FM{Gqwi!$n8Om_B?z==^-v zIfS?@>?3I_Wca2;seqVLO?%ZhnGV5lAp-?W7=0WkphAWiKYBAgp4Ayv0 zoU<+|dX6}x>4BK&Pbz7W*5yGEmm4_ibCxIRLoOp?yyyi;vD>sZinQWQQ0m2?b_*y5 zMxTKZaODl4Rq+JUPe0g_y^sjttRkfdbS@gIKO3cONcSyU5NVXwx5b2NXqT2lu!MsG zU=^0PcO`-X;g-*yhmiz)9;UPcCfq?-h2`yCrdJ@`@^UCSW>;Wx9~!wMFrbvv`^e2Ipb#{d_Y)-JWWS zIHPU73B#7kf+)s2Aau3Sq=yT3A$iyKs4}e0w``|y(>XK#bif!=|MEAW5Wgncc@tRm(_O_ zs;jEve?l_k@VF?UGsoJ`z@iQfl`^s5V4oVY#YUWWf?k%YZyqntJVcEkH~=Z=X(Vv^ z377LwF#j1I??}}O&#O{XG)lxaa4l$ADRaeS8p}B%)HJwUM1#w-X)s3wd3St4L=IAb zmZ~9!em}>6)JZS|eRVGxOoyXv`3}ZGWc{SlP=5LNjzVK*bTGi+l23w&j@a`LCqESN zzZO0KK_E%gIV@Kl83Y!c; zys~JX7t9@9wp_-Z`sYvtD!76?&cbt(mB6nO_2>jEa~!#qod_!qv01S?zukAALzYx zQ##E9>_*|J3N9bzoii+fQA~f@i~4wWm3v(@S*`%iA3qBEke3#3H}Qxbi|(MWRNr_m z5(uIz@y{>c@+r>FBNweL63r$k(4m10}cs*_kAkC6M&Za z9);XP1zH%{bc11ddU)460(wVVY*+r6=Imv7?y)MItVPnFVMvhZBlv||F+f@QHze-Qwlfh|@q z{L5eJ(?%BkRbVNZoIjiGCwGGpG3OF|SQz;tsY9FK+!Z?Nur!S?1Szu!#f?8}EQ^-+ELsZ6Bz?7`D(yEhIbsssa2erTuYdm1pPTCgi7jdAuNNA zbUE9mOl5gaPor^K*Q0DSsX&gk(P+#u&$U0rJl6{5={?57^UWWvYaXcNS=Oc_L|^TB z5?K$7b%ABCW zx1YNw=SlI1Bv&OH**@yNl__14i9+$#`*$+7Ji~ z4V2fIAkf91;}@FUConB4GsDnC)|kP~9M6Otw7&p1ScyMH@|oWX!^iD2uhXlIFKF?< zJX?i7l)|j%OC+I1wvuvdHg}cLZp>^dD*rgF)!e39so&DF!eELnjLUx%3kvSSrzo_e z&{?_XWwy1(yn9uKp%OAHt&`ByNL^fL?wGO`G!zNR$I7*qrU8pr@T=)8o>prX^* zX&F^NxfDOelHxDfV#1*rI45KnTBbdr<)XZEU7*zneaDPXqg*JF+;m``A-ZLNFb52{ zQ!>$g3)u*RXaGtmUy{Gj+CuwbdE(-M}D0r$kbh;wrXLaD1zTg^jzx!t$(DdgP9J9VPjK zqh9|bMtzRF8x6-3xB?5F9v^GgjN;_>y3hyYrhsk7#+`5m#Xk z%?olOZz6whcjssz{u)LpcyoWL(|ZpSS+g$)== z-{tBlwNRnI!*zu7g|l56UtUSA4f=k%Cl2T;#;(HAWdzYdHXF|tHFp$a`z2NmA@ZaK z1^=JDcUx{FNfreAnO~8GQcVI?5DGVnBD>hI1D%(&$Z7mBKqx{ClZyue&wr*HIqX^GuoTX-w|YY=?_oe#mTX~^+C1WM z&iNDE?+b@d)CEy#0`v@az`D+{5P|MvZhO`xr0xOY7+g9_Pjc5F*S41B!aEuBynz`m zt|zTlYjruUHCEx4XX;HYMr)J+sTyG$ag8y+KvQ4GTP5qRj_3`o!&R=e^6_2&zOC94 zD^4TB+MZ1&lMLVD>T2T8kGI;cKi|5ok2;9P(c>O)=~7H;#==6p>bg4j-n&x->|@&= z-Nr*VLfc;PEeI6p4>S$0ua_E@H?(_iP0qcyGUxUOImb)Vxe_%ht$3_dz4P6BMV(6q ztp$CXHv|<+f|E zbGStdWbQ^4K;*`gt5`xnXzo!!NJbW-Q5Mr$^$p4bTeGq#y@c4$Y&XRMs5?R&akjg} zkj?JgrOG20pvjf!Q7I&1pLtPCj}H_tW-=ToKHBgyuo{_Mp?=rqFwRu%eHtbwS=c$2 zSL}}%oE-HlAts$I`mKRjJe1n|5(!F?%}`BobYi*W*gf|G`4M9k7*ZPM;OmxvMs8UJ zUAdeah|%w4c+C=9V*x4tw}A_eAWS##0o7-6xZz|*<9Wl@ft1A{-tII#V}M$OonB(4 z%@3DkM}U#@^&#T%OTSFx(WC32l3^qa{AwoizQ7x0v)lkK6uOKrYKF!IB)xLR zFcgP58?We#j&)nrpkiI5kQDX63?^d2SWmfe1Ir5pa@b%8p^!f}oVq^LsZ5bayV@e9 zg(G-D1j)pAqAXoZ&g2vmO!azIWXmzjU0_IK!F-EtEigI1SJ30Nk}j+{#JIw6t9LOC z7j;y2S=f6TuhomwxW|&c!1hD^A@gbjD2tsGLA%v9+&|4(d}|iXadm6V7!o=xmI<^P zZ&$p+B$2yo_IKN@Dt_0dNQ73LKulYRS{bi_eYi{*JfpD_dlQ|Z9>Qa`PNDtGTnH~E z)K8;;j{We;5^`#6g^XFh&0e?LEi2O}Wz2VaCB%klvn7J-q<-N#K1*`~{Ylitc&{`% zx(j;|CrGLb7p@3ZlP*uUVxC;@Xy{9}!2n(E>8r<&0d$PE=|Va(7B8($WWdCMR9LZ; z69}&Ul-8(lg?wkI;)8`9O<1*vytxxyTW{TKh*9kk$vG!FWDEgfp;D~I@(iiDq61+G z?;>b=bp1S=QZ-V6W495zb>j`>9e=FgkgDBXRg9k*Rg9e(mBr0uIzkpgCZn;H9sScN z;fjV(b2c6u3<#$^CC365BI2V@U?%_dcZIOseM8yr39(;#lee)voRG`1Gk*&oO{qCJ zJCy$~9`t`{9g&UC73}S3N*gk1{{f?`b7{+xmC;Ou5YfeT=QL-bXAU4khax6R?X=gz zq>s&MUvp1<34p2@D^%KGq28cv4G9_pLAoY=L&=Ji>0x{#_c@~_{w=CCvz_ICIC zd%OMJ-Th8?=Xam~{YL&hzy2X|PyhV*?rx|5EuQ;)%c3O`S>;VSi|ftI|GnK^`0VZN zcEwMe{Nz7*{`b3s-tc!;_a^86rE?yUy>f23viG0p{QvTcZsGN=bk<0$<|ptd>@8>oK|zl zrrq)BTaZBfMeMuof<4BJd6>h9zI%xeSd)wN@z*;9>K|RYc^9&{!&v}^Ts(Img?$IF zejYzNdhmF}`JOO1P4O0kev7HIzeKCca0z#pG++W8?J|HIXa$plUcp()6~=j_i94uw zOWfI+j`1Gs(6TuZZ1U_Pj1!*adOAk953Swdpue+|9*bZn9T~zDN#VqJ*zN7G3@*(R ze9cVO{sP-yn%{@ED4n=q^VM3%3p?6_(7}O{mv;wro^as?qv@Dmzf2+N-SNXFr9#`H zn8PPD!!lZrJ7}uXY@9xNX@O>S`tq-jA6YM-S@y~4GrM6bhRWAJJ$w4dvPtpXN5?PC z<&GbH|KQc*m!ls~UjA|P?Bw|L@cRdkPahe}9z8yJ^z`NE$;s2vlSikg4}N%bdidjm z7f*>=ZY+QL^1;*N2QQ9CN6(&q|Lg^+_XFE2$i1+eiRqZoh-QF)m3Y3FT*Iwmle0w! zejO1`ZL$3E|A=L2hEqA0GbW>NPW)JPV&qA|fzMg`V2CgpPcGcK6N}fDI56p8<)6uA z7$3iQ_T2i*$)g{w5iSaswAF@|wy`J)ZPk8WK6pqtfOfP_KUuR!FCG!jGBvEL*A1&V zqG#7ZVm*Ix@&xume|q%SwlxAHi^PpC9iK4qr4wNh#$?w1{(ehs3lHrGb8W^v6d} z9uUaBu@YnQsGQNzMx;WQ0tb8*cO(okkGy*Su>u4+e4%z{-gy!BpvSW!Z?qU}ggg=l zXr};GK&rop1=-knGIlm~Ap<>H`;ir84ma)O^V)KJSoYXL)u}M2GhAQ3c=hxsXBMo) zJGo68#w{r(3zlZ_y+^QE7)T`EusBH?4VL9jU8 zD>u>4X`*iz36MXz*O}Z{;QgR2t@xVUIM+?IN(K4J)6+*UURozliH9wsp zee&O+)u6W}uxo2u65ynhTBP2;aSC+;?Vu zb7=J{)zh?HW3OecmqAwap6}hI48{e!CNo)9Kz-GE>ir0tTM3GS-B!hd_gY0#N=Zb| zMHH>NSFwxxRbkoJZWZHqKDsGxU-%bnwrjV=SV>OQ?ZlR=vy@5?FNSkBCz!ZRm(pBG zsogSUz&-u*BCOHfRZVzgi_BL+AjnXEAa>4xRqIEs`n?!3 zgQY7XDY**ZvbPs)O#&_-gG^tb2U>^2-Fq8G3R|q-WC7K0090VpAWXd3HD<$0v&gqC zCpsU&^bnX9LSM3{^0ebmU)#*x7FY|UVOatS)-~LPK$HMhNzHu)Wf)W;9(~1!pq$E( zf&CkMD|f^mlE#0|HiXeK7&-BX9y{Yy#6py=(n~?^0CEf*wTkdcOlWWw5{3QR51nbO z))3#>t@6W6UqZTdp&CK7nZ9pJZF3&a*t=~BiZZ=?12)7jO$st? zSS{6oOVmO`-!H8n9S?2=6VIn7RJ3{UF2~BQFgpB5GRWK;ce`DKdk-9dAwV4;$pKfE z#sl0j>Flj;Hw#yd&2FdLD|SLq`zR?*N#eyL$M-JXrl#aPBOGlxWE3u>oO#TcJDAc; zpc!Aq9c5kb8>a=I8i5gn zV^5+>lYKXnHR@dNXRi$3ft`b(h5|}^(rkF7K$L1H&6f-azt({dW_SA}%hJ+?c z)ObOeauP?RVIAnv`D&BTu+||DYXWQ&v+_&p=)#@6yr56{pp!zE2_ttLCv|!Nw_TX5met5waP`cjU)qqG=d`R=JWQFEJ~Lwp9AW zNw|<0u2V~17^XC|cnDA!W_Q2R?AGTWv^mlzVPBnuILDNPp`WMN7N?jvFzd{-{zsl? zY{L94BrE1_Nn<6GOD|ujm9V!e*A`!#=TzeBkP4t--pcrzHZLPoK}JmfSI+`4B9x?i zlPQAuwsAjnpiLriBT`g0z2_G9A!QZhJrgSMxu)3?*oV@ue0y#I`a|J+egzTyL-9w; zSOp|VaNXp)E$UI$Y~{Ghr+g-EHd)=A(PV7D-Z+ST7~qamyo8jl0XHk?cXkLfkI)g3*Yj{Ys4w;c2t=+1CFz{qM8?&u9Oi&;CE3{eN=&e@4Pd;mWQ+h5kPS z@}oOc{D1npgWhNVpIhet(`Ynax-9G+V-G8HBLNfnnKN-aJ3FV#@m(>5kW2KstGhnY zHGT28I~@Owd?V$L!XSyf@iL*I?T;=Z5BC2T)<0djQ9QYL3yr?KaAO{ssLam?K-C?Q z*zeS-D1AW0AO9Z4%(-Y1`aXp-^;p8pw#jngyMo7#W^Qm4&KG23Fh*~W%&A9cuj7m- zyv-9rH89oPG5Fd*P9pzcheI-7x@lQLI3k`l z);$>|ut};40V@tsJCbN;hy5IpAINj~7-LXEt{jL*v9ohUwyiW`U>J8Ob3kTo!WVQx zL>T7Dv1sCB#~Lrs;dsUO#*24sD*woupplB;qyz&X?a*1DN^6+clgNoLNI^WP_I+UG z=YIzFg9E;42nRhQCw@C36L`e9k^yLXJ0d(EV-P5t!UGB0$SywMAlb}qFpUmHxdftj z^6;z}VGM+nuv)OVPAG)<3`<>Mv@v}Uoi8E2)nlI3L}=-dwA|sn7kMcPx(~ZHz#PxM z2WKX8vZbE8aqOJC@!^#dfe4VD|FY^b#)M>7jwd313I`)OczXd0AvGqF=`9S-+#xTc z8o2WefMr;>EeaXlvb0jqMe3v&9I?74=S7AGst1IT@Q#_IBafjVrwI!$LZU^G>4wNi z$BROTYV@2)58RXutsZlXO;dt>spTR~D1Jm!N3fOv=yVnQDn57nK`NsxQ~ z?D1pplzsN6wk7=h{=v!PN5`g!vBllo^oZ)#V-pFFXMegKqc6@^`r;X?*rihzwKmM~ z6V8l6h@Oha@-#JiH6qwKoFuTP5XQNPC6(3+C6< zbd)C1t+Nn989*XVs!RX|d1~;q)FX2#lpoO(fzhbL&z9SkeUvMFp5V4(?VjlF1p8W? zt9_g%ny*Mi)hV^je1rXnUP{EEp*QXC2qPV-8&q%ui+75r4kT&L8+bEBAnp zvv!S|asViiwr#_0jvGuz3vUXSZPc+OJ zlyR{?5_*Q8L`%ZBn}k!zE{%MR2sE8|;Y;R98MQ_d=$2hS56>N8tFXTb>8kw`om z*)5!Z@QMb_Or?R-I?LzL45+pl*4!a_LM5jqq7zBb~ftUV(dCh&7f%;AXM3z^ZD_(wm6@TVS52fMqZ;d0 z>7oz7(Vx=TeXB-TV0&y@w7_YAm9z203Uvshb4Yx`Eu2(ZQcTI@Z&e>oS_l5-4d*kn zVNVc_GD8~MuHGZ7)fQUF>-u?UaGrH%Bk}aC9*O9-7%ai615E3%GrKTKA;^WAEwq23 z3#*ENwhrr)LM>8)q*^>5L7Y^5>$^i8itnsp9zv(6DCD4{Xc0Oxa)HwE5(}3gvJV$C zfQ$mecUEuE#o+Kc_@JhvA%ag$2*`?24&YcQAK)KwQH&UevBJ3!KBVg1b8o6bDJp(C zsKVP4c!iP`ftG6Ya%mg;C&4S-g;LNR4HQmamQgt^*oKTmz7c9>%9$1|05xCXR#aaz z%vpg7aEm%8`koa?Af@=vvQjef78foAJ)ss__9UDWWhn;U&mO*YuSa7qiTM+`3Evw> zPIR3W=kkC(`H)LARQxq+;nNY(z(n`(Y9g7|tt*syt+eMnfC(=~hP4ZJF0gPNlO3Kr z!CRe~Gr>!~Y%ODj)V|?yu26!Ptr8MInf!(NX~=M<#Tc;ah8z{UKjSgBf*n<&b+BdS zIXwZ#gaN&8dV-0(`tDAz(YBgBF=&@wE#f8PusEbW8>$%gtqIez>|$vCzG$pJPrRuJgaaZ1S~ zU?$bx3_!4iiQ{IYqegX*#QMb(^a&~BEmoSMJ0>KBS@?UN=n#%0f8Qure{wjrU%v`H z`K-Z-Wk}#emoTAE%Fr>fRDXp!RS?Q!zzw5hX3G9bwW^?1or#U>SvdzoE{lrGAC}KJ zM?b-&lgWh?gmEpMAsv~7C^&E*9JxeUB1*O}9CO;P;Q$n91jmzBMl5UQx&9PPi0C(( zW)#0I=T?e>)C^e5W04s8!qiyERM@n@URHo6U2;em^d$*gbl)JKSRB5@6UTQVi+*5B z^sAx&7}W&!feq2Gv@QCbRxUk3tQXS8o56YlN41N0L~ZB0+-3{*xscziE3fHnBs!5h z4=>%O&8TH7I@u^2vBJYkEL`!(Qf>$C#jGz5X)aOwj9RF9G2E{~rc<7q%nP`YO~2@D z6M=2Zup6h`BYKKn`!155zU#M>nQEQJk^z;(!){HnQay}VvX zhF`{@U^#(G=&ke%ddyBu^5B*fQ`O_)D`g0TdMe*h=Zhxw4!3QlLJcA?fyh@0d%NU7 zX}K0T%5Tj%(;(?r+s1uqO#}~LG-XN+AVHGG^!g;jnZM(!u1!$9;zm&Xt=-Z!m(Fsr zaK(gvlMC>4o{oej?Z*#Zo;>Z@AR@BI?ip zUYy@l;9iY3NEbcruh4!Sl+;y;zJb&PTMV-IhFPrts)QzEz3ZmjT{! z7LYR(^RjU(C_NxhYC+#&M4&E+hX`0pPIHIZ=P>tNUd$knNnp+mRyDG$qNZd$w5yfO zubHg#Kv+Q{M{a_x=e^^;qP=owcDSk$ptbG-0)Mb}by~?W6^a-Uk3uOA8fC!ugcF{IRb&7)Tv$g2NVgb~e(ORZdMO;?XsToS$^f9rc0gB$ zQiY@~Hb(;y7Yt+Z!BUBc!N5-TDy=`o&(aQ}kouL|D`Q|7i09l~M7uam?MMtaru88N7%QkntHP)?{cE73XmWfC*ISu&=)10+ zEgZsT{oq+Ese0l1euyWp7v$F!e!B`If2t(aX@E}@8kA!FKIB)q{t1$EEHAIb&|4a6 z@2Y0Z00lNuF1>8$7t6Y^tX~kOH-UWYXy5(jF8rf^wYR-r5W8Ql;FtEc{|iBYv`pYP zylwWaD7=bWc6}>ieMsw=6Vo$^d`sd}Y_)3|UEX82q0WqSBuq`6x^r(5`npaewfXy6 zjUIH6x^1a_|BwpRYSdw;$z9m2M4;R|F}AU{_p3rTzPR_rUh9XCfCkXg0GFr3ArxG*XaE zl>#Cct%@Saot+@)*?$6_njQv4po*TG~>Ng(eq#7nz(@{*_A%zbJ?B7gs)A*PV~IJ+J# zA~ot8zURb7qW^5uclLqR{ZK52#p~GZ(Ky$5Pa-jgdS!8(5wE&D21@foySS9tX}_7t<7tu!FXRrk;%>Qrm}`#6t?G;&7ggttayjtWPA89PwQ(0Jv8wnY}P+rS&I5AG4MM8CJHl!xNB zhHf6?thN|bll29nipt2_E1=4xyUBo4*i{XVLO(8|YOmdI4;pzg2`(DfI$|k3*%*L2 zPzoeH`9yg-ZsV+-m|({E&(0x%e0)e?pB$D!U$*v_gO41%DflbW{N}h7Wd9icOzdKg z9iug`Mx7VoRUu&p@(FcMIk2|E2yV2;*H$lwTrKo$fxmk-+Ld}M_q~QD=6raWy z;o8bqb_Yb+?R{ul!q2|^bMWCtc>d#2qTaBtK3Tvrb`fc&N*1O29923sz*U9j^MkIfH9 zQ>bxkwnhqvlxQGw>9$CN^%>w}l0o6P5;Dl86*5Q+_0T)dy~zre^U;K;2;hX$ePh{eo7$|+odp;Swpk`4-fF8QkBH60spI<=tJ!?lZjsFu@32*Soiy)F zG6>Fu*6UBk$Egd6aY3=A4M3ZIj@jo#-;1&5ayciboF87f5imL{_v-ocM=y>ZoIc7a zpE3X|pYeGkr-n0vLq%$K09VE%G}DVGA)!T1mBs@aPZj-dFsSWA-wEEv4ZC>gGGCl3 zM_J09L^{T@-pBvoPx8W$&&E!Ph_(e_&dh(La>SM?DM)_WP1C%~~3iw4~Xxe9t_$O1CEO8?{`yRp6F$)_au>@^K`9 zO4L~0!nWJm(tvIb#D1${ch?)~ZeU`KlVBD;&6xzL)J5MyLZ9!$@S#Im8ukwk;yK1I zPEc0S7Y6A!?2w`a2RHI2&0)LWg5t9<9F3u!H}=^1>5YAGFu8Cd!rQzp3mOw}p5;*o z+!PJMt7(%i#+anLcaQwnw(j;|qhM1w$>ToVWy52G7{dA^*1%r33kAVhe`tO89ci&; z{X)i$EX%{3+6)D#-5vI6?E#jTM|`$|h}K5dcLOlLvWE3{Hb}z}&Rul)gy>y3SdbN* zRZx<^(Hb;{I@A%hE@thYwrc&s>KgLGiA~szugHpKeI-1VV{;;vvX=$k>jgBcO1C`P z0ivyZxR&$V0G2MbPsrN&o=NQ)5zja&ezNOSf!R2gCu3=)yS*BP)xcIysfREVM{wvr zO{2i%tSzF`bMXd)wY`PqMKjQ3=X~@8WWw$hN{lmiS>1cA?jEaqpVn>N7;^nw1W9i&rn5H`g!jL(YvSaJ=~yJJu-5bapo#uw>~nXRD|&(k9S2V)nTg;V96X;X&QwK zi$zGC@iZ!!i3uNSkWHt|cD>2$SH%{L^^kp7tW~v`)eJBv#JL-_8u~p{j@`BHm4bcH zXs^&-D0V?pk6O)MtscZlRBYD)TaBJw4HnKkHwX#ql4rlkV4)K^_(RVOOtt#~zC!n8 ziB)_6RkPB10=r}=2E`L~djmC42Wq*P;uH}JpNU)tGdjjL;QOxV7R}n(^C|u2M%K1}=?^!W7=+h||OVuS}d0Tt5rc z-;h9k;?7UKpR_Zu?Z$#q1TR+7r7nvQ)ofK3w_41$$XyVbh-X?~*kqF+HifaeNQF+? zPg#UmQmDWbTn?p-We4WdZwP3>O5DeI(3KGYTGq$G0GZsc8MfX%8mwAyzI{cr%2oBg zNL#WNON9M)=s>fh7(hv7;<$);9J5R&pl!|M2Y6@&tS;YpF8Z8Y%%uBkt z;g$q#9dgo)nYU|lZk|m`rs)P*wh}v55dlJsy8*Ty3&~6jO0ONB8gV?vHkFlt(8FgF-I7apjjob?e0BEdVS>P=02`?F-C`qyI5Q=B)y;K%?B> z)RMk`^Go`^nM33Gzy8(gQvuz-r3&b0ZmrC%Ab#g=u>2TYt4TEg#J(lG zyM5rqQ+y0%TlEZ|AJ|hq;6Xe;@dNzSi~vq?kR0VX-Gm6da!5bU;h2stH*j+GR%j+V zngFpR4s*Vk$(lPjV7LE}bPZc=Ny4&iy=ITk*6t~B-zSho586B1dM~t_f_}_n{xA%E z9CK#{W!3)tH)W`txV6$va^7yj8T6G$NzV&tzDaMLw^#Pm)SU0M4^sdI-Drv@^ z*;*@gaK<(gQyV(Ig_Kt7eLyJ z1J%o=n#{{FBN>OwVEPzx$^XTPJZM9!l_&hTkMA9oWCz3!c@*N&o!^w)(;Pz8*Q*?qf)wxQ#kdhg{R z&*LtVep;({)UHAo8X#@O9%PfevfiYYgkU2p_AYeCGBG1A8is?-_3#>cINM+kU7ET0 zn>&MV?hL=Vv-{1Rdkq>2kwpTy*D4|6Zh<;_nnarrAB7b9}xij~GJf4TADoZT##; zK~Y3y3YXEfNM0!8)ajLZuYkI@r<7~Cw7-9Hr2+O*+NtuWwU9> z#>QGRKKONvwr-T78Kkc?s^WoJ;R(OVXCa3PQmUA<7_*5v z&c!3#V&Ny!i{4p_;U%kFzV~d?7)hOc9XGI0rX|;MCc^GsxYEHHUk>9=|T7 zuzgX2gt11hUU|G+5bh#Sln#oCafqOK9);(m=A5uz>CJC?V!Pe;;RG%R-G6eUaBcPz zPqE4D%{w?YL-2zWjh%DNCH0&>2J?@G{pRNn-!xlyzkGcbhJ*gFv56~X>%l4S#JF4K z49CjAfsJUlp>WyHHY;Zz@K!&ZDRvl!|CV$*hlFt8g%k&=zzl1B6^DQv6w@OG8P^x)o`Ai@RHTCxL+ zke*kpvf>M<&~|lvgkw=TMgb|}EofR|E-cqX4MFPd3CQ*Ka_}l@Vb~X181`3T5)O%e z=eM^KpK!Re_J)QvSDi5%m@apE)-S(UAUxpnPJeA~!SqNMwQdD21PwKJww0sO`v$Nf zfBNueun|nis9JY-i2}BNR%wLtczl9e5O22pUE=L`#V>g~e-q;nEM`NVEHI~FF>!SLq$bk~)dIc>jodmcY!{FyMSg|=; zr3P2iE{ser1#5>h2-3+A^`r%KqV11U(pJV{evP9nqJj~ay(mst?8(?A%I~x?LcGOV zcwv83mx9i65i?EnG8F0Bp$%4}Ra~QQ7~Z~GvzQdD=M_e{RjZ5sYD|QmEqS+vO!ES# zG#Fu5*=~ho7ILqH1nPYB9ar8)HnHHGBu=h<_s~8$eb)Z#lViJ4R6gA2OUY-Bw}d#{vt= z+{j>z_Tovd7kjBA2^}bKCedgBkmGx>B)7@`2sN_bKWD#niqK+0q;q_*qrLw5tN4Td zS|4P{2J`yNt~S=`@O221Q4)jyN)v|#7kOZRCMn#AG)JU`jKG(c6GhH-Y=tuj1w#gs zh$RcS+nqvkE(i~E{Ls3J97yhGpIn? z!p~}WL@wdtS~aHO62c@xjCl{@^;NG;Mt$ayNcrmx3hLt?G(~sRODN`x4(PuZnt-L04gb$w0RziO4aT`zk4v~ zN+P*xM*D1S}FuY%FY+-G$cTTZDn9d!}HR8UscIV+PFAF6*`G<{}a;15dZEfEBbly`gxD(M|s(2y)q7?|52mr90obK|2bAcY$tk>mto zJOQ{0?N(Ve#I9FkJS#U&s*yrDBtteOZYYB-^D{YgsWR?V?3Pjr&1t25znGvfE z?4L@}P^R-u9l8xK;~-UOx>j*s%M_h0{7Gl&V84{TjS_+?j{%E zG{)nDb2q_5&={MtqVNh%L#Nh+^7BVH4JCNNksjKmn-i?&jX+mQlUrm;_YRg;EtC-J znNsydcvZP$n9QoXF709cB8P0M&qfuojwh$kgMHB<3Z*hGCwkQWW>&B>wLG*@my z5N%}xnoC`6Q~2u>MH}Bs=TL4V+v)A~P)M1Zo6fh2;kG=V5mnmu<|xZJ1l!g^3s&@e zta+gfSFYPZ;C31pa7qYQwxnfJB!LD?Z)&})EW4}Cu3;yBJc6t&%LM@jlhDxT|A<}D z((--n5xi)UdIIsy?(gYHOrvmN(f+-eh2bn>98Pe&oj6l*Wk@ScBG*Y=Rt*a`8+v#_ zuWxbRQzCYT7LPG#dG{^qy4g0=vc~8d=Q;t|@K7gvGLjy8&zs6mE#{Kgwq`>MTr$a* z`Y*+Y^YKi!jclB z2~f8Pk@-)@ZkdACT8D>LSD+iWO%NfFCLiQ(DwuoR^kKc}mpkb+(}{fB3@V)fToyto z#iCU^C`J`NT0ba;KN-QaOq}TY(5@8~gEf*w%U~i)BfUeJgoJ}3UtU_Md6!6W_z(QZ z$&VJz!bcYG-f+Kvx7WSfg8(kzygKL}fS+i_hp7OZfZ#`X^h6a0HIwUDh|aNV7bEcJE$y?{0T^w}?zd`hveb_^|r~4yc2U z@fbqU``cUim|NEV{B9EHIp5k7qNM$K2bBQ4rvu1T=^8NJ zBQPGTkwApW1ic*6Kqaia5tcn27EtAD0J3+c#ZnR4zi;3cWrt9sulwe{ILh~Bl<%8S z-q%6G4N46-_REOB50Jo7LF=MRkNuw*t=!(Nx*mn^sNNE-k7O2h$)M zvkhAvNP86^eeA|@4zxWP+MyZRehyLVf!bf4sQp4PIiCQWhx}V7f>aZWrWqrHWQT2W z9drgJbm+p1E3&@wf}YTUuwTJce#sOUc(2CPN)J|ghErUocu;bY@2~p@gEMv4ARNv# zZDA%au2sm06Zfi^Uqq^hvpJXqfo73(F8#IxCBI1tK#kPcR=D`~o$0jSMD zFSK5S!l|2tGsGhggP#Fh6WAZ}k4h@z!46Fz^kvZrHH|-5a!hUGxseCKR0G$}aW1i8 zC?H6nLx&~{xN14k`4U3K+qw^oLNplgXEQ>&Jes{G+xGnNKKmpIr%=h7FJnA}1Gk`* znn+k6aWN6oivq*cCi>L~{caAeUbkB;jmTDq7q35ua$T1u;W9{?U$?StRHG=Sqv_0> zLsd?KBeE+hra?u444gI+!k?rdtjJ*>mpo6GzK=;Wa;I1mQ{}V>3-pG-2qLrG*edXp zc{=6-*`lCTg$&cu)PU~wSw3vf0w28MN&v+0?gYl&IxyPa&=%n2jnT#K^{|hpDsY6{ zqo*h^RBCvh9yp4ddR}8V0Ofq|(-db6O6XZ%q0hQUK(CmH0?14ogCUl zQF1|A<86p=NTIXy!1~6LKy1MS`85T)t!t`c$$RBEtwC$J=Vn*TFL5e3bGMkw1j0=4 zP6+RG@InaBrNK0XE6$YE?$lbMS@^=83bmWKU|oeve`+n@N->11r7I84>pY@DLz@vc zu& zH;OS>F91wHp+Wup>-w{9BqlYm{LF(H%1@-|b$BWXgD^egkS<=Ah#qi1!Xw=( z|+xwz6V>X!7TPQLYq$K${M z^VAl>tH{zo?n1UMnYtU8zU5Q6>NH+|ay`aG z;0AT_S(%7LGrb0)5F|_Hq^RFJ z0nn396R1kG^7Fug3?ytgbXw}lI8Qkp2#Kf56!BILrH!jFzo1>Rm0}6JxwXakmdP$U z4!2QwrJ&UjV*8sCV*8bZ7%BV_H*EBQxT$unwm%&%w`V#~4M?Ae=nlkKhSqEpAQ7ZEvp8cyE2$%Dznjmxtc zPQt}C`7@sbZBP}NVk1_Jtym5=^NIRqkBWvL==WrAskw(T& zK>pY0#0wt{6kBp9gy&%P;OOC1Y@85E6?w4Wbr3M5N6mrs`febARUHh^&Y8$Sr9OuTJ& zJaxBBStCWc|IO9k|7R2@uD=E4)Gj{gve#xAKF-U=aPLim_>kci4_ofrd8{$meUot9 zB_0t=jc*ADy>1To(sM}+#tEJi>CkCe6@GAy^5NW7_=!E(fPA3hKoAo|eRZzJASz5U z0)l{piQ|eEW*WaFA#e-PD@rAdV1r_PWAzPLX)g(Ej4)084jYXJzOw?op7B=w6t(#8 z!)Wd##v0miUy_lf0uB9Xy6l24Loo!QFv0K^*3ubp&G8Z(e7fujC z+MGNyoSfriB>fxNyF_}f$L*hx^h~d0cZZ#+L^3 zVk0~64w=|jn0jj+?hUe4!!9YG0$`kX`pinp-+~$ToEsaUMNnLzRkICRYU|lnbd^@E zN{j}W(iDwF?0WSX{!)E$7f7ZcY&o4I49fR^0WXa44d~q4W{~x1cmxhs%SGI*whbV1 z5D~gIh&}}VS`vQrQ8n>rWKY^aQ`7a)ZW#_t2uved$ZnOKt4eLFFscquOzbe6gl^R1 zO*-#+Bh?ax8=MGpQ*#cgX9_P8DCVRURSNgds)#BIfo&d-oEp%wT`Htj9w`pa!nyWC zXKJrDa=3>V&N3rCNXTz`{3H@rSa9?~G%h)8nlA(6L^sK#iTlExxZb56Os0sZu+51( zig;ZuGFgq*a~FwN@2G7J`>pjGDPFZ?bPWwOeP=$NIu?C=Km!f0*c7X)Qje(1r6Yu~ zb96}P?&h6yU_II!^j3o^%0s7+3G#BTRHnj4c&`fMO{Z)LZ;Gobq;`iB&Dk=b`@*s3 zk3-gBv-NvB=d97TZFX{-Q5=MG_x;C$(vyJV-oIFH}?wzzIE`c1(*>%&gANpWYEN@4oD zrSH<6B#H1G(90>rcH&U3Lu6}|#Be^}v_~VmW!}kxGmsZ7b@y!yZ9rEaXpZ&Q#TT>d*zMeXXfAituv{4UnAiMs`$IF|ob!JCD8C zURLHQyXYv2fy6@D%4cThli>X!?VxSV-8d#3a>(&Juq=ho-UP}ORqPT_z2rKrL&&p; zyg5deQJGY(IwfQ0`G;uuYh94V_>hY~LH9ojgPC{!J)22!r6f#z-q8e1lMBN5FlPue zI}nL5rWu*y4jq-3A=?y_n(k}{v<+w0JdE*^JdK4G+t!t91umH=P8x1%hjD5^&yPB! z$qOg3W9#bT8tPv&19d_ua2N<^G%D; z(xxDk1+`;kB~?+Ij;xT~v0F3>nX7VUhW9xN3K?I!U9?S$%E@F@7L8q1LOLo#7*s3~ zW@A?kyYb0kCBbYSt6MQts53<+pwj#pw+C2N2QHEiQwkg_Qdex0Ndpajqr~AsmuRQV z=ghIFLD1@bwXLqPyLm|6jRFY7t#n>f+8O#J!bzF5D>WiEP)@1^EV4^_a0kW>&Lk1M z8dm|JtKL@T9h^zNY8VfO2hW0~8=^o(3!=5dvL7qqwS+dpz`qvo8>RRW*xG2TllsE3 zpvdIiB#gj3#n6n$>ss;Bqt*tX&!8*al2i($WmsE0sGc~Y*c_%o8|}dmqQ)H@;EOCM z81+d@i%*-ZU`D~QGnHRUZ{1+zhZDy~D>vH>fPu)fSEuQh4qj@czh1rk{_cHStj`;_ z@6fJE(K}Z96~Ej`zgfc93zO@}`*-e2T9*rb;j<+qw+ zvY~!k6p2r^uVv%g*e+tHjBtK#D7)mnG|bjxu~*WtCdRG%KAxL*#kmG1{PniH{_xA37I zuxa7TG=yL4!pA6+v+gO%q4+a9@YFT|H?mq*Uav$9fAz~1S4n@}%T-k@+rOdZ>J~1| zzlx>EghbAvw07Rax}et->H*W1Po&#&_jy;dQlYkRJXZ76xhc`F!nt6*6TxOBWYi2w zg}rK3l`e8l7B?}-LAcf^3v_9%Xz;2VufsXb!2ydgof`lHme|rD7zNg?tbMyxoa+f5 zMAbt3DFU^WO)}37u_!;MDl+fSqfqUM5UnS&D$E5f=~9*HQ!5b}2u&bJOP7WZA%dJT zOO~-ag2-~&1i?6STM~iLc028}3|(GMjb|?lh^!RYsa2JZh$XrURuhg2Rf@O)i&n)k zDn>41ZmBIJ{D|-^2VaI!?4$b$Q@;0UkX>CW*OdSpSRZA$*IgVFg66>iv}s%!)vfA^ zizBqZwUse zGm2_!Z8=*=z*X1cwOGB}r18z0_xFbPdVAzQdjqog_K~0t1E_QUMR@hSGfBee`qcZ$ zEe+a+;T6!xnn;+~^5!%cTC^NZoXLf&PN5TgPp1wDh3D7FMHpD$S%XerYBy~`ofSZB z56y#KbA$RG*mgOP8=HKN+tvU+F{dUk(8ov4cw(Pb6BcmaICtL1gamNuNaN^3%%~pb z;~bDL@T1!wwv6Kk(VAwIj3a2I$r@`FMMxMJyc(d$J1D~NHv2tfZ1}F#!SMD1&lzhF zIs6XXcbOvxkS52cB9DWbgsSaUt45v9Xy&>8G=>xj&|zNf{P+m@u+U*y9URQVifLGF zJ>Of(j0UfmU>4HVPaN|OmL9>&W`!(dP_Dx`q-_~lCBNQis z?~NDls97f=HROPwhY7UGncB$1@PJ)t(1n6%N8a^kIx?6BcVC7RXvBP8?s>=^Ui7aaNAl zHlt#W(q^Ps$HM|NYmV)O?|6Z|DHTO+jrOvv-isDX)6~y0ub;-$fmCQV4cXXGql#|^ z%e0sBZa7#8o#$kQapUX8#>hb1H8o5-jv6P>?bt!7ci~);rNDXvd0@P$+i4WHj+OP= zVs!({;s$g>9E&sjGsCWrrNFRn$iG2%03ZF~Fm@ZahFQn-|j-Ur29=H`HB4N_pLePn?LOB z?)Ue0`@6gQo$luu{hRss{Q8H;J^l0JySttKx43b_ztlX(n~bL8s|Z|xqR!%aovE?6 zy9=Maz1^<(+3nuz4*UI~JpcRs!CwD&R`(|7|D{7VI6;zIuI&9MI{&}?;@f2$eLMDo zZx?tdx$~uU_v^bB-Gm-ks6)Y%ogFb^1!E73vrl$5(b?HKU5@Y4Jvev&Jbq{~HnPI; z-^kvWlsXCnvY8q$!A)#@Z5>@iUYvxB3+tb*$o6k?@fMnTDQxJKC>H!k!E(+W2$j;= z!M!{?isd>A{~gBsTYQ~rAoxY>Lr>>tk0C7N$zqHbF z=}mcsSFcWv=~J;8vRj?OZ~6u-xSa&fUg=wpAbRd5;Im8y{YSTyz?O9~vmQS?dhmF} z$DK$89v%J)qVD@XX^J#zh06#})gU4*oCZ+Xi1JEWd6p){Bz2atE8c|19n!!{!DE=b zk7%N8+&r;JMT9@xxdUfQmt>^QT?-Gk+!XfC&UB2qREhS=S-~dHE+9$@J6fNPkqn2{ z?r_lG*_pcIx;DPfOC-N}m0X&Y}IP@>w z=?iz}f)^-rC5Lnp93M!xs@-z@;m{g%x@lQLVnWD`bsZ_Z zngBWq=L^EaW6$@J>mo>Sfaqz{$umAQ{Pzx??weu4ie9Ky*}3w9DNTVM#vRJegr5V# z$#jzN1ix>C@Cwdifq}h%ofcCe^&@NI>cX2`phxe-AyaCH%Cqc5nauS`mfxvWAjA0K5!NjxM4wnJ= z$yzhSD4LVaFbh2uAF>E%Y%5MfrIBjVy}*MciC`tD6b&jSd_WeNkS-t?1B-AXL`>j8 z%W&1Cd5NXGAQW-l*$$0?5CgM|tC5lg$J3&dIO+AEA2-X6E*uuC5IQP2ZV-!!fgoWK z!duOz?M*RZFkx>9BW(kEHU^t~pNLVUCFrpFHbA5eOK?UUR`{;=tU?uS9Wr?s6FpX7 z`7pAmr4VZ0AvAw21b~0*Uen8FIx2iH2*(R|$=TqM;xr>NO(IWzf*^uMY7d+O6ttlr z`zP{fJ!Cu3YO{4Kan4{fpl(j$ToZX32S!7`{#0ZkXGj&O`?_~VulC7zpaizJ9w`J! z=~tcY=j&1fLD>K?R>3dpn^jOvXA5!Tu=QGJ)#6|?X@U%X2KCgNJ~FfN?7L=;=QnM> zwpj56Cb=KO<*_pbCCy+|Q*mT8kQs!ebWepaHHuU0PekwZ9Ix|24DLb@BNc^X*WbVZ zkS!a>=%ZruBdkeJ@FF{|k5(l%Li-`?0R(_O@m(i^xw2fqE|zAvUQi3Agl+iPL*Rc~ zMw2y^#Y}bD>{)KeY29*?R%lylp0rsc8oKK9lWdF!fmg8#L;SnXU{fD?BGE zD-YQk%K`kM^@q+B(;d{ya)5d)__$%f=R?81zS71?()$9ow z;-#@b%~I81mXMiDNYpXRZ)t2E`2O+32VAw+r)T;GmLxewmop}N8q`y!&VqEQ#_)nv zm~Jo~E$BLi!J5@F6JS~&?ZEhyMa1w+IG=loS_9_uh#v1?RI)Ms%NNJ#I3Y|NYqels zMWdKu_E9)?qd$Q)_0sTkw20h=LpCq8U_2p|5Fg5Q=-qGHFhQJsK*A3E3d5n*67I^e z5dG~<$!^b^d2U_>A2fZ(7phPL5w$oRCkCPVl*l!x3HIYoJc50m@DnryLxmAx1>E@Y zq7#SgwJ*Z(t*J2I9H*s~kjAlr9o6=hze59IOT&k9*ER#}jy zL8af8(L|$A9Q&h8K4LlY#0y5tST74f+_4DJD3;ooCXo}w4z4Ar;j_${YO!UY%8N|D zSuQBIDm7w2_?*c^{4FAWCalFHS=KxB&i z%bh98V!9UT`hq#@GU^ND|IjQ5sQmWeZH+eh5nfTFxW=k&QqP;ily3Mt*PIH|31bcN zfBS7T-W}N(aT3qt%K>$Tyd9JltR}T0O;sK6lR23+4JW1q$=qYqmKpCq!s)DnHX38% z`7Bs016uT_#3bLUX7B7kmliG9d$4jg2IxX@U2??52|_U}_EM3{!rxXUt`p0f3H6K$ zag|mM&cz_7DyVO@y6k2 zX(ae4DGRni%dl%RGD~>xrBwtZY55!s*|PW-y25Bd^_5jqL{NEEhOAONA8`~7ee1hJ zz4!0H_&*o-T+<|&Q`e} zfg19wTw0(Spb>%QNEeXD2W3cOp?qY2K*cd)kh8+wJjfo>4c2o{cNWdIUIK{1(=spf ztYk%Cr5e3lTE_lK@G90<;Z$)FDVjbkqiR~P!0{Gu*M*`5Am(p}WtC5XHG5G3UP&Dy z8?Yh{R*L_uY@xly1ySl~5-YlGCYpJSs&e{}Y!gOfFNygRWyj);BZuhPX>l$m*pm;r z#6oRWqY^$Hg>R*ERQgn;89peZ6&5O6Ab6>?=PG3dL4c3)kR<#X8P;#K49u}jDe z+WOR*ITO6Bx5bbzq9zDGbA=qdtPrTFz~%O7$Z({^7?1_DV9jNepyeex(1Tm*AMltS zJ5*Mp<_$NsC+X2g-CnXo6WWp8XxIfEmAdB`JE6xctb?NF%Umgpt>eB9 z8c##Z$`kd?oA);Mn}wcz^M*dj1?LspG}Z%1-fB{O$2mP5hjsKa)(iGd39F=n%=eYNI@0(tumHX}v`G3E`TxCm3 zH5HHAymGIh+*wh%hQ0&~_&%C1lI!xzfXpbYEt4Xb)3Eh4f^p@OYz6*rySbqkv0d;i zclD!f!?i??xl}IyV5^<@oe%2)EQ9@ix7W{^cdK>k%IMo39kK z8-ZL{@GQ=Fb+Fcz;0qVsL+O3sxd#qs>=c6?B_V)Q;ohV?k0`E6ty;H15;<0@%GsQ= zq+PEWc5RrpmmT}9-44A(Si2c#9J^pvVB#?xMwQ1V(ne3cpEK~3A^RyirJL|Wr2-is zN!2|5t}~(tUJkl&M7;vOSS^=@+g_O%>%p~3_p%Qu+?o>Y=qR1w#v5O1B3UxM z5muA~`DN7OxVEK~EoK@fXR5$p0=5dVKL!FijaThkFlRk18Lr&cj0|!-ez5TRI-3YS z_HfsJ{E!tB-tgu|WE<}#qY+jmj2yf-gi}FyM&upDMhM>PtxQbosa9L&c1oK*-rzI% za`;1_U;ie@|F-gFKO>}Wm{G|>nb}!Xv&zVG!+V*H*t<9C?FZm~nrN zRl{*erY#UQBJ`#)4aT9LWA@=3QzS4G!+~oxg&?gSrp-n{}@T?Z|R-yH< zbhDucplNu0E1sjtJse67(JcQQjs(2>*4R6T$EIr5lt(ddTeBe;e);6feQO#np+7he z@#tymoF*MHw{khOE}aMx7&eDwmo^z%>3493dY`n4a3d-u+XP#eo_mE@j_{ik8@po* znm24i&(tr7)M>OE4^_R_Za4#gIYmqwN-0NZs+B4whdclQ(k66A-G(RlWX5Sv`X>fRB-+1<`P|pr%=qP<$r5!sWrT0C4XjWqg#$Xyeo&hx%(9q1 z!}wx0eUlji#-lWrR5~!?&3@B%VhfHUADmiZ=o4-#!t1BD0mfGBrfMIMl>^9|U&Sq; zOZGG^4E0BBg|#sv82muo@F}9DoToxDGT*Y2NXV?Xm?Y{QdT6AkT`9d7!=8y4b8MAC z?~pak4W`Z4DXb!!pA|{VtgbLGGMvw3IBmkWe+#`pD@NgX7u*7yHgvQyBYZV0~ltsP9XV zMRW9t#!Fjk8Nw0*RT|We544;R<{9e)cnY%9HJRYy4j)<*lz?ppy|TB#1^;Os3!@Q@ zbub!rc+4Au>hVMER0dtYYqm`N#j(Z3x!tMhEP?!F(%c5RRJ9bg$4XFBt)qP{AY>uOre~D?B zA=$mDzwb`zuZnyMc9i zWxaO8yo8wV-wpG_9Qty@3y9jdkm4sQv! z&j|}9EEGtC31e`E*dm*H7QV$Iiu1&^o}XL$oo-ubCvwl7XzIIhddevt3uyUTwi8$L z&71do-FuUJy?guj+#86mS<>Il#Mw;q6b$;^d;8??9{C(k2F`GAaBsI1s*O^k5*&v4 zqK4sQXborG?p}9qFq`#zsx&UN4-y$)HVL}zkzLp5Wt@#H3%9BUTir+iVgolDrSPo) z#w42|iYtrZN+YkseUhvXvtJ)AIOmrav`m0?^|ue3vXGF6yi z`Sx+*^b$C<M(`75O@oHt&Ul+G&5ja<2wcKjN9MiQK<{TGi&+Y)F5 z@hc>3%X+1b+$rrC1vC(TE+oN+jVyFZ9|smEiP+TvQ0RjW9_|W8&r%;SEK^ANYR#wUmiUN78dvo-3~lCDxg`P?#E!M69wj zn93hJ;N}N1@XWjzm?}w=<17{bYM8c4I!bJ$>-lFbW@Rl#^y~pJ92z@@#rm>qRQ*|v zn1e0!K#1TidQWJ#pFZu|AKL7zy#;M+R=TdsY05MPJ}*(#v=$_FiqDecCx0#JL{P!Z zl|V(RtfHJLY6moRwkDRrCNPk$aYig^F^h#$EXzuV$=q~nD??mETf}gkiU!!a`Js^I zG+?mOP_%B{Q2e|aA|I;Iu>g<2-p&{@aVN=ASodx+Gi()u*8#?!a}~(fMu31K^bB-v=G+) zijza@Zv~drAefbpb}3r9>T)?w>*7-lmtW0Tt*%*p9;2HYqg7R|&!ck_qqC~2a~nn{ z&k0-B4-98kHC2SF#|PaNP8?+Q>?W0w>6J%0f_(XPDkB838=am~e;ZOpa!*amL0T7_ zN^?y-!o=|RTRz8JW3K_>{~!Q+v+g-r+ro&eECayiHe*6yoaP2LR=MMHN<-oOibn=L z*Kg_2V7vPIR3#GxCg~WZn_|P_V7|njT!1^+RH~UBO^V)chLVSR$Fc`oe(SJT*GL%W z!Q0kbYE`*Kt9or;(0XqC8Ss%KFVg@p7vWXr0o`bo#{2=W-vPkn1tDRx^}2gT{=X`m zRl!-MTWyp#O8kP>^VK#}7^2Vf;?tZLO8AuxPmIF*zckv{1RR7}8i$X~-A9U(zZfx( zyU}CViwoEHL+dJx{Hblo_68vm8$ZI^FB)*k0#<>4gena+^?(>wfcf<{0wLH*!b6WV z3hac9AqH@{O=AqG&ccxzV4%sP$R#x72t*5@DK;VbbdWmvw?zJsn#(+(qwtEb4LUxP zuju+*JXDl8ZHtpEcT|4#l8a}ao}P=jd8cmih7cZ*R{#R^G#hFDX1JQA^_B~o*%}kK zSgBXOFlj!y@uy!u&EYQxlb|R7>U(n!;vW`6nP*RoLXKJ9NQ}2a*j0&5MoMssf)QsC zjT++Ql~oKWDnQnH8Xch5YRH0Ijia!-<*wbctHHtsr+oRgP&5UQ3?dn~ z!yzB3@3sidP=H2>zuGfiIs?{fwDiqy+rlPtq_R0)zRlD&NlbB|fQthkw-~f+Z;0p~G z4Bxx&v~@wsXtv*|4+tyVrZplw2K++3{M!hel+9>BaA zMIqlJ^x#L72XxbErK8atx3U3gPFmTRG^ee+VS&b*&LIJ2e2Cyo4pV?wruZ8}vTTF^ zS%xRWkm0rpRv%{^acLui5;;uqD8luZUl3RLn9z?YeAw8w=~D^w!$z^wC~AP;~IPIhE!o`6U5z3Lyv840C?6;C8l0U$e1O}N&d4aD1unAJiF`mx(Bvk+Oo z9ot^56@{#DY@5e7GHIZsPMDdP#EE9KQ&+NrbjZ?`r8<7VNJHzsf0nr2lCQbQaG^0T1hKe^X@*F*}oseOV-@G!D4eNxkg z0{9k^h(z8Tt{{~9mOv6Ss`ITofcJPO4LqQY7tX|Opf&iqE$`(K+kqfw*CRg+&PS8b zU(N$e7sN3laz+J(JR-Yhs}i|$T9;d;4H`$KSU~WJ+$z4>g3{Ui1<#?eU8_oZ)6yh0 z+pU^)C*gb%#$MtwD}Yt{&)Qf8l75Q#)UH*<*zr{B7*q;gaZo%WvIz@K<5dh1Rq$|! zZ4=-eRaGXqm$s74Ry!Z_y=`D#Sz_5Tm|&*WSLyYo zF8jB9jE|mTdC;eGoC*Alt&l3(Lb{K9OnVJ0a&cXt z6t~8Z^W^+B#jh6OZugQ#Q9BjGlP^!95;fCaCG? zsq=(9Hdr3f(^8N#h2A}-}DTJ_75oBs> z+{FOT0~?tR{`?2}fq&sz$o|Q+&7mYIG8;1IctzhDG0SV#_Sl`_a=?k54MeHKjZ{^Q zjh(_Ql~OX=lKzrTyzsrGX?JYNSXt@z2UKRG%(fZCM!%)zBBpPwKUjS|52%`^I(gkY zlTyJp)U^TO6VJ}{`9=XsFzP711%_C|F_B4gCx1;vJ*1gPy)Vv3V*ll1E}7&5>&D#b zx+|uORh6E}GKwH&b@7OkB{3`UI?2FMszV}Qp2Jug=`+D*ZGlVDNN&?!EXTe#>3kJq zj#W9ZYntL1(t5^O09y^&J2jQ39?p&)Y8t3aANftL;Dpg zwPjN2g7fq`CgZoB_@u|b72sp52H`)VAUJ+_-hr=>oRzQ&b6yUkwXZ*;jPkQ;>D-QW*{jiiCGSQ1djh$GA9G;)`~?9#LY^^RmI|i zBmsTf$RiGWr?3crTr(nkzH5WAbvRnl|^wspx4wiE_@+O8| z)r{1G{TC@WBbBD%61G5#i0l|492a>!KeQnc#kHaGC8-QY+s=fY++WkUb`$YADAk8H zn5#=shROU~2XzT+hOvll4yu^Gjp53_mmr9cQ=HgW13JY%Z3Ri0(Xp>>p_R385d#L- zm^{vKF(BL!piMR$^hC{Fvaw5?rA7S$F8QrPbI>YfVg}|%W92|(U8ID>+CU4!&V(3b zOJN`;5rdUdy3e=r7m_ zN}SOu@MM>F`{>rL>_eYN-rW77A#ikKzMQ0&U#Wj*`OHc~n{1y; zf7VaRDLxQpUSLc+LkZrbJgisGu!Mq$=ZCr+SO`@fK=81*^OPB`U2tKcmWQh{hJhE9 z(?C(iWo$69=xS9g?OcnkV{n;GouOuZOI@;vK(|ny7dQ4^faF^E{!`HvxKRHos9HWA zo{C&9p0zeAHkB};y`+*HoIEr6O@0+tmaa^$Nh7UWI)xl{_Kc-TW7!k<&9xSTEd#tx z6&bj~BfpvIV$U#Zk*>Yy&CH=7TkpY`6Gst`oF(w|iqa{%g31ye2nJ4xprq*RiM z3yPC{T?WN_wd|Mug5Rgq*!|gmAk^K@e$Tg8CTF5m$5tI6JN|SFFY1@ylFY{ zeW6h#E7O)mjJf}&ylK{a!8Li;5Q2kLyiS)z-^>f(a!T$-0!fFsn*O+k*1Mv{Tg1iT zGWpENH^|7!0oAX7lPm9n*4hD`#7AJcFkOd9J-CM>h=SJ3r=X_eFxOeYMambR)wE>d=ABNFuqiADzk88%FU3h-@>B&*V3TO`;L&V`cd8AJkFPgLcc zI+sEz3j+qo@tT`Dp_%4uZE0@W9-0DWZUA6y=?!UWSt@1eqx-nCpc_3y$Ro6i&9-`2 zXNJw-Zjb)PHnjbou{GS3&@Bhny~MT*8j`8#hY#YpV5b;`ru$BO*%sxgmf}5vUoV@o@onnGmz$DifsDiQh>-%Jw;8JKt))5 zj7b$Rw!UPn3LJ_smC`Z|wQC!|WU+SLsa>>Ul5Y_bUs*EwbL!W~e|^Lim4mR(>`IaS zyq2!ImR2C)r@fF?n#-RT$6AZy*5~f8Zdt5^?MGP?SDzmR>zuSc{n3e$*`G(=rRS3& zRoAA8Bc>y|aALZX94&Z-d^ku|Zbrl$Bde6f;0$1}Uboh%``A6IU+dB1M@KK~)}kSq z>(-)SeCyVtArT5|WoBY&0N6H+9QTa}VIGEKC#r2_##_NL&$U?76S>F-@9 z`7%zpA00wZAt@O=f*e?}#`W1*teFixJ5X13OT*!dtRdD-^?)YsdFdVsl6_TA3)Z$w zE14magdJoS6x4>G$kdEwLUK_TBuzE#_t!t!5d7YWlEYrBHsfcYN-jlgUFJac0Zw~! zC)UAXA1&~%?N)A|z5G7a#(LP;`+~-rgElTga_pCaCI{H$PX$df6_ARPL)(f+UKJ$ZN4{oI5me5xZiph*fzY?$Fh(N%^e^fMitw;u?G% zx4H6`*sZk@HuPuqe{Qhrqku-}4{1E8EOS|Tb=6NiXc=m&QfSKpNKd*eNTb$kLgF*# zC|#w-Ag%FJr5e^Zmi;xvdQ0nFSFUGOs;I>c5oZ%*`;#(g7^kVqep{VmgdwYuIyMhZ z)=s}#JCT`!okh54mIzQYQ4Q{mA1@8oMzkhqctjc=)ybA+(s6|Rj{iS<@4w%+jVzAt z-+2mF*<6Y(rHYhf$L^}TY0};1e3Le(Nq29Lt?LgZQMNXcs3oZ+Zcg6jzR7*DJA)r2 zKmsHv$&S;;ZET4g3pkkmu{Wmi@J;VNLlI1uI%vAdm2ke!zJMpkck*i5&wtEaauYLCAXKu{J3LE8JAQHR2_6Ili`2bDdy@}^S7ywRwb)aA`)s?4TuJeA7DelslQ%fAJw2cq`kC@O{O-Hvd;7xS_$v=kO*aKGbH{V z_R41s{gE_uMLS(g_fqMjWnLMvUM3urghe3g-)65rq%=V>5MtBnpOz&C+Xg-;MA}n zEDD{SYsHj|MCzDm87{)07i^brr#epMxF{7qgQkt~PfA)_6ltB9`8$gl9#ku=ZQQ~{ z2q2DH^3K|8u);jVLH3)&?MNsW+IhCu}iK5Gk@4=+iTi=%l!sX8<$KYA!MB*&xum+o?f?r8Bd@fJxKiM zD;lcu@+w@;NZu6tc@(WTi!ghu?9jITb2Pz734o$Jv^jUxxcv7ka9lHG^SS+DdR}UY)Z>*^Sx3Md%yr)z82D`1sMQ@2yvlzI*n)Ox8D@&hLt0wAJS( z%{I7}oP!HDlUvKhYLQw4V9r=ziDuc)rwwm>=8u^YlP8U*WCkqlWzl&t zpAF~(!^r}Jnl7R>4HM6!obu$;;S}`$GJnq=v=!?-TCv$?mC{CA_~OkPgWTd;JgiK2 zVp}sI(aC^kI(gVM(}|4%zdY!6;9v?XEBnmWo0@_Xi$#k9U}B|UhJoF-+KA&f#01GB zOO6O7Ds$nF=#^Sv0(|sW%6Qayl^6|L8QafBd|RJ*b~sm&kLnF(7-29 zp5Gq~j|k|=!{ejjpznJ2$GA98UbaI;j^*sb~2wKc^O`jh1$x{{f z8Dkl1+)UuhOvwcH>Isu*Y-U!rmlqY@s}RgNtLMDWvgbYWu&3nxoOa(_?7k8zWyu*~ zINq{7ALJh&vX4cTTWEw$p=_sy83@;fUOj$zg5;5!y8Yv#w^vG5-5fJ7OZdK`;dW33}@2V)MAV6C`FU)&eQ&L~B zqb=E~D@xl_)zGSzLa%qJG^vZzw@Q9bWNDZP(lF6W1Axs1IJ*>2&$0Ccpt}h| zO?iH|jv5EM^r0S&-LthwY|l2sv97>zZHgnRLITSNGc?hBUV$fCSEC_s-f)dL1ANb0%3mt0hL^oEVE$5)V-2RPO26m%pfNhWXZ3ogWeZq356a-l^x?6|ntI&+GJt2b6 zMO3=sf~^e7)lUF3!$6jx#Vd7qd47-;rRY@Y%Ar`!00VBrPm1R#7$Uv|Vd&Vbpy5DpCAM&dNmAg2lna{SC=Q?OG3om9KveUJRE1=pVI^ZF zjM|BwCWJj9*5K5Y(>OPBD!NG;&kcU zFj^0OIDPQ^^ubGoz;RJR-k^F&s%4036IGWov0?sq*-w()n?hoax+q%0A*$V^&p^r= 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 D30BGP diff --git a/gpMgmt/bin/pythonSrc/ext/PyYAML-5.4.1.tar.gz b/gpMgmt/bin/pythonSrc/ext/PyYAML-5.4.1.tar.gz deleted file mode 100644 index 4bf8c21fc3cc9d4e315609ba3f40364ea3c41acb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180590 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 bSw72W`7EF1vwW7%pX~YnT)5BQ03a6t)jPBO diff --git a/gpMgmt/bin/pythonSrc/ext/behave-1.2.6.tar.gz b/gpMgmt/bin/pythonSrc/ext/behave-1.2.6.tar.gz deleted file mode 100644 index dc7a21a28f507a4ceb5e7ccf681f66baa9fbf943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4562652 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

ulZon@Q8^(aJ4k>AzQbAG;;;{k zIkp|n7?ptySq1caFi!CmL|LbcwGC|g{MRUFK5}owT3(cDu$d{GEH>pNNyc70G*Owp z;_ceR`4M0dn9Yrt$c+{qhlHIp%TIAG%foj{*cuN}k=Z-K*!DVZf3LJhOPeZD=(^@( ztnhPGiR<)L!n$+XsB^&6158=SK5C9=pHE`J|K^vOy z*Ek>Asr(agbLZ19wh{Cp#C{>KsfW&b+fjnM2djC())cGo zTur2&@T}8GwbN|Q-F1ogA?i~n=qXyxX#wSO1$}s1N2C;Re4lw+#HINy_*=@8T4VaZ ztFz57{yO054$Y%9gw)(CjhN__q)vjZX)ZqDNBQFg?J2;O84mPr@+UD!=xSMpEaN2; zVH5==b>^^Ho*100=^;|)N{xa+jRg3ss(=ceg(X?C5rUt`t!%Ev zb@%!G``K<=+>Lw*Yi3%}yVkpIh~F!g$>p7u*E~*0HY7+3Ip)v$q(AdRT2PWaw3i`W zC7^>Y^iSV$7^lEie7jl*3knqu))01J_|aF`TS6maCWtuRaA04RUb&YNLg3x6RD2AAr zM5GXLN+cOSOr%I_=QWwDc-?E2UK4xRnEH=rYm3FN6?H0eUj7ZDH|qe(qzllIsgWsK z>FcO~k}Rk3&hbyWQ>7@)xeyS!pmwVmmyt?%-((Tgj?2P+H7{{LrPuUVa5;cFXVw=j zA1MRl|8?w=WtcPWH!<)oM0uf*H>DgdLoyWDTphlZ(;oe_`PPL3r6l|*iaWV0BM--VToqfu*aZYM0V*k2ELVXbg{DY z2#EIFuWO{l)J@L!oOD`ya~{d&j!_6%a%1`_!bLClnreCYNj2$!Yakn!Yoh*S>>IAq z^#W3fEUTBy_B8_?ugVui+Pp)jHI5I7pl7+7m1gO%>TiS}Vq1Q!O1FVq;n`qW>C*ca zC+(~tNmY7U5>=*r{8N;Y;dWyLjbt>=M7Go@gl2R^1=>i1cx8@2P_YOp_j?2z?hh~k z19L5<2H5}=nWAiM>Pc%H08KLun2`x8;B)GGUXC_oCEZ(wwj7eusS2F zNUl8UOiy@{Zy1~L=V@y1C zG#vEo@}DUR%Wjr9&x524Rf6r@j!p1d58~0;Jf+e&*TceD#!=a^Q-Nd^Ha&FNqa5Dq zX_I}`DLnf53j(W7b1S3LExe<-Y44Qmb-_2D21P$Z+|lpsBI7G5d{!KG2zjxCjcRR0 zU;T_~{$R;P%Wka$_M!~P6)gP+H;8=EtE&vTk{1w99^HArRljIp^wgex%Wv91j^hWd zTz}AH(kp3ZSZeMyafznd=V|D*b|-P~(wpVg(S)_WpgewffQHP+5Wp%P7aEVwt1ojV z=PftBvKZ_tv635pY6nz-7E+PC*l`)Z;x58+I-TEbs9ocq# zs!FRXIp^j8Y}k8#d*<*$cK@CMM#!dh&d*19ewu&0(>IP(6-xg19b zl4UZ}SARHelP`eu@7|obHl1C3l%gY|myOYDz}eYxer81=9wK7D`Wp}P_-ukQ)rq*N z(vx!rQjTeA)FD`yJnPV6OhStMG+IbZNzsUMA&alNY#`Zg!6lGvES&);_6!S2K@OS; z7`FQOfi!ts=_!ijy>eVY!4<`RPi}`D5nO5Jr#3YCL*p-B?V}ls#L|L|g zGAR_g3@f2)5LZB-czNC#6r|Veqz9Pp9}C;h#alAla9ke#p~rUu5KC|PCf{!w?H@yL zli&nCxsA2f8cjwTwRpi2BFA!5L%P53D?0Ry@!^sZr~G?h$~29pq;+oh|NOikZFRnE zGlmw(*EkSmGn&jy8oX)ar)gkQ)3(NX?HCIDF~wi)K_0Ziqdumni$G34rmjh2v4X{b zDX?uju4q4v0(S^-DY}f;`(}Mb3>y^f8l9%Xys7hK-A&D(Ovx!%eIvPiCf~InI!_@; z0Te#GWuof+FoCXyfZ$O&y)0>lfFL`4LB(WxkSE(XA5q)o*iVI=xO;g4-xbT%xT?}DuQ;ptNMfNIB9#Ml#{YJBrY`Kswsa8>j>A55GFz-E}>+h+~$ z#=KV3i}nSbm^a@Q`fI>>)3WYyG25W+9o@q;!!k-s?l@VjX+e#JWDG~RpK%3vq?G*^1^Rw9`Cv83 z*BBJ?*ea_2Vedf17SLwUrT7>`h(HYc89N9(TuJ(hk%6}4-9UV)e-{6p@e z_5zmI5RG$Xw=;dBA&F=zX^xc~tBJH3%V54A&Y{FQ$QKbg`SgW-h_;s8fQ_yFH#6<@ z4avigr-Zw;Wa1HZd_9JhUT)!l{4sC)iG>>`f9aFfnHwtsrHfbG%M)HUSt1Hz&YV*>uUY$=%nK_T%?z(CQibn5-&EcC8vtt_jVZ#p|4$rNH$R zr!m@sVPr4%_G3z{&G2>oqUF9p=#$H72y-S=kgTEv zrMt(r#h^pj^BALoIpv@><-OdtSa(x&zc76^=3djL>gkpqx!xeC?WRUw{C{T;FntVY zBF7pcM?$0HSA_(7J>V^YzpMwz2qhplJMmgTO@m>N?M1_5aezxum*>g?D0u2vV3jF+ z#rFMG5qccR#2aak1O@X%W;P)E`zH#KmonHeK?31>Nsm*LwvgMS3t3*H+%Ck5m%nX1 z;cI2vo7Z|pois)nyTsG4NBa3`O!mag!h#NswA!3u-E?E#nibAa~ z1%@hQD(@;-g4||emuhHC;0xzkNsG|Q`hhhgfdiBnCy9t+d_BfJ-_nS$XrhN!Y)^Oo zNPoF3)Owx5L_5s9E%#7^uu=RH4P*Wa$KtVx?SkD!rR@L9ewppu9}`5 zuH}Fi@t$^NaWqknLCYDLtEezjDQD?o6HP<9SmqA2DoB$o;XgX!>;C}q(5>~9#nA6T z5}9o*jpM>|O~yrrfUS}J<5|`6tpE@y%8Y|7-jHRvaK=@w>J}Wnt3X9cYfmQ<@teqi z!Rje;3~0|xI%IBwE<`*GwsB&L9|D;*PX$)P5i6B{sFLluFz$7A_X2u3U+GM#H1hG6 zEWi0i6hozx2V`#G{L-XsKP+ZOeemWS)_pfD_oFs%SD)!9`GOFV<@&qNLhrHmRe=2I z2S`dAV(QM@{#mN@IU*^hZgt#$gp({7A)3G}XSu%FaDc!~X>e_%>_$-T&TQnIz%$9? zrPB^V#%4xuCSI&4f`yVQPCEcSk+qKy2K`sW9u%-ELr&{WL2Hz;A`gLpWAGZT#q{A3 zqh_})J_`q_3J^oPFoDga<;6X!6wZ@i_UE1x{JDSPTJ0fsdx4t{YBN2g%qs{a{yt`%DjjY7-i#W^uJAw|MrzVm| z4{)O5LW9Y4#BW^+kDb7pGQ}?x8>MNUA5@*d%M&~Ljuhvfo5`G|#2(y((VNI<$i^m_ zYs$Gg+pM@7z}aZ&U)=4A4R1-@s@#!L{X@nR5cOQg52|FPpy^<;tzk1}ff)3zpjN7GKs^jy6wmX#Q@f(~kD*MW|T5p@=@C5VmQg`fM zR85cnZ57c1cipmyzKh^E&uOa&gFzy6o&iN$AH$MoR7kawX3qHNv7&WPO?d=^vK^3k~eAqG*=Ozy;}fh5L%7 zgSzCN!TeTaPN8MceB7c3d)QaZInQMCZdo#n?v^3vVkOqmBpMo};|pZ=_`tFt`Kgo^ z+<&L__VWDa=Kj@w5-fS6CVX3dY7+IM2VTqBqI<;zhZ4==*nER7oj>AElQ;F>rL^Ez z10wRoIVg|}K3XCHmoSHKOom-Ph!bkJdr>|EaC~z6h5wmM0}}OyRBLJB992=8!HayER@A9qJ^y()I71@R{irW zaJWfQx17^hqo~t8(s-o>=EMP#<@c;>G=3FMqblS_MB#`x#zO?M>>?-sxUdLO0@yg4 z%umj)GJ5(jWuRn?|I7iv82`2D@c54e6GeCIp&=A4>>@Fqz6JBE8mlja@yL%Cnf+mi zJEdWHU3nG;5asBcXZGZ9?qLOnIU!W8^CH=CbECwC6zQC3_|#bR(CF^5oeuyj)O}YS3#~nKL zLkLQJ4+u4>iYsTQ>Ym$ z#8{JyEE0&p1RoX}BvVN=BWz3<88E90WPv_H!N5u}D-{u{KvgDdFH(tyPHo{8t_Xwt zkv?dAZ6nC#N zSG%oxlKJB-VJ@mv!2{tL|D;12Y$R5MkaO4|=rFFP#|%RrBDTz8u>nDF#*bO9pG5_mi+bCI#N- zY_yi2SSNC0x&e$)1VVdFt}$?VD6;n;^Y|iLqkap?Q#J^ zDblzpB<_4OLy)ZX{4M8U#>5omXYBblTOhS#qP7nGfd*&PtUpl2MSz>LXufv&lW}9ixNcTsTD*TGFb{k zX#NrhOPG;B2D1wVputDIV6GS4DsMxF)4|9V4->B+Azwbppt zr~~0vkGI!VyUXun3|HLVX5Hnbp?2b(PE-4Hvy)LAuBV1wbX`zD3n-=bMM^G?27Yip zU|jbWP?|l)#)T3^2Yo5oa&*KcZ|o_q(BxqL z?S{gI@Plu0L%59zVKl2UihD`nKuZ`8HD|`S9lvK}tWq(i7lH-RlTQy7_C7U}{jRDV z$}@Ahk{`>Xrz&^NC!Jn&+h1>P1#doCTbuX^;M!;{=wB)&_3^ZT##Mz}jxbW1svn$sc`}--LuNhk z@EQfaY6F12gS2HSpOc!q3#3a8-E9|LY!zkvt04cDL!wVye=7(uvtk85MPa#+ZA_&o zv#d7ms`zbRb2VnGp!2urVgG71;hRhjS><+P@4q_AwWvP!%589(P@rgH38m}{1t@Pizf%Q%Dh+f|pB%!Bk2`sD zRUsaiKLag}%bcYD>pa^nzMLvNJO?j8b$P9LlWJ(dK-R5ei7K6(I?wc_MB`B3pA=&G zN6`9zVg;3^LOCLFTuWdxgUKvWl^*zLa$0AKm_|CF1R_`gmQAzurI?aW&5%!_;(>hm%(Tloyuol-BrF zNPA4<_YLB-nBdw-1+AYv_1z&@!ckaK4}eJ~osDc^}i}G(+|ix2Bvq)22f8P8KxJV$l8p`?5m>NZ>o3a*R@uMZOqg z??YIdt@kiWSnrJBRPsi)^kiE-o8wx)=&R99Vp`M#H7kSw!}y8Is+Alvn0ADYqOmtD z8m#Ba9IWyOl_`;e^rn+*uNtv4AzrEPbx@Q6E;dazIr%yczKF89S?KtmeRm423yg<- zZ_ZIyxjNBK4V-+w3v)Tju#zorfk9hCGdQ1e*pCi0?`{EowfrTB*L%1t893g}v=yiu z=b0x@8yCEeSX3fG&3B1;wAz;b)qEKCelb2x@H8q_``4gv-_1}GzP1F>U#tk4$kRty zbA}+48=Hg@vI1CdC;#+OQ$qBoe$?}gN zPu{zB)EVLGibqacgJ`G54u;}4!16|>3MUA=qIn6Ef<`5YpQh#(ZCkzZPe|V>4N?j2 zjxm^qxB00T!_{3lW;0UX5wx$9&s@}rTs9uL z`!~2(Qt8tSL!O9hGrt4ppPn(cTG!Nls!{&-2k+Cns`vy_IN+P@|AY9}{(}xCiX)EPelVw~?wP*1I!l8K|+MKsF)}vgIEiph+D~CYf)QS8EYVHyz%~gvt&_O?;v|Jp*!4vf*^((8k%2Ce9P+%{2p^GUNwp3DtP)iNZZjZsm2L)1i5 zwDkDO2Iu|c>)L1QCGrI7?q>0t{4d-7^ZEsU;uLu_ykmBRKvs}n-h*d)U!mm{kJEMa zKp%i@@lY1Lu@Ehg78XaLX%2!MZM8N^pfoFOkRTMjWT9a3%c)jF;`0K$zInhw#jU^jIiE~TFqYTmBZgE^X$b{HDIwzBcOz}OCO+fZ0ys!TKx z{VREZZi|fcsQ;)DCZC`v{Xz+eyIB0s z{=bb_x?7VMnruw+RL;VIMslsZm4M+MvppxpF4nRTQ7(4O^aQbmaX~sHv&81^+Ei%| z=Ae8t%#)g{Hg)3KurdX`mN(2rN7`1=IOuh(Wo5$OxWzK9c&ksI!TGqF>+JCCy2{?& zKdIs0=(T($q-aoOf!*v2B}&xqr3BF9W|01k@4u}okUVtZ7+S~0m-{9M%?~}N@QY@ zB_dU(5U%pgG@&$b5qq&)=^*%>mr6^T^%1K|MRRni;EbB&qtf8kB0jZb579wScU~y$ z$L+VzmsTJZErQy3{_pQ`e*Zhx5C%H}Gio=P?hOXb6MwYU^Dm^ll4)M&3W*GFk%W@0$sBuFLj4j0dDmU6^=GC9h^ z7m#6pe=Yo=AVMDj5>QV7arKH(WT*xVnuHwL2b6)rqY!N+D_`G$SMRawy$DzGOIWk( z>QGuvV$@P*Wc`>+n6enOKeQQ=XUOj;P42aFptK^uvT(cqJMg{}nL`HRKg&1-5JDvIrwqSNXmfoe@rWBF zU7sL)k<92{hDVQ6eSj8^(gG^CN+i38(1h9?NGVWZc~x_nt(2682HnWs+%Sn+R{dS}aO+ZP7ctFYlZyXis8EecWkM?Vp)pj;<|&GZ zZa!6txRRIa*!PTg5V;b!t8KhVw z8J!p*TAdgmSY2V7WSZTW8R#Kd)i<=lsLw539Z;H5{bw>Z^JOwdFv8lyII=h>*-P6^ z!CqTH(kRZ(NX}fVPDtA=-pfc{+(3a&mp=>+#C}7fn*5JS5&VZB&vwe~^7f6b)ba|d z3>KBG_zb|CoI}ej4kca?96r|UK%94N?LATD;W7J0&zhvEk8n3|L=zi|o}myS5et|+ zj1#(@k*5lnIr1RFg_?swvZ>2Kqgj6_mUWG_HFTcz>vh=3STI|b-nLvE zS)L?E%1}M!Lm)B+L1Ep`1NG;4J#^jEeYTf0-@OeVpNOPiB}rmzvUyEOB`!#9M!o_= zT`FFt|CfR+KpFq0pv=7oUy8d7WLqCN$?ed=0Um#;sphhui}wm(HLQR5@bBQTg9#uWztI`J2-<;ZpzSLicNbgq`m75YajRNjLu{m?G+n*}sX-_j^JQEIMr-58vZ_0S3ZP z(L8)Rh8>GCa$czrJ!<8Z=L1MWMsMant@A&gZG7PE8p3tC);J+~6qqA~X+_v_EPtSW z7PNYHq)5tN3QBO9cKp2`u#D)NhMaKfcjQYNyf{~xT zSdCbO6Ak8?6rN+|)WDR|!lk)q42}12o_lN}WCLvTA%V1I3Wn)5J)cK1V>FTyMdq4+ zUf7s!CzfghnPAUa&5M-D0~3uUxyH)&cZAn9H^5x~V04QLwz^ty%f1~wDlgUH)E9Sf ze}c^fBvqxa`0NP!rxpEbJJysO>y@JQX9S(zUa8(TG}a4i1B=!>ex)~nTcWqDf!8xM zeM)-veuI(kQE6#C3;MJ z!NF^-$W-`*Ssf7Z{;q9<Ll)K zi7hGpQWp3=-i$+*PW>nXH;ClEmFj>=>nG0JsIJ%L5y^P&r~h%98{cI$Z9&pL`tE=q z=lXpcy=UNpNzz~B&jik#zQx;~b#^|1!D}9LInUO@v1h>YdX&h`m^)VBiVI{4q?SpB z366@-X11Zx);8u3Y9Z0$+zgVclEmlZ--bJ+9^KU;%iY{nYs@YWHSOfBVFtV32pfWK zb9~GZ_A2iZX_@mGqt&!%P z&;eNAQ`mZyRXBP8Q@kz|+yv23xYh%MN*iyp6ddkx0e-f4g9RUlnT-Eu!zuXp&4Lqo z%IL#11BU~PDN|5Wv7Ko|l@=n04ncBqe~YUSy{MB~|NJ0t#UMh;dQ#MIQ5Y%Q>x1j% zHt@9VfLQ>y^mh)(GNx%ztunX zl6X5c$j=>W5Q1TlRkoqsov-;QI%-)Y{_diED-B=n5wx)3x}#M-2y?-SG_}T0^hm%( zhsg8@+K=E>|1Xb6^8U@^NTME@hOa$&-Wo{KAXVB049`IMvm8k`7MK!R&yTBp?BY*1 zt{t{4CLuRDln^3hkd+{-DexkwA&tqW0;3LnB$ev5c6b6LI#ZgWOn-tfbl4;{mna=# z@M*U*atA1W0-g$c{Vh+b5wfpt8l7xB%cS-nUedhATWrnqjQRZR$1E>0oUREI6AX(T zu>C*PkheMeou1@4t|3h?sZl_e;5@*`d=z(oRT^u%>a2OOhw>ZFX|ew2sLTB|f%;d6 zfb+@E?$Cr*NDE*IBM}Kkr!@i}Oi5d>FZPMp#o47987dh-QAI5oEslBT#S3NtH$ce0 zip^5U?OAFOV>2YD!f4TSabi>m%~^-G2q3<94*hO8DkylsKs}>uVbnx^bk>4>zm7Xo z*gZs~^Egy&H>T~_jK1V83h^PuC&=0}$W)!G`Mm)TUQjros9{i22iX19t{@F{P9;BxyTY8 z|KJv}K?G;dd2=89CWC&I6N-^`yu(p}z&^|dvE~{ZXr7s`iT?28QEHyaC!kYIn7S{Z zx6XmODwGr^@b{qP9+o0gveAZxe|yr#Gy=W%jkBY*CspIgA5Yn39viWY0zO?}OcJrB z++gzXr8GUy1IBxA%)37~4{+JXx`dc3W%sl8t+Gdu&qZ>H|C){o3E97q@+DLhJPMM= z>yd?U{a{@w;)9|#Z*xeR5n*k5F3)KHoC_0-ss}5Aq0SiNg;U9D&{m)=5xw# zA+D{UE*GlS{&(Z`|NBL6!I~IXRya|T5+0~Z5*z@BHA>Y zC=ys^UV?D_FqJ@DV039v_y#deC+}#uuvcFIvm(;a#Xb;}-%DTx)p(Qjx|BaqPPps< zNYFd;oVt!-NmBEz_FkzJu{WQ~Fm~%oTUWn2Ys5Y}0W>VSm#1R$$rG1N${JPPZi(P| zMZIm0pP){uV1!uWoN|zhd&SL_@QcF8FC>3C4@A}4^fSN-yLbmS!37$P#aXpdg#8iV z_ai!4u_gk-+HtA8J{Km)G0=P01o9p0>EK^#91 zk8ivh_Zri3&`?sY)5)k-Vt`{pK=o!Ht5bXD22GMpjn(MhG}bXE#Rr=6EP4NmyqI zX8+k}_;LKtDqrkr@24^pe0+q|7GSGoAuHk!Lp|SoH#u>GAQ*#=$*L?hGdEWy( zk7tp>5ivSP^RkyLjSK6q+dqI_2LfVAln9LT$+qXN zZ?kF={C9>=Wb&Vc30V^-eFwFaBkOpYny|{rdBSpEw53q4k;T zh8!r0g65p7=@ZCm1q?CODY$(=JNZ>}r}w;lY|H%2jOB+p5SfOf%3NZIB$WmMAv@uD z>Q{?SmI!aH!dZ}x{3wpx?9;V0$RxKy_!5b~VO7M7>RJZMUaW0vdHfRT+RwCFentCu zExlK*!8__1LGDFH$`^m|!PojA&3wv;F?}ZIow;ATXOq|@;O=@<;m{f?C@J@%DpY=~ zwebO@f|p15A_>RNLiK&J;GR(3(F-ruoRJX`bwPazEfunBT%2aFn)`VXfOfX*rb!jj zekdEw4)uEOt_*FTVc3csF}o5f*j9v#l$!MRiTA|B*LY+*a<`6TD-I(MiR6;rV*-jzTslc3mZ%ai1?Nq1_ALM|A%@wz8z(wg!Xp;h2S7^#mQWC0%wt)ta4LdHA-15<;YlPmnX)Vs5HZo z3^qxlYbOXoeSWAY1fl`i1m&6d{o%3j20b?=!iP-EN^MH5}zLb9w1d*}akL}rTF^9wLe9e0Dk}*V4f@!Yc65;}QpB{vC z5ZqQg#VnXy>($8jMeE9Hi!1zR_VSc9YtPxetHnu6&8gb)x4ZSn75G3`T4B#XydJH` z)~25yl zFGpYh>1x@o5530OsqB9O}V}KStp?J7BU@ z5Eyq(LzY9YjnVNJr!G5!#gXg zf&ZDqTF3qeLCqt41uS^B7fTT2Z^UT|K~u`2VxSpFGR?;BjWWWxzT25!W@2Jz#;s5z z5yJ+y7k%4VO9F=1kTjCQ3??e*S}>sriUag$l$5i8g5r^rB=RGyAwFm$;@*txgmdjI zi&4wKnThUN!bNuuovXUL_a$+6_%h*0QHqYB0n3?}Qhyur+rU&&qkZznLoD&Z)tz%u zOBUA3y-r@7gxT-;_U3(wN&9vIGwf%*W>p`$WLr=Je;V$dqRN4k2H99O)38RrgY-*= zgG+GeR1J;)s7yc6o_tR{!Fl8U1kzT*A&e8GhXA!SjTA3CY>`_&ZO5=}o*jdGjb%_f znsq;dq)5T&4nwzr(;1$`L*l){(hw#u3>O>uV=w|S(8s(<68(j}ZB1JDcNIsYCd{vG zxYoVPuVq_rJ~m+K)Hq6X0w3%fKXq9r*5 z5s0|Q41+?3rLVv7&ccN>;+1hw&a+sbz&d>Jc-KR2e)?9im5+OVq(xRlzll4)0vdt9 zYNy1*@xzZHNXUAO1?%CkwWc*NxVDK#22cRSR;8Xhs7wp_CjMg0otQKf_s zDR0%xYX$vJzg@(dT5JngBR_f8Q~!V!P-w`H%I0CE!C=5l=^#g8J!Lod&#DimudSFRo#DluZ)3 zCX)8!8yiRENWHKvaJh7jZ$4M&Rbml4QAcN3A*|LaG-|HP^+x*hPTn<%?%>4x`j8We zo922kbn8izouF4ug-(I1Gq+aNgY@gae(u?!>4rM#are>aR2{Chc)M8z2DMXUutIiN z1OJrp<;0#A{jia`#pGp_Yc_^tYj3DP+|C3;jk`SsnPWN;dm*}XevoX)-({yDHCI$5 z!g$Wxj(l_{_5n`b{4h#H{vQB>kY|norz&EKuDl;&p+q_@xS9f$Pz?#v!kU;3KGq1V z!c_l6znCG|8BKfMXxdn94;%p#b^K46zuEq9W)Oxa>D( z@s$r1(en(JG9|~fx<$R71$#}E;9fI<-&<&X-Pv+pD&@PflNsS#&#PyO!(OyZWW_*jXRj*0xIPags$BF8DqQx-PsybzK278|s%)SUc&^Q>*&R3!Lv) zeLS?ku5z!9THO7sMeI0?wIIiq6i2T;8)m*kLE6?Fp-7NGK;wBn0w8K?S;u{;RwSYN z2~b3KTFdQpAXKa6fs0Vuknnk>C3H$Kjh-g+IFHZmz;vnn8aU*z7)>8%$k?kZR0Ef= ztPJ438^HlyzJT>dalleUEmqqLkj+Ly>T7dfRPU#U z@>4?q$QmKXXg-gEi1!7WUsD8RIB(uA(dtrjJs_(zc znC1~+bhy@>d#RfQnig2!)7EFE?}bW+4{=PtNY%zk6#TLb1ivcp0Qu8pkJ~5xv-3Mo zPW4IC4laLii^%B6p5p>h*QRp@Ohft~#*!SSqA3m#$PBCTl@aaKjlKA( zjrh1-Iyd#MHs0ioH!hqZXO!bS@TFVb{F+WnY`Dx`+nDm)4}X7DPxOa&c@(g+Qs2H{ zd<1Cz(!SU=BX*gd1h5Bq1wQ4fuS_WVf3#!g&?d}FvI+v`;xL;@0&CDCb1m}NlKcti zt=_mJuyt>4TwBXfOm4)@iG&Vw3E6IfW1fRKTnymRDNXxnI1!OlSyV^-UepmhW2QU~& z_2<`&BSzXL@Ds0|wR@4NG32{l7O@7s4>x@+ABKdT9*Si1i`pabQluUuTFEZ~_ov>D zhoRGX<(VJ=vGh>gLvIveItHS5y@N1XMAX!Sct0j~;4&8(9+HMFZs>}$-Y*My8@JR} zr8XkE_1f7Ze6I`a)1MBdYPO-T>PB0MSYz)}mCMCia!#}$?%#i45+1e86nE=tltfE z#L1FobSENqiIPubI*mzxf`XPAV0fMtjjWGLPZUHsq19l;Owh>&MQv)s!>sDCJ&@nN zko9WlYlV4>fBAEVL93~)i8E*K3C?t845beVrgLA?czR-8p8V0A-!)x4U42KD6-L0M zpq(D0L_nmCQ7HH`CHE-D{$z!vvCIdMhEWIUlXU<0!h-s@_)@@|ui~K|P2jVr_f}~V zq{bGf^?GX=ft}+H(Rb@avJVWDmiQJ%(3|f}KDn(pBO!djB|K8#jIeS^l{^)HZk(`y zi5x&^-YA8V>_ldY&oqYUOVOvU^o%RuAR3k0$Gp%)yu zK!go18%V>;uD(2<6&9itc6?@lbL7$oeUcaiKupTCQ&& zZo=uxynBS3+s-T2fg|q77eGPZG_d^Ljb4j?1|@4!$NEeXK(mB3kK5(rrjv)7dU~oc z0h#lZ&`r$X&ud%Lk})6o3`%OOE&H{7Fy?=743buSc_n+bxSkl%dV}o0PmEx4R&K$Q z))PTl^;9WO7Ryz__#nQ?$LGkK%b>9&PO)907bRhOebJj#*?JaBu`H?ZrqLYQoFsYl}Snbq-CxOo6A zX}v*p5dYPi2;QFCn~tQYomfz8{|xFEYn+kr6;IjW`u|zEW<=}2qS7%bA{@eT04ChR zcZL0+fAP>d1Ul(59bW-cgq1B?`LMDdl-{{50c1+C8V^Be zqudAEj48Yt;;)V7(%65L{=s^z%e@s?4N73U3QpHc_!3rSEh=@*Em^~FAi*R`wJ~jy z8lVh`hmp3vDxDbEqYp89!v=t1eVirR9UraKX&a2Emb&LWa{$kC>hHjOrc!gHde?c} z8A4_=P1VT#X0!ivJdv{6ap5RG_@Og#bP)+vM~-wN;+%|8TOI_nW;x|_%4z8XpxmZ{ zn}+o%1^sfGfo^ll>WBXTws3q$ABG?#`QB6pOPt!Ut+Ma*Ty;6!B8WhUW9W%9%B$Swg3{X0{wfy25wOi z1cA?^%iUBKZ;5?IgDNd;;eWKZ4|^pYo)ZLer}Rtr}Cp0e6?ngf~-45!&LJ; zd!zZ?H!WJaC`3(`iB55+cDN>hWbmMCOSAqQ)!g?5CP#@W|++B2`h zGmiFi4UJoWnt18T%7@Y`--E3yRmSA4`Tef2q75{cs~F$>P0cn1WB9d_OYDonh}R=< ze-O7U)bU!xK6)6?8Ob?$dHH!j;mZmPNk*E)=kZ&B9xRkD>RxImD-fk>kLnYqso2an zoe@YmH7$@<46GKYC`2`y4EGsw!Uy$OiKD2)+9DtoyW0()0;72mBsGUhXw8%9@uaZV zw^!3mxb_F0tfBrxXlq&`+4!$e|G!SwtI<38U1fD; zbv+8g0nBG7s6tl}YNi26CpTOF%;ZUl%i!w zW(PQA8<5@VFe*Z*vuD7%o&XQ9qlcS{n2u6O*T3drc+-%NEg6V6E?8WD?^?p$G9H1e zwvO_-NA@-R(9%7{=WV)yQ6y(SNRtRkbY8;JNIkf|t*&Qh3fyRhcEPc}u-oS_dNUh$ z0qk^s)#ju%n9yt=N5$L4nSg)ZR|@_V8fD9TIa)W4P*$N63e9;4h%PrCphi8bHEPYp zb0fF5!dUHCCSdM%BuHwXhOmILlkgOe+qTr9j3@*|7D@%@O=D#$N)_~1@6DX#m=Do{ ztpGZd5fmDR^v-Fbs*>H~w|=XY;e?froegMV%@a9)?h2=V2?aQvfW1g>8+r1>(omuv*}B^XX64@toGx-7S!pk;ZAfJy@(1 z{gU=FDWblAv(VLK?~N+wd$}{d+7yIlrYZUJVhz$pv;;r3J79Z=_tf3fU4n)5*-Oo; zM*AfTNDHD;UC=nq0}m_5zFWy#9YOLtq!zInlfR&CHEtY)LNF?Wp4+i6fIqQ^S}xqz z5aDaP&6Q8^CA4sa)o@5r!_#|E&Hi_UVnP@A_xBW@AI=E1V(E|<$X}9bk6|+$*j%EYV$H5ZlR|;cTi6;6fh49$3{d~&s^Ku# z7Y5h4H1}Nr(m7Lfo}9Eq6*u2GN4z@9wlyw>JrYTMUSr2P*b?&yBo{@H$JFgLIF&_l z?2YZ4#?Lz+2xF~_t;u22ZJK!n>?yVlre3wi(qTEM_vs=i_G%E<$_4nEig_n~N5ADD z_n>((#3h_vfYuox?iU0>NXMZ0L#R6k{j8ps3*dCUa#Gc+Bru>%`Zh$D<)By^J@ER_ z+9Xo^)7PuA*UBKe3YzF=X#|7xoieU1v~qmh`a~to8AZY;%E(wpM@R1o3>~ zGXHS?j9PV#40VmNR`oh{1%n8CiG(8KvUvTvVE^Ek0Ub*+#qscBEoNyN)Gz*TON*Cc zO;WIn{xONAK4FmaG z$v1(b2zU3%B}wPSMg;v&P3|qK6s(v z9k>@UZFI$8Xv4sXLDbpY-{^VpP-c3`U5k6bZg^_%k?aALL0>(Q^uvD8=HPOn;G-~K z^~=k|i6gO;pV!#_(Im+ICyi&vHR56Z8aTz+!uo3&Yz(K&(BJCkEz5v3qMMJzhqMV% zK*ipF%S($*L_)4Pr%Va(o(AerS9<0`agT zdk2~5^|KZew<6}`f}Z|nw>9X4xt}ca-|;V;%l0nUYiMJ8Jbxzhq(ZeA2h<)Gjw?~U zUrE+q+`+JR>H|#AgC{u?@;N~4)yn4-->a-02Hz(4n5OnYqz)$6KLS|>)h<6sXzCmrk=Azz)C;4=Q4z6K8tDAH!2q5YRS{Y9IG5*H44AH{?^ z9c&G!a4#JkY-r7)x8;_!u|D)w@}#pCH?FVRN^2#_|a@n;-f~nZd)qD zes`C~m?=BseH%2%50Jh_-v>fYs{=QuXL7^$%*<g9~)@&`w3?RNkM49(In6kY7( zr(foCOSxa9dYGV3#s)T`J!y;GRn`8{mid6WWCq97x+Z^a&*sja-L_@27>S*Pz6uBX zo+6oDOW^W^Sw1L)xCHQ!lVk}qi#|i9nAE$?h!v2aLCp#kF(Qy?%}^o6&a|qI_z{Jf zNHH!Gxj-yjWxtTW{5Q*npDV$Y(T=EB%*hXJ5uv(nYbs@D_8C+(_{)2x4fc`4%(?i% zbx0m^8W#3cjY*qbIg*z5-4ai~Z^>*bo}PA-Ps4>O^d$<|s4d0s1jaXuq};nI1ZgMk z?;J)Nz2d$(%PDd}n6OavNKP5u-4}#=yj|vu|}5At%q&(9oa&Ni9S} zp(;c@IHDvuJV-SvM572YJuKQ!MW-r6F-|FR00e*mB;-lP`nSZp{|o&wn26!zXZAbX z5S(xTOil1$+B3SGxyh=ys2!Yy(nKmv8&^BKd>x9YL>|IF$}vNPgj9>qB%G75L9f7A zK*r-f%5@b@3!5CdP_U05p_YKgTvj99U(%$3v^Y6wi{1OG0D1#X2f{p=wO5^(nRP;} z--c=>P-#2JvZ5J^j(5kpT5bvaGqGpJ6x9}GGcy*uiL#() zTCZKDm#o;nH?LcWEs_7p51VahD7&|>rheX-K8lp%^lMuuHE9R?aJ79|3Qp(mD9A1KI5$EF6GTC>Ig>Is6n?4Bh1Sk~pD4|aW z^m_&LGlZo9q^X4Z8Y})jH=;_efv4HDO{`O3yC)k0L?lWJEz%EKAYZCy2V}w;R~etF zxBK|{MgY?fQtLZdfIB~wuP#Z<7iB^C=p_PJ2IWT<$>bSPK5{Rw9hrNU8&$Kkxa{ED zlgc%G5ci6eTI6Ilgp#w2q;MEpn^l7FMXg2j50T zz#9buD8n4G6ZgE4ZtmWJ*n5kRIo)eYe%Lr{C>opxBT59#!6%uax@T`2P@7x5Qo|pN zVfeZVTK^bt6Wnlrt319P?&6UcrPaw;#UKQvZ{nKR5d@_PPRAD~J+Lb|Ti15>iu3z`gdCDU0>}9y=iwpdLg7|i;s{jWWxGo` zt;guaMVHFDKKARBscS`AZr)d$hUU}O=Rbe9S~&4N_8{CtdH^_YOwVC`6qm5eK2%)U z#+Yk9BqchXRdvZm$ns?&{TucS5TFQqs_>_iBYA)Y@<-&OtO}eW=88@j!Ju(jGPcJ? zo)c^?QcSfjAhMg4O35e+h|Q)m`^)zNu>n)Go&(O(5o$KQ#U!_6Bs%H?TEYlLDFjnj zPN`5)@ms`^Q3@5O^O{*_>(-{+VElft?Z5|qLuho~u!X--HscNmv-aFe3^D#*&yv#Z z2cq|F6AJOqbRUlfSJPd4@f>9_=j#>W$`K#WW8*@uq**kWbGNS9AgsH!>z{_))u2^; zRu8mu^lv8mw*QFWC|-Y(SOW_2o~p-mDpO0bqks zff`NB4?Scf7-(!YPT;7*2JwmxC;o+%8o05cgFH46KCO zKv{u?;Y4o`8`Q8CkK1qZd80^A%;&S67Y-8h;q_$zH7PkQyD(~Bl@pi9-wnMvEh}m|`wmpR&<^0clEEhW z+yydB;Sd(=?Eg-W{w?vflqw0^mydMZgf7#1v#;4fF@>l*hK%$NZ-g5O(1F$NQ-ca{ zLADo21ISuOF~v1|=}NIcSn;$m_zmZ6V>4g=5oxW)r75?%Gx(_gQJyx&jvxV`DQqzz zWfMkJJ9@?qQQ8Noz0?`Kx*Fn}mf1OER&euH$)E2RevaRBJ-Q5bV42dxPO1=OSxcj| z?$a3qXi6xwmLAfLh(Pc*sT3by?{eSV5V|Lh!3#{ovdBK{79}uriHuG|fuH;M3Gr-s zSM`~pLiNG$H_8d8`VVZ5+`TjCR>-W22-3RXo35p+8FRbX953t6w2d%iHlb0q8z+U}*X>RJ>3oPH))v zkRF*~kPu|>y(ESpiJN16ztMpBz#jA0&3YN+ z`sla{mbEe?Y6Bc3fVM=!638@SDBp$-)ED71tz6}RaXM3nT}C%ZjQ^^q=+`&#b03x5?bQw~|{% z=tt1qZkdPNe?v~VK7xPHBO8I|q-n`0`+c5gF6yBau#(#LWq(dP7e_ExW}&i#eiH71 zQNE?wfLrmrCBR^Djc?ZVKojX!T{|2lfSCD>OLj*{W#`XHLMT%|;AtV_aDss42CfXN zqIv9S-jDBpN1kofIyWtatl#N9F&=W)sHH-qW?)k#H}T18ImmRiB{5ugL$@Zg;!bu; znAXlzE?y4=$HOg4Y8wEbDZCV6SNd&MsFwA z%?1M;H>SXNl^nV`IzD=j&KEeSObgm{&pBh)VW@M4!7Kirv~U+~t7Y5EeT_Jl|D&B+ zms39-l_OeRy>lB>GJu9xkGbP$${=KIs%HLXEJgRdKutRy`G2z4;J?{xyOPnEG}$}} z(XN3V&9RJDA#3w@MrnzJ-TRB^ZR{3KoGEzS$q7ACWYNTQ^sK^t5FI4xZ>Gd=I8`5Dv~`75f4uVW>}J}%MF#Iq@74Za!>zI-kS#0siIhl zJCD`3X}Kfoa|)VRf+QAEW)Hp=!SEFpSIEZO4;7Bwl8t`HmcBENP&e){pJUPr_GomS z?e^rIr?Q>e&<164DV9PA)+^hiyB%X&lAFDzH$dT^`rBXY8lpZ$JP4pq9K!upj37~e z@F57ljo@lHP~8lqM3W#pyxkbs(6_6CK6sD<(Mmy$iQp@s6e8B6!xh~M6wD4K)~D4+ zSoKR3398VpkZ@BL=Cz`^GcUcwiQ2?Y3>YDEkYZlGx2in9V5ezveHV>T=fRDEXb z^@Tr2S8r08`v+m-{vsxSngjgeMR;QbAp9$vWZ~!&OzJe29z_y>J-$zpBxoeI-ZezW6_H{U zX85U>T?v)OH1iZU9d|^*g7%6*u1dzQw z5+ZFv{`AsMeu4$l274NSj+v)^x}u0+fm7KN`4Pat1+pT9!-WUu*(lU}$Hl3|?O`d4uI+ByH3 zjp^x*2GmaaDJdtno${b#gb>;zeL&a|{o>KS2V3R#j$DoidmNc%K;*S2v9MhHTr_2Vk5!34_41k=>k{wg`T`@R<9U z+F&AtFk~?muPL2wQlMDCj-gL7=$=!Utb}FQs!T$IDF`~6joe3Jla3atJ|jmvggHwt zLh2mj*r;|oGIvU0!e)4FOn2>Ixuwyo6@tL@(-}XeD<=a_YC}gqtHh{2t1w7(jGUBv z)2s3sUzoyKaYU2?cE^UJ#PoUMW?VBUqDUY*?`C+|QllM|LbP)i?CAi74s;C9Dh9jn z0CH~Y1M*y-;OfsSC;yOhso4)uTLV{y``!K<+0#@SH7B0?N(BaImgl6J6n`(^dnLc- z)UP-tZ!tuG5cJD2BDkv|39LXKnY>8V-uc~-0n15oj{q*_|I?uFBWo*%Rj$0NUB-?K>U6=Uu=K6)ob5qxpg$Vtdm*MGuo*21K76l5< z(}3umLrf{VLX_}qHQTZk{HL6p!YGjMGrCKGZ9zoK)673WW6qW+Za?|;rNzcExnDob ze*}~q!dJjQ7vqhoVDt~k70Q$CYiJ6l`C!2@XdIrnfNjk45@N>mCztJGmYGbyrh8R9fDH zJ*yQ?YmSJ9J>YmHJs;`qwz~LZ!(J6Rx%RHX&}RBlfjt1l+Nd&qrP49%G9U~H0FK@Hq(}&JC7x@;Y61{By9JXO#wIE}0q@+{ z*T8iOphZ~HAOaC&lD$^I#$z#TRps9tGaDb)yvVtOp8q|%Z6<{)U zoegML>-1r8RI2-MQtNx0aT8FusT_>f>*Z? zm4$AeVcd2{yiQ<71Tkdx#PQ^Dby-{~ZjZ8s9Cbb-RylN(=wdghOl83To8bP_?iAMu zg`-3xb0!i5@de}n!EGCdfEXuUptN$MZ1`QCq4J6nnImY)Wdq(?(NEwif_($%_#jJ` zg6@{(9WyBt^lu;mYr|}k*3^(hhRnpd*>Vf{>d2{=w{6YPTbw%B;_P~RkhM=01OcR7 z{I()NV{jBLFVQIPK$~_=?V=)a75$X2L8DKp7jU9%%L4!XcB^iS{ug_}!7K%~6CIJI zu;s^ZKQgm@k&>zht5xNZhS|dkaof(+wwZzB-0godm9NBDgPb$T2!5~8qr1r| z@E00`@oqB{C+FT-MB>YIl<}x=EpQaj?Il=TL(lfk!x;vw?dWyiNNGxlO|~sxW1!_i zN1vqRX6Swsc81D;bIWob|GE+RcD9N!nqWc9@8QSm;)vFdK=y9Ttm9}3Mg|Y>?c=|1 z4hJr0LgYp93|Lw9oU@Z2WsRy>DveNj)}^pB?A0hHRtjb)IK>C#ke`WBk`4Mu_2%Rj zPzX(o<^AxF;aLX5Ux4B&teAU+*E-_e%%!3^$UgG`wobea)4+C9ELpHyaz4?<@}hmW zkFwjeNbKymoGzLkexCmBb)f*I)fN1v&l-7ra-PWg0E`8TtAW5a>NHzlf>iV8CmVKTD~ya_zRs>TU% zIS;^&qR&V&FGn`fzzkxZ8Yi$O<}44il;dF55Z{z252#x+GYu%S+oLdkE@Vk@^k46` z??xRf(oy_5?^P8WUu<3Ct#QdmX`1Auz}AAK5N1&&t;1us0$3 zTlFuqk3UdZ1a}yxNwIdl$czI(&%yRX`df=F9zZz|Ce$#*-u($GIb+7!?*PUSMt5Iq zl-OR2ugd5(g8O?CR;7`q2J&UtQE!@J`tNYZH-32s@YA=p<{0 zfnFwq*!|FW1khD*nJG;ZMo-E*N~!J_NYfaG{a)FmVV)o#vRqKX{homD&%K3$)tdfv z>Zz|K*RS8EM3X-+{W@RXw(ICghcB%ssd&RR53fU zPf>`8LN2BQ8#&Z1fbDad3sje3^q~@~3l*nU1rbSx^0TO#N@?L8DO2ef#t53HE%a{b z<@^dtML)N#ZyD2wMkm{Zs7F_WraWoprj{G~(P^!@z&if)y5p}5H&oy@Uky8%du`q+ zEv;jdBUdcb3c*h+h*QKoET!G}qTT3F74}`k&}GrmKU!;Y0^>U4=h}r`4)-HB=FXG& z0J>?bM*d?z{P*<1sRV^3>zE%10(MCD7#ruocK5AXCOE?=y)!?W8&}~= z$9*mz4{SSd+Z((~EE6xzaH=A=V$8Q6{#e{3csUXBHOcw`{G5Nwr~L3_xLSXtF?F5A z|1oW5)wH@DLT@&1m z{PLM39@{WS&WeFE+m~#$9^)Kx$(QaF->FfJ__06cy#iRR2On>Hke6x#Q$;}My% zcMuAeo1d5(U{tK+zad<1Jfmwc=5>941jiqa>4LYuSn-+KsT+9^6V$Q2T9cYhgxyN; z!JK3(EAFHrde#;8wpqtLx)a9RzEagD7|EZ#)ktx{T%bb-QQG;^)WnE?x^+KSO8g20 zZ`8=_O#{ijg^6CM`{ssLh!^Oa%f1iZit0=*fyI=^%EKnAW>ITsWDWhou*L{R-5VFa zs6cPpSTqy~@Pm+uHpjswhgn~&O{q9=RPBNN)JRaMc#bx7fp*{Yv>0btx?`Tl?d@so!=$lpJeQDBR+@w+GTBtTr#|QfgLjw zxt`|(_(7^f@Ri%fd~sBSzZfQ%X8L9ZQFy_9dgV=|d@P-v)E)k|54UK%-6lkETX}e> zYY5TcbNYFQ8Xnh_8UmONfTYBdwDTJ523H17NSrR%nV?aW5p_ z<2=!NyF#pFod4e=iUTK^n<5$Blgoi=Hqro=om^b>{f&!PG&(+$6A8dhxUk&7t{Me^ zf?X{BxC1L3*iqa7(g>r*I%QE)mic)F0!O36Vtz(>f@eSs{vyFv-Y7QZdl?6Tsio(_ zIlg;sf9p;4rHPY9)~C{#OxqCWE-`CF4`8TDE{e(|wsWqme z>tnmkxKL|SvhQ`R{7o%{Mro5#yRfOtUUYilwy;5Aw`N`q>Q8ytdRtd5KHUMZ&!L1D z;7hG6{J%r~Uu1N5=?wg^V}-eUp32-NlG3@&_0J{=yB%D!2_GXVf@8pw_tj3Gvw=w( zAvv}(&Wc8*-T)HQPf7{|(6e6o&`p-`iuw(HSF!{qsoqjOR3WW1>#5rqb85}_;a_ak zpsmdFS+!ivha5}mYpmuz*+%Q`drC)HiQpFD12VdXmCw~gwBxr!O}?f01ES^w=pMkb zp8xsUp8*Tx$|v|rEZ&rBivdZaSJ9w-5^RN}4p+`+8t)mfSpipq1xqix7>R`sP}gg5 zf}++$e!!trOYu;>z||xddr2SkX14^1f>;$5EQ~GUh?*x@3rZZJ%!Fsi+VTf)L=Uh_r+hW2%9`z3U+Beau^w3T^!);&GyQZsOZ1{A0;CH6E z6Lg*RGJ{`x690>B-zrYyNdU#57n`Ltu43q^ku(Ahu&@2JjuC7w)8WArLCglzq;G;r zEs^7AF=y1t99KxFmr2{o8>(@@mBFkgsBXO^DZ&gvNiz}~Zv=@`4h8YAwm@rL@2X;7 z3pP$X1xGkMLe^O~QvH5`)X z0A>|)$}}x?QXM+e%fr&7e1NP365x$<#6D{K4J6*Ko16X5`(`uvNjaC{$A{Fv)0C7? zA}$;ObxD2j6#Cu-fZpY;^GT_aX2_ToasrCkHq?VAx4&Vmq(!#V0Y>f}QyDRiIUOK# zHVf5HM>Z5tBN$*dM$A$*Iy1#4WFJcc0u5ev!;}6Hqj|r4eTV0%rmf8MU}kS#=Nfa< zF?wF%z27G!In#f9os?NBOWhp*O3+i@xv-k*HaSvb8p8jy>AEha=iT@hVLd=25UXVU zJGA8Il>qQ5nl4cL4b!BgJSo2w7%GTj2yI9Dt4rr^2_9|2kfD>_o4*8yX*i=3T|j0s zI7K2cS}3Hz8M`kQflHMN2RJHwS3zyigAo|LMn(aPn2>CrL9TW|0mb#|Sbn{mu)ex| zhVSzU$~P|W=$_UeeRrQhXnMd-$`+xk%!J)2Oi<8rne4nXMZF0_T-wl}h1NTMNxi~F z7hB%+(McSHk@*eS0ja7Hhxq?iZx80`$O2+hamZp0R4xXRA_=C~7khj*al-sJXoKZC z>H1NGY9~PMlPOulX=HoRL=lDOCARanN=WV1S)6g1QFBItvO3}mgd8MFl;*`|QecfZ z+C;>^XO9$iBJbv=!03DrF3hyn<0KEfxkLY^ouU{9t2+ExqK_tWSZ)I0fn@zqQ2Qlb*>?J|uKm@8} z5-L;Y?^D+00Kh{LDRz?SP$En)^t;2zi%J)Xx|H`P+#t`XY4jH3Yc&D2I+>5w$W(ep zIj?9PrM^T_EDK!xxkF(KEyW z??;Kcs@bD(BP$r)6Pn0hJggf4%4k4!!W-^-*nrIEnZ(N%d)P z$__m|2Hjt2Tm@Qe>SSgC+!}!PfzXnM}lA1*{$(uM(~O`Er=wtWki7MUdr0 zaADRK#dorrV2a=!(tocuE9_)CSf~azcVF9oFSDL1nse+v6g^#Uol=W&-L{w=ve(Dy zV4PZEK92V&{!stv2{8lLeRZ9ToWhse7-KvsdWvpzdR;Fc@`JLm__yEjypM{-HKU9x zLbLlT=pdV(;#W|d;{FVZAv>SDEJlG0mjY3Q#p8+30iQ9KguYjRRV3TuNBoV8<<)NY z&SU|DA$ejnBCYYG!9tWL1c5{JZ<-25MfE|uCutJkd$YsGv*OX^BFqlGs}`ihyH zDCW`nXqV@j#?L3F6^HhwCk=e)6SJN%O24fgQz)0o+)&{BoA1x_%i5WUR) zQyf-}@dMZ9*N%=uNqkrOaQz|D12mMgo3)ajT(T!Eycq4(H^s~WI*w4Cu+)Ff42!?T zSl|=S;5l@!OU_4L5?=ny!%EJHqxh~KXVS)Jn9&x01raDfzteUuMdQt1+=PMLyJx5FooEiAvylGE7Bid*yxSLb8m zZL##>pd@}R;^3e$B6GBDl&_Y-o~)ER48M5iUeiPiaMw~MtRn#OX_nq#H@-aeMP z@-Eupput`TLzb=waHQ1n1oxvoPSky#qCuvcSA=IJO4{zra5L5WY32*w>6Ep93eF1` z0WNBYHMlo25O->!B(>#LpTKr{vPa`BX5a&>$0?YlU13>6NJ=sZz>C&i{4U8v)d^sT zB0D`2jj~;#^OK^5e6pqIWPRzxIXmlKUh|p8O5}O#vF|=I>s0yVF8WHR*LfuPhO25P zer;=+FzGHb$;HGaG9iR#|6Oq7EM24jgL3zqNLev2T$ztxJ9)wEuNW!rVmTs+iD0T^ z1P;aXtlPj#haDG71iB7rJ^C;Bbj(+83c$0wk6WSPjE#pRXq#foO&VxF?!xcZQ{fu8 zZ5E}VG+jMpOW{5!Bg%POp0t3F?;N8k)pI&FGEJ-H1^yTHPjbRR}h5K=*_!4c?Ea#ue-}nIR zSIjGtKfW?dcV3;-(EfTckQ-1=6`9BXe~Kx7=MIXfEx}XWWU(GsDB)@gcGaJb&?zL-4#{7si7<S%E}=j$ zqe}gKonJzTt$^#|LfzKp&5KdR+%%j9kKSF~nEFzG2? z|4K&aS43f_zp)sXb_p)zLfsKmtOWVLfC5eO9he2uBhB>TeL_f{n$K-~Lp|nO$gAx> zp7)nF7OCR%Rh2u$KkB}#+^^PH5lotj@z zV|clvU_O4>Z*Q1I4VO~hMr44H-}?XU_V67w_}gZ){CBfq&$_w;d-3(`ff2K`DZ#0S z1=6y_L@<%CtRuYOk_E_m&Q$%Hdi-;nSTiE#@_B`0+Whc6-e_oOg~ACT%FGy@H%^t; zfupmxk`qGB_QNL&3p|ZsxS*g!74l*b$l*jSz5{Csyg?@@Bwx$~! zLd6vn^Lb@CCz7CMb!AyRR#dVw*^GJlwRC3>)4MqeuP{FDhy`$i<)xEd701aBu{~$VIrCt1aw6-HagQUxLg!1 zT`21n$>+} z!-swalHJf{G2r+iSTwRKKK+0hIz5O@h}saW3Jo@CxL!6Rr9<-Xr9rTAPxFHf)3D5{ zD}1VyqKOW2^S$!(DI*QDd~> zBkcoM0!IWfpT#L?_W&=Kv)$u3oL39{&5Py}nphw1t!R|dzmF||_Y^{X?P=Bq2 z-@eo;o8_`v_rNZIOfe6=XX!&}$Q^6JgbGSvS-lRrv%nxaG zs}mn7QMgzWT9}8xMp+dl2SwafuwP7)b$IO>YD|vt(h*eP9Ko97?T?s91qt*;IRaoR z>>Rkn-#W3+#BkJ|>blmX6( zN&L4wkEb8h7HAgEeIFQi+WP4$(`eK6F9s4h;J$jz>k!|n48*@wmfj73rnmNPph)#M z?Sx|0KawXehdYM3-6!2?+aJL$3v0(^zPFq2eTl@KU%#$99h7e*fgFCzhik;;%Bi$y zv4U<(x~n_n*9u>24QuBq6*Q5IkRcm+-*o8DWL)~lH)P>WI8S1+(v*0Tv@Tbi2qbEo_2 zs2cd;`uyrcJrp+_N%)ue{+^Dp<*UHvoiG2aiuM~V=$MmZuKY8V4En!hjQ6y6;pxm_ z2D_|lg*1+z}dm zm4<;Y?ajjL!8u%s`K zh&(y)_pV^cf76`Z^L+F>4>h{TAb{%-k554q)kNuU=~CWDZk22W#NuR;DaLdw*<-MG-Xium^9qidP;d)$5Eqpmin9YmTl z%e)&9X|k;JQe|6-P6L_c;~iKJhO$@Hkb0>x3Jv4y{)WAOaoU5q9vuS~;_gb)Ec2@G zv3j2#x5I`DGY-osTww%BzdCG+F^8bYLOp$}cFOd*Wm7|B*7?}#WmK@rEo4#eP?`A7 zbK!e)tqrSRqN`FCn zrF4g|;D5hdo?Lza7~(&B_-Yl$^s7xi*N9FpzSI=bk~89{bY?QM&0QIEPKvj`yv^IA zlgc>)<-kYsjb!>6-1ftHUV~s6t+=WB=cIq!i?^HdoqORR8U~I)GmzeNiHAh|W$qcu zO8#G2?di5@q*Ht6LMB0;7wngEC=Gn+0wWzZmMXS{!0aPHocNrXl`t$Nf5`uxoY0c( z&$>7jQ2zju*i<$a>R4S0F|ZB(OKjf*98VWH~Gl#pA+I%8aA#i)xSj12Yl zs?;p0;d(x&sNz{#C(2ciM5Sz$7yic~`j2PULsUC%-?G=NuB>%l^Y{4ax_KRH=1456 zjKod{l)u62Vfg6=5?w3(7?IJ#57OP9yMa;%keDsPyn=;_Gtx&m<+~_B@>7KJRzxnW z_C|z}d^BPt`n8pxuTw!nWt`$N3`eY`K(`y(&dpA%}`IXW!s%1(?%_ z-A#B{@tf*}hOhS<629Z4tvk=qvD03`iCeZmYo0ifuZ)GxQR3A0DDopUI)&IZyxv92 z(LWI&$gw2v1VbN%s|<*_C=hHm3P^;rZ9j7g@hVKN@O)d(b8zEz?9hqu7&$hB!Dkhn zU)Nd5L$MpjkbYC}%IgipR(*xRW6#l@ zX~lD{~}iiTL#a+paoHx<)?j3aV*z!QPg-&md1k0qO!@AmDh%j z2We~`H}L+5ir`@!G`E`>tfG zie5lXDBZ;O)ie2JNf^XqB_$Upb9(zNBuIi0)kJQffedY2*F)*@q$#!Smb&UHLw z{oasRWiHvdX-hf%BjWs3S~Yna(brDVCjLL89Z0r+!#~V{2OW&`cp?D6dI?j2GG8&s z!GXyK5?Ed;g{=k@-{i{C*8@x$KvPM%M?CB%P z;BF8Ixmm?HkQ>4=`&F)NeUhh0)(V7O6R}Kl*>v=VrVF9s*Je0wkzgCX zKMb^U$Fa^(btc&6BD{ga_AWWZY0b21gVPhVt7a}{?DnKxrl?CbwZOhcFK$aaH68PARIkn*Gli^F3j4!zId3%`E)srsgUd7UCt1T}WIifbXh&G!(om2FsaOKJ+}W~enX1zH)DLw{EFp#^`1q1& zDAx+olWF#?&1_TDm*KzMIGg?1#2T&an#uLF4t2qwPPlJb3*(xXE9@qHWr|3Hu-{1KxKc=D+jrZEEHiWK=8qNH#C5txxsEOeqsR|8AL#e)*qc zXb}&G01DT@>bu1s*-LTc+W{DW`G}~P#j}hB1e+q`YaL@MmB0aM?g9?0A#322_zJ9b z1LmDZE`9H}g)$$6EPqG4P?ulx$)4YZ)=bMM_FLmq5%X#kYyn~5v5#6&Ys{*ZPlgh! z5k@+uL77HdPewtNKdoXRv?k6<;lOD#6N?f; zp66~z5@IAsND9tr! zhCP_Vy(s#Un;|7A2S%5X{JgFyzH@7nF@-C}XAh-=^m21;h0)3gz?IUPsXx)KOFX28@1SJy6QK6E^epzfdQ)nvJ(H< zaQ*{@eElcT8C0LA10tFnPqAs7Bn$0yY{cUnx(S;e1W3+7q4-(_I0wVET<}aZGJ<4v zsUiB@Tp%2;FT?&4{O{4pm=&InNkr`$}A`vZtXa<*=3 zYkLYe{KV67Ai$}}*YyxV@e<=;809@{BFzc^{v$O(VX`L}{KM`~6<@D}0gWXO5NG?c zktuHi#~9srTaK58sCyPDPoiURKynqCE9}BFopL0ALQyo$Q0(g@@Xh9tU!0Cc_yoTu zxeo%qZq!ePopvlDYpJFhH11<6t%_iNvjpuyietEqB`3dLTNj~ZI? z5s|xF47S6U8NYlSHuhr$70{JqQ*7=c*SZxA(;-<*%HsuF{6M3m#fR;c8a25JorfvP zR#4{4s8|@o)4!yTudN8)=C#7k;#fuO1hL`%$#*M1M>r5_I!lo~o!7JazOi;UJMhVs zjRiMe>Nx8pMuIm_9E-G7zH;h?d0XRH;ljLHsJnf4Fu4?>{i*gRl&N2jhI6`g;GrfQ z)N_K6%uyeUNSD4@>btA_n(P~=`uq_Ka-B|8rtx!96!XY7rH4MvFEhfmV(N_Tvz71t zxwsehe|R@CjCs*TIF^ZRetq1)w>3ZJlue94kl_n1T)Od_l~re;i9!l8JC8o9JZ-Nj zu$I=%kEr1Jl-18EHbdIQh7VN=Gs60ncOk%W0}7YVF*> zP~#NAStwS)hhIeLzx-2=SdAk%J93CCiBkUzY^hmpcN zgf&$!JDm>-4uOIBu4tAASDblfzG zF~^ms#UX}`z*?lN{}e$^MboeA%dFi=_1T=|;pyA422~mjllJ`GdbFyqeFyxg&lD3z zLNBF`FBoKA2ft#&h(E4dtB``%+Q)43F_n>esvB?;KgH*NCbjRNTJpW!&3NL2kMMv3 zvSviiyD7MR=Q#A54{rt+OHLEM2l&5;VHqUcp)qlho~wve*ndt8Cy+e;?a$|IJ8 zAzaOl13jR3QlB0$3Hj$rU?;J!J6F`+ki{z)0ZLRFq9F(lf!eFEz)=LQTTjiYCVBvx zekN!bugsjB*Lg9>8}f7LwhCM!ZlyeH5WyakvrIF*j`AL#vqSvi`dM=q&skXxcFuF3 z98l}1{vc@3O93={w)R=jVM4f>AU^nlwa$~KcTL6iPbapsuXlT!zpp?Kt^GZ0{&^v> zQ4#7&qMWS_?H9glY~!{sZWNuM37xp_Z`B|3zq(nnA~fBOte8#lP*;E9aQD;CCdrEl z?OU$?afr_WWs)3)o+|0!QbZ9!mOu0-Iq7YY(2+T7H7x4KbBRpxT8R;9!S|GOKk*&w z2yumj2ZKfq>qLLfCtUi8Zfudimi|xrdGF8#p({T%<_5*)i;ne2z7c1o^DB37^YPEL zg;)Z}UU)63_R1kIchkOlLWY|yr_?X3$?{SueGQ^HMkdLHtZ>MsLr6RLu*A zk;je*r>kqM`}g4KvpVO|#R&FvCCOi0Q7X4ybcVL}ZhqbWar1cbX$_8h3T9mf+ysGe zL)l6+oTFC~&#k|Z(-Mm5cBcu5{h~J}CvQNy=jqNWAwjQd)aq^P+tfUq%R&2+nYVd+ z>P6;HLE_Yw`A%nURe)l{5_>&GrwIjZG#M#iQ}#7nZfCn;#ESySX2OqmMZys|1C14w zqlM^!I#Y`QQ}|4f6!f8~R7}$>-`Kek4knL&)*KP;f%oX{DRftej^x=1EYW@X&{wMb zfOc97Kl{z>8E;{FGy8J=Z6ez;L*3PtnIMaC89$nebW3DC0RLb!8U2P;A9(mhxFbH+0b#X7(O^ z9_~Z>{N-{z7X5ZV`4AZ!{J^Ds2H)S*xc#^CcKg>8F8Nice@(eJ=9JexREZ%49cI0& zqd81%x1^C{_w;*UD1P?d48Gv6&PWRoe z3E(2csB~GEv<)K1j8BLB8YnGspj?JxyOrjgi}7^1c)-=W#n+KKMz6V(?BQ22SIKfm zt;UHgRqD1v@T11sI2=Ry%j+56x-;mzalIGJ^%Erjy)jKo(iqzo9!EK5d$Zjq$8eSACF(<#M4 z>IMERy3d8S1HAO3O=IFeK6z~KKO2)fO6^IzF6lx#moPr?O&anjp`hCy5Gl((%u&nhfIU1U1TZOHI!8hXgb)lX@T?!#3fGQHHt8}NNQd|+ z%29(#KUK6%K2h2IZDDx=W#eVb&(+>n3pDWfNJOHZBSmo8xY`xHZYbIVW=PPWq1md2 z{`^Ja?-&PT!(EG@a1&zk@d8ksk6&+y1W^1?QHx2n9{H zFxq~HCJ*u01S3P)q&dT}dZtq-bN6Ns>jU?wJINLDbsrYbLn)GKK1ROLAqk76a%(?R zU-&NaqkXE71a|7?bB}y}KoJ2u&W%+{wJ2(@$kAW2kgWRInUJJqTkGm>K$b}uDnjf8 z5^87vOiyw%GMj4V#OYMZ40|KZgVds%tV~(M(WZhldFJv>71jeOz|%4a6l89kSN$g@ zBLQDj&$v7Yb55q1i4Y-Of7LmE_L9rLj$#8c?WE^-qn&}ttq1z{DFYy#1)De5;_`+^ zOAjdkN0l7WN`9>I?B_ugpE3=ccYodj5G!+M&M8z;; z`UJgtoFsF3!BDr7D>-laJ_g@$Zk!?^sA7y_LUULc|am*l~<8gRZCddKm zMK}$nikgWOIrwlZzEZ$B&=PR#(s3z`V2;zRh8XZMv4xP}j1+QA!zB+Xnud3u*$qQ? z(D!?(c|21By#XrPBcY9t-5n;n?t?xChQgb?vXM!t7k$)kiN=cre}U#r9i94u_PLf# z>OnsnL+xPu)CiaEH8%=_Cp)W}xi1=3Lc>KH_g%wKYDlf{A9g7T{lK!kO~A9bUNLpz zntc{4TIjiFRDxHXH4hZhz9qKAQt=P_qVkmG`t}NopJ=OS!i~SqI();iq?5nVmB+__ zy1d^XtH~x0(vuCPP-c%Yk4%U%$B`jtMO2o=OV!$qsEs!W4~aAK|P? zMWGPIiaN?DGsBxGk`M-=it4S|0OO}xcskW{-_&%%gn!IanO`ON09sc6JFa>97dpf# zbJvpw5b!k+4kGTy-7?<;DS|&`f9rCUkpF7e<4^a$I}f9GK!!is%8=?S>)DBHl{J$e z<_NX$%BPgUtDx=d6fbB}e@C8I<`Th#uC4~TQAVDHvN zKv;W~?HT`*c1d-Wwxqwu?q61rX@6%&Tw-_T&8PF;eGA{ezg7?$6?>+BUR}+5e@sd5 z2>LN~jn^v|OPXS;R_C?a`+P#aLNENtzwGKW@HsSNaN$BWwRZ(y?5X|_xWfLQaf=JN zicTUND(LSR|Bo{)i%7tp!%8$-P~o4M9H`G(L+--OpCp4Ys~P4P)ZbW;qEzT?mh8;b z*_AVrW=I;|^g*Ko;*^#1GiMAbC_}&a3J=I_%`2sha=lm(9SzS8!T-<&ru125dYOt^eDs3d%vts@K7b zc9>$7CQjM5Y+V!MqQZ{E7m2a<^HaCX=L`DZ(Hl?ETd=NnHgoT}Fma#lLs+qbUwhc3 zmI_%hG9fkfIXgw=b}Ea!AmOCy^cCEqW|6Or)c&=$Fheo<#QgZPtTx!*g!~8SNa=RM zCDD8?wO4c?EjH6nkx%NW4csqi(6}MtLD=mu6fq|A>h~ zvNRey{6}X8dzWmKjS#!Pd5xd}tIC){OV7l57a7a3FybLko-xEQ z&600})XXDo93X*kJzP89ByMW=3 zmNscCPB~=qT?lOpV$S3*8I3JdV7I4~mb@a|xf8(hmshYcnNxGvwolH!1;HgA1}#<{ zsD(t(uqV&>E!$m}l}Blo&!NF06`|AUTJ%G7rV}QWav;O-pjvvTuS~X6VG4p6ZSWj+e2#+% z3KJE3RE+vX1M&=|z1SzH9e5nU8QN0W4qyuY30?)su4uSf;A@`wAAy4y`J2F@#> zbg-68LK!6i@j`o0{MH)>G1P$+w^`(kFqt6+Md7UwJ4xYkjXiwY`n8N4hsGoy%Vb<( zj1rZP28)of_#{C$qK13htBf9JH=t1p72JbyIfn44W%we(0VhMglsx zT|00~sm!@Ut1waBKM zY(t3KO?mChRW+t|Md1{X!Wps%Jbp%xs;56B};W} zBScT$kqpx6Hw1za!G`Z~_DhL8>FOC{b$_CU)5;EC-}gmXU{Gh=Agds-79cC|7Yyyh zy!BsD`Wt!cU7FY~0}1e9WgC$50DE{;ie^GqN?KoMZVUXulhIEF#1`f!h~^PK_kwn- zD5-N|i>IDXfF1Rt+Lo!vH?qd~k|(-r5L3+>B?-CHbT@yAMbwYhJ{2gwxXgij-;;P` zu(t;bsw|kbABH~mJ|`*r1ghB)Fa(fPT&?Feq|gFVFv7D{ZT|o%&g8ZQL~z=~dZ}jG zQlGkgR?D*gK#0Jpxn=#EAVxv_haVMMe3=V_{z+Dao@*yvIuWO>y*-_9>};po+oz5r zcrH>@ym+p3Q|YlfF-2C}RLvEka@MNeWgGkB0=!>LaT`# zTW!Qj8wf>6Z}blm?{mx*cT*goaU8fY;mmN=0SH~bf|~ZQY)~)V3P4akxz^s_eNpeD zw#?H2?ls=<%KdO$i%WU1M-9UtG-cdIoTyhTOT_-aXCc(R4sLNRky@KPM2{@osssZ@@*Lrl~Vwm&(=AyX1qg8}U-Vp7?lFCAv> zDN<|>idRlp!vK8{VwY)=9gNzPZZjm&8pp|HejgL29l_0eRD-xcU-<^NRnX(Lvel>U zE{rqx2ZU$veFc^TL|bnA83S@!96aX zdVE@Hh%QG~oS%_cQH=WI#drE=6#pqLpIG+?dzEJ*$ z@2hFWqyh^aUwxlquI8I>j135Y6TVIA%?`YJX$vxhxhB>0_$8=D;IrW!!<38K;lVM37X!jF0Vg(7Y+0X+fm0`2pAPw4S1PwS#J>%DS zg3t2m;vf&Y78uYy*f`93q{aG{h#(2DMa`x>lk08+b%{fwd(S@Xp`b`y9}=T#WDLb% zT2)L=^M6td;Vxwe;6*+=v@LTi%vxUBJazCPim@SdDXZU@aFX%;hy4>S>l+Qy4Qc6}0 z_R0mJx=XV3+;;*CvM;*m)w*faE}#FnXq~-Oh422Gr zkj(QfgqUXZi_3@mwnyx3Lcu$e&l&&M{me^Z12$Si4zf310AS}fh|u_@h`X;d4)tEd zUIIIrlfo#e{)!hLb4sct@>HO3Cvs}viVr$_sZW`Bu@nKyB6z9z(8`t1#T%GE%*cu`6F_#av_PBNW-6`_GAeyUJ3p&ZedijdI zM9A}3wcAP7+*2taR}X15A`uX~kBY>M!Rq_0w^l$(xrI?mf%ms4qvJ_g zRAOLa9%LaT(r(A*fMkJMsqVJdzZ48&!`_6cP5$d)p1os6 zj#{o`Uu?-8v@DA{S}@q#E2^?%a9gM|y*E~Nc%S>F;+A~3h=-1)v>!g6>Hg(IuVvui zzC`|x;M9=z|Ku@;o`KitjMj38#0z`>Dht^Kx3$J><*ZHE74zG`x(p_Q3FDLhNwMsC z)+}K%X`gZQys-JRn_f80*j+n!<2j>i@mDWMxV)Sj!MP9T`m=kF zJ08!gM?ksEBbijb7na_kUo-$^|1Url!NfP$-}s;J{G->)!1o$9Y|PL?N_@8PPy)Tp zJ&}aAB_pJ$x5dH1Li++-z)jWFSB*=G;;P6Kg+)^{1rOI;FHAjJ1K8&T`j}SS3K0W- z1oqP!Orevx)PLZhHbOOb97%;2G{_0O-5o(Z67?80?#;GG3E9}>2p@B#6EPaKh(~8W zq*bc_4u6;S{X9XzEqcLIl{}k|@L6#;o$Ek)jwN;?dhk2m`y;->dnl7w*n*nC^rc}n+x^WeKJIp*fA{VG#Mh59=a>7S{&!$~X6YCQh=4og!JNLM7SZ z>0Kf9{kt3MzkYFQkNPCGBjC7xX0+?p0Q3VN_4H@khYf`G$U3$-v&e}rH_lA{V)Vr% z(aI##%*r|;%i>F_RgQ&myvdh%3!^VNUyM_&tddQP6S->^qLvn?t+wec(YUk&l)uz6 z7bd5Q`elkr%E*Y+q;&XsS;$CQCmJ~WRr#4%IH{Nv_^H@PnrN4cS{TT5^q6r;LQ67( z?P5?2zFpvz6Qgf68M@`0Q;-@psm8w691vlz*K`eCl&F?ImL9uX0CYGWz;%4=zTb)- zKpG~r&T^yktrf}5iaErVI8Brql=Y+-J^mnA`dhGzB)F6b-;^gQ%XJt!SeBA6BYk#2 z_kuP!XrFfhMzJ|=bqionQnCb`-OBN^YkpeV$)GP@?kMf=2+<)CuF|plA>!&7j-gDX zbBXtq`}y|>z>i&ELF2Hb{krR8gWkpw(YdE3ozGK*W8DIHol6_`Mmx|V=pU*7lfr*Z zl_D|dGixkOV9B8{uCW}!Rx;L*M`#lKquM{|IzqOTX!=x^LWJQbnW|(KOS_8$Z#m;M zFaf+VvHD$n@R^i2YXs6tX39Nd7?D1=NevWPOFx>DVlc!x5+mF7Zy|(Qm~J$-?pX}H z=TyS&SiCAgTW$4niel?P7U7eAnWn;v2%M?ab2sbHFD2>c6L%nB94+rdOAn+=z_Q8l z+!F+WrNYl_{C@)8*Xj>_%Vqt>C~GP+FYf$~IeVltUlHf9w6mQ32BRz@p!JO8{9va+ zl*&Z>Qj+736A`uSg-#}#NK%23)`vp8Nhgp={%i&N!JT$_E0>{^MQmA?Js z)oSt2bFq#NICDlMFbk;PbPdUCYwhEeQ!jLDgee^GhOD77C(K+Ws>sRJWA|!=jg@EO z7HkcT^QIdwT@RuQ@j|8REb^Y;+DqU!WX8(Oe=~SLd|Rnpsf~a&)w_dd2agOmLJ08p z$RZwMdpB%VDp$zP$`YbGRFS@#p}}`^o$SV>x`)S-)t$b^Ljly`UMd7_UvIY0=c*?Z z+;x@LP8ZOG=7j8psH8H^p5SWma?Y2Hcv$R-+vHzc)DF>ryR_26W!(I*K>h%lr? zN)JlbrS-R-I-c|!m+XJlLXun=+vqML=5NYFnX+3Gkl(QKZ)7Z9Q*sjPk=_xC3thAA z83r7&m%NXA$NuBiWl(}A-P|YLXf`YdM=1S(H4H9USW_wSERqP>;oJBYzSgllH-9P`?cxUc;UNlTy3y+3XZ zDSda+Jc?}8jNS}9o+FTm;P>DA=i3`6=n0NzM;Dfr2R*BOXz<8JqHTVF>Jx+-rBU1) z`z1S8L>8LueSCcmJ$y}-fixrq+#GQGe)fcKj3L7x0pfW40^+ri~=M|2-26Iu*~vjFj;KkLQ|M+Z``8dA^!#xlKijf{?UtX; zfIvE}zN`$}E9V`*(0X{_U~D~6X27GR*Y)YkkGc!9l7NhBez(-;cBA$5d|LY1aRhxC zDcH)3IorTomu2K^&!Qd1uajbA3+_`pGf&__yW06#|10DKyZh7+nI_I*esucA4X#z4UK=)$Y`JhfBZ07F2$zbq;T z`GW|N4d0Z{IvY)Yc3f*PNuH5_KK)Wu!Njrsr)?lDQ}Y=%vryApBHO5rmG|imC8+t4 zt>T=)(HiT+_*72@{6JW5hl}mCp?Q<4U3_eso-Hl!7P-(fk0NUPTh|}+Q{ffEgxvWe zB(_dj5#%YAvJLb#5N>ROh3nS)2a44@u<-mwUX`awaku26OlaMnVjc=jon{M*Xf&i%l7O)Y-C+dRg6 zvJZK)bImn*uuAZUi3ZTgV$<_1&a?Jz!y(neRyO(4-NLN+o@1XU^&qJN>5;Ht7bv}c zX44c;E!EIQFCUQ<9*9Ua4EAW}adaTgtJ=yVC5TqzTI~!k!8_TsPSpZZ)dbAe5uThB zZYnPB2{xqmRKB-iucy^{Qf0*DlGsZ?R4g_bG541sINylWg{{)dgDlKG878?U-udW!z@1E*(KP})ZdQY}R0 zvpc5*(l;-enNa+vLyS!zrEPIfWiTu!0vklBBIklmNkP z65_fx4`tF7H^$Mf($v(s`ewMC{RGUp|AiB0DtGdSHiwC=)W^SYVij==(e@b?bugdW ze!1i+JPx&Ay?i)o-PO_zYhp_=bs%d~KEU>Z&R=zI?#3O~e!?o7-n`s)^i=O8ztPkB zr*mL?$0XkECZiz%3G<1Hgt3&LA%3Y8r|jNj_hy@G9QSm_eS0EXV?`?LK{AG8Q*dXT z9pprN%+DIC88t(9kvZHJo=N_h8G;+i4)Yx{wZ}4F{9-hGd{-Z(Jb0zd%XwYQFYtvG8Q?Lds@if&-?A+q39a)tYjl|OZUyZ`g#2feni zyeac1Cs}F|!B8f4xK%pE@(QucU2Q%0KZavsY;WGhp=94f;uUS3<vl2_&X$n zJ&j0goSYC@P#7iE%}H4T2E*y6-0@}FEkB8v-*e0r!R%loNa60-^s(%!b~<(CRPMvK zalDeLk*||r+j$^<+P^@G4r}@0!8HB>ihC2{k%ji3abjnc6?!u%>wTDk3L1s~A=ba~ zAKu2Nf2B3P$AMd8?LqKCtyyD8!D~&D48QXq>b%vzc}-_XV0j zgmR|AJNCK$+ORjS?s^R-2z`L_&Bda2$m&3x2AyDEn#efPMZ+`A^7x_Ojd*Z!!+)m* z^~|)q^6FNwc<{pnF|AGRw;cV8TOZwmX9&pGdeN5nt)|$n#yt#R*7oU8TjH*BI$&1+Z1J0*W$%VG(tVA>)IZWU*kZ3yv$*! zC~ zJ~;(lH5y_9Pzvu;^2M7tl7Pn(2e?H@4%CD7u}9t??zfbmAbc8irc(dcmGSMtM2=A; z!4$Ms%PE=_g()?1z6hEYiPCt+ecqCWY6DBR~s?;NZWzQ=xVg@0`DLKrp}9ID^7`eoj`b9n(Wcz7;Ar zuC00ZMzRQ9Ll86xod9Y!Dce=wVfFnT0vP*W``+ZkleDwCBh|Q0B(1Pk?vmpwQWxKN z8g*i8n2!J3i2qSAui%QuNHPJ&Sj~7QS^Y0KCo+<0@Mr6H&yNfIC;LOa&$k_IXdu|~ zMR&ZAWR}d7q3oW_q!S!7v6k^-B1ir|w%)-n)3$9F&bDng*|vSvWZSlF+fA;?##EDS z+mmfh>#qBGpLc!VZ~X_?ah(UYecw0KQJQMfIxDTk%d+xI0%%-jWiIh7YfSQ@<(b(u zYvCSWmYKb0xzh@}*Yvo~LmYQbQ;(lru3ohXy|x{+Hiay$xQ{ir#i)qYz0%rLUkF2D zS`2u%ASC6?crzDZ@GtdO_UzRqp6;;>R zY;%?wZIyq#z&WjIvz5KY@MMzQM3hx@&yNP&)H+q7=T*dy9q-xu3iR&WwhHKU=^A`w z6@;mtp%a5cRW(N=9kTs_$!hLr@_5VL-Lo#OKOQDrc+pKyM*a7jd^xWEjSSJ%)QmQk zQq>kV&uZBT`{8jR55DTCd`HEF_N|AuO(wWIx# z&b*b@`H^{QQ@B}t4+hXGG`3Q>`UXMVo?7ix_4YgE!jVsJv*s{P?P(uC+^80U>53k? z7w#c1$RnzaP4GNKmt}^C04vZbcmQtIz}6F#Yy1e?Z)Rwf^7)x2IxWBQUpEvSMl>03 zQYt0$lS5fW@{4qsF*VvPRjkL3O5~eBfj8Gp_ zR7q|RcL=Z9P|Rp{lSo`-W>^Tgi)UBPqGU<`3CU_zowe-aQ68hCcq(Dr_X-{QeWT4% zyk5gJ!@l)eqiE}LVxyg_kMx>=2tpnN85->(m!=5w{tx=o)m6A;FyrjZiAy^j0*)16 z;=F2_7ez{?D@i2wTwY*XK00zjIG-Q)SaSQVrJ+ssbq~k#*n$$H0eQ(^zYK@}Q9u)O z$UtrN?RLWOTSl)9vCC`P$8G&`;0qUAJHy}A_<2M%jP-qX_4Ul~PFmCXsEP=GB{Jp& zi1a(uVwqF{U>26VfK94sq|7)6UYC-xo(-;ri2bf&Dt#1q;^o%NleSr|c|7ij8AC2nwDdGz@RLlN>wi*8zoO*$!GCFp*5@;^ ziYg_;?jymo?nMj|0>`qpAVw)U`d8|ftK4fEV8FCTE(DPMfz$6?M4&Tp z?h^`Wp-=<|8O{XAuV|T|lR-gu^Zdbn6)TV3@<{|Z0)b7Y*NZWvEa@0_JPr~|3kNwI z1WY!ciFseUR>aY4=I-oOYM->8hs3=ab!@IWhB958{!(PY5d??mj{>6(+pKO`eDX`( zNg7KLqiP%w(^mbt;g0NuA!8-slT-5h70o^0&e!k>*mc=_Hy-;_0VwyGe)h>UPg?d@ z1n@N1k$x|O1+!Ln0Qul;p^w1F)3UTvi0n<>7(dFINsfkEN9a^k)g-UFOI5nWZ}LUj zgf`AZstCWpw=>OQ!Vv6v>aG+)6NRf_k(Z%~ndxOD&y7|Smg)KH-WN_ft8ChujM8SG zOdSK)i9UWJL`zD2SU=O04G3i!tkuR`w%b+29GAgV9`xvN9a5BEaAudA5^O{3EK-qj zC*vcY$du1V8^6LB^hEM6%=_Z^LE%Z4A7yG9=r!zw$J9f@s4IgG~#o!ex24EMulJFt(c2#Y5FC4y4`PrZZ z)iWQ9O-QrEo1>i~gyx?aNAQv+2I8o};}R>=ky?q^;iLyu6vwIKRQCZ_CdA z&N(b5-4%mG`yoPq^~wxHc>KcZ$MUBH{uR^>Uidqr2uT=rf_YlZ z2`Glw6%TJsl9{X}?lXCL%j>EuGefA3xu^XIyJ?aA-Q#Ds zxiw?CiFkwosb!&ZY;$z<5T6S{p$O@&rkztLkAjE?I_KY*sU~~+305=RLA5!=`({AW z!4Pz^OIgmWYG2qqAaa5~RP))7VfW?s{oaeeJH%;rOi2JSO2Uo&$3biQQC>PEr1oMM`S$1xG#Rmm6YL8>&U~tl* z#OxV&sHIk#>3T&-OBtnLF=Ir+M<1%v;dJiCLeJ`&_Y|wJCJ_b6W_hsP_CubX=fdz( zg|@4?zXoa5sGMLa=Xad%shL08N~GngZI6EQG&DrM8U-`zGsw$ld)YE^|9I*UbU~{N zW?j6DS1>Ds*Q&86Ya_%01PkM`Yvz*=`>bt?$wA1s73I|utX^Pt7uJu=$H*9^Y#`slO_DW9j+ z#_au(lC;SdA??I``~j4?(3x%d=cAMLQakpWa6a*ap;Nwx&w4mhRM(=#X4Cmr2mJaR z$5z?%`tMG>hnn51I#jpS?!L&QEW&b5d+1Ee&%w&rzd7-LBUen6?CEp%LpYMd;Ihm058Bg6O8L#+p-g){=JIQ0Md3~*dD~m28LrVw^ zz5-xo@m03IKvE&@JYPeU*qKimg6P&OI;QtBfg%B}*$@R^y+|#1@*wR-F-sjlu;BDJ<3W6j_|coKSYigBh;$%-E~kUA0T>gK^Zx_ijef z`nEXW7a;zs*G4d`!o&I}h!!F*zt66EPTb6=xcu|);J8+*q63%a7;KI3VX<7i2c=rq zl!XN|U;Nv7c7plj$da+nl_3R;tjQcLJ1TEKkX5J5Mp%(q?+pc`u^?P;x(!O#0cVan zAKaoTgNKgXXo<5qDg?!bLd=RPT@heU-(DSWm8tE|&`4p6eDTr0hr`rA+wSkXIjWFU z;zE_8Mew6U8%i9!)LtjyCr$mY^yDi-G}XC>H~`+u;d`B5;NB@hHO}IOU>_|IA!D%( zq+QRxj)ibIG++9_RO@~@Gq#z5>xo)6MdOb?S6o#spgV?3!Z2URLfEJd=er*A(sl1< z`ZB0e9ycYEN&kp=tyAW(N6jo2l>@We804abct#3E7U^Fv^-sX4&Y^g@pT{J6LmHF` zN&NDW8lvMUq?u=gVx=gYYMDnYzDv;8G^^_TB5?x7$BR_e8weZAl)uZ#kpzTTM==K@ zvXOZmlEM2_YbPd=%DNO;j1t$XVuS*Rxe=>!u@WukqE)#>3|+V|!Rg|=2P+CUo$u?S zgI4r74>JlZMT|k0m4`jvZwZ=`Oi%xLynqUtGk>xZ%*4JtLs2w?OpJre42?60k+v{*dhTne|%)gMou*!=Pd zmJ&0*D0d~vs1?YYy6bZsYvkw z9o~8e3&E7q6O zLf-%h7ZJ$8eh4**6e~HRgfQNJrW_5F3r65m{ma`BpWs`~(1V6q*Kb(*(|D^kDU(hq z2uOXxMpXy~{Dw`9#ql^!kb4TRU7IX&Ku`kc_U3qmcQQBQ#@^AM-B1 z$%0G74=*J3rVOpa`R8e7BzfeJrCMKg(K)z4>psok9#6g7& zFw{%J=pNd~3UzVztJk-iJIx+m@Q)9Wr8rR({|`1DUHLsM@jeKbsElO{Wwd~#qrNR6 z1I0d&#&@N8+MjBs22j+Jvh>^nG`ynhZiT1|B$o`NJm&PHMQ0TjxjWBch&{l!VIo6R(J&?w7^!mLAQ zdhBXhvUuq$9cJ;lRSqRI^|xsH4~GB07xv;O4AmxxFjHmw|6f;!XD4$MN)ijV)M+=< zT5>+4Qmrxcchft;knp=&kv~na#!)M1fK7>1h;NCo`DA_NMTYR=^DDLQe~fwr`Guio za?-iW@roW$5^3O8>&DCj@wSg{RR=I@S{}@I&o%gC2b*F}RXu(S44zg^LB@J$ZHCnA z(&hjfcf~BJ!<@dB^{tO`i59l9_CP}$!@TsGq?zPk^YMXO&hHW0Bh=1!@Cwv2&^qz| zwXDXf3nXFsc#+1U#btvxp+r!p*KtE(g!u310~Je=;fAPi4(z<(#05|uk;o`SZE#G? z#A`}X=Lq!mY=4HM;8&pCr%g$&H#7XXae0 zkb_G13r?S`Z*}L>tYtdY?jODpnxz03Yns2% z6sQxFWV8Ntw3F@^L<-&U$t&nCM*8_NJ3_QeR6xtI3q1RMixZg=pBvxa_Fo4wjgBf1 zG7SZgnPDhZ9Re&QJ10Q*L&Olj=oEXV%TINjwrD2tG>IYP&XRy2v$|d(GGjz@6?x_i z3%f(WG3r={4oCZIRG5#*MtiYJrQXtok?kR$8-V`NSfqBcm>8_xWXRh0p1CFTLuXv6 z>DxTa#?$hg#b5sE*PqIud|h~Yd3l@Mx1h%j%78D8Va)%hZuqE^p$-uy<~UMKl!y?v zhPCLpIzJV&o&K~A;I|b;LT}esQKcD>q9ijq;HBn>StPHS)+A54rm{3|WR`UhCyC~t zV2ii>O9PUjpF2)hR=Mi~j!SaUx$}*oHN1=8gg+lkvv{b!#*VDREu# z8di8bXp9nU3_WBOyDfm*JrcWNF1gAjy~G-;A%~=-KS^eM(95Qumj6W?m$&HKt5w*o zfOeeDDu42-v6fz+&+)ATuAz@^cQj`L^bvAbNs-8r0paCtR9@`Jr>!O%{5Fs7Pd zyp_LEe1)*4Z-TI(iIli+ZeU$5HYQN4B(BUC-6VP}^3zBB@i`K<0ganuqQVUe0^H?X zSb!*kqglj8CbQu0d-OJ8D-RxLsj(@eu2&*=`?j%gf6)|j(4bRt`C?4*{Cuc2TGA9R z8j;E*&7sQ=B=ib2;k)4BsbSWmnEO~I=-ZD5}L;#uc6(0n1_ZzR8l+%{66%=qWR z_KEqw=vE|wOA#N6A)Z0790WwJ9cv|)yZSsRK3;(;)$8JU2U+DAP~K*hQ9=cAvu>mJ z^pX$kKg-ziFFLyA!Dl!srW#dhQ$cZhX3p4pqRWELwHe?wiZhJx3X|~uzEtwwgey7C z^U+371(N2U#X38S$0|`%*IjGzmBL|amN?Sdw}$PhQl+^{Wh|an@yXqHgt*Gy((2d5 zFq?-2NDzmZyK*Zu0YY2KyX=4w+|HkB7QGeukt^5kVKTbdY0wEg&;6Y;dmtZ0pFJK- z2yHXd2X8>~TG)UUwixLc;j(Ye{QP9HWbi`?YwWGb(!OZVTA#=d=))=U4VFBs$iqK; z7rmpqB#Ru_Mn-O6bF)C=$|=-fHL*c-Po$^_SgP>2Fh+_6;$)-^Zt@4n9Hq%Xv>UPK*0f-y^V?HK6wiFu8b}$K**z?(5)|Rsw#HPUhlR6 zw`52v(1oC2QGZ{^qPX9du&L?oQF6W6BT;*67qsL=7Vsql8vmN@3eJ47O!Ub#5{r>~ zRRi#d;$3-JMmMGM!AB-H%MH>{DEh9}yV*9QfNC`75=O-e38> z={&g(0-D!oTjL9&$Wx)^5r;B|I_ZAi2n=*|`t>SH{>A2Z6-Pgc^mOh$wkw<8rL9htfBgD`r97NnTz*@ zKn12*+S@wHTM>W5!Njwa0E{=ZVD(QTVwkjK2uBzoV7#;9_G=hS10c^8;gT3NA((?m z{+t1enc*r0cZ7qN z?BRNSemdVW@&2{D_-qusdJm*fHTzrdw!|P66zq|{waV9zt|pxOKU_-Hg=0k6IW+%ZLGqK*{n%UbO?x2yz~2f&0n8B4?j&m2pZ&ke^QQYAR$ zHz`vvPWis{dPOQhSb>oy>|q6x4{0l^!Wv{76H5myuXIkdb%W0V?9g>Dc5G_YPq_XB zu6gn($Yi;>Jv_g_1j|U5v4?i=Ne2UbH6F!XcQwM${Ii?o7T2MErW}sD7^4;uwY| z;AB(SUed1X1)RoSbyJ;o0Y_S%R~s*i{$PKc;04@t<6C~vEi zsyE2YD0cW6P-jqI7m}cnC}bIFp!xH;Usnc0hE%2@qBOhv&KOv{ZsbpNd*q3>?K2nG z^Pl!&aF}Ngm{AJxRBo6NuIGXB0hrN2@j-1M)N{PMoG${_f1`H#tWj=+=tf=yp@@H- zIfDDF62LdJ4)X=C^CPqgsft~n2wf9_)G)m&Ml-EWI?^x|x-NmVO|y@j1o7Uht9r4%jwv&7#rtn1br~rzR*0R)R1^CQDKy|)WDg}KlFd;^G>!WifD*603=H3@ z_NLY3slbJ%1*BBKy*$LxVu@~!e{1!$-w57jJ(We$q=-XP1~RSywSeo4nQ88WX5#Sm z^v~WoHa&F@pU3Y63-J=LjvnD>&uQJmXX-h(;@+zt$v^}N2I;ebRGpAT2LO zwn?AVQhA=wqkiTTNvWjx!}vVrydOmvtuYyI`}x^}L&gx&FaF`7$RBljBKkm$h2=-X zW=?UUFC6I$(p|J?Zgv8K29G0I2OFvjk7+D=Fj2C3=b|KQD0GgRcsUm*3+*Csm4lGR z-&-qzSm5jNvk@d}6;#+l#Uxc>E2E~{=w9dL6E>4p2kp_$?pp?Tn-C{#!_khK$DR6l zD<{z6bMPYOSsc2mP)Y}k0-kxB@|2II*-ob}#xolo;#;*nz>W|#FmWmTIujCC9*B`m zhC&NQ+N#;+EXQNR(Qzd9@zZq8m_y0wCcwK=(J3l8C10gzDu~1(fV}s7Zdc!^l<7#xk z%m>&~1jEl@Nyr^|8=fRnn_JOK+Ey~GE&%9;Fui!zcU+Kg>SUgjYd9T+Y&p$Xi32es z`yv8bVH`@wR~;3LD~P2|)r9BeZ`beDaogq&Odce`JW-1{wrOK`H#H3&HutJRuS#4M z-P7ZGs4QdtoxRVU7ce^2Ri}&xe}2X2F%1&ii`X&=kkNj(_|kL4PFQ|HHs8n)0!ON4 z%~OHoSz#wD>f{c8vKm9k58|AD#i{+uZuJ=wal>d=AJp7jx*fis@ycuQ}+r6kqbAyFcVJ*G#Hy_AavgP z)ViOobMY+iaR491cBH5MgXum4M=fFk{fOzq4%?xU=L(Ko&qujOWuKf)y{S?TPCo*J zjUi-$;OzxOcS$>r_|FDq43GT4=NnbIE1fL4^KvN(r8H9q#nUDAhBnkg7;%=1RtwTT zGd`1{8ZP()!H_})kT1bHN0KgtexMJR=q4mR608+Eht7=yR=>LXgVoWbYDan!i)_g{ zH^el1k0jfa{q4GU&Jh*_v*^MFW|rH?Wm`I5IS|(_<6a)Ix`htYeH!`n`_4T_$D?#{ ztOULD#Zv2Fvx~qaS0`{%rktjF)iyTQu6+x2v-n2?T%L+*V8bO3+RKRwF0T}|J~dZQ zANf!6$L6{FMD5P4&>d3WA)}C{)@1Df-3_{M$ZV~3r-?(?nBrzarwiw*&+&BC_^_H zV5F?*RMNvp8PD-iJWhR>F^aD@r3y(Y=&Hh%G>FM3Y1DV-kS4oSL-Q2NdhGaK#WB6# z_=XjHa$;IzyiB;8t+XBWrYxeHyaT5n!<2fl+(iO7*R4i6=f*<&-2P6zg209WKtwio z)NfU__!h197wxp6wC0YW{JGq-vxesTc!}kI6V*|%)rj`6Qgba(jm(p=4e%~>Gm}%( zk&loKbbp)SrCVX8TUhSrT^OetAY0Hkti&xG=qCrZ#VCPUg$VuBR(6$(9hbv^7jtpJ zh?R#Fmk*G`jE2Hkh&{K#XhgJ?4~RV%lXI1)ybR-Q1okKH!|C)z_$33?P19ZcYhV4J z;m=EC0KLeB`8S0kBw^5zuBZo4W2($DJfd?2 z;if0Jj`ARjx!68cbX-j@R8FBpsa5dsq-={9GMv z{(_9SS!gmF08uvb)>(LsxSo@p?d4?xVKGt>uA6Y%z(z4CO)7;wwjZEMQi{%%G6Kv~7+r%z7<;i2~qow^yQEm_yY3CooZ)%9l)iueuA ztGZds^8WO`%p8O$Gc^ClJ->^$bACmkVB1uKU`=sfAv5}xSg*s64+a8isURE zNjo;QX7D**IlZ&{@*|-Pm}e(AajoWEM9m}yW+p@RVsb+;XF{nqjF*vVOhKY1B}bZY z-(7?&6jVz60oUd!H=Y1hd$e!Pnld4XKG6P1x5M>IQ;`&q`Fp*Ya zXgeGT2-^0ubB=Svul(rF=)|LIOBVsU+m5hpVep$QI{?t)L07!}_)S!Uznq5_~0c*Q9Y(Yz0AOKFO!vBMiE zZ5YXW;}anrl6Uo~qSFJohRC2l+zE3S_2@mmRGbi- z@aKlTJkjYL65k(szX$dllcj^LfG*vrU-3Z9E=caG1&Rw4 zl8ChK8D{s2Rp>z5;cJPhda+_?v<7JU6u~LP=6Aq&zlGGOa;8z2j4xehUgYzyvbQ<= z28z-u4P&dhV@ikT&#}yp{&S_P@x(ISD*OXN;1@iDF7bBp-;#Fu?oWP<5_mg;PgV!J z#<0b7DgQXij}!WxB>$6GjI%eD8j^nQ3YHnp>^%+RYj?=^{l~(&U69p?$Hh7r33D6C z$g4z3EPL2B-qVXjsULXR$LIY+mv&rmvY?0)>vBUsK3RG+Y=5w<(lK0B0vqMowy?Ji zSSyk_k(rx(mcAJIS$ITCgxlk`X&I#+BL%Sh0`41$~2F#Fux zZccN1(4+bhrY7#HOO5_Md#QKr@ZCFStuf3=JB>pz=sOG_4ZK1b@~=XjgT*Jm(TUy@s!#uM`_%#e?u%Ey`ve{hIFk-1?0JrrS^wRG_R9}a>dGyEdxFsmMG{5nA;(~ef z61n)#>PSdeOE__fxDdm}tgCBf z_V*XdefY8-YIF!(x^Km)fc<0NJg#>aj9-8sGq@NM)(jmz`Aj)HH=Ir2ywrX{Pe3Or z@)VzK+8hO~&*u1Bp7P!A+HoFKBqfDy^mdkw(<4)qMBU{*o?ZAiniDZ4Peu{qNo8pA zH7OW{@6z^1GDLNohA<@k4wH*#?)GZoWMncE5gj=g``o`W*2BZnJKcArkCaCtE??U4 zuX;uyJ2)2juiAVKe%sdE4Kc{+bq}x(W#_nDv9ecbG`ryQe^gj+T86wvsD)~sZvBJ& z$~#1~9&u~-KrGj|uR#4m=H7rrh5*0+_1FF{YMs#%N|gG^4V-}O78vLrBn{vbFG(U! z(slRJ>I|rudX1YR)B%eh`8CduCG6}}P{e{0w%AHVF>d_k*iCgZs&fK_>1;nP(+E4V zYgV5=6UiZibhC(zVv4VR&CahG#(_P%Qy#7K=sldLJ#~)t@zfP9u{;$>DwDe{PuQqh zUUho$N6+Y!X@wte9i*b=H0}dy3UEgF>9ORxD>GUYx4W- zr~V~J?vqmU4^BZ_H9-zHE1IcER%~augCVsr=F#V&lAh8NS%Y=HcmLQFO@=UoF_uea zm7wV{O^RPpr9+;^irMyl=*!8n)&Ul49x=#I3@X+}W)dYV9NCv`=2sM}x!23(B1i2jN{Qd3yXS_ApDZZ!+ z1U%!uj}D^V-|qzcMREmzJ-Vrr#+$u#&hpNmZI7>eCU~XAQ&Y}dx`Sjaej^NUTVR;_ z4PQ%&`41HLgxPR}>Q7V^r~n8bcTTIROVO?YuL&u=yrDPx1muPqn06h=kS3VvHUgsX&D zE9;LHdIp0d#&xF0gy{l^P49#Ay*jc!kK|-|>v?U3b*18--(IKszL}h>l~=)rtI{T$ z6{ny)FE=OL{vO;7S{r9(TfHSwz~zJ3C5xj;+q{fRv&dZP;+-?;kd456+0{ed5*jl? z`d5N0Wc%ee&p!}uqqI*p*kAS&CXjCzB*jRfdtgNL0W4x|Nu^Ur&F_xwQYsIXWY|EF zs*dTXgGJ~3mn!yx<%Ug`ZbdW8CQrE*(^@cUP?PBzH67anylwKgj>mIVoA&m_PTSM! za!3w!1I#X^K)Y;VUsLxF9{#jwYBf~y?7fC|h%P#xKjv@#?dEb!91xqvq{UR{Sn1b( z7!G7m5X<@z%d-L) z{>>ed`jQ7-b`;n-g&VR>W0A%b>{G{BFce~a>rOa$%n^x9Pj;XVdT3bBsOLyE99^Kk(cd`VJr-pnPWARN{6En%F?G3t@5k* zjux|^S3+-HIZIr}az|f*Fqg|U^sqKO!XG2xvse^?9IW9dCUKo#!8pZWEmXK4!(N{D zx?}L30rXWOG?15VJtGxxCzyqj-!s0rYcZcfcr?*R?g7e*)W8H|je2QRm<`wON5EbC zHOu6w(PWep=cj`OY~_-ukenk?4VJ zFkV%G%c1q?>#&4@ES+#wOq%Lj(lYBz+NbHv-b&g3l=Ne^x=X@stV|}F^p6L;3l1(Z z3b)X~CzUAL)Zhx*j+4#Kxt7HrO3PZK8QvjNagQKaz8+5P^4D;X5~RB2`F7c9u=qbH zBwHk(pVYeh;KyzW&X?lgUxD8{O%5{t4M&zAAVTur;VVt=tTXtb$T--_d=1uK+&4WW z0}Edqarxl71HbO`jOk}Lj?`4=B&!;0VOX(T9)VKMiW;J?JsW|a5p0MUBLjJJ#wQjQ zyefJr5#_rpWi&rS#hRNVil7_Zuw@yS50l3c$TQHBxu{opUSb;suHq z(;%-|zAaUdy!%t@BIm;mnJ{mQ;cCHBL*LHDL$|M3+puKXi4HTsueZ4dPK6Y47xV3# zrdBe+ClgJZAf-ApJ>1eWm1vUSIPioc?D<)O*5x=g$7Ap&#WeCR5ai1q{@xGI=k#Lx* z_?#8Xq{x-j!X_l;fbh~&z%a}h&O*Rb^uo&`k-bt|QW*LP(*P?`UEj<=E|Brk)t0cSyuUp5faw zcYve}PMM<%>Q*}AKXAWn*Ox+uHH;j;X#MqQ^ zVSm%l+LtFO>gMbbNycQpJC4Y-?gToCFXTrdf3$?~aYGXC8mw3a@%2N)fza7c$6)pt zq1xtO^4FOHsnu%t&b@ei7fFYRw&A!yAtaH)eM!IQ17nMsUwg!mP!GBS;|mk?X^-JCunAjFLGdd9@DiTu88re?tVu48 z=;IUe_s0-6R=TFB;1E9-q1SwdoMnV)0c`Y<7wGkP7k*fn%60tOD6|3 zJSr|jc7LG-7X^Fja7FEs0reFgqC1>HW>NP&3xV8w4_|Uy#F%$bbAxq`>B)8=j#7>* zfmO04o_GB0_X4$=0@aK+rB*^8Tl_#+Hd(w@`|B9nNVdQ5>)@2B>A1ac=v9O!& zk0j^pYnBAEAa^gZj(}eUFa$MfBvsd!~|LbWHvAT;x zYSZU)8mlaqyTRq{Mh@NO#@Iy&f?%`OyE>KDY2GHapb11*nZni3HWklx-9C?#J(N)O z3oWG8%A6%lM|FoDuGi()d7k%{UU`LHtDrXzWoTtW>XhYBz!XxgQsDcsyMK+59sPz{ zRL;NlBcJ%}pZ`}ZNWwvKR*C`{8FTTK?k!-_`x>Ws)>NZ(hu#qN%$nfx1 zbth`EO$V3vy+_7QWv$jW<>3#v_oVm5TzvBw3zdaOi(J+LB5{8p zoeaV@nf#hkRx+zt=9)575GN4N>)c`KVPb^;ZER-sIU0mnv@3sOj$P2+Du)ZgecOoaHuA^Hc^IDB?8LTv812 zkcM)#nKbL8@yyxOv8N^>hig~uRmn@rvKgtzjweIR)(`u$Zy<7%$%~p&@Nty}m8)|e z-$MRMl&9Kc#%AzyXu_^L7;GC|t3!D^u5}26n8+eC%XuB;lezO4ouRI4;ao+<{x$O{ z+oXO3V>faJ#WU4*YXU6-5}_V@QCadMXxbPc{qqv(&vdb@<=UaEy0zpMllO)0;=la= zLcaV^vC<`D-_%CG5Nj$OCAK89J1?IfybZ(jLfGBiCTJ5)!E)G0A|yj9o=2ez(@~vy z(a6E9TT$sZ#&x5V&T@aDLpU-;tn8HTSZb!oIr9c&!XBjjzrPNDU^~t#Qx$8WXu$)o zXk^iuz>q)?%W?LbX~q8JFP8d#X=UYgXw@~~!@v1t)>V1_Gd`La5<@8m7&z3~T5IW# z-ocK@$@-S!UM_~q>TaP#_Po;k?CSe9bL{PEDy5$1*l>M6!}GuuJiD^~N5X$Dg8#$` zZA&8?Gs|UxiS~DHqnpl_tJ=_7XuEsCZgx+6@bV-2j{NN2Cu0Vz!Kg-1i@FM@sxNcw zchnaWF=b$y;lqY2gv*m5)d!cYYBbl`w#ysU%BXhTHktKZI%Y9zH=2hk>y5VFb#>ml z=fvLZ>F6Qo=QPAL$%WL43A0+@gqkey`HSTS>&{;*n#pA#bsn&amt*RU7|R zPX2d3|BgwPbN zCW!uPo4|lCdMulm2WE_P4P?tJ=r-%{cl!fdIPQ>xlf(YI3i>@2KFM?|SDvKzEfu}f z81yL#N~Kt|M(R3@)3*a@5m#`#PK9(s3p{O@=OaVppDx64Owfl1^)UhP8+YrF-r=ME zE#F=8UH}Y@e)no!uZQ0i7z14EP_eg>E~=F`k0aOUrl zHaJ3N;hkN%v?q^Kpo(%ZsvH)r>$BUWCZ(x87ou5srphWcqML-_cvMI6D-%LF>8(+O znf}D=0~`%fJ?f9JvZTDapxCx&M9QzExSAV!-rYI~|8-NdJ8T^!K;UUl-1L_zZetg> zcW=9~ZZ(hWocs9JH$>`+*_|e_3G069R$zjr@cdg$;3K`CxCn)BuNt78d9j1;_ei1wb2r21x| zMj0GW8ob^;iRgug?HP4K|Az40UdOd@6Y)U&+uat;>gkjc}yS`ad+{^K2J{H0*ZqLY01$V4? zwwd58@x?_iouS1IsVs)EVG%~Rb=w=~gzjGcqfoZ9J#W4{4R7ubde?9W&{{q#Z<`C9 z8%(LL{7msZwr7A~j&~T^4l>@}A~yiC(PvHioLX=D7VDjvswBf-iFMA0_hgkYL+*DU zj=g^J*Nf9*14{hQ0a57@n6+?2grgKwjg$n1{l+c@hhg8m?sJiVaDy8o&hjgK5Dvo- zf^6M8I-s|`Sbqh386X|oVSun%!Q)o0d?<<`$cg(qQ`DQATR5siv)*}~DrY*R$USdq z@jh*ySy$xuN6!#{QCx8|{bSyeBlT^27kH}rQ^oYv+NSKq5c;~*?wzG^)u;*@%@hK_8qB$IF z-aFWb(FHt7D1Y-{wW@v#ROhKqRovsIV^Ibxkf+H!F~t-jvIe%gy(CwUn;j?#%)^0{mX1moUGZ?Up4H2(}?iYFa6kVu$AN2&iUO zu^TvMjgT90uy)TFW{%{G(Bz}!<6r%?j4Fx?TS{_+_M^m_j%_5f`A){EV7WSmjR2yV zQVY6wG{#vVG2M_@cR#jf2|Z0ulDS}bWtK8Xq6c6L#dE>3q*@+s7(jpgHL6A#L zg!uFfPXswyc_)kRAABWiG><~co4I=a4X{|+(FFXgmQ|DYZIM@A3@4>%NEfq0?B<2S zClV8RI__agAE2dK^MoxPs#S-OK~C=3_~XCedj;Wu6vas3(MgTL{A#C`>LEj%%+jF5 zG=fMP7zI63^}$qulsYeb27NlJW%@<2@rz1Iy#k?mAN*B3JDiz7bO zaI2BbB+Ve=Isy1QkM5|UC7fEeai035>$+*br{=B*y6~ZhZ*sm|-Ts#Za3aRsZw7@Ws$t-65|X5$@0Br?)3)9)P&jyzYF*V}l=7 z5f;Auo6J6(Y{LX=@BVM<0C>`UhWb1ym0xK~VFa!YGW=7u_IRe;wor2nyuH$GH9+(R zBw4V^?GNUGR6V~qXa7zS%bz+W%Ru#$aKWVdtlJgaBrw;QwIUU~0J}a!3FLf@NP0e5 z6`vW8khW-b9gP_!*rI4TIYh&6-BvfV;w5rYfT6#g8c&cH^oIl&6A9SXGMzS}3{Y$| zGf+FpqQcIQwq9!l!KZLZRjQF4#Nuo5Q6XY%cL%E|5BUq}AV zo@Y?oA|wg-PQ^Q0$gvU8-=>5ZPzb}u9}|cf;@f#_j?%@F_Fg&e0m7)-V~Av#*l;EU zBI{Ad%3T!|df5ZkkpQOH|Aw4Q==J=MFEgOoaD`1J5`^qHlsDVT0D~>5uQPL_>_soZS!4NX$;| zp&jwN&hIC{df(=rXzc7E+EzK1zvsddo~|%R5llQ1+vWW@XKY=GIokeiQQSUeD;4~q zb_}SB*%`2WN6=#uwi!x@>V98cTctTx$EK3>yvdpd>>Q2?6~_?AUnP#Myo2=38zkp_ z^<3)Y|9M9JcXCV90fj9AAza<*W8Wzj*_+|UHw|sm;A;oHyx6Yc&;Gs*EYY&a8q-PO z&v5x69CjnS&L>@C4s%gnPQHE4n0lx&? z%|jfIjYb=N?cUAGWU{=n~=biEOFpaJ^FXj24PzCzs`Sr<+OS(3Geus2@i)z>;dM5|9p|tZ6%kmlx1({`xj= zzUO^>k3$Dxim5E|nG_XLv7~qjNCPeOZEm0O;!M4CS0|SA)3CuyY8GMZtAqB6qPw7$ zk1CLfUxw;BpKcrA+iq$Ogj&);6ekOS&|~SqnbZFN!`3^vRT{Q?!`Yr}+qNdVl|9)u zCu_3ZgcT+?*|ux4G1X+dzNvYhz2AKt-}(#g`&`$3UMGG?5SoLieNvEipK9#oAu2W_ zbr7^Nt?3W`EZs!CS3P75n{5RNo(`J^y3ePW@ zH*Z7m=+o~-Es{d5e~0e8O(~joOv}_7GGY%xrQYCww1YPLobilJAZ-Q z3PgMYoz1cE`EYBFdIwOVhA9?(P`$$!t!`NXnf|8@IZ!+nbq#&bjNuyqIQkt18B*TVI$(y z0d`*0Au5VAgC|v5pXscX`OSN-oOy}*i)K}AMm(WC!HR%ECtnClsDddT<1K}EErhCO z_s0!*Z@&lruA{*xyuO43L0uXCUU}ddhlUJF19+Y3$Q80w<%7fM5|iSKCSn@e|7=|$ z?*zrqK1Z3zra*okqK(5dSs`n0pt=v63mrSz5x0xeyTI(HV*v3CjitP85BSM~)NQUw zwjEus{-_M)Qm`|JuUk#y%7a7rlUszDM>c`m3wHPh-^Ae#9csr|h~4K;8`k5%ZONoe zqmYLXos4Z``=(~j$@SDjTcf4H#t`pW3p4N0LBFPPhP58ikNaHU!~HWU=#iFido z6jtOd+af`rNb7Qz#Wsj_g(p9ry#pW_@v~<$x$HaA(NVe&S}KD#o6YFC6e+_LpbLB4w`cm2o?%7ORadBXs@xNm^;ITo-LMw1NLWC z<314MRjW1&*xkHobS|u#LMJoJybu%w+;89&&k|Bj7;Lo`sM|D{-FQ+J(Hh_8>#=Q? zk)PTH!#U$do5N|f&Lo1nI&zACnmyk;i4b-094T(7NDl7iO(Y%)94{sc zm5Suve5}?L$7KeXQQGckZcAWZ66!1gC>P}SQ0pd%HqW&308W~jMlR@$uGweiu~T-+ zz<#m}ExCmJOsXRdjBHhzxYV-jKp3!~hHv;tCL@UaxIhha-S5}}r6}@BPU)$HY)w!R zytrk*{LNdjLhVO%+G+XU;un6REwEq}8Fvm;Rjes;JtpW2PiR+2XfkX{OOb@07FBRO z8jPObzJd<^>KwMxCB{@(+}zxDlR0+|Vl$URw9+;6voisx+h8ZQuhgonr7jWzcI6!)I z=g~#VQV9Rz5eNE!zZxlFw_Z8=r)fbOK0$vRYVuM6VKjeQ=MMM+YV*_ zSF_%Myn!xcX_B$qwKvIqH~z}f=8nBjbm&}>E{rvA@!8^;ajq_p;8v~lPe(&ekNrSr zw`sE5n75zRc*&C2Ft&5rC7+pu7Y~EK7>gp08#bWJ2BjIA^q`;QpfC%OCi^^_b~(W7EKfhdz_=G-l20epK2sf~dwcfj@=l>Fg?aMpQVc zY-XuGSt@1}J@4@Hu)F$?QR1kD?n-Uy$e^2E$ATYWF-6KKo0RddAXXKJZ)nP6x3#wu zZ{DZ|MD|s=XR!`Zwn2Cm2X-wDQ}BHNx?PA!ePgh1HWH|+!-pDaW zHavW6J(#5Q=*Krnys|E;idnzY^Gmw*m~4~I3N?$&$rWF#op`%u#w!2$LlGTzOhOFW zUwVhE^%8G7hk{b45GyQ`#MiD<>zmyNgqnZA;2Fdwb!8URf}xr%Y4%I^x%DZ)Jzde5vFi79UD=$P^g zekARL1UKQCubvcHcnJB%G($XJ9i*hfGWv&B{M10h3Cj?U zguBvtm6h!zu&)=%^S)b^@Rqbx%f`8~z5%fzPFeO{8adi~RRB+>SVf1}H!!_I56(DR zkF0FvahYpo^tFAOQ$Tn8H4_^K>KY7VM{=O-eo?b6_-r9LS4_uCs=9<2*ES>UK35nx zYTTSAril_Jb!%nGikpW0${MEYlDb-+6lRN6gVBI+OkO2zft-rPuVXhjpcS50dT8~D zT2=URh77<2f|AhJ|7$}p>S^8Wn1g_pu3}@rSh&y9!y!~;3&6BSO&%6cOP1#H$Rz#H z-p0{>!+*U*R*os&GRA!WA!gQxm?THi=^O-~9_I@(4cc*M-km?{_CYLCIXK~=Sm)3f znFI^UPgn5oqeD^w6_ZpapQ;Yjpz!0hgqOr-Nt3cp+VW&cZryXsz3ZS^HO`xyiqJhp za=&|%5Mq-~qyJ>}8#2b8sk32W`fdF!7g0gRV+M`IeZtWv1x7N{S|_wX0KdyKG){No zhJ6`kE!=Jh)htNv!rJ%X>brGR#AQ?2)usIT>8us??@fb>hiy2bO0B19q?oaRyBCR0 zgBK&M3nC53?T8OPYOE|=@B09+QuLr2C8x7QN#l5E3`O zVxUB8@u^PzwFp>OaIs>~e=AXsII3;=gx_0sZ5az*d6f-syIWGI7God+Qk^&fbbp-e z$uV6Qq#$Zj;X}?+2G(cai$@3gf@0SLUOx;y$36-S@#$uD3OxtA=1#R)MAB63ByNb7V?ZKO%k>9$~S+;vXMb;hX=&! zRmEsy(yUz><6>dkVF&E7c#&uon;Vffe2#ZGHec+0#=3p!C69ar^+y*N@3c~ubGU@} zqwBj1!nmTf%Vcv~Vcx3p1$lB8;Fp8GNad=Tna4prVJFrjHrZr-Rek{}xYBe|JcbK<{?{_9UL_qDXgXG9T78Uyn+N(<2&*WlP*HBfU+`Q{Utj9iL*a=mcO zIl^N{i1qn5=qZvF{7#aMUPM0UJ1B37JcG%R>pdra5K?8|{eD0`{C@VPFJ+@HVDv%t zi7@Mdpt!RuD}Q?guJnErZIbPFAgZu;X;RmEJodDX5E!XH3#SAknrM>EO-RZ>G6|mU zRLL+OtROXZaKsns@5;+OpkQ&NS2~$aTZ-C%HM-8{%?35vdL5^{n|AluxgrLaw0*iT z5$VGi)P6-t@#@}*QjW)}p3^5jg8h@vuWFNNvLrS%O!dYFiyD9*9~-o>n)d;d|5kP} zcd0S?(Pr0|(jUCyBPlgFphWd_HuO=@oxZHsh_x?|p`B`Go5VQL4fCGgD&0qQl}2)1rC%S#>@X>|x&6(kWvQ8axQLuY!2!nJ>ETKC(0C0?|GO~)$9^4&qz z4mcUY5k$wmfEZ|1MNcAsANI)Gt-Pyt^Y(-2K}g|c7K$meM-q!{k!E_#o`SzdiE%bi z$B`8``yPI`L{f6-?k3ydx(a0_y;gwdq_uY0pv#M^QK(=2TjUw9NYgc``C+U6Op9Uz zm7Jw3)mwlqZ37@2?S+mATT@t}qv0%^Jbkrn$8S23EXzKz8Ex7sI)OHbod?uqW495Q z8mq(6^fF}`dorBg*gH02j+wF*M~z;%vWdf$tu?u{K(0%Z%uT_9=Hi%_m;Rwa+j>*Z zc-h)|J-2;p5_%3+)GZ_6FTB?MGCXWZ*fhXxh}k@tTP4u_;&<;xn<_H4Jtk|ao#_II zZtvcSCHqA7A%0GG_uRL1Vfxmw&AqQkdV@ zwu=CHQ=31NaQs|rw6@(>H+LWP{CsTW$_RoeNaXS^ewiHAEz|$LLw|^bj14r&MvNy3RG65;{{T4r zOU=VY%y9B@g8PJ@bA1%j9L_oSU~Tb-v?BG0bpJL=x_CYgjC5_;EptaTKHYoEe)mA> z9Iae{UM?tsClQK3Pl34g_*$j7+AGgN`x8OhUGp!+IGqGN*){)0gfQy!j>cuUvaY=H zeNfZK#9v7hZti$v^^5~;DVg}^{)X%ut65(*{}D`U-r;NhTY8F)Qxw22rwR!`VHk!w z@333Y!Ydv(sbk{d&+8pHmr!ed9b5L|7(@Hv>Y8k9cPSEeQalkxh4BnKCEKnj&a&dE zP{#x^a8J8nztgf~q`gu<$wmdr;DzvgW$dTUMFIGc>kWs0L=psJ{*^OBZ_wxDa%B+}=*f@YZl z+$CfFKQj5e{lck`WTTHYpJ@=;^)TT2v9M*0b;N6e*eQ2!U5Tf_UG6;2c6J;o!AvtV zrV0pf*IE=Fr{ds6aIkpsvfLW3*uSGji)#e0d7IH^ID$^;4Avg$`Su4 zM1yhVEFcKg^*Payc8QWMn@XpZ;o& zx=}o7{M9S$6+Q=d2gv~e6pe8<^b;uSKDUir7o88vWeTiM4}f-hvIeB6PJh%Fv2Pcr z()s!-_lx8$7w9&a&;DSTaa08D1-#d}v)>1q;lIu%e*Nq4618NWkQC@%Bke?sYHpvB zHCYp~5;hjXUcaXrruAOag0Xp>fqU&PNnhh~IIx3)N1}x+)!?#nBjTwI6Qrda?P87& z=6+L`2GHE<+!H6v zz+X*IJMMo4+Qs*^#D9x=O6$*{i@9i`NZJwSVpS|6OYp~joBv}byM~lQEu)K8LU?>2dHGY^c$|AYzZ_S-X3cCNnn%mad{U^>j{+^{I z?mQ#4XhqYXi-}2_oX+6M$NTWwZDm;1&i>x|_M4~Y-4EQW5nW?iJo`xv;*iD46Y5xn zaW?T1SO#q|yZn&?Zp+xzhC?)ENuopR>G;*ywFCD&VI{Lp%a|vm+uf=2TR{!HcHo3> zn-AD?gLU-^PdA+H8XfqS+RKj+Gny2WNlU%pGGdOE)}}>o?ct5~k-1&$*dto1gWNFn z5}Q!K*RD~zRmWHZ*VW#2ot7Ei2m=r)t+o%Y;uxQGFEe`R)>`Mba2NuxhOvP$FG(Q; zX{|Mc?2uZWu{M5J_|=z>-Q{rpWM^;3G6V(+!vbc;7@zD4Y#b$tH6yA~1eVbTfh^R2 zEil9h{5r!jh#w(F{96niDo{n+0YJ)aZ_z~^*zy(=+Os&#l7rvpDZE0)ATga2O){14v z{Q7jTMqttk!rlFK<1b&(u8t7(*JL->)k!q#onz-*3bNld3cJLW_+lJxu1M|j+LceI$Kd2FwH?gzoAtr#j24p zM_+_?ZAAZ@a&KasD0^0pD9ybP(DUs+G_3N|prwJXxX^__$ALce$ z6ja@q7H0w;&4v@5>!AUMbr(bL9CZITs-S&PPUdTj2Ro3}8%Wc`G82Q>)W`C+PSHHB z*7}u@q|um!=|Yaa7K84^_61}lAh-UVi){Men&Tz1-P&~4BomX6bQ{a#Jcm*zLnAZE zMCann_xyU-7CSV)2SMt9cQ6CC8Lw>%r!*Hl+PS*2cs(V6`z7Cd@HO#Qj~@FqN6a(wpvL7Q7-rD%1Y81SbvPD*MLbExK6Jdiw+5Q)+}Y~2Qr3d%$@ZQl4R8@j39pJ3@4Hj z!pw#{Y)lQD!gGml$F~fJjTzNMy1wPO{@d5C2MylYLB-bt%91WIP%UvoOC^BhBMkLf z($*F=yJ=qgy7jX3 zc4yAj9+6vhbO~BYY?!YN*Vd13%zePxx-uGY{!4xp9b%O;%*`jg(UyywWZ)b+zd_zG z3*#R-{3E^kM*4qijnluJbwfjSq-b(Db7M`fLtW8NP}R;|XS{}8^~Fbm?#M`obXJ|v zk|ppj&QpPd0vQL1-*so!uXe`EI@+me z1GoI1p*lT1wp+l$j1GVR<2bUJoITwkl)sHfR%`Fv;QJTPz%#wLI!3+J)7Qm1KF80{ zPdtu4q{yZy!@76ev0eB7W;Rmp*H9cTqQ-)EdVyml@+&OceF2hPXrDKtha*= zT+$pqLdK2?$Gqw_A8} zh_K~*uHJnK@f!?oaLYREgWNA~^|nELvo@@K}Wp;h!FzH_fee62iw&`jk&@BK{l&LwzsC?U+r%UE7(miND-63lLD(-aWVlp%}C=B=ZAdfmsTE-yX z-`A^zhzfS;UP66hcy-n-hH)MCMU1;-%EJ3z1(6JhW+1!~_a=A+c`-L2eCN|MOnh){ zL$=y;jczFfgjI{Wpc_=sWo>qM@00c3yfytAqq!rY^gEOM zdS_ZDyYZ-klZ+ot;G$xp(!#XA*d6J2w}q6>{pAvM{uaydx9smY--}L!VlPL{>L+kj zdQF`i-2Z7cB<=+Jg|W1f`VvUB+^B)TV7Ek@W%#H<<>NUa(FE{jUp?&%aC9iM`?R|Y zCvvdg7(4Yz7U5C_j*-$Xm1x>d1wXXE*U$efg2A>N+f1Gkt{V*xPoRB zcD9p4JJ{#8_gc9X&r>VE9&E!Gb$XiRdNri!Mxk;gD2v2*SCj0g8DNmF(rKZr{B}} zAE7Qg^lYcZI!oU0@Nb}4`S6g9o~vUnX`Cd|@vrUTFW~NBy<2l~5bNKO&`N)<%Q7T= z&-+CkWaBMrDX%o*fQ2thIjb9>gm*lI_Xna;{Z2-w7<%E>B6)8_w-(wqLf zrX2G0ZPSq^NtSI;?y#0~uqFp{rHNYr#J&+2=Y+k9$wRtw%swyk)>_?rMWrjrU}PYG$Y}_^Ij_-`o#5E0&md ze7|?6(Np4-7nZSeipfX@_+LkB!(UH?ta^n`Got{X7pW~}>jpWR%lnYGy= zk&dtE@G&?k;8KIuxufz<$D*`zb@>_O0K_&U_uriUZ(;NI3UH1Lr3cS1-rr{-F(JY8 z39^x7tI!-s81unwX*WGbtfkWzfcs%)CVUd;KC>h?0!>5_Q)0wQv%DotgK`#1PDe;` z1rUiPipyKf)2jN#g*oJtI?4s#P0^W6QQ;QP52>&RcVki zqhSf~4RSofGolvkTVav~&HWS)z{Ub{toQ&|L9-VWobyr88Ge4I5N93`M-3u!KTHar zN4@ekkPV@G2hpB=y=dn8VLJkxapNn>om+Te4RLw{$&22daIoG=hM!o{JS%m7%!F8Ws-252D73gOJk+-`6T9goA#SmnMEajmSllk$Li@XcyLY(=9*zurq zP=8CHCZ>K25ELye=@Ykwu0>$)tU?wSnp!b(ck@!=NG>Da)`X`lLI?zks@7@|d^b85 ztj@eVACh0N>w9pfg3-d(lmWZIELNqM)3hcIry<=TGLWXsGphgI_(_o>cfmw2$qH7W z+W0*9v*4qz^>390&#$MyAMw^>^;QHcb!G<_oZH4<{LZOYF3pZ<b;rc2-dC5IgFOAj++iYS+=Elo@AC@-IbAXJ%b!E8+m@9G{*F-z)Ai##oii@-??Z) zx_2f^lw>fc5lftHY$$n4X4zZM&|8AmeSO;a3s6PiXn67Dw3FcHuS!z-5Vfw!n@KsW z1)yp8S9}UsLBMfK5hBTlg9|QJ>5;P8OXSlk<^x8DA|8Bot%4M3n}vAWUZbzpOK(c& zBvu~N1TUM84I^)Ep-R|!Ny^dAd*Yql+8X(xUK9<_+%Gk-F-i)TNdv+}?>@iqM(M)O zK?r>9EuH=Y&Cq$+P({ZtZJkSX3toVrw~_FHTduL|5k?TcdxDcC&=D8h&%%Z!DU!(^ znaU$r`-UhI_kGlK^UUyo=vrRU-lIM(Ai+@;vzt6UD@3=HLo$9hD|_16eWBL+W^!bs~bC_jV(UDu`XLUDiW}8;A7GH<`^vdbS*|A#nPRAX~i*Fi- zuUw&799L1q70x43S@@4!%YVJP!=4dsoZmR#`ve(bRd5PtZvpoh`9Vmf75zR`J!AQh z{&wS#-nmAyC<%LOixFfbeQM8IpZ$GI_`a{^ps)I$T1MiuXQX#S7$dfnc(bc>5#XGP zUQX!5BIc2b3--tLZL=z3l=SA*h)2rV4t7|Q;pCzW7h z=ycSB-zP2Rxw>55wJo{(HOd@|C2V_3e$yVBC<^RT7|c_Dog`hYZS&0hxjKL~humr& z(Cb$mC?InISu6zj`R{p0{|yWuBLx~D`u-SNLjtcg)Mt1dafRY`G2eWh4~TX-#|*!C zVSu91N34mtksrm?7GO7p?+#~f>gDl^DVDoc*19nVF(d(!`tYe-(8w~B`9qoGCmExb z76YX(rtNh?TFagJ@O++o7p4n2+wIhD2TQA*I|-!sZ66?Zpm)k67<(WQ^Sze;o^Sm! z>h(J!p2i=Od!R2G_pRM4&c&ZS7XBa~dI7dl{*xymNIq6=h@ZgnZObTv<0{%T^kkFozhkmyU7Ei-oGahZR1S+qfm&zJX zjoPKJ&B|H+)LqT-y*B21tPpa~|A>81c!7PjymneYMAxr>gp8h5t^WTBuuPdG#NPnV zU()_Jz`p+*V7cyKx)tU}e!y^lLPipVFfxfFyV)W5xt=O3$`h3#Z=a_Cs z9G$EUdm^A4j2=kfhHC|UqouDr%Dknx^2N>bqwavqiphriJ+_1uRtIqV&%@gFe(Wr_ z8SvCZyLyr7#g!|2_NSYog}}0g8mrztLkhH_*xOlyh8@Yv;7#{y*|K;jb4xtLJ_+!t zIBlUx+vHu&1hA}h8{LYPCW#;xkcGud07$&WOFpsHVi=yq*7tBRsqo?IzHN4JRmwA3 z@11xKRh0_eQqS^k2(O3~C|e-<&{iaIpYY#Iyp@Gl+cF8x)5bo)zKm}bcMmqtf-(V~ z!F=~sZ2sAZ{Z|JdvK?zo#?7QO7!3x(=>*vR$2_^DFJXElxb5$ez(fDd>;q0Ti--E% zUD{h9UfezbQToq8#k{l3z>bJC8yyx9wai+TcWk16GaoKdH6~%{(_GX}Nx4L(#fIcu zaF6YaKHjs^@Us#3Yx3;CoCkIN^rHu2t!iR0S5ml9vFvH~t2t`w z(H)=9Oa-cQCFH#NOAw~iQ+t)JkuPgj)l>u@@;26jr54-&b38r>LA0VC4|VdweHFV` zR%I{2`S24O+931ITAELCCKhA#H! z`n!GPE$D@*bufw(2BKn3s{qL`Y=^J+G#AWVeu?-EoP()txZAn^H`Mt9$6%L`Iy@83 zA0X0yY~c7r`{y4@I6TGdvudTOMn=pG#^f)7h2@*&HxQT;f+xvB)#E2t&sPi^=AUhi zR_J2((1e_GC#YvS{2WW`@PT;Y_t4U$ZVRrb1b?e`2mH>aTiQz3trz62B?xa&-X*2d zg#T=`d)^mpYl@C&#>y`H&RLp2P*i{lCtV;r{equqrQ&uF+I(?5z#9xU&KL6G(5k7> zO`I%z^Tj^r%h~R7#x*WM-5fu4uL2KL^I{d)%=ujC<9T=!Vj|iW&{3Qx^79g7qRMYr zvF>LrbqV2pI*d9QwNuP8zO7fq{^p+_wcogi} zx_{^$Jg z>G;1%Zvus0GXqiY#Bigxti5x~$p zx2&HVx@9j&p0iE00r|V$Hg3O4a!>6J@eq5JvY2ICI7*x6?$d zCsul*uVZxbaJT9TD_C3&@G7EgYRnK|58J0kf*8o zH3#V(RmX$$ufgl_C9iAk5RS~}Cnf4yr-%cOvqisnQrd++lu#L)qt8c05VsKlpyMT2 z5-jdcAsnZt(}$#up=eh4rZii9W57fHdp8m!qKL6`x*QV=lS57J4(a@|ch#-+8{$uH zKe$4!)QQ*4@Eoq~xcx2o%ki7M_BvMd?R~yG`Zer3*-PLT?VH-%3E7K^FX(W)bke`D z{#Ug9?-yA>6q^qVBu}Dmfe#@3LLQ5jJiwWNfBudlo?099KEKyCOesZ%GIl}f4n-dZ z)saJC@d)x>tkdB9g2skHn0dX9Z88pF$z0?9=)zAv{gASTO`a1bsM8YFwNpK}l+Hi# z(#PpNsh{rbwulx9kg{g!*s$G(waCLPrf_ipy3^vuh;+IxwZSr43frQ|ve0;I$1IhF zK?Yd>n0`3UY7Z40N4ZIX&)!il>_zN{^G7R$O_1`{5c!K0Tlo z)&R)7cD4v9@|%{NKlCM-s&eCW@DSX+SfD*(1irHQOx1|ww{=f4gxw8=SgmhJY&aQS zz^j#Ot7iS91K52SnY1gi08&+_7t=3dgMSd_V>x7jihhndjzDQ-g8v)-*+!3LG2xyp z6$dKX35vqaL4T4NL*nf&RIGdGjhQgPng3YMnP(a=-;ra$I%+jT?9$Q$GDeUb+( zmxbk&Hl&IpDt4`(BM91C#@7?ipm~=nvf2M6RusTlKDaU)s3|KogE=sHVkq6PB%sLW zGYU}Sp=-`VXTt$R4s^+?{mC%QEtMutmZ`}X`iJ;7uql!AdYrx@(Gkp@Jn^a1YnwBiT6us&7Ej(RaT-AjYFYK(09)6x5=z>?JC8G$9_><0BzQVn( z@wimtn7EC#gsDCH&zAN>TUBCfy{t)q^zw#o0)|9_IS`Hn6kh6Bh)u+EOOmBEERbM| zz_*_UmUw(xR0jflwp6(hb%b_btxAn*e6!82U7YDw(2!x*2Z4Et#VrO}fZEu`T-&T+ zK6;(ctV)|m%wW`1_BzCMWI@jT>xB{HrCW(0hCIqvPjr7Dd$Np0XozrmiJt)^t&HKa; zrOp4Q{t$|k@Tjkjt1u*tT_npVw{j8@1UAqtjpo6d5XUl#H$S{gFlrp#;k4Hh$EF^}^-S@(q z73LHSd5y}r97kd%fnlJrel%*jJWMC^eWUgse7FmozX6^G_B)=3sbo>A4H|jJg>~6o z+!xfzNxj*2vS-ho$y?b+>HU7?WhKv!4oBPF+zbGQObb4=!M(&I%U-uP+)&Mu?8j+Y zJqH5oqe)T*1AKAD2TQuoCcDSOgot`Go0f) zWdSpVo7!4lFdNxk)|;kFBL}K^Hy=~Q%wl8o#)yGjE|adQfzAK2R>fU4Pl%c!ARod{$X5G!Fa!BDLvJ)9+$N;TEa0)5#Djewx8>lgG%ZeN#;o<|ghL+_>5cCFmyul@iqzef7 z;fZ#3gL;I?EUSW1)MFSAA|##`QVUW%e&@7B70eb=Ylj_x*HB(7KdB#Sf!qBlRXzno|?V!dy?` zd(JWohf2-9s>#IjNTc0bk)i<4RWOaMG`fT<6s=qR34RZ1K0ZlZvaG&=b(tBJCrr87 z!U16>zFPlKXuV`n3(s`QBBV?C3$b0H`;6ktLfKMu4|k}BPAnMLh>owS#}guv1`rVD zgU&l^tl7|@?*}vZiX@6h(wZG$&d6=vzScN@@RjcP+lZ)xK8;A;**B{oDjVM$T@QeQZei1Agi$J_+X#c@pTw6;Nto8Mlb1+8p zgmm=??gSQ6zCDpVxlM9Socb|Le3}pxG&HkMOZc?%(LoRnJz8VRbj2^)T7_{5u*BsB z2R|=o{tWe$Ap$RTdtJV+QsR$%v-g|xb-Y9ROhb_3IGTEtpv9b16^t3k;MP_z@kX?0 zs*r~&bo10(bN1&ai(AfNP2U3YAdCEY?nm;{kpUM$7ke|uzOxmLqO0!;+e%syj+C)Xr=E zRBlJ&Q9kDtx`yia#T&O1R4wuAx6}_S-2d6e((8!!$Xy#F2FH=PtgUI{His^znNIR#_z$Z{Vdp#Cs+Z%&FrqoKjpnOB%FaU}*p6khbzdyi zDN|4|VXk~9Fz=mfsf@39O@i#G`vbON-CSJTW4eBGeK(^cG~yuC&#E6#{@FO4pa> z=Amjw>F#0$OP2SMn6#9!$}{Bfw{ zw^dybj0=z(>_}M({d&;i)u~2yS{xutG(A|;<1lCqP}_P-c}ys ztn4_PRV1Gsn59v+$|@8jSl1%RE^oex#9>rF%M*V7Mw@KX5_!@N%wRvLD#hiH|#1e7adf`7_F&p_s3h!6@{=W7=5> zOTOA{i6sG?YH%|}cZX{U<4_A}nQy$Phv5hH)0`!AUJCP&pQXLAIB;tWcUXlDVPt4? zvl4?9!Yszoq>bSsrXD?;Y29`qPj}Sue4K}04$g161aBuQ6oH)U^Tv-OI}Kqp^G|%# z#=mUL>@hv!Wn>)Zy$OTfio>VR(xFBb zvOwFmow_r7ZtA=m4E%eB}sq{S! z?z1^WH_i}-wU6O+cD%)WT|-ossoM=I@6*FfZs!0^UPHDe4(#e#|NV zql_aU-U;33s7ug`<`f~|FJwC(=L*%Tm$o9AvP!I|hTgByPk_qksG`nOoUNyFu4RCE zBE!tHtdteAY=^2Qy$wTv7bNZJ7TNvFczE5U{b9VhF#l(V3C2QJfs9CS_g#B0SAz^y z_sygaQjbFI2|;YGil16XEcNW`y?_6h?N1BqO?d{Hh;%_(w%1tFrZ97$dlPDpql|h=6pWeiJx!-cWc_ z8f|lE0cd>jo;?&pX}e(D_4UZTy9Y%rjMJS~b84W!I8f^Jl>=dECvYiBQP|@FMOyerNoWF(l|-9}6^>NUjRvt#(_5RQE67b7 zIr$nptu>K<{M@10_mU`TlyGzh*<+;d*Kp1*zA~7s>BLGBZJ{1b8z1tYuKCoEhq&(e zBiVcf*|0=L?%(+X^w--U#)cM|@ozwc7`pppS$-j5KPe_QL_7J-N4k=-wp@r~k0gqQ z>PrXAu(%-VzKQlLA7keg9N$X}R^V>`taFXNZQ#E70&v?5(0j}@N?(pdbwo)@bcbKS znEcN2jrt$wl2&)>aRWXAG5o&lAsZk6mET3tE(vL?#J=8i_fU3%NMXH$=`c|o0yO4> zONcwf(3bU1=Av_eyNSi0^UK@?8NumbpCv6Q*)~_BOCV`zAfzp!N`ch{c$3+gURkO^ z$qQ*)iGfVs0fRywl_5@+pU09K+V%LWT&?y!zJldN$8{EL=6%vzz`s3BKm5uxKDu&r z^RnX>u+s6+MRl()pd!sZ3)^93LWDU~N0J!gNru3Y+|aBIZz&`i3Q&nm2kk}e+k6JF z)yC%8`hk3(x6FvAeuoWozf*0*&K@H}Vk=1E>Wr5}l?xAeQm?@SDVpmR0fnNB#s_C~ z%?d|g?Kh(IO;=ECqkmtMkJ=F>|FiQHCUQv<3R0{|EFkAv8Bf)YNpUuze4cJ+DX z5OxW{c4htPIdowS;O*?(4zH3{lqzT5S(oPBWR2iM@~r$Sm*0ON0zLc9h%4!KDC=I85YrYtDaIn$OLZ41nXXg z{#sGmdA0om5FexSVWIF=ANgQI&Eln*0uZ%KB^_pqh$O`kz-@bKnIgD8bKuccs0v3} z758GOpPrWq8Hih$aIEyvEEh#()Q7rEu&p#Y{UW`Eug*RL*KE;=Ys&v3WA$51e~S0h zpRUz|JHQsavyFGq5s^<+XuW*1>gtT(no%dRP{^eRG>dfyOj#dTm9E1?%nhpd;9GmO z{+heZz7lKy3Z74qYK|~tk#dd5aP^6#m0+245D`noxu~Qk(2Mx z?K>{UyU>Em%_a~fFi>zC+N}*2j$=pNt_uOlCce_@lVz>{kFB%diYr>SHSX?CaCdhN z?(R;4ySrOx+=IKjySuwK9w4}f5a0!J?z!WR@%{j#yV<)|)v7ta=`6_TX2vJ__^8)M zJPVM>I7!BZsmhO3M^LD+XcA)`XD;W7TLfC|V%2%zah7ND<%(wx@rND*vH_}IaB>qS zutV$(?#g^TxI(kQng4`7DEeR3b5+|;7TvgY0SwD>+=asG1%t)OqS1y)2|_STS~ocE zr{6jdYV32aa_0p4C3oaFk{`PaRlitlTW)v+=6EBIn9{oz`L#DDgd5^T=x}`WJh9Rr z!D4@Vp48O%kf;b$(Y2*nkCQ`2 z{6iLvU!u6H+pxm&xVTsC>L8DxtghlErNc(k4n!oaJk8c`Q7TjVbjmUEN?(7k^U!ce zOh?y?LY1gvq@1bK!mz11mmxHDH(2u>fnjH=c4>J0;h3==QhDaV)*H6=mpSij2Ogck zmhJ=_nK7eXJfatFoFwTCyj8g{X(_-=@Wv=z*$%Dmgux@#9l#bh+P3)+tWd0mAy0>) zFIRiN#O&fMKnWq({q5e7u8L4@p83Dv{{$UAaIE%N@dsle_cD6Vg3JQ^$Fk!!1cWzl zs;7XLfj!s+{tifX!>n-4H=0O#6`aQQBK(rpT`uY(B}Gw~NrM@=W)(>iH*ydJFGfD4 zOvUMLaKGHA*w)IrrxqbWm8azvD(Xf`AYt4LEKs-ixOCRtEqLHR1^cS-Jpa0L{u`o% zxO&^$F2AO!E0{25fm=(|qYrlOz)hgD`t5vbMZdK|*re_F%jDPRP~VCccpK-X&&>sF z$QnY5zG?4znKoL^oX-~qZNwkis~cQ_z}#DFoG|1s zt!N^R%4L4Fjw0E0MMj}un zCBy_sAb0V%Wkc=9E&VSXp4oD2OWNJr)Yg~3wvczXlzpGr2Tz*gzAM?0e^7}c^CkcC zoA|SjdK9$jy{Dxg33uI5QW8nRkwz@`ybNDbPJvrj_GfDRl7w9q%X>M{*3N-%%RidX zd-Uf`jk7f42X)5pMzsiJ0Zv zWrTi+hgR3HK*0H(CK{eO+n&_rY1O9!iz9Xe90Eo)Mw+9_?pJZ9v=zY95gze(& zuA)2#05De34N)9Z<3Du3aFdP?&yu5nAxcdZ$NapGMg;&7^Q>=(F>=j7Gi?^n@W`lY z<)JjS+A-}#FlfU^sGdfKm$}_L={=ekXcK>*3Kc zhl-j+!|zYW;usyDdfS!>qdz}(hx!F}d{1YTJ)6HdRZ5|(RvOMd@^!Hjl`7VbA3ElP0A??tPSkU_}A?^d3V?26jHs41{Asy=J z{f(MYubuA?LAL>DKKG;39(%7B{3vzERUfI<{uha+y+!;|ZkuLOcUI@~=si?58lKZN z$X1IGmmo!E1S>RF>e8GZelYcAN36!&^`AzK2Pi?__ywV6ix5Jlwcd(F3HUej7XW_$ z*p;rlW@kpsjpr91eXsScwbc7i=CSBB$^lHz-01n;($jgq*AfK#QcV<1+lR=^ht6MU z4%bV~F1t}#Qjz5M-AyHqf0Bonh#!vQ&Y(vVyh#iXuaTL3z^=$WmgE1{H~`?k);Q4A z`3bpoc3f0c2>0qiXelam-4o(A)Xtf`(_cndjx`m?NZY%M`Ec~hiSE&vSrj?qJ_w8O zh#xOw=r@!2d?TXu0jU`bDvWGU+S_0?iBQ1`= zBo88E9b=wjpLHf7E`fn$SF_36yLKz9=FIQAPPdZtKHw8r2CH!&tEZ0}5#ik~1(xT4 zx#N-)Q5Xi>+;32#3GmTH%I9bsA_>^tzG5ec_1>LBnrv*xanWqbDsoBWDvdhUKXq); zS#>m)S=?*}vse`|VP0gFh7*5A!?RE(t#{=5NZHI4&E{L_rUa#|&*1ub;En4TJrdW* z?&@V&PW$v!O+6|-7g_i7Uw{I{7d3d0@yiM^V)>AoZk(gIvye+#Zg)-Lb5{1T3wdJi zO1cdhm415dXSZ?gVY}C;zoophrxoko+0$Fkm_#BG3C(SspJ7PqNa`HWIucvm134qn z9&`N_k#JViZF-K5jz%J3Dlx#v4R9>oGAh%H4c4X~5Hsq|&q^Vz7$7xJ(LJF!T!Vi~ z@{Pv)u473V_M4Z9!g|(ku};p{R>skI21ssC1b)8Bgt`r1eLpppk)l!ADZE6C~V*`{?SYdeU@; zJ~^lNsgT=`eMe-Rp0KdZGa>y^g>m#$&zO;V1Cr6tzYE(S&B$tYX+jQ#o?n1K%;hf~ ze49Bleq>)W@SITIK?|<~pzMKVf&xbNDT^Y>HX;`{RLN-vGqx6LN@~8KVvf44vqA0)7nrX=4+Q0j zNt}z#h>4R;PRVGel#?>!koq{GuxQl>fbHcy8g%5b8IgSY?(z1GBqj)BO8%QMGl-cq zo3On=28mZN<7#(aRSZo<1HEb+*8L3|u$i=tAT`OnOE0#hEatnAQ-+~>NtSc)!fF}x zF=&QvR*BA`zsxP;6Z!a89S^ney6M!|v>UnY8YVV#wm&E_7tj-x8S;;u#miS^I& zvhqKPh~Mz0u+zqUxc`Cu`~E)22w|6=aC4`*&S$M?FHjro3?ESN-Ze#>@8#$FGHTlgp?N90~Y#^ zq8Jv?m!M8|QT|f3>xvi(o`U>9t%@JeRhwDp2}mB9$rEEAHqc)G@>M8d>l#H^5~2t} zADiB|Rb>bAd4a~>KP5Gj!jva*48u58lt+-PUq!!CTbGFKMSwLZ51?sO6Gn?YNXw?A zn9Hct|AMr{q{$nZ^FCU$#tyH&m(rB5p>d6MYOa@I zCT4|dvkeDlWIA!$qha(sq#h`06NCQ#%?*H1!bB*>={jNRy@HZGLa2x60Ov)LEMK1T zr+Hu7nJ+-Uk&(5=W=ElN!S0-W-}4C?Q^96;(>d?jWn*@x9gwgJJL}8eLgv2~y)?-< z&OKSU+6MJcPgB+@w!?^Na1Em~K0;IeYh@ARgvE{4A%24q!)g;nnoZasLL?fKx(To+ zhIR_JiP~fMxipDj#@9GrN~DdL(kXdlF4S1>+?>PD!#9yW8UbJ(fm5+u;5DgXe@Ijh z&eJg2o?6c3T1VkIA#@FT@RG&7AQ0n$^Z7G&WWb$DSvZvtpfTy7YSdLUhlykJZCb-?tcuMDdmsAJ4;>$ib{eT0S)3i# z=a&#eBLMS3=lM$cZ!&eKa%}nJ7X!)%7_L%6;e9i956JPz1ujdVfrUZ)&=5n?)qLNjZ!bOzVyngvw+rW2 zDch6Or`R0Yo`8&KH%hI`U1cj8$Ol_KffqWg8h|BkBQ_j~T|7K15ZPkY`nunA(59qK*tmb3Oq0JnusRh0wC`3jxZB!w(YKT5fL6B*H9-JcIeB}fb8vjt}B{tA#pgiRwG?} zvW!KHY=+#9K`NF>z6zF}{(8X`4r_(6_!2KbRLE z{Y8B2{PcZBJi7L{YGMm!fUinoSQDP+Ax6<;JiyvpI$VMtA7i^|ESXj(p{$o`HH%Se zHM3V`FVUihnyFS2Cl*jmo1e8lb=Yqo6Wh7B??m2ZbhgcUyd3dayW_o)JAZ{*Cc|@v zv)EbVHZ2YYa;d)>n*T<@MNqWZ$L)SdNXlbRNEH)Ou$}+8`FZAQtUMUU?9BU=Hur>7 zX=8@}1q|cRIN*cx6#J3t@E-3HB$-Fv!7>#Uv4{LeB*UiBL|1w~xMw9;=;~dOu7e6n zNp&X5$$5~4eXer1tSgGmqJq@zPR&^B6-w$1{yp(7pXVDFrIL^oQb;gGT}+ewqI1-! zL}=4iDj0J5$nR>0UwxKUDpp)fpABZ*-SIbk3ENxcB$-pBti#QWDwM77n-*3x{%9(v z(nU8_gW;P22Y4ucO|$nZ_=1eoDZa*iRNMbi3l0f$GC-06C??=2AiRP%jpzY*p<0~3 zwGSR#^SF*L_60l)=_ZZl3T_G;)6=nsC8^xEvHaXL~(PrXn+1em1&x;#C z2|=p>C2(1wPAnz36qackgS+e^=WAxSK)XQ*G}Mw?1UzG+e!9`8N=TYhO~$Zx)k83W&5s9*hurEjIfFZ>eQI7#D%(bljxNQju{YYE-nebBoqnA@-95e{$r~|bjbNtIGhfq-oHlBH zoRp~cta@skCA||ul-^n5C|!?qP@UBC33eIHsHiWHeGPIM(p<7!G+AnHZ$M=TCSV9I z4zTm_2a7ow7{P|{Vnr~k4DQir``muWLLW3PK-sniz_JvDUj(*{Yt0va;C<>PfLByU zXtVu2_@aOIDfj+U2Hd05Bz`9K=WbU1SA-e9g<<(|{HlqjbW@&->hzl@*mZ@L{ao9U zU4xranOSH0(AOiCuKA!){v-s!n?|;g%ug~bmk?b2{-r<-Ch{xK@~<+D#_?Aozv&<- z4VhR_51JxUL_o9)QI1fs%MZCceiVB>jb1+^c_F)IIr+Bf?W7ES1A;Tkx%XiGNgbe) zZ4H(A$2|SOLcCwSfTo&ACt7}wh@k7sl5I&eGr9GUw@wf|*~T9fa&T{RKz>}DM3Atk znbR>IWn)Ftv8Vjn36~+AtG2)o5Z_WrSA|4ikJU+7nzy>7iEx}99psIUsf24FD@wXN zE}cl(?Waj;=v^@M;DI}uFJZX#6L_A{N*#Ex)6Fp!=GbA6j&NWqMA5fi(V}~co$u=Q z6{bHlYE=#P40*AcnIEV^-AlTkp)$0AoF z-n&+BwU`M>HCs8!q`(*vp9J^KQ3hWW)ie!Bm&RRd$t0R=M#o=;7jFc%O5RKIK>h>y-02VU${{Q|l|>QE1Ez-h$rFG`10t#{6wrxuvJC=IYb z@&jZ4H!vZYzIQ*ZEWflus!gN?DlDuS3fqBvyPMuA_^dno^?BYt6nEBZqEAtLoEj-2 zYHX_Y>X?#WS$IlCo-)FgCKKjs}J1D%%uqakZL z>x|EWD?hFs$$6YkkmFFV!86nkOs(oiPTq`xs(HNW<|?MH3?(5ida2CotF`!PH7RTJYR=wx`<0 zc&b3i1Ek?jUW_u63RL?MM72Z5tj!w}^eoQFPwN>X0Gs`-%0PyFeqF8bTlU0E>?88j z-qJL}Jm0U6&Bda`5qU(()&BdoHPlV9WuLZVU$NHPJNy(j=p1?ECaJ5qyJ`dLE(&!m z5Z@YHE?4KNENUL0WU^C~m|Gn3eGVLGS_d>{6Yqt}GFDKCvH9^#5NYO9tJM53C!Du^ z!O3FHRkA-+-Xi~DEhw-|qy*qvlFJ6Ec!lVR)KdXu8E`$-GB!p6H$QcZ%3>&Ik?UR%* z9_rx#anOF)Kq8*GUUIj4R+6oV!^DW5kxyrr}LZ#jXggO)Cq=mqjWx@y$nbCukezy~Huf zkLdN>8t8(JDZg-@iBV}ZsdmSp+Ogi9BpTfZpC^$Qo8T0566Ng8ADte+2?=ruOX%9b zL>dL+DNjAD9nrt(FFv(yXCcXQQw92Y#JUGg;gt&CLwe{dcEx>sUY2(P5r}t}sBb?> zm0Ohn3<+QY#UcK+a;srxHDT@q?hQ!$2i$$2SFWO*lQP0!_8B)4^~(CJA8O9t#rr>0GYOuyDNs!ro% zm!9ugGE>}uF=DhW_NU&*ASBTb1A)%P8yoW(-R>;mFPGbIuM0m+YAAAkSFf<9Q4OLh z9DgJ=M1Qy^K_0XB7|_80g0?~=A$mhI-|fU=qjGvT1sg^Y>*>mKzfgglCt#5pp^V`* z(q42p^R1J2^@Rk%SA~3@$hcIaOFG zLlg^2?0?k+bzhgfUZx*=K6JdY zuN~Z%KUu;PqPDD~Cio(^;d^3c;-*H#r?esY?#F2_D(^chqNe$%q!rMr{@k!KE*$Y} zxFV>A#scD$F-9zD+{P|vvn~m$qa822*-fp)wCQHYKqi?w15DuC@M)!*Rcfmeu*MEx z%XftI^eaI3Rwj1Z!Xr^f#&LnHS>o^5-K&*zB@OMr?N6f$mvjZDpmdA1fb3*N0eqEE zE3?Zap7qdo56aTK7-XVjG0Km_{HOBz$kft@6a&O}i_%<~Mq4{TBYXUL7!d_mTiDw8 zdm8VJu1$@#akXHQQsyf|QL(|nOb2HoSjNi8qJM(R%c6v*I^m>G!gJOzLO`ihDF7qb zhuNw8o{2yX+7%gm2Ua@JHPu#&UsObt+_gEdVNj-)?UZ-Ezq3*_)v+&FQ)7b@+8n$r z(LjX)vL(Gz#PNGuMiWNtJB^tk(^(c;HOA`Zy4%U~Ik#c)S4lQMv^Vn`z3Q`F_?dD2 z7spqnXGx$hIMyFKhQxmxDFtvAjL+UR{b=U>qdC{epJ57TReQnCj*iS`&A!y;d^^kj zWDadv9i!mrQby_oD{Y=AKPp2frxOqD(Y*y= zhc7S0h|4=Y;;Ihr`IW!h-?#IsYUb8?XgdbrQ6SZI?bPwBFm&y$#?(KPOEWSR^B+R} z9h>!>X+j|*uI0ZHkCLCikK)$(Y(OMUKp;ula)jvs);?#!Ud0LyB|8R99E3BVJSuI1 z*U(U!l{QBQJ6^GATX(Y_a8I3?{4E$cQaprIJFAJ%htyn6G&&{o=`@%`(zBNyHheN6 zT}!Jmf&_^ud}k;xkCEtHhj!B=>%loZ)zE{_t=hXMWqiZu;qRA>U5qvNgf!=XG;I>` z5C^PoowGI#zje3}>oFm0u*@huo$hq?1&e@{nFrE4;|k@ptPY|gTZoPRiLQB6Q_b~DAm6%)Kyr(5+ZH3%Qq`q`iR3sdfjxI)L>zgB>{t;K>jE>Q? zQs^G3p;?(!>wmz*|G7{L{WKAv>@Sf*5^_Mz;7Ye2R|hR^FnPZJ_nfNG?EI`;knU;z zNg7NdIlh(DA%>%PQo9i&i-|l{bZ)C?jnfA#-L`J9ezq+i4@Ic}s+hVoKuH#9X^f@X z`*ypz>SgX_gV={)ODCtfYwhKT#kXqT>!9qc#T_}?nRGbxk99A~<`Zz4<;)-JvFv9~ z`By)I#AP7zEfYrX3z))?@=Wr-0;&K>f&qEd6~)JeW?|7v&NLkVyyINUQX>Sq{>!a~ z@}gH+-AbtdR82IJ#wj7A=+Sd54%MI}O$m>N+BTVC~B5vCDJfN=1Qd9Wmn33kmR4tA={Mt}BkU!L*8jO<+uW z{G`Or72(e%Yu6If&k?97tpO_W(|u1PzDwf(Jiqv|2fw^;C-^43I$&2p2&PJBU$yH8c4EoTWiRcRXOEKp-#1)B1nnj|;&if7CC#Nf z<4Au_yQJ$5yispajU$p`80?cX!mlKHpz30&T6_BvhV?w5Fkf?J&%c1oquaQpVE^M+ zLa?BOT;5_J5)IWQDp0O{7FWXNkAP+}xLsHy+X^)i(C2#97+0=L}+QWriL{`s5>w1h=jB#T4|S?o9Ww4 z;jF7P?pIiFog;y~Sy8C6)&e6wnYlz{fbLJ@@vCW5Lj_1Xzo9J^?o_u-)|nC2j>}Wy zYumIiT@;xNh41%Jdimlu8t%u|hi^^nGntPFw@&<`KW0K@L*YdcX%xYKxf&h#2(;EC zaZC+NyewUuoL{@bcf7)f5xX7Bx)SS6k3L};p(vC8fvT5qxy?a*7dZbE=c>GpSK>JHTr`RR_3J`EV0v{55h1!?ojF2>FIaEMUV5f zol~_Lz?b*%pL=^RxD}v~nhOTBS6!sa}jARav8^r-bEoa{X%E z!Z1q1EpX6GkGY{qqauJ4m;CD;ITeL%Ew=m;sl$z7I%32_feC%i*(+mNQ%Pi$SHa#Wk+Rlr%_3S0-h6_rV%czGH-9Q z3=&kr179GQU0bH4b4)`F4zDsrglcq{3|5yoMP{2j*4F;+ckuIaEhi@v=E}^pfhlqG z=sfFI>Fj)<%BHv1j|69@Rm(HNw~9DPYyA1dy*<$!YowP}0~ON)cw|<^;}0oy%>S+^ zQa}r0$;QNB##l$<7Pp8XW6kcg|E2V7734;7;h|a(n#-MzSBOOYMno-wTSmjZkuDqU zlboQRo-IX?!YFc!0VsZV(cK(f4_K~UES$@oGvIZj?k9L$-wBtwm_fSq-*<967)b z6Mas4x#L?7SAf5W@edi!_fF1AO%JhG?M>~?(ahB&yU&tzPU6TDjUopdPR#FjU-kD z4{>e2ym9zukDgaVf7a5AZl#O}QLXGzdn*cq-7(~t$Ea-?N{=r@2o~EEa4)C5qha-X zr*Im|g(*qu2GoN!96TGJ0%X)~9ZBLlWMqf%Ol<2mg0Xfy^#kFVW&}DK&8w@|n;F?1TY5}W^ zS7zcYEjcb=iRK!@n6_Hw0)bp2Sju7!9=*w3dS*-uB)wA-6zL0L=+mt#8h<>;Cq&vq z5(vkHdlr=Vbg^0qcm?*hxzvJsrg3X;_J;>};sRyc79Ta*jeR%6XVyOq1kZe8W63)b z1tv8CAPa35)|YoZ<9E{c3YF2eriz=S-mil9x73>Lr>F57@Ur)-={1buq5AwwXIAuf zHU;|MPL134%zuN<``XR!Km}NNWOmFfPO|r@4NNX_)2xktnxh|EoF^TlUs|1A9i?BJ z=U)26F*mr%Jj6V=**n|MY->`3*-+LtHmEvnB`hPd(L384@NI&H;xh@45EmCmjW`KI zk5pbRJC&r!+UUGeEIbGf1K!wol>c*$Q^;7MWrVXKrMx722NH~nrWqq|tab2U9{=}o zxWC^{?8f-=X_=AU291&(W0covl-*k*linMDZgQc$TrLzDv=~-1^~b>|&Xn(NWll<5 z<0ApzUht5e^5TIX)~`d;iW#^S&0luOvV<`W4#1oN+eB~p0WZPs-d5D}*43eb5>A~8 zpdcrz-%P%r6Zwf^EDQz>{6X_&YQI0AqIcvN@Ef{!PA&62l*Tu%gFRK|Mq#aN}3FMl@TW=>^8z4IF0&2MTcc3-zXNnRp459(@i ziUXgH7zUV($i<7`aVW~f*N>lA5)m*Cw90A7G;o(Rit`{fWJ73l7a_zr4f0=Vt?2AL zDf(1}I-Qt|H`YkHBl=WS-&%TunllbZBbx6@)6#slZt0c76{HSxVqYHkqj+*}o*C_< z1QG7htBLrEenEoOy4^1m2YZB4)5`@`o$1u89?^o+ntmTpBoI^^s^V8OeT|U0gV#;t zM&*chnVeS$05O$|CQu2f0xUH)g8ov#=qpJNh#JX~q4EP^`tD2k4$jJomi>^({Ov?@ zCjxK*5<=8Pf4e01d1^;T8?uRSn}XVf*vA*w9-VWaU08-OScy=-r3T=xMWSDWEMeQ2 z&@bX>pSMl$vLF4hvX;Wcdy?rNGj;)@)&`qZa72gB8*a}kK`27fc$aAzv_X_}QvATG zC>XB#qV`14Qgv#meYEd*Jj3Oa6Mko^)57?ClU9A(n#G@d{#t~X*MJk``Wp;Nxa-W9 zNbJ=W_Nu#-_(XH=xsCoeIC?o1GOjLhD*i{p#Jkxs^hkdQk}66ou~8Zw#St7yU)awM zSixlbQ@+2Tqa|t&ERzt4_$XKv7PXbD6dIS5cDE^s)q%1Er%4nO@Fknhwu-oY3auKm zbw{C1ga&JIkp9RGFZhnKo}1fDMP9`5^q%Rm>o$02;gdMCvIPYq+*dGCY>gN(45#R0 zt*^QQUxVEBj_R>Je#0_VeM6IjbW^pXo&2}7aFVO#?bL~&J zMK=#?Y)u2YD>PAu`C!5*35H)5e)T=gLWH{On0E3>?Fe^zaZ zC|GvwAn6t~y#CRjkiY8hab$d4nBkmvh>K@nBE*L z)Ky8!C^s^;u}Dj>`C@6DViA{OW07f+o|0r{m134=m2F~@l$MlYWoKcTX2z<#;$V_P z(U4v?_qV#0|NpC-km7%fo7CUpwrxxZ`q67Ee8|nuZZYYUNrTQ;ft4XBRF3)WVM1CP z-=W9%9WwV`vll?o1hzWa*(kmRIMXT(u3CykREeVNOaa`&SVX~fkJ$`;^?getH}SEc5vepH9?WGL&JunC{} zXcdrkxhg-QW^+^YNYc28 zxnf|xsb*yWv;@W77M;2;rx*}PK-xt907i@+A%oRf7z7QLMSNPi{myPdXUbH?IY)QF z%C0P0SHbhrd~P4*CNgj8FV=&Id)EVQjJJ9iVz_X~s-R-*JHH&#LVefP2X zNK>D>ZFZIu5kX2s&U85xWjSVVAWPS#^vG}pi^1pt zQI*dTrWAE}lRP~QBg(FW>w=;${x$gi7_dhfu$9!E=rT9Z{A=z}WsNJVOaRaO3Elqh z`FyHPt3P7;BI8S38B|z0MS09VW!< z6!aRL&!9yDfWC&m_?k_$1Gy>TjDx62%50Gt!%F=v3^L;kUV27dHbdu;%P-i8 z4`SZapZx}TN;u)1_a`rFwYL}9?j1m28@Qr_{e&NV5-{AH_jRmlsp%0*61(zr6`#p< zHY!U?zhAFZh;vdU;|mw}+I{&_wtVpVrHO?Gql*SyOR}-_T_n#B-Qw_`t48xey(!s# zUSPR3{lIXtVX>r&e3fezFT;rfEzMB3LLJ7RSW-ctp+c&r3Bm43 z2K9vNv(dr_krFyb&kKe&jogNGG48z}NAY1w;PKHt-O3`c@C(J8`^>r_gjFW}lxwu= zTyOdt4%3`75``#tXo;tOgxN2q9l9HlP^}6AMEb#p@k&HY!{j}JBcn&+8;LJ zi_QK065WO~)}W4#Co{AG_iYa`Z`zAYIwh<+%gac!V?Hjr~|mW?gTFDubOAP(wCmonAKnQF^vy?CUjJG3mZj)^*ct@ zIn2|bQmQ+EXZZrZKPB1n5QTd_G1woGoY!su4_@zUTZ(4B)^*m@eCb4@ieQ1bJ&-sG zv(`@q9{Q*3>aWX3H_d$h@;fCqIc17-ZWo%}!YJ?*DnROQjUWAhst?SMj`q&4GOuke zGB5E@v5xUG(5$g9&CUQ^4m_qNx!h*M zMO&VWaPKEV`=h+`s}11YgX`nU-(T*&zNUszd@v|-{5bm)2m*3DW7p}ML72O(rYlfL zGwVrLNW*}0dohf-&(;t-_3!+cJjsFtMuH+dm#sSc9R&v(Cz^#5i!;N*1ev?l+GVBI zX7{}53d~KY$D@i>w!~H{EtrX@)QB;|SB?a$(h?RCg4yH&vohpvan-t|EYVH-oaV=~5dEb}<0A@Y}?aD6anfl>A>3Sb_g?9xMOB%PNTAV^CiQry>#S>m_$hx;J;!m6sp{9Zbefo?PH+`R=vnFSw@<|iP<+*eealR|v5dyE;Hdv7imH)%XFX96{kmo$(3=gzFkuvcIsv< zQjPz<@8xDYZPT@z&?3i#Z7l852)@PF=$tCCkW}T^eTQ{Ptlc;Du$g@yl}e{iLUP-L zg^*>`;3V^oF$P~Sh*6MPW z$Ou79&I%u5zp>3%`wnVL;ALpxSudh@CW`Ws@WHA%WfUoRVOXl9h+{gdE)aG;B0AJ9 ztS`4I!)JDymd7;LIW0P;5w?JJHC8^LG^sZ@Rc%MYyD}E8#{bGqjkak+HLp{!-TL4# zjW4wso_gys@%)~-zd=nUs@d)%3@T@hYysXM-4B%MoK0QRDxzcPmQED`*F9`IJ!77n4-!Y+2dKu|e<`r; zlaKrOwkb+bP=ej#RHw8uMB#`?>jf+yAI^aUatf4c!Ug?x^?^>bZJ`Rh#5HVVqea^Z zjjF^?UOVT|RXp*A1qRLbYTjxLq6G}n&TsCg&Hd+(j{bTS)uG7BDV}r^sm1$BO5B?w zoYuDM%NDJ)74>TAM0zqeJ(%}s17mf)*$I4ObTNu)7ULC1m3?R$k7J+$!KtV{**wuP zaQD=*82#i3*n*i%_B(4c8@dlftOR14en-{*^dD{6qS@ zRxnBy#wO81=l#i))BGTzd{|#~@NzS{y8zdSn^~6!6Ev`>Nsa5wLyCy|qMY>!fFqSW zx8yo3y6s;wbTMYluq9wrk(I0h?d>UDW*K~xmBK?+N_xCybDUiZnX5$zEPYf8BsI7f zuRF$LX{=c${ZIAtu}Wb@C5$nTy+tUSrRzAY#+fYjYb;4YZxwO-y3ZcRxxT)B+lkg5 z{e6BUE{t}0L1cPejr!f8)8S|fP)YM!4}3<9v%_;?H1@Y>#SQqgS&t5xT@1(m>S33l z==~u`&drt-LIIQ3SxFx;ULF6o%DzKxj0o5QkK{0YpVwVZf{CnkNvLownRa>wHcU{Eab+ zRvn`9MUHlmd~bS1a3@hG>k)Rw-(j5!(AFq;{NQTHm|Wwna==Btl8`mk%Vgs%JzyP`mPffr(HFgXl#oLEZ^}ufN^I~ zLl%`PX1b(p%JO2i@*L|T^l97}%qdAl(@1DV3k=!?g+C1Fwk$jP!k~ts09dUlER?_Y zc5W#KE;zH7CuuZEC=H5bU2n|wo}>2uz>FXF$Y~A)|9#8ovV3X&^h9xYcb^*yB9Ab1 zj<5|tJN6#z8#5##BZMBA_xCfi0X(K=cElnddybYAV^k?FeqlWv9TVR50K?G_zRz3< zI0c}$XqkO)iJX1WNwOp=3U5U2d9^Bb{=(kbR(0G%rS-#OI<~Mm(bK!%G&}0%t`N}Mh zQ#_T7^ix7kz;G_)VQQ>d);F29;ngS_C0(A9BF-o=Rart74?qfh$Dy6V6^UvOP}AcT zwPu6XQb55u!Mv5Y#`l8L{qFV`SZQQjEelL6Tr%y0%b9b^TNOs??ehk1iY?Ag;B02p zx5A15S+^TP0*Q_bZ0IyH7ape5GWxfN@$VhU3cSxWvx=T!TSC5EQB3i0&YkCw0j?gI z&%G`Y?_r9OZDk@>8J<>AMR|dt>5f(=G8tteCMH(->C)w8b)k+?mQm9A+Vy?!VT#V^ ziT@L(=xE9Kf72AB3gNak2lo;dNnII1SiA^?-kJDWlU*MJ!p@eWBR=}vA;Ft83<-o- zIHT0$+!{~tXI05+-6nfQ3ShuJem79O*D6vF2VFa1Bol#BdaQ1RW=A}mKP;4>9Ppih zkDH2x51Uf#Y)prM4Ui(5-H02nx2zFvZaj4Ks*mrpNL{7rVe3xG8TqVDwqCi0eaq)O@ z{<3=qPdA{-k^TYVnX?-Fd(dpZM0wIRp0WPKTTqb^%ER~#iZ?PyF_-&=#NTj%;U%ye zG1Yr|Gb1v956~=0k+r;h0x#fhfoiGLj1RHWPh%ajV#ASc0x3Gr?J}Idq9COra9M^O zvMPJnd7t5JDaG2bL}T8nf?&>c_1nACKGcb4B*`-C@fPQ2IBB|-mRIff^*$M*= z$k%PE94%oXv1xaL87#dV5`9bK3T`p>`(uJh=tXUMaj>EWA=$wrmJcr#Lr^-oX!6Wy zvm4oXh7#c5lt!_GwdV(qT8ZUfMh%`DDrO#k@pd!{UP>m8Tsj+^w&qw)kGQF>=ez0X zvi<~T?{!(KiXnMZEw;C;C@olOy0F^!3%tDpBV^HgP5ST|$t!;Nj9xHPxX%Kb4+|{O zLQt^dxX=0{Ho+6D6dRA-B7imMl z@@$oLbXs%kj0R~Oc$a$hEbL83ad~p8an^;rq+!-AC%VR5gQo}k?1yMeyQX9D(}>!b zPrM4XMKW~;w1-L_MW0QVSs7skS;BlKu6}*zufbIX4pHoScAtkS4KH16I(dPuv#u|p za|e5i!djMl!4>ViQBR$2K!;>%hVT`Sf)iMw?t#FDyK=%_c`0ZWQ3MT<44xAeY-h`5 z{6vC51v>Vg_F-_DSQ%6oHTNx2W3!`UOq%DUdNL%}T4#V4gZ5FPZ^3-8&va-%V9K1r zXdZqp7~xUVP4=aqV0o#X8Tq~S(_+B~{P0^6;ScCQZjVgDp*qBVVFVCi(6Uk-60%ip z`)Az;sq2Rg3Q^@jEDU9hd=ro#B6}I$Io%_k`lJ%Udlm>k3gPmj*imJqT}~L-Ga7;Q zImEV+&%6eFP85!eW)LaSGE3@Y=po6nq0}lR=jzZB2j|YuJ%&g##OOsNdGCa-zoqyc zehB%_BZib#^g~CvMhQCg;pL5H5i3@|x|{CDZ}m}EiseJqqVQ!z&0=KLxzQ@6J`E?x zWcPIV&RH;HK%ch|Oi~;THHN^rk#FKiqb-`1SSMkb?7&X(J%W_~X_+@u7x5ID@ihFx zID4nJYW~mb)Iw9(Nw;DZ5$Jt@&iXmN8(I+teib^~3nr?nzLz&Da}`1;m=Iqi6FQ|L zb^L#XdEhJv!gKGhMxGSe+LzoUg8aB9n~AYF4+4J1z|3y_J1G6vmS4_kfxCG7w6aDI zMWiX>B(ewwa-v#nU#62oH^suw(YYOIl4Z1{O%pQ98S7Z-AW4StloKA|`ChXBp6nG| z0tOC(25u`GP{a*f9RhDRE|%?E+s^hm!u4^vkEB;&A;*4Aw$AH4lnSzeo*bjT2z*4o zOdEcImLo1gY}QJuY5(<%Vtn3h)42W-N~-OTl{EVqgV!&n8Vz*a(F=Hr~qp%j!m8^!I3aLAh*TwNC7c-*^=MbS;&F*tnER6N0MeN3tC>SexUePWBqk=fdv3GaQeyzcwa@n?oc;}E^9 z($JCq-EB6=YtT~cNMIv5yMa#54JuTSKF9B64y8zICHl2+>0oY6nHwF6dZAxOKQR3X8FDL1ZThHbtzAZjG%l8r=V*>MPjl3YKL^Ygk(^? zP@(vxV`{=T4%562J?RiPUF9|o_ZP})ubq_%tFm_byDQ3@_9E;7K7HZ&pMU|&sM{9rlT zw0d^?pK-jWMw1|7t2P_^8IIV8AnC@i&j8oCOK$Mrf+t2>ut+$lI*l$mo{Q(mRSbR# zmFosy)KyzL+k|S`+x+B7Wj|&8`;Xor*I$TRn(jl%w)BKk7U>y5q^_D{76u zY!2V~?iy>;oNTL(JWbiS-pRiEdlP%`uCVbAmkjeIi)@ABr_WqabfJLPrM#Lg7rC-mJEMVA3iL&f<+NvtMe0SlTnUXa}b+*!iXMVX@-h51>)yzr7_}|SW zv0iH`3g$nnfd)g6wd0*84Q6aZxrgAtPYVOqNU{oAe@&|ZMM+vXLLID5sR_u`zM2}Y zaAAxk&Y7=`#Spg=qE|v)dCVtWS~{ zHSu9wPYR(|K$t72Po&GrpZ$*7%f=FT4&yqTG^JOLV5OW*t%#Hv_)Ceo+0#;4h!%G zKkhd;%O-yJw2GZ)LI}A_afh~Ax+uircm}cv!+_yqowx_oJM2T*CT&q*>*VC980PqA z?-}{=4~9hef5SX3!fMj2vu)E>K(7p+iC1*ZNtr<#v^YsLfP>s$2H=^MhQ!x%GSi$Y zv{-2F25U;!z$Hfw9C);$aU~0*!_7tI*;w)xkDDU4$l_6ki1E3Uq)Hp#3w0lOh2FhJ z#(hRVAQdff?m(9B)c(bO^85b74zFd1XFuk~&+w&&vu)}8*Fxvb@LU+B4&8twwPNk9 z;&?cMLGY0fy1~u!M8IP)aod^ljT-!mB!QiC{SdC9|GBj-fA2x{#V?F@O8C|1-yY95 zJ5gtdY|8pOFG)+U7JrCDnEBZrF>G^;I4!nTltII0<=O~onOzX@#g2!FgPsd7dD{@a z+v#0OhAXlbeY@y=D&DNuQ+KD@e(w824+i(}w&un4Zye+7=#IBuNbn1~^S zp4MPHNfLuFVPOTy3rE?qG=WnJ1NHabNBkRu2`Bj6C-U`7 zX@>oXDk}U_chaYBtJ(}}avRM=fvR_m5K$}BQ(hF z#DTM<*G6^A(S1dab*$ycC{jS5g^6BBR!NR)avA8)NHerw2UK$wWO5~IPC|%Ydz|Qp zie;?^*w0VtFI9BBbkaWkGBy*>kH)$t;U>*2)FESik+9I!6=1m56+Gt4{%YMU&NEy4 zhdZcedx)A~Hs)t-Wrno09WUvoQFjCZ)niEN@9~r!nVPBJ5X8YAr2x-3QD#Ni9|e0j z90EAh4wC8r`f_ihYq0~Je(*41j|bqaiYSQF{^uAZ#dwTBE;}qR@@ZYGn~<{&1P*Om z{lNlYM!wiD7(6UH5VW{e?^XfoNQKhv)(FmDikt(eZ);E^sk42<{IjT=`lVLebTD$A z0^!)>yTp%uDUPD0vzVOMf#Yd~)pSR(<+B~Nlf~W`s|`I#>KaKCb#qVSZeEacT*r=I zNs6Mu9J9yUuVp#Uh$EqDsT1Sd8;T^2@>f@{r* z^Yo_nz!b^@V*4go6ER@|TqMl0?g~1MwSIM!H<>+fRwS?3c_r+)o>xm}$)C-3cGB9o zh}KVt-F(E$^ZIr?lle3`<0I7)`BPXcbKa!*50ma(&ivYnqF&hcIsf;uYx>DU-w(?R zmP-F~u)mP#ZLs310r4HEQCn01;~78{m|V6b_7p&YJ#>037D<#>fs3%;ktwEfj>t2` zD@qt`#N%ldALbAG*g73Z6d0?UnO*zsOAVL|6AsL_sL{DKMS-Y3xMmbiJ?1Z$r{}ix zugFlaxG;nsS<%GHcVnIehz~=;;47iA+%_6M!`x|Ris#jr4j9A5I!$zsJIfmf+=Ocb zHZ1@)928Q{iYosP<1GwMm6rn2SAYkGNY+XRrL>R{i}tVdWn~K;?Jn!Y8#OZ5^ws9R z9|R699unT5x&n_J1T)6*0fu~msOIIQs4$GD`H@~?+In8L@o;JSDywEU>>=H1tx23X z#EeoRoqH_Ez}YlqxCCcN95pajDLt=a%dy3vkVTMM$)I7EnQ5C)d_04VfwH(mRoEPX zImS@1+DP;4{SXQ&_K#2idEhN`bqp4S=RAfuDz}0r${OP+Q{w*OKsIqy)Cq;#? zd^SsQ1tuO*sKWGsT(jN;s{mS>E=0&b8bgfQ!LdO90-nCf0voT~8ckkCqxPL))xtmjr@%ESJg*M3LeN>L{ifghr+*6cN$q^QcV0d0~JHCb#DV?1EcIG{~ zsFLQI^Ky4=NlYO`7G{7VFM(ys(PXpAmlL^O>@pSj9B+HQ>ZyAy%-Ddt94WH^<7d&f zX>X4VD<{vB{r0`FHGi)PLG;l(#ESyMEa^l{IJ_-0FmfXzyNyIAuy!NxhgpC?UM7bp zo`rLypcJhK+Q_iR!L%7|BI_c$VcDTQAf>jt+j}OtYRghRRVBR;G1@WlvpDghl1|FJ z*r>LsVR)!(M+~f80n7G`%4353lh8A_?xmie^&f;oX7xA#rTcgDO2CeL%G^~9Kh zc=c(k{0uwy+RAS&==Pb#CCm+rM!lNu#sk?AuEz z4naYK#3bGxycwXjl4uNC`tj)-mXL^;8yjABMkZ>&_Xw1@72p8kO)%Plgmiq;w0iki zQS+7K)_6JV09-VAQ=xDny@BbBoC3?xuopx0Ry3^5=PO~KyAIaguTV!ZpT#}MQ<6jr zFNCLn1r&v*$@c4ql@owo`~d|9NFv*ddd#unD8NpucB}H&D^u>Qi8w*7Y-&nNylvlC z*-SpZFwNh7siy0xkZ0+JTfNY!gwP(r*wN`OhydZsi+1^=!xc)=;Cfx7u>O7fy(*7> zZ($}437+2Wm+~g=T&ZJa{$tO3$MJ@$y`?*W>OZ*H(Z#n=X3w!GhO+jfD?hZyKS6&= zXFGxkAaDn@bv zk{kz)(=tp4Q>#hRNR3HPC@AE%=O_jMv*AB9f_-|(_>Wudo3H#oiI0H1$*)?WD79n! z!(hfPqgZ2-;^8@<(u; z11Lx#xHiV0fG`e1H1letaj7lg`l3nIoN+H}Zq0d7pUYhY_9Ontdxf#goc^Rm^-= z$7)6o0*gkc(EL6HVLRYnj9>yz%-{C?%);xFJ5Pn{Nq(&>U3VyDa-EGXKnK>k=g_qI zTYAMjBs;Pbz{~ffRUm|c*a4OpgGZWG)j0fSr^)+%gI#ZK%NHsY?f-Dq1v%*Z#mPri zF{Fmdr@%2<2|dIkf{bv1CA+sbWE_WQSFbx)mRMl0CGgR)4NZoiJlsdpC4M-q$c-q@ z5(du(rPSh&gx(zAO+{QO5LBrNzMXx(Q`MGWwkM!7P^q7{8nI6@p^5uQJZZlXxjVxE z808jN8C9v)G9Ppn0Moo~wlWWPi_xs;=#Xz1dDWdeSVZpA+3V-z?Qugj&r~v@AD2wo zcMhmu0MK9jk%pWZ8zgj>v-^eoD^#Z<1NDDlPVNwrELgDo1wE9WE>Kai#WK2Orb z^HMy1@CwG4i*irOpQ@DM;u;6eQ+Qt(R?Mr7-6%3NII3~D z{(Tw*U^#<9`TSY{&I^=&?8$Y0GRS*{yce*kS=td1O?Y6_JOWu=Dc`-(9;?2djQ_tb z;hzmQH*2B^Fh5y0Zwem*NVLolYhuh5zseE7w(h*ResJafnl^?21ynKuN5!+|qoIhx zDX{oLLK)*GnQ!ogp5aQn%POB7h?`A<+iu%IX~spf7lS?Vwb241>wYUnxRIiTa^3l3 zgRyCxFivzO)(m%b@lms*7Oqk#W6t1BZO<`ZyB+O8Lyq#kN$cFRdg%BfY4(OcUhU!{ z9%@bkN`;jdp7i#sM!88Al{;D{(nZFs#|h3t&!{G}+FG(_I3Rb;ru5I&8teVZK2z73 zIN|x!Z?IDmF&rt4gHUQ2YwA#ZP z0WASF0Yc>&CYc(E2^khM?=eke_HRt{ z_-{;8>oNw4%R-0rwPQf)tp7}$`?$W_m)Hk-at_&jTGNiVmowEZ7xonbn)>Dty$8T@ zVI@UFUB}QsPbEu5DMeq?$g^ERaR+gR4`o<1li3*mG)MntB9Xs$w22*f${B%Za#%hF zwgT?Gx(OtShQKn95M z&6(*sDKkD=x$qV*+XXGM7kRhhxQI zy*2(0pSrMQSc>vjqNiw`TWb0*w-;XvP z=HVLzvbFuo2TlEV=s>V6?)bD3fnFx)2Is2^dUh=Z*elHM`ke`ouy8Y&SuOaqc% z=0)nEanfsIj75SY9G{ziHCDXLFD`oh;6P0`Asa2^0Av_T2*}F~4o&m8t|%ga=|m6x zl9QE!CWT|p!-ShKk1@C{#j2d$n1GTPR3@0B5R2 zu8!cgacOz7A-v!W*4uD0(8wWpt8m_~2SMz;%1(yhk(2ybjNuugD;T>ML0SW~n!(ak zJqv^nsrr>d_x$=YnE+#4F#s$R%4q3VY;gVMx!hpfRx_wOIgppRzY#$z4u?y1R9|CK zsU_k#)k?^nT$qt80@O@$wRJARZaxSh$B8uPHs5ZMiHSKmJq~%OoeA}|G2PG=bg`ta zR)fnaN>oZd-FGVSTj|FS!-teNpyE`=q5H;bJ9v8voVjXX@(~SFz)rKlkxlp7kGXjV;JDjT90|MG*)StI5ot}|`9nM* zp-uau1G2(mz;S(==5Jko(^1W*7avy8GC_t=t+jie!-?V@l>F&eO|DC@qoRbB zq@U!sgiC=;<}^;HW7zM&;ne^X#bGVst;nWeVO28HLl^oAJ)_koydd zFAo_$sJc$U^3n+I@?hN`d{b#SxjP~0K*%r5bvfArw<*&vxWE%FlFyij4ZtOol?18CXDq13_X)+$ar^|Q#ewFu1IwEd%0*Oo?619 zjT{x4Utmjo9W9umTZs@rMAn?CyyO`W4@S-y?k1cKVL@7t*SLtiuEu!_hNJU>lwBW#B3t(I3JBiYDDp;g z`xJ@4F|zm;fUTWoCD6}q*XZ_eiKL<+3p+2Y|0^Zb;78yVzLO z!p5m$y}HuIMA)Tb&lLiY(_*IIhahFR|44t(`Pj!ox@4G`we5b@e?&!03Z1T{b?kvd zbQQGzN<|mczx+hfH^;KpvMAB|2Pdyfb0&^8h?s>t49+uiUY)IftePXnu#V- znHl*JCQ^yT5iP|UN}7=oEeR$CEdeHpW&M4+(pco+i$y3I%^ zN{qa^UHI|I-tCNQlP^jcjqJLSH4q2S3bQOHox}oaQPYyUww4g2>^)V$eHiQnw(xUA zayXj2U$PBLV-tma~IJ=TLRq$?m%7`5Ghwm0DZN9r%4S)%Rl z!5?5ZvBn_f#7g~@KwbKd08cmI3%Ju48)9PDrpdN(yy!oKT0C60UwDs}J9be;mOv_Q zw8weTFr;T4A(ESex6oca?ZHY(w_xkbTr$lJ+rQ)?tV5aJYNBlU(KiX6^#fYdvT({H znTl14XTf7rz`vuKXjTms|6{?Ab=zFcH zu~}f-{gl>onFT1wTR&h?SayH$?TxvFbfHLviWZl2IK)o`BTLl;rG=n5$T%aRI6GRo zQ1(54x@-OMZlzz*#NiuP9`%-Q{i&ToQ>F z8tOF;u7H?BnuVmr>=vj^&u|eUQbdEZOD73V01@b<6g7le&va|I!DJz7FD1!L69^6^ zjz3A_u2S=VoYzTUG)3~ZXI6wgt`{K zIGOLP`1|+klO-u5&DCzjmCfq3TjcUy7>jgh@)%qY6)U$fyYif?c;p5tx0$^lK8hK~ zD$`LO`(`stx(VLkAPPAmUso(WY9eBk#u6T$A;K72!e!XEhVIWH^G)}y?Jgmuw_cr3 zr?YoDk&{mdcn!zq6o|+o#F&;7z~EO%#U^@BgTwC|B&Q9a6$U9Cu0_UBoz{%={wHnZ z0M_cx9|Au2l6!;fnEAv}QHoe_5P#Lu>ae&W)L!;o?v1=k4EONGrt3~-@SQJDC|4}bfKQ)lc( zp9%&7oT>MS!9`IkS}}I$Br6Y)vqZ6Y94nx53>LHBM^fHtg$@32&*W>AleTgAv2kcd zly(GIIEC=u7PlBxg}jSq6_0frHR^i>?B00$`i1h4En<1<0o%M z%Uh)HNkzsKK3TftccjlwBaEA$KcnLy*Z{p3K7l_Pc8hB zs7n@<(Itb{pCP=NBjcs$vRqq-mOD8(2tX6kx%N@c?5vQLXiY0m4zUQAnnz{-8(FwD zu%#fPchOWzDv#BqtTgIdi*mRD_{#ug++Q>r=9S^bw2%xI*Qmbnb>61#&kF52>11}G zIE<1j)9)7AvG{uj9183vn+}p6{13Nvpi=uMw`<$3{ClZsG zFL~{(uIgk|$AsoGF!E~0RyQ&yexDpONn@6Y9EsS%BK8Tc8U#fBYBSjgCgTRrgFm<< z`2qDG7NQVV%AGCT<3O@SPI>dg0EtFJ57_R(`f>%cVQGCHGxy-(mm=uNhqa8(7X6JQ zRm*qd0z=75WAy8$NgPWhjz@L+tVm}+JR|e%U@K{(l{c^ zRC>1{G60JCv8N@#Yl(>yGg*nRz)W@q$evlOx`9_97<}ltopzfE*UnYis>=DaRj1rz?GUHtP-%GP2a^rrIlK3FtQ+oWpx{LruFn^=>)aZltsriDyx<9bFr* zxc?aBrvUf9>=>)_p7=J~BH{U?$&{~hO;LVppcr>SQZzMXBg`60DjB=lLFxp6(t5Xd zcIt&8M(q0&5NCHK9YqEV6*jH{qy?DHc~^g;v{f)BluaCZ&wv_H!uBQpX@HIQ!a^YH!H^7PLYRHZNOMX&U5P zrfwXM50>Pt4w)GlzZ0g3TTycHvUICARZ3gOyqF#F$J&2N=ImNEi#(NF)b<7G$txrz zGBS%?IfXn@#yLc?36G~W^n-~0oMn&5phU{M2d;bAJf`18Rc9G2`hX*~J1w6<`g^;B z9{cKZECS0~TLSW1Jd|oZq%0GQLp%x;l`?A_q?97LP>Lx^a7%GB@k()UvSd$cOj+2o z-De;r<@U`~wj|}ol&L3%7;~+MsHu`c>WLYd1qz^CWzEEl+|sf^$PcQ^1nW6i|88FxmUtq3iw~m35m>92cl+IMOH(MeCEVelaGdWuq}0Y` z^$Xqc$6mr16B-9upN(~CAof5%0}#X_5|h)ig@1V`H;U9QXq^K7+^?F|mPm9jNN*yK zh|W7HsJaW24=tOkYoK+)Y7r`j(lRQyV7ouS+G%ZT%Sn&4Z=98mstnTSP>)xW)GIu? znPKu4idwsJ%QsxU(v1&(;sw%AUQ9gnpg5_U2lo<;RPhVq>3?&fKWKcus$Z-mDxDK2 z>c#G@pMyYl_CCq9qvUaHexHTKXuMIpL|?ry-M~j;aJj)e?hoSh&PaM?-7ZW>g0{|V zHnD;W@{q*lPef73(!QcLM4*Dhk4a(mS1D$a0L9qal%z&0m*q@);AzeY;35L((o#9G zh1@-0VNiR*cEh$yDF?Z)S60kMuvC`>6 zWMlrVdg6s_`$+!6SWpkPIb?8`Xu0^h%j_3B{XpPXDwKdiIXgY7Omt_X2fx*G>3u1P z1)d@RgdL{Td2#AW3v$9hdX)}AP5rN}eeh>RB@ z#f7p@VpBehG5!t~7fJ52xbBqH(C5%15v70l9Sxi9IKI}WjZ8`1B^cz(U~=t=F?~MU zab0WXTf`en_aZLyGb=&AfkE?Q5pu+Rx3(B-u>==Fftd3CQP3UmvG%^lg)6!DMOD9H}8y^5G(yK4A{khw!qNhl3_Zc9@>GLw8+M?hFK14>=ls&{^| zkaKjc6scK6sKdgr%b3kXJ5T6{>o#B30F&)9qgk5EIk){^OOm0Jw+yEoq> z$dDouG5~8eiL)jc1(PrgXLUzMgaCRqVJUXjo=Hv^juUKradC0huaXHIo#sTAgb#r{ zHZ`7VoG3&>HlPR(gPZiLR@udjfAJ-GBBJAWCHS^kaZ;<(>AVE25KMBf*FkxH1cGQ0 zECzG*KM@k8!>BFOI7pF|3FKL^jjj`rx*icXO558_yf!J)d<-oY+B^KPe zY@9&g@}I2QLrX*dM!A}y9CD0tY?3{;D=6oY8K`8d9JjpR8MZYpTCjfhy#x`LsV~?CM!gbl_k4O!A zhe_{_aHIbw2hWkAgLqL(vwD=y2F7SaRc~Mat{g*9rvW zIEiL`VZyB=zL1wt%EisY-+Q<;;`|yc0}10RJC)8*Iuxh1A~`LLro|4TGqhE( zrs0m~sMn~&(>MQAs@xZVRyMYt-WjLAwP`Bvvh|dI*aQsLw);;Bsp9R*R zzo5vJ(xXlZwz$;)HBXJt6&+dvsg~eklOya!$gYn;wHB)vx zN;ZDSt_;Q;D|?lW7D^NfoFo>y_jmDhPKpa8`sBohRheEMmk z@Z%Uqq5VBKkMX=k0RQccQXI*a?r7aqf}TWnohlLwaSeK_(L>aw)j=`a__G7r7u^g} z$ROQ#@}B;9sfrX;<#=udC0a3K?OZtuO0AWiRD&xYhBdonaBe0J($7~zY=ZAwC=T~-8_fdO_LEw129c(a0mUL?2+|6q#6WEm)HG0t zD9o&}e3I@_DTp!0^p%97F21LA*DFb~f|QfkrM(D|>(8>4&2@ZY93avFM)kJCD3!lJ z9;d1fGtk5ikM~!-iTi;IgIU0V-IXWCM6piO*yFSHV2d1dgM*f?prt`kozM3Rl4O+e z6b7ftCjqIe0T1K6Xe-cGqkc;`#}b-M!`WWhvF|zI0{5nahCMH{TOYbF)0oxzmi*Pd zm<2x=f2f;gy2jtCN@X;5l@q1?m==$payh_oG;T=<#aMu3h!p;WId3Rc6hVxJ!le3z ze?Hla6?Zo|Nw!===ZlVU>{$Ie(XE*iCox0oI88l z8yoU!bPFu=5OdK-miwL{NCZ`RG^kb69i6+i+`JcbII1RvAk-;e)b0UwA*j(J zaWwpj`4cJS_ec#!qM}9v&F|KkeBWn5_9RuJsDuiz)hLj-yks*ZOXG3#7#d+xJT))S`HAN6=iWl>K)P|!_zM4WCv2GN-P8kp}dUsLY!_q7jsaY;B6l+z1C&jQafV!m3NbTXJn zFY-X(=X=sXhv$_$hE2@;1;5ySMqz0|uqK(c+FxdWR4U=QGPsvn$5fD2zRD!Job5 zII!P!xNgamYR^o=(v2an`gJXmxiD?HWulU0nbS4W0L74G1D}Q5@X^N0f{B0aUPo!w zDmByUnguCrpLe`E<*UQ@*cHuxxtY{QKSMYxL21<_7aDNjz&1szW!u>S;lL)Q_gZ9J z$SwhC8F4$B){_m|*GYCzt%bECOUCO&=VxnMpdrr#&J&`4qA-}(a>kCW&(-Q$p$K7% z;t}(#PTnbmSv*IOnIuC^c&0+5sq9wvpo0-|uegda*8h6l%(kn2y6u_%<2%moasz(6 zd8?L$^Iz}Ux5p085R$pOUkZuZ9YX7N7M8VZs%eqM4D9#tqUDs|Ir_oAwYW5l zC;QGuZWvuOjV4j+drb|2f85Z}*ru>u2_{ABj5cz=Mb|b{1VL}1rW zN?4c*7o!~XX;4m7#;7M8D{MC<@TUOw(VR* zH}~zmv%=A@!BdL5)gQ0ny-v<_IB>CQ-t0!^YhKUZ(wRL@{+u| zD?6o6%Scro%XeLuW(W}hmq+b9#ChuZK0U%@XK(bVw2E9U=mr2rVH!yB}KyNWDxeqIt+Tu!G@2#lH6GOQ!iOP-)+Swdp9S?3Q_3 zh6@y!@{LNE_47}b$zi4X_{H%&k;kvKyMbBv zZ-nm-Lvmdr&r~6fv#5CW-PhJiDnjAv&06hqz)HuO`f_Y~)!8xk^kM4E}ZlVZ9EkNeF1f}+dsUN9ZV53c6u7ZVXrn;)P4)h;|EnE`H=qOh2XWF%NX z2>@bx0M2hgVc+n2_{{Hm7CTMhc- zD{%23R|?{xUU<3iUSMvE+k>7-Gr>Vp!S)>f9q)m}*&wYqN5F`{xfEasvU4Hv@}}p8 zu3{Uz^}EJh7S=!E(sxNfF0pgd0Ldp=>tGb@EfkwJLNm4q@>QYCRrJ2|4<|WNU#c<5 zn0m-%Gc}5-K5<5UY?#trq0V5{WU~0|hSx?2Z-Xd_N8VFv9OTLnOU5aeF!3Rq2objo z)AM1+E5;m?7?G!#i6&Zn=#U`9JmE@EHzrlSq_?nGdrN9n=^QiX$KbKzUw}Fqa=Y4* zo0f{S_}Je0K~090IU}MQ96j3QlTO;gp&#Qqeo96c=9+ilXylD|yI^d*=IZe*)6<^F zh)w67ksg!;>?Uk#rOAD9oSw@aShS%FZTdU4>VK4O<(RjWsFOA=1V!(v+PjM~^z#~L z#4qHCdZWtRA)1Ke7O_xazIjQo4-gQB>31|KvhWbH9Bp9jDrmE5uDd6c1>l%w!94_L zM!yCdE6Ih65DcaALzajR&~!G9ws&RNVf*q)aE>dd{_$VG#Kdj;4IRdv!act*?}5CM z50B(Su~ZhqY!FfL?w#2%IVuaz zj1jWkQPDgC7tD6)bdo@p{862RyScIYvno}iiHxvi0Ro;83g!1_tk-GWY?yD(hH{D! ztXZ6lRKF>_>s6_NMA>4Wbn4C3d*w_%P}+VRU(wjZgsU)I0!miPe5Y#ew`!o%WO~A} zI=u+B=|8VV)U}LA7T8|$3u&}?3{qwQr16$$=L(runT^M=U-VHP(9Mlf#tFS5)hx*6qPY=5mDhR0_smmu0EgiDvm^~CFcF?Hy3RXuYDnWja=LjKK+eh1-r!Vr z5%7rX*Qv&tLO|`)UBi#A8Fs_yF3(j0T8SUQhZ(2_$ZR^E9X3W;TTF%#xy{at`tOf@Xv`J>g8A!*jT*=@HCI4O$Q zxmN!gd8N9#egYXS8RFZzI4LfuEkZQcWci&QBY${4PBbh--ladOKbY|@bQueuBt2rqY2&iks5AA*CL z_2n^tx$LUoT=?&hHw=JT4(G;`=}%1l@h7y4%S|6u&MGCoHZrqGdJVW&$LiPenQ41*xk-Zd! zZ@{`?!O+1j;tMH>;_694UC&WE z;tNjSkUNvtps0E>*?qES*m{uz!WGPIFvJ3>XV)aIhs^}fDo_;(B+Nu#OsMl$XJKPo zd)+-w&R(ySY=bqeq}#@?cI+2A3-RyLpu@0lVDYtF_|<5PJ2PX-!Xm?&GI102%w?y&N?tUi38p{* zgnpQhe8;RGw(FyUJ9~F$9h=m^J2s5&whVbo6uxf`KjN%Z3PjbfQ$E0-qV%5=jJ=To z&v&hd#LjM9Ag5v`@Yn$E=mE>x-Dz``(50n_0@V!-$G&N|{AHbO3Vj62xSG0^3Z_`q zn;|3Oogyel*XW#5a}Y6}+fX9Bx1;8<#`cZfTHHu+BLI8j$Aqh{370qirE8FFS3o%T zY%e@b-+sX=P0y>B#YW&aWM4PdV9>|&j|{T*lSeeUY7f5&K^LIW2XIG?&vflvUk5u6 z$ZW3Qvn2FQ{`vm=cLW2TCOljXgd?ls_2(Em=ohzEN>n*KJ?+77#y4e_sSeNU!{Hp! z?-QkrOSB*gN*1R!6BYeMFER3drWYl~coIN@0Hw(UuE35RKTJozt_UY^ zEBagvCPCg#vX#y+*7{EV`^>AEQussI3YuybDepk=KZa57%Ts-L&th+L0=_;;yndt_ zN(!#{)x{~{!`3mw&~vXVPfA1MW}ZU9kAiYgXp1YFWd*W_Kw4Bp>i%(s?=veJGAKbY zas}AJ6nWtjJV6edhtXTxG9$y-$f$JYlHKS9i)b;b#^erGBFWq*-y8Lz*Zw5awoP+4 znHin`7(7_`+Blm@oAP+&oc&n;pgc4R4c=e8U`l*D0C~`x!{Bs&Eiif^b|W>Wrrq0z z1mC#suFq9db~nSYbMHxPmmrmIltJ9G<8#fn9kkSbJNBYFNIZFgXuIs*o%MfY-Tx*# z%?ue!UqR9Cl%{kx^vWeFw&|-1HT#>bphY!QCc0f4B5DIuLeW5n0SoeFcchJ&oKSs0 z`A7vFAxrFG`YFGD<8Yk>Ej21Y93AR(%BZ$*G*a(bSG9R$W{a!=j)3TBakg^qNQYa% z%_t)-4|*;jJUWD)Tl8k$SCN;ISUr^|bVOyGTm5pIE@! z3W_^<<#u`hxnn($4{XgsTQTW<;M6Vm{*t}>DQwxO)Jy2=Bbck!9#Cgp;o6}wRuhLd zM}>cMt&finw=|iWe(ymTkyKSo=#yKCU1xGP;;|_*oWoKiT{SHo(}Ki|J_21jpzMCb z{u;#oHRL8*N-9#f4F2%-KAib5KTfpUs*q<^87A{HoP?rQoFt3pCp_+7$t-K`S)&?T zHyrK6Ax;)e$sT$WuApP*=7rK5#HzXln$_(OlOIFOt6a0K_FgqIU1osIZrANnS5 z{WmS}m!|8+kIAv{fT7az@G!p7)&=)) zPO_)EEf_9eHk@tf{mLS?twaEo)?z$%xV+DjFRMEwg{Pfo{IhP;GDzC`4sMZaULv6P za=z@fUXNHp5KeN3Nzy-C%u2Rul;y7KRo*E_Pm@I0&u-rP!wQxVO6L14_`lwU()eJ; ziKDDc2x?$6E%nk24Uw3AiGoTn*N;V#x?8rUkrpAiA5G@TAN*Ok46R_HKNVha7ws<7 zI{L7M_9eo}BSt5s>j*4$uY^mP1&OeCE3@1riwM|0ud*B_bZr?*6G&q*6 zvtjFYHl7(--=(zj3drR#4fs<@LNY2z1ALE-tYdQ9!kg}B>uoahwjF1~MiC9}vVZ+J z^7-WZVX9g&Hx1{XF3kIwfGfnUPB5e1uOI2*dtJoue;D zU+6`J2Rfna;TrG}h7y)YuW^>S@Z-THQ~zvyrp3}M57))jhX^4@4w~iTvZ6rsM0cQI ztaKWJ^1U6AHp6K!?aISkHD4A*FZjYQ&U_Dbm+6SArde{j)HmzqzRW?h>MXL3`5YV^h$;Hd2*&*sU;o;GL1O`UB1bc&$+GALerN1 zfMw@k5NM25w&3D*(yC|RHV)WjQ0Q?(n^mg2Cp*>4*$1Bh_kG!c^LKOyQ4Y5uz6qHr zLW(9uMxwPyg9*Jnwiv@eT^!)j!6cxa3yPtd(54zdk~vh6uP^>-vmEu8#1M^)fKE-m zzzcF6i`=5zOO`M-!U&)?xUH~$SsbvS+pTr&HHOUrZ z5m*+QVNhV8nV4XbnW0f$9O0lTW#}lCsaO!uQsz-$QEQM`4AjhwFezVtTgOIcy^1IW z(FeS(V<)_=W1Bma3mXD~ik_B0pk;!vrf-6ZjY3-b7X!g@S!7}9(D|^KUeKmOG^pQO1rn#-H3-qXRTSzIL_G`RG0B-QJ`2>9B#hADXm}^=az2Z4FVXCZYCNiSHC6>2Y| zD1tupyViBI(7&F&Xa5GgsYzw!7g*BbYgJ+DYp~h|IReYkq2tgeey(fi4#Zw2O;P{Q zD#DMH4t%w2biw=(7Wl{Hh@$M21e&g<5n`s0`%nN)`OcCJu3a-iKCRJVD%9WMRaXod z%}12j%_F>3cbKkz_DiY&tIr2yqmv!nah}Vq<&(2S-{1qRY<>K(zoCxL$`zJBof~cl z2yDb|ma5$+0$$;EWtCNc_RTTy=DceAU?2)*7SR7U#uA)<^FbF(F!ACACrx%v(~4%> z(WFcbELZS+G)}-be!PF$7!#Bb7MY9|$x}?q9J@jbC#Mfp1ec`>C~O1P%>>L-2|({q zh-Q|A0D~U2)vxCB)WTaNAKj2sxK-+sG5>Mj|1)l6T@A>K zGm%CS9y+NVA;UHwt{gJbVo8)qUmXl>5o#3c@Km7{-SUi8LMlYdPMs*g(ZK;Zw6nIN zlS)<$;+)a%f6V1Flv3FyPy2sV zy#r%jP1r4*G^(DUU04h4 znz8%%6}!FF^d`=>fDL*0TWL8SiB|J2@Ug8z(ekDf-I*(#7n~(ogxFOp36`cu2Zol3 zo7Pr~YjTE(^f#aZmM|Gzmc?+xu0+mo9mz7^m}?2$)W5jPhV~l9i#w_o2JIQlv)Ibz zV}%+2tDp)dLU3#dO-K?WtkUdHUEiOnWJ>=K^TBlLNMh#PxR*L<%61St;@gvAC~Ab$@r0 z({!Nyx)7VKn3VJE$3(WUkDpgjbKQ<}!1%FW@A4AT_k%$j7 z0NrJy8K6WVILPJbZ{x|wDRDrB-p}L7t_fi5US75{@yjdUgY@DceXdC&5L2ps*A#*1 zz~7(wVu1y92N&3H*^vG}w$Yy=20DE>tZ2BeWk?B=q(*7-Q~Mk$7V08#IBm}@1zZOw z_O$n_D#-kB{2nhmgl*Unhb5arlq9UYB zd7EIQQUEP`RR7bH`9iHtKglwWpvKON4rS_kUHdMl^=FS?Gk@K)W*~mBi7;7!hp2W# zA0nn1SU&Jdy0lkc-}Z0)R$a-BaQMYlN4`7(JHb>&x&b#2Ye+lv_SU{g>f1BqopV9) zk}~7Ra};>(dDLptXKRf1X)Y95{hwi*x3Dum?E=YyZ)iOG0nxTM115EWh=In%dHDmB z%=u-oYD8#_NF5B88VHb{Iz|sqxMr#l!6wSCCApUiK(CnJqg zP>TABTL$|c#rFN&3fyP;j3Un6N0zoZ6I$L4^e~r-V@>=7sTG&@arAc+VPp z=ll*$z$lBXk-?2IsFPDMz~{{i_B6wk1CbN}4x9D00~5e8E-oMb`cCBn zVHI!Oz!J7cFjr6A)=wl4uUdYDXFrjZ&cG@*oak z!61zjaGW{FjpqyxTWY5(=w{oSJwwQR?>=7t-9VTuvEoiZTTIuAj@`b3%OrxoI&U~nIPHCtxL_a>KvT#-a%DkgsM@tPlu=+pOYMh;bW3n z9a;IBv;+T)YvOoD^1IKlA2<=D_LYj8zz2aB&ZMzST4-7heq(voTO_nN0}Fxdzfl<~ z2M(mZ(dWMm)@jH1FaT|rHc(1J@$631MYslN+G!-qTQ1$D3pTS-pB_2!J9yb{2rmQM zhW7&{N6#HcvJV+Z-J2!X<=75*kH4%<4^AgzIN ziSQFz$2d)@MSWUIT%pv)rq!QZ{eqSLoxqb6#Sa%gd|Z9OY)wMAXS0m8UPZecceE;7sjR6$~)#)`8Dhg_y+4c5F>qjkI=VN1vE>ZX2 zn}|d*;8?_%)S1K&(8R(LYJ+e7mWlU2>8?kM|KLterUn!wxHusAt`R&GQn8yfZ2^(M z{l+Gmgsfd+Re!+Wgw5a{q_}b`ZIH$$Xrv;3a0X4-FN9dZTOO*H8&Cz~Hk3kje)Guq zJX~Y!4Bw{CN=Y5>uexV2eLWdgl*+aU(QxvvQ`;lPgA=sJmQK^-X6VAMcOz|+2)E1Y0Ot)e@>!<-9yq&C=J9rm4(PKc8X*pq3_ChfJ`K?VjlEk>E--qJ=KVtKtSO7A)RI@sHqzr&h;YrZl*9QyK;4Sef-#S*a}v z=E24p`^8EzukLGikI;+kw-68uqA;l+r+J*;y89DZ$uc|>G2gLQ6Dy;;Y=W3Y4#ZIQ z#&V-<-%S!b-m}R*Eeq+{s^Ov%8)KS>3oMbF(1J?Z8}sF)Sk;;Akd=Oc0nl=o#0^Z;*8~dn8T00BX`k13RhBvUI6b@xbq>16@7*Lgj$VN!k;xi5u6JW<2sxBT z50p{98~tsw(X?9Tr@Ha*^1mu4_puOUnjT^w4vI3MZ3P*2;4SV!oHKps1(6Nw9aMY-?s5@oZccS@AUWuydz$ZNz61gAXZ$G zQ@H?oe!%am3s)`8c;0l*lljtD6UY@F)h+o=VyzqmJ-OE6r!P)lgqBi1w)Wp62F8FU z^6wFARSFlhJ{vV6A`-UU>Lx&28y?$@XsDZE6sPED2jlT;1qYW|l^HQe%~RF)n6&W+h{ACtdlua|pAJ8!qATaSlnO?J{n zQbp$dh#D~m+hu#Qb;*A*V>HB6Gd{O?%;F0J8sC;zCXr-;W7DIZy<&doW^ROq`IJ?& zxb^JzXo9$qr-$hj=E2#{pJL)#<|*MmGP2{TI7u;}xaLNGu^WWZB-BKj#C#QUv5l1j2WS<(l^wcY)fv0yqB#vtutX-@&uc+XixPucIGhM0>*WAB@B&6 za9Fd zVolT2`;zn@h{N*+%r6S~TC}yd`?oeeUWpKIe~n`h__mLVN5KgXN)LG`-5WU!7JOij zT=pb#ytxb;CSaCcFIsg_laGZ!0g^%S)ci&Kc(pSl>+XO}!jc8Lw+3^!GmHkhz+0c2jv$}_R*TfUX~M!ziBGN6I0otEHA zF`o%4Xc!Bjb{h&*pekm;=`iDMbdg15{Z7ID^e3QrW8tcBIjK$h1j+zOBrOyDLquWZ zKMCN+aP=#(i1@l{JVJ1P38h?w5?D><2J*fi)x;|~7x%lEi`s`k2gUDS7)$y~DAfto zDI|u}wGV2T3pQCKtW}O%3?q+!_43jBp(&UvWdL*JB*eZdR5s~E$fU72D_C}^02zVP zMMxLIiMZYy9#<;R|t>Un>)zel@4ja(VIDB+(IT3avQpC*^80Nw2<8+M z0yg_UHpF<7>>X^>8!5dqB=D5V?Q6!>W`^v->rO?ED*y0H$CyDuRFo$`jH&Y#PL$Kb92f zr-Z5%_6qoM#SN+sQ0mDKJp?Jg0i1cUlptAzkCr(2b*(7TE86l;Jpvjx7RTGP*nL(P zUHmrq5BXPgxEwEt5)%xluYnpn|DJsIOr0%_EZh~?6j5L1UMfy%FyB5*wmqVZ@kGn`>Qh2a6cx^ z`;Y#!P1(g}R%(U_!6tp3SzFLNIFaIEHv|*2w_`BDBw0+r;3~+Ez%r#4{lmeUnw+4< zeI3jxX0Z94^?3W0(R61?u(bfq7LCmfaDZHteP#Jl2eAHa`F`rik?WJ=z4KO`2Q<|R zv#LSWybG2|t5=!Ek9LB8i7%em2SS-yPn$EBEQ)J*5p-IXzLvd#3?Yf4f2i^#MoY?k zI!gn$X;{)=bV2j_;ar1S%<}l^i!AxN_(L zi@m4sybJac4iOT<`l*QP1E7lY(TWpm#>L-fd!f8hBgLPaH>EI-D#N1J`Q@rifaM#T zXW={8%RCDzb{^nQYsHm&uHC0^ByS)|UzPAbngqlr+|&x}*=m5u{((^IKwAWF{IDnFK}mU| z*LRVpF}+^S03IMLOyo&F(p!n6BOe7`zA3Mc+`DcyHz`UQBI4hh<9*O)B+*A9Oc{t7 z@Bkm1cmLK_j>hs)Jv3nnyxiP;|Cx5@X`%8(b<=8DG^J!9Tkb=m0~mH*gSo1h&V4v> zP+oWj33FyjfU)58(f5~fzz8fau;@v1%P#t9%x&}7e8*Po1zf=;4f(V>fGZ)Ci1zwt zegC`B_Vv!*fY1@X0;}lHAT96G1OQ zpRNLJ(&t%~l=+n4;SoNM&1JQICqc7=zLV$j4(2l!dXPD7TS}k0qBd2h|51eg+(h$_E{@us3|222&`DKyQ z%b-2-oS%*>5_R51OPAnBNI0>2vbGVT%0U=SEr-pBeJbkv?C1*ElW-|57Bd^=gQept zXaD)lTLs+hX?VaRs1AZ;Fz~-qD)ZkdRlWQxcCh5_Y@nnZ8M6plJIuR48cL$q`rUcs zm)}w8C<#f*?2pf$B`rM00h;Tw;?^$2}JF5ScCWPtuLkBxaSOxOb39bE> z?Lxr&2$r}b?LCObU=|Zg)-};oi7w)Gdbis#^r!Vxp(5BRnCGcz5)sW_e+_gwK~RxG zl9IVFcHv+K=47vt0O7jw@?!I`>T0af7PkNkT3aF0^HGrJre?Yc9p;_uL-&5P-|J`c zYWu}pQ4~V0#~G|gZ)D4#2U)gzEIGJu3%*`ozCdQBbjwVpzyhJ@SyLR!nXkP;DhF*X z!9CG9pKl}+i@Usb&=q7Vts;zlM$6CNKsY1yL;w2*{GXU@in}PKy`L`!49oC_WDMjV zW-H;#TVL1dTHAQpt?z~(c3x8G-)!$Q%N-B&0|11?Jx=KFqnKh{6}FoFjFX4-B}Cj% z8HCZ5qZtd!j1DrAXdU~Hznhsai2C777{02om&rqA(s}Z>bDVr7;5Vq5Cj$f9nN)pIM|6yT^sv+|QSr0xJiZUfs#09zqimZPCI7+Xgx(#(U*L@6 zt>Q3*Zb)jqMQ@6NNYJO`BU;&LxEaXAB|3+~?Rg76-$Z&JmigTy2 z(Qu-Vl=*^Fg!X2F5<8{f7R7jtA|I&*Vf9U_oLw6ba3UO=)(?D}FO^~Q%5d2exiP|X z&e9{_Qz`rP3yFS)hH$dvglP7`M)3)TBBC! z;ZJVSPZW%*FC<$Tk-?#Mp(@zF3&;339Mo6U7>V6*+~4N_+cy;o;|Ei>Y)NEvA@$P#g&6t(_lKmk}FDr z!m8ZZK{yi(T};;a9es8(SkN71_Fh*}XE<3jUO_D^EyYeNEEmlsr4j%;bzG)bUd7ic zyHQ?!VN2~M{#7h2n@#O(_;}Y;x63~$7`t}C3F^h?Ob~+(t8f9{TQ%;W128&MT+egZMkvMOTa>qGN?-!Mca}8(Sx(d&wEVpTHTVd@sJ|wEU-1ZJVW#y z(IYnAGi(#AyMw<_AYsbl`#VilFw^7r+xSV3ei)x5I#4QFBK1TKhCa4TcDkqlITnd7 zsm9}8{VG}WZDHQ?SeVhAdSZ{-RdSFE_!Qa4a0Q~DK_OGf%D^=s{7 zYaPb$Su)RN(Fv8OOLL?>+r#49V?C|&+UxH-7-mu)6j`(_1Q-Uf&NU1d53gX|(<}CX z8wROWG(;qVh_VhIq|J%)5Z)yRiMk~G4{4V6k9#`MgSXF_A~g53C})$7HQdyk$~iSE+&TKXyc6k#15hpsmibkEUW?+;I{aQx z;%E4hL`{wx?RFMrNvYX6>6u>$6eiMMu^~y{${}c%f}ziwq%OVP=dv$R9E)z{@DtAe3!X2|58Aw7I)3XE+yFu)9+v9&cA$apw^}ibNQE0 z6B3r^+9jA?XF$o?P?ilZqf^M}_-l-C=MGDgmb0sja3A#<(G09iik=Deh8>Twh=X_r z$CcxoVn?vQ3a1J|FMb|e-*Ma@iXefp!bKZ;_6?LAwoSn|r$m9{!EOrbc+d#ZV82HT z^n&j@hGXI*z=lu<8o)Iig| z^FHlqp7_kh^6M5;!u{l!Xm!GKwy@ICjoPath1W$>Iw_v;U%YaXA5I7z`>JYMDB3eO zG=VY5rjy{?zLRNWXW#0j3rW@%JIS^Ax#HsueeUirFi@^Y42{#P6JSKD^S_u=yV1t> zne#{FOZ_M^mmKoboW+l;pyJZlbxT*m9&R&pNFy&0W1^M7R-CWbR#u6;Si0};rpgj^ zWz22VB3>ovzPD3iALWUA07*zx7of;PU+rg(3ZtLNZyR{GiIX)CeEy6fkMV%qmn*VE+N%Qs8?VhKG0Wn7uJ7qf?V+0(di*4^MW4 z|72P}%TJp|x|MJ1x7lOjJ;RvndVXDF2B&01yEMo;rWI`0Kfs`vRnMjIj3}Ti>wF%Y z>L1gGgw2J#K}dD0hLb+9T9ot$Ruj4R3jdPKD5$KEVI(B9>IN%5oyfo#&-}>$_wEk; zMdh3Z-!m`Fcg?Yi+Mw=!x4|ss=TXGYZh~+TuANkx*^*a0U%2*JT_Q# zQW5Sz$H+RuAH52NYAUxVb$`bxt|ZzJ3ODi|thV~R^f>s@@uel4=0lI-8$T~|T|lPK zR=Qh;>9Pa_MH(w7bJ^qJf@q1FFhe|s zhDNI&K070x5^dmwrLd*s(tF9ykS7>2ii+B&&g0l;RxNnTt76+%GH2J6EFJ@e4R)R1 zg>>lAfS48auMzV3`nrJ2`QI%(96q&NBw7v z0067K{++R1W@FUwAW->l0xd9#pY*argB7Ux*G zZ=i)Nicgtn9~qVpe;h1f7v8=iMj|3EyRSHey@9>se}Z2eGMX$-hn+QCJ(dwf3O#}y ztf@c%Up0dM_~{|%6Iz`&QgJ4*}>kq&cld?&Rx`$=7llzHts)8X&cC6;CnFVo%A z9e?#af+KmIH%Y`CkbjIiuu_q~oPoS%MIaeH%-&6`d5Vy3N}Fq$(sN+_eVMk1Ng|*q zuy6Iw8B=k@=m6mtg>H(oBMI zF6$J(RZX5VWhM&!(Jy)kMRpO?MTBKeR2H=qCdj;iIML2>F0Y*R71_K-@;dBW)QttO zOW>u9iQcg&S9Ou9RlSP2c9O^WgJ~g812x{PY6<)AVShO8Z-3{j$0BYVJ!o|i%`u-! zWlV43@qq6Z~L;judq_>I)rh)e0!Luv%63g>Xu z;e0m~8i?H!xr?#Vz*G~@a_&S0$U!)FAF4X5V%g$2gb?R4yquGE$%k52VpPaE9&2+y~y|3 z!Hb)hCLbT1?-lEYZKNT__HNpL9&tBG)qufpegGI0eXaH(T32O-eVQLOTfWqCe1D1^e zJPvbqP4hdui!v-MUqVfb-q3e-kwYWHKX_3F7t?ybwf$M94Cg?-sb&3TjJa~QN-1ENN&Y80o2}`%Ey~18g`31&Kf)IMd)cFs;sYk- zyhCHKfFnL$0?_=peg>#4C(s-@;D7kA!*NjevYX>QGVXiYjvIg*MQ#>bo-3?2*)<&D?X=S2nM_pVki zJV(@7PnK&)&&=A;pR4*5PCyfS26nGuh~YeQHFTl~X!$Z_+n55uV~x-~{;dkl7NjKA zU_IR#1a>zAfwU!Zw>KC|ycIZhF#6{QD@LW&_cLpIJxj`J*-VjDJrmeEkl$Jq25J4~$?= zJN4EwCJnh2dC4KA)ty~+R7hGrkk7Yor({nPYG%$EC%RM8TF_ZopQ;c%duuFv$}Y@o zkdI!4Z5()mn6+q0WPQ9lfDwrvJ~Y02u(uwFg|Pc^4B4Xy z8#Zs>)>`%uMN^YMvm<&;w|%C}W&p*5A(N8=<=^FGig7OLxZ9(O5TZkdcU_c++Kl0C zOk{((3}Tp$IX@`wDPAA3fGUg_Uf+;SjS6Zb@;#Dbt*HC+L%V822RKhmUH8pfU#M-J z{PzGw2p&xGr2NkJp2eK@PC^!)*lm z?e4n@w20Mza|j7r2xSN)J;?AgTjySntr}YbP&>2)wh6uM1j~Op zaVPnH_pL|shX=Qa#r|}rYE)dHkaXY+b0Y=ae>b5y@uKxd`(^=TzXYbVI$ueu7mKHaH%AD71dJcyy|&~!z-b3OXD5qBGCh&g+OQ><_E6Dy zCuZXc=8|KWs5TzgkA?X#-bcwttMDzAjWyhQ=DgBM1mmquTK3p>zJQ1|ewL5NK9f!& zAHGKIVL4!EVv%-xEbxxr^&-oKdb2AlR81b~bd}{Gw=EHuC4J2mA+E=yl32MUsE`Bj z{Aca@lBKQagw{{kQb4?v*)j(O;J+(A;PCF-2=RNnkyp0_FJ!MOE54BkHk zv|-{FGx=q(kbPS=pVvTepfI$2h%df=$l=74!!9~ipVEP&IR<9^aH{macW{Y%x0~@2Lewe@8B*-l8mza8k zR^zm8T=}{gheuA_ASci1Rut#JQOLiHyHquT!7A&1!)g}5z=>{nL-h0MROb-N*!&&P z;cUh&uxG~xXD2}3Lo4ujoa*yVn-x?wwPT3p;T{c{5FGVa%17gi~lak%(-JU`96oZHzZeVo+py+&+= z3NeRe`!~SNup5(sT#9`pk=E0M!dCMBbOi!FtC{XkpX-~O0lVZ!6uEdt6;6Sscujw? zkw-1}eIE;h2Tz>!=*phM9sEp(U}yD(0%xp7-()$5)E=d$TRGR^Dgbi@mmL^Xq}2H* zyNJ^Mz=44qPT^h-5?u%6Izw^-=aXRI<<9B9NouNg8=AeOttXT9A5xGCD~UG2DN;g{ z09njo&YbzXFadY5C_O+E`2NywsuXxeQA4rU<0oCBtfDXQOjkllsXtK*vdM`ltzTQp zE=WlmMFSe!>uM7sR@Z$3MUqglFv~K?qoFI8Ey}0uJNMW3veKRwEwtwm>-KQ=?Ll=E z0?u*u&88bU=Lb*`Y!~SeCYGA#ENMG?Mt;A6gl8$xCVp1#|F1E%oeRJ9^eQt73LIw> z#{u=AQFyUNBSs50GAWK&nx|wrEP3K5#&6>) zta7Hr8mDZD<+QN)=$7Kbp93|gb!A% z5@%eTFsYc6oasSDWeH>_X^7oTdh?o-Juo)eywtOR9OR;Eh(^8tiY(eA7up`n-W916 zL9keqt<@;ruOPlC8$-{@%NeCn=Maw-#NT%79y+x6o9J2Q&Rv~JyLxo5Xwm^^4|N2) zG1;cqusdwgbu398it|Ug5?jUnvli7`u~VfD0dsOq06zO7xw~kw*sK9now4UDcO_-C>0z z=EGc2$n-@M)jyQOr#n>n&wbB%VZJb^WHw=Bl99Wnr~AKa;V8lo5IM|7jO5E#^ARV< zO{r3F!%0qS1=)gx`f;|A_i@{ub{8qv`;E;nXzFh^5G$h(bQLD-x!%MU$=$#V53|XI zYA(u`-&SWDFafq4y&JLG>21t8W)ErglhBO>ia_+MGWBuG4XusE zQESowBV3*F+SwOvjgXdo&p`J_@|4}-=!NO;b2S3-9X3U$#cv?r!R2c+K3O%#hZT&F zL)Nw_>USrPXB}h#AtNBD+atFXbNiq(n1ctWFIbFHd-l<-1URH{6&6b}nW>>PGh+N) znk?jyM`C$a({$=-&h#?BYy$Bx?umGJ9Fu$;3E(SJbACdVUwZHRoeoqH?t+e)6hrQW zsZcZ|Ln}2Z;qb1L(bmDW%2vSq^cg~?jM;ge&f(pau-)Jdya0!O2IF!!STeA-jz;n@ ztE?ef?Zy;>cdA-@0upgo8)u;E?yl+X0bW zshH7B*-j`KcFzF?7Y&J$SnGj9@u<4htTA@B;GRezE*$4ywOG_t4DP(BhU!uUf#Qe# z_NnzFmAJ+^2qL_n=%=;jznYVfr3PuBga?|+@Yao+&l>UYeGGl#_o!#ClM|jPWqn!o zrRMj+$?@t{+QzS)K7Kx(f-Hyz!?f&?eZps7u2BpPUDFge=>VR)5CEjE%&iZ&szB8pK-Q%y;5IeCO7hp z#(g%z@XG{!SVRMJQ89gT{LD@CAPpliZFeA~Tx5~-crJS2zuC~iar>s1NE93;YNMC2 z;UYMbbmjX&T0%OHgCBC`)3V>rTlOlgnJv_V^!1{Bh0QRw_cjY-M=(RCfo+Tfr+|Jx zl_nrX$#E4S-zJvGW_^^IbWQIS-peFbaZE5@*%Dmf@G*7e6!czjnmry#w#U20o`k%~ zsc#7JnE9qS)IjY(@id`%Tk`z-4_7&3mvN3K5p5M|ibV6?Kq2-%Bc4{)OR!U}>}&mz zbfprrz>?nh<0QPx!AVc?`obJix{}#a<|l0Xf87e%J%LI-Q}Nk>QLsz=Cc;S-xR?Wo zaZ-n8J2Z~=4`fBEzS#joD$8Y$Wr=lNi11^fK^)|0s&dqks1s_{j+~`x3HGdey+6@9 zD{1+^;pED9saFE11Y?M-UprKux)|#_MF_Z-*^*GM_vwNa`-2iL!`rXACiyKWgf$4F zi(OtEP<0n@q|2?c*^I~R=$Mp8tBDnL&2L_VY10YM-m5p5%hni24>c@EBE}-^Qzn)r>)N zP`$SkJ!3vV%58OmN5p{Mk?*9=c8V0s~ zr?w4#QX+A#yaMVUD!ud!N%gYKDU9M(<9siM7hZX#=B+c;+ z6vz2%d*ccG>WSedVaBPB%TupPR91kFJA1{Vwc2_|ESD(f)5k=_|75>| z{zdK=p&qIrUJ}O)zYVeK3R+Au$HXn=B1sN#^}y)@Yx3|s4_RPSMiy0`%5}n}u8B?^ z;)>mV_!B;g8)wXrRdYB^$d!~&+NXp{j>jl3jxHKanrMfMS3P@hK}R4TuxDmyOR6AW zg9XI207gK$zsIVjYY>U;@_-e&^VVi-I%KRrhujyeL(-;o_j#Ru(Yl2wlXdkZw7&>N zoJw%YELy+KV!19{5hk>$NuUCnm=E;A6c$w49#7vtnp;?@O0KsZYqzMdm+3+xIamFK z!mQOkjQfO6pB;pdlOG*~%wX_AWc{wt_k}Z$lTV7$U061isJ#)*5SxbCp@sYkR^{Tw@aXzE zCtJTlaD;LV)A)*0BY#o`M`3#Q)x}vjb1*Xc*~)me~l+%nNOeUazO(=vMpAvwIJ zxWmVbBMOUtpWw$i^-J*$;lf->ugTQ^l5CS2Z-j}fAo?^r^p_&1FGU^X-Sx}m0rb$Z z5Nnw5#d6gg-xSGc?@w&Q*FVt>xWert9rNcUnI6S9H4|5tSEQG5dnJ?L&<7xqoB@zn z)74g%mRA!i7nH^r=y2!e@@%Roc6jkYnm;NPUVN1+VT}SqnN>0BpnM9`AP4%!9z*3*nE7HydI#>} zS&DmG8r~_#RtdoMsu0%TCM-qF>6#s}U~{6-8fzcPu@)(Uwpx|x(A|S5CFsV1ZMY}Az{NgY-8p}kX z!J(NKk)j3)R^EPJbfUy{T6S(4=1e~SGEts@q%PXr?k)b))D6@iI#a5)$FMbs(rScp zf$|+#%(f)z*A&7cZL1+*9*+78Osal;WM+?X+=+9$`H@b(@PeW2jk+?7q7-AR-ARpjwlcc6NbcRP@0)>%=%lrWD(_bLlMKd zfeGkv1RDb#F@+0wSd?@Wk0JFSfjYnXv!sdAQ_eXO-W)fvoVsb11kG)B#KsRdGjN#tFzhua>dGiEVgm)!u;D>TP!R5BdtCtvI2Gnn7rMi2( z=T|2nI1X_0PKjdggB2K8G|fU{=9e4jQjYJv`H?j%a1Nh77Ab|1pQP!k@IIWY-X?xR zKrWeHK4ge%4q-`fobOB5@89c|;bLq-XSrt#J?a}&@2Eppc0dsMZgk|7tqdX0y;w+- z%LHr0=FBBH@-3{GTfh~q=9l%*T~=Mqkr@(bo!fIn&r(}$ml{^Ty`?&x z*X!`R1ivy-U_ADl$7`Jt{1D?9WjGEOYh1;6;)?y6HLt~2lVy1i7Zah-`(av`II<=Y zNQmsaD*I)51u+7c&c`U@~CT)x<9W0O;x47JWJ{73XSUKVY_&(U5iXLSfK zs41ZgMLKF1tke=X&F0$Q^W7NJ9wyU~uPzN1uOG*m@T)$*rF!4F7d9$S!Ge?Kg=h3F z?WDoGo$9a%KGTx%R!Rba%sG)VmtL;{!PS zVO)ebt?g(%>larAA5~PDk^hpx|GyOXF^To*_y3*ZzT#iaq}>E5Ght41n?Y12CSHl@ zV=C|!Qjx@>Cj-U8)sGeMB?UCJ4&`VvB?V#+x!Vvj>A`k@YceM=84rd5O`|Rr2$&!v z5`GqS6N3_SW(#yhv3g)|%1$<~4z-Ux>#sX$9=Wi{78TpHNIzX(6E~&}>1fgfY z20_f0d~TsFKjbxCE5(mba~(`FaZoSF42@WdNY!ke8|cVNV%^xe-MyDLeVo-j^afGb z)Eo2nL^zeF2dn*#a^9D9jmUR88S&&!Qf%O z3)CM(3%k=MbzvljtgkmF9e4w;QO~+jLX+6*amc?zDb@*1BjKpfOEQ>6ZsHtBgBHV% zaEKq_XKhC`sEll|D8vhulVJMX$ChOpAcL3#1Ilg36hkir)=6D?XDVS#7s>y^_aWPL z^)zLtTjC{&>Se6nM#4;W3C^%cE4M_9q!IzG;k>_|NXB*yMl%!8GS3FTrEce%w`%KK z>CX*JX;b(~nv*tB#qyM@BEcnU!vBP_S;Jyz-Lz~ua$~7m@^@l#)B62`4{5w8QU?_r zPL_Eq^$ZnvWK?tV9j)7zC}WF}gWFH!Trk+r8e^x4wvlb=E4M-hbY3RwO3M>isJ^4j zfB4{YTwVCNta}Yj4E1>_$|?{UM-SoP^`mT&;L3NBiB<(t;t=5=yP_-|qZBfV4X2Lp zkBsPtUPdgCn3hK~_@|0%l zrNzVU9vL_X;XQ!+GlUV%A)Z?;J6~5EdwLT5J;WVIugLRm^Q6!g&H`Lh2wrp;UF&r% zM>QI!YR>qqx2Ud(vefMi$2U{E0>dJfN>Vji@uIzW$E{jsZcpy>QN54oS_mMEbtw{& z{!cG8GT+wc;CGDZ{9rJ$yI&?@Br{X_$^(=-;ltf6dW%Oolx}GWGO?k!f>>mG>K>1R zL<+RHzX>V|F95hO8w~Oy-hb$U8sHO|A$bXTu$w^%r;AGH!HiYcox z3DZl^%TI2_7emI@8wiMO<^)KL2fe3tQ@;& zZ_I3v%Z+$xV|S(`S}FF>LLiatiIx43@C3H+i1?+G_b)E5+{R0$gRPj$DDUot8Mfh! z&Dc=})-Ia)>GB4RQYWsg72tzup^nbRK|l2fH}?)*a(__=U}>JeTwx#unbS6h^hXbl{mgN@HhsLy%PWXx%1nTh zP(V>ao7=%th2>QPwL|&Cez{v8Pxs)sW#*{y){d0csLH6)@u};t6}yTV?F!RQbg7px zU1nY$b3NbB#;FnMe@lYr+wzj#;#M#&5|tpi4Aqo=F4<5t~Fbn@#POSf2ZE1nGsnJ6Wqg!@2kR|80s6l z>do7b2(lUTc(%H@i@Ym%EE#wf?4foC)liW&5pMhg_pO&A>3Y>;!N+BQbuf<|dA5bOfx4)Lf z@~*|m8)!CwjhKo3$pT5e)6mxfs@Ows!V`^es~ewnp+Gmq^4*4%cX9w3QgFa|L!{UbXKDOBuil}qnw*+OQ3eR{LY z(02d3=z?rx^d;@)Ni;21PDa7*vR{96>xo^aHz=69KF@!Xl>8Ec{|U=6Y$|Aw4@rF$ z&bJO+|C1pVCtiN@PRC2JeY%35)7t1}s2tQ!*_RlaIcPFG2Q@-VqOxJokQBijrZ8Gr z#)%|Gxr%GzE~6ANrk2r&NJ02amP3N(tkfQR{h*`rF!i|j&ef(f)#=D{V18fZrg@7{ z79AU=1^da^jnkqG4>HC)Pk6Vw3NOB#*LP3yWVU23|1Iob!K}v;*89*XOq6NvX z`?)XmZLj?QBkL^~;tZB;ZESFtKyY`5puv4`cXxNU;1b;336MZ=cXua1a0ouQdp;oN z?0vs`|3SY!J=LqKRz2;SqTML7u0j22YQT%BG2hM(OiZxXrwUl`OWa~Gc-Bgj>gYHH zVTGpuL3z_L?m_4v@n$b^1%DrIVE#MzpP4R5j3`-tA_<%57tPEy`5vZH&r^n7CZ6@~A97gpn%#Cs79`s9Vdv6*4iJdmZK%_tXGjZ*w#d>=O*mVJV za|vkg)z5dZ->IkA`e%B?1DS;EFZ3sneL;SCC9~b#=_V1DLi(p$7@sjQT}!9My2ed) zrE`3Tnz(dM?$}zmTe_wTlF;M+^z4f39)h)%pw7#DETodb5kXc9Z}w=V#4dx9%RxNw zuqVhl&~^!Xa(GT4GV=KRO~(JBs7<~v(N70#&sk>pfud))pgwfj(Z+bF6J|HLSZRIf zYmDy?R@aKSOdnxe$QHz7thE;SI{1(V-PSaHOe0mCxc8X^#kaQyME|x%J~Ab-TV9}} zO=I0{LTq!mKa3UH0uyLY*1pr7*>7ZhOj84!VVxKd-X-BF$wrtq0w3L zUImGrR?#~pJB&nGO*^TY^_O-Tuj_jm1BhIu)9u1Lo<4Zl75I?qq3OxfXZIo?VKbBn z#fncGuX7pBc06jG%geOoZoFzBlFz0-MAXTI&=oxAih>_ECtS&hqyfA@y5tPswwZ}( z&hQ`d)h=7(e-$E$N29+-XkEr6AVT;>+2AeCjqG9J22qExD|YQ?Xya zbc#>@H3&m*@OAd^q624(h|qah*hmfB(Zj?SI8?XrTm0plj15d{=|P^h&Xf?m@?3N~ zL5Y$RnZv;Wfys%OK>jA;T>e7 zYj{e1}`a$UVG`2n)Tj08GaK2ufi;6i?J2$ ztIVgm@bJ8i9`NGT5m~2M@gE7KQi@m0yd7U!FMHjsC?TWKi`;JeAbqalrk%uEP`BPntJ=e2;1~#2fBC{MSR5G%;3yE8Nw2=JAaM+qrB&C1- zZ7+~WWA{P#U<>;iY4k(u53+%u8wnZ(urMEk^|(AoF8599^Bt- zzGO8yXHN~YEC`sJb0(z<)42^{u{TaUf$_rv2a^8NhCqd$dK3D>Q=P|3K(&As;?{y` zA1izt3JoV=`*ppyi^vz!f_9A;dKqlEKNz)e#~^gtlhAnHvhK(=)T;=o9%CbImAL@Q z8WCZTUP*W&Kgq}_qfg!owtQx-@;2J8)cMi!>OAZwRZJ; z?fQc23Bg~RLzj-W+2&nSY}7v)IcJ_&vd+bn&Y(W;WB|-HLaUIp;=f|CkQ^inBH;Dv zjORNXs^)bhCF%R<6)+;lUssx4kY0z?7)Dp+oyn<2Olfs!dm_HJr$r&HD*wBdwG~!f zsBE6yXF1YTRAVp2dvisV-zQhASS!+*Y}I_RoG%d**^Q`V8Mm`4t1*|M;vwJdHDHgFA=0&R zZ#16rl7a>jRuegO5q-)AKRXrgS0_}3BNG@ShGUzNkf6-p9Z(8WZTLVY4|AmFO3NQ53nH#<|_`!7LlQ zc*neIV+ymZ>rlSdqbE+%5A+?8b6syhx}xe}PE<)>IsU?jz)3emj~cDPwQWq&Xxpkh zUqgNnWO#0zy@Y$lx<D@yO#FOmoZx+2cUHaN%CV<)X7RI_br34R@%p{ zRiVU@ai|leg2?4l`dU#nly`07K0(V$#j4qMj4Xjsv~+u(r?`CE&yHHT4MiNVDR-Sg z5wbSfiM^r6(yNhsG!MH(dDNW`8(U}$W*i2vYg3wuhGL)>M4D=To8O-N_Ih+9kYa2Z z`Gsg5!`Oex`GUWsiVD2{x1!%VEw7m{pV%$sc0GWQe82=?9N3!P zZvup7|IIj{hYD~VM;^}|9DWGpu2}va%UiBKMn<^D5P2lX$`whZWs$dtUs zHtab@F~N*^PxEm!Lr1~>DbfO6$*pcavCMyaJho288h5_-vY$gFHE1>CMu$d-(uf_M z-Zo&qC}WJDSFN4guvsVtj>7{{I-j|)h*nKRz1}T)F>jR~%-5u_Uq3J|?oaN38vrYr z3k*R+{pPmllNCN4hww@c7?lC1d`3xn0|X|)Sl1!|u3M`CSUwB<(T&6rRRD<)WwC(O zNy@1Njlp|N5=tRHKOb#e2{VX`|HtmC{Vxme-)Y8C;OS7ApQ_iQFds>-qwj-gQ!JOl zWT>}ww3 zFFHbs&#ZZN4`{1x&cyB|cPKbL+FiNe9e=rqm>tEMHSUXn{xe401m1sp<4K z`fyYE*m%p}n-rdeKw2LIwBX~D-dixprW%yg_lWcWE;0wv=CZ~E}dY8W~14bXQtDp(h9UMtEawlhn+4Ls*Bh$4(3rt4 z=)7For1?z2Tjj%=KKAisMuY`bYEL$)rXfGZjGt8&pB3a;b9ekaqz-G2z@tl0sWk#C zC@X$d$;>WhJpG=FU%<1O!f*&-?VxZ!MEF@Dl={!0-1=7f0Q2_mPsxgtiuJ zpv#l+vtbPFi%F=Tdgi+av{;H4ZbrizDTJfR#trP{*(U5~$Ij50e)?9F-8d45X}ws= zT1tHo7)BA6_6d1OVr~two9YKmZ2DCGuvGAb^72Ne)o&u+Ho_`@#rD~!8|m|`1Nh#4 z0>_Y`5c4-m1cS8UH-D?GLVA$S0L+o?iH??Uz~aaGE@dQyZvJ|H^KdA9zf$3{72=|~ z2S*j!Gf`%@6TI%(z2j#$p05IrF`CS8FF7ZVRlir&rq=YU(J9cimQxq`^Ji5tlQ6F` zueGXA(8&hjwol;#iSqEG&GdedPVs)7;Ev1*wd>ORN>D0s(2PPUdG-=K6!8m2H61V5 zL|!Jo9>t;n6!$x^I{rB>P6{NHh%iB`wX8wgraXqxR&lJ>u+z|cspfxK55zCyb4+K< zt6=Luus|c6CjMTS?PPtSPrNT6*#6VmE)JNzKgbQ4sui;A8zyTd$6NOYiDupOo76_) zhcxLR3qjbA+WfpJ{ zU-QTo45{798NqJz7pd6ZRgZoa_L13V{1nba7c93vr5XsI}W<$$C*oE zN>rMe8q0RA<*?}mHjBhL?W)1ZQ;AhZW4sA+XaJDiQV3-G2U8J%9qNBI(V5;t(b<^*FgoyGgKMX@fG%|fey z{I(mEpo4Fgi)y0igk-eK+QD~c7IYuXd8=RoyET^ojeGOOyo21=O46Lrehm3XP{ERr zBX@ncviO`Mh{{6EL2QSjzIcMQ{-YMQDE~BY!A3?HUq(i>7j+8PkjOVSileTA#I;1z z2>`by_LT?KIDB4d!4E5c`iQg;lvsr|A4z!aletOiNq-6fvQH}9PSj~+ijYk}!ojvN z7mh_vS+c6Qsa{Y0_PHvZEvc;4`OOXdPcwtG1_<){DxNfQPjqG$O@e53 zlIzVcDT)x&l;gjbD~F;zJ{P#b%7Kwxed&r0a)vg(LLG6UfH6&5U#cy?63#hnoVkzl zlJGO=IDyse2?=Izcbeysrdo5JFw#sZ`}EXYtqn-#Q`UYq|Bl&UDVH?5R!u}^BTk?D zFA~1v@}_;|o_*pT}K zX+#d$cmwqmgm2+gcfSpZ8QX3Nj)@0RQ8FPfemOr<7PN-CKIv`b1FFiW51MMvS;p>A zUh1x;s@|n-m)BK?PoU-VfI+xazsJF5*9D~?ecvuLu&)zr89uoRT$+j`#{bLr-i#`M zH=|1NKyaP1w6sxFn1lVdYm|a7&{k8+qi_0-4kNE3nj80na;*oNJv(R87O_i5B-Vx8m2wL1=#sNw|VU&HLgT21E0a}_eBxo-Xpc*yP^88 zZ{)L$1qS(OO%XcKJE5k=90OYdc|J5@SzUd9y^Go2%mv0`fSp(*!8nm3nxj{Co|lRY z&tM1^-Me8m+Z~evW-#mX;IwFN*0pj9$;9wiM{uKr#6^vjbCJqrIRR>EUo{?1#ZE;= z4FUgnc{cu`mZ@8oE0XCS2hj)Lj@`6X&L=f)KTWDsk0>hEC)BMyX{hlrhAf>d+10Qf zT*d&I#{Ei)sTmhRc*8B#^Sxz{kPDWoHSb>#rTr@Qam3d(`*ZL1DFjl%t)d(uTL2=P zh03!j@N>gQdggE)*;(6Jdf*9W24#s(;QZ$shF3VwGE2)zhBZj=$ZA1^e zq-I~uPv=)5Lb;|$HRVS?YTSPtFn=JY^;d?dX-aQYWjf=V&LOVdV_4=>ItF^Q`ghZu z2GoA0mNJ#%%(sEe*l}P#^ZRVL=A-h=?l)OcQ8XQdTX6DmnI*}@B=Y*JV_PAeW=Bqk z4mLJ@DbYMs*TUAXTjF@L2r8vshcB3 z5~x44qTb)$s-L>Z*-E3{YfNk7cjr^#ba3@c&vp%VN8N&!9QH*El%4L)RrA%TOyox< z>#L`?4*1;aNPFp5fZYd)k8h4GzDNll=igBpbOXf*d0%|gxhc5(j7B+iV{8cMb3#+%Nl#$pR1rG?^*`JSz#AC;{Ct<2ijYeC$?z9mG*6)Ij5dN-%pcK+3!q`6gV{zm+wD~bYK zv);SYGgx@Lj7hfITD=0=w@yADUi@oQ#${OfXdN!Rm3d$5%7a+l~^q&il5If zrk=svj1&O>*8bkT6?+x<=b@2P-+2C#7FeKUH-URH`4&>BN+m{?wl+G#Oz4Wj)9rQs(45X*TSB?wGNeq#!72N*W6d}JEy4|B#I-3r7!FTnDT zxt%|NbY1h~XyG&V7W3_O`V06?;3$y@_ek@N3(zv-U7>0R;)xCLw>#W9JG=5}${(EP zy&(3v^wJWtYzWvwP9zL}B&@z^6UTNsOF;TN_yZH@8dskfy)=-CkGkFXq|n^*6*N%~4_i zV7-O8C8_=@5u8>Virt@_m6-;^O7{LB@y*Z2@or`|&ce6EnTl;9Em)7Qq-uprmp#X( z!dxR5mn%TOFMj<0w|I}3KLWw1u-}RdA@}<`0`mF@xy8FqK2}4vRC4pQgKyV0v24eW zmv;|sU3SqAd-AqgM5ARF-brN_<-62);tXs=AqPMjBc}LDvIy5jliYu{oQ#N0n0(R0 z^Ub4woRn)cKdPj**EsEDCSX00#1q&@ZLfFf-}?b{T~1j$pOk6GC(6l*<-F3+7C8*I z|1C$iZ=|P&`P-p=p4_)Aq$p|WuZO2Xr%tO}(SLUy75Y^Vza99f>^_0lowt$d1x)q5 zw7u^92n&QA$`-UsrDr>MAEU+xfmnRvDOT@Xr?~-|!?VvQmOTNw+oodiuNxmdld2^N{I~It;Ry=3|G2B~rMl3~ zRdvS!(xQ>h>gezAEzP%Jx?Y);NAM;S1Ot4IgRh7OtSA0^n za;^D&2$VYbT(TXM<}si_z4$c9-B(mMjc4Zzh|MzC$T(W;4^0RBO*&nc!H!yW(%-M@ zck1yF|Jy=(tc@@Au~IdBp4ux#3pl+JnokG#yV7U=eDk8%Ikf=af$ry-<~7CW&L>V- z_4&9Taz|AnCHb9P_rBThI+)OMXEDMbRhYP%0;xda&-s|0fw4q2$mWR~ zrtS7P3~OcFejsYlmJ&H=N}0JkPLy1Y&Q6DC8*?zr6&8*AqA1KVQmV~@h*Dw#@rXQ@ zjOOWRucezewOJQ$oFgEJ?0E; zCs9OQ>rLg@p?W0e>lN7`hCwM$Cn|U0ROu0qrnmxQ0d`e0X^| zg^IZ%7XpX`DaeBJn8N-q5fA}*VbhWIgb8_jn*|o9`t=9)G@jlz4_;kvi5E1NkGehS zJF<8nq(DdLYXn3v+IiFA_E7=0>uOe4&*=J35xOOxzvfsM+356(vbeQ-uPbph;Jt5JcSa~33eW~{cBOrv?S?z>xM8fvEkziUKBVH z(Kb5I4D$`uh$W=CjztMUX@C;RxIYU!N|l2|tnjm^8J=ZsrV*N|TRdO6X>qmjsi@z= zVBHYafZg-Yi@HItUJnWX-(70V5>T1Yy{`90IT!-+KP zgz(>sGNW%LCDbpQkNo{BUZ^SLiAQ#VqNo5sh2*Jef((1TYzle(-OUYF+jH3IY4XRm zIy6Y}ekFwHm~VMD;iY2iW~7*k@!5(fbgC22htogce989|SU>K0OpnqR=2F$dk^u@t z@b_0bfgzB4bAEU$dWFZ_{uk#jJ$8sbFzDvZ8rI1Hc=^FNKHS+#r%#i%i@IqY0Zw54 zCL<1dBo3FKD)^E=_gLQ>YFKkuoyIxQPa)W>2{bUpqO?9=F3-A^SJ)41q7?S26#V;| zcl#6AlyAq@NegOd8&v=)Kv7{T(nWtJ6EAa#QY1m^$@>}LZtg5j2H`|Y8^D5Juw|j- zAg*OPC52Z!t2JWM1{cVXulVr`4cr_fF$LbeO*W=DwS9Doo7}KO?i5U=W>bu@twTY= zqkPyk(L>G%RW>Ilk4*fDP^l)@X|}q9E1zZrW522Q+;R%}iHT6+R}mKKx9c`x|3%JmAOf;~P)CR+%?g6vK$q0nUE zfuzMT^Pu`a)aNAY`Q-kw+Q1eXv!b%Euw0Z(`=k^?_-)ehQ||H6w!Cf;ZN1>Or@uHE zSk+M@dV)o5s${!eSwf3~K144;kEUeVr+bSDT&H1k4S!Dd4rs(05!zLpAW}cb(Bm+$ zVIQ{sqwS&RT*0N!sQjAs%N#f8KTfXRV9gJcR(ZnA21DnY#d!`PAY@(MvC43IFe4LI zs=TzwM?U~8MdgJv|AmbATI19|M0PJ`+8clxoaZ^MA??Gb_bpy-Yl*PP<*OHhg5tt) z;&W~YKn;$M$Dt>dGXKS9SEH6aOxTN>k7An%X(UhMnaFoDU(FUzECxf{aj3!Z9Ot^! z*~(9}cv^$ZsxOd`A;*YY4r6dSb&x1ztim|T`is_|!xhAnZ4zZa?fel~=(n{kF!fHx zet#Yr6L8Djzm9O>Z#0W33WY*yd10h&t2`6#;q47@?`2j-5R4;ctd{r1HWtMg8`cgr z=8zPU2`^(SbG5n#NK;6CSw}FguqdpT8gAhit;#Z5j<}iNT(a6(cO43$r2liXy5H98 zHh9qmdJyuDYKlu!E3yv3>0418ZA z_MH$E{cf2CJH3qTfXSR+GG^}flbV`|#2QeFTY|fM9K&{^gO5z;M#Q`?IPdA8wr600 z83-QGDuh>*8&QOtF4^Hlw1ZgUZv4qpIAS7&g(2G@Zl0K30}v59y~Mpn*Spw<>}dMc zEZ;=PEYRe8;r6)WG4X^vf|_t^qV6FQ-Bk4AqlWfk-ms#bI;beSHX`K#pJePy9d0-e z)r>4RGw8R}v!)LrU^q9m-S!0DyrD?_4xt|xdUxGT`^s(dWyEI|NimT0WkEGZAcLU)@Fvw75*p8_ZX?eRQq9i^E&E7w=lpX!nmbvH z(nm_S5jr}~*Nctz^7D0!0H>oL+2;ntpf!PMRI0KuR(AA0lb2KS?2;nEA?2cdG3Pgxcmjo zdQ~>)9gj3RY70s7x~qJuE578J=3v8-GlEv(jAxT+!JZbxk*n>if$Dq9S&m>(So9`N zG`z{O@Z3FV5s(E4_;vHuI6E$AyhIu>rX1pfCIJaZT@x7v+uNp+S*V}N8~gW&@9cFN zgZ!%I{Z3sx3;d0$xbvnvZ%Eq^0V%{lxi+axDM-<0Qg?*mS}$r~`S={I?!aA6NY8i)|@qgOY>P9dx4 zZr`|ZB!|4R2A1K8_(7<}CK*|hmI7Ntk{{QWz(qk$ViQr*w|A!OPXdi;&4{L%{btA) z7B|dvYrDX~QluoQzSCz-JYU1~hEwrL2^)8Ml(7ZQo;ZhmotP-zlJaj_R=; z&uF#WFdG@>Mo{Kkn8pOo$SVN!Q=%X*!Nr*oZDq6dUaAy9z!n5WcJIqV>PT4^`eo>C zr?m~jWFz7uoKnoEd9riq^=HV93*CfwJYe*z+7Ut(yM4xL#}-!Yln&e{JyC%TpcfIa zVkI+Um1(qi;cq{OT+v0|b66gsM{|yJI}81)+JJO;BfKv)u-l>8TyO?WooA}b<~i`@nYjn=vBp}Rvh zsobvGd|a60!GF1MiBclFNfogKnb3&24M`0aUzs{Ohx?ZeVsA#c$_ginaw?r<+jL7g$;<^)3I9cpK!j9}`@%2&?W>@*&1k z8Co+XN^qSJm7XBijijjF8mJc$&XvTDiC5`L8{1d;m^_|Npfm&o{NVNs@a|;5TWOv+ zUfsA8Yjw)LbM$k>4VTZ8iKFGIq`)sqQQF?Q&+^_A$ZRSP&ITW?Y>*pWGqkJXr0jy* z;|WJmT9Mp&@BEGb=PlUyb_L46aN!={lf;R`qI91aY$M&B-~R2Yrb1auh)(iu3*9f(^n2*M(4 zaoF#JzS6I!JM{D!tJg~t4Vd6pgoY-c1MvSMlPJY$otZ=qTJpDV@i;p)#Yx-q+#8RF zO-fm!PDuC@-osJ!V8~vY0Sy<8qs^jK)>NhzwarFtd^a@`1HG!%{Snkeo9JxZZ0CiZ zjRoIaewH9l(v#jMtsPiWQ-pGXG0vopYb`R_g*OabB!>1d2&@K%nL2XM3e+Ed>I2xX zkyKFab%K&CWnqTEDK9WtFxu7`4Fcs1q-zPlMdm$Ib4tST^34!TlLMNaB-X5T+suEpAIKr;b9?_d+f{{C2`XSH`I@4y_+`6PI(mFP_RJ&{lkv+EjK)iXN@5OXnS#^K>4R9cOh@%R$R~ zKg23dVXmRT(Ue%y-~PVi@AHAL5;}K_5zDYicJ>iF||Fob)Y1JE>;X z|1szc`1cNLMxB3kH0l;a7I^bA6Om|w;t{x`cg+{bDzADE)nl+ES1m}2c=@0bbep;P zOM{{NBwMo?h#E5YMjr#~NSNbVHtN1Fm@G;b^iZjCu;3ya1_jdo{^lf@KD3&HlEWkW zg^SeqZ86;*+;nzHD?8qqw<7Jv+K29{@>Fx2HW>VR9bF57=Eb(e*@5m-d~qa)Ci)9+ zgYzIgM;Qg5ZCNu{O=ms~?E2XM^4Io2zfV6pzx18D2ypJ}#pb+4q_Ou;5}R&TS40;P z9nCGuN9adAP@o{WULZ*)^urOPo6@Hl`*11Fv$BNbf=b|NaEG^io;=DTs4q_z9exUy3E2 z&?D=UJg@buzF7m@qcmbiJ%tk~0C$nIYf@`nV=!%oC7o8b8(l#}pkWd%sP)GJsz7*< z&h(mE&q zC{U1r(F3`PiV`TD} zTn={|SI*&+*goa5R62=Cp-p!AGex(zA<%Yf^!_8&C9wwcA()|V%5WS+6zV6T5wRZz ztSP}<))-%m)#U>Yiq0+4S_RXXEyV9#&e&V=%+pv*R|5QG!hdgCn*YeOlY)Ep3UItG zKhIk+>t1ZXYSF^bY~spgTuP%dFmVPIAsbEEfpea0GUF1FBI5EPOC8~S3pOCG;&PsL zhL*5N)6!2wFpv zvG>vwMR|ERBBj`?5WNm^i)XMe)_z9o*-i1sab~UiZRV2dS!Su3IWKd08T5V*cEW$- zigL6KN=lUFg*x-N)~)3XTi>l&HE-W}+`?vS3C_2qioXDL8#hrlG-yd0?K$`a-Fp$0IlpMZFi2_FL1r?VPyDPF zH^(jz9cAVgvO%pM32jdBurCMsU<8WBA}90%7LaiOIzYw01q&1928zs;E|fb{qV3WK zFQ~6Bf}Og3`fou5z5JV^E$3qc+{kstz2#f1vc?s6d*ApUV=uk`y5$Lt;4l>%F}Qr5 z#$sy_$oB)cPXL1bgD|~YfdEsUYUkvX#G*U;7}~M7rdKoR5x}Na~4FpfNzzGF#7Of!qRmUYC2|RWxf0Y5+%JOkIJ!vC0ca&BdhKP3zuGT< z%`c8A(!C`zb{cpkQyCilaioF%t^J9|?=X)%fTHzMDy|xSy9?8r2~3&!#PWr!_T=UL|8>qEl!N#jVs(K46XhpF@pAt>1jwV)!o=J>r2tw8M@)mb+Y;&m@dfp3<`${Cbnahn@Gvp=ShQ2N1C`O*^ZBl2*sH0W2 z#K!c9T0<8LYQQPqx4G6Nw%>U${nD+U;a5yL=H)|HQLf1^H3xdNjZ#fe1{7fja78t& zf7Ig=&brvjzStZN?I2H@;&Y1WeVv1*6M@w+OmIq>D`O&akQm5#y%`x|-`UD<#NPl$ zZ9G1mVcL8XtbHOA_3bfgHB#w;1gXbcEY}k&uHFFeQ6N<4U<`J+O3=cYFiP>a?q&i*!*VsiBkeXp_Odlg>Y~09Nj3r0%>}~E3r(NgZ zz`O6~=Fm1VA9j+kE5D)ikwmQ0+ru=l`rFL!RAIUm>W8PyO@-Je*>m9LU0$`wQaw*E z;$hjRl1jF_EY84Go>NF>AsIl*uLa5v0|tKx0%M_KBS@1Xy5bp@fvQ11x1+*$&>W;i z#dnzbw#HVuu|Mx2nGXzy(`nx(bH?qKnNfpJy&?f#j#}zdofP>%P@ zzuC!^D9XP3Jt`?7L5bMa1~3iVe@*4EJ0$m)DzNl_^(ml_EiDUX_=#?lx_ zGZBgnO$wrvqS@pAAlB#6J0c4tHI~9x?u|F+W*K0Pq3-I=t_xtJv1Iztao0^KNl^C8 zfsO!J70&vgiY1}i79g*PE(X4!OO;*dz7*I>^cZ%0d1?1o1qO_0)A6~kmFUl^1Ru~#4Xa)zd~ zbC^(|rH#6e++&x+R&Q}9)P791lk72CJ9vC{;G=Ggs@Rq8sBEld^eL_##nb!5b}eeF z-#d#ha)5@4Gj6IU0&h|5T9u${e`OCLLLE1(*7CKJsj0`xqxve=fl9lj6MFhcX5~?$ zP8mV``=9Y8Wj~}DkEXxSb!hCzBJv`RXJ0|CqX}x{#F2TPCI(k{L~5?;+R38(0r504jVEP?K5CC zxPs?`4(Dk#MCeq5OWthF+q0PC8}Kj{9CjMPM&j_@T8wt|#=@-q&1F^9z46?5sf8S9 zis!0+3*zSV&Yi9gi^aKBPa7B4VJ<^=!nI+1Wr}_VqCrAlOLc>TI}XRGTTl`o%=yTd|=zO%Fvnr>^w0&|63MQa-5ChK^I;z zL}sqRfQhtFrVz5Q6VM4*)o)w>K`R3c9**U>OrkJIBj<5V%gT*-+7D?L0h;Z7*M`a9 z))3A;qF0kk3531RVpA%@Os}AZ&O+*ZXjk#rZ>Z~p-jlD>U$uK^>rf3X!p5N@!uPEU zg47bl7;Rx}2c>4-dmek25s-4)p7DPeD*m~Wf8g_@w{5Gi46xhUrNuCr#>|X zZN!X(X(XBBSGEP@!=a%ll_AR{Mn@?rbMa(Yf?;8v;H*G2$AeVMQ2n1Gt(218L>hbVC=WKWChF|**aHGFoO!4qdB$+Z9*c+JB5SY<`5pC)B=PDYii zf~Grjm}Q8Fc0rRGK1;Bz2_&gJ_mf`F(01ol*!FSAa@ra19;!DM4i5C~=l)JI)rQ%p z1~g&%fFT(3iqQBY7R!>4QH5CpdCwlAu&i9Y zY@>#*Sj~xz^HrGQVWwJ98W6#XBZ0*s2A}9mgH21jeXp&{t|IW4p@1aS$JjRV=i6KDpG^Sa}k&V(dpo4tA0;dQIFTU5PPrL(KD9Qb^CZ_(`8!>4h2 z$B6gS9S2$*GWS++UpzrEr}|0O?Lma0iXBtty$=D(KPzl}N2IgN7JBZ_BhF^4`hYu= z1;jIipt%Mtm(`Lb_fD^C^_vXTe^l8%W}LT&ROzwm*;DTyC7{u|LlBs#|EMKgjcTNS zD~@PvY`la$;YY^j($@uxkYfqiE;qH0im6kSvo0~Li|r;2;N1(ts@0GCaa6$yo+45c zneVlrXyT;sBXMk?M?yYc@^12hpWy=1le$yPZb5M^?v_i(pNyUFXAx_kjLqUuty*J6 z_$(Ll8z;Hx_o{$y+Zuo83Ln1?@Ynu;$7;@K9kj_)`LDYk!;HZ{K}syxo~+wV8?bVC z=P+`!3bDz^|4~b?|7E#+-!4hq&-1|wEr*{X{W>hM(3=;5K&OXY_|^8zFn60TztYLj zowvpM09Z;2>2NISB?+nc_1hWa@=H@;6r_r-U&B(mf`6-v=8yE7DsHBcn(iCT*!omv z@)b5dS1-@f-N;`t>8$z3mqc=cBL09z4I5yvv)D}A^_JgqK%$BgY44u3>SNnu2~Y{M z;)T%*n9HJA)ceVidk536+|m$^i7SS>=<#HKL3D=K1@ixrE24@g@7+I+mO!;q)GyTo zH)=gJ-OR)C2C4nPMhK1$x~|Q{22cdoPRr~6Bz0#k-+?VQ09E%;mvCqhe4K&?ooTQI zX024{1B>Oi=lpQn5ogxo1*&pS&j!OW#>=DCW+Y|hh2dF3oZ7#wolpM0ip*#TmVDmg zDW12paEaSZM;>F3nN8`Ccv7fteOaJOast^Au_ntv+S3d=*~bnZU^5P=#U#BKXGeh| zESO-o_mPl{Aqj)BPGqD2A%{&R7b>b@DZJ&~l&qu%|I=rHdu_U*I28nM2~Jd|%9LY+ zpD-PZ*Vq!}2nRqp;VUhUyez-K$$4rt zwj16yM%yV{A7Y}8s>UTZ#09=jf@X)1@bhH7Ucg4tJ;l_9Z+XV1Bd_O2Q(BksJwb@B zexK-b_XX@>GF!|h^yeYXkQnoB!$71L%wpE#53xqR`2MP}wrlb3>P;?(pI{Yx{ZNmA zj1CY3w|**XWO%XAkeD-yrZPBh&CY}vydv$wa5Ue@6#VRz+kV97@1X`gYWyjPxfyn# zN%+b7a%@@kXC6P$q9~sr-*w+&3wTbI2z$-gWd)|M0^8o~BWT$YWj0~&Y>%_mY(}A> z{LJY~Tk%zHx_%prG+{dWzf#U?7y`TH?$>S*7JVVFjz$ecS`chlceb`T8uH6`@LnRT z%G4ZlAcK&aPcta&wshjbAuucUDJc42nsqf>4iFFN-NnNSHJu-UwN!TMHcXPFE!Ko_ zasu*%;~W*3Q$TlKHgnt+B|O@P?crUa&{DOu>Cr?#2ASstDqt|X`q_8~h>QrJYCRV~ zNXo=JGYmT3L8i><;r&BIzsa80OM)llrdS+BIwe2pCqxK7aVzoj!yGl2Q`~mw3jYaO zOQt5GOeI(9i~RQvb={#;%X3?zLjaHMFFv=C}wJQ zY>7(`J%=HMTbS%v!zB$;#W5%9r%)L|60ZaDmJM5(M<-3^T^4eB%;p8b%l+nRq87F< zQQDN@K2P2}FuVJD5kH@5pMfGdnK!l_Rd2<7MqHm{M6;ZtRp@W1^<7`4jkHHwp3bjf zibrImT9D44;gras@v4PLqjHLShm5|SSwIiIkuMohd&AfBCkYeP)??5exRAQmW5Rpq zV*HJy5Pa$x$xpkLA;WqPj%KgN2TMqCaN(mpxg&)8%6HptF`0w-m-I z#6}l>$X{)&F*}E4dQGeCgc5C0Ushm&DUtqpIz)3QvDd1BIsa7Yejlwg~EokQ&S?Jt+@ph>i;+6|ZmPzPm5tbC}#V=}f)XpBmHo$yW@ zIEH>NI&YKENfm{MlYPDQ8$y>uOHZSx;q|LqujyT#FYBPqS}zr7ShIQY(c&r9%@e_O z%p-*3_c>dWdNb-j?(KH`T%Xd@E*muc?po`~5n}$kzNaqmLmA9142A{}I_K@d!8mFA zIc7}p+j}f^QyBJWw!}eE)qb#E>C$8zjo7CqIURIw6aB{R^+XA5ti#Y%s>c=Q=k(8{ zRl2&c&5EBse45wP9R}LFQkZ6ggkdS-_gX8;6WIPguFiomu0UPaL6bDLZQHhO+qTWd zwv9%OoyKfqV`AHGZj+Y)%&b}S`F-983&`&_!(dQ^p(dWC?%z#9Q!^+q=qsfT zv{iRyY$HR&kF&pdH4#JacSW#d1dT5c}2Em4O92MQm`t}5~eF=_4042yD!2N7`Ncx1kE_-wrM z_=Ldg-?!w!50gm(>GkVX48DW}=0-xEK7z6ZkkpjToaviwr>1F$Fb}43)36soX zW0gVMPs{}{xG`359zhP=^3WA(&h*q)j1=wwZVmxk&SSKZ<&Nl->}k3Q1TJ#;VKG4L)su!1yrtefCmQj*kPp4?L$Ddx5S+l| zgbD0zI$jqUWHZMxf&2KAU%@(RCdlJIqSC~N6YhsCR_*p_DB-)T0JwUP`=%X-WH(0w z8}3YUp?a-eP>1_X4>y+p;s{_#W3y|E0lSwlqcCJvtUlLyY`T@C48pxp&{-);l6Z<{(3Pfre@>QZEX+_SW8U*#BBn4q< zW3@Fd=)1}6$tpMRGa7o83t*Z8_wC|dt!L*jKgr!{HGk!}ymQWecl;LA(p_QlvlIJW zXZ0!K)0Hn^ESQr}zmL(8f((SiT?t7wfmL6qog-|Hsy2GQhrETX_Z{EbMVyMwz7uIm zqDmfMO^ZO57Ist>ER?3RDBf;N}3=a81Eo4x;%kB?f z#8+fr_EVC7g8_Fs&p~tYtLQ*fbL^Y#QOqoSShV8rDOcNxR%Yd_x0my)%jc)N<~NU- z()^%Xqtv4fw~Cq-dC{+*Z9**f-vEjNGD$Q1HpwNxS!hv4w0v2q|4O>^k+ z{t9&lW)?=qUSu;oZiqWZZOf!+dm<+uDJQQHyA7eZ5fjwAU92Qnu%I}BqH4kTk|emr zj7UWgd^}V*p>^8L$nGR=W%HYqUL2~Pyynk}HOubvUHSw-fV6RFMzV;9VBm<5Zt5EM z8?$i>MggC94Okdqv$2JCpdKL)#jB9q<)6DJV9Loao}oGWo)S&8D29^*i zmM08^D+w`+3&drI;E{<826=@KePTS{x$Tv(G{y~Ga1}428AaBLaKX_>lC}nnzv8}Z z7H*4oRAK9s>^|3AKE!yXGL8E9NG*{+eS?E=D(1E~Ec32b)k!05A>+3@9$*hlou&Ck znkEkBIS8E=(N7Z(&63;gvQfOyncA+7kE$j2HTOTY-6u8Y1{GEh#q@}zK@v>_WwLN{ zFv}$oz?vzU%A@mefy*y=tdtgXoPy~**-mXJgn zm5LpyuXDgS%FSb2pmK#iBYwV#hnI(spKr&C%+CRKJ^MuD|1cW}P(%;(2D8+i@W~9Q zR8_%q%wQ4Iql8UmzO+WT>$h+pp5m;_Qv+erhAM(g#M$sfCrClygNHesMjNuGM`*gc zYyV(NT)BeOYwO|B;>0}<-j(#^hGLZj68dqSv%W%${@jOkqIdKb;5Eo)%*ns$6$g)` z6epH-btXd3!{DwgN7)?aKhZv^QLQZi+oWpcmb-OyC3Rr_!?8fY>3O`|##$b|gL?|< zv1mU2yln|7Ek~;~>y6LOsINBUu{aYxw#lyC_W^X1#LzJBb4L7m)BNd3F|3wP@uw0u zgi3*&1VM<#W@ND&yhT!HIX1JC*AuMSo|B6eIS^J0j4)U<3bzogYf(mFjW;lklj`B2b7{%Qo9Rq*h>R#_kbC9!0&7X8H{D?KM@!X|$ot>I-A%h00dzFU=qp&i zo*yn1s?e~aS^v@PQZ=X)>tb+t1S5{#W3hT5GcKVN;f)|@US|&=Q5}#?Ba1{GvW9+< z;NvKJk|+ny(+QeuAYPCRaqmc@!p|;q)!#e%b~og?yJ%{B49+JFdzj4(L;(L?U21@7 zQrY^|99cbg{M(+|vGZ6_wCOVU71)in$XxC}Z+END9V(aT1!%CJnl?h1036b;nzY)b zgy1>h?!9AdyzW&#Ub2kY4{B`ug?Qs1I(?~5bi0g)o4N%S7@XTeV!kD#x;-WrK4Snf zWQX2F-3jdK6%CzeQhZ;T6SYVw`Q_md`SY_^&aJzkn_%y~owKYK?R{T-!B=gpudWm%Ib)bQLbQZTEcv2Mo&0 zhz_Ia%t4USN(HP!gbBCpgK}Q8(3GJw3rG9N%!5#Bnl&A8vXyreU;CdYJW89aIoWfw zUF9&$fAm&#m%-qpd}Bgy)eO59bClmY7kFEkroGHjk!ot+aTwGZ!pa(QEKm7Ul40jQ zlj(hsuT%lXz(s-by6^oP<;M&NvIti|USYLxBt{rl{}a7e^Q&RXaPrZ1yCo3aRwzid zuLNFXNw}v3*fZuU!dIbsk7Cn~<~&OIE5<#T~=Vl#{&MqvAgS^fX9*y`OBh zU))e2A9vJzWfJr>p2J{>)bIov<0fW>)GzTQQKx69_685^8yip!a}pT}miQ4!gQpEb zwS}V##!_EvmGeOyI;nflL2;|(k5ifZxex)NnBLR^fP@W@$p41Bz-qC%}01dESt78sA$b$)-Da$<#X+KqhS^d?;kYJIr^6^|CX+3dCuBu;r@6SJ9U%f3 zG`D*_EHW!TQ5qRQeOU2|vF4%XXI=HnM$Lx#GJl=#*1CfS#d5Xz6$+6IjkgH9|H`~g=gr6#Nc|OhETY?gP7du z6cL3gvdWeBH5eVUb4Gnd5L{yX3qiM0K8nTdSZ+#Z%yvA8tDq7SwS7Cvp-(X*nGuQ% zN^($xqePW$Q^N=mqUj;5|JW^HvtT^?C#D?hwQO1kAALud*e#5$eNO)ZR|u$EI9a!T zZ5zs)GxMTqE5)g}huQ&%<97S*&@0f{tk`QF?ca}=sBJ$hfDpRzMlH5oA`sytZKM8G zu@ERlN=uLgZ+e9rn_l-q!@DBIe{u<`WB*hYBtprGfU;(6BhZ|;v&N-!cG6NM0JOT4S;XkPrfyu z*7e@|o4Y@==TLl!*aJbU;LS+9UO!lRTQ(J7+=;d9EKfk8Ad4sNR6!<_QTj1JA4~QE zg*6aZqDV0iFOdpUc$O1jV}HRw@diD|q^?u+c?CAtrVT4NYLx>^vPSTHC)=!?-@S5cAhMczKA2ePj}+zXBY z0R}Fwm0smw=-4os_B3x*dO=s*SNeL_-Wm>k0No*Q?*mGViCn<_tr^OnjYqVq{SKBD zri=&gO9l&Rx+gG-r>C||o-Q=YXItc_vMouWJYWHNsu5n&Q&YND*G;k8fk!{fBa68F9!kCa zVmS2MgYVU%wqIVb4{X{~TU=MgNi9i@G0&e{wEn z-;81dN1TTuM+v8y%Wh#j%)|2j>DROHLgKM)Qww(J;5tf0eZb)PA<`8 z`rtl0d5XThuAra(5Bh2)Oo$OuRu0FQpqMa$jVu4 z(!fcE*!(olwXQJk0q35KJcs-xSe zU|3)|#ikmh@S{Dd>}%ORsy|J1O`V%$(ryaP7}KH z&I5y@CcxTuU^TMYom^Woi6hWbGQv~UvDuZmF3GqFYh=Vj_c_FyLFL)

4>0=oxle z9K?+E5O>54SF9#(&Jt6W=}$fDi%0mZ`D=XUycQg83(Xx2Hm|vErS&m62)d$?Irs0? z>w@&#%da5C1JVcy5`Q1LvaJ0o15DR}I>Hj^deB^i@-Sp`A$L^|+-d>usl^o1S$PVn za5DPsMx4`0BWxIO#}_EkE_gmJaH6HNOc=(=iXoqlbsIO&uq>uUb(K>!*X}m0v=Y1W zj5~}GQH|P`rczX*YN=u&yOSU`*6&KF87tK%)l@f?)wx>;@O(X>oc;1Jd3!ymZK8TCA@k~8Q-3F4a3K@F9W*Sv?+0%7e;>Jb;J@vHM+6D&6*Q*logM&X zp%90KHN*kABBgf1h&G=RW~d4EAowwYNHiM9llz;mZ_@tfy+c~Qo$n!orM7@{EQr)9 zBy6&KjHSE{a{%PKX3!l}(N%0Ods6aGs`QaGAwEq`VTV5y)fj=JiID-dIzyvB(G@pw zivtU14PuCaUjfA@EfxkC;ACCsgNf9f~hT;$nI=zG|`6i>vsm~k4!|5S@0|Rw1qvS_l>H^ z)~VOlP15h)m*|y%#HBpEDIH!WeDAfiB0aAp^!_ zM>o^OFlDTD-K@uXOPVw}fAte_d8-l#n8}_ydu!Bq(HmxG=?c$bA4qUfv?9 zr%8w+-E!`vg}zF4gDfv54g9DpvZhD$mnXr}YR@R*{OtmK=;4wH8%M^8TcpN_X+2zA z<=*?KNIjTzZ--YSsKE8xj}IvF4y7sUmPgwmCuLr zFJx~otX1Bl^vK|}s;W5*PnExD6ep7u!p(*!$7Fp{KV^PZB@SiglA+lafI6f)I?<_L>U!Kjv&c zEMa>7`E#I3fml1NWqm)?jFu+2x5MMs#68Bwlk}dFEA%Je%JE3mNqVvk`}bnm?GR=G z&m6D7qe|LJY5x#eAL7bSQ)X&WgC2v5?_ME*e5|lIY3!X51kpC%Rw4Hb`rJP!01B|HRL+S}%PWJH$UHlrLbq)iE7KCvC}Y;L!7!61RxGisO<@>9;U46T zmr2JNdMnFGu?x@@_T#XV1JJ9)OTiTyfK>yPxV@E{Rig2R^u=Qtn{STzx9HXwY17wXx?=qbl;}og0B|)cbSD&x!jpMf<JHgH~nZuba6K zBvS;YpF0iAO-|WL1$_aPkYNV*M_ssX_czdnUc8}vaZ7SZx8{yG`=VV}GtLFGq(%d8 zFoKlR+C(Z}IJ0{ue$diJ@#A?6X!HUHFM)>0WYmKT4RVM|EkkNhB*G(H&IyzK*u4$F)afH7{ zple|NhB>vM4?A4k674`U_280Es*obS)Yh8FXGi05Gi$#e|Mg@Vv2(nX+2eX9Vk#U%v-)bv%>Y1WdZz_4WLP-ws5-%c%g^YXrP+F zYA7gLHotPWJTPo1(BJlBzWrWOn-W}S#MMXl-+B(Z8OaVBT+gjX(qgsmU1Ozayr`j7 zE7V7rps8bHH9zYpO%3uuw0!KMqE4mV$jHJiqL9*O|K3W4rf)O3+$zsSI*kQf=d0j%( zpGb{3St&3^gpdd4$WwrjPm)Zc91)RT53>ZMeuQqrU98# zYJ;nQ9GD2|5~!yvUmdB?aN^SJkKrL}bV7*KBxOb>QaG+G1em(I(Zrxl#z2VT+m6Xo zR~ISeW+1G>WXzO$JTfK*O#x$GvC1%y6I1K$m_;ui-0drvVd`4upZxwzdJ%acGn*(Q zqZW?jj!pJbOusIk9_&@h8%0U)-JuChfyA8j)_XJ z6Qo}a6c@WAem?*ChTjd$nP*X#^EdkC#0gq`TCH$~(oMyk4#<5eX;i0JM_*P$>Tkg{ z+WW&_iI+c)3FyJ*740FZC%I`1%TNnGCFNq_04uie*!_|JrO=e)G5LD{-S2@2TNwcO zg(K04BP-H0`0k;&8A)Ft{rV~-e_PLkE6yd})6%34!og&Hhgk4kb&w6AVeF_b3?UIMk>!V0wNdX8iHp;_o7Tuh z56rL3@0(1i6q3XZNg^dEN+R1myF2>{D#)Is%pS*e`T4Nv8gnI!L8p7|bxQ~oQX`{f z2urASHjmwQzJ2nxm#+ArfRJI^g)j_$KkUUfqOPvs_0Bm&-XVe)!4w zu;A05k-OGF&8l95VD`%ZG)JuC1l2wK!`sY6lEdH%SwrlTBp17URK*-5XW2RA z9N0dWY%%{qw|EW$z?Mx`Nx%?&BW&umwJWMw5U(Egp#f%a{d2mg4#~f|EW{_k@iM^; ziwVEPQhML&UZ~iZ>vf)J^$yFNwxduIKP5E6XHq826KbW6NdJiG+;Y!p#>H!&*wfye z%U^TpI&pfk;EK%cO@wcbLqml7+lc{kC)?ECn3>fP5okU0^j!gJ7^@yz-%EsYTLz*MQj%oU=J$B$;~E1viPUbk}}=G&eghQ5a^^N6|fM%b$s^ ziUVb-#g@>T?_7}c=1!n%Q>uJ)uGvQqDp0EVr#6-T@WK_H=BzCDB!NEMCl^&rjmOo1 zy&EH|!-ft=zTg80nYlZ;{O!9s=E);^_Y#%sf5DMzQ6`>#PY^*T#)+S^Jy{}WjIuaj z$8JdZVPY80YRDQeIRTFE8F8xC<8C&8Xdw zqgLW28kzMT0SiBb_DmyPmOXB#NbR*PLmK#qL7`8V-(fxdZ+5PnVyX4M0riUzx5)X_ zVlm2pn94l7Mq+CNr<}1!5)+0DKp{h8bCpfTBp8d|htBxR3;g)On0*Vl?0z8uHPO*u zw6Gl>JJP$-(>7ljI?YZ@wkIg`uZ)SX!xI}bc)NQ_hg!-*4k>q+ddzPCbIL^lR(&=fP z179F(-U%-LZZKeEx$I0|O3a}5D(b#^Yv~(lkpko&7OB?L@AAKId}?yhKa=05r_KZC zAWc+0VciKyDnbx80iD9rL5Xb2QUY(m?LEdo5N$^Sz~`oW>x+VM&cb)x=U$JEJ1hp< zlMweYJaAxBvCwI6-D)yIhJqw530{_JZkGDRokItN396Ff&|9Tjp_ZJQUqc7!hd~T` z+NEVoyTpBvH{+CK{WD2JB#ht_qBC>fdOlNpr0({@qeh2kDAnb zE?k#kPDy1Cu}vMiBi7PJ$FQpWr+s()-?Efl)gc^3xi5k#mP9bbGcwp@k|fn=M7bVs z{?%!Ar59d^B3JkiN>sF?zWj3zs}oO=nUL6S=&!8h3|jX_VfPt#mJ zO22n7E;)uhlyohj zd=tc*qxX7OaLYjX-@T+Xg3^_JHqnR4>@)`+dkxZReHm33uk9Adsh;o5jUzFLp;<|F z`ft3h3>Sd`$rXem<{|6|ld|b023S;V(=f|MA*vEy&Bntj7rfvYy8H;m*kTr|t$x2A zWcrfc1gGOPxZ1@-{bcyY?!3_pkgmYFq9h?s%S}lN!mu_QZKG2E`Yq%)Df&x95Sqq? z%D6HfXR0<(^h3)^>qzwci}utoofWWjt}>s18|KRxcaI(%KWv7BJ`aA6kkz#esyQ{Y zYOpLiw_! z$&5c0sQ44T*}j*az~|)rW&ji*d4r<>b1Kf+R_B|L<+72zRvQCv3G}e|1t#-WkV}XF zQ8Eb1zJvQ0XdE*d`!?b-4LD0K!){T(L%&BjI6j1aP%#K|7{9v(?*at98jLoHUvZ{a z&=({g9`T=?y>Yq!c>+Q4g^oDtP3ED?Bab(^)z+$K{%m8Q4{)SG-%m)?+W*&ec;;HWHsi+ywQ(E5@NLW=WXFf~zI$`>(LtTw`NqWC%ATpsKsve-LNG%Eoo78&N?1}aj}i~1D>MXFn&jLm9#8`fAEdJVNhV2 zx2$~KLguTiFe}N>p`;9O=(e(hjK_gr_69l6pP{F* zx0u>V{cM*lat*aLn8JQAyl7Ujz3COgzIT)35)=+E+=c|4qFGeAEo_}<1n_0a#s&0p zXBLUhS@MoGsI@oQ^QLFuaeigY&%>MvT__Mjl&~#t^(|k8KiN2;;R{pX+tGdtB1Hva zjV~)g?ias7FDwFzs|0srjCN7#9U0?GabRCe3gcKr<>;)gcEgxVpuVcfGt0l^*PF5x z?=xWMNdPZvHN%Z^_trXA$^sNq{~TRkM)?W0Z994y1ITbnnkPJ!ysn*!qLqjiTy=+f z@?^5FYG_Ac@M^)^lCQLNt&TdZ_ry0M=}~4R8UKAuK`Y@8SJAFA2Ym@MFIgK}5I}dEko)_7us^J7mNSArX-Q^qTHb($0k~j(rKT{(uwlE=n zLs2{eC3Wwpw^=ELAN4lI_iTib5o6t#9~&$8Puyous5jE9qW1Xmvfm0X&~R_|fhm{R z34oGb-nwf`-c9zE^L$aXRTqrQ*H^u&&%1u_l#JWr{lZtt5nuTvo5V_gEOfyhI7Ne{ z6%!}a5vG$Q+X;z{3ogte$`fVo0v&CE4nF%!iMG65b#0;P;+YhJJ>d6cUiGhUONMRBa-*i3~W& zJF;k+9A@-6LISRh({vMR11ou;rcRalVx(#=+tlMnU$=`>#n` z1(C0mt7$ay>X`C0aZ^^-^eYt;{W-_URunZSI+3pp3!QNI@jFxwHq4@_FC@@thD*vg z=$gzrt7&~_VoRi=0bg3zR)SSu{1tbe!%5x zM&=*))3m=nQ%2}kSDw**Xnqu_CV~{2?gQ$W1XdaHsbfM4z|Hd~kBaKb`d09Jqturh z3|Ez9OY0#7a%%=Ongz--=2&3W2@4&Cer&Zw@KLXw!YD!+-HBTm(dSd$#BD{o}8%16pz&3I;-RIs~@Bu^ugfAC|F%|+gQIl5N^F$ ze>28^fga6BorNe7F8E2qaUlFU8J58xNMawl2Sek~2F1Qq!9@2O6T^<_2gI@|_w7Sh zOgs7C)%)~Iz_j^X5ioM+2$%X-+KN3250WCqQ;(yUCj~{mj%`6y75iWD(PrpqXZ;}) zGR3m#=+}B=m7|=fNOjuT=;l^BTm$8eNlI4R7O-;ZIQ7LWb$!KCNp;hqm|(v54=bCY z_z%#g9wozF1HdmS*GCAR1_k)bq3wLZOyNq)gG4-%v?Unr`+&Ayh_udiwxzfqU5=dB zM-HYxqh8gsst1?f7DdMNdr0Tf#}S_hZB;BQjh*npsQP_i>!&LMG_A#AS=*e6bQGT+gILz(7^^(vYmHNs zxkFR}0#+D~2kC1b#1mdVIFQQd@taO*ksOJI%J0}(Ym=6=b`@$E_e6J0IqXJVX?7g4 z(bTOP7SIO_TX_Xc{iHm#}xau;F)tvceG;V3HcQuJOUY!?scz-I= zn1bp`+Q!`~F|X+yChJNWWVTccu>@LW*Dbp5s)x~kiv#RWz1{S9c=1lXHfi#iZ!|Pk3P0OFZ{|d*Ia?mhB`f!VhKR_C&^vm4q z7q*oRU2Xn|Pr%DLde9NH%0KBMPAu5 z=DnigV)CJ-HqN~DMdfBkgNnbTO^Q_b@nFeX8QtZh>`2DD3K z9is>gp@7lYFhpS+(-au&5t{H!WITkC;A_Ul`aJX)%~|;cz*q;~w`;IZ)H&{pu^0U8 z_AKYbJnT~PM{IKa+cwp#+Jtk|#G=J6h!s#mSdF!G0e?noHr&gNBQ3S510}W10KB*= z|4_#NjW|F(-g*fg1X(5xl7b@oM5E^mYBtoiDz9CBAB&#q?`XxvaHGsGNZt+w2bn)k zS~-A#FWRK&2lf@!aI?;ok$!G30+c@#&i%Bn3S$bzp(8shnY69=M0}UEce5& ziXKz~bE!<9;O%OF7E9i|R1w4T;6bL{kq5ktW`LwF= zm7DfvDM(t%tqVcW351S*rGyuY#T|qTU)@2(Za)2ve%HPN7w^{lT~m_ulqVE3Jrxt0 z8@%BjSgy^XTgGVVSL~XFR_C`xE$EUQm5F7^FSw1y)*+2Fym`w~oasefX*mEwK)t_w z@y2g8w{yZ>L>uvX-3H=u2X>UCbmj{(@I1`$HC5I&u7WMok>D=!A zIthIh1-O4#XYRJA;&`QneP}N7V=nV8!PfMQVYvK?g-fY}7xIPwU4*T|a z;_nFENv)266T^8Ao2Z{TI`S&OQQaK@d5nbNN30~c!%O@pO00gy%#S`97V=SI`T(jY{G z8xc8NV&*)0qZr*k#54}~BarL2*k0gU1krDoxl`LZqPr7Li_(kZ=Q>To%Ws%q1fS&P zAt20j%sHrFeKR-9mACI$e7G4W&PE%t&e+)~?!z_3YA*dT?=ju=1XkrH@t*qM;r)L= zk$db%^4bW9UwW}ylUO{h2FPYaJ{hLi;9(We0-3c=uD$h#YSECiF8mUceoZht9hl&SUwXHa`VF8$8$y>nkq z%UKuPcr-9A`ZG13cs{aNM#avNjI+!M-DF*II`W{%x6CxLHz5B=G1pHmMjYe6*ZQZC zGy>7JXIC>kVKSL56awq@az`)4m1r~Z=EEBLVJW7i8H?E_!N5Xd{0(^7VAQn85VxQ? z2jp+d-a&EKn3$6Q8N4Ls-gtNu-Q3x1T)7pf0+AfyOc53=RQnxg+snbG+YPu$>|6L6 za=we7p3A0wfsi>3TvO4P`7sMr)oIe0!GGg-|JB*s-Q}0zCcbO=qoO(F-5IWt)E|Jb zWaf=K?S90k^L z33_8;JCuC&=KE+0k6$;Z2)VFv0?(2g35bD$0}CFC8zHeWVWDePU6h>4c%K5~sA^FO zBu^Tf&5bat8bPn7-tHkIKsj0X;>8@uj=vTMz}^eiK{uZeVp&|4E7NUHSg-KAU-?A7 z4V{eKoIuR7UPmbmamEilXz@tUnj&A<7i&G`HSEWXj|4&07$T+ZrCYCE^ioTy?u) z9`o8b-M8(qg2Ok?kvsXg63dDEgg=WO=!)(KkR!^h2eUkgB>n2 z8?6by;FC_ry1OdvH>>l@t*`}x!I-^ki^@kVY%f?bhrtP-5OfcBs*x|+RoQ;Ukd%i8 z4T2#HU3i{CSQo;L#^M0o(>W=f?asxHi|MC3cd4}h6ng7fhjLQIafmE*fe6xd@eQcn+pP0*e-!hdpF(pm3!0SP z){kIY!U2pciL7m2%AW<%@nM0KqXS}MD;1TXnM@+Z#Tp5F!!j(1GC!(fI@j1H8affv z$WmPw8GwV7ra$etmUS11n0;-*b5qOs*j# zY)aNe@Qe|WZ28^x?WuMI$B0I~>(#miS*FFQ`rTx3dM4#nCU8Y2omX?-T z^2>7v4*zVNhyYd%wd`o7`ozvAAqE?lYB1{x6di+gjqMWJSd3BgsWrCjDwHs(Oc@24 zXcn1>NEJ)dag;Q%5h>KA1K;pVNkEBn&^O>>+9zCB`Hf<+FuZ~)lXWRgbr3sD^Qx&W z2M5kse%rwlA6{R*U(MrjgJ#{n-ukp3V>6P1XccPxsu_U(|Or5aM0BM+1s((CZ?%qF#T0)td??B9N)!?!PR0hsNZIr!+lq zH|E0aK)9M=Yd&XDDB6ZtRdF{-LHTbZC-$F4ZbUwbjEJb+=>U5~)@fCYTv9R#aRa~v z{ct|9&F#>w79l_^3#edVCQDXmfDzgmNl7+l00}i(;ZT|VVOX+eFgHQLCok8~W2+!n zh}pDjVK$V5W^qPC&Iq@(szv3a6#Fs>7YA{QpN!7M@1MjC<^@96R6iy~y_E|&1g@_X zSv}3)v}L=&-TT`DZ?h{^8skmxH7GPF z!jt55i|8Sf=tuCfMGzQNd{pnC6$Nn0-|6mcVc+#VjZMxD6-fIew~IRjEMT_1z=pT} zx|zdzA06;CeqS0cL5Y~v}urhFr5 z`ytDODGXeoTc!X#O1?#A79++Ny|9d@JNd}L#CAOa7o$1OXXY`;FdMPiOm`b(_-*_R zVx@YR+dv0yhk;_c-*wSlcW3*GBQ5B?idCModlIj}HkgxWKxH2zU?JIvPJsx4?hq=z z-{2Yt@)WYWD65f9I_t_-l**xCey_PL$h- zI|ocg1X30zHXbpP_B^q2hEV8oNYQA)ps58Ru+7~lS`=nmfIIkg9Gf`ZV@^VZ>yfV& z&=vyJOFFZnG}A9I#eP-gygV;^?c{@de1sRvKAP0|(+5gdGgsA~H~+>W$ZJaM#Ej;o zeU9oqo3*xHzR)7hGkcztsfDv*0dH~H8InAJ$ASzE0rtHr3>G!g-Q8H zV*ioQYP6|5uk=lL)(4cp!(r&-wlOF6KR9qN(H(1o@+N4RuiczKEhK3t(-T;tQ{J(I zZvu6q3d=niglR?&owtM-)s%xPvPn8jqT)s^BMb6n#ZFxu@&XtiGYd^chtlGyi9Msr zM-68(a4aRIs04pHV?w+}hk6}A=nPG#)uD21Y#efTO`Deu=?AQQ&yP_8<|C1!ytc5- zNqSdy+^Qw2vE69x+Lx!_`{H@q4lp=%#?|Ekwm?$m`(S$HL`(l|RuF(5I7OMY1>0}n z!^@@Z6N+DaarBu6e!aPF=JcovD$d~$8Q3}{<2W^@!-{pFsE7M7P8&<~T9#$Ne%HpE zAuDcgMIfftfJU@_h*f>@yjo2O^MYLsdM>M5l15 zyDSfJdYkFfZi^gh{7Q8@0wog<-3jVrbs`c+@r~qkC_pJDQf)!Wohm+PJ%QVpS-s-g zy#BT${Vcl>hd+8CT4R9w#4(9T+qo5D5y^*V3-e^ooHuDZ>nkv=w_4q-Dz~zTe#n-2 zzk?fgy!;B{`6?NniS$X_krHM^5cnGx0K&qMP7k_3X&yBYPWS&OVVv`XtSTM z=YSskqAQ$s8UxR4fCHjdH_nldRzM6hFnSqceEtDb2+h0Hf$n9L#24Ps(;l@`rcZjn|)Cw~eMhPXx?A2&Xn@{gi8x@||Jw ze9!j-Vvy7{$@?3MbN;Vcz$Qpy!K;)}G=zicHZXX)WK1=S#ND&o7Nk!1;7N=G6G!uO zZ0syX@Zyli0RvL}6(QqEK;THQM%{FSbRO=YK{Z|xW?1ij6*QrB9O+VcCZVZpD43n^ zcUe7$RedtgYW&3Er{SA5w@RJ)dk#t4Y-T(H4$lBYf!%hR2f)z=y`6Qh9Mg1&z0%oy z$|FdplO)&&?KbD14R`1Vdl0=GQ*%KhP-(?iy(_R7le93_beEB^rIwOcFl}SopXZFI zCpMgS$kJponP!3o)!O-ML^f=wsgorMi}q z4VJ4Z?UPH)xQ1~M{WHSL_SY-lqq1*nVLLCdRW|^{LUE7Y01Ky%jmqz@E$sNe;#akf z?+z8MwF~A%4bbP?^$M~l?`556C-tS~oY9-hTYMS#-5WJ1{<*V%uB`+fa*a}H1M?>^ zXp@x=1^YN+&*&q-n~K|fXNgVj0Q+66DuUk!vN=6Polcb~O{Ud_=(lMghcZ))7}4=o z(3Tr}Cv|#PNlVfxLCC^;)0U_8~96Ck0ckc-Y|9@B~UvUw5+mYdFf4 zro;WONm-qHflVgaazOZ|ut}Cp(+pXOB%*(<{v}(QWyei^TwdgelMFK6f;+dF z)1U)_*f)fj6_2#FfJQNT6lAaqqaWeZ4v~lAY!oQrE`6I-+eN(NaP*_jZz>$`3Kxm^ z^*S3&ZjyBQF%7-(cnES!#NRa*T{=Hr`u-G`BIpQKOmdpZP@#>@_(W3vbC?tT z8?x_(GFZ$K!^4Blbq}=?M+ZJ#F;_!=Jbo1Ic}5+M z0ejDP6ZO(viPFWFIBE#aAZ%X?3V|!i4^y%^@z3i=bxDcY7u)1+Fs20IXC5k%j1t0< za37|+adPs5L|A{Z=pe^@1wyE@rE$zRM{BCh8g+xfi=DAmKpVKl0ogrStNGUxUZGRv zOf6x}->eIxnvGu6d&Vic&6hvvpA&S&D|Tx@nu0FJyDq-pF!LY*mnDk_zN-rWCzg7f zpRif{i1GH+58Fk&Bp!P9Zlml>yQWJ%+r=s_%myb2!}I4IDAB%UA~-M*)?;u_rtBb1 z`ZviCO}3V=f#xO(dDMK>uAst@CDwl~DmIDYNj)bezj&2|8BO}p6PiZglPMG+g&l4{ z+itj&_Mv|JkNVY?Y(o@ZHmcC;^Sy|j-sYAQq*_y0rn?PR1TIp(k=cy4!`a+nRoSu;Hkgc z@Um-5-`N=&V7tk<{ZsA#AGvI?bD`eNmRRI%c->ErbAbi*d=0sg&OW{n?zO5kfSCv) zEQ??zCCc439b&H-OIK)lDgsmGQK?}kowIHw>@8bkV&ZEMJ=Qs7Yhm%VD0=2%tW8^0 zX}UKof#zPuRDc2g#{Qv!YWLBdld>in04%+N9)}VoFT>C_lI_3`{>h>xW}na}AXMS! zt&ro7eK(YEVaih$Sk1z`&IJoLWs%cypv`OFk9ZJ{i~Ap$Sqc~TkTiSMRX&&!F{^U# zKGT2n2K|EsDS7;Jf{}~DX+PEE>Ltw$ieHKoukU<*mq{kYMbR7%gFL9^{{oDl&W;r6 znW@8`F~yw0mJ@&75*H)VS!I*Jefd(7B8>E%tH7d(_$osxJTh6OZA_P=O+{;Ec?%%& zTy!NDKNUP{R)qA$4;6sz_7#)Qvc_3&Q7q&wvvRfjdt0u9V>S@P2gO<#ZFi+!sB)NA zvgRViJy4r~k`A7E4(6tl)vLQgAiqMTGxeXp#(VDn`r9wh*j*2rymgd}sA!AS)xbHk z2}OZ~Qt4>5l|QHx$^WgHMTCfux+E!89Sb=#iG$m)IWtII4HZY^S7dFQi$MaN6}+k5 zZ9K(HBODE`79dJqU1J(&GEMYFf3dzF>i%y;&m+vRIKzDNecf}Vdjb8)c{9Y5bV1gf zLK1IhV{<9Maj6bV);*NJz*q-~C(pZ>zd8I_Cm$*!M+5hj>WoT4DkSIs23#OMtbkVF z;nB0OcF1*c3-Yy1Dygw{PH$n)HujtG6YvmlvzypbETdM49gAjy|L!aDudPBmqDy!l z>130-tpbc^l$=6Pk)sR@i~eZ}WoP!zYEjST)s``ypUMJi1OXKqDcJGXxb^vtNl{Qh zbe)5}K-NUb)eeT5-%}I}7!AOm3(aPFKXrXBA$XmIrZUh!F5mym%u3^-q@K>Z>j^<% zl1=Kisl|EZ;-K$|Bs_d-orwv z=obzp7K?^5*-p!8jL`Rz7Ah1eB|j#5?w&)rC#m+WgzHinJzd%I4|XqOo_=@`dqq3~ zuWB5kK1~VHsVqgWmsc?_3$WjQ+(U4-q3w;Gg`8EU)U+m$j^McrF*4tRwIR*08OsrX z8RFiBZf7m~s%Q!Q;|cndbn2iDA1Hj`7$ksRYeK-ls~^~%2`gO8w9dq~5lM)}VdefY zfj%~d080F~!s1aIUmqB!>t|#dLOto(Vx}5`=r0;NYld(*zY@m;A;}9Sbr|h9)Z4|2 z2*q~GG6#}3WV)gj6V%J#_oN_GCyL_7D6m_geK|Y?uq+gM#u9Te)9?>ByR}Kt11&<= zk$_UiVrSv4IjvH6f-5-e>S%qCl%i~{X4EDl`EvL^KB;7NO$>_G_I{DYO&w|mmgb_M z*(m=%p)>x$AGTBo-Ycjn)1>I$UyFvz#mUoRN(OfCZZSHt2jRypKMhv2D>TBP%A|Z5 z8nHAAaTj(%%CE+dp0Zuh6~QLMOZr0bIJh)Wz@-tWQ`sdS>BD&1C)(hhx8|p7Q*4m3 zmY=(Ubht?+(B^k?aS#FL#ARcIjv1z(X=n@Urgx3?V8QO!@-%{?TBoAlimQ&!;Y^(h{mjdS(+Hc!FJC-+`3i)(cetiRlWTB0i{-0qF7!$nUZ-7Ff znT*uMW(A9)G$ueIk-ptY^2CrfWUbpJ^o-w=7oS9tQ?en_e)XWrA-#wPB3G=BGSLaQInkKU5p z4ZcBeZ4bZbBQDGV%@p^*=Bl3p9M^i3rO`dVzqrj;PdjM)1g9@xoT*?{@DWmCUwN|z zVE4)i|Ff3ik^c}F%HO_?Nc|&)EZl^i1M+yCAbxHzd~hIR+7PE zS&49_>HO#D!dvQ3AM?(Wf6)&yU$DaJ#D%PxKD6|lM#WZowBG_OcV5*gi@M0rKVZK9 z${TwDC0yM&1|v4-NME52M?46ENWbvSd?>;CC0f+KJ_a5K-e4X87Xp4b0$qHMkOP`%ao#>`lGZYrIA_v}~5udNe`o z;cqeuK#TOrCGUBeQgk0uvfvbNciY*VKUkH&S^pds9UIKI;DY+Dm_lf8k`s%;y!QtydQq0Ws^Mwc|-{Em7fKld8NW= z!Tcd7IWSs#9);(a3=XZtF)3w`G99AV zw(wB1n&TT{UaX$1A;yn`X16EN_2H?4bf_4(W2o+pGs%M(4d%4hGSB|TvDPc-X}iL6GVc4#Z13N4?A^mB zN=mmY^ohHv3Bn{s2h%?ogd1I7yF$?K@_caj5#-F?{%mwqR!Y=RGA`}D19PNIix!Ww z=(ji;A$PPna*RSUezqPtEJTTtb;`Qw$utvrEb@vq89Soe5JWOtQSOC<13j#KRO80D zZqYHFl;|k<;`n%w+|JTYj9zivws8;~ME(yJ-o*p~D!Qg_eW`p4Z;*v}Ftnt2__KNu zTiG>s1K3wIn+dWP9u!H| zI)-sqy6m2%bpRZ}PE{*}Xnq7KaBG){Q7RDg9epU~4gAya?bCUM-Ovruix;1WKeypw zP{rW@RpgjnRs@CE(N(W5*Iquo8bleTeOQV$0nB@ zgON92#4gx=Nw+lqi3m11G?5$`#ope8XhAauTQ2wAj&L!6^XzqbGj}X>H(~V&0+P}O zkiY*a|4FE7SPv7$A1xy`0OWYUX0`p(A1O*IIm7l|=AogB-|+Bnm3<=f_;Z)a;UB=@ z|40=~TgnMiS^1wub-g}eo>6AP(3h&uHXWW~+<=}DI9&cB0Ueof3v^k9mDoK=(6l9! zj`i38?-z}|6X&ZK0f17NPY5X*N422Xa*+*V#g1(_j&PYrGSF(<2w=9MAff3la!;-@ zcWXQAAxsV4slwr^%1ZYJ*`<)sJ(%6&kG3Zg;BzfHNc)!D>-b(NL#18 z^B3a&m!N~RM%9;*Kg3S7y#VD%Z;*t$nps9IWp28$!MqLD#uM$*){5~J5*XtOm_13U zw+%Ug&_Uce?5`-ru~k)yC|qqbv}5JoL9iLrzOrvPsWDv=8YVhLu9-(J(rDRn$#yOz zU1-;*1)L}f)cYHGJ%{mtcO}hFiPIQ06-X3@9Qw*z*(3ZJ@3?PD^#xI*t1o1adcM*H zV!KlMh}=gi6r{jK0EQPlZws=IC?8Y+5Gs>AUizOy!bR@uA?%65BN-3_HpA3_19x~qX&t&I&um+#zH*g}4qDMYlS#-AzLB>FZ;KRQ%>B?4P z*CN*^2v8^}D95sjVwr7%DA?AmGG_Mq)WMBN?O0irl`$B$RTP81@kS4Uo z(vh$xUa3$#*A2RbLcLepWbQNdsEzC8EaJ7Wglzv) z^X#ko0*9fL19P^cPT6S)a9ErP%=J`gIO2!4WsqI|<>Q1>W;b8Bg+ zERwDAk-ak_0}Af*l$0)1vf9$IiPll17u}|CIpkj0W8C5%7#CTNRQ86IT^C2wL7dj0 zS=NyD<$;`@N>Px;cdAt9Z*irz1-UI}1^)62;^Y4&WB;dHEp~1mnDH>@&J7*g_Q^uf zzB3nmf~y=!`5MO|$O_ z$;{MWZn>qJ7|;&*%~k#6Cvi!NzmUmz?(&RRi0NdbC>@w)G&t>M+SQd^_tKo)MN!zg z>8d}Zc+m(z=zA#fn-c6k-I4psJA>E(=Bm!C11Zf?thb#z<(hvA)bHyp2z_1rGK?ax zLY-~tN~y^l)4VYzvx=yK&%u8VXV=XTpwX?9#>5L=*3RIVF$J~$0*Z%YN%S78O2=hj z`-#v)f46^g)Q8@9h!Cd6H$%t`{id%&9B&M7`Y4x8?&?TE_)`9vf_mSqbcT z!K!wY=b$*mG?q!PJYfkJZX#7eQTcd*Qc<3QQyaI21Eg7u(iE5!_L=I-+OZ9F7h$@= z{fN<;`R<~taAUq>fPBU<1>Ib1FspQwJk2m8Xoz9Be7pM7b=a-fLFxi`irt$%{(>M& zT37W67^sVK?Yl=sY0Q6}Dz7LwhEOIe|E!`2Tt5(wv)%o>G1)@95;;eL&Fw9;HeRU7 zN?buD;~T&yJ!d>wX!9nfGD~Nqv#nw9SaiVCHi8Yg{5qApq`u6dSpt#ckhGxd2K+dl z^U2dLdaE}zE?{D>^*O`To_0>9J96%pLVprY;ackFmFy6tg`4BbEP!46TR($J&BK8> zK%clK2=z+I&)m@tmw=NHC{T0`r@k@<>Wx|5B^O$j>pq?kb$R&}5O@}IeGG+AV78q8 zU;6)O^>7agvQq~VjW#d`p=Kqg)bG5nbJWlzoJtLeS5@hMWg+spf)W;y#Q$4u zCDXdzvu}QbAi~SJSz~sArEC8+PHcUpFFO4sFP2hzX)X_;QW{1op;?Zyjl{3Bt{A8P zTp;xvQZ|EFlhL#=2AIZ}tK-FdS~2D_;x>8lB0A^sOo zN|Oa%_``a=n^C2+*^RR2-a^z<>%51I9q|A!kXRF`ihsQL|J&sB(5=f6QbuVhc~tX~ z+JVyg=u%|w=O@^8KZ5h#a~?s4I^#(f>6x+t{&KuwCGv@x7_%`LHQ6kgC z^D z?mX!LJNa5|DZ)H7apBnW9NOAGK^vS`)Gr|SRpM+PbkjJg_Za`di2(>6dlDcE>waY^ zaOm_$6-`p#hII1j`U+N8r9JOc<^DqE#?u^=|s$xT`P4ej_1ENV7OBw z@tJH5j2y?B%pXD}N4RS=5kLR%JMn>mAvdMmKtrO|>^H5RASabVO%cjDwX`X3?+cgT z@z(k6g#;8TFV@%p!732d{nhC(_j&`{^H5~dgV&(e#O6t%+Go*QRkLLbqRQXCgT0Mq zL$LB1_v0)|AeRd7v0)qz+f%Cn*6#xg8dd zEpsYDH`6`@fA;uZ#}tQWyZw(xyB*F#UKK5UAq4YzZ7rMM^%{Pg_@_x?51T<}#nnil ztV|OLaio=c42p^7yezvISKS`j z;~f+F+n1R>j_ChZGWEBPBX;z6SGAVs$HlER*}ohqHYv+Pz%3{?3#G0`=d6; z(-8A*zPtm}4H8{`hJ(Vc%wQ^_Pu;@u*3s=q9S!i6Kk{8`FRmS?Ly;%SEnr+lDo9%8 zoae9vO5_0HdXs`S*VnVX!hk(jjwbK_wW7`dNP+dYMlx*-z<;rn3jm3^yYqgxzVtSO zG^57|U!l>;NkxI96e(sQFe4fYqJTONUaGuW2_)Gs8MZWY=8qjEXP2fN?$u;NO{4|! zV-3=OtylBB;%+YPeGGTsxt+Yeop2iQ1u4y)S+Rz9Op=yPY%$C9J`l)Wihuq3lf`XP zu?(qI$QPu`OXTyr4nk_|JNm{7dCuuu{~R&lFnkF{JOIJjf85F^AG2h-=Na6_M_o`@ zoTX6g)dUM|JOUk+RKnEjmEU`!w(!MiWFblE33+wB&DbgkeGu7IvRbmCanvOQU%c4Q zou+S@xD)zqLZ|%7vWpBU=E!r}ke)iejz7>jYQt={d&ehxk!GVl<u=7=Qm@QS=Py6=l!yesXeS-f;vvM3i=37 zNX)b3`|jzYW}La8*48bAH3Tr0=1;pBxxgd~)36(<>>l}BA&dR-Nt}G61hwlJhp}Hs4gy(z(Y&zbg$zGROcXfX{b@JKFxf3<<;wU{iCE zO}FB1h0SU1(hj%g<@M?>e3lGL5-3^bT4$ary*AjbL9^kgVQt%RJXA_W?~o@q=7VGP z>HSmTuK1;rgCZ~;clus!uA@rl7cxF~0U#WI%K~1k*;!HToEuw0?hz#4EqhxNYqPs$rD9(a&vPOuek6`n?t%(#a*?s5SJR9XGOB&16i%Adr06|GNdD(8 zjtAo!+O?_flf`=8E%)XhZ?=iieY5DabFza&^r#F{KDRqe+{r z(HY0};?UTH!Qqyf(RGmZ`*~{jTiu%>_fB^};U>ZZ#ibCJ^Ryr#-T37Gut_z>AKNoW zUccF{UkB==40X8c2iKN7_i)2uBBTFWSaRdms^gyu|@&T$vq0~dEqzwW4U z6S_-gTR}EOiwg11WXmKsb}HhdJ^uGD#vT5xTfCj*dq(}u08WF5O+j3T8Hsq1JSEbq z*%mvL-vQ>w!O)PkYM#*Z*KXK5hMv=Gr42L{ukYm}ev-S~++J2?*= z#|Ge)T9_MZz`P`8q`&FOFcr>I8?9sQ;Gt2VZyIgu_Rz{wh?f{Di+B_J3Ervy8ZDX& zORhiBrtec|k3;iyI@|w&%|4bPz-7=D@V3_y)ddl%E(466y`V}>2^umwl>W`bR{zYI zw{Y;f`uzKL4@Ol@11lvwoMCRD|I{5jaH!jYMsTricR%$3YE@P)_yave|JO?VTOlPD zxv%775f50GaD77MneUxSK-m$khhlA|)Y$q}WPSaFh+KA9Q&QhHGHBCsa;i%f`71$> z3OSbCn=SjSBG>aShYSiYj?2aM7+oJv!3wXxo=h^C#T#eMS5W^=_m!C*co)@ysY!7H+l}b!H2! zI!H_>ew^$+BhWD234s)upBDKe;j;UW6nvr4l#%0HIg*c@sJk zJwd?-?Ddw%C_2=~oGMn(nbZ%U^xIU)?V}Ne+L+Ceixqf+w)gY5gq`?28z z;N9uyY@a}p?b|1EaAAiJQMrkaEGGD$rF~MDujoMH7GjPRKcjZNm6b|KXRD5*J7xH) zImvgSBa#`obZQ)AVQ%44G%`$KSz*z9JL)Joqq3DY!Md;9%R%DO$tbX9K_|g6kQjn= zpuw$l)u(KeFLKQWEur~$ngpu(H|@UE?wON#DN2YAO?4f7Q>g*ZF_wqGp9ZYLu3 zMYy|PmCF49v_@Jc89}XVyYuWnE?A5yK9uO=djBr(<7pg(BT6%=?6ibrd!g2oH93+o zo}GFkg#XXRF<~2zE@wI^4@*X%cQGA}8DAnk3_=(`@-fQt(zF}^F8O|f{X7R;(S&eq z$<4@_pz^#cyE;2pq`$u>?L?N;=GVB|cdu~Va?NhIu3SZioNmuY&ZXwOO`+_|E{>l> zytFl{B3^pM(0^2H_+={Lk+gSc73KRptR5#-Lm9<9Y2y_Xk6ZTii1xtV*g1=IjcTF? z(#a{p3=k$wGuQj&3iGzLfP0|7znn#^o439!>*UerE&Av{T+?&A=G=1<8#8>J|wtKyfqk z!;j&^QT_eIv}U6emPjR2^izEY7Z7x$WE>sCIw~n;G`l!QfDV%3NcU;aQQ;uzVGTo> z@lMx9j4GNoX^;nZUhs_JpFvjgptV<}(KIVF{PHLzgC6XtEiW`O3dN#L%ZrT}J3Ied zUmy*EztZ&0n6tI-T$O=UV1491k-$h%T-q#T#&J`%2yW~)%ceBIc>Q{86-HmCBn3`v zOPUsZEfb4Vv6r5aPotVg01tIPa~mX%V;8M@WGy1c@K1Crruptuqw^!i`t3SLVy-Du z3ex}TYJ9L;Qc2ulbm-KS@)8I|GxW4+hBd#U?cLvEdS~~?n6s)$#(kljMB!6lerz;} z=AFXHMXD&mOCFdqY*})}-|{W%m+O@y%Va_g#||A}+3U%m&qX6=b|MsL?ydb^`h&+8 zfBL+`AL#6NFM%!cCo@y$+Y||G5nppdtg^<)a2GHs{0?Mw zqh;mR^z9RInat9ER-GUI+0y_8CZ7`PA(O@W5Sq9i1e)QuzyfxmyO64XuE-YnMCOrW zA)011iRDCA{63a7Mrl81rK_lWzdbYHXU`<16J-H}`GPQWi|5x8RI-&Bn8aWL!F0J! zT+VMo?eM3BY6Gw|Yzf-{d|&c$7|6Wu^g{u&aBz*^o?pAOe&BGrFBM+#T%Hw~_9FGYw(#YCY6iP62{{8}8s3}eBe zc1|{*MSG#`XEPI}q)%6QYPa?sIUS#16`Pis2U2>MV~)>J2BpJd zm$S26jU3Fzjwx$0c+6&cB@VvzJbr28#7fIDgIjQRyl zGjxSH@TrYBHx2Lvwhoj%PDcHo_d|5id;Y<2du3Sh23svya#yuOgbv!-MJlCwGg4ZF zZa=^gNQcjt>x@c>g1|!396}z_=0E}rmSMvjSanVJl}1Fr^Q>POyV4BWzhY-@hJK=) zK=ud2j{6#$juEz&ws(#ZJDlfiH z?n``peQAALdjVCh(5cD!peyj$gEAq1n%*eS;MZm)IDbMDLqVVyQ#>BYXW}%rYhsUT zts6RSZl z#X$GVK%?+^V-pu_0AYGdFXQ4YAwIwUp@8m`@A@C7CGt1$$|l#O&vsh~^QK|sPVx!fXLe-X&6?MN z=wPnNC6R(ZpO(ax$VO;73os+3CK?CRNFb7&w^l83Tz}~?W%q9Rm6LtVh*v+w`Fr$Q zmRaRE3Yu42)H=IyJ)AA&e42h4qY4++EWlS7op{HH)K>onnGkpDNL8|it6K=-u*ozo z+Jt5>V17*?|3RFyMYw5XGo&z^t$&|u-9qoD(N{CXIrSa=g|fzb)CO7^q z&AY6NK}I(8813f-eX8VV)?u>Jbxne<=isPAd3ksPI46avWE9%61Cp82`b;M|G&It7 z#}3RB?3CYJlTGGAQP!D)(7JzU?*?T1@<|SUV4qd8Kb{^lc*z=GL8D`mx!iV2U6lD+ zpVgY#|3EhomP%YiaplyM-H*|JYszruOc=ds<^gumVqWc&c*Pgpd7~T%T9lj^kGS1} zNaN?tr~Ox_{7=@w3`=jS#71@^Zp3>5^YUu1No1$Cs(QHR4kFw-qdRNQQ3o;J0VKnm zkiqu}p_nNS5#azbAM||~V_aIL#OzJ|zH&NoM_s4o4r+PV85^_BTvX)w5ZY2o_|T?q zB+k7x&-Ejn)Q+&El`Dj(43K8}v+fuo=yaI$uUTm=&f~mQx-mBUmOyt9j5$-grLGQF z`Y?D`w;tAf9_%jXom1W~QKiUwb0_0c9#lWBy+Ht)X%Q!X=raJMA(+rZo_PmBvOA$= zlGe#6NsP%KK#eIMxqMZ)zrE|g^eoOf)(BlCK8D+4 z0c-{&xzG;~t#ZM(zpMq<&t@R|+TAgDI^~mN|=9X3St>N{ae?&_tf8D^B4tZ zUxtzu;;K)wEqwt6>5()%f#sA$ft2(39NFf0`n`f%O%Xs6q?iITRU9|tQa&9L>%|b# zs0wbxxkvM*3Ut|Sa80O~h4~6bn>y9VzIf=lecN_k+svPn1t944=cfAeQg?Vmm#=^_FV`^Y{2n8^t7N>xrcGl;A*~(a=er0gpzHkS^ujspZP0A*)cN8i>m9fJB2C9&km&A(re!^QX6N1o<#UFiU%Z|J zBrPiAQeHw00@Qc^x#7KI#CIa;JGp}@Qd@H1Bnq)ubuy7aRscId#J{{&O6(_OtY>JS3>YRAZR|WtI9aSbQ>HC1jkrVU zxtTJ6J%q&ewEnZ_74w2a=p4cA&{%HySa>+YC3XTG%?dS?M5J<5+vN2U&Y$*38?8+f z;|kurp=P0tz50dN-(M|xF2SI4#I>{k&EfxF(=M>!Qj-)$`Uu52*x1S+HGO~~ZFY8b zSYzbOZo|h9O!7Lxd3L5sut+?4yIl8ENmft_$xtxX+EkO#ktwVh`!7Y&j7BjrnhlHC zKohL8<79Pk4!$S1^+VjTwKrVA`E+-kuH*BI2p0~2gxLLE#+4w{)JA8=#<|P6r;4ve) z^>c{UEWgMww(sC246koLpZ~4$0`CVU3|QsI6ZbNtpe90@k}DQ7NR)@_+kCWZ+!KU9 z2RqK%ZU@7QC@$S5Kan_gV$tS>4($-aBL?T07KL4s;>( z!l4$8jh(XJ+y5C~8`e|du;jay2v&U~xN@^{;p?BHs+%iaq5Xn-4s%a61$7VCOfK`~ zLrOPRM*c5Y1%DU6LqUo+iN}K>X6VIvoP!aP(yyZwUdwX?SJ%s~T7XQ@3@4TuPp!ch z6UIP)KvBUESQyYHhp})e3DcwYMwD#U#f35;Bl6TJj)~J7C9q1eG+HiE5jczGuV;KM zpSy;5#ea^uy~TZ0zZB+$=CKIJI_%ZIFI#K1QyLUtyLO*1DflimC2#daYioJkFy)#9 zd|JA2D*~c5{>U_-aFeC`=#Y;8uU^UTb-DzK(;u|?4{q*y>Z0- zlIc09@D_UnMdYO~mxcA7hxOzKh|ohfJEO86ijdS8ra{GH8G6`czv`E9;#Z_-uLJOl z;Vw>hc?7tckwK(~XLvXyOL_LWSrX6}B&B*~L<8N+rHxotg)4(lCvlvEKwaSN)Er z+9vl1(wH2=4X!e-CO8UBeJ2u7-w7xmknvr~FvG7D8VgOZs)(T~r*O4*e4YwR2b`AA zzjz;do&V_1OlGh5PpKSCV9Ye0GCWo0bYXoKz(d6~!%vmR%^pm6I_1hWjV!Osl0LaW z)PmwbSR8&d$|Vy6-(;Cv7kIbmm)cGcyQQb^_~g|)d@o&^w{Hjd+S?ds`31*wPTb~p zzB#7%&sxP4!V0_L`CdDbWawllbaLTCJ1JTvA$INnW5&GR8b#8#4 z$2h`RI{Fz+H@D;(Z^z4w6}%;6ORkpg7nLuz%DVaE&hyJHa#x;tYV_`zcPs{#Z_pYy zzXh13h|B)t{wn=FbXXyqK2ZXfGi@O5AWTD^AO<&|_RHaQnnGb&CpI>`!8a)~eXr$e zKUu{oEmy=eS{x9(QibwAGesmap0F7pH~k6=Po;IHgu+Fz;rBKPiomI^b|yFxh3D2h zDutCt=(?>`eG-;GT{wJ%K1F+sdUOjHfapr##idT26`unn2*aCbrOoraMItyI-5w)Z7DIT#BFJLEekt?0aiHp^} zo4bIsc+` z0+Hi8dCmS3{yqKG;(l1-CwjCHfJOT}(GX4gG+|zvO-Z@_RXKgJzF8PVu z)XpN{@Tqk1)Zg(3ZIn{mKl=OMk0(Zl+~O+s0gi}zc#R*AySEbOuXUtL{raXn17Vp-RPR4bD*-vp2><<>;(rw z=4)JNbXvi-oqvnG!4mKR`{pYAGVT@ZpcSe`WQaD>sZaa!%*{YwwQ{HKan6HqP-h%tqy%u|(Y2`6a)?~;F7wQ&{h+C#N>z~E?dzJm}8V|-1MdWof>40TA z@T;2d>+Uu4oG~}wBh|*n9rT&CirB3*xaF>C&5ZKz7kjm*|}O!Bra zsSAkOIOsnuX{V{rgOc~Cx;FNA=z{y2CZmgi0Shu1f9Z`89a zTO|o_IppCIaXF2O&idZv0oEsLD@1J~=un&oHEE1L0~!H6GIwKUDKi_~c7n}k3iq`d zt(b+gc8Wlx6HIJgrIoz@S%MHU#JyXTE=`|e{#$Cq;q3aFU<0keM9NM4cUx0?2ZLTc zIuasRs0sw){S>;p);-@=o7e<+&M3j5~MxP zLl1T?E8XZt;k{cqAzdjy4Io$XNB!CtzZc^!=#A0P$rgsE>FE!(jY*fkDV#;6aQIF- zpM*7Cd(64GvZN8b{#buVL`Z=pB{Y>f-(Z-%hOUHGk8rW}Ao>wZ(qGNuL+mha;=K}m zcT@+!CE2mtk&r}rqFs^@kWbj#y;jbO4z#xN2ek%1b{kz0fu>n&xF|8+s_V>l)poGJ;${jslEC*h#N)y)B9CzAV-pRf-vXbE7M$^V*3s zx>kckQTYtPn@uM$u8Sggaz}qe5U#!;)V)F}^JrN8C%(B^+qAhpcvna*csZDC5uiS9VXFX?|)0D!|&vX+mD0%mg}zw4|qDPW@=QTP$Espz+9& zH&-9&VEB4?^%DQ-mwTHMxg}p2xYf5!CIh1VLg=~&JA4h>c=G<-##m&?$0XE8{xHU7 zM4XQG^D==lFMW)xj~~(bp)}y*H|Wj)8cyIr3nMF;$)B)LU9CpqLW!RgbGfQ#1_iE=FZLTHj?M!nc1Fk_L%D{9DF zcumM~lL~+jwFnHl&Obaj`3v*gUM`>9cD{(cftx8ZSi39thpQ?_xvaPFLjK5%%=eqv z>FEERt~1r#<8fBp@(hx<$e1`*q38gitnY=2B&;ZR_%YBo_MtBJH|8ifkwPn-=$;^l zAVa%}M1*4NP5!_w9;&p}z;HmS?YW~jp#3Dr$CF!pSOAD+mKO(;If3wFZN$K?vHavg zNj(zF`?5tx_bncpIdbVs9}j{(s`?%8kd@)t?pj*SG>3DQKq|o>#UBYsocsn~&O!4= z8aO8J?oSSfG)=hI7ucG^0$R>)?fzW7Jzfev>rO$q%3`;U5bucqI_WA4^F)Ozm30Kw z)TdMJO9gTJZofZ6sAs60{>#K;@8zH1z3<>UkW~;4q8QC&yDv1}($(g0k2%=N3L;DD z&&FF2S9T-UXk{iey!MRt*^IlTHg?djA`!CXqGmru`64ofBzgvwDrD8@NjK|5KAI+d zQdo@YnJ_v?N+{>0+y0(4?J1WqLg{*22zw9e%@ldo4FgL{UVNdZEZXle+m3?}2k-}0 zQO&agEO!@=FYXWCzJENu{n|lhM(_)3iRaF7SbE>|4?QVy5Ujcda|;KouuYZ>=~IyM zgk^VoJC6(O;d+b#niM`~RLyxd%5f`_l2Wm{Ste3ONqH`%0ln#M0x+ zl-=B2l3*U1V|iX@w1A)k&VtcOo9C% zO*3F*4+H$3VQ##f5kMbupH4>H*Mi+AjiXnpTU@gN*HTTw! zcD5H46~cT2Rh93t>XAs;F4$JlO$%6@1;RO3{`?#$Zx-1b8v+HfPG+8phxtODBWNiL zTw@y!b#?HTtH|0K3?8G1#V`W;RDY)Xb~s-_*6ft^{RDx9`5%sciGF^E7h9wT+$=Ki510f;u1$tqM>RMOU)C6wZ>(% z?UHV3w6IAf5>UZZ+l#S4xk_kUXrN(5xfaAXj;?G^<+5$=PftoDJZAT+@0TU|D`qPP z*MeO_8J7@0fynyu6D+3OOihd*^B)#8&v5&e<{I_5J zc2G18qR6aimZ+#MOotP35YMRH8#gw0Bx`Gg!+BRwc7H2Z11R_oNLvc$C+{ygC#(a8 z=;0-)_l?-*9A7%l+lrvATKFAd@otRr5F>LD{Nbe#X0EVuoY=WN=LY5C+)B};?SI6c zFC}=i-^`wIt8$Cv_e1Z<73{((a<5E zbGB~lOeM?pG;NHP-rbrX`h}-^+Ftq<4ib$j6m)|6356=P_WRJCq*eQ z2@Muhy9pheilVMBV^+)d#hMRo<%mQmlM5i!aeE3>DT%YhiYsVayLMkX(cT2JE!vb0 z;~!%#IOOOvWIRV$BzdC`VbP+mLsN@lwwR5MKUgf_>kII2A|a);G{D?9%P{~61pDckc z`Zr62rcj92{whKaq74SJ9`&WV?x|_oVDf!=dxn02I19s`bkrsW4cySIEz_dRmY_i^2qcTAe&3&PEz%*8uOM(*hchqT;9e zfLHjY+&$~vk<0`61X>8cs10Yd)dO)b?$D}Z9jiaE^mqkUxgdXGJ^|(Haj%biia}DA z3c5Duc!cmp;HxyYHuW&V3M5<&54iIytX<*3XyPkatDI)aKOG0X_s7VPzp(qdA_5?l zTt**pD7{-^u{}{5KxVafwozo?Q~qf9U@i?hLQTmRb8T+h)Sns1b^=ZR^BZ!t$pUJa z^-f5s;vyFl@71);5xvKT4*j9(s`M(S0BbN;IWNt|n46qyKk7B#+!)Lw*cfG5E8~Oq zh4c!incW<%h=Me&S}c%vSouPs#v8LR<2sJ}>sVd_qpJE(r;ReKGgqQPWC;c*Jq9QR zCI5s4K>`i_3!Ay%1Ng$m$L9d~rG?>+CrJB2L&JXzEFr|84^3-@89-#Fyp>EWQ-`BM z+gI!|mA}xL3dey_!}0o>{f8_GH&nG;jAXM2V&5c}xN8I?T0Q1e8qrFDKI^C=Ymi$r z(#$XFz)Mw#Fxd=~x{L>wJ0<7LYy0Qb_q6-b@BrR8!lM=`#1%~>HHb-3 z00>xtr!T)l=}3OI^@@v&^%T#3*PEq=lj!=IF8N8^2xhvJDS@WnoZy+@Dd-+^j z#QU{neicm%ilYK0JfYRjO74vdSKnacY%5a$0+F0Bdj2V8Y$%|#zx2;itn)O`!amvn z;=8ljxBz{Jy5l3<9(X})lbOuEV_U{kWVC+zy# z6B-bA7FAe75W#DK#^X@t5eZ%i1>bJl=9q@$YyPTiUN1+lj*StZ^NBm=#Gxgwe@evQ z(k5LdW7J2rrS$2v58bF|xNV)C`~UcQ$HvN{WotOL(XnmYwr$(CZQFLzaXRYQPCB-2 zbdpZ;cGBmbd!H}w57>Lnz4n|nM^%j)1JGsYC3Ni>Yn6<9e!J6PIEc-eF^EBD{qm`V z<&V>uE^S@YLVFNy-*55AD(`@)){+*Fai`FxuKdS~G8`O>72fZU8+bz;@^sn%J7@xM z%}QD!~0HuAqL2lQ{$Ino#e1-HW&=iQJH6UK%NgtjMT8=YiYrAzQm z-s}>v2b7I0WLHtH6aJ2Yq0&T7e5!&`m4Z~|yw1)O1WIAZEI@mXOmzUKpn)|aQWUaB z1)l{gs9~UTziN|NoMtM7iXQu}O4+F-dtq+RCgWA&UHZ0@wJwwIg&=t+5+OtT+2@%^ z8z*^?{iv=VE<+QqfeoaxvfIIkW90NUkXcq5wHJh_NW3b+-IlsccN{ZIR}T?i79$C_ zD09u^+O~YohjG}fBl<|R8I$$1HsX_HGhWI2N9p^UQJ{Y|#qqSEZp|FCC={Iwwz1lh zw7Z)UWJ`%Dn(gd-K-|on*v**z8=U7(SGiWnwS25Dy6tK9#8G|l75V}B_N@w?`qA0O zw6xyz6#oFtfU5BPn{%!IOr}M5c;y^=71eD?WfL`ot3g`Tp|QArjQ*J&kv5fRpgxJHej=$@zI*Cn$fWfI2>WQqkw8jg2|(Z9N9hu;)q19eG^oQn{P(qFNJon;_}=hI*a zWN?t24TmL6*BJfbXPeS3@7TfG{t@#SdmC_Y6Zk#rhJRJPo9Uc+p2o@)wbf;^YcEfl zhv%n)?FCGGy{%l>QW{Z7P3`Sdq~h3OMS-ctEnB%ucDa=LjO!^lyq!X7I^w@7?BBBy zyyX+=145vp`!Se`U?~@9eHDtH$R4SqX)AXO>yBm7Eyv_z26o1hpn}=VMhebX$(#<@ z2rIzA0Vf+0A2IOFO_$64WLAqVNI-hConC(-pai2tG%tlnHkCZW{X%JDCuwQU7qb($ zpzH3X_wISo20SmQBZEWv+#gg){+4D|I)%|iDL!znPw27)7nT2>2n7W!6*Brf)6!?Fhk z-D;6LXBXMgP?1)WNjQwLMo&4n2@jV^yG)y7`ZXtVDhvyaHhWd!{OeY94f|C0HMnUoyh|EdRcLmPM|J_9387vh(1%Wz6unG$C}GUe!ad!=nd zyHoL=Rweeqz{%i07PDwZ8OOMVcanjZr-r*4fd{}<<%wf$w;SK=EIZU zEV5!O;EZ8~^(Tp-ZuFO`ru=8g0KM~5WmE*wsv%3p5V4*-#q(NT>zedAqd9@KgIFWV z&Q4e0ke&&KDU1RV-zekM6K=Si+lOZrJ=Uv7X78*lnMbR76@j&Y%ird7LXcKuLH znG!kZM>WgYBzQ=+*-VI`l;_5Q>1l@FNHs5tQuEFK=a35?B3IhB9rbM(_?@{zoms%IelPxtyux)LZ2 zSZ2;6YNQ(EqbEn1XF{foCDd$c~D-6C&^537mAttOd>mPn^aPLrKC zDsF(#d}H4BJ*cb2iPpXV<;*Rl3~PZ-lFFtoXC3_*G+myYV@j}}hjF0y$S1C5malQ= z;tkobMlFzwfd?pCR*JU6W_sAvDDWL%vKBS9ZDW(6Mt=H-lE3b49W&=C1fFum8)WhN z@D4Z_ta?=5fBuQTaGn3@4i!!Nn4QDmm#4OgiQSn5Jo2#0Fc2{AH~jR1Mr} z1t0Wf{h$<_sS9S*--X$yav@<@3&00NIeE4FsR6hFQiGno!3^K^v+Jki_R=+r{46)_ zOyMgQGqz=;ywuYisr2NM4QeUyb`D&+yw<$2Ro9*_E|JOg6f`v7}Kq#DGwxDwVjhtao{oj3lE zL&t-MyI$waXW-;+@uEHym`(|jl5m%`Tl7DM$a)?fbsRhaAF;2VxP%>G(%!M@qCl~=1G+BJX zeA;&>5b4O+j{oTi`w!p-GZQ8iKm=Z*WioC~&#;kk&d^kuLW&7O1`>F&YG&g%VB#tpvXB+`fD6;_molz;3nB zwIy1v6Ef?IF0B23BioNf9A}~n9G-)AwD_Eb;{%%M$H+TX-y{X5K_Hfyb~@HPH2F;E zLYo6Y=m$Kj8W^jpJt8#skj?JcpWZ&SHbxC!d?N$-*S68+?Up!xZ_nUq@ zx-L$bIL|Au=##MY!b$4f9Oiq5%M}$d-fJV3_!`dT2u7r43HQ2=!L2R~kwjdyXb=Cs*4; zE!v1t0bl`Z^a^lu-hAZ4)21cRxQZT3*&1qi-nc#i2MqSe9myD ztMM2)?10U=d7w+_V=#F!dwdZ781R66w?_AeWH%)l!>g*v0XfI>*OLzUc%sPlbj^6p zMLtMA|1UDsZDI@DziVT08 zDg-qaH@Zhu+9i)qCveU=dEJI-5P`6K5@{(VAPz?vbTsZij<67R6uRO{NC46RCxt2g z)9iClINd<=p!=``ep+VTsI6;@l&c=QiXRY?Fmnn{4?ub7qNADQXL@@7a#LMKo<%3+ zOXoqWc&0^L^^wDKS~2=AR%NGDr-1sUDgQt7jvRw)&?G-gA;XU)_8$&PR9B0ODZV^& zCaFy|O~8&iA0@)-#c;ZCs&B>=@MsD#slgWE9x4p`$9@2Uu6Rj^Zx;8q;jX;IC*qN- zOQMSsiU-K^Ci`7nrX}kOt=fE?H=S^s$3tD z9KM8Bw|!}|xvWAXML~?1z+W^yxQ9*5rA_%eUqaAzS7W(zuGU7KLMnWsjepdiy+czX z90%DVG@a0xM1=l?XR&)Ns%7!wLU#f8Zu%&!^ddtuCo?ul1TEc!l;4XVgucXX%?IYK zD6`70?zPpS)R*bOx8UcAN^ZuvU1}Dx5yCv z6ril=lqwkV&sP^KXMq~5E>ut+x?$fper>z@QYR5V0W{q!&ZGaF?yx)2IT zYmCW?p26$<^(1p~d?0Se7gBXI7c_NvgxiP_^wG$Q@%u?K&=QFn%B_P)TxiRbBJ;oF z=K`t?^JU2HDL`F>H$_Su2wVsp(}_H#v>5+fdhu+NmME)VDQtJXdHX;dp`|gSoS^l1 zKr*jj&}1VF&kkhXb-6tkWvVpcW^mm@W#j?LVD?Vc_<-Gkn)8YC{afQW?3Yn?S5-O> z(k&Y+l3+L}=uEHsAE1B%fnM)1v8J9&+9?}oeo|56giYsJv9l8Kk-=kiW^2Zcc+T-no z7bEOHB^JYqEli>pB@ZnyHT&_ZIN|Ut(PpyJI2V|BFvnv=JLzkGp>@89kA1c+bH-&p z2g~_)z6Q(t?E(hS_cmkL(DjE@Y0@S49)3}^c|~14q(C^wQ=s!SkRT^9DQ7=O6eOJI z3=bs0?xYVQt5xCvJ@-itTkoNHM#pMMO;xzJgyLwSMYc$6FP63RMOfO{XE62hzP-2; zY2&Jo%U9s>V_*ff$bv6Zkd%zrXdG^y#HnQ8$olu(hnCcU_+*|vfNJG9Q898&a&%3{|lBgY_GE1@L z)C(TRu+wM~x^#cvidX7eq(B>V0OdK14r6$IUHH&a!R=*7_$N-eD-CGQ6HCu69`Y`E z55*if7K`UM`HnjEEwoFm?DY6s;X8n7l%iWa>fdF@bIJZqAcURr3Q2ZB{f1kb1o>tA zU{^06FRM+5qK1K&hC#Ibs{_^KDo^5sj@0`De7I@O{59bl z_hktW>Xm2c1#-(4OA@>d#k^p3#R*8lzz9|=2f~)0y=$@AGzQb_c;%ePVL-ZzP@UYB zv`QM+&7?CubQUeSUVl5s-xzl+F4Cgw0mF!OkrTt?!dXbT7f6s(*kgtz6~a`SK-Q*R zW^oAh`f{-MI^3Zc225@gRBzhcD@sWrLV4$H6Z4TBHLocs&vEy{aRaOg*uKMZcAA7sEG2S!jPh5Jx;bYU)2 zhEyBc-UQiwBF;M9PKh&m&X|feL0iUNrTk=iMSkJP#cwz+yLR`HTW{UA_9=_1Z8S+e z3~%1P5KCmO+{`Cr{AYs94#eQ#3z}6HH7+MQ@8ze7O!NyTTWPHQ+~x3Kh=QQ;{~6l< zkKgH42tm#in(zQon|+=fxLCHZVdu|1)L=1%EKeu;ATb$|{hZ^fzIdG!W5awO0tw25 z!uj4vHSBd#@ix!lGmF*x zL|*QRIRex@aBMhXY?`eY31&m8CC;T|1M`xsL&M^ca@k-F%p30!bft>0d6z_|CVeKi z>uH?KgwDlf7G00H8NH~PVxyA<(QU7iXLN=S-S=ki&l|rAY#!$>%VyhE)FWf>c1>{I zfiGnA`(;fE<6Pkl7-m6*|C8046ZIcwm6LE5$7FP}O*~TYCTU~0p_VB8H zjM9mxhP>c7x3pg!lhv@xJ%dd?ki@CFjJKteQ3Ae0Z6mNGqSARa zt?GFET8(ZT0~SrdkGJUy=zK7Cf*duBF6ID9oB6n*mtO>c!Waz6N8x}*Fm+sn{eFZ_ zPmvmXWuvWnSJ_N^XoSQved6{rJLL#^sk3So4y@)5*AS-H8WDg~GyFQ+S?0n_k)Dk`@$u-=bm0^4vKqrNo=od z$R`=vd++kVK>a8D-NRM4ZENTnU_-z# z^cw_z6U`ONiWTh6%{ZgS`3^=IUmtI zkEscM>o&P1l*skX`Y@1^Xm!-2$da3sjB^J*o-7S>8GDG2>IiTlV4X!{Xu~ua)ih%+ znPg~v!mq7jZ2`N5rOt1ZYl-q)4}fd9qA{QI?Ku-)@9vW$tZz351Eci!-5tYr_R{05 zVnUbpzE-K(Ke1gs>HIPs5zwK9@HM7YuvhHePY|L$SKmKQZ%jwK((Hgu3?2b>- z1tx8FIL{g*DM2F`Z3sNSO-X$}7go(G z+zMzC3|uqlT`890Tg_KnSUrAQ=AS+*(&J4SQ>%PdEpT(B&gF>AIvLflnp~9RQ2tB_ zR@sg_B_;O4z&x?yiHiJn!LnB(QQa8HOhR071?xXeYz}cPEN|0oe$H9t#V@ z=o^Sleg8aln_lMQ=l=j%SbW6AK!aUuaP|5Ec2Pq##qS1*+ulew44GxNeDrZIC=c#E2Ppn8PB3WKeTU%y9n_1hZAf2Os@@^HJ6|!7Wy+kbI4ZPCB3Uak9 zW-ctcT;ljuA4WEJ3EWuWHcg-w=g2cP3!3PDXT!5$m0-?B{PLmuyh(+hoFX^Dvlf?- zf)S1&eh5gNj*bW?&Neap@WI9-=m_+D$TwyTn#NGe>l89pMql#hEe)=k8qBelUnw%1vOmjFcoRi{Z1d%GNz5T}!|2?SlVZow396cJKtP^jfML zn{xo0TtAhL;1Y}$5-x>Xqk{N8?97n{1d`@+-|x~e0$**!>bZKUHHo!=V{Eis!7%eK zOt1lRse)@l7Z=s+hm)q4zp9p$`-KLyBtifFhL6TbFuo9}qhD-+;pA-qZZk>F*~ik3 zqsIJhcI$!icwv-q3&({1h!_%Nj(Zp^~b0d=l>dCO)50`coEmhsSVX;kl7nFq~)tc70g^+JbS+c;F#`>igdvGg$y7 zy*9?nDTUo-E(}AGWJ^-oR!DRskWFfJ$=xI~BHI9q!jOVZh^7UlNZJs{yNoWb4K*Ga zn&)%{%-hrq*GfdC-TKq_Lz$O~?FVy?o&K!H!2U>Yluqj4zHjbu_DkHa^?Tjtv}qj! zZms#7%pa<#GrHTa>0I>tt9VdeS9-3Kw}_$FtXB;4`juRHbXdL5ij_ zH-HiZlb{v{-TX#7)0Yy6R{Ch5*?*+nYJ`)Qcl8ZC5@E6$L6UMfXCbg*(oPQ=U;$(M zBPqs0`J?=3WS)>>5ay8OB=s#jxoAlv37%>J)^VlFrM+NLbgLt9bIHu_oqtN`lvQ;Z zT!z3AA_`u*F3HJu#x=JC<6R)EPE{{jIW|c0tc;tDNVA|z@u#JTUlH&v_-agb!iE5- zq1rGzH$dK<;?tKdRqX$%(;Spo_~H}d7O=TX=r$Q9Au08){f&5RSs0~krt#sTg)X6; zfB+A~Jz^EnDZEjGe zI2@dvUAG8%L~Yc>vS_L6AaaJ%(2k8N8;<~hP253QNq{o^{<`8-uPfvI^x80oT0`TU z#dw_V>*I?*HN8AGGb2ZAxv}Xp6_Kpe2(7=6ipdSS~ZY?0K^nm*8p@W`xL%`u77nf;+AmUildJ^IgA zXERMa|XVw*${J<^S=oEprtkn;v=E*Z0Ng5?LwNX6`colN@9$QAm`@U`$ zVDoPosHCqbAs{*QZ>|2&Xnk^}8O*TZ;o;!dU=pU1RHPJ>;ka9#plo3fXxxP7_k<8C@K66fy>yz+{Ij2KZQH6Mfh#4N@MZ8HAolt|XcF zC0cwtBARE{-Dm;Be}<>=5>L%6y{!u6{A2$ZJ3s>B&S+Xm*14#q_!S>Ew|a%tKiHw$ z@WIUjp1BCJ1tgrZP=YV`j+H0|ZAPv~d#w2x_uv#fg9;HVjedEC#*Y6plzEO^fldrd z0uK-8YJKk|&X|!*T4bgD<8?;Y)&YJQFt29HUnVsoZ4QenO~HAFb1F=FnO&noA)MB! zZho-Xt2nAzwM$V|4NPjoohw@|gntAR7QSev0n+tKUuVC!XzCsvv4idR`eIy(-0W?= zPM1G%DH+n+FCal7l4*tGb;PIaP&YpCkTzP!CS&x`^Bx+|0yu`-=%U+F^c$$sN;)q7 zORG`Fa)2Hs=!thQh!#B5Z1|_VWQJgC$P^^@QHF!Wxjxs-dbe%dOb)^e@q;9YtETBe zPAqXCy{bl08!CD7qJg8V2Gt0rqV-dXBY1xh8>S07`fB(b-RwA`L#p<^c0Nr1uL-<2 z1N;Pq`Kz$FVWMi@-pMtTzQ&~PooqVlAlhlyca|aU4rw`aSzA;EU8+e|TyClj$ar_4 z#O*`7mcG7!yoKRCKy_0f8X#iW-^TaYzTXKn5x)tn9i0Vo?Nu!2|D|(j+38myH*@K#Lhy8|>BG-Nd{261xnRq}bYoWoq8K83% zkLat_Dm{5n#Cawew+rsT5k>v!_4$b+2I*l$j&wuv`vvXK2kHxw=LCmKxa6%5c+mU; z`QFaEPsZUmk&h(9s#L@IV^*V0F;H(I$*P)FL@PyVG8c%OviB)jY0+AY3Kjs!N|;xF zNrs7Al7YlGLLFQ`sq0hy8cOq)!$}=;m`(%`&!A;Y>DEn~z^Tn>xo~

}qcDf#p|9<2N=bu4D-BYQeU*l8!zYzwE3nB?E?eN&HLuCHAM@#d3V7{tfRoc1{d2qLHb?{z6DrHW#tYOyf3oc!j%;ytclaF?Ci(AVC}} z6NT?ZS#vK@D@@ozTkVz9N3hRE&xRY!AF<)iMJ;+`8GG}7IIxRmRjeARtJ|NbF65v? zo4;*5F!)ZHCe~`o@}QpJ?Ojga9GPT(_Qj_;*bJX&`T$;Isy}?TTuY`HZ2Re9KxcHy zw$tJ2DKwBO@X0fQ?-3fL$#AVfp@P2g_~ewJ9pB#EgvQm$fOHb+(K|qL6l0IBgd2)| z6XuKV6JMFvA6$1zk|{uV-42c~Ldj($6A(k*8M)&oJ~BR3G^Bs7XkFcAY6VKGKWO%) zc>z9h35!$1zRPnhslCz%x8q>PL&i=(n5;c3r2NogNV5Q{+1hBJp}$IdgbT|$eOq{< zQ}ZzQvemI!djFedbOx*1f5FE8t%V7F(?E~zP6Z(dM)3Au=ijj8VkDxNxaW_xdxcuz zA+L0AU<_g{NUUKAwzf8z8;H=Mn9W0HSxj#$jH~t?9~0^+h(aeMY3N-EKITDW0L|*B zXs7_RS$r=Xqvdl7k;66Wb0Z36^S+G3O6yKmhzmNviFTqmOfCutn$@Jr>|#TF53B4x zbVrSEc5yew^{fSJ9AY&U4M5ELc98f(_f=lllhf?{GYjh197q( zJ_JOx+CeO3k`#tj3HTG{Fid+z%FAf0HNdL|ncdMAh3a z&z0P`hl*HT1-gm$?GcusIMjVkrOFR_ZP~52>XoanrUPdFX0tB20d!h)!aC^QM(=8( z(*K$3^3F*s*qM?i!BZ{z2XH7_BmYyEEGGJs@Qfh3)ffq=hf;8O#fpr8D1f#NM|u*h zWuYWNn%~hH2z`CR1%Ko{mu@gMm5DxD@Q4XbDx|JB0mxwNcattO=0tg#gsBF&*J-vt zo~RAkX3q+mLvkg(&u=R#gI*&hB2+6DgjW0D|HQ(?U8?8%uD{AwIj*dcJH;195Xzz6 z#-?eN66d2Q@_WnT`wN{)U31(Jz8aEwk*e)HN2?pZ2AItn8*}QcB_C=iujAn+9#jpM zGr^8TMe9Qp*ZOabHvqjQ_3vLdcig1qAU;a)-ydFfki@6}|)= ztGNss(&(s)V@-}DU`}LIQOXWSOII(}ul9biTaf8XvY)&VQbU-fl6#=RibLoH15j+e z9A>_BBryUXSAZX{*A_#(^Xc>coz%beQ)6Bvqbz(%j!<0UI(LzgE} zoW+}Rfn+44kFZ%Bdc9w`FYb#N4dC_DkPAxKn9Jc@9Kylv8W1JI^J0TMAPR>g>%-|8 zXoHz(QrsjowJC~c)uI9O!avB(SO$i|eTxgb@E5~!Zvaj}vA-oOm03VK42G~RMTW79 znNa%bBKRDG>nOUTwD|7K{D&rX3wWK% zDrjFO_v8N&EbWpj*r3)7JXlVEElI{L$kG_E7cL`qm0(H!@ixOD=#~e*1&5fg?F6wN zc!xAFqmQ`~=~+AE1n$V0|FB zKo{2cpvgx5UZwn6c++Y#Tpw0<&4}m zXvE9WR{*at5Vi}s?pI=-`_-&<F!%#pknB z&NmTyu1kDGIU`O z>9IKJ{G)d0hX`^#1U=F|@V)(2ccc>(Kf~F1p|7E|4IDV4dp%^YuwZyYa^cKuSG@tm z!pQ934YSO)Y-XaGKZROyqW(L}_!uBWW%1yTAQ92hCi3|<1uk*DqIbUSrmeJi+1 zA=rQt{q4r9`obT+wz*eL16}v1?57@wZL9jcvPUPN5qVuZg;*nWMil{8dKQKL(vJiHaqL)YYbA(T-rp?MhY^H3V!DH zeG26}jinBznT~?h-a?8PF@c?Ams5;w8=Sudluk`D>vc!huk9X{gTRnojdt!iEXA>V zRGj0AuCp{I_hXJ{n?PFt~ILIusLwD3YGy?lkI4}0$T(y?{vBS%e$nz!x+ z*~eU@d1(?A{igYM+>kOG)JXFY#r^yoAW&yp$!TJS1-PAz7ctyG(_PjlId%(2-UaEz zRV7*lAipDsm7-p;FCDj`-zojdj0&ea^|@V-y&?nPoCB*LonwgpsJ;Qvc=|AYMaFTi zugLhRQWgtDam!Xu66{Z8A5?Fajc#+E;zn2tuN`p7B1g)EZWAOb#o~1ad!Wy*D9LH# z+MhV0fumEavf>6X-mMZU}O+!GcR@f&M%divVg?GII)i3pa zw}!Uo(Jw1y<^j65-U4>f74{hwO|s39cl?we-e0FW{9%?g0FK%?1F&Hha2d6_gAIPN zP=I^i%^SPZw{{DiZGUSm$17Jl@btNVW&j*2N5aqM zbptlmI=g|Dp_bU;L(j2E7H5-17z*1aI1LmJs6*`=acbt1!5JtrKm&;y+on{NBpNeg zIYi2}TtQw>mTbz{np$Qp9A=z+em@|$_-bXr!M=sCm)w*)h)c_18^LtfoXv5)EA&6R zo%ohyJ*WBj)0Vkay5aTVNmGlur~O;xzly()EQ6OoB596!z80w@oghs6P3bh}1}x9zesOAG8sVq^nj3$-|tG^<(FUSoyU z%UAAs2EQxdu6!=&vU3Oba_(64pj~_g{jR$OHo6r1D&hmo>Z72L_79+Z!L28c$Q5Xp zTcfPN@D~WjC&p1}i(jOPvLIWVS_5eIPk#Z#jRi7bb~+D@8*`yalfwi7mv&){@0f#Z z03-tmYu-XJc^hcL3|XGg_C8IALk7)c>>Ik#6z_MLMKK|rrPXZ>$%^X+lYm#}%VD;H zw;(8Zk$b@Er+M`3ECgF>!c6TaAEnPyP6P&oG90L7Ga8r9`-)a0Xt--Z5)0k+k*R<<|DxlQ3)A2aq49ZgBz9>)s(|GwbQ-BFcL^slQ z2e1Q}P-aNYbd~n>K0{sanw(Ax!Eoe5QIZtQ$&TY#lg6cK-`2qvgd5bFJ1+Dr3(4Xi z!c8z|X3&^uO7hm%5@+&YYtt8HEA~}BA&T<|fNo{&ulW{g^#1&3pSer1sJ1@42mg`^ znWeASyhbIXtRnInucCbs*1f7~!4-T*Wl`1#@NPrIG86aj3KRI`{vNkMH^0a=PJom< zz7zyO>lFPHAguOfx(JJ1;i=}5t=!@o5T>k)*A1_yDI|bEz$KQ%_Eq~(!8P*H-A?~s z*(NR}<1!U4nIe|^0CdX7nq?}PPS$6g;*HGH$jPOKi}fs=5_{%B)TV>r7GeB!*S`5V zO!>o>9DIHOud!V^UL(jN5{mm3Q&EYRgf-2KLR(yje~MHt?1d2$zb*JY;bf%x1XN)i>g5DQIH?iOA^meC4Bj#m55&+%LH%@~uJ z<-{$z>hR;P6hX;tRgZAPL>JvmyK1qrTTwu3J1MgV=gGM}-1Vn5(XGbvPd&^PK=j2T z%nq33I$6Dlv84S8ZJ&Uu)3Vi6`>6S`Shm>p3?P*!`jLq8)!+YQ=Zm~n_idnvBm3Q+ z|IH%J5n;L9A3HF>5zUg>tMQb+1GZ~rJK1gk9w3(`m=}r@jT$#Sj6(MV32l>;akcI~&NZ+B11z7RI{~b?^hd?A1JMYM^-wp|3((VR1CudL3?yS>+cA z44X}^)#@sYmGY*7JfQeJjgz^*?Gi2pzEnqB)du*{U2N8Gn`cC=nx+(<7d2_XW2Q9T%lK_wzfq8PJ{JU8%auEj=%EA!e}`Mj)l=lEmztef+@ zoedWBbY7f?mTn9%KLngNJ^Yj=*T$*|uF%J*^wsLLW$|5R76-L=R|0sWic_xG+QHMK z_lpp31nc|a33!Z>xc%@DoqSQ+`>o#S0Mu2o@_f#}^4frg8ys_c8rx z8-Uu3c`Mq4R+zrS0IH}lCyPwZrfvpvOQy!n_B`jRFaLFxd;?pZoFSUiIXG#ML*0(6 zsd!Wx>8`)JSnzlKlQC9x=OIwt2vtft#HM9nSR9|nVsVV8CesyqYt-~Bk-3qli6#?e z+q`6j=sFMM{D)QauNq8WtIRa*)QKJp+ZcT2->CD1@bN@``?-S{)nE_+lrx=H8yQ1%eRNbwI@8pk6cbdzje zg1*k@!2aIu*;e|t`nmd*3CYIR#s-F#rUn_wmingF#@3d}nbx-P>DHEprl!^z)(MuD zme#4s>^m}9NHfmx)ympqSZiYpXswx6)O52@Q2_Vy|#y&^?}JJbU$d$++r z4IZzFRUl%6x-L#2tg>oiSo&e*Oq4>um3eAI41aV^7D@r=ac+8gRfW@u0uDUIgn~z0 z$^!WEo>{8S=qTG`(7|i-DsC0-t=1CP<`}E|8=5*9DVMz06IIb~gZNU&^qBVN<(f=) zYKt;7%DvR&eJ=voa+%als?G|I|BZ6^h41^_3vvZR%;`CBz&H2owcgGkkHCu1dK1me zfCP!il8OL<#0U>dMa#s90*T0oA3q{23>yk83=2sRvNWZmYs{GFS?TNPGk+gr0w9$j z@x*_{iT@!D_VFk-Wj&|~hDU}bB3oyR)Z?=<#tz&_^g|wRN;Axz$p||o+nZe_?dj8N z3K4%>A?X{PFlrFy&kpo-NSbQ~HR2%vIolBC#){Y1F+_5JNV+*Dk1ZnKd{NBmcGN3A zAbe>-_3{35-GxfbPS;$QohMXzCP9=CL&PEW;t!DT+HtsfFdf~#A2&tvYmxZDXYw^k zzz2}qP3Ga>IvL=A2oOZPWCiRD{QSB$*F7BV)^gk^!mydVGf}Y)ppE;&t_J{xvd3wx9Qq-@N#P<4`4mA53 z+cZ5+F+Zj}k%`@aHZjQ6rGLgT+3`=ZU{ClP4I2@sG1fOpRG_l_r{gvi2B=)l!CSAai&6>y#k2l@4aIV;;t|h zd;bU~+Zs++<2cZDT(;x}gMP>N+@EH#!uhT`WMGXrnZDSXG%8!^qOq$ZuFH`YOZhWh z=xdg};<*A81)Qf~Oz{~5?6QfO1s39NiWc?#5*BlBQ_AVjD1_WZdE}aM*NHsm(|jgl zx-Gl!DDI+XmNocsP@Te;yor0b}%QCayi_5;#EGJzHz2 zA=>2c5&nB_H8dM466z})8Y~*>3rrF-6eJrmLJSleLMluOOH3*g>H{(|o(GmWU6r7f zlz@%;W8$>Y0SUno4YNO~e9`~aK}h~q->~HRog}!WuwWk~>BikCVY$kkx@GqqgjkmU z;i3E8uYoBjD_7jhG4p=qIA4AZphZdYjdaH`KBmr=`Dyjlp&hA3@kF z&+t`Pj~d;&m|QZCQRH-xnqdrF>$_?#9?FRx{y{XeooO+Hkn^n4Eq53~Omljm=6xos z9jb`4wY7SXn9stM+Wi#C#|Yd`w(U%*U0rYk$0O11H^s^Ymj z*cJf-fVMX0)azV64&WUA_=m~Audb%2T+nrX2QyQ?*t~$MG8=Utfku&iUgehhnfj%+ ziI(Pu76#Ua*_p-$))}d$mhpxLwyB26<`xNw$$u|&(|GIDbaQTo7TI4D%L_9jJ<mn&F%pKVBn&69fL+1{Ld3A6HKiQ(haR`trLw6 z4Xn*gQ~&O1Lqqdq!(3By!%WlUzvw~VI5jhs^?x6s{Qv(5{CkboSA-};{-{r=a4<|1+5J3kOh!sVM8NYA zabo}|*ofg5z#(?-*qdlfkKhYk^%wA$bt$B#RikgfQpcU z5Q)D5ts&&*f4?XxBCY{|UHt#!>KhpIikfa4vvC?HePT7XZQHhO+qRvCjcuz@W81cK zoAmv3|H3(Y@0nS%fJFO2=}wIJFrq;C@<}!qp3c88u-9zx*l0`euxbA0#^Q8$TD-X1gpk!6gL}L*0ECN{a5o`R`0}0!!lBr6a5~c?0 z*R6}KE||4fI?PbVyGYw3&S&y%tnJ=@g^#Yqn4VD2b}z+iEIgOi3DI!q>+bzKZIq3k zIZ8d=55&_4ot_J|JD7O(G)nd*p~zxA-=!p{QERuxlzU2Hx9UR7A*7{Z2~0t;1f4yxN07 z#0(dBHXl>!ChgwbW~Q0tMYDikvdy`*c7S1jS{8YvGJ+UJMTXor+~(bkex(sQ@K+E+ zyqRC1%hi>WhtD~lUH(@w?i4au6`KqD`+m=l<0{=)-Mb4^JnnswI-LZ!b+2_^{v8_o zmoR@)O)@{iHxnmiKSU8uPmO6B5x#7I`RvSDh5w&Wm-57lI4;}nCWs!8nz`6argW~{-bG_r1jj6k&Uqj%} zmG>@%-A^)8vc$s|fVQsZ>c53fs$)t+AgMi;qr=Ziy>2b9{-QvpgnXoByzs)?J&`bo zt{5)_x$v^CORSNeBxtl+)8}3Ut9LvbqIl@y$0N8aZZR-?+=iD`C1ZrB(%+^r!=ywv zdSAFC$m5-ykwNlW)q|=9l)ur|6h}+BLk7*o zv{h@fdRyAFv9*&cn_2BRbombSVD)4_0lx<%uYOOe(Gm9b-7i;dnPkSvOP_6^;`or6 zH$lDFwv!nXp%xbevee7umDn5e>or)Hg~s}h)AP}g-r9u97RY-5yxR11VpE_y>Rxlo0JEO`1Fsp#m z+?(5Z_YZrn=@C9+N-pnsBM~n6RGf@)emE2HY-$y!a8(@)CQ(9)A0@c^(xhQj;LJ_q zM*{|>MPfk;JhU$zLVWavMiXuC`i;q03lrq)M5u&1ha%)WLk+T63dmfjcCe+1Y@)JC zvuhNftpIq2q0KIRG9+{^M@tYZOlr0?ZTG|wZE*ML*$si)rybjOO)~4hHvFUklB^RK zTN(9x!uOJjZ{9RRu+d)c-#w04L91x7M_y;Rr{P+lWvt1y%{qW|o|UTpr7?>CooQe{ zBs_N_Lsn@6i3obXb2!9;#>NndXM=$G;Wqcj z)N`r+Htakejfy~Oewr+O~qkIj-Z!W6wVLy}^!~1~= z2z+1yB12MQe;@;NAVfq$upS1buuS59F=*PjlSg&g8PQrBxyc98uw{zM5+839A{p~h z%dQHbhqgCH#nQqlTdA=v46lHZi1aZD*;fl0-{KC-RK3v!g){SIL2x~(VR;l)*&(}> z2|Bx&+>mruExeizXEZF!Toc4Fj<+EGhGiBA={?+=X?^3?)j^EGjPkhK%QExD)GZs0 z8v*wH^=jey(xE)`QZcCg2w14z1-H5?!(fn|R^p{T z&R*|8c;<9#b%;=o6Ah>8?>kTpV4c-px7OdlWAuzDhUkB_jj18kwB3sH0t!Lrm;B69 zj^vc;tTr?0QCLOc$;;Tl>c@Dc@n|G%F4%-uvFdNKa zSefBJXhueAKbuBsKSB$qU88=Cpc;!}&Vv(4m!u=urw7QMB$LmO(U@h&Q_v#|mA^uU zLL}m(Nyd>EePiLdL(aq6ncKGvW;VC2nTddd-JqFbPMJ1kXz5Qsyy^0l`|NBb6m-+-&!zb>O2SaNG z0{Gh;YgKy^nme=h00fne65f33t8|bbySAF%mq(E0#!>Q935;_Ld3<`wAf4KCZL znC!)b=fX5-oqUj4@QRzcCE)@STsrx^r0FCQNKZ#Eed$QqSKg-baGJgwdY(ers0ko)=&PEQkY?Pe&3E2ZLxDNp6QOsV6pj zS-hS+t6g5-zh0#GM#`OyH*g)FewKb4503~X+ym={2JAyI$|2ppj5n+Ke0PcnY_)=x zzr%<4@8Etip}ur!{@O?a2!2mZA_d`<-GS0%lP3&h2`TK7y?V>jK5!b1T!kf!8^g`l zHWH;LR~>?pLaiT1G1CceHo86QZmkC@p^BeHB8_w1!&e11<|8ka3qvPH5_EXMobTxE zS3ACF59@Azc|101TWvlpS$qiaL6#KHOW8p8yO(-usL)^FE`4skdvo#fsa%2s$$Dvs ze+CNy6+HPAGKceqeZ(uBy9%y@iAqnKg5Vz^-$7&+d?*v?7QwtbpTMjYWf)t?6L$QO zQ7M0hitcu0=}pH3rdEgC6Y45mCsaCqQ4_T&<{&9>P6)vs0YDCteUq+@6pLE1*l}J_ z3oe^m+Ato59=zGS)-?1K`SD!34SGPFrT3k90ib4Xr#^28`>My7EVm*3+)xMIXoywO zsq=?pt%LdfBt=v<^K(=Fk;sC;bI;j-(y`T8Ai8AABf#O8rIR*h(oam3xxv@g`mz0M zyRW13@AV1CG0yl}Gd3=r5X9g{ADbRTIIf1a5NuUEqS~DU>R`JyR9p2uSFkk)F+9JR zCY-)o)d7dmlNvRPbsw18+`vWU?cvbh^tmA8Y3vEI7h`!tIM{|6cEF+9V!3qWU8QxN zG5Zoto4j}Gu3bU%8f(F;ZC}jB1i3j27k@XLj~%@OzG6OUUIpp>M(#++&3@Urv$Ig? z;ZsZ-#ruzT{I`biNfv!%H$$FFQYE=U4mM{plMc^>P3vq z&3+0ofD>d-JU&`1z)ksmuL0RfUcif-DYMU1Jq67n0I6bwz z1wS+D*bz5U0|3*i3;bBkITeUfuV{{aG1j1UTI>1*AFixS@y7^|&)Y$Go9P`XMV*h8c{H4oXE4EdJd6D?<*#bT9 z$Fr!xDsL#6ak;qPLTmeNxI~;c_1K-9(nM%ChqlonJpkSq;H%g=}*p1#v|^286+0FQ;#4~(e6 z#094KjkFXnkdSb1n{yu^x1T#$fxFFmcY5toC{kZ8lX|MHMUP5=t zYl&7fHNSU1M(gRd!LmHRp%6xH-`aWmQb8?d{b4x%vGw{;!(X!s8e@G2ET3Kq^FhYO z+xR!Mj=|}1Q2c7<=I;Uj^zu9ID-=*I2T++)nDhzbJ5+An9+W{+$? zeuubL3vA`H90e8jiq_-OC=msu{}W$W^?gSGJ#W*in@=P_ztAfn9bp}O(SfCB3jInk zX4Z*EA}zAs0;jo(MX$rdJ3(ohHZ0uy+e9Fq)+K044cp(T_9r_d70zUh2pu{{^qjPl zL;N2?z!BCaHWB(2cANaofw|>H>bBUAZs8vuUFP)Ox8i8-ZPe_$r$lqFUn2y6{ob+h zE2C8_i$802etY-JOVHuw-dD?kzDeAqxR{LS1%()Vu1 z5k|BE8zB-v(Vj*SE2E{q`-&Q@YArd9rDqIK{yFnr{N`?{X`O~QnxY9E_w7?Q^6CCE z|A10^3|w+M!yQTyfKa|@1F}qS<%h&>r$J~Hjd%pM&>q|IxMrS+fwaZL1P~2ANl+ew zCKJKrEUT5I!;rLs)w@o#_xG*9V@R#Vfyn=ADnx*q=P<%b{7WxnhiLWDrvNq$QC{pP z8?NxIG+Gahm^CU%LuE3wx4C@D#Rx0fLkdB!{KIeR?34L^V>TnJ2_Me{rD?OT(d~+1 zDszrjk?)t}Yt331e7CGpHY%@cj1Z(ymGx8^Gi7DDC=ehzNvceexsm z`z|p>CVLj1cNT}&_T)C(c2rAyoEJ}^vJ<^7A(-D^S}JN*S~cd7WA?c&MEL#S*>IbB zE5*(4-u;jjQ!J8_9q;X04P5Km)$SW}lEf30O5H)C?qqQi{>gDaI&GfKEcu8Pp&E3r zZ!zVhjw35NJ^Z5f~LQtumK$ik#%$7HxJX0B!}`0>}vZcil9B@^bO1s z>$El)n+540BDitsrJFaP?(m!BL56^bDtt;dO0WI*2bh~5sXq$ zn~ZUqTV}Mhl^sywF9)WIk`cx+ZIR!`=lMB=d1s2HxFSPwh0>1G^t(LrYl>3gssQ|= zxxYFbdp+c@dYj<=An!|0s?yH3%!Fw1pZlmXKimW(4>q7|vx;+#ziqx#OR)N$tf1Qk z%Yg-Sf^yZKbi&TCGY{8)X=I9mqd>6l#Jl+ldT5LNJrdX*8t)IhL4lUtzgOtL|;?^-m)J%HmaYB>J>KuNfsr?exV|4UK5=;?uMxei;O=U7Bk#g<``pSEA z_>jyk+8jiuKpmpMttWRxrogwm`9?s;iJbso$E2YTNAi|eO4BIIq`w?DC9^PJE^@!E zP~Ed8?bFUaQr@T9=1j4>evuJ7aiVI!eg}&kRll21>qiqO5`_5&;e0M8d8V@DC9L(( z(N#nusvB;=YiY{OSNgxKX>TJ^zEixJ;LGUU;8U@yyNGp@Yy%f%#8FLM_Hkgry3HN+ zOWpwi!uBaRJ)e_yp9$4>^p zy-NV-O98MqiCUS+#4DKQEEk{u@Xh`4xNwCn;3I`xcu=26WfEK7D79anSHA)gPnpNe zXVb8q!vshvuS=dbLz59p%&cWS2q8=m%#M%kCe6oq8>@$ZptS9e-N?b^zN) z_@M}8+ujT|YKF5HBCAv$(XrJN+f=hzY^C2*zZ+@n`)g{~Cpy&odeF(+!|QzI?A-MP zjpw`vqqx6!8KY{i&Rst7og1AB3@#C(?hP}wJ`&FJrw`oZX`lR{g$Hw|(z{G;+`l*D zW8VF6b-IWO*dmm|f&v%`QTa%m@F7^rrio!^XA{tLSi4k|^5MyK<#2`?%sWr@qYxqr zqqRZi8yTx|rjjUUVivGW64|3ngwAMN2=$LUYU0DH>O5-wx%%w#~6*9iQ>&yxAYNt)`yOJiDnvMWpU-bS; zW&Wcr)$+-xs9$$2{wRRxJQkNH3PXKp%G$`U}hrV3p%iY(UZ+im2ukn zE|0;JBUZY`Ll@_HKPX_$jd~Wkvf61)lQd0qg)sd-=j(%hfhdFL0V?O`c$jkOI( z%4J$Sw)O6fOHEqx{GzKZO_d7wzX86$dlAy8^y~lx^Q4uo&>y6EKg4=pLs@`FQ(fKK zOZdJ=fXUit;TImrk5SnH=6WpT(It!WrrMehmvm1E!;!U9n?NNNLtBn0r)lDajx9xe zzj{CEo7(&flP`=L7KtuLxwsCOGfl4F(U37@TbCs%u{+EdZE%L7A@;9RnP_=H1!VBe60<0u$zfQs?;hOY0%@WRlv@ef9sqs0EED7yeDGVRa8J6 zbdD$_8;YP3ogXeJTi<-uE7@_I>TbFe_pYp$drjl(;A4w@vv;K>w<;vp7y=IXGtfrH zW4${D|2j4Lw`w)*!p4^O3hTnC-j^@49Ab!{^GXD*l)&G6|LhIzto}Wh#da(5A7&?Y zQiXRJugJ8LUAO`4U|o>fScLIYH%A0BlL3#Do_SY|JU&T@VNORb!Ju`duH*Z_QmHX- zLcu|M84)u%6;?eZE!Y?z@!h^YKcHq#A)w|uO`beLkLV{iiC$@6ZlGkxyrG0k{Tf8u z`Rqo?%UQB?{I+-tmy`O0PdCJ#jT8nhLgw-jOO)r2XW^Fi#TObvwn=)mMRNQ8N2=cc?AoxF4*2S%x_h=-`+c z#W_LimKqc*MRazkO_kwRHl=65@U0t8%@Z7)tu^Du3*I6DJIL4>wR0y)JS&;uhdDNyw|i6ZBf9MP^36_dn6tHG2qc;OoS<7 zDG>eSfJ0i19-aw<=-@!y@*=aB??;dFkG5X--s6{8!Sn2EAy?0@j?Z6a#MH|w7%u!s z3t9gBxF3JFMnEAzSZU_WodV&QXim^D`U&;aGwD(|j(C^$wEY5S#c+)!a{y6sjQmEd zF>}r59Hh_P-`_{=OQ6s7;gp^EnVNziWbW~Cc7EW#LjVGDiZ;QwFI|x9stE?e`%a<2 z&~n_fZ#tOSY7J1!MY+iR#)t%W^m4-*HoP_Z+3#USXR4{ z8kI&JbE~<-TKnj|F8MoWM_$`J!|^z|^qtZ^hoDcu{UfDglarjq))d(^K&5sE-0GxG zw@5V6AfSm8G8CrD!~4=*5p3Tu)FM()H-p4(DmJg&K4-Q+2UAf~#ek*R?2JZQHo|QN zBU3&5D^xt=j^{=ojxaN_-i6nO`?`4GJ&IE$ur-mnzc^#(OP9o{BRk6~EAa`S>vHyf7{fzrKnRVCXO;K)f zobIdN`0~Y9k{C^!&mJmL6#75V=9!;?G<-;iv<&wo=V6Xs93Y;53JZ(os!sCMZzHZOE9@rTa@D7`CUt* z->c_l;jOhfH5ZYFi09{0>3>1Qa{wQJY@HyGAR?$MuQ$)A!Zv;qurJ2dbIu1wyeJbG zqCi$8qM%5cqHjVhrZnn@!${kt-r1gfbQ9G3A46G*B;6< zeKHU_1unr+m{I}vjZ7|YQNS2he#AF&saf>&yIS6@tyqAQ!5}(tT(p$j5YX$`maV~X znD%QmW0Ob))`}PkOHlTN^rquxS`hgws0e}Tz7amlce9GEhRQi2rf10}=9${GJly$<)j%Zq^TtTOaFg_eR6Y=hUCCHH;6uTw;*z z_GfK@XV?f&kA`VK((Sx(Mx?}84qk%+Y-mo#&hoco-4Ba3#$Ymx8I0k91If}7w~C7x zENYixRtzp-B9|W|ou0^N&Kak4qLn%sj<(Bjju(0nbEQ`u@Q6=?ik=tnzAKRA6UF8E zBO6dF?+t?RTE_QWS-?HTGlTQh7j;xeXq|G3`q>|E-M~P`FU8sO|lq_c+N>xD!vlwt4=@(>)V7dv4l2XF^ z%&8O)V&JR*%qsMLyP|G-Ys~sm*RNKJ=Z|IAw|}h?FX{awt_rqv-i8=+4B;Gu43b=z zqA$4Kp&Ru|+^z6Uq(pLtHXH_u$4S@p3^oSozUc%H@E^7gks*!UT?tBW8#+0sV zcOf-{A>cq&AcRTAl3qTbPOtbS zSu(VR%iJ=?Gxz_KAY_FRC#rSwCRAd@K5wEy0J@45)_GUKoryXk&z=l`c`{$)1PN_&66k-ezh6F3fVMI7)2 zFGQ^@xPh&>?LEh=)oMCxD%k&}@H7jo$#^3JPwrWKh8y;)On>@E0gV~`Fp&9>g)YLx ziT@!c#c#4F>gZ-jt$Q3Ul#tI}-ymq>z}p8drbpaBVm9TUoTC(aP;F%#TNBZh5yJ2g zFlLBLkuoU7*;5q6Nkp{jmmDKp)vM4P%85q_ty>7-LnCQ>oN*iV&o z_Xi9maQ+n5j^<~fiuEHwPOKw`TSlo2)hUE9pZp!KF?q!vE5((5?4Wc*)-x*;CeA=8 zTVHHz8-riPz=>8M?MHmoVzW6;6)Av79MQEpw1&vm0kqGoC-50n`4+HVbKFg0LH@v=rADizQ0F2p=kq z_UJ#hS%<{Hh_%!z9QIYA8ocUI$7Jg3-;8TrBm}VAoBt5=`}R>KN~2R07b3`;hpLNw zOP@fukIbDF8K30;W$%xNq2FU@=xgtKf1fSWIrVc8@B~KnfB@Wru(^>@A7p%9R_ale z7QSMAv-Nxeoav<;ba^1yfb*u@4m?p!@pUzN4{CEq$|U{MoA!U2U!<_@X+k8vkknAT zrqCZ@CVpzy-WxC$jVq$YWspDRzG9n8lEDwzN}!aG>g&w#HH#I)^_Z*TYN+7Yux@qK9u6n+&`vvpfv%Kc{1#(NGC?4T+k@nGyfS$Yd zuYe63Fj;*Q;Bdcz(5K5sWR6V%%RWCsZgXUm^b)}4;gyU^+#I!T34@aB~hkBxIa zNeSv^zuqA(^f!yq{9e-(Rm79L>O(17;b@K?h*M;GqvvwixU`Y69jWdo|KrNfvlnm8 zGI#!x&ECsGKNH?(=YT>m;A>vJk>&nM>x(r_+IkfSU@q^mh2gCEn+PM-wcC#H9*9`2 zba(21z^4y@VT!YOC@Nr!#S!TPV6f6*rUIS%R>-^c@I9*QVg15gz8)WrEP4xqaOA)c zl$*5n3$kt)rU%?uKS%T7v}GRBD2j&&lmY-+4gee~z>B|~&@T-YzNy?<@muT2Wn1aQ zRnwt17`(Hs6|C`(a}QcxGw4zu z^nRI+9K5X^uSUSb2(q3 ziP+Ufu_?iV0-NIP=#OD%);WFgyw->Z@J;)@NC=`+$g)Siz1ih8)>5*06{>$zh+@mvKLIPY0}C`KXGoaa)k;Dz)2P|XGztc)xBOx zd(oEJ&Qg95S=}q-S-f`XyHoT8np_e``3Hb~HqAU!n#CJhIo}0G8+`H(GOC$%$jD_8 z)Pu%WxCNspFFQA%X+R1^T_qiNRTyFD^~f7G5{RjqWI|EeJD)C-AP5_cq#&+^ zAoTvS`n~$*4cWgklgkk;EN|=o=hR1UDcI%s8AFTVU3%bO_wYGN{hdJq&qao!;_H$S zw#H)dnruhD#ny?*uSxeKvy4YD5O(p|<2v z;oN5+Q^lt)*TdM48I!r%QQc!HTUk70#B~pj{=r>`)plNyaWQ=e-&u9}c&F<4>^1K0 z38pt8;YZtzjF{JIxjI1l&fT63{7+lxu}?!io_~UI zx<^w?1lh^RjRCANLS*&oih|3xFkzd=wJmc+&=6J^vK^#gbmToQF!5@eoGp&{)8=r* za5ve+W?rT^!CLzS4Qiw+nYyKellbGX!LA1|aitrpUb#)CB44whQMys+*04^GgT>0= zXMt_|^dwVwlSsw^=l0;Qe;*3>;%df6ZJ7jmnhJftdogF<1|BR>tNramHzho}TglCT z?tlO0K<9QocV8Ytf+gUv9Q%P6pQHmdK}uBU*LM^zzCrel@u1RV*Q7)TQKCtK9tL@E zMO}%e$}~oBk&>L}#N6L6eH7n=Q&jTkcvM-Ss7ZlF9Wr5r+x!wvcB(4i-+#Ks%f7TT zdp=G8k-P;6{rYvTd2}83>~+l}5)zB_0PlmalD%4%`u4u@jnkdIJepiuJ3Ue>%A%h6 z9=y&_@;(OPfA4Pf&WVEzbL&EBvpAnXa>DynXn67`8ZV)6jp69q>HG&&O-E_n8fv?J zQNYCGYvF#gu;!aw&Yp8;!(jSdu8eH9#_#tpO0b(h>cIDsQSzdB}#Q;-iuvXsCOj#iK?1*X~Ls#RJ& za9KjW5_aA)5xh8z+hbw2any78`dVb!4*X`E-C>TM<-3}>Q|nm!=sQIIHN;W_q=RXD zDmA!(7|6d}rTC{y);$~8y&&-L%piDJ-Z7;+NLT?9TD8KE*o1a|GjGzhk88@5A`oZs zPW~-r3aQPF;U4x7HAjigP>Btc7ZdkPJzPjQXbrMpvY;HXBF78SB6@)d-FK-~B_B z6*>fU%tdu^hI|;SBM>Pgj1+f`Jy$D}c}3_p!A?2V4MjR-7s>|$Zi%y_QC8Wu6?f4I zpUhLrw2oSvU=s=ZCbH72cdRtRz;1E4%Qm!WQjAJDF1)mFdP`Ip9rtyXNev@f93Z=3 zc}g*s%LPKa{&R|z%x@(7rhi_Wa)6Qe3cTm}UoPDz1p zxG(#ycEIt;D3Pg4R!4M)jEL+6=NU;{$Gk)bL10rSxvnTQ+V%(4LSr zZeU(}PwNQ!{Cs7iH~e`qo~59QfBd(9oUN|^RB@qR8Xl8>?C*ogyg~+^bL$EUWM!)N z(Xr9@d|LhtKbQj!O!n%5p>9i=j!Q0|y24>L0(l-&0t)1U*)&EX zl6Q{nF_lc!XJpjI*97ygTn~Wg*NqhUsH!WckUCrK+$@ki%n7^G4!k!R zly}$1*J*Ei$d^@34xeECnVhW{DcjHb0+xN14(_9f1 zDICW3z)omPmC$e+5W`Le1J6|`)gLN+y;WKWgakgXpEr5S>lQg8K#Jl_{0NYbDwqo2 zbWWdxzGs!xpkJBG!^$Xo-319>uiWmrzD}9j1)gKKJ~ZI$?p711T{pCnd`BCrQ3@Q` ze()_)PaieuXrdEa{ha*9KYP>9xSbIuIYxaN9kSAv@fv0y-KtQtpF;|#m*%&SnqKc) zhldD2{#s&U;s}jYqe$^ONaPAMal%O^c@tC@HyFVTU_}^zWs&#eXM$9n3 z$W-Iov$vAZJiFX?Iiq0j*LI*9dA&V!=qDOaLvFVNpD&>ejQE*!Y;1`5GREB$6d&Jv zQ0#+X?v;+5fKGE-yF?T50<&;?pm#l*zJ@}t*GqPS8^|AI{$Cn`1Rg8q8!Uxt(s4p_ zHw}9_5nUB9B~hdF&L<1uZ&NL`|9vg}dW0(HfOIGB;0Md-6ewCe8h^?RujWxe|9}r0 zx)y0Jkr6Ukd7WEmjjIG4nwH*l7_PlF4j29TjPiqtBDhA2*B-MHyOnm})oZ4DvtPr2 z8QK)P%O6bHSMy=}kz*qT8K-%PMFr1Ts3Ux6;7!HS@|F($Xt$|3hQ2RnVH4EX^DP zQs{Z&Qh1Y28l5VIqr$IEXF#X!&q<({Kw{1ZbaiNR(?>Mi53|~*v7cv~H|lfU&sqGl zJroE!jhJ?zUffznL6Ksh=<9Dn`xjb!(ByOKw}a9cVBzdAd5S<4u?XLla=sK%1n#IN z8Kmo?N=u%k7;(h`Jn)GrNyDka4T+3BG9$?#uL1pIo3fW2Dx1}`Gn=EcZ0Tj2 z&K2d-Uj)|27}#zOK(!M#Hsfm7CFVH%o!lvfZ+!WRxlA#U&esqpKSe`7&-VZ3gog+2 zM#blmI*PsP{H9`xg_r7j<(A5du`5FVeNtK_dIOb7tW^t5q|_)_j83LP(MUu_ARn@~ zQR&EsfH>$Dj^Yn*Hf)6U(KAD-SMTmB$O0w%=Il&kQ&c-w@`!5|wd^iM9yQDu?R0-< zMs8XVh0;&MkO=lq8pWr++sMZ-xDVZ2+?u9qL+?&srL7YyT1V^eEAECoHAM$H28v;+ zhpvZ?V-JJ@p8(3jg_5h%qkBy9G@7KJWfZkv@d=DIp@B zwV$?(db~J9mNGa6B9D~NLjRs@b`HGRh7H!vzer0TPX+!bsAQ3=0o4Fs|1};SVjwa* zp%La-fsRZuT>e0pevvNZTAQPt^&h28eX4kcz(&h@oGgmBar4gUH#b#-4$dS?S0F;+ z1K@anh`x^VDCbo5+IO@T=Q1>Z4Z|PE8Q&J8m!KLDsqE9w9);PpC6m(2pAszNsE<2< z4%GDOKbDvn)YU$)uW z^|`x;#@ng(s;=%MSyL)f|F}{rv#y;Kw_cK}JV5-RzVOy=``qb8$(r^5Z3^Bs`(Ki| z7+j|yqvcuxoWQnOn7-x1(*u@&t@3$O1;Yfp7t;G{TBJ-1)ZUe!GyQOKbRIR(oH3XJ z#gtU5aMRl--!PV5t1zdFjm%wyU&oLHZ2GOSii_U>wfD$3%x(IAP)9>I5#JtOgKeo* zwkvAdd{c`TCG`1w!)eth%$~CZAMi?_+~^D`e+5AB8%NaGS~&1vN}IKAl*hqnzy_dp zsBSFP*bE2T1mpwZekTw&O*S(Q-aPk^@6=h>jQ!;3MzX>I)53mvZtLMhsU5 z`ZH4pYm=_=Fw48{de)$MSS_nY^2%_PSyNG8EEVY^{N}%vk-p-&qC|%UAoxc;ATGYS zY$Xl!62(L%yq7oQ5x8Be?-y&q)R7oSPe17q+4N(I4i-()`EsD@p{S^~x2B|JJ!Q7Z zbBx)EprKT;u85zz9EeEA?C0{Mhz%PBC@QwE2(CyEvGQ?J7o`jsaa&tPyVTX~d4?yis< zKNzwd0A<;OZ&GqFdvlwqqwC43Z!Xx0y-k}vL^J)ERho+6L{E}uSlr&C5K z1c<=h_ZaF)Nm_Z>Ujj%TW;s>5T@k#=OLVOA@#Y;2V^et)p$^E@DkZf6C*DG`8~lz- zSU7yYp=o(Z6?y5qgA6iJFE(vecT?T8cO1zH;hQcGrD(Ww=W~(q3L6GW(Ipk^itFX_ zD6cta|KOE0aooiXT9!#QhOYZR027f5oct4({ddG%?bn#3yT(CCfWSw_oRhn;QUnAB z_5L8JJ5Y^W$y(Wz;CD6M&>mvN8{Z-7v2n^p)LvPK%0BTf^cgf~QxMAEehcc6T>9m% zmqbXa`jU3>uv93-Gxwg9^1AI%YD4l+Yli8i_9~v`bu5`U$0qGt%PP@u*3(Nsc^g>x2{@7w#=#A0bND3bjGy_LG!ZPG2|~Nm$4=8miZ( zU0brxq6P^m-b0?ia_cpb{ynOnFh}6#YVk%=E)RKF4JE3etiyR6RtyR%`_J7TMYlI% zeyYjSukX)KR^Vwc?Au|@G4lt+=NOTGsv9WCk|Vz5Nt@};<~TI24%-QFzfy&B6@+m; zW8}(01#aR-hkBy9l0#V8LQxpwV1fz&38HPiDs5&6Kek*q%(EMDxXSClN`+&#jd*ry zN6b@O?Jkse0>zP_#S;XO2<(He&N&{gzS-h%S#o0yjY}G{l)u>P!&ND=PO16dRsn#@X2dE{?nd)qPsj(A0Sh%!E`Dy5F+BrKSj@if>~Rq8yFhi+TOh+>a+@( zbR|kpSS+pC*R>@?`En>xq*!IASq{TLbG!uNX$hRk<$mM|_|H77=45B-K|CFx1m|Ar z%q*tn6dL>GRnpve=j5aOY8YvEAR7ll?6x+r>;mSJTFHiIn(r#VcRipc_ueqaAjmBF zjQ+)O@Irsku+BU5&I5BQL!k>3aG!kMbY>;ZMHvXepI(Zz4|H{?K>jEh*{~63C!9~2 zU?9lm8KSYoO3k&3Ty`yxep72^fD}^0e)5_rn1Tm+E)b5Nj08`FU8=@O^+T>}RMy-a zC{%FS8M1-n?(9h23l%$pZiFG7Aq`$5hbJj4K&c+Lw~Blh>F4y;DN(m-{+8x5x6g(5 zN1dd@e^a<873u$&R(D$%Ar#6#9)IHFIcy~hu?2q$=npP&2CPcqtY!&?=^Qe~2EFVPvnA8%`3o)A?2E zTjH$QtCR@4m}B8xtn6}nNu{%Cag*;}p{RKRmB@%Ph)rC4-(?8Js&IvU>*SS*s6rdT zDwv~KHQd*?oJZ2#t?5<9rO1%c6sUCHe0n~oeRbSV=(M&c=?i}VYF|^6`ef<-n?}Gs zrxASdH!;}4k7;B>M9f>cmh(P z2lC~Gd`mWRjp&$Pdeu)F;^=a+#TrB*S~1W z?bF(%?PpbW&%mKR(&I3wEIk2Ow2Hxuw|72LBN{cwpB3yH(~g_yrvbEh&$wPd`F@f< z|4s)xG%)RFg8Z!?q3fexNPQu*%VOI>Sh@&P-k|d(WDfQ2TZd8UBcc zNmykSV;@ijbV3E9^pOSxAps|wc{p+86l;_!T0AX^zZfyj0$LFYX!}5gW7F85NVg#S zvbLVwGQ2gz{#yr46R(rv25jD3p~DDgL?2jJcgp|k(Y zL;qXBj-F%riDBsE`0E8QCAfJ-3fnxcZ`~6EZ=(;VA7t=`CA59Z_m5_QlSk;a(5zwr zt5C9%V`srm8Ow=);F~oz3jFOI+io^m+#f)ax6Tx zqt4JCY)YX2jxoKacD&*9v;N6!_yfH|y{q9HMqQh3Xj8ZaLO~b(^4}Gn=3k(rkuT_} z)jJ(u2qO}f)nvo6s8Bp8EAIG&Pal}doP7I{B4blYAu`XZAUf3X0AO?PoUnugCFkj@B`oB?j1GV=HJnR zoc|wL-@usXwyoRPMq}HyZ6}S{*tTukP8v0~8r!yQtGP|O);{~(^AFy9nRCoB#v{vk z0kfJtbeS@&hh>O+$eHN_jpyb}T8b0phU)}}BwFka0DM>dqt6OG_8I>UJjtW8bq-n3 zV_t=Xi63xi`slCa?lBa~M)vsVC1A_T$J#fV-T@ReErcJ~rB}0CqY#RIxm)_^7pjJD zFvjIE6g4kRK`g3_U&+iifpD4`O>B3IgmS>_%QV!klffa!K}Sw57Di|bDl4~lY!3eo z5&jsjk;l5#RnR>BNtI!=_V?Zb<@dJ)m2sH2zR4>i(UYMxFaq=7woji}dhGRT9bJdy zBx8H^y%${>qq6;)+oz&~9vxvTS_y|-dD31&RdXgoWwp`@FhPYVP|P&g z{q&%Xf`Ur?qQUeo>2zqO%y0(<1%jp?$aQz_mX||?N=-7pTXVb*1ODU_O53G2-e9GP zBL2e!ZDOHh0%NYnneVw_Rh)?{>j|c5(UWWoxIr7HPuk>HD}noodJ9`WsT)ON;eJ+3 zp8TFYBKrNsYe-Qu{qNuKZ`(yrDIB8|cP{fuLXlfjPBmo~kDsM#YyY?rxY1xbt>ARx z`yk0;Q0{7s<5QrcG{VqKh6L$-l6dxV$v?WR9Q{JMk%~hVGUzQ3QPmb=JhKLE5mRe& zTi4Ztqdi;Yja{sjLE9W&)3Y0%ubimsym_rF+5p`S&agZ}E(1&|*iDy|_ufGSM{Uq4 zz)Xrc>`n|deLBD!UM5vG+n9E@5N;3P5AD_l$dA{5Jb_FysdcCSb)<;;M3g;cV*j-4 z@oeJ60jjkbm~54TP<6tlBAVVJSiXDS;T!2c4Dp>9P`}BM6$}$35*TK)n~?Wx+I6Q4 zwly6spT)%F=^~Wi3qs>C$4DxdId2l~6U3Dm^>qFj#otm5w^^1?8jh`GVR&7G=Pr_0 ze%;)Vt=KgjW`bd0`EcU_rg&@Zuiw4+qqA1ORlF{a;rbJbILH6%?SO~;0B{)%kFg+!>?A{;{$Qz~ptk!vVAvzNyhs=;PQl1m!KzWcf`e#ept8@vN@XolS+(fPerWC@!^8Qhpy0RX2|3`49Y%K=%L`@ zz&d5vJf%m=V`Lq`DqY|{EP=mZ^Qy$*b3uJdsM2+%ze5aT)EcA!nxoP&K~o(pNAD~8Erp# zhv;c-2v3_f*&E70U4~m8vY6A{=UE$>IQ39gx2hXfoC@u5cmy46GbsK1;s4Fi_WY6Z zrvZP&g}?{Kp6u?$q2yl-#hT$Q0#Ui3SvO5Ymm=6%1k2jNVltzhQk^B|z|7}^q)`Y_ zfZ4-`70PU&KlzBN^3f!T!jad$%q?Y5ku6@C5Ydv*j?IR6!#xo z{Lk^wO93SQ+|JQW^3zkJNnBW;AZWI~|K7gqr!qiOi#92bl*?zx7bKPaA`$wgWq0xF&A(gYlxBR~jOr@3vR(b{3dBuJ%J1`zMf{hn zQZ31f{4X@8`!$@rBKOf7GkeqaL%1p=DuTNMz7B^o`Q2e262A!F9-JgqDAq@;T`<1h zoCmsqaG1p~t}EVOh=j3)N{rC|ad5o!^5|y%Hot(KY5u`7QA;Q7X$wlFbt8*8VK1Y> zZLU8LB(2Mr2OTH}RzvdQ`knubnJOHWM(a;&btCfdzc*dNPPKf1q_$~B|IEWq84dZS zVbjnD#(dj=R2vH~RjkU4BC+5ZbmF$#7G&`QVkrqRisC7W%^{dPrKV^7aX)+Hs6-rz z`>3)84&j+wyMo)+baSaf(XB36o@u@7psm-BnKj8L_GPeeoY%)M zg{LlbtUew%b&y$p`|%X&nEUZsE(RMEe40&14Z(bDBHl}Xc@rf79mIUb$*o+430wFj zP4Y@Yz3wySqnA<8{g8}OyNy96x2MS!L%c>%^M?_mYL?m;E^7cFHnl}34Le;^vX_|B zqbk*{Q>fmjlfQ1jc#d$_+4}LPlN!sj*~QJql^BUvUt`54wdn>6*C6g0XE%?$HB23t zKdWKYfkzM~Oh^3NqWlx9&Zv>UH9?q)_5pwbao^Cv(M|4X>SPi& zl}i-5Ao3^le@|7gMOOM1+15zRUU5fKpPxV#=d2w{n=y+nHF=B}PJ#<`Ts}yWUQtW_ zeHN6^6v?n!d^7Taek*?;+t~ME%Cy_{2bkBe)%;4m9=G* zVbMD-@Qx!tu5%N$-^>jJ-9$C&rA$o!MjY6zwwVY?%4|O?j!kMlHzHS*Z82cD>g$&l zWi5c%zdQba<<3!R!kF~%&|>m+2Us`$YDPcXYr22A+`Or}3RtZbs)(La)XC4RcA}Uwd!jHx zcDDRImNb*J%Hb z<6}SUgP`yRY*QkZ>m(Sbv9iMmf4*8@t>bE;B*Z}10*lmOiIb1QN;@U*vM2VA6Prh- zI-M_rvLUqW3eb}32fzy5v&dnIO&9%dQ_Jm%G zErX)9n-O7H(KQUDm$N|FwPj@Ubpss!es_DnD>4gE zBp`68S0`6TV73JxW;O!n2y4_fi|8q4(rVR%NMr*CQj_083wOc82PXvmQkJ0n{dI?) z^j?io5TEVWplV;gom{1YOe}S-tpDmu9rF$Sfw=lVPtT)9)z6l;t{KpV%{padx%@&ZDXN{W1zWvM`RT(oppW%L69sicNM`G?O!7-E!yK&8B zFdg@KuKsbF`_sT95WXXFA_|0XW77C6%LE4Cj}KZ=+PE`()BP6i_T!tv7yX`C#m&RT zCbnn`-NjxX_|3OjQ4}!l+A}N7n7|a}n&ldqWj15Cdwd)4oi47I-P_GXjG`%r)$dDC z?F0vz>kGhcVGpm@AnP6MvdPe{B$koN}S|_*>QqDC@ar;D8kLf!pO>pP_5=deFEXfMw*G zF}o0(X=I6sR+3u4yV#ryF4CEJFJp2G~wl5humW|cU z#umFrAl*mw-}q3JKrY1l{J~YQsnA75G|=gTLnu~BB^k$e#ikGDVsv`JV9lVNs>5qZ zTx!KC3}vFQ_R*wO%=_y&tn=za0IM{geT>a2ddwq%;kK-KGa(*eG&q>IMdd^=O%rbs ztrFuDdOI!>Q-9}%HC7E*e{pV-%4&lC@oI11MH&@$<2lh4xM|q40|@4A?Ep4I?sLg= zf}uML?*=3lIxYSRn53r>|2OR9uay3Qr>{gZhJv&qUg^)cCrRVezhi4&ayFQyvUjf( z>%%?r(2mP(I;xvwTEo%Qhm&C-dx${3h?b9;&$v4jQ40rFufIc}OUlV^{%S$O9mN4U z081Df+Ji_>WySKHI`3C_hM9k(5UB-#w)qyUtmWcvFilY>7Gu#(mYG*jcZA5wQVIl4 zFu%EDF?;Cc`&Z$!NZRNM+U7_ui~JOmfeRfvop?oz&WR`7U93gnmoNLi zN;&EQ)`0B-aj@vop?HoaSTw!-j-@A=UPX4VL+6cvNta*^q*=Lh6rJ(kEVMjv$KT^Hi0%bjHi|9b;ex)Z6uGbMro={ zWMyM{>H$+(9)BQ~xxud*fgmCmuuB3wEf7N1X_fj^NgMy>Y2?<-iB|LsgIiD(`}$vf z&tKAF&=Foj@5eLOP3KdwtWVZ|BFW{Kp8ft?(yNTzcg9If-%=<#;%S?wJaK9Z8<$mkg$Lo~S^@<64oz7RN|0^RL2kQ-6a#-1R$& zm8XWw*HuY186Tz?lHgzjrx5kB4jOy&qjxZraK0BJFNp z*{ycO$LHlJLj2y*#jkt|;{ckmXzW29UinejoLSav-qt=H+WEvMeIQb5;D}v3RubfF zEc5D7zHBAMOjKG1$aL@nLodDS?!ov%Y&A?AGD~nqcI5m+WgF%**~A-#($AV-%bzC? zoxM^67iKJzt{3+>aG9$OdwNi(afSLzq!0c~&hI(%?Yr9RO|##;6F`zxI^QRM7kPbQ zB9li>_-juD3y2T>x6d{0CKvqNy5vmep#{^2JUDM7tiJBH_l@9c&DCTVU>U(9rV6AW zH$Xt(V;4Mzq+yTKklbunS}rmmx$1pktyL6@jy(~?2uc0iyX(tQpOFlv;{5%gP!PSSG4_jOlWa*XSEdGzb? zFA3?tlhFT^Z6jacwcq`O0jh-6TcBr7?r~E@{87O-NHI-cMkwao=h7*9b9$%5#kOk} zFf49qREvmqxg>{KO!*i+>}Ki(6BX)pD~h7lffG`;#i9lxPHT3z+2awOR|e=!nbCo2 z(n<`(aR@c+k|M?sqrX+)%yd2QSiV zenlUnslP8*tA)WJ^Mc>5{+=<_aS|xAFBTp0Zk>MAP_2`%$_~5vPOLw*;aF7o5QX&8 zvybziQt3(yO#9Srot+R>HG4cQrroXDTaq7*niVmnp6G?u3jSuGjQf_3*Uhqm!qMZ} zAYy=CtL5diMAJyLg8e%UV0uePd_N~xdzQA|LUA_vugcr1=O0pFVjKt%Xz7ojNzRS}FaF=NoODf>|-;DOZm9^K%8{h$KT`P9?O!SBUcv(1pIn1D$E zEd^7exO8k6@q612p@)MJTSgVOVJxZY!Hf&bn;gbL7q|N}v@1@jKJ!F-PPY#wqt!sVCTodtie+>t=gia_@9ZauNUM zB+(;2UfhF6ex9T?C(a?0IJ|+LCkQc3AH&4s_G4+_h--N>3f~xN<49(s>qH8ud^wnc z_%h^RS+g3aF0}9~s=k*5I`s;Rk|hyLEs{MfFex7L_eN(}c@&iv8))(z0bIaV|AoDj z*ih9>Mz0*v>;_O=`>c|WleDx|c(mc7Shl7!5V-%MxSm95Vh)|Qv;IrXyf7$VYkz(3 zJ!ng7nXD^vo~zq5_fKb|TShnT>2?X{)C@uGtUkgxBBaCM0W=b<&maH)rKC`@3JiG{ z{p|=yhLFoFDVS;6+Fd?VQb+)4*ssxCm{k3)&`Sr_?cxOd0@#yc6>UYhUE`PW4$Frm zsbU9Thz`T%k>ecI;Qh~*G_dUDU#%J){cC4iemM>U2H)Ns(X@?fN`5QE?q)L|%5y@v z?>DKqZlO{%zZO;QF~nQ!zC<_n8Z1-Pxo8mB{u|=*>Cz&y)hiUn&SIi%}n{B4BIkBSw?P1 z+z;8vu-n2Ox>P8Al;8!Kv|{PVbM;;(+r+ZCYL2h?q>Q&CcO|;P%>vDM8%+SBnWzY; z_F??qQe&VCv#ix&)^Tzt2)4$%+*|2_t%bCjUz8&S;Xl-2kj+o(@bwG{Oh|}3!tECZ z@gh}IQbffGYp892Rql=f_j-8#gNpb=x8jJ~aq+dhtE32Lb>UKl!vg6c^{ZY1O<%G* z9L&t;!$PwR2%dhGbRK>1mK!~GaA|Yk@w+T2tWfqI!w}%spZh)jHW;xpNu}rf=oOrn z8YjB>2?+%IrWj_0yhYmy8^Fn_slyGU9`3^WRDwZ$P_xhrwB^)PqP%Pqj#w!wUvW1k zzwLaM@bLfg!0E>zp9YtJSTc^s$%!bmPE(NNkG22J^zHDN8|TljOYtKHNB};Y;iXso z3kcgtS~<`F+ESsu)v`QT^KPvecwe0$AbUt5tNFpwZiD3l{blrA#tM+blDTm9vv%h>5GzI`&-)`} zyer_#yoCAxCls`41ew;4-r@Z#z-Qb^l~(EH?;m-B=+pK&r|ft@*XsQ#ATJxpZy(BR zl)zW$7NuQ^xT~sUF?$5nTBoO9SxTk=`V|dy+u1_d=6z^IR(izO9WFj6b~QSu3kJWG@6kY)snyx~+%qjM2*dny5XIzl&xfsNaLPP&9@*Tc6I=5uZkF!V8bc z>yEw&ZbqlQmGA;Tje21E@0%bbGAJBlo4EPGVY|*xPTCh(5V(cPl_0sfj`Im=0tm0vWw6dOeThRU&-+wasRDw{*R}obE`CetvVrf64Ji&4@)=66D-2`n-QmSB7e6 zKpF{pbq>?+($V##qjM^6)$9|b^aaxm*MUyakDdHTQAiLF+aW4JU(1xO06n&iKyEX> zX1lu=3IJ(kvmd?55C|hXebj4o`qenUth*HU%h>CwN@vgDfI?8Y)elaH9B~YRr%lwM z5PQI=$XaR*?wy?K3_=qc?f!QynjnKthGGzUU`hY<~z_NDsj&2Ww!%;KRgz_FE?r1r^Dr!vh{-=NmTLBe7rL8~}jt z6^5L5j}IWS#R^Bl7_31)DgC+a>`f)TVdiEt^4v07bEMdl&7;S%vd3fVi9N%R$&8W5 zmz6gICiJC#q4b{S9rwQPc`DBQn~t`t@b}Me`Do~Qb+CHSxzM8w`!CJ{>*iod!Hcu) z`JnL&QKvdQTlHwJ)fe!aJ0-i;%wbdhzJ@@mI2b6|tCziTu@hSth3@J;g9m6iiz;M( z(OC@H+o4LH_XOZV6FScLn9$_JKlVgzH(?#3plI0R6rWi>C{3DsdB zyK;)TyloNSX$nS8MoL^NjMDs>U1XT$*k<61ip=tAMPy7C3TUIr^=JvLya*8)7B|ia zlBlneUeoptUMh^j)HVm^mX}$tC>lPE>Loq)iq4Pt;pbH&VdT6|Ege47J#>_o2?1b* z1;}8nBu3BPeqtv{rtOiHoCiwafD8f~S_i$H#p-w{hf*u0be@d55M751zQq}>hnkrD zkqD1&Htwx!G2S>+_RmCzS&$7%?;JALWja1kMbl5Wb9S=P1H`_o9aN=MfIU;fnXQi? zPsM(};^F_7V(;?L|D`}&@l&z4NkoG@1q$-bZ$;4-xc@!4SQ;47wg1q948aiGx73~m zvF1eaP|_hVPTJEtYxTQ4nw{Q+IHUx$MSM8h&%!B#gM0%Vjv5e8W0yG%OPkc|NDW_m ztzD2{kmMe2d)3^FvG93CtC&(G26PhJgSL=XohH$IPu^E< zih;g#h4}Cg!o(O@>a2aS{w7#~gW*5jWQ}%;%!6a;pSw!%Ng=d7=dt<|NQcP5*lP*1 zfNQt%dCmPd2xP60R!@F#YGV987^(E? z(iV~=!E!%Bc! zN(6qIt<^Dy*N}fd3GlwjhigiFyd>Nq`EJVBA8G%V!y+6o{m zWV4_iy?yf=+yiQkK2DWv6`Y_;)t1}fOm1faEP@j>r8B{?3gdM>Qg%rE`0NPj&;IIx z=T8T~pH}T9C3wU!vd)(zQXNJN<_dUpM(GxC-tn;MKAno6=E|~bCt$9uE-*hY;-t;V zjMQw>gOMnhfs<>Gq#It&IDLF`96u#wq$lK%Wpv^oAi>0Of}B-@jol%!Dj;jaiIHt{ z_6*mloPTqpEx1H`Rf3xXF-2LM!bJxaMvukBxwNe z1!0j}$p7GsW>BJ7q@&`k^qTk==#=ThgXjCJKMYd9`-`*S8c{9#<<7jUxBw?#P-|a1 zFbEd-DXUaU!tUBbn*_4u>Xr(p5R--y482b7R&LrBZd3IY7G=bSn#(-JT7Z|;DhQ0a zmg2x@wM0VTR#-4mwndMVwn;q%>omOFoZaL!@Fv@~`Q3yJ>34z4j;onlxicyM_U@Le z;KS}ObU%R}F7~r3m~>mJavK20vG=eK9{Tm5t#<>3x~%du{_p%_21F12XLbub_a%@V zuY|$hT{ZB|sh_KqoQG`?=-ikjO<*6x>JOp-7v>)=`x=3)ZE{@`Ae~HLJmH5WpsDBp zhrSF=cGXg7N&Q-ig_v&wkp?BNp2Wx~LIWV4!DV>?#ACK@i0pD9O{y96K4WdcWvvrD z`=W6^fWn0&EL8M`^a5e63};U2-P=Y1aWo5laB~ghPZ}ZIp_6>)ePWXd#LNJaEv1psJF%t~fRhjkSn5rd`Ud5H@8s zG^BeLH0*kxReqZ=8A|F@iNqo+7MCzLM7iUve>P4Z@be;y)gYqwNNNaD^Jbkx)4t7s z)Wtdxtj+1}EAMyaoii0WUYY7dD6;(eWCb+{S_yITsD@qkr+3iUYu0ko2oyD2XQY=CQ{$gfMw0z>5 z?aC9MZL&Q9Dtm{+8c6$^zS?vF3IXoI`=$)JMXR(MBy-^H zSuD0}5<-GGrTKl2JG^iL%Qo79mW5D$jSxMtp?pH%?5S5?+MGQ~mMx!gQkz%R9$1}c zoGhrnnOE}zLdaWoq&66Q2di(O>7w?xK`*2^hT3Ehi~nprqW{M_+fT}f#1fL=L!0ct zFcoG=6#2mVr#8HIyI*Q3*QW`HK>8pJfG-giZ~DlC+OiijU2#dt`?(JM(5Ph-?TeuC z-4x>hr}PCw#7J!!S!66&@0E2=FtZNl(wDwhXIVQdZQ1bnCGxV@(ZA=IP?J?b*h>$c zwSO_9QsnX>>XNqUX;8asaur1Cv|7}Pnf zBkL}U5)$+qD;Q?p;qqol3#L-DJWLjC*Nj&rag)~?V4C~g%3e8o3Rt|r8TtkwSIRT{ zXi41E=+jXD7d*wR0c@7mAYO>@nQjrviBu#l62-Xp2;2*ys`h^LP6~zOi&-T6G&LHZ zDQ5}|I~57Dtjqn3VtN#;*LNNzC9eCk7XQx}$X*+;8JQc~HeX_F!G^C?!etruqi~?B zNLT>cFh)0TIb8SyX3F0feV*0Wiuo0!x+$4B;fgcZB8~;N+3-aom$`d?vR=o&qy)*M zH{pcHWjm&|1>xmmB5gc#JvGPIQqLXMj)toiMYrtauy*6{RWP#UkFQk+L30-I~-@)`!9h@|N$-z_VTal#NAf#kqR zY1Jtz)4=@neT%OCVA2XXdj{SU1d0tI!XWeSM?3+=6`6mn*BTst7ab&ZVBfTIabEb5 z$|?n72`}F3Bawg?Ev%}XCpL>t^fhDY&9=VXH5F_cU#vUBhgfaF2V!7U2-)$=CjH*w z<5E)o^S}?Ng`th;HJNwiElclTI1?)m{U;a2I4g64LR7P5L*8EkHr-k(Dwf_MWKL|e zlFe%G_Li$;%pupIf7+PRLDTeWL5DvqxB!nlpjg8i(G{vh ztM47s+c}{cKvL{sAR3XImrk1rP->fAviK%YE~kfN$f=1ZM1IE%iSf)^b+L_pSjC;XnC_@I=juF;cO>~h)1TQz!}dRnz1V6QXqg0hP7|~?j2$V z$KC=AIu6W3hxXgzK#triVviwR>>kwdzNf|s_P2-te}{e-=l8qxUV%iq=0JM1dTI>u7($lso?b=9+! zB)_SRV@xjF07I+beuoO18Y@(+v{sHUQw=e+iDp_AbpnP(qmw_@BT@e{ znEI0Nh%RN%Pr(Cn0wAwI%`cwyX`%>Mwt83MB?V=lB8^0JC`Y@rYk6wGWk3b{Yl!r) zcB*j&=p@WZ_IA4+pir|g>8hbr26Mnfee0(rHu-PIInCW9Ym83@<$}#I?R_T>MX7)< zT=yYmh0h;}jkI)RAa)!s?A<_16B#66rn@o|1RONd^vz%2gK3Hicdcd8odT15Yjmo7 zsQ1x-kt|F~zsg;MSS6WO_y}D-UpZOMx69FAoe|Dvpqag-qAdVkK%u_}UbSryb6K-p zZ|Fy5Nj^Y{xLTQ~BmM1OKWpfxe`siW0|I!p5&Jfv)9E-eGmHd-z-kukD1_?L@81`a zo!^w<(`;GTS^_erNn|Xc`HaU;0~7U0B3;SUGjCaaYe8ZYw9g2JN&sq~?CxER{hS_B=RzFYDm% zqUbX=u>sB00{A=F-;hru0;2E}@js|%MkoW1ZV)mn@8)0}drMV+t)aFS? zTl+T_0ldNfnLbjwXE7QBAqJ|Xh2I)t(I70fd#A@#43C~8PjTW*KmAlt8L_>1w{d~4 z6Y7EKTE3w6p*t$}rM7);_hpfmj0?^qE3cIE!O2vK7mtx8t>`48F~bEyx*Nc$fTlO>?k$51wwqN+n2s#5TOIG~$J9 zhEp~(TPqPZ!~qg!qbf@ZJw(#x9Vsyx@oFP#=-h{%G%q0+Wz-z%9xJT8+c#ajuYQqH z3lo(m4@39A5n~k)#fadu;Q@X{pPhWL+f7>6UM_Cv-|nXzm$wPIzG&r%cYdNeQIaw} ze1GSgnh@YMZXHoF{m9-R%v%>X3(@Mxex&i}4^8DssdlNlG6;WB!qm?jfT4SO)SU|I zevw|WSSAtK&{o;f78W|;cEN_qWGpcHq&e`15Ia2T1~$=xjQ3}(a*{g&95{O6o$$tP zm?$ogulidSgA#|kQ$-cO2DqdY7~3q%&My^?Sl4ZsUrw3^J-jg*_8`BfM0d8IY)J(y zVmqX2%)HY&T&Rl%Dj8yvuu<3Gnv*U|Cb&y zXluPVg$6|7vhzamNf(CK0`HxRjC;6lr<=+4l!woyB<+qu!>U5gY=3iJ|s1AL{`4*BbgB>&-QEcEUP`Sulc zM7|v%LBTDc-Pc00Vx%87s`0@39`X${$dz#v>qpLzO{fxG6-YZo5SDmkLTtbdL4$}P ze&fg_%LJFGgbT9(<^Efu;-+R3nVuAV2Pj3+s0_|cE8OGkJjbe;ii@P|+f{zeT4AE( z%oA)=0K9AA&n~FE2bu@VGW%m*Ip>**cM7a%&kF;;%olsH_JwHC0JUW$T0e7= zqW+0d=INv22id*qBvz_EkHeIThY+vc8FoT(b61G!+SX`mba{3&1T`j|2+OPQ&+vyH z28|xJk5~r9VFo>lQ46C~*5*7Eizg(Y6`bvbR67|w9CRgIBl7RBb?%33xocK>)C@{J z1~0C$^M45Qc8M*s!qrJlx@Af50G^d-K8%F2;Y(0BWua}qd57{-pujxc;gB3YE8GjYMwU)Lf~RgnegC3 zzHFCCV*0=HhAgkQg~Lrt3%Mly$4};iX7w?E#tj+&HG&i;Rj;lnK;Y__BW&`3TR)K& z3I^bAR+#$bL;QlJ!1A4;S3q8hAouV~t(#qZ^GOC9FfE$-^_2!b1HWE$6!r5Nf<&PS zO6Rks=`%wTW+Q)gvYLvg$$qeN%9>k?3>VM6VQSPen>i3Z|1_t;msz9YYUigvz1Cxr zvgen$Ga>T7CsXpH%Le)6ZTRjp#-Qyi7qTAu_IHD$1vPi}5;m0&OYTL=^pfNMDDVpi zbf61S$?<1aHBMx<^#cllSOVjm>+beZt(aX7PjNux!_kF>SwtHoJ~2e5sf3QMt{=x` zw^$_XY?R>aba?7XE-~xmhT4B%ud~}z7zWF(FNyPmSn_MQK>{Qoh95&&%XtZtO&5^@5aFt1!J5I0b~5wq;=N-m5019SqXvy zB{TP;__qWZUqM#Qz5BW$9l8V)V_w3qllzY7)UIki3cu3vRr%Eb zn`f97J8iiXd9TtKj2xEx(4>G8Cjk%h4OvUP;Y|FNx}6WVE)iON56^PePNWmsn{QM@ z`_lz_od0u+ztvt`;)$o4WQi<*Rx=2&4_f$}fjh$KkUnOI)IM;jeGJU{{EKTq!z>~r zBVry$Bip?ne7H++ujVUxD5LWlJqZXxCG!gSo|2;JCC(BFrM5<82Adr;HKylim1Qwy z|Kg!Nb&mb-lW1#`_bK^kpc?_I@j&6-UI*QV`GkrGN10duw3X+ATo36bs8znqOv^8Vz<_HF7*Pcc!EeDo#^8k%KfA?QHwPT4n`2NqclMtEU@;n>rz zIWQqelUnJ5c&O@t;i1?lZEm{*k{CJ@q}a?_Sj!3#Oc@7seZw9cY7xcJeq8^&ztA84A8rC>bnWuU@#5pR17~yxRT>VmDG+Ka!;#oi&1#5sCNL- zSHc~iAnFMB$D|B8`H|VGds`bP3NIj*Is6rz@MvYRn-cx(^ewU~=A2oUl#k$4!lZEd zZZsnk`NU3JKzeW!6qqJ9xsU669;GX$g*KtPDSHA|#q1(tu-krN-9AX=7jg{tTMiP> z+z0+-4UqQaWZrkY6)iVT$3w8@P0z5b_(Il$a%M-16={_Bl6{SR+LDlY%E(0I)^j3z ztoEtBL+l%-=-;)JIQtNo9x`R0<3aSuU&+){*fNy#IvhO0!_F^U@VP|DnQ@2dppZ`M z=3>!@aK**j0$yJZQWM21~~>VDTCdi+Gw*QxDN z;7C`3v|7}M0l`-Olw)ThDG2URIH?X)i5pF*;+S@Dh^K(7TFHf}N4!PnW!&8kwJ_?zxvV%fz7?EK+UlLYYbY$3 zU^Qp1o+&tfM>8_#AX5Vhlb^hqDDgi%9kS2^M_(`%P$aV&LjXMDAb=eZOko|Sq*=N3 z;m&|(;Or07Dx5w}J_+guH0oGQim9ZMaU!Jro1*VRXLYdjXtr>i81WC?#hOYIDYKfV zhyZ1Dk_M=wB1Ye8oWqf}HqAGVkSZLX)sPOUd0qx!a;>`@(o} z<-RS){O@(jhoYOrn>r-K1@O;1PoioXuQ2oSaT7Op?zDhY#2oneMM1-h^WG99F3}^Y z@y&K#iP$;ouW0H8dm{+SMWHb0QSMCL9{&g3OlTI=$JN9F${Pa zmBpls2SWCp1_Tx!qK`hs+8_v2uPz!0iT^Rx^?8Dt|GLVWz`fOgU z0_ouWKfu2^cZoqbJZ0rM!a7nkM4(c<9J)5`PSZK0SxSv(E(7u}zPajE72#N!sRGt& zU^||y-4rPOdT1hGkNcZ`RI|_B4>Hx*ny2;iMs=rtijyJA{iTNkZh2dhN$r!EcI!vn zAd@$bJ374GE5q#TjJtt#rW)3qg`95F>ZK&7D@j6^(PlTc*aO-DG9d+A@l-j(6JIBC zN-Oo!y6h6urXk&kej64k$>g>jtSrOGmZ2^-}#86tv<7 zMpe^hR|7BHg~-L799G{}Sn0Nfee!J3IW*m87(FzyNkEQd06WQChD*(F=VjFtMK4C0yns~{_OKwf(!IRtp->@r_eEd6*H7Ud@tow z#ia2`7<{)6d;2QkG*bx?QX+Z@>S`fZEiOLuvZCGHsi&*!h6FG)WysXOGNg(`B(BSi ze?(txlpR_j*{Tq3t-vwqiWq_JsBb-VnbK~nH;v3-hzZ?_Tp_67byBswiC?JX(vjaq zjOFnXlHJ)+kSo>+h(Um}gx>=pZ;o=p)#;whtKcXL5#@!erMH$;*uYbQEB{+~>7Ro5 zA9`slg|4M;;YZ%#Z{7BCgETY(sksZ*VF)SkoWxOyowWQuS^gii2AqAmUg%si^ z2wNvu(wpr{M?RSnWT0HZg2M%(wq@37zwkY^eX>-66lm}03dcvP8rumQb7eR-=Z9jQ zhHcyS3(YLt>3b-)TOM7h`JN$m^Rd=*L+H2nZkutNI<4GU21wqm;ybW9NCU+t>t)I;f7Zh)xtMPP{fJjF8*?f`>AkGZG!JZW!N z7jzHZ3?{;2j{i-!8mp?!7>rE(SD-09(* zM2hiM${yo$tlBECG8men4GSonAAzWgEU!bHw0286wbIe`Rjy!Ufs=@ZNk0X4GhkSY z*N@&olgtUh=LE4hOWG96h`o7xZ}HeNqJQ3gi#P@HP?D$q>!@xT^kWB}v7syvi}Tk%#%QFL-I~#g4X)JGwNf z7L@g#ng-w&pbL%JWXUc09p=X@NsFB9$xj>UYzA1ljpNFWHa_Xixc>~|@F1Vq?{%ej zXaGDjF{^47D-rm>pzZm@0l1PZW8dK&Ngli6&lGIeXQ};+Jp9mDfdT~ogCUZb?{nd4 zRRjuicIc}C3|N7^T^ zx$LNoVNmHe;iry(eCUr2My6X|b>y0_wL7w*9J2~7k74G1iXSB){R^l4b^DG*jow)d z?9pQVpAzqK3*5nooAx%Em0xZC+Emg0*{(J9Kx{8n-U2( zTPzhn+T1r;95|X&10Oxz~1?eDi5^wtnz2rSuX*3ED?rvv3v~vrrf{t zMydGRVKZj!lRvM*Sz+WNpk&5oDbqgk4h0nWrCGsW?kQ>FW>%4!_VRLlqY#_a4NeKL z+<_*$fCtG9b7YVP_{2ZcgHM8fPwzl5 z4bU|iMm~?JP!sa2xyUGcl-SPh2pW-1C<&~`aU1q!$8KsgptVLkY_$LHOQ`g-s%%Qy zyR61LkU| zACz&=&L0#T3NM#H_a16%pHVB3pAWmpXOP3tt~EhOlhYAQ(a@~QvdHw|6AVuG-h)e9 zl`;an2ye{&uBHsu5W0h3Y#oG1aE!=7TO+9wZDkGfB^D5gH(AOm+q0^xc2sHkS3dLS-0Jae0Cxq)mhpbL^OBE~c0pTLB5rGgk2^u%Z zM8%lX$c^gIeDCt)>?h*|5-cX;?b$djb?TBTAd&0hw!5j50D8;r2ZI)?)tD%2kS3xQ z$E|9d?3`e{NN69?7M3?z11TFpXzF`md8OO$NTBX+lGx8Sa`%zQ1eijIU_8i)3ti?i z`a`mDg=C+qi|-)3+kCwR_T4Ek3jmz2ayarqf-v8Ie4zN`Q>0cW= z@yv#N)A0Wm_bM~y4AP)bPnS&q<>Dm;U^P4IB^2zlg(02s)GyC>$)mgBE8e6InT!Sq zip(Tv*;4eg{~Xww5XFZu&_$??L2iFiRUL&&)Qyv{>%Y z=ym0XiCZ=EW8{wh;sgr*p`A3Crwa%{-&tp&komhrIZB?c&EgiLG zM`8BLlYWb~BW8Bo*t6jp>(Y$=`e&p}_$N5{#oe>diQFP$or52oL`&V7{M$5z^LQq5 z0=M5g&pmBZx*i&iket>Wq+kqBLU{(!Q6e>Se@Z#w+4r#y{p)QoFlJCwleD}@go+_O z$oRU@gv9E&scLvPq_7#`&2f9&OPLDCCaTm;X6{E1;#C!kz1ffrKJ}WGUCEP z&lOZ7H+__B+Kq~LY&}z-6G$#X+$|t8T%Al`PTl=CZL3R3=WK`=S1MCuj!^H^E`_1= zzmA?C9J|kTu@~{~JDYky3Hbx4AXmH#K5Pvb^#Ir&_=?B$3vxCS0bdk;^t=wtenBiW zez8dnE>iFzn=VFWi5mA$d6b_^_BP*v;LaJlMKamo)^i)JAhT@i6lKJ>6q72tWm8ct z&}lRZVF!%vU+3oTZrb#laf>XueQoDOcIt6AN6;$fL>CAI-o53nMO{wtFzbv_j;A|) zN5Y-dt2ZPv^_=fOWq&A~{rzO=4}c-)Z~8=7=EetpHUu-;YdXV#p3vmCqd11p@|q>< z<{0v&4=p*y6GAEjJ5Wi|_SBzRhq9z8r!yQ+iL7gj7AL_ z+fKeF+0TCQz5ifl?zyk)#9GHnf~o?Ea;aGzznvL4eso!FV&fM>nbI`bfSS^2x!i)~(WkBm5>KFTp#Hd+J zJs^tCfsK&xa-&B)V5mfBAsI~IJMN37h?<8CO{iNrjta+Jv`s39Q z-{LlD{fgQ4E;X{p@EII+fIfWe+ZO}8e=+~R&tl3gKL!t(ED=$E2XZCbGKmaapQtFP z>ln&S^~n4(!E^tU5sL^rU*wwI$QmdY(UJ>zd4{ny+%n>N?^!plN^phJu)T4feiygV zE^chr#gP0Mk~^!Dvgdjmb;S&71FI_q(iMj1?Io47$8M@D>V@zU7L)AKJ`;~=#Vq1- zD;m<1AAC}Lu-UG)c?xTAyldWK>G~l#`aa1D820v>>QWeWfnrxrR`yoH-8$E;YjMO4 z*fpJ--{i8imHFW>5a#2;l)PMYZJkTJdb zb^r4N8;&tNo3|c`Dm#gB#qL~Moo-&E1O|4vHX2pDhM~sO)frrX#8@{8ReOlNIKT|a zf6gG*I700z9WbI!G(U{jJ|~(*UNFrfHtFVkK8XJ0c}tQ3eJ7|$Wt34rFqIZBC|z^n zW<0<*y&rnIWYvcqJe9JfFv5ONvkjqC6`!IbTBPMFd&jgD=v)Rd!(OGm`Chd^TEup%N-_v0DDG;?prq2cT+x>xsd zTYG2P{dWxsUnEds>Vj%fP#F$HD3pk~PaH4V?hZycNMZX)AJ!IK$dYL zs6-tu_M*a!H<6r* z{6#i^f)r!GTIA|06)0>-cyo}#Hd|?s8xIpP-~%HVJP*1twX`=x#-K#sC|ywOe&x1& z#b$2#zzTDX%*ys?FWB90{IkDIpFYqExj*fSvaZyYzq^UU3w&{38{DNx*>_m??$f-!VdrL?Rwc zl-qaIjN#F^+&BZ)V0Fc0GWo;x@*cgFR->pgHzT;ip3&|U#DhW8;-azA-r^3Qk{yS;O_f8^GTe6QHMf7)F=p!xsy~VU|aI^of zZkdbz66TQlCXkc0DU!Pz+jSh?UqGqA*m(-25(EROo10-9?bVSbV*pZXbmyWu^wT{- z35c+fZmiSqG6^syhNtQ#qnEKJy>T;2^6n#+M^}++5ZVi{t`a{VkC9hcPqwECstnT` zl$doaTwQUdD5K_8k)DK9zSi4948zr*6F3YK974cjT_aRJw?x=kWuJ-#!*f`46ypit zD9mNNjr}7>KgRy|(5F-)+~DHOd8LQ6WiQ@9WWCbfkin%d9&rv+9!Z@y9Gw-2J{wzl zq9fwX;& zInMEw9H0BNAPcn!GnYgg=BR|-KVQM^Lemxn5_FRR5EU(xS6-@(svVBZi;ttfUHqJd zKfX_dU(ULvO4@bYU9ENTbxm}hP4AjdUU!xV3qQYbC1r)p zK11&X`#OdYy5nnD$hIXhT)l$z9zw(164KX4*>PtZW26c46bV#X?%oQq(bc;vlKsNMZ|7Oq&py4g@-8Y`dcEursVvY$5BJKn=BWbPm@M{uT(GJ zQ+@yKLR8%4dHR71$Q1yIKn5)nv4RD`ZRhU?hUg`ntl~+s-qUs6D+X(Z{KLqI7kvWa z+(pE0UbXOI;0c6fsC@QOc(#3zDcl3vXrlGFnHu9z1!u*XpSl;BT;9nP?tCz)EZZ%d zxAo>bguwS&h(sW$1AVbHA(RZZzXvx(fJ+^-6fG@iBT#CE`+=0EP{i=qKLsZNX9u9v zf!}SpN##TlL{ZrDp@eY=QTriAq99|E(UTnhncwMXjVc&Zoa;DF!#!zv&~5J$9XzZb zvGbsQeAwhB05=wNLRbTFxOLRl_@F1pwP+bp)p1qWtyqvXMOkSqxsUQSUG^Jxj1-{Da9`L@R0O%r@2twKdTdfmULYm{CtmHHmY5DAXB#E&x z$(zR`Qe6AI2tA~v*MU#`Qa0I^gkxS zJf8NxTo=NE)ZyH^fW>l+HQdwx`~i@jcn^e^<9d4v#~z{kQR24>>a6}Po9S`e{2sGy#iSjfp>vAdMM?V zo%(0#eDt*){tukr$qm^tl3;nvqK#kUYNjExMD*5w0eh`W*U8)Tav2hEBbn{aX{Gl@ePXIqxhzkdW-> zNUP>3lacmmzZabAI`~(#q!6uU&<`t1KP4L2$EUWatn~S+ zSrvBq6aEfyn(7+hl3hU}ok9t(${2cmQ zId?F0rexzCplDGQk-AOL{v?d9q4aoy>C)}&NqHq!1l~z9qmX$zsbMt7YYNU9Ohw#)?jS@CNpwfQV|w4AiNcTW{Ws~8OOd!@_zv}uSezpb9W59n zPKKwbPdrFj{A^6t%zxj4$yB6Y_Y?%k=HmmY>TY)afQ%veD^74GoY`i`yLFpc*PEfK z@HizPo}gca{j@OyzalBXWtk_n=a<%*1`{-Vn>3nx?UlT4u*3EjmStVs!X3SUjOrVW zQ&&I{BnjY6T1}8%UVEbLk`jBhF(3he7&h7H1iI?<3*Z9ip^>xehw~Ru&12YIh(FT- zjS<8Pz##~lcwSo!Ym6B~RS!~>QxaB2hBKGSF06phevVyyY`if+R?R3Eq z>L2l)`TJDPvw!6VQ7u1)TC>_eTC?(=AHz(v+>Zv#dQky4i};O9-EM3d@< zdt(ig!_*X2`10{mI%VG^v{r;Hz8(d$Q-|D7zcA&*j}SpA^Y`b%DI$~zl&34j3i~Zt z1U@=Fn}+9GPz??@&)*WeMUXXWNx6Fl1V7Px$HY0fg2O;sp@&=b427g1eUp65jPbW! zHkIvVcLZ(2Qtqx|*&qAz3_?mNs+926os?HfOWh&TAGIi}e0ngd`{H`KYO%%@evvaZu?l9B?Z8&!^1f&kg z7IU|>o@!|=^KzLO27&1;;1-7nZjhbL@w3}BQBfRzT~0@bWJ6RRUFp=?C}CQM^4-QV zP4jAI%Jl9Si7rj{Esqm?Iu8)L34EH8#f4Y*_s7=6CE}&{g{VJUyba2U85A8PGZ^{Q61SyMx`1UBJn^XH#5t70jh&FxIOspSgfDSPz$oCUsRUj6=^SVoc; z<@eeFku#R@IvdDL8RVX$PJ8USNo}NwLnd3_xH>a+nd(}_5p~dhK4pvFo{M&0m~F6* z8M7(+n$@A@{PzSw?4BL#v`o{h4rS-CcBShxjap{s@;ehgW!B^S=j`N@792TmQH!$i zO`H`1N*3*XB)6njHfaK5$;r|6XJDzo7$S7K$p=Uv{lHEbe?^1`T-Q&MP)qC+ifzt! z@k{!{aPSX-TAkUEu%L7caP2~r()+mq55-9X#4`x+@ZaIHQ2qz1i_XN~f8~YvZ;fG* zsP(Dg_=cFiCT3N~#x0ivc$89wXJ5hq96O;`gsaWCN?kpn<42|t{4eaNc}%XhewrBs z7FuB1);WV@2`USv9_}J~lUY*gDMO(URRiEnVWGyQb%QAE2GG+6o1mn?sJnvDed{K_ zn@9WdL8|PjrHyuS7`b3c856f7!Y8jDVG4mNh+cBH@(>@_T~aq1TycKZz?Fl22aZ)v zFJn^7h$?;(f$TfDq^E4pgnSyNpTuX3R2@q(B~SLL2SgZ7CbCof}nPNcpM8#}z7)W|gX= zL5_%F^?5U4>0s!GoB5d0xP^M9^pYIq^Aju3HGp6px*1=h-8x;Ih1Ka02`XcaRXd-k zbyg+r_8ouFD3SC-bh*&Xsy3+e?(JtN|5!T|*GZ-om~M{41)kZ^SGMX*h>;3*|8_yC zZlfr~V617dgFrn4zzaIB?%MC{+q{ zFHrlE{KxG2{0IaBBBc&~i+Cr3jvkqBUpTs3_T7|!AF5I%p0MC#uKBmdT@R=9)Z5Z- z3Y@LPLErlw7tFWLY@b|&DPv9OoyZhIXy~20-toEHz741UNr@y zot$dsPYlc99{U$W76oxihSGeFMIWnYE$nu23e-prXl~gwuNTDDF=c1nd_EwoiVBz| zB5r(2mOj^(KWp1~dp7ZOX1GpO_Yker9zGiD$DQyLdU~zBY~xui>E78;k;S2O@5aZ684kshVUT&G@ z-T?CQp3h*KhV03+{z)x*%ltld?O(ST%Z;h$V)RG607X7?A&yvNQ6CnUT(c&-=N~G0 zl$V*x3;D$5ur%?@Fn3G`+fuFG-@ki2osrgaLtJ*XSppNWhk|pOcc$lP`a6xm*_S*a zVk&)-2SZcUCyu}6f{bK|&021k{oP5`*NtaCsnpPLbbgEQyf^}XGT{o9^2g2yg4g8I zI(G?do96O{wFjh|iXRg6^A&Os1#5Uv$3gpNhxeCR601O{=$d#*{~ZAEw>g0qytkMU zha`yX>N)Cb)DVs>g}a5Q?7B%jy^g?4N0K5qNH>fX#u=6+&F6;CwNI25&y0=Mu-#e` z5F?I9jENu}rOx}p&554pZ-$}OsB{M}ztJ{f>4&|rwBBhLX#a41J*=jqwy)gsrZe`y z=(x6_7qv*xq>ws&f>4QSX>jBdRKLl9dT2i)y9P1`6+KPBe*0r}y!itBfAE3b0{f8M z)A1{y;Bq>WKY+&zlZ9FiNADGSK2GmrJ8Z)J#zh!Rfvi@L;i=F2^61%@Gv6RuI_zqc zhW1?Cnj^HpHW!*g*gMI24A8K!9x~mYD8+6dS-_ML`faiGIFD6CxpJ4v*sc%`)#*#* z+!*B9fkewB>J{2YmmNMY^Ls8MkgVXK)y_;EnCZD!qaz4Uk5UU?up4&sXu@xE*|PJ8|^V!C$~fvh*H zC9JA19^IWJz9#DVlM0l=q~n6%h~J#_nM{j63d~C51*C>eZf~==05%4s6yhuSV@3RY z3jAK|j6&@aI#@sH7=4D?6Lv)oh%zD(K`gs`v;-5S0OQ6xJq=E1XL<@yQD8k?#L z%#aN8ojer_XftwPA6$HWKJ{k3&DP3T+SlV=tEQ-y*({i3WFSHjF-#An5PXG@+RH$` zt(x+i@(#Ki){rHk)rTwPOx=~`&O>$$$Tfpd07)B&4Pc0IVg};@f@NWpC5;X>ix2mM z5dF@Xdt(CFMEM#IXi^gh%M8P%pC^OHh(yM)^9B>izkGdC6=BW}3GSD?kT#6YL%;yv zXJY>v9fR9P=(nVpP+)c%kXHlR`G-H#c4#Pv_>iz*8htOMrYU#2EW%>0DP&N&uCp@i z=t22B2|;blvt`1}^@~f!1QuKj96$Uu5E8$KW2Q#jD?+KX^{QhYH`_H3k+R58#{W)% zPjO!=#NS*hU=uekWHnEV70qvIdb6gVJ2wRLqcBF8SSNRw&hKe3`w5)-`$PFzVq+4P zlAxqe=@CUf0DcGpgg1vir^Ey{?mJrdht1%E74@`5wsg@;FV**;E;G?Eq$frOPMI~%s*Eg}+H;M| z{NVD&kT|WxU=8k)enxNOSZSmJ1b_`>H>D-wj5J^|c~WAKJPCh~`}ou4<+Cl8%q@%@ zsAkIh`5q}F+mDYDuv@+fh@g9_m(O)^K_-g~=V}g+3PW=S!g9QAr0w4LVFyT>p+X|B zP~Z|Xpm*97P(z=*Q_s1cKkJfUuk}n_#HHGXXP08Kw+^W36&GOVm6PP4iclm<=^h@2 zVY3Nz)0GOi-BT_9q9auZKB4lo0Wnd!n&@xa)*M@jA0OXa+#r9354w9Ku5^^~Vy#Eu z*&F)Hnt@IpIN#&&{JadOa(*8^>&jlx4R}Svr|u=NLBXTs+PRaB^J|iD#fIP!`qfw6 zk@sAS$k8_)@TWI`4uo(1^#KsURjib30iWLdMX9ag^0x{>K0eZ{$*r+($%TaS>;{;Z z(cep?8H!@b&uB?@`G55+#o&-S2**Idy*4hF zp0OlgA3`oT#=yxQtT{KqSmFIqP;{fsakUx0DE{*)%Ku=0F71IWVJy@r&qEK5@x= z`s;lM1VX1yO1Gqzd^GsDD~?G>+yZe}#>$vseQ#I$-f*!W>pXkCO%yxq zL9W|D#;dM;terU(3X*uUq3Nz|{1P7i_X6z_uG!E=RsLxNME7|`&b!M(a~Vf=5HfyC3`o?wYpQDK{xM9&=2O*rhzuC-IEY%^cj>UyIw{g>f?*fL z5hb?R=;g2&7igMp>-?$rP%0l~8Z8;r+Qm0?d*PC@+q=Ar87b9Xau33&stEiM-7fW3 zJiKj7NfO=v5W`!(r2zZ^PS|Re7uJjqd_=YdO}u2jWF{#SG>j);^+QI%VRk%F??I{| z`A)3>339;Tv@@>03tUWNH%P%Ldc@4a8(ZZUs7XRFZzvR<2Xp-ObVMnBo|q z)cEtR?^jjQW8c;x{-^`^VMgA1IZSl}+LSV9M8V!GxYFxIK7JL_jmh5QQpTg_*X~-? znZPmhf=gM#g#Qgx|JDu0$}mtT=2hJ_Kd(lQ@@l<>+%C;%pFAbvpg#n~gmfefh-+X_ z$U({V_a%XTgx#A>Yn#pS$Oh%-ML#3#CgJnpM8CYrmPU5zwdzdf% z{;;x9B&W3MBGsu+tVzF3K#K}{E|V_>$mecUBi=TAdL`>4{OF0bC)<96rd6ZcMII*EBf zxJbC<7et`GTiQ#Er=R$1N*2q!b$6e<@I^c`|GCHCYKtk}zxTNRreUoFq=J$i2wBay zNow-AjVJs_{(IeXHv{lpSPMbY@SFj)xH{gVb^ktdy7?vYwS;n=S?7Jk&+y6ONwIae zxnab)roh;nY9fmCe~>zIJNV|on`*d=RhlbdtZmHiMvHWgoLVNBW#5hoev7g7dMPyc zV2!dWfWhh0tAGmHQW3m$s*@_7HlaAgdn*|!^X57ez2yxUqSg#G8oc*WG=2-|sfiB> z>VuCIbbE3I?%-zw?m*!2P)zp85XFKTr^(J>=C}y9y1;1dPBzhXL{uFHDIwx+m>UM5$o953o z$Rw81Pxhh>Fa-;heJqi?S8&t?%Z+Pw*Q9n!hShEu>6#Du0qw6*qwjZY1Uj z?-HP4d?ukyYg0+UG=HY-XS>fYNFp3KMNbG%z(G%@npsHylDa=Vw(Glr*5Y!ZOOgGp zp%CWV4yEuL_qdXXn_Oe(UPXXH0)bJFZ2_KG7TEzBdF(#{-CFxEEZ6X zStz%UiKAqx( zuhn(-Yhq2D&b9N&``<<@DPQ@dcM-`eUjTTkg-GJ;{5J^aNK~{ODlQA=z6q7x_`m*WPwH$d z77YKyA!NltGYVuz@?{xN)VC*+f zlZ=3|rqk(OU2bm-;l~RXP8!`)lJgBO!QcIJ9c&=WklnC!h%p<-RszSJOKRa)AQ(vm za}Z09g$q>@#UVvcfkffiwA|XQZmzw-Y2+jHaPNSwV_aEKHXW&#-mu0ch~Q>Wuj-LHivS zf!V%eN}f|-u8*HKjOi3WvG>P7vT;IJFZOTGM(XW)*4Q^q#?FQcW*#?t*sQeV&kdE{Ty$n2_!h~)C|cf!6;-&1 z_5JL;6Wu_ZToup>J+~J})osp5Vq#}sm>O5ZA?=Pmy0#&sxx8V38nAnjq+2zzOxEOT z#i{ct)B7O2~EOe9)3oy{o@y3@?NsqXSjpM*UkmGy^C}Z^b=D;L{g-y zJyls0H8&yuVL1#)o;=5?&CMj1lCZRRAo5`tE(t?WZN_=gX@D&;*F>&*Zb}kMW$39v z62C`?13Up~BYW?)T*e;5t#Ylh(&+x+Z}faBS*0iH%#E9UOkzgiG2 z=rtKQ&sA01z#*zCZF6C08iYH*c0OmfSlQqlTp&{Ho3~)e-cu;IkMfdsW~_~_O&->ak7hR}OD(5UhtFcN=Sf=RIO{IVs2#PHk`z7w>E z9~aamaLf@+3_lx~7Ncg!!S@m?o8`LM(q~_;2 z#(cl8e70A<;F_P`hiPDKwT8OFe7!ja`jw@4S)i{KVp0+DZ5PLbUM^13@^=%%S(LKJ zPksY1+z#B`ZZk#m4kEbHT0aerb5$=L^lR`PHJPao;oEyL7w|^Joivh6nHoxj%Xy2A zqsNTELDz&1{p|Xb`Xy)dmhaA$38WFlOjwlwK6yCLe>fHz0lgo`eG`am^n`R=GHC4c z=8z6qflDC+JaXVDh5@2-sFOQNOkSMW&v|g&GMxgFyYl`M8vs*4tiP)(wx2a;&j!DY zR@drJPWg{KAoq|qg#Gs-TdO*jU%|*IeCDS$SF?E$%*sY<6Ty_No~MpbFCOfp>FOTA z;AG_;lRhFX{!@eUC;8w<7!HHvIAj=EXOD${PFjSnUAg>v1*!f5@p|s61eR9fAM6>s zO#L~A0w%#swk~QIy<3>Jrq*S(~Xy=lnIO z3Qc95UUExF3@%LN!Zd+pXs^SPqB$|JxF*7!l_HgjJyIJPRbA{igyCS~oCS(g#$nLn zwfIIarpvqwjg4lYx}^VMs$-B+&Chm&!e>Sj^)G|pWK636XbFXj+f<`Xxm#(N&%J`h z5s&7}n*>~q&BT(ai7o0r+QxATRq3v^1Cfi%(0?M@&Lfz`UHpjgAJNbRWs%XjT;+0z2H3Hu>J$6A!fmP)I>cRKGeSen5^ z`zgmolZl{SuY?*$qNMsMemnma^pjVF1U8n)PN^J4JD0M?6ofV=PgJYVg5inh)MN3G z^2e7s&nqFhN7i+8zEy$UN6TGDw}ehzYQ)?k&@V?Y-u63Yw~n&UuYQ=WH^(_n3${vB z&!)?im&|?)EZMM(%B={BDWYVA4bS`=!q+NVOzy(4J= z`={7}0g(XElAQ7dTU%J7cpHWq)?p6Zghr>y7Rr^qI|;ilDFBU=(g;(TG!eM&ST@{Fvga-tBAL%S=-tbo|haJhNU>+=8+^ z2mYq`EIOrc3DJbo>B&kx77hy{2@UT~aJ(cI^r1h4T*-uVIS5(Ik#p1N(z>>V_J%zz zG~Jf2XB#CQTcus8c@-l40KDHItQ>*!=}0SeUCN8W0f4YeuNBiq^OjN%JwPOi3>a_n z%Ea%2*(?8-$|C6hzXFUxI0vnBC!0mGm zE`+JyP*Awpv;0;Ipr78#2>T(R+Sv>v2lxtO&<|1@QZe>HQhbX1Jm<$|ru|qIDfp$O zx?v8Cd6PX@ElkfRT%NICtiQ@ro6RG3UezN-bn5Zxa7)HHr6nOpg3r_d$GWc-6mZIUsh#Qf@JUsIpDp!z03PJ||-u60#&DO+99e6m~WKEhr8ZirHpgaq$BYuG<_c;Tv5NAOnWZU-8L= z^{L2Upg;_)ST&(*Tb;)bJss8$jmq;9LO)-{GwZ!rP~mRKSRh?qZtL(?r^4cic3Rt-yV?t zwPUx5%J4o`RTl19dY)@nDU@~c{Dtq2qx#O;IfBDomlM!FDUFhz9McMilt+h| znG;VJ_DqzxC;dB+vM;*1?-rl;W8-g8{r5_2qlOkGIy4Y~EcgT3(QV4y16_kNhH`sH z@^$aTGV=?ep6$7SVx%yQos9plqV%--dBHAo3bZB^W;#woa({YsK#odOjcPqR5kp&W zy1Qh*7(mP2CeYJi72z(H!RhXV+J?s3i`T!AEP@km3VZ!%rJZ{CT|npjyYX)uQ@qm| z73TZo6i{~vjppj7l&#<;nK6dPR4V@c9c(4bCEHJrcw`@XtcV}Y=JZ)pFgP_9`}@&# zSa;Ttlk?^cXe2+wv^#U&egY;dg^85sIr(I@L6e#?c22ZlRkN#gKo&Yp(A%sjI50Ro zbv`A6UL$RMx{$P_LUD=xFk#1Xzz5Ko1by0lqKw;~Fb0=N^)ieQW8~IB0)0N5cm+&e zBr)7S#>9;e&7frk-EsMf4vw9|m<|!1S(25o3`xtZ+1czVL?_Rojq~8?V*#B)XyX*4 z>8CaV6ptHikH}abd&lO^y?kx9>)hqB>z*Lg$znqig?m!q3C~wSZ#nobN{jplD$Cg) zZ7DGs?)hEdt)#^s6W?0uPxQ-0vwKYbLNI#DV8u7!4{2r&_Dk2o=lYMeyNv$)>WS*6D$Ju=9K3SidPjk^gsqx*?rg? zrUf4$a--UjOVuOT4Z#&Uhoa9|#+<>0f>n#BtnRKVwub>z#13hek4VAP)|;FjW5GuU zC(DvmfXYr=XLUAr7UJc!bG-W_*7bg9^a^fB7=y?)@Q1L)xK+_oTc-}a$fZ$M;5Fd2 zT6@9K>=}8$b(zU}Xa{H{L#8GApWCJXV>EUvuIm&_`V*L7p1Q@yg6t`mwIo(K_>JJ4 z$mE*JmRA5Oz>%%zFrsc3DR}EPkB@1|k6M+usE=ZABW2XZ+#<3=QC5^KDITfT2Ohg; zpyeK|j>f0nyX!m)j#tLrOwqm&%h}HS5T>i9<@LDYvTCJx`xW1WW}ImNQcgH{$NbhY z{OT3V{z(e~x;ZVt^NX0}7N+yEUOq2peI0+vZyU4@Vst}KAe3&UA0J1glw=?OTl<@p zd(#trU|32N94wX$Bkt&tEF!IYJ)rRq_P!XkLIT#NW zm4vHJ6IwR!$QWnH*T$B}iP8lB_$SV6dIU9Nnq=fG+uvO6nigCuXbjFJUY?JPYpPbR zW@uI31^_ilQh&0(Z{oGq%b&l!7VjI2T`6rIf!|o#1$y9oivo#syl)?Tu$TB57cZOh z?w=leV?KURvOA|C`Hr&SPtQ%o)i=v~85?f*M@IYTQu%W7>n5>{cKA;}is7FDA2~xZx)P z?QS%2)~fYTF~tG;bkZat$BT z-X~f$Zy-xyw@&>>ak8|A?!;WBSYDYIy_y9Gq(#X2joYoVnF8$bG3*GOv2|FnFmUZ^ z%G?VdQsvO_V>d3F1F3q+hbM=1yM*BTL7& zy%7K{T??Nvbc%{RAB~q(N6r(~PqJ%HuZtCk+D$8z(MK9-2%iw@AF26Z8JUiVnZC2| zB|dp8nM>k>De`DI^HYBftg9!5(t`D2gvm$kZKz4g>VrUk!`E6c>(;+3)Wka@tZ;NL zQ(tFzKEDh)tFhOllevOQ7juYwV(fieH>^bEm5%T!Ub?nw^AGH8LH|x;p0uqx#;xyN zkQu;rKxW?+vuy8ecp2({0;V!j{E$0^|HqxG?*_UQWm)~`F#@PCm$EVg9_8v}lYT@oXm||GShD4v@i&=+9F3jpT zuS&lg)1N>XkNmf;*e=hUH9XeiF_xt!a24C*aD_??jrt-a83{9B?Wa0bCfCqyv=g!f zx!XDd9%St4JVRwwbSQXfFyYAID`4R$IZt>LKBeJt%y>)tiZ`p6#_x5#WbE42*4Xy& z$;?7BIqrkT|KGC%TA?C7K##Z((DecY!H4hB0fE0uG5s@$Z$!T{^mjAcqcg`%B>LWP zMjmmAhMiE%C4$$6=E4FAWx29$CEFGmcaTK{tJf-?9sF6XEa-8WE}I1{s$GP+N$_;( z4bUANrJgY;GvfVZyYMaCALM&5;%e#TZ0fU@jeQCD@v3CTAD}G7(-W8g0?EB3gnxB; zB5tw_9{IuNi{Sa>k{Nc^^z>Qfd3uD29j}#k{_&@%a@O$Pf{|E1?i|C&hl!-%S{dbu zvRPChV{=+{aoNd8R*fiHg>8253)>|sT6&!7Ea7q$*$4kz@m6_EZj*n-70r6?i&z7H z-Du+5zB!+}x^toF=s+H=y+aXF+Yk8Vc3Xd(jQmQ+&XPCp7=3MLJ>ile#K53`}-DBM}*j!r1YF|M20eRFIDI`qxMx(BKgBFbnX6BpDFx`qHa! z6MbgWO3P(5C!!gaKGA|F8phPx&-RD&f(79U0;cM6<=o;+PwidhjXbEzzCUP<(`8k+ z9&^$#|BNi5Mz>6FnEb(z&5Hq&ebY8pG5qRFXv`x?s}hL3oq>fVa{z-JBuS9)`CX~} z2C9C$EecR5%899MRx)rzDwTE+&=wm)-1ThJ<0o$WWgZ-u%pW3u_1 zYV(U8Pl@9=UeJ;-9jmPt+wQNga&PhC1PTjB=7ORilef~>g?r+U8eim^9wsfVQw_p2 zfMzwEL7&3mU2CGZWddNf4=u_^A+lLSC-OuPAcQOCWRq67UVmpR(oEnksp4194pn|4z(^Lk(=aoon0+(FLvl{(&6 zcjNCe4E`zYqIDhoY!c2`?_5)R|0~dZVG?-rU)3oDO>(XQ-@Wdg8%qR9i51Vqdk9-t zOQBc{$Z0;;I!l5Sl3Q)dvgj|NLn^a*22Ax@WFS5BgfW#Q<@K0WSPC(Is>2Dq`+=7P_$Qcv9!8YTtE!w0`-9 zy_rldTHHPB_pH4)1H49 zA@55!t6|6)O!i2fG%<+1oEaP9E@N{n0Z|lmGR?iD#V0hw8#Qum#^LpF14SZ6Vi^v2nm>aOL7Rf%| z>Oi=wf8j2rli?G0_}IFhicn*dC+XrH;TjqGEEFS|s)n5lQrF)pt>bz*FE&WQAQ}CnG83k>G6@hR;*ZS!%i_@s+yL$mkU(eJd8r zN>W*0oH&5#_7|2&eDmhXN?8Ta!>;V2taXTxfcop^mzulzTeUjr7v=kc`nc3L(VY>) zPe!nOnFtp%Ha@Fh=)9IWNw?rMkz(~T zt0=?JESoC2n2Q}*}8@E1<&=RV-+(x7;3tNuX*&Gy!M=AWEM}^!5QrXEj0e7oA*0)32i|~ zd+ocylBDqP_wZrNBrlixPWNm0k*y$T%`L8vj9?WgHA8ckCBOPlnUp?m8jAM$w~*oV zlt0l*XGX4Pk(IL z+{6{w$C)P`tMQK*fjrkX#H|T1Mph>6WAoPQ=Do*WjJ->tMW$N5DlmbI(+s|f(|}U@ z;Kq;AA^usc=*wx6s{=FsVRy0!#CX=v38g+L(xvBve7Iu>8cUyq*iUHUxP@zpsP7Fg ziqqQ?9h*_%)Nda=y4jB%m*ZHgbI#HEAbVHjy$Be zm-*h`DwzL04~1WOL|(Uvs*5|y;QbNp{QrPf+!(@fahlSlt?&X+FI2#;Ln-&i^z?7` zKTp~>hJ|5qK&0h%L`&J$+~D-I8c&!P0aWns+6g&~WoRw(F$!6voSKPefrMl!(s?Lb zM;jcScQvrxO1BaSb>sDw?y?&7Cl$>|!v;eGB%d>fO#wEp}DS7f~G3I`; z^B#c+0wtZ#h1$zJG)DDdG72WM8Wfr;rgNc>agTnwePV zQ1Mfg7zVz6eu|2rvkMK3Gk7J=H`udmdLV{hSgfQcA51>$LJf*0y@zB(zU`t>M0V9h zb_89j=wuWTkxXP)1$fztlk4kkUk}jyM>nM5S2}@O?}qOJJ}Y60jS?!209>jSHdaqZ3+YTPr<%lkc?YtxvLLTf zHNIdyNYsUMdy(ZLj0scHH1N6(;+3?{Uk5z2{i^<9_}t%$Z~#(fEh>@nc6E;n{H;I! zX~7l!84#mOiw_7P_Ta+LiIp7jQ=Lz;ZlG76$7hCz5c@hgqb5pr< z=tv~RkZ#wtg9OND!)9^Z`g(xUlIDTgax;09q_7f{h9VK#CUAKj!=ZG`$lIHKzTBy< zc{*Rs$hUn`>oYbF?*YKErCw9Q=`M3VUpo_o2VHJR@ijrK# z0-T^5J4qO&|C8JMZv=9J&nFUwf#x4uaK<*~78>;8r*HZLudvq_YZcJR$Rh^OQ^Rm> z66`6&R@cu|AXj=R-HkDzx!r(+=;qgDe^nwf*<7P73LLj$5^7gV#t?f%}64GH- zl89|KbvxVr8xt-JhNb}?zx9N->H|P>=P45`H8tY+N)J>^yMzxlZeHpW;g+bQ=eN~v z)7u!wXVH_Uq&?rkXyfmr#K3>@KciR@@%NWgb#I|pdD4=; z{_sYVUAgepa&E+-my+bQ1AU}UaH;H+CLiWD6#Ht2Lz*NA*q;PugDP6WXBmK{N+Dnk zln-xrz~y>FN&aqvZjI;jS|M1Dx^g<1q-t5$PBn1KeA^cuEHVU3Y&dBlg9FKI+YF~j&a!K13m~OyLY5YH~-Z4I|uv;IF zZCj0PH@0nC6E`**+i7e~Y&Evi*l3)Fjq$eW^ZuW6&exgwuz$1fz4o=%x}Yjy+fniI ziNkPDF)!v@-?9)B*jCtPjzRVFoX15T_`z()#Lt(YHgKpDC5?Yg@rTk1r035iyXTuF zHGT^Se}eF@mFLu{v$oc}eB8zEoHTbu2UV<297L5J*$)Lz;ay$t&_JYppB&B)gsQrwyVJr@~CfskZufLd|6Ea`wVl(swNJ@Vcs2KgfHy>*2OQbIo z#OtaKb@3#sb8yNnY{w7hI<9*~=TLrxiE(Bxkby3zpd_UdwZbMRe{eK(+zc2jCn(YA>DchQ@kL&29`CxZ!aS9M9^Z%pBFpNzS(DN4f}5J{s#5G7W)^}^gsAUeAptRHID(|;Z&DU zNoGL{oHSp&{C~s!+B~?DfS`mZM3eZYsy4J1Nf9mKO?y;NQ10bAmqM+vUdCcom1(0v zYI`e?ER~s93HqH5t6c7Pug5i*yWcHh^$(q}=VVxgC!38A=u{n^%VE8qsyIgS^G%*D5xKk~5XT%0rQLb(1WUfe zE>6MsYuU7ylQ&1Au}M#m>T;TWAB4JC{l88QAzQwYz780|4^0^A>R!Q{MuEkY^}T(k zcTW_WM{80yzJ)sq5EA)A1fg|2r}V-1u_M$BjY$ooyemADD^b?N3Mr%o5ei1EQ<>W_ zGLa&jeXGnKr=9JdI~Jsr{GQf?L~6FdHE6KEc2Wd$Le?TV^y#knq`oAX4#B}Ys30*l z1L!7hk-t0*WKSzNI@(b6lNbZGp!c0Zu!FXWfrT+@b!l#at2jA_S7iA=)cj<4od|i) zmyVG!IDj(}VlrhfPniH2U>f=V@a_ zc0*2TQYPl+q2Swt@}^(g7_j0qh-BZy)}cNRhc@jU(Ex?HH@ z;hN?}hok9lU|hB0`58pDbw7)-+vl%1J3;(7R9HX4d196S{`q3>JcDm7kszi$D(X$2 zMeJ+oZNn(Px(2KNzAM%|8n!yvo3v_Y4jwkIBeiv%f_BgPulbH-u>qJzN*-$va&VSd*iAVl_pbX@mXK)Rkg6TaV+yjEE+Ay(HLr!NEqsHM+ zJ<*=%xedkbRG&?NE30D2^wCK0QR!aqq6aliEkdWHv(Rb%GLy6SODcA18Kc28JCQxa ziojB}N}Mn|HmLb63#--97F}<6!ck68;CuSXHyvEOd-OaF9J%r!UkM^nExtVLRpifsSv}%;gPoyuQN;rONwK* zuNLT9y&bMR0IHBBebv#)Fce=yX2}p0SW9=a$2aeC^hQRjoaR^alItFNuo@y80->8t z2I(jx41XHLvq7_8E&LjX!Ulc`Tua7`Jsv&`8+ydGJ+5d*M_Jp73+f4kncX+fDP6pc z`=M9Lb@oL^6X0zrVBsp9k@C;O`{UYXKk~RO=E#!*!jBL;d&w27i{)iv?lo(+e>o7n zbXS6@OsPPTB@^h?hOS6EaXN~9YcM?xmL#5_>{vv~`pQ~B87ucmQY4m?r`|LnXf!SY zHY{Leq(c!9R=K#kEr1=W`u6*0c|D^F@o>c}0=rh^l&Os4gF+q+K>u*_H?oa=luW3= zB$J23j4od$vYmoRcg8=f*Z(o(wW6^ziN4wff9b8)SBVKAU3;%IyyQ&Fm?Z^ciI2lg zlSXrq5S$$wnO7lG!7z{|)gFsHkQdDiLgqX?!iL3=L1`{$j{Hr)8p`f(8*-$=+IYGM ztykQHbPo-mbsfi~nEzDJO!VytcYR+!(^8I&Agf`~vF3L^t$*2pMAeq%7N#qDSy5;2 zH`icRuh6;{$~`LqZFPCcj|EuthkpDc9L0iVKr7K7k<`pNWId0f$pliH)fw5so>_2p7s)T z-+MY|OY#^fgke^j1az9dM@P?muS+%6^>_d`lyC-d2sO zo*}{c*)+5!t#rBf+6&0YxLIA=hs%Y$3?vIm$X~+(J(xK1BtsO`D~Qd!q~lIp&-nzo z>Ap4mn(gYmljl4$6yaGl=epTq9N$XFCRzE@08V8sz1u$x``bC#^pF+M zMle=Cr+ggGhG#YGL2uHK{41Dh zmHO5{&f-UB^yd)u-Akc)f$m(UR?`j-uYC2JXS!w09FJB&l@fqL$d>`? zQe#BX^%nG-H$`obQBdJ~S06~Lwg4u>Eg z`}SDUfu)^KJ8X$O2lM839AW-}n*sw_J0Vs;8q=+BA8@nbJn#Mvj7TzUDL^z&DU4>= zj&=rv=+-ZHl4+PsKL6YQVHN*HA?yG@A+Z5;kKj==5jxHUoPRh8nz)7wb><8(mMYq~ zIz56GQ8nEVS7?Rqv&gG)HRHKb3$ij4*G;?8D;344X7h#9&crIT~r;TaGxT zA`^N#1{U^kIxlb4p(-t!;0M9}$%~DTz&Ng~X}29<`Et8wRAAX>{HGHORot*EZT#YA25uG?i;gAWf@n|iVfEoX2?;fk_5FR;0s)va@I3Wu$om-1BO>+sOepq z>dLk-54Oit&i1aKk9U%M)MWm+T1}6*EbIc~&HxYD4MlOA#*?V|J&F-iL{Hl9hRK@p zoV1d|Y@-^)MMXAzYs00NoXKF}RRa70q zWEfsOgzGs!j@L<}y<_60=0kR6PoN;bK}ah8@8*jF$=c18GtoLow?(qdcE<54+IOwV zX;opWK-BaT%*8j3;_uL%l*gB7tqv~l662elpadTBP9L1rnE%B0xWK*sF09pZ+88rLx$Lx$nbG+O^xyOa=9G z%$c}Wf&T$4 z*w5sytE`v&f$C)c&Z544nz7X&;(D)!`kHJJ&{E6sYIHPc$I4$tcg?^gs&}5_Jo^Fi%`UARgUq3e$OffHF{~~ zC){9OVU7N%JCJ|cytQ_Np&9?G66!eMsp~kM<&1)bWk_FE?S66`v|C4Fq7v#^|Fc+#>myF9%-c~vjf(=d%!k$-eFb&#|m!X z)KqbnilY}C(Pl5}w8HCX?CNMZ@*ct{`ZW$XegujbmsJ|zV3v|?bUP@~@_SRZpOS6i zR-#ba!@&ignQrmaVdR@QKh7PvuIceWRg(;0P3GdksG|C(xa4q22yBcK}&^7Fai-)ye!CU53oBmZemcPRvi5-K|bjHx$iK@m$xM&v2V?Bs1BZ;T9 zWehUB`EqW|36|9^XxKfohqoFeq;e=UYKWD=X;701L+6J-{a@ zV}8Qe3q6pa{xUEkT3AwLPNGE0z!f)Zw8Vo2GRmu%QWkpLe!DM+c_nc+Vrn&UG_?vv z^7hOG22|bazK*k1fxTqNu{^5E(e7cs!{E%Td(ztLSNRl`kga1l&X*9vf<>Fkn;#u7 z{z`h*p>GMdN`|nFQi&gqKr#O%nS`fg%dd)wz&IWDA)^f&N3FKXs6GfpJ%F|(NEG7g zLr|;aB~nRhM#0`JBmn2nDk@##Bek84>ZZ=hW%0MEPG=-1SeP~I(oySbLs)r;3#oGF zqNg%lW52n1q%2}=Vqq}> zw9X1#fiCxy*s^>Tvim}ZR9FCiONj2wD|)z#Zrq9fe9y!W#5YmBFdOqj>;0E|DE6FX zLSfT$w`!pKPd5|O_5SWN=;lZ;rAXZhvVpoG(V(&0+L;bdWa@r4o;g*P3A>a)RfJZkC?+U`*NrmNjNBnCQdOJ5#N=zqEwXC zB|5>Y1)LZdZf*MKbVLE$Ir07JoKa7s`mub>12RUU10|*IvMfkN)ux!eekvI(ho~+eziK@178xGyRPS%(U%?=bn6#uIJUUf zl6>=ke4Jv7ne*RsB>p$#YG{Hv6e;3wbRu|BFwi;*wEgmqlc;yYpNZ)^CMsZ5oQS^w z#VPvv$j$_cGbjR#4_287^#>n@_BSYJyFB8%b!capWG`Yq2R&9wt=uOh?L19mTT{j- zfkBpJ;jL?0^<4P3OGvtfQy18IpGeO(EArsfmBIyRF_5M;a~t_Le%A7lozbI|laXD;r1@<7(QbasylnLx8HwRF0*g>B zi9^dU)n5)U6%hR&;u{Q@?rBmFNf(Y0$`HV=mxt3zXVV7(CN)N_;=CNz-xL|tp2qs>GL2$ybS-e8{hIJ+k44h zE({r92zPI)op*en?;QpWT@0XOPpVnp|GIEKO?OdhgtIB87LZTuYsB+5ym63=7XhRva zFCiHV#Qdza>DV0-`7RM2hu5w)$q7vPCmYU(8q?BCi(nu)6ce)T|o2Heas#gS3 zwYj{3593@DjT?sOak&lj^OIzR3WwR?-Xajp!`VZNxBk6nwg)8#@TsHX4Ot%+cK?Y& z95lQ8K=9LmYyR!>rk9e<>e(hKv z1(iaQ1s&FGsvi;GL0_Jdw>CMFMrU44Z-SING9B%7gj#^i+Tq=Y2G(i}ViRxDEXx85 z*+edZ+x$Xx7OjBra`SZa$Ds->r^?0iP?(qXWfXST${xVLsZAiw*H_&LvGvGK?gUoo zbf>Ob_TuHe@3I$Qk%DhuTrnRxTaQW=XyMu-1wv80e)ryhOV#V_ zZ#_-+?fvCD!~$Od>r5>v<2UK2UQh&|r<@8Rwgb2kewi-Kb-caz*1;qLZ~GLFE)3S( zr6zx2qod28B>#Os#eCd^(4_~A%`bt;UN6`kA~3y~h+LP^!}3adYSqC5=ddDOARVQp z_r5h;78xRLFxy=XSeQ_SS}{j@pfbEeRt%z%l;O5EdL8T`i;0ssV_I@BLQbyy1)~rW zVIs5?dt@8;p=4%JxSg|+4Q`Qb9@ILjuvlGjMPoS8Qo6Z|l!k4K>V6Xg*RcLK<5Z6?9faBtnksNX7|_Vr3+%*s3%j&iOLK_#+tkvA^TUvH4_iOPyEHI%m- z=`5ItJ*8XYgm$Y{(S2p&P0dpfl=Ng(_-Xe@jEl%6GtJZI9mGt|+$#S6au^Zm%>xH; zriosAMX-T&#rY5Z__^Co7Kz955RsyBnJY)zEF~CWTl{dT<` zE%qr%Y=o@nSsg;R4DYmeWSeq%5a^&nhxG;QcUvjQfBEN=h#$N=?~+Tx^0AtEDHzaC zwSh^?#bxr!DZh}bdd>+qm)tFclK15i_;q@PkR+qj>+hqLBdzMoDK84V=BI$7jK_SI z!mhpIlc;h(ygrV$bRWaEfZq$tpA4>RUp9WtR(66 zu<(lGvG{s5Jd||~TA9@*B0^#h2xs5JPK>bXx<&_%j8w6B#)JqT$2T+xSfOKK+~(Mx zUeY@i=WNfq5jmbegfX?9I=xq@HODQVAS%(ZPvr)~7bNdCHcgDaGlk1+A(&pX1f<3o zb5j4d@&zl#9^B$;v*RB?2A(R7e~9;^{%uSzJO?*J6XhpLg2HcM-;B6cj0P#ucHaTt zw*f{L5}Kj=QPT;Z)&k64#YNmgSFlpgWL+ayz7Dl>dTO`IN8(mS-!TZUt6-)wU#V)66badx9a97P%zi<$waI8VbiSfTBQ zgc9Ifvu1wfKB7e*ldD+$ztT#xZA-< z$NcN;c#o9C*Kn*tH`8#m(R%$Vvl!JdR43Gq$}D^_Yc204h)iDf{U0n+8$heiy^Obz7!WmW{1F?eg8*i(=;N+VNw@9a2n}VoGc82a1?QB8UXN$Se3=aEy9@L z=NrKtawAyQmM#O&?~5)}!`@Pv)ZBj(aTy4fKc&x8!|6~YNz$E&gscmKD%K$pomM49 z%CmBCL)X4{W#`bR9(;e5!*iS(sqR4MmLU_*Zl--D(PSY8U$=CD>HGUN^0rn(ybbuN%mjWdGNkRo*Y*3>EPAnG z0&q(90IhyO!svY2{x;KxJaY`KBu#0qw9-2_{jy=6?-otwi-gy?b6VgB`a54W`NKyg z`tJx61L{xX>;jZZbC}Ef&&;Eq~uA-|!15U?x z9<(1n0TN0MP^iOZ!(xmn7{@CgKk~h%mAmx?a`#Ge>737)*hR1 zjN<3l&Q<~~vx;pmsgkWRr2Uftkdmk}z$nxg~;D|CCw5;({2b6do2mME*r*g5|mJ=m>)5U=sm=j4{Qh1ate zH_G+*?S!91=OD_w1;?>Ogc=C1Ws|T~Pxb8n&FHW6#m_$%@r=1o?B`X8AEp&Myr@4g zi68nmXqvK2(Z4O1d=IM=yI;o;DZJBVJ1u~Yq{Qqdm1dzc|QYQ6WuzlRVc z#_Y8DoJU9KXT`{BX6iGNEN#KCCYmv>@`jp3!#S}Cl@RstvOdRTV8l2gDO*8E*pUBhQ^Gxflu3~i|=hG(~VPb_6% zGSk-%+j)f!zd5|0HhC2eh)t1X>vI0>Z6o`c{}Tj?wqkuIL{r?=yDpSaZ2dI?UGMSj zx1RAf)21%}gNAs3no5pqEP)cX0-k3td;ygrjXVn!p2gxIp;|Fc2unDOytNtJCkyf4 z+F-+F+(pVRIUNP=KhByoJ)~&(e1P z7!!24oa_X{;@ImY@Cn<62k|U#OGac`$p7inYdGtx&?e0&LIbC}Q)D#v^^Q!jXHKuz zE)2K#zBL%IKH+O$oMCL3f&GmQCi%&Iw|Rxkt9J#BZTHfU)_}I;Y*7qcw}!lL2;%i` zK7`(A<)F51vpfmSByri0?La^#oYu_&=q+evIn$+>?`s@i zwXBebVD1&XDHQSDI&u$UukZHnru-LR^9Y2rDiu3pPKP;+!q(&fQFhKqd5j*b^bGS? zeJm$+a3S6e0Y`*$R^*|H!9q_)Xj03dD3#^b-p$#qkS&$(8UE3i*PAu$v$Dl&pz*r& z4_PU+&Qfetifx#pSzAg!o{}fB9+u5TpeS zit~%bn6#1$XOv5Z63>0BLabJi3H6QzE4|zsm$lL_yR4HE4CV}O zwi+Jo7q%6{JZ(SN{28aVK~&5ccsUB+{|odGU^pdjQo}Irre=uMBs=~w!I}IYRyo3~ zlY;+N;H(+t5_UQ^a72b(K^-lR9=@2M*-0TsA&5GAji#CsOa$dK0W=T?I1I{avIfOp zQ1pjL#CBziNO?|^O12ZH?GSY1L!Zs07f0bgwyz@VRgACr1|9Sl8FzQR~R zz1Raqmq~4aWBl?>?vKG0vcCPzAWNEtbbziYMEhy^yA$w%c*)X)56JSN*8#cj?Bi4U z$qnfJ1170znfYQXv8;kb9t3aU?MmnMD=kPQ43I;7^Nfxd5|3J`B1n;N(CG3#aJ}yn zZQ240!cCrjvPP624H&D6`ED1DpesgXWc#e@(dyA3f-Q+7#yaiYY?%4VDCjr4ff0`& zbCa-~bxOMGEPk<`eAC(hlta1D#BtHLxfsH9if(;$+;RWO2=t6xfv1=!Z-#6Ok0WVi ze9Z9pWUZ1&bFzl-UcEucy`}B59v*-JXvFoomBPYyH4rDZYyl1p@7$hgoJV7p0@QG_ zHZ)F?HBVW=1jmh(8ITCSYM*XPf5X|2?lbVIK{O~!hN~Gx=WjFgdn55S)9q6WcL=bN z_>{tqM}$(0(M=?2QsQ5<3yc#r+&3MAD0ijA&y!fbcgIT>Jp!({?f%6n1#F8>l zo+=P29WJ=maNxu8$52v(L}6TL9vA*PUoVnSY;-I*80N{ZQTqnx*YT|<9CCYDEgzJrgr+a9)H*e+y=(4w zMBaRZ0M~jh9(HuwTJqI={ijIzuctri2w*r@>Qe|e=q?oCS)7f!F4&Z*_45wgSp}AQ z7wCQy`nj4GIcr~{XjZU!T9T81ELMv|$B|iyD4t9y4!_aCLM;~oqK0{s&dY>$)hH;d z%Qfc+dEu6Ap?k8*@lAqI%fs+Tn0ulj+!I~htX;~%_Hl%EIn9Ev|81;)(Y$0O^y;0c zbTd2Wah@M^O5O0Orlw3`cGKs$UG=koJlwTt@dY>WY*?QX5Wpqa>kckv~TUPtbg8p7Nt5f)0}x zdeKEkw9-V)iNT+TraaCoW24u-YqJZ*e%I#LCZmbwtqn zUMhm_NvhV#|B_t(wnI=eIjVBRqb5e~pfvUL9SVE+6MbR3xsdQN=LCXdm~&kR#~@NF zVzraxK=W(DKK~WI)?l<^$9C3DJcN0pmF7siL%)d z)$h-FpL9-LyUk_}pAP#m>oa z!#$mVySDFz*0FsL3YO_lMf%@17llIuwHPgSCecq2{z5C_EF$tz?_7Thv|b5Q#WoMT zb-k0&ofwfaHEPEh54CJ0tiBS#Bp>4{?}!_|V&(|me15S}p6Ei09hw_bNY<-) z;u|nc0N|^xG~Dp<;f<=P?;z!K$twgm_pMx*k#U$6P}&7p?EYGq83psBzPflL-xYXj zVcRVYFCLYG^uO$i6S_#G*B)v9mE}41g#>HKAviDZ-*DXvEuH}NPyup8f={ImeJs$} z*_d$xMfMY7<;e6b>3lUh_}eHhixXzA+ZzGGI1D<+K5;hIjp-evUrZiWs>k6ZfnNe| z$l*F3ZgxuaEUK+_o6ZBXD2TnBi8#f=B~n#N7H{JgvP!V|bBZsYzIwLF)pHO#h>EBF z(W2r?L!Q*dM(#)zb}YSX|w<#SFcF z*`NM)?RMCnRS}CUbiqs>8M}=*tMdu4w#ae|xuA!~eAaay_WC;W2LDrwTW3w@5lQeg zH)ldnhFhjN74NU|ck=I0F66>9vdby2Vz(8j4@)}miG+OWZH2w$j(6EM|N55uCt_>W z0duZ}TPsP>HFYQNsI+X&Z*E?Hew))`Hw9e&bf?VMqADT{)p(pUW%)u$iYh+uLj~@b zJ~$5PxUdyozUe#iX$_>3t3>!tGUcx=+bB6_C58gCMOGshu#dPQSp&kSNr{)#1KdcA zr5Nc~#7CEPB!PiAFr;eRS)>;2XCxVPA^^x8{9Ziw&}J|u7z#ZsD4Wr{9{#OaI1UGa z+~dG!0O#((G(?J1XcNS)P}(bVC)4Mlrh0jF2O}Fm`HdGunyIXsyHI#H*JC9LPB&ia z+UJhu$zbv9SLWG1vs*NEvu8dv=X`X8>$Z>%b=;C0<1$xjqDQgCUH~IovB8u zIFinKai;rBO=W1)dBy2&ZBGEdv{q;A#QOB`THq_Hnut2Mn}R>KjI5 zk1sRUkFp`@c1x$5M)A{BewvQbPah92Q4Rkl9OuUPg$;`r7;blY4Uv~T@m5Md7o^C`9KwI#mAo)Gy(N<+8~M)#3U&5bJ8S+}8M zQ#8F+p++mU239@mj(vh(f)a=GAlktCy5m&?)1q@{=Lj%3^&!Yee+<-2lV`lutEC&G5f8j#<3=sWlcuWIRdRe_M-P6wzn-G zf$Q>Hr!%|X+Wq_h1j8uk5uQFX4`+5qIB{~&aZ41^F`~G|lx#CBzs4u~nRA*;LTy=kI68$0b z(CtUB@G>Od5|W>Dm(1l>S7P*c-CFV~Yz~M;e^$=1T{$W=F^uQ?4Z`!Jc$5hL(Qp6% z^n_L{v#;bO;3`FYEq~4{bTm6`^3|J!7dZC&73ak%BiIP+N&&ZtB33Y>$*4Sd>YQs# ztMiB{rQhv>yH-&X(sUxE{qf;_%Ru{Jvq9z&!Y9*<8MgimnAv>;Tjdl%l^ZK@+4b!Q z?hGc;cJ`A&SdT1xCUx$cXjk{q@1~W@FPuJb2rIBqjqJ zXTh}iUDifFIKN25hMc+?%YaQV-~3MY;*WSM#J6|LGEnb7l+<*8 zB0@(8eM?(V1>D6Rdh%rN$ERn~-AP31?6*Kc~RA-4IS2aE{)fYAO2xn{T0uU>zXik#%ZjW1N}Ct9&W|g0v29 zybbyX`P&+wm}TbmSyZPb>R2!<{}uqDyn^J|2gU#U^UOYW(#*=ddh(`LF(x)97n2`e zATkHgBV}M7S#0dg%xo;mQuNf+vcL(Zxyp%2W2LqAC#}N4AKb_JcTa+!E&W{WD&C<% zJ|&`dbPIW80abc!_Lxz+PU)bWwW!HA8%V=yPtCwdwddTJHb~5D?cmKuqxTbEUSrQF z8Ip;x3g)d2j=MYyGkUKLBqz3qcNCrU0B}fmr{@QctzN4{MqL}2JoL2hkwth#kqP%| z8^F77mKu{g_Y}>WPA7HLMor%Q`vm>qjVyPbsXRZ5Bh{lcJ~;{MYk0=2G}WDb?@4iQ zvc>|Oo$0@ZW8HdyHE+GF|!I__9B{WN?vRKfynE~&u zcr`#sRM*P}RrWcMBew7ebQ;}Mz8l;P1L2$c>?O*UjB_6&r{N?BS7`_2V2_ zNLiLfQU0L-ABRaPGxVV`JIN-FpVvKubHyo;6-n(l3?>`4w-t&#Rg~?1%78?kk9fw+gYdr-EX_C~0tzo5#*x9JWiA!{A$hg9y;6X5d zl3+D{`g3yPgl&WWJ%mus@HTn3N)X8T(veDJAs)2GD@RpG3+ju~@;Xmj9hsCUUdN=~ zYg{*7o(^EMpL5fDoKYQ;5c#Q2)n5|r57xM~!<1NCcI>|LIGHvKSpkq7JZHN8!m#^H(;D)pJjF+{5`VPhCHI3L_$hLq;13_ zL~Q(G0Sb6&sRqvWkzjh%lbmfZ^qI+81|`@Fk9v?@iS zgHSRkOTcO%3tTy@aDFTrm(4p7dR^yD_62X~=0*Pt`H>nqliWAkWV1BRp9Kt%M6%&Y zUuiHFjiOzvyz^NEUA`lwz45c(Tr}Br62?*?%3(xRlirwonraHLF-4@6vl36&FitU~ zT8*8l^NC&3TsrDrw$HW?!1Vx8N=?J2Bi*N~Y?SKaS!Q^}+9+6HWtlr8t!hXuq zR|5kOAfH*Gj(0!_|9m&-5$e=OQ(f?*V2-~lF%pdtM7R)YbQ_ewBdep&Bh9Igpt*i` z|0VfH1RD^P_Yi9O;BV#a7=QTcBtonxY%Xo%B<S zudyatu4)WfeL7`cir|U?6DlG%)l6jt{_o#j_}d<|U;IzswL1fQ04RQd4m{cvD_d=m zHck^uKB~oL<$^hdl-~AioX_L!s(p-uxqfZ${P>De{9Q2Tp>;FGeY*L<%O~wvO-=YJ zSc}{qhgqz~HAr*u{#la)3mbc{-uzMD!@t0sKi}M#H9Dimxg^_IZ^+0;!yQ78$5QE9 zz6Uovb@8XZ*KP~7aQs%VD`pd6w8Q2WGiaRi_L!yY2h2;UM(E(H*Y*^9XbPow&W&Ji zxW+K+HwcmJ=**Q&jzt;Kkfq$gj47y#1MweztLSx_9_u^{oh~#~52}@= zUyD6)IONMKReyndhd1z{@q6YvuhAUhrEs0s!47er;x!!T)g}6Nh0?r_$Ty#$?!<$2 zo#?<2FeFYl9-~)Y=1sl4Tp?;hH9105b7H=uM&L0ZyGa(; zD=ZR8tvQfe)-1@HOHETySiW4xq8UqR&o^(s^ugbS_^d z5n0-8+CDbCIh!GgSbxt!0*tj+jsz4@GIkbrX{aeRJqEy-I_HTP7ds> zIE~}qX$T#kN)A-TYF?5m0wUQOn*~cAYv_Y_UYe+##-QOht?6h!I`!UYB4H+?-Oxgm zV(SaVOO7&_&bm?~R}eReZLk#m)FX&#L%`*CNXX_|^o=!`#3Sy2?C`0_Hg=R9gBv?O zEqhqpAJl#bzCBStwlb^hc}WJ7@kUQBy*~bpQ%uX~{~TTL1GBH7Z*>kwol{gwi?2ie zQHqFuzYm&fyeD%fqUg2~j&SBUisPh~WCubB?7->-s#vCUR3%$Djbrneeo>VU%k4h{`PzHD7=p}qZ~&h45|GXeT%IgK?oJwH4kpV zY4jZ8t8-ZWV;FN$0(J0_JQ}w&tGP*ZItLS&2+BVM7vLScwqHo|al7vP+Gmlpvt@&M z#l{eNK+Rz)cHt|azh$9@0dU5J+pBzP0Q>wE5+jd#_Mb#iI!V3TB z`YqL*Z11UAo;XHJqg%&xGzDc~egJNKydf8?w2R4|n|sc60~^{cu!%?0iKJzc}>&L>R++612HL&1gUMvhzbuNiFHs$D63Of%J7 zTN@(J9n|jiqj{wRH%f_=5;6Q*G`C6H5_>M>5F7!NNYsb#a}g&1TVgNVUr42g<_Kpyfn@(1h6u7!rS-A!nIw@$-|OHY zs@IIR`h_Q`TYY;>?(=7t1TYtOejl1QEJ5M@1u2W*Cx7v6(VRAn_w8p3tO)9-$N>;h zWQa?kc^g&K01Q$b)X9jsA1%h-V~N3k&m&;~dD5aLQjpGaY>6!*DB{#r3V=UAB!#4-(s*$2E3%>P!S}eCV1d@u$BuT$IxI z+)@VR0SeRwxUWgLy-gXiNdDqUFbPP_DmrgBcfrVTTOLc)Om0}=WduhPMMH%l!4bmf zT6y0*Y;%VyqA%BIALUsI-=FaH|K6ZDu^snPdOy(ldU||xHkXx^+lANV=kDag!za-6&EJz;=?Q8Z=5Qx+U0R)*JW^DDW8KW|Gf%(`pr?r z>tc%_jwuYA*lWOGMVoUgePCkDB!^*@*Sfx*`G&sbbu-CpNDwL~$7_hrfol?t%EH`6 zUKP*V)DmF&X}+Cv^d=@Ft;q?0sV33FT0=TP9Z)T#&!?L?04mX>&93>n`nGD(v>^ym zQZWASaW?PdbZ3 zyuO~1ReS{n`^fRtpqY9MuZq52qICqMCn$;^+VNW^yER%q;lL`MU{yuYl%Dpsy}2#4 zS+f-s{;9_+2C+O3m-;4SeP71wz||Nn%hWEBP|*SJsBZj(Ds8=bMl(-0>NV1ctO2Dp zgrl(ALq#)uL4|x`3GSDKeT(MC2D+JP`+t49k(A<7!`J#J9lDBc|4cJL+iwVsxS{@*r6IO-`rJeMklef_| zgPo*;m+e>btl*yPWYo0iY9w(k^bU1#9b zd{Ha0>VW>5vGV@|6hQ00CR=46)fXUiSFWsqE1IUZ7Q((AGJzrIDyldEN**fD^@WXIYumSih$P0$rB*hHAnl)yY6e^e2L7`A* zIc<`x5cjIBgGo`^zm#xHNT)L~*VOn-I^o@P#bBmFoQ36=b>IA_zm`Di0w-JpR+HOA z5GK&gO}1)Ru=!aF4?|S3buEMfnwqUiU_}ijGtZL+sfLx?Yq%o5P2m5d#w_7{WnqoW z5R&YC4u_6*_yD~CM?s6QUZFA`3)F$v6yQ-QEh0psS5{m1a zA3#9r556$pk6wQtnbFy+;l=RmWVrL^6{_2y!sb%ZAVx-|(%y=by| zh99=>I^FnqxE~!5L)B7YP$R`!()2o$f>+qS8C%#=?livd#c`TB(!S>}NNBb<$qI1} zaqx*1&V(N^KEowEtc&pvu?a}Z=xsKUC`y_OES)-$i~;*be1>9>uHd5n zhn-{$Sj@scxWRROwo9tYCN*FQz?nVhdqt@n;n!v>#{o=h50(aCUa|(3SR*mfz2{kt z=&G&;y(1o};UI^gJjiBhAU=$EEg*`_0c`{0SSNHx&&hLdijD>g)e|75k?W{9I7NCsz5sP2jUq_2ZAC>QmLUl%8Jz9 z@UxN(pT>#xBrD+Q@wClQk`ziw_&_7>eqq^o>x)@w>)H1A*{bT!PQeQ34RBcEDG}XQ zaD{x+eF9wa=g-IRt60QnxD|J!e_hZ(H;uFMD zZ54r0u!f4D<2$Nt+U`h{xj#+nR8s7%JE+LI&o_0l!)WBS;t5NUy7CM#{pW>kZhdy2 ze7_QC+r0+TqVjn%gFX|1?_Kn}Dt;i;uQ0!^c(ffLxfWFNSZ= zFD}QDp~sfF2PI?MFb$zWS+R0BzD^LJm>=~UCpB&Z%a71B)Xs{1AV}xvJw7s2tlTxb zmwl)Vy^e8Bn`Y&K#LZ>1Lh8O1fF(;NKHsvXV5EwSWi_(e(CLwn`>TzHj{cj?g=A)1 zpYR}ZoF_O|@&=@=r#ytOI@+YA0dL;^923d57t#CyFvcdR8GYUS3|wk0?ZZ4O6-`V) zy_=e(aAeWOR)*0FmQ8`Kc-%E9XzCj!9tkc(J5g*7La_x{Ya{{m6iSn%GIl^_PrKa7 zA}^;&-hbcRG`~@dANKk^o^r7=>sx|Lo98I4mWZMdCbEr>;ox)LqTtoKhP6hQf`T-9 z`kM>gn{Q$5O>l2tO#8%&_NA>UKST~zYz}?r5;^PW(Cp)16fv}>Wwux%4uL-&^JNkf z56X9TVI+~~LZoq8+=2y7NfAWnbAX};Bt#ozTsBn5>8Rzpio9r7Q*aFhi2FM8EP!!a zo%{R^#7I4)tGm=;f{ml0+`yWBzX4_#4-E<#605pEX@K5U8x<8DpzUA0Jv==88qNCl z*TK;nKdKx~UNjYX2%kZuvWD4*A5$ty4Ijdoa}|9Al7 z0+3=Mbuf$4XdW%2Eczw7idIn(l~EPdk&CXQb#xPLA{*J8=xQCcRWu=DVNKlnD8lz&Cw`egF_&y3= z#!~{Cl{E)c1V}{Q)TBYq3OG`xQtoAXog&A%m@q;>y08lj$q=5m5eX@3CbfA0AB;m; z?uCzWy|@{?PvVc05B%T5_)n7$e|sK%efal(qTJ4usE*)p?Ncbis*vM@$g3XT*o=3__L zWh6u(ehqI@mE6bOm-m|YXW?x*xmRWi^)ZyIb_fn`Ng;Nm?t0{hr}vV1_wsGJ?g8-_ zns(>RJ>Tdv>T0mqiMtFFZRKd zwgmsK$Z@M)k!oGC-L`;2X5G=HR#GWvSFEG_+6Za5>#mWi%WbbMjA^)L3VeeRHmA(u z61goFm|Qb=hg9gE2`+9;Sg{509dPt)D6O#fr~wRfV(k-AHeh($?{&vwWOdAc2!0S_ z&C+{6JRQA~O7V@Kb8icBKw%X#MZ0^2!f}Thl*L}s(=y%kFd~ojaIA+1-w^bx^NTmf zmk$7+EipdAQmf`z9Ae@m0<|&u?+ZZw6-fP8zesW*#KQRa2{`o~weA~nw*j?4`{fz4xNxIi^O%Q8VE(7_QXv3QuMMf^m+6fOt1@$0m(V^Eyu zj_C>@?d3IwiAnjeC_kbrJUry(v9w_-Bj}JLL$tJ#kT9!~9&zv%mw&OSyUyFVU8=JXYD zom`y0LI>?3slDp`Fw>!XpPs*dJvw`>ZDzR;N>#!#RuJ8(hte;!+YMBOvP;7h%rI8~ zU?4<1jTyhL>6 zeEHY6!;|laC;ug};5PAo$pCm94#MAM?g)zEhN}$A8DB(sMIe2v$dS#CLI3U%raHs} ziEhZl8C-?N#Lxyy<*t8Ejw2Ay_`(K!@sS88m5j*ZWhj7v6VrL2CRlwil-+uFC-3U% zZKs6gs=np9Z8jixAE_3DUb*XI;WIpV`2|FaGeLh?TbA3 zQKBNedopWyEdTqi$Zlxrh`&&jpYsGMVuz&9gv45d^g@Ly9R9=N3(!QdT_+3^*Z@AP zp3k^2V8cvX-lTNAadFF_0eC<~$DAf61U$rN8;%~NL!7O2Ccqr)RE3sC=hujq$2O0^E# z0A@RGQ-cWu(|&JZ3%1U((NlB282~ z`W}cYEbe6bi2R}G$oU|OcFo!q-YciOg{U^%li%dq->$H%SloK?7T)`ykXB<9>!7N% zcu(ydHIc-iFc{}@$U7G!INdA8n2fymW7##!86@J zzS!d<26}A$UbyTAv*{$7%%(Jmlhfnz*qg)F^7#V5%Pn*csfD+|2~m}AB#r+^G1bK zhi3^K)}vVG!$5M3WZ^TMh6K>>S8*)J<#gPg8B7w#LL-_WmglL9CRl{w)v1jpu59sA zA)2s^qNZOC$D`M0lArH3`rB%pg6|6O(Bw<+L>EKPM1dX$eW-6q0i?4Lc|5fZSYf@o zP3bSOW#g+oxDqduJLYY^wqxeQk{v+{%LMDwb=p06@Jk@fw@JcX9%Lu~*(rsd8XUwR72E9x8G{Fe^%#iU4hx^Ro_GwtdO&8=5-(d3rMG77A1>q6_kMsxS0SOG z$Kt~{#9hQDfYKM2()R58rwmxQe|`8|b5W>6^{r!i(9_ZY+esjnBzO-k9_4))KZ6eh z-NDEwVUNJtaeWV;{|~GH_bFCPR)0JhzUBW>L#G5oc{K;k_|8+_`C2TBp&1|IwUn4z zhQe9WE|!=+`H0E!1^C_TpzQTZ?18leq}6eYPT+&?MDKqAL(7kWxlecjjZ$Gx+b|IQ z?q6{#lYnVXV2n+Q#H0Y3s1)c#3gR1b&86{3?96s(EAiuZPEtUVCid-ozI*rX-K&LO zc4CPMv>RU;&0P0j5-3IOkPWGX0dSanj=oN|(YG-=ijH2QFE7z?bU4QCrro@zL&SFA zd|ITZd3K%zRIQekuc>GUIEVChHl_T?C4tFNbUcBR?_&b!868k*f!H|k1}gD{AfUBo zQDXxuU#4g9UX$PpmBwkHNso94l+`aS>2aH)tyBb zGC|r==3!gLq>vSczXxSedSlgV>4%HiWfn($N!+TIF{Pa+*x^XD;*)as7QNj7ebY|; zFYw>c7^1F?Lt=R$8c75^4dFqTe>U-(z;0VP%Hz;?ZPac8>NtQgC#`DzKx3@q{0Xfi z>H9J5CJI3PWrp+g=|wmM0x!c6mqf~u5q|YIEK&HNQ~X|`H>P%RKgjQr3qZDL03V^NY5O~GS)MNi@{_IDhn#%(&oA;sbx@JUS@hmNlxWNN8x&7B`z*y1wa3A zh2YSD0RNy6R~IXYX$rP>3I&xV8Tok%K(3yVf`*+fm}RI5))C@rr4WFSH&DndR!Az! z&rZ!#&`8TKQYg;PO;spKEiNh6)Prk)+N=OF3FIQivdL16YK&%+9U1*(&0tOhITB*E z72L6#CopC*0|19SL7?gjfI4`bYv5YQHNhjSpt7J+iAzC2S3wEHG={Q`^~`lsQp=RM zxRe!ibroDZgB_iGTwSbyT#$5LW_m_R4p5^qRJ93$2{b}^V#g;&^U2kWWnQ{P3I&yV zMX80QnMJ9&sd**E`pKDkB}Iv4nZ5ZfS~K7aOJd+oLN>0gtgO!F-IDJ`qKc-Z*v&;4&><5%~9qiE0{ z_79@%RaPYPBrcQ5vyI-L``^aKk7vhkFOD`gqNo?WSuBhEa}t%Sd3XB$^7!)2*?arKx6yJnpGVQw{^9OX^g6wd%6ySTlO&!*$v7_`$|_kz z^EA6Hqiv0xPLfG<{cseOi+GYHW%-Q9u19(C@+dl<@ZJ06JkH`uo2)4?%Ag)?!@PXfZ%uV?|0udxCaiw5Ol(S<(Ks&({yu-`Ol&+$=8L4L zes8UI?~v7M&$K^Ll}8txah9$Y(Ig+2QJO`sKE>HIkH)ijStUhh(AH}GG3*`qA*+XF zt`Roby+vH{?Xq8#)n;dm`1)lpY*-j#Z)CGdvuQLf;>98^G|+OE&hs)~&K@*QXP8f% zMOoylYMwl_m$)}Lir!>Z!bnvT&C;xjIMOO9D~-R%izLd@aq?)#o?P6J#hoWu#yE*K z-^JM~p4Wq8DVrEpw0XR$a#k$Md7EAragiqFX5^2kGw-LKGLj9RxPy%D@?xTivH|C( z$FJUlhq>0Dz{u9f*(#~N#1a_uajB)Iq6Nzj-GWM@Z{=;2T#s9 zY{*R#SF0i^qe&`D2mGRCT+O0!!7sGu?KLctMUu4qakL*E5HC}=AJ}T59hQId`LLYr za&^7Hqdj17s`piXoo4Ml9^r;^mz{dJk#&cwMr? z$8OSTZy5ttGKJnWAqd3S=JP22oTrm$vRcm5vH6Dk6gDPUh_=@*V-GoOo9ciy`&p0k z1z%0eJUfc!NmZ@z*(#oPqZ(7du2$1o{Chl4W^LozWw=X^%ec$rQT&?R%=7VW=S$eP z^J0UZFkxXxNeqjZEDaB7yWLYKID82j{erDkDKOoW*-fI`mO4@fPX*eO}x%(&_u3j^Cf0ilR6^^R2Mf@XFB&Ol6$l+&D-n zv`KFshz!+gxif}cWveA;TCxJ89DWyeJml>tX!VL!W-LIqncP=B|2=F}TkC(?k0+BW z{~G{^r{U)c#8LQo6yGSIhn;@(3`aFCNZQKGaqZhGftE*P>A$bGv~iul1IREywTP)DISEdou{mz*R!N?3LEFAAI{Dj zC;w?h9_O6CN=Zd37+(};lW3Ngl_iQb1lSP?%F9&>ApGOq+lY;m7dy1{Lj}hKFf6J? zVe3VyNE8eBcN}e#rzQnYgs9AYe%Kixzz0*wZ^^X^{M8Y&pMPP}q%)+X%I!jAuX3o! z-T_Q!vekkR1dv(C3Xv*2b4O>&!J1`m-^oo&kT9D%W3w5p zeUr1lO_!yGkS9lq(i-mdUTi=wPhWXT;>X`t^gJoza^}2m<|vOc*jFE{%L0am+ulcOEjz~Lr{`TWpwgdv|SPP>S{s4a&^^T zKB7H~GD!+Ajs%q72Yvk`r11a@0`lu3zXjhJ4$mFmR)zF|&T&+;BEJ(i=;c{Ezuw!& z5zfIkNh{ZU{|>Ir?vcJ!>2*3c_sXM_70Ln3gl9b9gy+dLxqlZ|2vtB)`{+rcVssSZ zX?uhAu+T7jPSpbmyMh!_>tKo=A0CEU&87%5Om5!SUr?gjkNJZo?O|iaK5EyFemXn* zd++r8{Ola|0np%J=6s)+QRM^fz|0e*wyxUg(WVY zDep}Lgyy0?3SL7H9-q#vinSnMBotFF7~}`A6CZq(LASr`_h)nfeypmSLlGjxf~)cs@F-oafx-678_N+?7hi#v8qwr_?!F2baXbdEf4lo2a$4KzGd07H~u zg%I$%ZXz{P+wXoXa%g)e!)TW0QI$BrGb&sg)k5Zx|80v{TW3~N-s_S_~PWv8*|A?eMhFAwr<3OqXf7_~(Uck&@;uIf@^Gh=MiXG8 zS^)nX+qUWfJn!TCV$lDEqH>(g?g4P1zTg+Q1*@K%Edx1~kE{8_a-3Kn#R( zK20og_5p8j^B3=32x(0pjf<(3iaMiGnUuU@ znz^N3$MM66cm!fbl^CJ9Kfal6LRmY$Ae?>9yt|rvON0%B5+Gi+3V&XA*FudSd4y`u zuUQ-SBke=`I_^{;dErP;IZ+54vM!_C(d&55&UeE0O!d%E>GpAZxW_5A^$v;E<^X}G zI9akiSdmU?CunoB;U4QZM1ox@Q#CN0q&GK-+{d8;cGf5*c9U1VlcpM^{=7eYALuSwcf;=IRI_P z6IC7-G|88DS?BOVo5+HFRoE0%-j$mj1zX;W|3@ z>k`0ro4)RYoq=PGO?czWFz#e-+_$wB+xstgiSn?MW*9JIjZsIGdpON#o1F7AmY~#1 zA*DSNWmSF!4s1O91+f6NlIZP=)nMZ|O(W<+5eyM2S7I&+p}bBueUqu?P9n8Ps!NcS0`iL)aLkyv-8W|5C81_a&dZo6#d{d zpcxB=xcxnOxX#fl-=LKg#mZIc<7+h{#)jDnks+xGvc5~Om8fzuknW_Iq3M<-2mcHo}{|`U+@RZCQ4DfTwVK)#&$w6*ux381}|RtwBkaE z38IkH)HVC}t8!S**sw~X-1)s;>YVWnNR3g^JeVoHle71-G3>&5GN`7E6Mjz zmu};W{gy0A5qm;47rGGgo#@P!MC;vfmB-Vpv`#Oz6d1(075TgiEiYCWupgpZPs?YB zJ!D}*JYTP5t{ZROeKqZikBi4=K^MvKY=97ge zZ0#s|8w^raB+r292dU797C)IQ6`m93)Nb*I&aQn@NpP{=vo@H%AZ4pfSj&q zpZ?%bVs1wYH^t!&-abW3rO7DsvECj`sni9J_TY;Ny*a;QTK)3lgGQm(_%t9x5SwMNv$xXjXEXvLYp$@2{Y26;`bG@Uz9+-mt&gjV! zH-69acw()!SLTt{K3@`V;L{2erMel^-@`NXh}hbvw_U^mxacIJ-Bi>ogkIAorQpot z-yeG68+?5&wU{da2xY4C*+x&~5j5-3@^aI2&`Ia_aQELrbZqN-p~nQnW`;2VcAmTq zeJ8${-0F^?Ys>8)MGEFYgCtEJ+4Rey*VX`kp31yO>xnd=QIcQO|A)d5Y)cYBkHgzmfL8~hQ^H(YWA0K+_aap_TQl@UnHDEz0my7CaD~K zrf%V+MWK6RyvN_}^X%pX-3a`!(V-5P`lE@#ruX-sn3y9qj|T@pFtSG@Dz_7iggKs{ zzCV6PLx*)#^?)Gyk`UYC>D8FXMUS5T8jK|R?r-+Fe&chn3qDfz!)L%aoe#p{lCWSq zCEJfNd#h-MeU$D9bZiGgsq#(iYVfkuFH@rf!i~pGwowgp*3$_GrWzG(H+_TlQl+24 z9Lh)b(AfTMqb63WH{nu~c%s+ESW~NJ9jKD!kk(;^g26=`aI-6)G>y2<`UcWd-&mGt zJld#&T2Eb5i=CjJ;bW$S>Ep$9I$cqKxzMLArt3i0V;(?Ln0?4B2daWka!{!9wJpwr z4x(Ep{#vk67g|URh&7?$*^bdPVM|E7H$!YZj^Q;G#3>H7c<94NCiHv2^6ioV)m{3i z3;Qi*>6pqDdMwDs7mQr5M;k&+U*lZ19l)3cAU`!4YWz?7{wL+mx`o}qH~gZ#BPv|J zmk-a=-&Jj|X6v)22^LFH{BJ1Y?S+3zKvprIM`3O7GK97L-r%o@z+VV!KKQt5scApY z>JVp`8^rZmL^dl5ergrhW(L89fO&irZT?p<=>I+nTA)+^sBsZF6AkW_R;x%yX!Du-3Hzd*bdo0QeD41+=UZN)*r6SKq$eJ6qYb^T}# zg-9??jmH^p6a7qFG40g%QYvA%@&ou5c$Fp9q6+WB7UiZc2MRO%s&O40UI9LCR80gO z9jffRI75dqpYZYegYP=oR&L)hBK=NXiq^r~(2c@T?S#Mh6q$vW<07?|MDoU#&G;LF zf~YX;IUU!!B&C(s7Y;NHcQ3_y*Meu0RDQ*XfT#*+$Ykq0!Jy5ETPQ~7V~UAkU&CZh zW(i$t7A@9k8@-phEkHA|MK~YX%(tWhT-mVj0sFITbs=jV*DI8i(#x{`%Z=|n-q_kv z|F?}~u->|Td#$3pd4F>D?gKYae|UQuxuWoqJvdr_Iy%vwLjjykyS(^pskQ);Nlc#h z2dD_mjLIn8uib7n2O+;vvo%;xR=xIp|1EWpKDUI7HhI!63XdAoB21uBVa&@J!3KIR zO4a&+*@ZVdYH4}nR-FtL=Aaaii>edveG$2t{wXd*Jpv=I(FwQ8@j?SYIk6PzJGyC! zOM#Bl8K>WfhD6(tKw(_-#5)5vjaIIz$GK!ksjWq>y4Ahy3QhPlTe^&=fpOOp4kXjD zIGLZdKQ@_L`0j~#+7n+)X-jW?(eyi&)pH^$edI-gc$n4Dr6&4%7>8QcS05Jz8M1A; zFuA*!!IuUAHaLq-1^G>#<=U^-%-{Wu1R@U@@_!xPbfqg_ZLsG6rMk%R)dLBhwJ;Hp z|4_gy|JHN_OkAgVgH73`9;dch|JheRqKlwk?dXn6cTUE&@DQGC+G|CTILloa>$$6a z0=QLQMdMu8l)SMV+`StYV&kicTC?c{WoSQ z_@;*lyjvG{COgnRyB537Js#zJ&_1rcN!HSsegI5Iu&ziJQV85!^+6xQ!Zm?44z`MY zE(;O2qwGy*d%gL0JBW_=)s8K-?ANVOjZ7pg{lYbmgeNhi?ne#pVV&fw4(Fp6T&bGGE_d?HC3B%dcXL~9( zr`2XtK9Jq1saVRn3(W?q!hku_oYQrbyZW}HQu-`Ti(YH4uP&sp1^R&tSx&>X50t3* z3uRtG(rpDnGfk%m|FNsMag{O>gw_-F-%nbD##8K>#4*KI{o|h+{0}oo60VL<;T6gx z*-kRma;^($)@u|RCqle)>+Plnb^)s`Tk4iiAmA=IxZtBJGEOB9$yT`&ERu`kD+3$F zK@-+2^HF5^iYKaJB|Nddeh6$i)dI)%UgRpdJ{4Wd+{C(d1|~sYYE_t{i=2UiW0G++ zrC}AWTi8EP&GyD$yfmnFZE+7mUW669nHO?Xm%6nd zH>dL{u|O2o5RnkLC(*vEwm`3E*OjBzZdgTky%)0i^+0;(0Z?TK6gF7l;KB!ZGK?ng zZ4J!L#TiYsySvmuLlLGuy1IXa$<~$D$xlFGE;>$K7^hK{E|#$+9RKTKJ}F%s3@M^# ziLM)}6Yj(b;_tZC>uGcN#qlt-BCR%T^OqSJ-%JXLKhAUvp%;*tUI5lJs0!BGNr{lK+%E`L2Dm9Dv0 zk)G=$b}4(2a#OT&3bLft6Y^Q(1@%>ws@l(uDmSc);Arwvd>^J>}=!H3e=F2DXcI$j1e#5PSM+8SYVUVt3*2YpuPD-2$tlM}BmqiwTPyDb2vca1dhTnvMVEVg7; z8&C7jGt>vy9+jo~cMU~fKV(O&8ukZ=L980}hO|ok>E$A_k_$^Tnr-LbM(?rD*4~@O zYA`EOGw+}0cho|y3^#EpDs&Xw77~OS!*jS4`8Z0+1bI{kth1JXBQLr$Y7C|*<8CgO zQJ;$?y42i{%d1H`=I=H~YTQb6?R^-Xgkk99BpT$EzE1Q?i;o}OsjEMQAoTI0YgKLb z(9Poq<|~KvEit|thQRp;ind;*5lWBU>ZHdBOMpY{k|X-Uc7wxPO2U(k&Nc$r)}`)LVZLfYcT8$c6+;Rx1=+T;jp3*0>WmwqxYa-TwDeKpT13=7Wnnj z9M>TN#8~*HWA&N?!0Blw#$*f#-CR4$wPg19z)vl$`-tkvNB1U?nQ$9MzkvCAx5NqR zw2I9%Y@n8i7ksZKF>-w52j#rh4G_pAv(-mv*C79BR-R!-HGuWQrOYGWWfGbaY2~3% zjwWJ(q}fWq*Fn58U#U!Lyv_BAxYB~W3F2%a7WZ_GAnwK;S4sN24Fe!JU_Y%pVpRIu zJrhp#2>r0`m1BB%8#uZ0esT8pS9dKr;QiK1AheODDcXkK20@0Kbx@`366`;G>#NCt zA;>km6&AScZ@y z9Ne^H426+$$ApqvbafHR-F4n+ByDVtJN_rfev)G9H9ksOb{d%h*elDlB0Tdn9?ONd z1bSwCrDq+F~V!XteyNwj@Lbhs{YtzxSB)En|mCJrE~@eMUU-m1mQPw-wq&ZtJ011EV#uf6I2%mIrj+8UDIMeAHn*}4U({Y9}v`g`j)J{(1Bkt_8t`S|7Xb?;CK!^x}T%VSu8 z^=QM$+wC?k;dtg6Xc~>OZ2`4L3B41r^XS)>Zo0z3nk0s7@67iDx|6K~r$Tb`6c2C& zlStNXN?}X8M@@yd-Khxag{RinFvdUy?AK;4^-qwiOb6CDdR-F8-r7i&ef1iiaX!s> z!UT9FJoLcl!$%+o^CK@6;<=+yt%qG>FvOBzlE@rM3aB)tVkT1Fmw*2{~C6 z650aHe!E5d07LqwvwPo!_Y^3dpuSSSfkdyERL=2DYnBSho8E@&fMFNL+ycw!d$@sK zWGLwkC-p2Uq9bd@+Crj^;^%tO%-5UyKEiav6Le>=*Rx*8UafC@cYl8m=CTFkKLCp{ z2?9kH4S44n?N1x6C{)V_Tk6|$cV%3M2(aalhTTJIN20fY6pN%8#ouW+5=#OuR`-UQiQTPpVYY<#$Ct$_=&~hfxqe6w{#{U9vjYkof<)g`B-HekFeHRcm6!ent{SwpCUq8`!oi- zH4<}Az}S@)Ic+%ZGFguVYZW`Oe7Lq-&r$2XVa4B-%l1!jiZ^e4_QD@mBW*S_$7jD3BiUHuUKJL5Ar0zk$j?c~- zQ`YsNHNmqt3=gTb9@0Z|;`umHrroEoRL>TsvVGoUhD ziD|qhp})b6YUemOp4tE~CT%6Apiocp;_d`HyS7Gn*@W0sxKQLjS>?E^$}A;zHxuuf zH@L5D&0xJXgO`8l)?jnm9E+$f!fU1POb+m+7*Sq(Ta*Y^xcTfpD<5{ z*R3E38+H;VN7w1~lSkrdx1~=y!SD4&jsul6H?=~m{{?Kbd$U@e>$(wlAYtL>)`&rN zYK8?8c>eA9^jb^uANazJB5gSwkV=3lFP433cg;d{+lX>SX+wqwxnmM@*V_S_?L|-s z$3GlxwyB*7Nd3DOf>~Odkm^9IEG49w@oMyQ-Sbhf@ICTS4~u8*Cx@4$Ne9wz9F62{ z7kVXV`|wfjIQ*aWrewr$T@{nG@K?C@i4)pgLZdES)eCDU_9R##&v$E>u}H z!(6wpT4G;YPy0}Ls`5?~7fch^6O?2I#l@_qxtR56`k1aN6g{qr@Tb**)E?4)L`Byw z9S_oIbll;n_10V2oXHu^v)xsACV*D&F+zHX#U{qk)PkhZ?zT-bJ~IxlEpWnsmL&M~ zZwi(!CTayI8QM(xqB*)JOXnhnsF@}E(e@@v&n9nTRO8FtOsyR-6UYq{beWEC!Poq_ z8^=aX^x{ekME}yvDR5u7_gXZXUUgJX6HB1;^Nxq?nuoliU}Se)c>@_9GWaVzcZt7$O572Na~sm#cyhc-25cz|7ZGy?tt6S6c{fXz z1h=KbNT_7NXMrYCkQFW*S<+;H3sPVnU1!PRR63Q}y0pMt#kA)5tzp{y&&!D4Rcabxy0vUO%qdD>JIWZdgwtxv9X#1QEmA}!iXP=y8Zk-_2&PoglC$`C_cO-kH& z#FjxoHKD>GnguAeUzI{PLHe{L0$F0pr^c|;bvlSKh8(_$8dP)PgXW$b=74C z#ZarOM0+ywoz4Dpc*YBnVUtQpMPhd#9Favb%PRG=0UZ?rjzZRPsVGZ_OO$eMW1RNdN4ktmFvMgufXJWnPZ8Y|dDP}?$WH+H(p-<1%TnFi zQSuDBBy?i7wN_1JBxaztl$vfA1zo59j>{OKoa2xwpXxPaX>fPeb?mi08piTsSa&E4 z8*RPNo|u4q;wn5yEW^Kv99-CS74GcH!Q)-CKw4%YXmQ|i%QPHsy#~7V1NgOd71F!s z;M3ig;g{Xh(6{G9_-Kz0PxrhDukT%gkN4hyKljeT>9#XK+os`R+X}R{UztAjJdNqh z*2pown@&K@=lU(c$|IEF-`(O6b9fd z#{3V-XR}kpYcfup*X?=d@RB?qroE^A2uLJi#}$)~!zx5ZXvm;IU0Lfww-p)}t%4l| zO%|lx7_w_n#8?N%geRLfm9i*u_1krjPqSf~ri=TB`E8m0|Bz2UzIqqx2-L84dhG>( zb$Faxc!BZL1;!2knEf(~i%U}#l+6u|trVORle5!{@=Nnl6pB-mOEUBG6jJh2i}Tb= z6pBj=3i69e6jD-)lZ!G7z;YS|Mfqi!DXA$6NtIR#De3v8nwx(!tEB({sg@&+yHI$X zwNlM;+At8l`ziL8WX40A9NUwy1>TOas3b$U#j%y38L${zB+c7*rH~0U=N>R?Y4`hE zXYTMe*ypW>>-GljzTe)#)bzarXC zA^y9gPxh{}Pqu9WKne{p9?Y<}o><{9xEI?|;kS*ahar&N&b`|H8CutOHVlnP7}^{E zBS~&2a4Bg7_w=EqbshB`M^6rXLmC5M^XOi})hVh3AUKWz`K=vcM_>WtlP-F?)IyBy zuCaSFOp?2=5{T+7gAWO0t~-*f|DXci%>|gwwa2~beeq1C)cwmaIudaYqIsG=k@0XG*1wtmc zSe8g5gdtg_k*gH2%E~&&YM#Qh)=&uzB`#1?n-*z={yLV387#QW3VLNzEKzSF-wbsX zxMrk;!IDXhSzR&-%UUjlB9$aQN0pTf7d)RNSP>)e6|Xd?f|cdDmnkPHY+CYnJo1vG zRNM{3z3I7L2 zQB*fjh&7ofjf_U~n4zeGRa!U~auYy91~K9k)&-|?Ng%l9x#(e?KfaNO;vQN#lVTGr! zAx4%Jr?@A{U(!sCx!?kXHF%us=9<7I?wnsxS(KTcQKF!ctf^pRU}&TZB#bu-{bT_E zpYRE6=K(8toSVQkhiif%kB)*@YF@E|YhHS4&PK!gEC5x^2fAz`c$}NVHHT}07^BHX zaaL9U7kC2ty(4%5bx=)jgD?!e^DA22-Lzg7Sgre*GKruQd~T08`$< zh_y$VsPCIfD!Hk)s+74gdbmk-yg^eAKobMP8!HDmEDmu>Vo=sU2nux-=1sox{^gu~gen2f-_=oOzbq#cYw3N+zLaTZu zMB1w(^F8-I>;O%y5ghC&Ij!61oU$59=M5}|ACq6(>}*PFJuLXi<*(gvsor=6ggHGX zUn`%u{O<{Y0eGC-%kq_VLb{}0L1l7AYI1f_GFN6^a!zSVszO0!PG(-o#F$A!NvRo$ zWvM2~xhVz;3JO|4wG(ga@BtZF#rb)<#Xya@iIdqG-C2QBdFhjV84t*$r6!h?7Nr&| zfPt1Cln>TCnUPU)GB1my-oV&z!m2HC>Gjla^!Nkfq*@jtCrJ$%ZFIAx+u`IPHKDDBRE42dRUXVy`YF-IYI~M@NV^vS+0f0?- zoa^B1=iJcB$gZHJmsOmfH(8NIc=HU#4@>}DEC-^vH+Y<_QcG*YFbux?SBRcA7|z{n zgVBw)m#whg8#hsHuc;MeCnf)W&ZA?LK@Y1gK}g@jpR#89!Xm=T?@2t}w!|eN{FiX9 zBO2lkrdoD2a^?Kt=1Q+rG)MGNM@L=(*cfY-Wpx)Vc}pQ;DTz(CL#tcN1YFb|u^K=j zp~fZ2sLN=vq#_L1`=oO673oq!E2?|X z>P*#ZkDIcfrwm|N{lk}{L&e7<~nU%Y)v4iO%IHP89> z=4TO7f_3SMN(_;2EW)~5ub@Q^=~CbVq==zPKT5I_qTW?_9?Ajok>-4I0Uw|V_{VnC z28f5jEcIAAZvab!GuSg7VKD|Yc-dZFLS4@>@dxn@Gqwm$<_Lj3c%1vec8PsMBBOzo zzJ5|_Mq*j2UQuddN=Zg)N`7*&UVc%!zCv1lkwQ*lNosM4LSkNuLUBoAQcmjR8pg*i zeyQcf=|%aa1y%}RkWo@nPz*E)ELN=XW&z2`;*1iLQy7KSGxPNo((;QG5^@qt zQj1Fx;uR9}QWO%3OA?cEQh_{;ga8+}g!s)98Os?#`Z$;;u|bqhj%JjR0BTRo(}xJ? zbLr_R#6xs~BtsyQ5CMoJ&@3wjAjl{wDJZtm*UwE&$xPHMN=-~D$w*DfPcGKWFG|-h zNJ-OAO3g?tONE&X;pqV-CQo6u0{}$uM7p)+0eGCPS8Z?GHW2>KUvW#fH7;y9X*XaH z;C4-ubQ!wrCBgR5rlhmPMj};`vJ$NO?>mx`?IeB)wim%Hbldw55lClmK!Cs^mgRYi4WKP^PZOL9BsVM_Dy4}sZotiapD<$>mF2?iKbe6kn*bLBA1g|kJg?l zX;Io>w=qep`9hdcDk7!x`;nts=5G?sWm-%sZit-Y{h0U;h~VHgy7pG^?gCC4QD$&u zxoylwPW4?a>PX1(Vu|MXJ3gBkIESddvxSnLgS&ss-~+d4Ec}Vu2qkw%&c0~mQ`O2+ z@oZ1JrASd4{QsfH>sbd-ANg~sa`pKU0nJ-iT#HMD3V?OshC z+Oa3d!V{nc_E$pbQKrQLC1kk3Qq>ie;ShfFbivrW5+lX}9~OFXvkx394JW6k1BcBe z@LZG#M$K)@HLhDSi)kUnrv|ANsRvP})HRf;fmD?xPn0I|6g@%P;wlQ2!w`OdOW+xk zN{#|d%1fZgNn?aWW1!}mG8Z+M)&O-oUva3l`iQBed|m_@UO;0gs;f2wt#*AagO8+| z*MwYhnKwi&C^3YDr#F~EQ$upsiNsQsIgQSRHl*B4ND{v+p^p*Gri`&m)k4K@kgzkM ziG|X4K-^10JD8&jhh}^bu?rbgS+mmg+BwdhqP-8^(ndmy)A=5N+d{aILgulrAxCSJ zlq$WU3d#%AH-dV})!Q=|jo|#^!&wZ=$PeJW-Fdi<;i^zA;ewjaq3aoM0B}V$%e7E3 z{Ly%=g+uX*b`}8deW|nvzViA43@Tx^G=sm2VCErwNqrxdW@U2iOge;CkjQ?cpbfo( zITb-;zGCc`pt8hvm(tWL^?%WO>K&<__Xr;PeY@Tv{zFi2KG&*R%2d@#TgaV+Lud>4 zZT+`%3GhGqw};QSDg1ok%`%*Or>WET&>uLrb`USct+_EBpo`=2R!i}>Y^nrxoc$Bl zWEbcVg7F~ka=-lbnsN^h-S$9s3)Gfm71ApAg?V>qxepPcx4r#qICc%*-AyKNv^4DE zMV=9zp$!q8be3Hz)~B+wWS*!`$EuGx=fc$mWpmC;gWJs3sl9gGnQN55XG7T}+!TTN z*RXav?dU{Ocv}<4FQ3q+%ih`r^xYGi`615cDqn-!+VdM}ZGrn?3AcZLcmmwX%hz71T8hv6L!9JoC=FW`o zn={0M@eq)DC>|8S;>BCCZN?;$ zWJ7iv)Jv}()jjJ!6#v7I5Cjk6)vMd2Ew)zTTo!iTn>TM}-d0|!ceRQaIGDR0_%_EL zBO<1W$0eGp%we9$esM{*3awrY)D|w-tiv&j9TLUt5;}sDHn=na(x$cpq>(_(Jr?f! zQ~(zmQeg-hJ0J|?3K1D(NWeb}Dp?3g#vzTg)Iz_6dS@fvjv|2yAaKAj{lFR+@*2uhZtCWy%x1h3d%a zxHNRYXO3l}tsy`A<26k_>g)B{(u1j+W3n+=5|SS}eOS%4^o!I7TNDsEQQ-I%@l3bkD;shB_*teFL))9-*}4c^3^!0)+XcSgv2w>a8rmIftt3^N`(xqhqP1-suT-)Uyw}VM zC6|?G(3~;Gak#K`zon&Wf0v(KL$gCCE*lN`WOv5vZiIY{b9@q0tM853iLS#h2%%z) zK~gE*G7I1Yjk=da_4YW|B+v?(?KK*-?r)9aTu8oYaF30%qqF>xxDK#_tkS&95}=lnqS92Z z$>K~)0DeO;LhAv50C=36&bFFu!W97>h2qqb(gMBYv~(SXlKhH|7u=Zuiv}Vd8tjZ z*#JIU#Zi^HJP}FC*U7Hl*|?a|#hgW9JeshfMSR7jP)66O4g3Nmb9NvC?*2N#_kF}2 zqq*AgbC}mdD5Mm>9nP`!*VDz#t?QMkq~Lp@KKfR8ulc&5zz47|c${rg z!A|Qi5WM><_GTz0f_JR+4iE7G4~cuaakj~VV+VWFsDIBk4zx%pQsV5+&g_hAt!=2s zBLQbvP8_Fn-zGj%fR>Kr<2X=|E&M-89|L4Lc{1jyV1I+cO-%6g{Cs=n!~oc_C&=+2 zGbXx58X?yQ{+I})M*#{>)v==tE_#nmOen0P4arOw6-s#vFaMOhH6e!kLgUbbDmPQ+ zKsm#RN!am-K{BxJaoJ%^@r|5R#%zlH4NO^8g|cGj#3HJ;%mfr&$%DtxO}bhMU<(bp zcWPl8p*gMD7#CYo&esSXi2`*2YPT>GByw?3%dHwE*vlj_G5URd_HeF+wV?}qOO>wK zJ*9UJSBNw34)k4W)>>og`l#t@=5-B! z!9G@hss}9}QXIrh%HAzkXI|Zh z1!lk7<$DKKpS$u`35%zj+g~u(5>{=X_lt!xmq*W{bDu~t2Vw0Pf*5$5Wsl8D#4r?v zp(1K_;!=c5x+rKPu0#s65FH0yh-k%yNXRs|ok03Sns%7gJj6VSPvWci2sYEYsAh9= z4#{`V{oeiBJNAK{GDu3PiY$WH_>NtP6?vMj%x!<{BqUrDYdYEIytxHdFXEfzEcx?J>Xovyo!8|Z?+Ra`b2 zPs1KH`$fGCsCdwqEs6BoGX}TQr|0R-b$tIgi~6r4KKUSSUY zh-tOB5>!G-M?nc8l{&eN*%JV^E+IPL0Ze$Do69kSV}k$-hmxV5k)D|n7XTuS16AMw z8+e?X!7-O(gD4A!xn4?YnSl})04AOU7q;92c$|$`ZExE+68^4V!BY`f+RD0S7dR9K zyofJNy1}+_ka*E8(mgEnc?u^j9-!IPg9c0 zjEn7zRC+Ugi!+|LDP=*DWK-#?WJyAJv6rPLbgg7wX_nY=MD`^Y8pK4ZxfE7y&35#W z)hbEy$Vvr^Nzz@8QzJkMJ#-Y36Ze7GTV;`_dLm%{cX zmx^$)VW=qa$2&CK*05mkxNGLcuCG4Sss%WOeuiPnbHRF;?JAgi@Uq49ShJaDA~BsB;IoW9dfsPQk%B%GKofw8IUqM1vy*@3lWCn8nPf^#G%2{qV$b`u z195{2*19k3Xv?^$r%lMSus!lne!!fR(kBu$ds&%hkZFZ`Q8G5Hba6 zV~GM&OPbs0Cp6)u^dAZ#36m*uiBSDDH4tx*C0WP~)x!3iU zYuIqlQoiA^N3%6A7$g=I*^y&zCvS26E+QKVnJgd}B4tOC7~(n%t)HGBoNc5epedv# zXKPx9W}~ye>E0h&50cS0lxb!_3XbQ$>;O3fTTo5-hCIU|AE5}h*(DPoA)$-jE{@qB$ z+udETxBSs&)(!%)lX-@_=Dfh`009$Ku?BjO8zR%RDoX~DRWX2lGDq$}_9X>sLmQp* z7z{TFq)C3KVhxfIh&hMjX>M&&h`J9Pqfg1E7Ygg|xvGJA{4rg}t?%ZSQN*hkM_y`VaSS z9tK*)cXWyo4QqTgIZ-omqR7AD&xD+i#;(X&5*h3e2oE03`7lo3&6*PKj#nuOtZG7{6lod%#3v_oXQX*j<7dIq?hRyows zcEuhZ%iF|s3;1~Z_PdYP_0>C}HKcaFxVxB&&IccgTkwKaZxWZb>xO=^z8V-7%gk(PN&ek5>*WNvZBP@NrB$vzE zkBimn;&!;{j4ZN@IGondK0Ehph$$5HA`3>(pm`}Lc$+4jU=I(~bwKroD)1LIEw^T< zE<+!sOeYY)cKb@Jko-ClwBf5dfs*6$>izWM_7LFi1eM$U>;7uF)W8g+~9Q4Bc zLyG7lnXCEkYVrPhdAGVcziU@aCp))|Y`}(vOy#$Twkj}B5sQ-q+Ek^I1iqn7NfH^T zZthWdX@^As)cA*{S2tYg5~|!q1z9}wg2hUn93aPV>WljnPF&6wl~LCXmj8J z=Z3upv%v+c#ZEh_-6h)z9I=pj`%GI9K~Y*VT6B8^{E-0v-=Lc9AF)8eE`*M-mupWM zFM(lI3M~kpT5P?UVcT2~v*8TJOS5QNTbLmMWD9mJV(Us}CvT0Kwek_M#N$@#7BO(d zJnIzo4ypE{Tk5sUpOkD1K0ygqmwt9FfpWZ1M~cIrVc>Du<1bwYS!OCJ=#%1qvuN<^ zOamhK(Bx{_{Mv+jK@30oUh5eGzzNjFd~Q zu8Rn1i~sIy0L`$>A0ac5se$C7%b2(325;Oob2@kd5$PU9ps;fd1`O~`>;gZy?lZ3n zkzlY)7c>&YpbKp`Q|XQs6cj3-kdvwZ+L1;FEhMjf1&io(ZJ_BDqBc=2aSRRXyflqq zCyilOa2=-0U;q>mza!_vu=9%d4#U|G^fk1o0}x`{4yRhP8rDFQB*7*=Nha1xL#7vh zEi+>RiPL-K6^|x(oK23gOT$1I#Yr*MUQ7^5 zUAkPq5=m@Y<6x1BZVpZg>QqX&)`K1H}{{zV%(5xG(Y+vZdt7A0{iv0x7$=ck&gSM6-6S!-8KoJ>Q;We?vlL53kcmT}yU z2%olxDdD3r6(0UaLJ~>Hx?SGlZu~fTzTIF zP9h3}zCZAgYM>qEqjgK>i=v-LlHE~I*XY13?(iRZLtPK-{ch0=*v8K7eMd4GQpfG2 zGzrOwIuL+|0fSpKH}uJ`Ra-_=hh1=8m6Yr1((u%iQOjn=i&lm)4HHm~Im@40m|YFB zFVoVqv+7|9K@dcQ@gM;8Ts!&!dQWNI;sJp%c%1vE{a<^77e8asJr zx?70{_u?DuQ+NyPoA?mEhE~rs+1c2){?~W?>hF{5=hwx~Jwk(aMowAT;yT~?d1uL= z*#$1dSBy%nDp^l}C51FA8)3}!Tq}&T5%3$2$GKC`d&4(r7tn_|5>{%JjykvOQjlna zDTAALJoE*9@dZl@%Suzom=2?dJ#;zpPJm7TtHBur4prP9ME)~$h(j(y>qvF+&n6%% zFs>}on94ON@MOvNk4PH0ol3~Y5rz@cloMObGI)LRzJQa{)3zg8o8+C>`oVp?y6FG0cOtq z^3BY-LZf#h6zAI{+XrYJ-j04|E4_Zd-wO{3MaO(wrvw#c{+w(HMQQ#rO35=x(Sf7| zDbcRZ;ws5AoF>%?ZR-*wAzG0FCC4H!E9&=pzK>pTnFRs5$x)V9sHOyMlaj<$dg}EM zd}bA*hrCX=e1Ah2$+n?E$@`RCbCWAWb8}6h+!f?+Q7XlwF)&{SnfoD`~P(#B$|` zGrT9IpsEff_`s}}M0a`o)RVt+>KC{=sK4|?o1e)S$$u&!<#P3&dmX}3uLt&yzU2qx zt;5;fEc}3O*Yim@dzi0+Z?0rZc8HRyE+Skc(MwVtL>9ILDg;+~Nj;I;p`Ncnz)M0; znJ*;0O+e43TV^y;9n>;6J2(cRO263kp)rJ3NrkRWdW)pX{uQjk9Ux|P;o#NwzekPS zj{lgV`-hwL-4spk#;etI6`0oZ>b63Z=p^KjJVGM6i@KU z<=ZD&S1owQIBTKbb&^OOq8%fgrcnez{n)tC-zU!`>km=?Vn&dJ7)9NOggGQeBX7geY5lSGwm%TokNm zTW+-i7}cEMCb=Ky#mO6(LgN~4Em_wjb43$sZ1y_h0BC0O-=~uhEk1<5J4+a2#}~m(xGjv*q+=#6fAEXCvOnwBE>jkL*U|MG?C|MA5)+*g-RcIeEA6 z;r_<31Soe&N`O+2xLWRT;078e>thCB48S#=SEz)}FEgjl9l9>nr9SjDO_pUE&Pm(ey?cVE$etQ@wSA;B zHRP{F?joCHHc-mCYAKBWmDlg<=x(3LzS{iJaZsqux1DMh{B}!-eUhC?f#AK!h*}!< zv5y7ghSLdwbyCP{i$f8+#V}=Gb*i4>{qGMX>9-y!E0XpJ`#(f|Ritl2{k}=?D%4x_ z@e{nDISa3^?#*k)gCN>zA|BlBTi{|_vFABXGE$niCVet+ZBYB?ZjjFVmcjccE)Yg##?h*|*}6x#+2oz59WDuhvx z_O}L%s$v6O>(E8iUSf(=y5;=GyeBDyGA<=9{qF0hID`RQBV(I~@|E|) z`O65rhQxxvq$thfCoql;w_vZ%p0fNUW9Y&=lac>oOvki)os=TeO!B|(6S6Bv{k$JcT_pHG*g+5O^fdOw|qV>TCT zi-sjJ&GA+p^*e^TozvR){egZJ(Nn9{bF->3usFT7P}r1KQpk+!${V-Vt7*VTMop3( z+`fDp)Mqhyne3wu&Iu^d&69BKIzo*| z_L|UJZ64?qGFi^T*<^e-T21-T7}%M zR?~332+)!gDUJ#EF3Fm~KNYs|HiZiU)$_80SGk~z#29VIA1v|`m9gQvpTI+b&FrXW zWKb#?*p<_XFss`WRkUnu;b{sb01ht6pdULdj|?l@J&UiS&1CC1*Rx}4SNhHv*6Oi4 zB_!P%Wz!JsSPIhDQa8Dqj^`qI6zbGY-YePa#@WhNH-L^D!HY;^rz#aTDf?_mdN#Bc z14$`yi@A`UZc_gR$npD2;}VTHc$|A>e%W$E6r*B%d|GKqX;Er?yh3JfL4Hw*LSj;J zeokpgYCMELc@v}4WJxAjNvL#wv0g!9Nd^~`TU=Q@IfOBuAI8nB;Ns#^R+zky$$N7v z(`gp_(t^|?jo^~hf}qs&%;J)wO5gmH(wtNsh2qqlG)=wu_{_Y_lK6NHrKHr1#IjVq zVxZFaBB)v=&CPD?OpI1=LwplUk~30^iU}B!3snZxZ^zNcrUlmT1eU|EQ)%*FKFLYU z0*hbq@d5z5=V-d%0)R_+oV#p!)p7$rFMB~^Nl9u^-eghU6c~GRJ#Pp<0LfGfthbK> zcmc&%OK%%D5WeeI4AvK^kv4VHLm@yw9b0J))DKkhp-74awM$2gS6pF9*%l1{_sk5r z=+}70!E-Nk59_vd}GFXllWtHEJ$FSboWu@I2 zy;le;U;y@MdBZoRNF&7pIG)X+MD(Fo42V0Lve zo&SD*`CGV3r)iq$EWcrxPHFe`@1WQ>%eG!?>fJ-r^iJAU^woGyjZvY?x5NrsqUqw{FJEtR%o0-gY$=xU_2 zvJTN-jm5a+D~TW%e6f(XfFNeJ#-J`le%B8+`G`BU2-L}Jc5`t(Kfk&h12G5bqA=j7 zQs**W8$tjnhN6~sQ)_xjSX;M+lPtcSWf(>x$Ka5;=4Eq-gh|vj@$_wZ@x4YPe>y7B z-IsaPm6}i%rL;$x&>wvK>F>ZR+;#j(J8mPLJ374koQFHXS_%`L?B}Inzn#*SuSnW+ zU8r1Gq$4^K;@f5#)Urf@0&E3#iQWbCg2A|HY*nMogR)DMl2Hg;W$=6@o{ZO`7ON;R z#=U9dvKObv@}x~@ln@hkuD^mD?8G$ktT2enKgLQ;7(4stbp8y?W zz9BqRB3gh24+o@FSC;v90B=m^yjBaj1N9I#Mn=68Z`Qh&x9V|{B&|?zmASn7^Wx+W zI6aw7V-2$M(PHQ~$tV5fZazQ#_&kQE=s{-bKX&@Y-$kko`|7XpE-~IN+v16ud8ob%E_j`1x60bT719VOnsXQH>t*@ z4T>@4cUof8Vf-vdC~%3N&8OE`;;XX6UllkBgn2epuLd#Zy}=~-*cqUF{>0|Pa?y_H z^uto&PYz5hcct5Noc2_#*HRZ;^LZ!UCNsj_R<8@sIjt}IcjlAFG1_pn5BZ9N6J}4x zRphw~@?;VM+I7Kk3~wc;CpS1)KpcR`c=~Y`9Z(vlBA4iW=Xu-_xuO-=Y>97pocpf$RdK^E*3ElZ zt+@dyc?DSI3Kw{s`>J?PX@X5XS7vTOeo=`+ab+=_nOVV=nFgZt0wRs9xDLd23QZ&xRRp8bJ$)k+kr%8hQj*fuM&U*QA*iBUFa-iQj0dba!IlS01h4#5$_H`c${61 zK?=e!6hxOoPcgJE6l@nR3og{wWh-7Fq%k!?nn3c4x^m%#1n=ZIY(a{3mh*@A-y?cY zpWEP$Z*&cL6-@BfOK@|9u>{3ECvvmlvOvffIWAy?A%PfhH*DI)G5EeSH@U`xDhD8onW}JO7Yx?A# zo@hgevc%%byyW=elGFl_!q!KdR%%aME^B$R#N@-82M0XVwnqa1=y4&kvk7>dP0le6 zgD?<8(cY(6xe64fr=z6f3Py|-OTk7v#!+sMqoknzPouHcnniPs8#rtTF@eJ3*B4}3 zW=hB^E1teWPC_{v(>H)a-Wm(^!ETfQUrucc-@u`F$EPWz8a1aKsr)f-^j3e|IcIFU za{-fYF}J^|1$dmzT5WIJI1>KuUqQH7R4#0#O>cpN03Yh6F3#9A&Lz(66^n(UNOY`= zB55V6sj=AqeltT-A|?5yyY21?XdR2>aNg$`($CoB#e{`f6sPwdyIH-T{2kv6p0RwJ z#HsLD6qmtW!l&?!PehhYk}SO+42Q$PY7>|2F^j5%v%JVY#St&rx=KS4XK9ecV#`Fv z$|}#ZLa<>_ZqtyJg6HLsIbl|0l>nOMXb`6?pn-{^_7sZ^yW^YS6L%SHW0Ni8$2^JG zG3*CB2wsZ8x(FWmQ&v2bEJ!2dM`U4^z=Ta8*kka(SyghDt=TOx5@&A1!mZD;VxVN` zpWqG#^Z(2~T%OOp!N7G68hwE z>l0<4zPkBV%~y2U)%;&Ki>vvy$1aH;`^S{McE6`t>mqwp8et$jDio=-$J`)~-DVR# zRlX^z)UQ$zCw`cL{Yf+n6VjRLM^Jp#cm2OBI80yjt7f z`pn4+RQU+PlX;LFJRO_2>@El&NKsA_LvVZfHjlkqQDjLHSLN*piI$uPNtt<)osAHA z>7ATJS%}exo48qVfAabyiSLS_*q&$(H{vlNuKaE)@Q$Z55kdJt#GW-*X#@&eZQIu{Pew|9BzGxlNj@$H)41Vw(fMqS$(Uj!7yFO06O`Wvim%1O7SWxnK*LJTHo@@Oq}c2fIM}K?%O% z1N3IsA1}_>^=f{}-p$XJSF_df>e~D28(~!JiY6zZAVKv`FS3-6S(0VB`cuS@96UjO ztD~g%k@Qt?spaJ+tCGkMldR-ZQlg4A@TyB)gM+$ULiB>?1p>ln4gZMZgz}wLfn6fe ztk;!*f8wbi?y0DPs8~dCnu#M`Qsa@MdhJi;#O*-q%Xr%K*`w;6-U*fI6r=HfuCc zdwS!~4a>xpqjUHiIX#D0BM-*r4c~wv2^$s+gRJ3G3Ber5x?{FZvOv&Md{$}<){-Q4 zco_lV+IrUU%$yWNtjW!+F&sj6vb+ECP$>QyLS_mENTKV%>;)ESyO+(7HcS{XaesR^>d4Erm`0VKR8NICBia%oFqsZxQq-dqe@uH zpUkO1Dl7nqAqTxXDy7q=3Xw;0;2E0ZC9z|S{z{dS)q7E7b-jBMmq z7Xf3+nANE5MNr(A@bTi|3I8&{8|iw=2wd4^C@MJ%R1CU=rKr2)>z{uRN;PHUj6V-z>V`}gBk@JtZ1+A z&L|ump>Kupy|(Bb@pdk3g%ct8_GIj0V2p%O9)+)dhZOikR7i53;*pak z+oPjiY^(*u{O|mPT>RWXYW3N(r}9gvbb8}48?F`~=F6MaWO;UWb2WeG)pWiqhwMB3 zt%00z8YD^A32Jm~s-Xo^nWgtGZ6=gV^@o&J;6%yB=KG|{K_miwm1h%(_X@-yWOd)H6_dO zb#8ypRX-FtQ%d&7u4wt;(d+C!&(4^~(y;nM^NXQ88-L4?2*IcE0AiY#oEP#a|d{8ab3-+{$!%eFPsyih;th>|^m0Q@YP@My|fdC(2=K}9Jbk~NU zG`_2_bz>GpGWyyb?IScWDHM`!gB4aqfs2XNNrzQ@oVuq|6jU>39PF5!ku3G%^SBf! z3}C|o*0fJ_rQnVs?GCC4TpPr;%;m+9>Y4$T;f0Zs9a?u1O`Rp_LyZH<@NhTp*7O}$ zwY@&>a;x>y&!3rpn~luI99dGE$Uf6)bUy0z>gWT2UDRgHHI&+V?@8L1UPs9_okL}P z4~0+9;oN-;?2o~f@qa=8f8lwZscYlV3n@C!7Z{>>ARtck`PT%KwmfU1W}FRwrO)4n z&+W9_Id>b&1+669?w~q--*A6lich-<+}#+ochk*I`@NOD?9CJ^?>0*oMz4)bFkK4X z1_CAlia{5PNE$i##XNx&${6zKPO!%e;<@j>Nu3I#g&JeYoTjTwbl6Niw@F9qt`F<< zNNR)8R%gN70gkJDKAzEkpK zZC$3|%AFS@V_8sW+z=6oxT;^4RkHYfM+O!_S-YmHhQYF*ezqqlA@#{Fy)zYH&u+El zRzWfJ67fW-#SjqhTWT4pF>O<{?M=g0--*QKi$kQbqpsh$aVhCX&ZuV#tH13X1xe9Z zgFgv*zQ4IRTP>Cs-{^Yq=rg$PC1I;kfS9_0oP)o7sjoW#)akS3IAyw$Cj1dRlyV3C zG=`@oRDAgxm_Xjmd4!8?aC58S5)`Zwx&}#Ipbc$}LbdMIpzmTqUqLuu?A6xL_RC$I2ej`5M+sV)XAbDQAxdDzdIgZPL}MX zMSx=Y&|1{-UY>h+JW^+3`qNaTD$C2wOx!I$PJh9X!EiVnERvmWDk)T>ca0XKT4(Tc zBH({nRpW^$)TW*Ysnf{F57w31ia1_3I4zDvzTK%xi)2-+qR}#@XA(!NTbJ5u6A}=L`Y(@aoff2$~#BpBcI*tL5Vr>WrM4Vr$5^_Rpv=2xEqN^ETu;I*z z7!3OD4^;trFm4?2_&8A@If>$r6QaQ=h_i?G6dw$rB(;g;xO-1Jbwq$!M`HNUjPWxu zor>#E%ipgq-%$Pu+ftSP%1T*ynNyYkE2RqKufxv;M$mg`g7LAj7sogg>cAWl=#3bH z8dpAE-OQ{%Zzigg|NAxBMoO}5Q?M;;)W#2YW&mf!`0y}?>RQ?Y7(*W5#7 z(L0+QW+-vRvn{x7+qP}nwr$(CZQHhO+t#;j zWB&i#nWuX){n)9blJ2h5s;bq?0!X7o3S*`Ph~Pqw^(d_iaFKdsy;b=M*Lr{{oG^FyFA)Or3 z3JF2%#8q#Ni&B}>iBP^rAJ8Qo5&~6e3VCc##>a(ipDnnJ$F)_l@M0OverszcpmDXH z)}(8`|31yqG&oNuBlXz-=ashb-qc_TElpD<`f7w|rbOSigBU2yO{d(j{zie|rX}dQlNv{=p!?tJ z+iPaWT*Tg%wod8;jRM5t>7Ye4U?oD~G~@gactPKI{Az$F^7+bMI7>Noc-hVy-NC97 zMWw51`_G6tsowcQssS`GpJ}&zA!}gG4A)Jzfs>q0C z1BwBqK#`=-^X6mt{SaQnIdIlV9As)n5>e-C?u`$%YQkt+D>EZ9w`s;Gtmqv@_(@ zhH*XBYl7M4MM(e>D=8T6?qrS$S^X>p2vd^9hW0FE$qM1dWs6v>;g9A5!n0{tP;D~%Jd!<22W zQRbhGw%Ox+S`z^4Cm<0f)^94i{l%1aRS##vg=s_V{LIHGjiKt9XpNY&mKdd zx#x14J7eQw@m>SXYsb)D5I%bCHVzSQZ6TY?7+*Hl>1pr`dngYOIWj19crzwH3l1u7 zUwCR&^y6YqcJtkA_*L{1AUKEqOz%@VjG#pSu>}ApYg3hQvNDvsAJL1XLKMC+E$iqjt4+{ zMW6rxC|*xHSRz1FDzx~Uc|ede2F3jaIVN*Q`!L-~9aBw*3!rzDX!~?E_E-@)hKoQP zUIC9f4k6HbmjI*6pnS$6Rd9qky*W?3ejNKgJn+c{1xyT3AP>1=0jB&wfRNk1!!&qU zm&_tlCDV&W7rXolj@tMZA|~;*ZAy*7vMT9{@Vu1s9QkVw#~uBO8>o9r1F|4=jupq9 z@ZQ5VfZdVXIIOvcU&7%{D{Hdow-e#YJ+pfx0$o_5l(`0wEXDpNM{Xh7xx-!ABo<`8 zX%=W1|`IxLm_K+Dc`SEEGe}#sFz)mgBB;#(b2>f6`yD<89@Xy<{bM*6R z`J?0AQzK75S5IzlN8&ph@5{dZL%nk-s73n_Bp0u+`Y_X`An4(bCaaQNz(T!{<-9Am z(AD!e2M=BQ7o%d4tjai1M471*7uAYqd_Uxn{Uxrxh0Ew*c^mvOQ0%}i=7;Ja;7_$7 z-Hso-gD5N-X>6f`yt>yzKv$5{g}{efMip?B?enII?euM3*_ksQv3rV*eaDR71!Sb{^FG&fD&SO z9iJcopV`{hoz3F9JCJw*kDP9c<{7skJvH3W0EyyQZ`@2zrey&cYC2GY zjPGbo&nA-SrxW8QA0*03OQ?qj$&U}thX<_DN>0lx1<@h_&<~%ZZ1e`36cB(X77WwE z|Gocs-sQHsp(V-s@gJhgivG)3ZETz!!c>kSyD@Ay76ry%n#CNJ?r~6L#Lv zOC@KgTjeH>MR+=)Q_Fg*bZ07(mk(n00{XqzM-AH;w# zdgl`biMJwqF=*q)PJ)NB8*+^wW8EZP!ytidA<2F5dDE^!igO*xgzI-VOHB-s2Q;BV zcfuHw7Ijct?a_DVomhn}cSJxXh^_z{(mJ&bHSAkf1;vacmBovbFc*R3q=-_Xh-5>j zLIp{_Qf6%!cZRC9nouSxT|34Cs>m*dd>^c+DxIOX->dyG)7p|3bDr22g15mML=cew z&aD;B9*ODgN)E@%;A&3J)gJelIx#Wa4}%@FQCZij#&ungwq@a0;|Za(Nl;@Meyv*1 ztLE7m!51Xkv|FowpJ#K2XE2r*$oS>qi0}3@7vB|iuJ)anUw0Q+o~KyM_#MFj?$3aU z9Ro5XKpW$zjxH_SQ)R%DfXm!JzWZddYvvRz|7DzR%YJxg)D2a1V%@wkIxV05j1;K= zoT{@GQqf|?K$+6^ruT>}WR1XN=P>29v2eWei_Z4r|4TpUbO{t_;gRD#xHQLQnAp?w ze^eqOQ-!3=9F3IZs%$OwEFG<)?EYtrFgYeVjsd7bfDl&+{lC6C54N|(YgzPqPH%VX zI_mf?#|ugMdlBJ?rk3xbosp!Zm7@2ZnWLkbp6CB|z=Mnu>bm8`gX+)!WbHB?$z7DU zhJUn|?_7jkQOV2CNYPBs#>vytPS8u!P*j6hEY{^eC{fUEY?mzU+YXK=Ya4eRe;8m( zB?+95m6@Uk%ZZUF-rJaPc>01p2;0XqQ` zBvCFH&h@lc;#9s1X7dvf571&*Q=Subbq)^Tf&XI(4Dg=?*jNGRk&~)sYkkb|U%1a$ zlENi^^y3BcS@?`ZQDSSMoOb+*5XCF!dL=QIv>gj2AmYG;@ z@VSkmlnU9IJGkw|__JFlQoKl^rD{dbv@$@bz8Z%ejGEzYcTkKJwl*z=X$nWmn*?wj zvStF-GKlo3RVGGJNlX|^gly+p-qa;90lLcuUcv22E2>$vD2c+$TYt{1(GLy#tlY#A zfY#lFuodBA)LZ2v)vq#%B5k~Ae1stGS?V^Rp_knyG#0R;Vj5uILS+>^)31#k5(OHg zXB&Ly6ECSM9f?{UOA+)L=P#}{4dYD6XpBY=?a^yzwC#qgknXlWInaTg3P7rT|*NGHlNwN9jex=!?ax!|*5BAzqfkCqskm+-Qq6%vm9AmDfxwI%Q&%jV&%$Kp2S{HD0cSx@8tOPVRjB z&#v>^nN6lsn&K%eI11T6vp!FM?Y=8(pPvTrw%olsTvI!2Y}69BFE0;~Tzr=tANFSk zP7G$$``>e1{Ns)($;@N|1HS1J-EsqF=X~j$<9m()mb9LuFp`u-yk}Ne^vH( zaYzjK5H6R$1lTFyUv?lWcuD)AAydVxzYcJJdwD{9R{dn$vEL4`yJQTKu?D{&)@Dm`sK1$$!&NvlOO_pzMY+JDJ4y|Ov6F#w3?ura-* zfF6LQsM$wMCsHIiI#5M)R4h)`1(C4QfLqATMPWxnCv=V7EkqzU_IEIy z(#ldb!qd>AH$HuyPp_~vb!Z7!xhh{Me71HU+*vYYi@}TYPT^=a+bmlg6k4g=m8lga z+(F9*3z@_lIH?Ru+6V<(UeRDKfO2amU86$SArq+-uqZ-mw7ybIv(7d+w?-Q&&z@LZ z=utd{BUO}JP;jJF9G7TX(uHjrQRX1wYnlmBNo`XGq@!&@4HkKeBv8A8+2mYwF%5Gq zoy9$lD7C*jeje|}sbY#a!K<~CiCW_SLzE^t!4*^q zD<=>JK=D7Mfa{?g(HGQ(oJdN<8f&;T<_^!bPThqYC`TCrpJ3T%7gD}}SSs^N7OKTg zj>~Uq7`n?ao+^%YsHr`%!uXp2z!P1@YQ#EvX2YDpFGeftox?-TluyhVPCDO5XMl~G zTZTiph*w}686~niPxi197QBzh%`s(kfDRZoBvPryv3wDqlT>lth>dR`YPIkBP_1o#=W697oEs?da z$a%=NrRu3~X$3OE4e9p^dUHulKK6P9SC7hMw^8J3zbrf-=B4w+~n&)fu zcpQX6NM)XZA(o3+QApfN)Y4ueO-9*=rcU4PxQ*6fN2&4dZr)Dn$eqhQQLaP|J>E1| z=hjfl%!}BtR%)ar1I4=ecvG0@2h+N0-Drw|VhDC8LPs%e*^}99Ll9pU&@46nKvKq( z&`@F!t`KfR$Hg(4yP_Yv`4Co7b>VY=o#lZ&^wunad|}Ek&Q0M!ieu!O?f$%TZW@Gq zn8K+IU(@u|<-vbl+aCP}JpyADymR#O>Gt5)iNWP$qw8C^C;5DNLA~#V^$3^e9ek-s zdqMvJ-A%OQ((v2fqW@QqLBHYG^~LeS!yO)e`o-%7udK+yMbqzxTco*JQf5jOn*HU$ z{3k?M!4H|PR?$IvD)4)ESJfqv#xC8(us0kVzb`lq_WfT>*mv)#*t7~PZG@%cE`U2*%9Y|uhnX%Tjr<|-Lb*ih-DF=fkpN>b~Hn9>6&&uynALaxj zfR|rq&R37yG>qGb36}D^i6oX0bKfy=6ZQ#HS*@#*iZJm$&9u+`X>lI61dnH?VZ`it z{VIY@N5fzGpZ-aOA^JI7IKh9=K6R6}OHjuD4XtPs(yO$S^6Rsc^V9hhSNx5t*2iGg zGs)T+?@%XZXea2Y6eXxQz zud6=6TA?CINh>=+Nk_A!bf7c@1Q8e9U@O`tf3C|jV64dBnx+e~NX$;oF8&=~78N9B zs3mEYD8%j>pbWFspKc6506>vRIk#hZ?fqXq#NU2?kb{B% zl#S{39w0d2;Hqp2n*bZ+wTV4^bg1xlOKmhQR#DDM`-OWyW}nFAA&2h)3`!%Z69>-R z_t_|3;;&=A%m>XZ8e?aF_r)J@zDwN1g`I;tf7GNn)e>dQM463pf_WZ)RK@a*8#l0% z50895%61MeezNRb{t_l~$W|jLIgzft+CLw0C^9IbwrtpWXr_I$Wuj9|-O|xIWg1IC zrZF=P^#-GE&dfTD**0vZ-9h#yLrz5Hv_+m%UM6#tbP}F)k*^Q7=m7LtNXbw`Q?Uw$ z_%Aa_B6VOm=qxiJKgL#)O$CD(v*tKWZ9ahCWz<yda^w9zkB$9MMB z2KMvPX`{JwjXOdK&7xFLY0a7z;%F|0;`4#*R-q9&R*Y6aUe1Uxcvl~S?*Yr@F0DX7 zmSp3N*OarKZDyD`Mo{L+COrDX3Az;QRPSv0ObX;^;~=lCCz|EL2hJj&zD|ywsUs#s zY0r^Aw!PTHfwUiVBXC1;%a)R~18ir1CYy=oIftr_@A+B~V2B3c%3aCmZ;=r0bFg?;pv?%&~yCJh)U=wVyj= zV{s|f!a2^26htyCQCV+NKB4)Y*}w=KRMP2iWM$8h$mHZD+fD0tHxhI9c4(&q@3)Go z!xRMMjRGos${$vWkA`GIzwjzGH@Edur0AA6WrFaM-ZOmgzTG^TadZ-&POhC?Je_%$ z>fmYX;=W_(k*ro0-wh~xk zCPGE|NBgEzy=cqdH1mq#GXjP>?BF+*atfSJoL`{apP2OBxbe)j>N=Y63f9(q9{#yx zYt#MZ#vJ54;Yw*H6CB81N)zORD$QxiDVuI(i4AKFbo+QZXX_+SFJACbx*9w9yEF4) z>*&UYPnJ(3YWO+vu_0jEsIg3^^k>^Af{ts1ZPye%NHH$tRy{eOfVNSP>*bLLJ2?Ue zmS&cO8dP`c%zJ|~K@zkGVl$v2ie*h<2EffZTyvAmQ%=N|5}=;|R}83?dEk+!F#$}Z zKoZU?j0>NsII-fBE!hsPw@55L-0?(1zDClqY#AB#FhLKYzI$*(xm0O{SB4t%l|ELJhfs^ zU9=VtA{Pz722fGJ2yMgv0E|{+BcOle=2BO? zCdmQ@1Kd=m5*DG3U3!`IQ)!d#7(d<%jM8OGg)_kqVeFm{10NBKe4MCp@jdc=dTYqN z6PTCqG_AbN`QcZM0vs{x6>#$&TXXcgBpC$>q}jAGGGh6G$@7Go06q)l8}^(vzYEfT z3LLDX2`yuCq*ww*scP1kL-Nuu|5FNU+r~)(6lf<3%{l3pAuJ*4K8gm_h#`fR3=Oz0 znm==P8H=jbsA^BKg;9)`W#h;!x=1}7;~Wk(a!R+?gqJTqrMZ5Zc*;5nssoWZu{fRw z2ukGKXS(g^>kRG?rgmK^!7S9dhV%i=9dN4}uaF!Rr-rSWOk5um4!vsuxCcmbaA8`H zUK#M5_T1o-OTrm2l6AYAl6UqjASU%JU9_NK={6 z^vY*wG%Vj;7)1KnB*(C1BD^SKt7;6}ZIruz-Bbb1pR&62>luiKdJkUoPyGi<;?F6eMGwcDINTmAkhXg$5 z+b?Zrukz$zd^x}Fpl8zb737R(xluO=(1JmwF#B84XbeGE9hXSCy(F0mN$SL1+N0>m zgxN)LnImF7iu9cXrZEjg$bG=r)CUM5)v$~*G80Ncn6`%JAfNav`s<3B)C>FV66!!6 zDr5{R)rF(tFD})dvT=lmJ;TV)djrU*lU8tN&@FPOsjU);!aK(A6WY;tJdj6K4rV~A zacR=5&|cTFdDxLnftEfOR!ovoeg8Syd=H$Ct#nHOCS>OohTHJOuy)i``Sa-kH3{(# z(2warCF_=hR_Odg(RjC#P1o+oF9kss=rw2+E&xpPX4Hji07&nm80Cvddb&8so(_5k z+oo$S8w@|v;^h%^MB?X)gj0U5x)oNIH__iJ#Z;xFX`UCAjTPt#qsUn?-v6Lt?hdPo ziNg_K{nnge1*|%5GP_554?&&uayzYubudwH;Gr|=Pkz#s31?>)#`xZn37v`}ELfg0 zHB?`|JT|RklzD(^fIPX=`z)Mnh^bLkoAQ$DEQu0&7N*+W0M2ez$gr@zF3Q=O1y=}( zvsE+^b(ayd^vq^9UnU_6zt)eyOTA@q&_c1gd}-6B<^ziAJ2g19#EGnpT4$@hv^Z>w z5pvC?99{!Tbn$Vu5)gv~Z-Ooc7zqmIlSlhzM_GZX_YAGMq({aWQ2HlSjGk#TunFbB z*ku($M`o|9`wpRo%_O}bZhjZ(=naS$EhTmhOiZefYO@fvBvd;e$YgyhGNZ28z9HDF z9`Y*C)Ina~j!;r5P-oqxqN3@q@8xpp#RlPPhbZsLoW)FUF7e4tiq}Wii^eJ$Rd_nu z&QMb(DpvFXa;-?W6D1A;2DHI@l`ZSvR?%bRHqUsjM8f=}42(kSa?kiM|nWEgmv8Gi#O8KJFz@C;lf>*Ooz z_`Nc1OREcvl-w)Z;_JB!{p*6xjO|TvYuo&NbAPBB(B&SR7BIFR^-bz|f4%XFQ`>5t zqUlC8xA^OU-ZkFg`6@2Sw~z4OxO6OTk9|ZSU~(Io?Xtp>?(J2$XFp17qhY zk*XoTVwZ|qDege^$qH=?SaW7!DITuGtjQ;FB*RwyCGJFr!O(!Mc}6k?s%vLxMpW)Ksq{3LF?SCE5~QkurZj~`jZJ~ zF{o-^$%JwQo%s|;41JZGt{(hmJ%grk0Bl)x=|?WwPBVO&G{FEBO#B=lc|Y95b_ZvC zMc%G9z)C;Qv2FVU7WvmX<*R{K=%Lfry4c$OM@{-?*~*&w)>>?@_w3ju1ZoH`lXSW0 z0fCCgeOT~RoFs6sJ6&)6e%v%7h_@$UgBprPT9={q*tgY_-}XtHe=lZ`?oOa27p^#s z1cc|?(6AE$eRU4n7%WLe<}3x@Gj=f+wD+lQxfp@vh*>kDfsqAPy>%C&YJ}5a3D7jU z9zew*CjtU7B2>j4BjROc#ss9(=*O`evGOwp;;iP=h)^iOw#<>%$?Q*TU0V&C>Y#3; zayue}@iHlU@)Op%!7KfE{@Ms4twv#-9v7N&$)njI(0h{#Kx!UWHdNPJl&iZrqbG4g zN+8!ZV+fOQFuGi23yWylp(STO5tz--F3aj zS#w0<{FfNpo3ZjX*=5-KES|RQ8Z82cE1CO428n({Nqiv0t==BIOOmE*HYsWogevEa z60B_EWTlcM63#Tvl=rE<}kGLRrpt-iQgQjHHb-RcI;`)KxExWuYoC zR|(Mx_pBSHk`Eg0Wz&;NYdHl5vVy_aKUpup{i=?GB7dM(_(wL zVfygYS)l0vs*ZouXkScvp@0G~Yg4v7WoNv~hx_)8>!CVe*R!R;LZ$J+PkxVI2kY7~ z8DfuW4HPH6M!pbc@vUAfnQ57*<(zx%g);Am$0u-xG1@scSMG6w@5hk2KTZ~8P~GfU zk8RgJSf>X*{z?C4{M55~3pa-Mmn3e(m-GGGW4xZa}Y z$}Vm9#!h^uamruo?sDu_x;`dSSZA$#d!SQtk_}im;I+?tpUw~Qe9vNu6K@dv{hSl* ze7iawQ=wT70a}|hiO=EuyROJ!7jzo8$&2o6tGJCkdaWpH9VFgGA^TrxCOM7u?fU0a ztfLhkDQ;N*%PVZ3yw4>b?&W(zNbLJ!bLAVE{8gM5!8!)viN9Rx z4K8ED7fQaK%#Src+)_7Y3d%=EMmkrjwwMvNQWTS^8xS?x?9oC+s(PyrQ*}aQHox?i zolUrR4%j*zDExUShlSl5ra14i0zOuYa&`5fEU|5F!74}GH6Yv*XE|T7LgwQCmo)6@ z1NT~nY8Gc@8R z_+)RP)}!*ll{711WU%j+{dHyr0eN3X`LVEt=zM?rcWL!AZEs8WCeC>hwG-3Qvq#hZ zrzAGAi5s|k-^_2;?}Y{gT^ zI*UK95~C~N0SSE{d`#3Csm!_MUr0X4{WI%dE447^c0uex{qrn)jU+Z&~ASgI>g>hrwc&;|RaW0G4@BdvO8@WG=l*_#y`mW_i^JaX2* zFOzXvTCdFy07!9Mb{W?PTtc5HHUB`i-c>}0#EHY{lo0r}Yp2}H_RN3nJwH`K<^lM> zOtB>RwKE-VCCzDshmQm3+wx`J)A)bwAXL*-vNDyEGSy*}+E-Yf>ZVl_R}Ez}qwTVG z*Ppfrn-I(DC|G%$J4z~$O5*x2%a;4bohqkU{GTj$?Dp!}bl?AN|9su`-edEiV|dFosG@_{q! zTvYEfP#IRomuqfwIMpQetYl!NBb35fC5P`Rpkoj`ZsfuVc4yq*pFk?g3CS4{Z0GaS zZmh`&^H61Uo2z8*!jBl!`Jf*LR?$jQ(gTGCYrbE{`s+%84`r)?3Hr z&2JW1ML{<)Ia3`$PcK0Wh&_%%{w8wiE)TA~k3D}wMXctK|JDhsYH1-szFxG}J)PFK z5QCtN&Ff-&*Bh<3wDajVq%th)WnbVaxaxkK{2iY!w$ew1gdX$dgHcsZ%7ANYAXY#4 zjWNC2{@E1$)Hae0p4zi$0S1ta{Zu{x3I_DZ0VDv}|2qLW0cl78M0ue;{?TlE-L_Sg z(t`R#9a`Gxc}Xq-96%#L%sK?3_sH=cdJHiQhAx&k6b;5@L*F9D|EKR~r_TD;YFl=# znoW%1i2(?X3K#nif%gA34r-l%-VQl?a^(-2CZ~;ykTKl)>0_+0DeCX_oI5cO-wi_R z(t9#k`L%66Ip7+sJq!Z_Gb1B|l8hX!^a4$Vp~W|K3YC^6&GPekb4sY%A#gDH7>g9A z6>&n>$+cCeP{O2PHC|4HUe`ULnsp+BX2K$$Nw;rb5KYwzAl*Ip$Vg-tDYB zacPggMNV(ng62u1r<69J(6)XOf`Pxj$iXYNyV9S`&#V=hLchQ@>Y8J#4&9D2p5kdY z$}_s|OU}(i2@Ig?@A%nd=KS!Vlr6%A|hZ_LDd<7F`5yq6tcgPEPe2f0Ya#8eew<$}k@UXEw~t+zh)eUy+I z05=1O#A$>>JiP3L3k7v5l!vKSkjmyzk8TuEF^jz`QGk*vzBK`h&`lwT9m~Rf;SlbA zzz>Ko8peXEkRmmWeE!K!;XSE(wOf}2`Vp$@;qj^b3)Hg)vTg(MtoSa4xzub02ORIG zLw}$2Dx!|9`%4t582%zVe2ewTdTweezy0oa8OhL^SUXq)cJwXyV<4sAWl{lG=07`M z4i5eli=3_wv9Ugp?291q>%qs;{b}2txe66nbGBV`F|ny4H)r>{(uxuaR#eAxQb#CM zWYUc{hw3SNZA$5!Fn$s>g}?Br?(-GT4?M+Wf^0wZjw2?uCgu!rJ}lHWsxz@nS4`x= z1d`pd4UFiN%cZ?2>KpF7Q-wuaMzO&iDvc1@D(Wa}QOt?2>Bm%mY9-2q2W;?TqKDs< z#RzG*HcDlRH2~Pts}iqZXGoR!QZ624h%NAwej{aJe-Xa^v1J`w;?pL*kw@uw zF_%lm%X-+&E3o*_75HNDOI-?tdPy@JmAjsQrdgNH2Tc2ke3}$pLKH^{lU|xb? zxAp>g0M=^!e^g*c2SpV+8+Td-1B5hqyCa*yB#z`8SWyLx7FlvFk|~1H60Fx__i^;Z zq+J?NtAbGCWca(hZtvR)bp|i)AlXLQQC%3-PV65Ud9U7F8Yhh>@7Ia(ZlSXpnogYh z%%g;}FQGJt+dMc!J*m0J%{*v2ZSGkmy4^hKS9#wwyD7qj_RUXwx&1d8sy?M`qxp8~ zK_|YD8iQ?BJ)7#7w`)(TpDmx-)UVHx5`k^i`gL#6V*C%mo+nKwR!y2RNRnlJ`m^X0 z=kH;8P1fr=l74AbN^6eAX9UH?g7xi3+zioblwbtdBfJCg$EGBp=VD@lV{pA{3x@`N z^~95^3A~TjlN{41?GBglh_lYYa^?u7488gENtQ6lG)?XWs0|Yt%DMo_y5iAx1ja^N z0Wf1*(n6eOIq(cq%@DZa{IwKx&M>@U546`u#iWXOZL>IF{)c z>id+mH-~gSC%_Qq+kdBwWaQH?$ruM%{splLd*xID5g9=))1sNTN_4eXZr09oQrW>2 z=XFlklcs?+iWiMTGnL1T6)H9!IKy8L;Sb|sQ`k*m$bX?bPLY}LRVGa;V?M?lj<-9b z4N*lQD2EP&LRv`;Sz{u-9onfcdDPQLwyT2jWz8oxSuu8GlP6Yq!%Bt$(J+6V&g(e5 z$7;l4TQU)R-_O6s2%hS>#-B(ph#^tE$AUGRxL#baiU@>$F!iei@b%sNa9CnNCrjT( z4+zk+chBH_S0aTUoliLGZh*2P3F867b9IDbSDsww?92Z)AI(_wWs*i8$-*)xtjeQs zSvy2LK?KrawxLfFuzb(re!NflS(&MjNX$? zQS+rVCkPGx;p4<^#uoaSXj(*~5L`q@6!G9rO~V!?z5q(#1Urnq@ljLi8!>Y3{Q*aGCa7 z#DA>A?x){#*S9v~iOZX3#1bdRvbAj3X$vieJ$F;uWlfvqk7d*PWs~{q&L}dUl{aVq z+r02{V#Nj06>G>(+;DdyD_D@HtUs`N#7v3=gNmx)oKYKJJX>VLbe2h%sR9~n+4F1G zk-Pgi12o-C5daoH^h6j<2IzUuXbiBo)LOJ_bX~J#o)yD|U8f+*=>#WpO-z8reUWk2 zoPaWqQE=!%CHa2+5BbW8e|_1DtVF=FR-YvwH5GY4p+S~E4J z8clG0^K`%pzq|dAJ0Dqvx<}kDs_M4g5_b%_gT*_n66Rt71!1m8SCwNN(jg1|6-PNy zaeF8pYlVcnDRGEC(a{j*`WWpJ&!@YxwtvaSI<_>0zMglx8B6GwE!z`ZZN4plqvq0u z^|}R)9BkY+F0=_&WbV+%tV<%8#77w>Al))sC(=ZcIs)-{hr4I;v2@GV;)OVy$?5E2#__0b z@%@6K+EZr3E1Ihp>(9ikh%>$zdlKJ51~prEONXe4iUvaYs4lJn+D%PI*l>s>)E|gX zyM~n(;jZO^rFeG4l1OXXq1Xu;YeC(y5>efdL=r_4Cv<*6Ds)dW4W^!-MENL>&d(#C zHrn0HhQ|pmd70~Z&hQU+EeXLb=HB+MfmC)l-z)y$zRq2P4HxqS0&f2Wj#dx3%<&!) zZvPE#6|ET=g8vy#9=mFiaS}hgd;^d8yJy*OGW&C5aOxgQw4+cXF|ZD|dNQhsKo4Os z7;;DkAEXDE+LKJR+`Ieu%$8avTTs--6Np01%EBr1LF^(G?BW@-)@ZMcPm$0q(Yr0G zoz|kh$1y&7?8?wOgd<_N^`Lh%;}~H zD9*cIR1&gV(mpH@F-E{s)@2Jk7Vcj5e!|VAO`a9RC#`O}eV#e0;9QYhDUB19WHHy| zu&$@loY5;-10~f=FZHQAdULj?Cv$gy-oBookc6`(I{-{xcS86lvBQy(d<|Mz(&m1ndJid11Y!}d@jgp4Kz^Vyo2r-@)0 zkn}Z9`Ndwx73^BYs5XdF2Kq5qNUmHeH$izQxMz_UF#F>^&=6x!SUJhGYP*c_!dTv3 zb-hGnW|3az(%PI#7t4|psIfvRxYVwJuC0x&F)3RLZ}yW!7Y=p-hGksHiGa-DA>@0e zrfDBP@aq(is*aS>KeK41j$7kw?95cc25y3q_#xSFWK{aKhgQ}r$>@a-`r(_mWVT1p zQ6T`gj-vtV34kg>kcF*u``vp|J2(v>nhC{jz!xj_FMFFw2Wc_C8)@KDS9b#Nk1f4^ zUxooJu+t=n_qH%Kx&j$p9P{9tHT&EFrO~+QB5<~}3UhC-iwtltwQb0b_;=D}Fj_Dh zpMDV3xnWU1PH)@eogc(N=brf8oCeG0UB|eyeZr$UXg=oM-(bkM&@P6QM*cEk(aNq5nU%s{Y1%jYI+?x!>L+ z1&m-fIQGO@`aZv9+xKN|!dLUF?fd2iof>{2Y*G9edHC%#fpKs1vBYe`M?^FypbJm~ z??fQDtsQ!S$wZukienZA;)3#IBB!Az>mbWso1yW!K_Y7~V|63~zJf3(*h5>Za(D@X z0)8|)lrl}T0ed;DI7Q2}Rmn1*SF+5~vZw}Ycu>i&F->M!eJ6w+4!!Wt!ujae##~`O z8G^Vyk*~Vi!)z1mj1eAI1nXTrITOw4xIge5G1!;BtnH4>7Z`)Q;k&%y^Ipf^zTm&T zdP>7@y2G}FLMu`Dp=ahwK^E_8*gtJXJmzs+LNJ?p|S_E*iz<%_( zRRR&?bQ1KZ*y)CfIhis?ro}NSTtaxGJQZe1t?Es1#!6tU55O%&p2@`@h-gMtXjBMsj|Zjdn^# zPHv8JMvh^2W_fmwl8R<}pC;&Pv6GuMab6IF++tPIV2?!?Ard(!*$0YtQUv7fnHLrPF)DZF;(3chLopD8<#O16U&*(Lb#V^{&5i|wwWPiaW7~;zfi^2@A}hcnzS)4% z3t{83Zm-8{c310|u?77)kP02|oG^VBuB7n;%DJn0OT1FZ5obYZXwTwlD} zb&M6S->&TN&Vc`_8eB?+#g6Y|yD1(xx0!cGrIVWV@pkVhD<4Ii-$@-b+OY@e(7tL0SGrLau0xFAcqQ~Xq&*YC_0!x(rN3bwp6uF z-h<@BwiE(M-Yy}El|I%M9!u3HR$c6?)v$;00tKfxAyhJq=4~d(llQ$j!J3)t#$>^~ zCB}ToE$bCJ(687JXSJK#G<3tYcoF5(QhE*peueSB<+`(oFG)0GK)qXT^y1oAMp~>c zEpecCm!k!5dCD#c5pu#wlnmqM24l`;m!DP;M!gTHu|(9MnBCjq!2@wV`x{A~m%Kon z1uQB@-euH5CJ{G8gMI-igeB$(MMlPNP}3aIoMO2!ZI!8MDu2}rY39;>`xg z%4nlwn5HN=fZhrG<1USSQL^NiQ-qj)zr| zwt-Sw$YRQdHV+H~YbSsOhM1Ag_>;!cENwg=03s*kYJv?l&)+K1kf$oJw^D|HNS}U6 zrof5z*knPO8J-O=hDm@e70Z4{+>+Zsf91?QR(ZxJkwlh@CU+qvs;7r=xl61~gMK7p zEblP}VWosM0&eu35uk*Idq`m@!#%;df>(mPnTZA?Pl1CeP!#bSkFu>hnuQkq8!O}L zQ)w7G*1KV(U~*O#UuzH3l5Dro+IyuHG{N%5R}13Cm%R!S8g@j5e8FigldDUUNXl^D z{6^(x=x!hp&pi!q0#d;njYF@aqrdIn*Q2AW=bs%5N;Bz2K1}$6yW&y-vFTivN_j2$ zJQUU~FK68rH+~om<3YcIyK<)(hh}9t+mC;B)+5Wjyv?DVUVnDz`21 z&H#DrG3FMYLr$@++Ic7j~R2=mM?Zf{YA_yFy6c9&4lL=rX~3 z|F_OZgtz~X_W15E(_P5x(cw!$PxWEmS0hqBhS)Z*W|iqn>z8_d2dO3d!oFDTWD;d&zS zJ`G&S$^uA>^7@o)-jH)4tA(4^9l=_UH}z>%-OT z?rFKnE580BX8)Z?EWJmLuac}hvLedtf`W8q>1dk|#2FS6$gql$jzu6yijYbHq^(Y- zOxRql43~c98`ySi-Oln(21ab8Haga9$1{9~aWy3L4Ng$<0wT*pRyY#bcR)Q#o#fAcJaXOr|xms>!shQP` z{F`nf)q*ZjouWy1o4JM5ZUZJ&Om{_AQHUwD(;}Dw6jj<{SlCV2d0ceUO+hHu23ix* zZp4pF#{};>)Z~;O`LBpoL>J5{SrPF;v?NE{FR+d?FArihQ!epTT3`>>%id+q}i;8gcJojuG@6DJ&ijk9k=K{NpDHK1GvkU0O1tRE%~f=XJO zgevqc8mgmHh5r8|iRfVlPJU8WPK@X&>H0P52^vX_i{FtGC+bC5$;TqKG&LwFLDEXl zC{M{vO3BhFQ_Rv#C{aq$(#}#SEJ({zO3^4uO3cqos7loTjir^8U!t3tp`nzN$-bd0 z?EFZyWfCg@4+n8X( zzU{9k3_(C!k{%iz%kz9bXeznRmw;w zV$*?YJ3d2xlL@A~VWEIN7@9~x2=Mk8ru`Pkl1gPZR#=oU9BWm~2e1nRLXEeT4NY)+ z>`6RnPr8Re-y&n@sF?!H9O_Q+J`_d0;a{VM0=Bgq;4ZS;V9m+yJcuCsL&DDnv2_iYRUcO z1o0}5u{z?ymj1KL`OSS5!8U=!4J1Z}sQc9H`MiGmbnMNeHRSwm)u>JPAFfuHWC#_G zuOKShZF{BIW32T>pb@99*{y@A8Z$-q=OR)7AI{6BHTeM+%@vcx#Y2;6#POOS9Oy~6 zGm#E;W2UCT{xu4R0-Z^_ma|>o!^taP;5n_}@fvd-ICV_6REMlT_JDQ$Z5CIu33B`18{9LyH#(cXt0N)}P!J z**jmqJhMcj(L=kwj^+uxGY5upxboHO5Zk zv2Dz__ak}Tm)w%6&raWBl2kmAClP(c<@WQRY2u=4{CRJP11u#>BNi{CG^ypUtMg18?%> z!esccjQWe}!g?5wVNcRs=vi*7-3|}~u$@dyDh)y$H+YD{?LUP-$<>uJYes(CzWJJ> zJ*h39oKlH!h%3ysElJZY#h#PX455yl(BMSZ)MjY{Kpp^BNj%*xGklGbq$9EB7KSV) z`g}@gvj!~j_apXOObL}C@lTOdoaCa6jygW~+;)5z=tlKz12j&>Z>p)7ydgx+tfhEu|cg7gwtb^9Y9t93A4jo zTBuOhqmgOJh(3l=yqM<4(ldIZIO0yAhcS@-E~j6nnf@A$O}_5mJs1zfi;L{@&P|1g zKh|4MBqBHr3a6vu{MX!m+?i*(w+nZVT~6z%Z2atk4R;Fr#r$Zl@>4c2cg8+)kn=qw zuOYJS9&vjdiTZsE@rBUVbn>(FTm9sw|F5t2zsswf*|TNriHhdB!l0wxNDmv;6da;? ztYOx{jX;=X_)#h~0Ib?@!ki%{;Z;dO9DJnUbUcx<>K0n7Sm@_3vI>TwH{&4%o_Gl9 zR$zE8C=DbZ_dQW(aWFXTghrXLqi;ZCQIBmpmVbM&-O;ZAAciCCHIloMGzwmG%)|Cq zBE&DI=2%n1IaZbWZgr%-vB|X0?;P0=!}!WIRr&EazUe(gLHy)L00uu&pwD5`-(2KQ zB2#4lhLAJqr1@r~07;4XygCZpm7!mQzIj(#8~}z~ku`0=yuPbz@h8}*P=~i8sEj=Z z21+y%!*(}SJAO8tC~jC%r^3|SjooAIp06z9Tm9uNlM`WH{W`Fs&JC?9-3FEkEU6nb z$b=6;)9k6JiJJ%xHKdr7>78hZuu5O#5O^_B{9snv+q(u{>DumhKwqNr`T0iJF0VJrvtQw_rtmU+*F8# zTL|JdVqU5+m~(t&r8#2rwdOLwzWAyNROm$%1#$IFeK4G=g>7ZRt^WpYEu-}Y@K>$Z z*ERBG`_@F^;zBD851xsNXyZU#1#l=%rJ1bF{he{3khh;EJ=>R^DVoR^nmF@k$Zu}Gj%ROO*t$FV zlt|feyg^TCPP1_Lh*@WQT6$}$%vcoA`=F4;4>zOdLmqfB*F~ypLyFo$KY5HAtmEQ@ zhQ-AQXGS@Czi)hi)L=wI!HA7@b>|E1k&|+d5HnUWO^{6~I3%A?Rq{ATi}D63xB}QI zCGI2zq9w)?25eZ`2>9+lT-qZfaGSV!U#UPJ^wq1@W-zu{9*%C0*DIUVQAzV%E?4o| z3=1R<2*O}N&cR2#Q{1m`!1b0)%tjEw;FeWzvU?}N60+(zhe?oUhU5yjJEaa=AbL{= z%BXyHX8>=Lr;**3*Yu-taKa1K8E>8pId&^EX)xf*23tgCd(e}O2#8luX;FN@P(bg$ zpG%ve{eg;pw< zL#nG?F@nu5Nx8FU2(td|p(P17chh*10e({eyDkh)UK}AY%{^42D!8@|X%j@6j)b)XynH=lnVr zh!htd$U+U4iyf+k{=Q^o;B462B*W$ydG7*q?AZ-q)28GO*(Rm7D(J$%GyjDLZffod z4ab;zoW42CQwJnFHU->FXci9_IDZQEZ8WLr4!_2q)0iUbz#V|qYsJ(~nrkrPU1Oa* zIeCQ%Y8C>*Uw32GQP|tSx#l^#RJQMfI;;k1Q#=4`uq=`GM_e$c?0Adb1X%KC9`gll z6npI;cn&=3IrghJ%^Ovb(2f*JyMw)S0NvCduyy1o$%E*(XzCNo?#1)hGo`N`6qqVV zv}xT&{I>!Of19y5NiZ_Vfo?lZ4LPJg;fOO{fRPM0jG* z5=eSV4p6?yok%>zSJ=5 z6&NTF=g?ZIxgG4=Sd16+vid4r3g1Um@niYa7U%($zg^j1*a1yGPSnP!t0XV7({&X0Kq&C_GBVCDPKa3t@WfJ0#T}wjGZL5EEtJe;tLQc)#`l zHXi%7OH*?^OEtZJ&<2Qmpz26dMg9Vd#0U6%NFA#~#%TYP2igb!00f^2rVq`N*gbMw zRb*|jMN!t&9_Q_jwmuzuEN#u7RG!KY7C;~^5s`!lNZ>$OYrPz5Uq`sx(7oMvHaA-o zL#ezda0(XULcBzSpoNMiu3#%V9B)IdhZB{j8PN^a_FCB!dCD_A`S;)Z*zNti-tV~e zuiXIzx|iB`PZXx_kyeaf2HGORukdetJu2;r$V}nRav110h=ji|UwxOxz)S2bw#dFV zit7UR$mt9-rU$@Wy*dUJ5#lT6z4_pKsd&XW_+z;5nSyA0=mU@Mv`T|!4u%A5=e)<> z-UxD<(#SsfD0F%kOjZPi(NHHNTxP*cK{n;$nd06!&idY+&v{RAKoScGJ55w!&E7j? zbzjhc9&JeL1^y%`a}mvvFI(0L=*-wq?epiO*IzInk7KCL%D9qa;mdzBg5fxOBr`$5 ztdJt7B037`$OcE@03SVzGC<Oi%FrHW92@xMnN?aR}S3-(Lhl#o(hNX|5CDdLptMe@*>{Ly)r zY}K;bti5fU51GYu?BbyQ+@VlKqWBuzx6MGo>&)H-Kz8{@B-@=(INVmx-?eW<}D#w+eeWz<6ADI-OsoI=h&3xfQZ>o z-P)PS&zQD1G2#NZ2n=2V)^S!yc5FV)Bsg3=5HRAOf02C4s0rFRBIut`QEDdmEE4$5 zXD06aYu!Ybf`W5cPY+xAIh6qL|J8=2Xx46v?j~3mYV|mhM|Ud+Y)-qM(32RFNAJUD zZAjLa4aAuh!yYO2QH8y?&gw`MM-N1tzjvyb)Z5J~*j^}Q;(@nr@<9_y9-YoS#8J)K zxI?P`b7`#U;hXX%I)7Lq(M3Y21u~3bS|-d3*KV57{MWo1q4&BPeY|lX=f(X!0@eMT zt(O5d?j}L;FR?EL1lk$qh~JkKc3pQv2*Akq@^dMqysK}KUvEowNy*W_li+IFnzGVfHt+jA{cr|qgzr{T|DuY>yW|8g@K!4+&PR>ANigpxOqNr1 zkhy!vCx~zH7rg2o4fX~ojK?F#+Ue_@}GwxSb(>fCKC)Nm+?=Hr`i>?Ln%(DcneIQVau8yG81>vq4{rj9`9 zH|q6E$5ngWmYO0CxIb#IA0U~$^lEXPld{KU5V4zNJKQQRo#Ipr{S{hdRW z2dAjj+l^nuNED3vhU=?rm1@5361k(UkM>Gdc%>k_yc?hZ@&9Qde~GmW%K3kmGW9DC zlzEl9WuNE{nkeCN5O<=FyPrkyG2$ zw|3hd`2Cyh8?oo048O?bNAPw(%Y5I|)Ehjo0FXvov|$Yq8Vh!}DqWA}lr|JxJA^+P zjVUio3Gt3rKq#=B>j;UywF+i4MU)JRh#)PGPI^$6BZr9vNAK2GJyHg>g3yNa+FzZP?-jMG_jP)8<`d?CUeURDu+xvRD|a^N;dLi}K4|kZ zJN{3(_gr4wU*_ik>3w|Agh!RzSuY_^l_3nkIckc)0Yvi1SU_1a1B`||Q>u$}+Ng^w zthl&ac4859xE5Xjg;T5+Q{+S(WxZOU`(OtOxRRGpl1`zX|Ieznev>SLMYV3+c6eLk zwqX5n`Ow-)<=PMp^Gm$%G5{L6Yf1uTCovrMIB`kX-c77@(q4)c;l;k`^eRGSve*h{ zn6)n2jo6i* zkbr}b#;y<-?oRS)p-(Z_sm$;&&k4tZMi||o7H7>}Q=HSe$>kvjEydbvA9;HXuJ2u# z{vRCp7s2RLh7*IIlfcuV$f_jk!XDRbo7aH;)C>m)o_H+HShUrqEnik**#{G?*sqxd z-pUgk_}s-;$7DizpLcGBxG`B$S^?|k4grBd!^rotG;j)%wX!M?Tb)LTwG=~~$AVFv zsC8Ot?(QG=nwpYgSB~T<-Sg$$3Ex`ApjU5Qwe<7TWCX0H7nJ>cct9-Na-V^jPq|4e zw_u9Ne{d+h=PD+xMr1U5j$-RKEV12O)%5i%3>tVd4P=mW>O~;6*0tRttqW)t7CId+p z=doz_8ejZ?9m;x2_`8bJuD7O*-)de@OzTRai>~!7>`Qz64hYDzXG{??|6}IN%OeY- z$VmgcNGCb~h!({!X3P{xuAvFm}li`LXrQ1&g%4dJW%8{ zsN0j}z1(c_2VE>?ZmzY7WlYa_?|=8b8}D(yyv|)?L-*m2FvUgO1KYNFkN~cO!W&Ee zjQBafuJ#~{^gy~c#luIEPbS8Y!gfEJKiO760Yno#<^>ob+fgyGy+DcAk3a-3YcE2YY7uJ%?>wjU>uUT9Fer=r*!>$))ycBK?k85vrMhOe9 z=y{bslkz4_VMzF5Z}ySBd2Y9tst6=7Jb0DN$(;Fql?Vb^h^w@l8%2>7nNZUMn!*m5 zm?kqHrP=a1TO_cAX%a7fXBXfbAJb@)-|~5Y?7n%A!`N-PK&zhMI!r~0jjGN+JK&;< zv=X>s1OcHShbEDB)Nx_+=HOCr5^VTnn8Sc>e(Karnl{+9GP!XT&h{Pq+^_`C81uMm z`%V=3FFZaiu(&}EBcARZ2)M+>57*#to@N8n;7unmF^PPg_{ixpmVgT-4?Oeyn`CG# z@jE{wtKBI0P7jW8D(Xw{XNyWQ=l)wp+uzL8k)?lkyE)qJa^H0N=ih#VrQ4y?{tMs| z`Am6B7-an47gx4c+8LPY-OLaVo~+^{X(bvNR4b%ty!s(+WRO*>I`AJ#%_<#7or~ocl^83@JV;YL8mLny=;K{eo7^lH07sK#?)UmU2 zbTsm^GArxglmS625oc?G2qB756}3dEkWr&h6>1a}fe=)h98|>LunQR zW2wr2OFe@_pqZkXl$l-!uvQM>8k!np*hh;Mk1I7tRWJngslzQJ@tHLY)C94550x z1vT-=*)DgLwiae%mv)r28axrY!>~mdmJ$>s#E_sqAvY~0OQ%RNPcxxFDMd>^OQA?P zp+-SDB`-%qzqaig>J30FYL04$9y&OR24`kFf6g@r1`wek0`89i^~mYPvX0*#d*t>X zeS--$k!emZ01X0$vq;!z3}j=?qJ~i+N8qs{T`ZGGlNNKY``+hnw!fnz-4vk0Kx@r; zw>CGw$MpQ1l~!`i?%Lf=u-x&BhgMX<|FXk?^fpp#!R-R}Eckw6&$916REQ(SeQGjw z71UIHOF@LB^EWfOLT|v65<`8lZp9Mi@AdjO%>U=5-sAthyo>E5-PgY+ZLin+?{gNn z#`nFPVr!w+L`kK^66uG&Hxk0<0kPnL8sB0+1y#1}jMx_kSuERj4F44S2Y?TBdZos0 zQ=@GF88E8=3Xs&;ryBEbgLSuIq?zKX4KG^g3H0iCgl4WICt6iOn@6NSc!Wtr z4XvNmbFgwK-3uE&Wsy-&eCU*$3k`uhyo)wFXf@x0h_s>|qlmM^d<28Iy`6+_?Y4}& zX=CCe=7%AcUx{11F{6rcX*&O60o5px8wdZXuZEB85&J`+K>ymm4SjQk0LVOdU6++@ z(zPt(%-#O)_jvw(|M%&-pD8<-uwj0Jk@y?0&uiG-$~*@&oy7^(mBc`HT*KR2RwJf( zaXjkncouzIi)@)Y06*U)QtBl+rl*ZZA%XvnQ-_8*R8@F4-gW(`TAvV~4FMEEQhTI_wo5=aaBJToRw^(4I4VzRWE(uOf zcEf!B0eE z)P!UpS-YZi>!Dw8Ly4jcI91{)J@g~S_)T~>4s?xcA&C@;MjaY6^4Mig+8`hvhUFJR zASz=zUYK{t%=0y8H{tvyiiaHQk=U2ZZCETi-59Gh3}(%l{2~VE195F=$j~NzM9NFL zpg{qM@O*pI1$0$sqP)biD~g+sw{&CG*Bg~3G4)r=&>9v-3<9Nn-E`O@W3VlAgHJM6 z9>0LXX60$U zS?NDSi=37|l${XGijmgu4P!cPhWifVOAGHSl({PP)2o^%MJ!!bL2Q3UF_b^45=)%K z0?L;hBovtwLXXj`mb_?LrIy>HGYJH9UnU@#(coiQDS%l>*1dpq$=+kNymxOsSnav- zjJ& zicMWnchgi;?>y}d5cbjwSYUB~{5EjO(VLHd0Mgjq&!Ur20^grzGQ zF}_0xv-$&d0ptqj?K^7)tpZH?yPN4_dW8&^JI79VyX#3js3|4i#T#kMb?Bn+l4Zk? z!3!IuMUm@sQ@fGsj%e00%P=1iIo@Sh+@zyRykKwglFzS`A*gJsboKQ1w2BsmO(RwK<%Mo|sO zJ!=Ajv({)9C$X?wH%&_0Jnpt_$mZy*^gbkVW8>r-G>^uKi-V%z?{>UbiA2&f@ElfE zym@OG;mpOzxOg(RmIKStX~9~r+zo?8>)9lLox(X%kATg1HZp~-WK;TF=F-HQ8gC%W zaaea)GVLzrU=RSbX>zcTTJG#X;~hmwOHyqGGO{MFlLdDqT9&`sCIMOplpJTmJ~jorkB)e`1 z5|t!XM!xwVH%IuctE(%D5EB+{qXL)m?LeM)G^(E>TG|}U0-{QYEE&~(APns2Nt)S$ z3oH##^#Z{nO8_@O$iEai>jGVt*6GlR^lvoB>Y`M^rmD=YYr*e|T8i}_QX~+xmvO|| zgh+~7_SH=5cm)sl+<%Q^Wqa544+EG(C}y}JnW}8P*m8`@XXe{JD))e1z!;YcZ>lT< zb3?S97)l$t^?%4AF3S(p%>xha+&&yPnt^nNg9jzT5}3tcNQGQeVKjc2%S&oq4W004 zx5C}GV4>mf<|jjIQYPPttPlQ8im+di=Lw8MYi(sL%n6a?xQc9*A8lQwi zWzFmQ(YZiKSf)Wfo^#~Xv7!MYmm4ZS-<00YVc$SwzOKhm*xqY1ca8&VhTLsopmn*E z?dcf5tVDhu=e60G{=A=?+!)6~@&;D*Z&i~mW3UX^yrJ_pWJ25l4kE>++zPIRj_L?! zqTaq}B=RsMwBMgql%GdNDd06s7%+cA-^kB~`_4U=gpl?_^vxNsk<)gZpf0kxx1Y>E z?5&su8|@1j87%A(O7*8C5bz}9A_D=2A@1i?p4NyO6#6Nt&f$BHv7uzmPc3u-rr`9~ z%9j+K2k6<%!RNPWJtasK&Ly<{p{6L7*;TlIz+3F!|$MY8RpryB7q`{R$k5Av5uZ=I1+u|yx}q6mADL(2Y;ezKMN#pno=D{h#B zHh$OI$)K4T1@*kvsS#LaNPJk?>sn+q&_i6O1)Lk58630Uc(iSh)M~3IAe~C#=o|5m z{5-HB|D`BDc?G7-el8~7ui>7Gpsbg63L6)-6DI#-3Bqp=XeA+=*GSDk*F2_`boQmn zYH7=P3*x$a%TL^_qqi_ADHShqnts=n7ll3zYIAiQz(2UbKTa$~IMX?j^8EvsmuH5# z#!Y7YkM`qtFuM$W#a^d1PoK`ibWueeJJues}Gk~Z;H&8Imd$25D~epjyd%aP$X=_SD(f4r9@*UvVX z>YCiuUd?hSU)dtwnAE>-xqY_&CWA!|fRJe;@l)@B|HNUd>a0DoI7+&(O|WFjNL@Fe z7RDOKb$l!&NM-FRMCS-W2}#_MMioklX)iY%b*+2a<|f5u;T^t$YH2;{c@?{sssx`J zm6d(3dX)eWoI?rtmVZIB{-7OlAW-gd_WR!b`(8Ht^V!?Df2F?Myeq{ek?3W|OsR%q z!eT3=se~=}hzq7#P;ZQj@w5Ys(e9KbFaGiv`wFejB@%9SR2*(BmMzZUr&?=ck>PSm zF>G;|t#V2x#6Uni~;R zl~%R~{x*47u2iX$#alpidwCji-THc3ecei$LUU`^mWFnHpIAb#G0htNx>h^i{A)jU zC+Cv)@(rg;W#fuQcbC&?DpiL=0zm`LHpa8o(W{CfH`@=!x1olk@5$1i;+9hFW=)Z5 z6y|oPjD@->%(Cy*_rX9S0rDSFB?7i~#!&lXG=5l942zL#%&ZYq=yY_<74__zR&Nv* zU9+xVA?BzRIwstc0xAdZn;JYV0eE(9R5@i&05%-GK{z%$<1rHLha6yF%*X)E)Pzd6 zt!{0R>(vqZ#elq{&bBvFToGcjLU=Q1MxPHNT!7*IX#^8*6zlJX*6B~FxNvTNy$ODMUm1~9n2@(yF0XKft{1&QArIa6JVyNF_s znIr}N*8r~|NB8;%6$r6afF2y7XoYMqtb07!!Ptw;T56rBcfRnj+@oF*5PSsB!=M zeBMCuXJBGr@pL`Y&Z%!@hKTY%jep$bbU0X8^#96_*uxLzMid7zjW$9Djw@+&@*{`e zm%bmKW!Tu@=Sfcp51N%RC8Xnxp8uUM;VcMIkAcJ^2mw^&3KU{mr9T#)xl01A+NWixMc~z>SqTM+2#Za-d=pmRZFkcI!#yEN&T=|B(46{F~Z zsC5M>OD;fbPZ0RwDeOPAH1H#0XY zsW)NzAairM9mu^Y+*zj`NLAOUXXLXV@gMwjAYcsd6K#LcAdapLHtx8)guAjcAP|yuF zi#>N~GS!%#>yyukj&Tn>55fG@ggnel0M?1kpaGUHl;Mq-xpp8S4_%}<%s-HJ9aO(3 zAB2yb?E@<{hyawdkrHM+xQFuLE^{{wigBc2HtUV}f?AKm6LF!BM7q{9OTqn@@5UcX zfM9QsAKgnbyZdiSk@uXTBjIo7z6gA$Sw1jwfO$&wUIM$v!LPo>n38|5^6-*=`9Tfg z7jM9Vojh{9lN)Fag)T z{ImWa^Y2cdu^h<=U0eOD65?ramh+&S4blxNv@N2wr%BYdc0-qxw)C%;d8w`?X?^mP zu8{2D=C0>vhUdA-4=_0$Sz?51njJBPE4QaGR}cXt*qYL=nN|G(YfZ?yFH9&Z_C!jM z>Ll+lO=Zyl-~lNOaz1lrq_wc40fa#%lEMRIN+HI|Yc|^3;?ac#Lxxab6p%!lOj8KN zYnnwuj{tkVb%=Gml*%2;GlLG*1j;`1)I~duXga|ESh8}F$3P)6T;|zVLz6?IbYnQm zev=j+J9`LKS)!FbWMx68PB=TlchH4GB}QLcn))*?4Y(P_iopXgx%{V~=h=Pvlqm@K zymwTZzq89^oMB5(ci4 z;}s`xD~j8Ivtd>0X*A>kC6rHI!LUBXtWy(rK6){Vfj-SR1QD>E~Rr&?Wv0q2#{ zLlE)%rL zmytBZ|%1_M{@`*W~pKh(S>sxIgqkcco;*AxN%L@Vc7MF9WM^< zNHh`Fo+Qn~@PP=S-eC#()_l^PRO{#iyIHNqlPfXk(5}Xs9mkmBZyV2=JKA^Ke(OtH z)&jU-zJg^DT-vjJSE0S(7aC!X8Im;0_HDzKVdvnL&}&$Rj3A(JH}@}X4?OdTkT zW1MZ|jqyG(#P@ySC}Y|Jt{SLurzWm&An}p{7ZT#W?Ck*N0Qg^m;bzgmif~Xe3kMj+ znb)B?y$GWZ>r*!EOL7=}X z`EbLMOyG((Vc!}tTw2YDL@{9)fPpEczsvT{Q|V5zU_vPaOH!2(wo-qr>@+}m?83Mi zrCYYEans;AzPW8VCTE;;(2>dQ<@wJFK9=?&T(k>$uy>7$xVRjuw%+{QIr_76M;@IW z5jc0=1HNF=^^0hB+-!{@(h^8P9y(SSHjiLv447IDlDm&RIVcq8KKhq8IQ4}qFq&g@ zF8(-`hOc;ufdbNGD`wSC#D!XUF=IdY0^hTRpYzT4v&7-&Z5W%!CA4!*ROw7*J?&rS z@$ich1_iabLJ9T?@k!xU6`|ge#-E)NpY9yd`N{Ekd~&~ea&~op-By~Fe#72$rr*AT z`(6*Kc=vPV@7EILRM=aM?~mKe?GELYnld-yR^aSub=L5sjUD~#!1Mto^5(nphBIlS z{Q5Ep18api`Tg}@Zg0g}a;H4wgsaT6`E@TrJM1IEb#C%;LOEv7ey+s`--VkBBU9=r z1%vzt;C#nBvVuQM{W5g)pbuy63|e$GXpoXYftlJ6;Ad}G_I^d*%Ty}2^?>j_O8BU6 z&==LbVZUDm-OoGI1N4F29^8E+V3e;%POX}>J+>-JS}~8!xZ4qjoYvRD!NHo{F=Poe zm9&K8WC^3^l$5|LaZ-T{czM)NeMChKHTB2 z#E)5iiy2l{A3dm@YB5|2OY4B`d2pf!#mz_B!{o)5XfN$%i7oY;WAsTzohfzJ9!Z#& zz*9y}Z%kw(|G4#;V6~);()?*73)6Do13BT3D^2ePaYWEFWIdWCBt=ow)`u5v%pP9W zP5+nzO>2u)7JNY&TXqSYIIK|sR2=UG3Xg7stOcSpb1iTKHb@p#>!8{t@DB}J{QMYk zB7n^$jE0smq*m8wy`#Bi8vxNL*J1&E_g7)*R+r_0e4}&nzxseF3oPMB85je&rX|=| zGlFS);w1C*oLoUlMy{kyRwhp$u3w>#&xFE7%paD_fyfURgfvL7AwOhl`BoJ&Cfcz~ z8A9OogEQ)lsJ;xY857FoKpJlz@zQ3@Kh6{$Utj+tMT?Fppdozn^Y9Xw=r@e~xY38= zlWz~-tH%$q%RO35x3;wQsE^$l)E`4DT=KCYYGBO4&m?-jbUr(=7(b}%q<1Ar`mmb{ zSuG{9D1Xs=7rK)2a12A@r@teZdwGN(-qbPj%5Gyg;|Egl|?6#?_ z@;G_&<)u7J_JE33FaAB>4xzvE8!qeS?3pF+xaWX+KyOn66TZ6?SUWx$*ZlJ4kJY<$boi75Klg|d-KMvid} zgERZx5VvmI$!J~pSB0h1fJqPU$F=9H@c8oO$i6F*W#;Q&6HBdYv0RKcp;z%76Ga`) zswm+IFgPCi-(4P-FS~n@`dSCGd%lr0`IvflNbvS}Uv2={AI8wDw$mpdh|Y@!*G1%P z@-JyZ*#pvUY^QkviA6hZOrJsZMSiCoIW`H4n%0uEA!Uf zO|IQU>eUTRs+$zIHxsBDY3>^Ds=EBrXTnCBT*l`Grd$qc(D19RPi~92+o6EcL(G^u zeeB+x4q~Fe!n_|~uk7z8{y#D2^+(MTTu1k)F;X9|5CP!1E>|p9sd2=l&Z6Ot1@yLe{wnU~66tUH6g^15z}Vh{+zi0b&_Xsp;4(BcJDDqu2>|k;TVh9|KFOKu)Kyh@ePVdjW zVs~u(c&imx2a4ky=MG05$~Q2u*y?Cz_2{snHiU9Ir&ws!ySp*{r80E28iaziT`_n)WL25jC_7ljH8r%%E77`C9MR__U*LB03`a6 znVOP9#(&(!<{95Ha@M_rLt}6`8B{fuj0_@5Mhz(;3_=ERAxDRR5ahrGvg0WT(|dHX z(lb&t<5SSW7XN=UAwU|D9R*AxwZR44BV&4kglrwL-Xp04FJ6eSo(Y_!k))-gUY?Pi zm5n-33JIBDj8iH?&_*g%A&4Q2>P7kRHvU>v3i^swLANKcHAPGgxdZ`6d<8&ah>erA zNm4chjSA61$v4ZJp!qqICyGSpB|5>L$SP4M@+qMQf$_4?!Fy8?#;m0lO8?ZxB>g@|xlI^;mmJzJGHG{B2>ue|98F#bdP4qe>1hsqN^9yzF0lwv}`H|kgy zc-7FAJ$uu?0W5FcwvrO1*qn-Kq-S&&-sKmb4A51MBunvG4Gyz+molMO9Y(rQ)E3D^ zwr2D|CHCTV_*S<)@o1U@)UdZ*BK>ZLe1h1Nen*3nE|WKnQJ zM^8X?YaNKCXqbi)W@)fM(egckDaE7#iwP1)5XvV^q$Fe=vKt|)A@kV)R^3IyE9jSL zJA92mTa4Gb962xi0^C?bpr(0!+tik`92F)@FnAWX8Z3cuO%kPJJfI)Ixz{(1d-y*Z zx$;#&+B-H!^p-{Ysnwp?WBFY6ey@j+Q{xMPJklBggH$5-R7$jiH72XdQoOA0V*>^! zNTP$NnnD->9%bx)_-)gk9sBm`Q%KzO>fNJ;&Ei+1=3f4qxHh^Oqj_zuPGCL9$J%;- zge|%)9IVgohdmp+5PE?Y8VmjqJ@e}2AP}{3ckGhx{i}f}!Ul`nss=h6tTIsK6K}6g z+FV2GY)wnFusDlY`4W=kv3To)i!&?tkiAh0d$(-Iss-x)#8Uo-}DhI{u5kA9uH8Bdj_ax>fP*q!~l6)0Q8 z4N5_tI@n-!DK4`~uV!tV_P+4?ncyZpshDLT6L}E?J|XV|MIiZl|QOLLMYb=T$O4 zd%}(Ix@6af`~^4oMG{gR$f+x8LFMr5&qORp@Z=VUH&_ zZDBo07%5k$jnpa3MT~n0)N-SwifC`+`bZtEe0Drl^?aE}z$-^_k>$X#(B-?v?jO1+ z`3mnG<``sh9RJ(2HrM@#74WH-A#(L-4HEE&;cns=l2dZn=^7$J(KDNuAwbSwR3Pd9 zNsAZcPMWZMP^OT+XfFKH3;iX%ON>6OS-jxc-4z*NE{!M>GH zX1TyNPy@eb>H*bXlSf{G+x%CF;#b{&h?wHNcsXXcQLShDD|tEl?f*u=XMEBxwLOV# zdzy!*vzL=60NH~{L+iS4%3?L`6qFB9wm$>@ari(=CB*laz*?T!pEUoIm#uVSF5{X~ z(G#o>a9AwAD*3p<=Bo!vRp%MJ^I(r?wjcN5K0hXp8VX`t zaJ~8b<>Si=4KQ?GQH%GIz?L5Gv~HE&S`2H>Dkev4E|y;$oUhzHK6(5SFk&OsPPuJu zwoT%wo0M*$m@rAiobVHdwy~0D>71RygT#h@&+^s9Y!)?IvSjJ#4nM~$Eau0a^Bndbsud>># z%tMdnYRvRPBuV!bKMgpBJpVR%zqNi3%I@XWuE7Z4`firOTE~-l^Gmsb!O?i_8zd;bkz;w($~SdfTo|lfunr}z9Ko2 z`2&HVu~fR_K`VyU%M<(PTaz@0T{e$+1nDL}JF8iiCI|r5Gx*zd@|hIf1nw1mdil|( z_0HB9;j8uYc=R4lzOS!IHl?k@59rGmMQbi0lb@`dUMl{Zc(k3#cHG~ zdyetXsf91=_xlW-`>YovDAwiA@vHpeak4lW-CuO#+{5* zlOgs_A>`)a*1YV&X;znI53Q=EM4aUKI!>jgY9G|{{a>sQxbSWZ-%w`~J2RXX&1!k( zP79SiIIECWV7W1`c%!4Hcf#j#Uh zKBd^uL622Yhu5`({6_ll-(iOGZ=?oj_cD6IIY(e^gog;c}H7qITwQ?;3 zq_SDvr*rw$cC%PyYYSrX{TwT(sK;h8<5O7Jj)#KV&F;!=1<%Z z69tQC5k{uWMQ(*+1QFYZ4^Ky*CnL|kUQQAq4`E=BKyb&5dvf0RwAYAbiIN3J5mwGjiT_^y>aE=cXrQxbhG;f9n zG=zeyB2~Emg6Om;WyUrdlW+gI7?}TcGLqXT7Qte}T2=)KO(p|S)YGy^6-^+3NF0+F zJCq~_)N@WFvN2%ucyyNhy)eZu8x*^%usd!Yl16X&%-qyb%80<>Y^%C$sY)v+1hqMa zK$mlE#HnR#Hw^TQ8KJ`2LVPEskN4l~7lg_%Vcw01T|J+Fmmhc%{1BFmMkC%v)OENoPoBM+8ChnmvyCtJqsA!H`Kx!bvz$&9i7kwH%7YyF9o(_yrnO_pJ*orEI4}+3{-7prTy2o>-LY#PG&m77FAL%E!ber279`wOA zX_9l0KMiEY~b^F3iHPW?t9POsA!lfndckk0IjW}w-y_Yo09 zp1F}ONh5Y%x)7rKl|rzf1~s|QKl~9W4=R|vNH*n{Rh0eiTeC<;YE{IfxSR8qEC+t* z)$Z(w=Q66;t@h1qgETCA<@?9B_oo(I?z`|Z1vM)7nm984=1QW17R~mYV|(6?*UeWa z>5Uf7N|E=ie1`d{41R8t|Cq0wZzgL2;Y&&$+!ByJLJuE5SGfh$);j=!MG=pq zH~?e6Qv99C5It_J-EOC+kH6Ey?amymv(7wN z5b|4_xeqreR`Ux1-Ky&@*e|u2#&L2F9vK|bw-Vf0WSlh*cy~79-H(&CA(sPB+K`$G za%85XEQWATef_#uIr6q@Gi8Z4OH3?pt2XKy&5?CIvz_$_ za?K{$R2!~YSB+4N|1R4(I<58{O#auWr{Lw z76t{sM)P==fC;{S0PM<8STXxjux)3-R!AOm;3JwZC!b*ed7&;hGqiBNWyjSnw#Mol z0HSn;yE&0y80c>iF!GL-39*eI2HM9YdMEdUqt9mU9NvITT1jHmUbZKsB zqFA`kT(ZAFyBZ1K!#OEHLjb#&8tLRp}b zw#kp)B^ktLLvoPWf`@uNzSdt6BeP^AiV{pFujl`MZW`wG=$#>Yo0w|`H@wq1j;^r8dIJnpQq$aD zG2qTEuQ#)EwBvUqxQgISDeW!lx&~P_H9f!5klH7=<*H?&cVK4t#IMVv1(2|2QbXPI zegmk9_zpDYQhgA5w1znM(30H=Nc5$bx6%lA^Ys2O3QjB5&SK`sh{@kv9-tM1VX+Kj zq{I240c2(SuSoRAKUx$;t$V{F7o68>`Wvgm3JI%hRI=Y!RvwzItfbBIWl6sv%Lc3T$D-+|p4oP)bN|E0OO-}i04M>_Fwu~6Ii!!={z*i@>KGL( zF_M!6W`z(|{#`Y>bLpPEowhcoGgd+`ehK87AL=3=juZsy40o>nfP9+o%kOFKc~Wya z>c8fxm0s?cxqj_=?YZ;$RDJ!-;dHl}bJpJ%DLNYn`+d%7fe%0xS-7~O(!fYRA}4v$ zDJsKYitI-gg%gHdmxxQW0xMyz8L5tCb`7PgC2EL9@q$dT*=V)X)~7~+0@(j~C5HeO zlO{!10kxq;er1PHPTZRlr6H|_kMnRPd;3ed*qv0t4+gxXV_&pNbKq&9H;rL4W@*KJAEk|vuMw=@!=)5Xzaa_h!JBTaMcdw+EP{ZJKWJdmAo9`SO=&~m z#mP;coW-)^(o|uxhhMTAnbh>Da|Ic((S+(i8HZi`53qFkG?Q3-wsa?h{$UMqz7dmB z!b(VSezyU8f{(X6HmZKD*K#wj!d-m2jn{G-H#cA;N5?}KKj7Yod6G7U34^&LY)kS$ z6r*#7`C3|sLbp3s}w3y7B_&Ib|cfR;QV#nB5 z8c?d3q}w5aNZY5fq@6oKJ>Xbz=_u<+b}Qynx(d7%was+f3B5I7IIVp2@*CQ>Y1x08 zx>sFOXYjmMQ21e$8}TqYA?gFvK|f2}8W8Yo?y~dxVu*??rv$C;c> zh?^=Ih~3C0Qn^iKwMxgiq7GrL9e|Myl>LhgUCCB}ttMJhBBzia{L;f%m< z7Q!iya*flLDkfI(+Nl42!IxHcXl-(xG8HNv={i%G!@rwlG~~z-rePU%5Gh~weo69Y zdEj$!)ritfEhrwNv$zCaMOQ>e#ak^5!9CWZh{1{z{~Os%^S4S&76QVu znL!+QtzFulS;@1Gji}z3Rz|!v+OCAD7uAg7h@>O!+5?Y03%k^r4W}n?!^I$^jnC)P z{vWh}UiB=4#=UuOdS0JS&u4w$A4ZHa?*_QM9qUX=mBFjbf_QROt+*F+MIjVSZh%Lethz=;rHrwcI2{1|UI-c!o^3LIq{zlJI5N(MZbej~l%)NM!~y1o zW2vpLo0c@=fTzM4owTh&q%l_-qpqz+tWsuJi&>l?Y1-78rk&)9C0mXP+1e<=WHck{ zsA1TbA6!~TnmLqxDuEJQ0(KyQz(FjB`w-s;jHxo#LW+ywU8X!-}I%&FBaYA&6aJ$y=DS9Vz*o??7BY&(6IJ5v`yrWYO6 z-JA!VVE-Zw5^{*O`6J>i|EbTM+4RgOX_ejaxF&Xy@b&&E-2seYCQ~7vP1_w<>A@!b zMBNKvFi_YF!iZXPw|fMqoUZ4t<-XFtNA#x)|Io1J?gh*@n8?tSiU${&nYOL#yW8B= zEg&2V$|Ha=bf5R(TjCDL8dncOdOMux&hwc1rczVBxp}CzEvBLfQ^T-*_o&!>)MRXO zJ`(z9i=N#+?f?cjMVeg(lE^)E2u^eJ(A|8uy!`h^Cr*_8TOpU|_+gg&6UAjKEjJ>Y zZ3UcUM=IoeBMnIzgIpFW^1|wBeBZzs5_PG|W>LoYzUVQWmp=n?Es}$npd+?p)tCO0mUGIL`3(k^kIWb5>4em+}Lq9Hk#lu4*2TNsTj zrM%EMUBQ$TOlQa2kKAPw_CzkUWtQHBE{;6?24&kLUjD)V{k<8GuXVxHX}SfQhll-O z0fmeuV~eWZ)-yg1RwiZreY$LGdVRzo^1cLzyoFy>IlwSj%38e6ADbUq!*!3w6RwTjS;YP@S`n>R>d8i~paCRSh&ZmAYoz3mt zy1rn>O|5#@mRcx@Y|T$@jT6b`i;xi>h0<1;*1cCdUSv<5s!|wTLuV*;ApguNX^%GR z93a_ft5PH>7%h$AWDVs{WfQsj=WW~6vy1a`zRV(=k8a`Zi<>ks1@SP+NpYSr+AQ@X zYH$M#ok&09w_(3!FTOo>_YKP4%EIfN$`ZZ{jN{%-5Ur5=gRQi{U(R0Krp%k^b)S=K z>w|HTK-r_|U%j$a;QCoqdS75(T1<-&iPaVk1QI5KBO z0gqP#Lonc@Qg`DSU}}+K6vbcKGd8>n_gUuOI0ozeR8#s3Uow$7>oY@DBE$57>l3!t zeF7B;=9!&U?kVde()$0#W0_Z^G$jkjT0p2&tC0|m9fj2?&dQ1@Fo!%xGSKz(^d@1F z(6RkE{I{lt)0@3uAB`0V^4kfdG<~Jb22QmM{3SH%iL)Nxlhc71!WlXbAz5p25+?Ql6gB4%MS;j3102lF`(N zCpi^OJPyEs`mxcF_d%pRvvsSQC9Fgk|5vu=|I^m}H%u@W8$ZLvA?pO=0tB=s28ZAD z0_mAOf@|lnDfPkIXFThpERWc2)ka%0?_|wEtnW%KCe*5VLNb+3ti{anu_s0}&Mw%Lm( zcq&dX;w+n9%PAiB9nPkU6oAi{c#gO&tlS8s!fT1YZIt(G=vq}z7ID7AC@t%+I1Ul+ zRkiW~?Dppo^j?8cp>&CWCj(SfI9=6Tnml`L6mt}q7=C>FLAPs7s`nT;8o>vY* zL9@U&wBl>c3Xm#}qVf*mlq|@sRR1Svpw$GJXlI{poEhNfW+qx&VF8zYRzNo66u%@Z zxMVCEA2YtBXR5eUEj7=hZ>V?_b)oaq4E*JH%+t2OuaJ%4OrY`gtM{e2#%&jeXerXG zIPu_@w(q$C%!G}wDxj3NUk#c~Id$Huk1PhWKh+|O=MEavsu|P_Qe`-BnHl@EKqX(_ zOG4KOCw9W<^cNF5)kX$^Mb2?{T=T*ge?2-PWI6Z^F4;NE&39ojjD-Zwprty2ZH2b| z(6cx!MG`humj@0a$kXF3vi$}JfKvk`z$kQ}=Xd7@{aRXc!|0^JM0LuegQpozR& zm%dI68_dz6`Me4T;YM-p%lGcfk_At3e(bzXJ13uAreyuEs+QpNAll)w0wAnYzU*a@ z93zSOr|W3pqThLQ#=2OGL?O+s2INQp{t$~1$rCM`P75hX&3p0bb@h}<0eTlwGEO?K zf6kKX1#Q$H4mQw7+MOxWKpujhjlmfzcu-tk=E{;cnuq|L5&lIgjchF`BB ztSBiuy3S3#An}pgup^W{4~}6h2|LpOK_UEXXsNa|6hvHpUmHod8oT6ONdmYV%Tzm4 zx}Oj_7WM$=tjblngG6qSF7v2UYG?CK!OYsv`>Qj_n38HwcRS3whC`OYV_qrk1fyw| z>D&MSb9RL6w1=0#X$Of<+@`nQ05nI`V-qmvd(1c?YW*J0FU3Jl+QL@IonW>_prPE( zf*K7J(<|pJuEP8_H*q!vJ3{-dPl38qD@WNW3lS}~CgM-08G!R6fK_l|>lir;VTd=h z;mDV1&==rQWIacjX&-1KL$nY^_lz)$YHR_aZJx=GeHB&?1Z$Xq{;IX2Ghf9I6o?o@ z6s-tgZ>K-Q{TA-~y~q!z`a?a%Ki6by?z~lRT61xO5+X&jc7MW|g|zE8A98Ot;#maZ z*1M3+EQJxk6T4i0B0pTtXwy7h-R%3OU1TQlI<<{{E@Ya5@eeRyEP~<=Q-XfWySG0c z&2=X(U5h-OFV?XwS5Yn7-dY^e7n`ca<=hLtILH@KK5eIe~$wftE_ub{8;l!s+Wnnru5{+h?-D%!hr3~bN+Yw-6^i943 zRsuT+RD}^iYK#;sh?@#Om~}zpN0hoaY9JYn6MFmahz$-bSzF`2zacL1p@Xp0siCw^ z5U-DJk;W-kT>fw_PYX_EiQ&qJRkAV!N^Th!R!x6>LAlK=2?$Ub*_Xf1Piu&+EY7St zqPHmV?SIqJ0$1Lc%_U_Yy^k?P7LjH^;1@&G<&lrUw)z1S;)Z32YKQ6h0N#^?=>`zVV$}Dr$XSZD3Sp<{hNHly#D; zhyD%c35&XBS{L&|k__0#xp^w0N-i*+G{XH1ymQ|82Y=EHlq=VHE~y3IuA+HsRTNO* zu{y%eAwza2hjX2{4srZeYIfPJXo6GS$&gJ7h?7czjrQZiXK*pZ75PbkppEdRkR$y)Pai45f&8H2LA|G z32FkYhaAF{zWGRg8GLm>eOerN)ItQLZ$t?T&Bfb^sZ z8XAK`GH!ay&~}XGTyTjFpH~`-$Ap)Y9Zrds_SlB;@R43EZz#sT^KLm99p;HbI4JTF zymN#B*#&byJkbfz68wZ`9DQ~5SQ=Kep;pqPk$H|?Tgg!m{K0d@F+rQ`pSUJV?1=@r z{2c7^wqdICr>ArvH?)&BUdTL;wX1?H^wRIh)PqCYo=8Ii?{^dX3dj*jw2#m0f|30z z4fkb;HZ_ko;6(?xYEecN`YP%UH`Dvn_bAw=B4M{=ub>^ri3nK?&O) zJ~i(|ffnsGEcFa0sWC%HRY{vTi`pu^TQ4{DrE+tR(3SKPK^uQjL2JtOPVU1Vc)O2P zGC0OSo(K(x50|Os{z4ueMYbOJbu==B)kpC_0^akA@WJO%Ke|UuPqh;k^O{mZ)F9GP z2)k)*7PZ!n9T#)U7{*eAuFS8fQ}$}iB|SgQB9uv%P(+89Y&Kg~M4j8f(DCWou!>FT zq`=3RlM9)CqYxfJ|* ztq(NdEhYE4x$emK-9hQyXIeh3-N_*gt@HeY_oK6v3TU70;KpIPR-pnhx!$&n6Ekr!SBY_sKR@rM!e+?VBNIzRy;FKlV! zxT?3|dSva9%I9U|Z1YuEFA&>dqL1(1%jT#zZht6|!7<{+JSx3u>ygEu)a+%;@WG6$ zW=~2PZ2CyA3fbJNwjUYHvQMg<{hd&8swcxHqlT(h7FCH9gPUH>^Y zLk9FN^;5dsW=t#11$0>EGCK#y$Q||&5$!#2AiRpIgMOwtVL_KBl!wjTO^m$>hwo~o zHCQ&NC$gt@pm(8)vh5>=x=6#-s&2Rjf&PqWZD~3TF(YQ!dkP zp+ICTHA|({u5t3CKB*>sS()#%+5k{MufJWN3azRC--RKMcwcVz&*zeW>C#a;jB-7>Z86O_K@j4RO%sroP|{X#2O_Ih)8r+s2e4TV*BL!OjcvM^k3RKNgjz};+n zdyi6HCJ@a!FgzptL+E=P_tPnFx?RT(CH&782hRJn8vGwfo2m7ATxpNv?jwe<9?x&8w_G-Swf*$ z1-H3;S^$WJ=32Ki5-)%D1;~@$*q2M)gM$%{Y%czbH~H%d>KP_h>PB|bJD_EjWhqoM zX2IIG)~MGj7kGvAj#&9s8+i?fDnGkulAdj+bQdt&Iy3sxR!{G=s6(YodK$Fwzzb(w zYd#cxa81k8hm*t7H}B&{RxMo7h8`mTl46}%H=I|T!d>)(nf)Z+S62%wrhlcrhPwQk z>lZjy?aP)6{{|$pt}SNh5MS!-!ox3$E$#lE5fNW-3%Yk?40B|2V8Nqv6Iz;$<>f#p~ZFS&qE5& z*lhVMHml3wawsWvBoPvEyhTI1)uxx?F4nCKClu0@Krl!uln@VLJuXKIlucc3m!oA; z5fMN@pbSw+2pH>Co(eeRX?^C#>&xSJuNUj*6z^-iO5Sc(g~oTOHH=CP2s|kRT03td zq`Y|L&GQ1}9sEus5YU|-!I&P6j~0kHf@^L_WrkMoKJoS6urA3?IB%_;yh}nPdkT+%mvLsT?^aI~_`@2$N-?El(p}&rfkGwYaKO1oz z=hTx~%LB(U6tCjE{-ktMcYCsYoABt93gkCsjyz1O{#(3P%qSS<+wI^%t&0&fKX|v0 z{6}!ibnAJ?<*W}(yo4`0acK<%1%Gf>$?}`7XW!%)FcR>7{Vk0X`>_PnY z;I-+hon?ckdmu0x2RWY$NfTxL?2zNl`w!NCOL*VyAgmw~wE|e>&MEjjbj@(t1+*Ob zWKjs@Rh~96pAE-QHJodoGb3$zZu@UCQAL)}nlmzjzHneTv3fBCLlw3Vh_$HPvMm;? z{7OM;>l&P^IU4lgc3ouK^XWepcES-L0z z--ky%!YF^D0*fyspj?N10gdApr{TYZ*II1SGrPZY(ef0AEA{2>UCIAm!29m9NpNfU z5ssJ^wnvXs3t?|ZX~bHdho&O$UZfHP&_UfJSxl{R`ikqYV1g&DchWlv|2wOsJdfOaS;_G~Hx*Y7QLXgQF ziQi`v=w^A3u=O=}>tcNWQEJ3~`&^O#ay*3g?fF7C&~w=o%v9a@eVco;=>nZS+FN~( z3;=reyMnqz4#V`!-eON^uwpq1kx%->)~BfL;oVT?^llSYZORE^9Hw2c+aqwN1j8_?W*2sZ|XC{QUaGrZRJQNE~+E<}#U@+U$$;jeT> z(rY8PqJL3cea4D4Eg_Iks|D3QSRkiowoT^rI!A`nkS)UtU^p>xxv+Z%wgauhD0>1@ zpPWMw>6-xpv%N|cS`)jdiUJgfp%NSa1eE)~xUA`Q<_u*eZDCDWO=50Aa#qG28Dh3! zyQ2K8*<;K>lBA;;Pi%NfP8ev#+f`;Gw(ageXYFu6wLM62EwP}U**99cHb)X@{%dtu z&G1rPt?saXRAEB$jxt19AzZMbY!MA?t!1=UG3L!qtxtWg*$Xkn3CE^O6rW1gBF0v; z-w!#gUZSNAWn{?Ij2x^g70*u=zDMu9cR3MsCXtC`B~ghr?UcqfTEbMyuAqGC1yE_l ziFD-6QWM{)DRd9rBMy)8nrG1&XUK0~LK?QReM~Glr6)tp)i5mjMIl@!!!cg<6; zU0kMPa6zKGW8YrA*>PWTb!k*LQO-v8en)AM}7CcW_ieEMrk#WZKz#_7l z_b4qTSj;&NgV7&>(SUx$Vi^fHhN1{Gkp^vg0>LTk@P#lO=8hThN$Uf(!ee%miztdb z(y>CH+E(UOAjW*l_CoQ&ac1t44AYj%Pj=`K1Zz0?if$UW_fkv1v!!$WN6_ZtX|=OO4dO~pymDNB+Y*U=bL z49patRkzSckrP!n6)v}G9vOL9dN!6|pamx#+J}qd2nio&AIBqDQt^<10eK~BqpYY&+daHVyB^95whB|R)y<}fKdqAc+`-QM5A0<~D7+E*Mc4t}F#n|= z$V>|5ChJ*bp*Z27YX_?|3t=S zRC9yV5RaVGB-%;F=;Vj|n5oMt18X|&QV|5FwZNK)E@Hn;MA6(eu;vvN>Z{VC5uptZ z0w|ZnJCfz}K#iGD^7}r&!oS<}uXA=bUY$$ynqYZDA&7BXE>UMVxLWHO(}KzQ0>!_B zTZkStyl^msC&Ll!yTr*Nn_7P)xLnb2VKrHQrDn&KFOx{mMMy1JTv_m-9OWde=%pv} zrC|>hBM85VJ&`RpmFHVhHmfZ7!)j|WH6O3Qg9OvoIByE*|8(IcMT2|Ivjz3MLA zPjB}Ix;<%NxSn`Om^YenkGzEcH?KdA@#9YONtr@4d&wjPOQZ-bO^2TFChlJcU-ix~ z2ZwOQ zaQygqSa-~uJP_!Nrm*5#LQ>qZK*Op<f|71SRSyCcJ|!9eEc&Mt80D}yyrsI%a)w)P9GMINLww?VZTRW7H35Z!;3qAC?CrKPfgXFLax> zMjmxvW&`Tgt-qSR&6xZnovm_%o8Z&l1N!sFZf@k`^stK<*{ZOxPB{EYmkj{nR7cXn_Tp&cld1iN6w@+IRx{kcPH7_PE7B0Ve{x7$D zxcKlZdogj@6Dr_vn2Q=eG;tXwU#>xfFJb^(T{~O5;a?9|yrY7-Q>289wY0IhLW6<3 zwOK>hskzZEcTBb6N*3q89^>R#MrpZt#aYG~TIx8)*=iZ}di8PXX?YoGweotE^lo9H zkPZ?Jmqxlg_9TS0<7kjYXBZe5p(5L)M;BO>pjpu+0d4>zp7j^WKrkJjP}zBq=Rfik z@Fdoe%mU}Tkz8gFpc@>GdfPyG&um@u<@`S4AU9UrE&vh`-VSK|5y*e{fzAAHF{crw z=KmTPnvV?Qdu736BRbptOyKvoa0^WbA_F01!#{Noz<6fQ@L9QR@g(j&(sJb@?q+!B zl8~#6sl5c#Z8;sfm{4w*_B_Lo5kpgedwY&2l)3X*e#BjrDYoneaxE`M09e0^LRmANdNxLyS%Rp@8e!M0Qctm+S|(> zat^962uO^)cz4j1-oV)&3)vUYKp#c%#sL)B2UGZYEQX z+1-EG&xMol4 zLR3zkeypx^a!FnAb|D`MZ0Heu^FFc*sA@4Y#`9QBmyiNi`Kh_UUa-+L^lu5y4q1A@WHDl4lN$3Hi+5w1xI{Dx!P-wd zpN~>D#&TzlC<vo%_4Izg z>rM|D%r4F(A2%U-a^R>D)pk+nci>CWe(b=6{?_e!Ku04WeZA1pegCG5CIL%%tXQtt zbz3YxQm& zj8!K~XVIoi5Nb=I%UI%5q?=xlw%H*nB#2dNAt+qp~B64pq&Wx{##j?S_(b{e>k+1*NG zumB;l4n|Eb#2~FuT8DOFI}H(9)9qjImja#S6&3atC!hGr!C`XqG!`e67*+B+W2iJr zC=SS4CF3NI^jYOC2%ouP_>oZXj0yjV(oQbuq~kZ}Q8I=|5Npj+s%_P#ug_};mF;~l z#%D@|M3*f7c7>Q6y-Y~O-oU0F1T{+hU=mQ3bL>l){4+eJV#GzbLFpTJ9UV;QU2LZ0 zFnHD7tLMg8VT_pkAGRmRLO5HTh&@%(SQzCO@r&rimP_K^GaD0gXD?-M97j@UJ)gg{ zlkMQ478xV)I^7QqG<0Puwh{>HQu7)pRUfqwT4~vfrI+lWhn47N6I|stSa)N9^qd>sInZuj;LZbPZa4IP7TykztnFa7u z57B_q`~nN7VB)MZU#luU`prB!a;3YqB6wpWqd5b+5{wX@nQmfT`+%USV~#xo}1 znoHVZvP}j?-`Pe!(@x>)ZR1gOJow1=S_S5y^sCRjDy{t8YuZ0CXMzV?e_LdeW&APANH$z(+C$NfDRLFh z(lMaDL71zxdhw5_LXxP%a{v)N8p}_oi*$@Aky|KFj=rNr_72(bI-9qdsEwo4+C0!! z2XDQTsIuk3ebv0kbUsY5ZBpWLGTSExd!WcZG(P*?5XPDc{_&8w*`;7?sB`HzMEt2q zdDSN(g0^n{TizIC5>oTH5nYTml%YfN*p`GW>1i&9jFSF+FG43il4at z0OcypAy4#m$IW!rTaMAcI)jy2t#qX^t5ic-Ip`RCd6&d}_KS#pueH(Zt6akXsxxb*_|k*X`WKCWrcCqC9pgE}lj;Bts!Z|F@W@KcraD1P(?= zTD$35)Q~qXteSSA-5pkE?!t$n-Lp!qdE!1^5xV=N!a$c{^zm$>8>y^2Xn*)YI<#-~ z>JIUsX+lj7xvoBYt6w9nT5 z9cRv%kpb*eJ)q55%E|pXbnTf&&ZWh~D39Gs*i^XnD!OUHGz1~>R&mZ6G#5`<&p;MA z`fz)Vz3z@e7cH8_eY)z@clI-#^lob|@1)W=RUej8Dr0PzU2IKV5g9n=v_oPplN#VQ zTN8^130Z+RRkM++RY7E zj3auCoracYR&JGq{Vn_ZO@T>rDRnI(-Wl6D$ybWFSJW;Q3SZ%imydcuA&FZN5VZWR zVvLT!D)k6Yo_+2gZ)F(|_!2I@{=Ko01vA^xwpVYs;IYFkh_stiZD?305OE@85g^|5 zK`ITbd=bA9dWjf!p~wUK%6~D3COXY}#=v!ayT?tu$pFNmEZureE&^ELDA(YcM-*k> zAmp32Q8GKGq$M>5a5aPJ7JbiI z1XSlfCkIs7JJ#2 zy(&D$054v2UZ@}@^2k2|C~2sEQ!eV28`3w`JF}KmOoLk7 z1Cq417znIHKW9h=V8g6etU(lmDONoRQSy00itSRQ%|kSYDfJ7uj7RK&M2qW)F?H|9z$lCXHsQTR{K@)L?~oox8rzwhu%>z z=s)@A-7xK~$GEBKm@&RUAe#}V;&>`SymA^wNFU=wlL|YmP_p+cw|O#6?tS72Bh%^} zc@6!Irw&yUYiV_!WebmpEe*bvTzwhJZT1r{sNGzBA^a~*rB8Y&h6futsTrIiW5AYK zMd;VNB^AqAEy;O_8tV=J6@qX*nolIdtEf3*+^MTeGI}gfr5cyh3A07<8K?$RSK3xA zr-5fbzVYK=)?1KDH*Pz>Y*dulpj0*qMzWF?9d#FK&_2;kokiqKXbT#R1lDTeV{!2E z(%zyT)y)?@;bvFO<)jwxjw7H8?6Zwb&47CFdgWJPC}{o0jZx1@yrTR?I_s`L zBY;|BZx?%Hf7N#O<^!w^iLQ8fiRkU&zd6vuklToMOL%CI2-Xkf$h;bv;kS@^lO9(JpeBb2SqKbiTB&0Q*2a_tJ zPEfa@3gHJ>x<^lrA~C$6!0m~^VB-=-czxoy=B7979s_~PF~o0UV=*MUaKiPkB|QI3 z6JD>@pJf<=X@-~A(7iV)uNx9Exm!=I;B_E_1~6d>*#`>;ZpZ~2#k*k_G(_Fg3$+07 zYXeO}Q}~q!b;2y2#krYi#JF2CWreRJ7t_8yBS)kZ%ruq|OtO!d#^&nnibnSnu(+4a zw~wH!Fds8dR)i8ndmRk=`JfK#g+WqtB=hl=>hL+nHIUvg_`4)(#PqsOn^vkSb;UpF?c12$th@3@IPy3OK58%a z5}SpC z*q3GS!T(y7cfXy6Ljv1YO1nza&e=Gu6aF6nH$ce0)(p!}!DexE{{=n>BiCiX``Gih zk^=Vzbq#zr#zH`iaTwXv2A4xHLcO@HHcS_UYYh&wA7UbnEAUJNBYx7Y06l)+Ng4hFrMU8b^G!obE1ox*d7Ig5=E z7gvl{TssR!LrLfa%;#QC9UEa`h-gL*Gi@Xf$;BRKqRXgoq!K zi1AaK;ul$tEv~?*7xR_e@fNyh(DOU#3lDKPFrIiB`xbhJV~*8mIE>!z)&#>Cq%*?& zG=@DCz;uoS?(d1lkt?U#PTRvHnDWuUwfTm^s4p-Ynr5t6iBm2f#2nnvSKeeW@AyVV zTz}F%aQBSkAO2Yz(?6iO(0PtMoE^m-2L7)}r|02V^_7ez@503M-Ac>2C=v*{aI)Eb z$Cuee{s2=u#Cn%zD+Fl+B4e9>@zH_a_J`SO1e~RGAyO#ZnTgi=i)+F^xlX|3ZCl2~ z3%<4{rf-XHnxlBV6-(3W{bH$02>I9_?GZx3c+|5Ap@Ohokr`1xJ7vhAA(y7xd)O*+ zw%xW;1&21TeJ~69{~x7FICA+MLEn@rMSgUNO7JJNek7o%ey>D4V)a<^-z;gJ5E(*p z{)4Se=wG@nB5~CC4>NTg8lKsg=m~$1QrG(xvB&1~h@E)jgDnIpkfh?3;Hk5PBVQJc ztkcQWI{XJ3)OBQuQr_iHMM4y+89M%=tS9geJgD^R;tpxgVY2H;I99d%Cz$%l$w@&$#IVeP!J;8hZ+DX8)OdqbJ1d#Ne#-3C37 zO&hdLo3@EpNQdf)rzz4zV6d;0dPb%%dncOyWB z`a)EO&$3)@oO*O?E;K4a^a4CY%`Ge^srlqeawD;ooTa9p7#A?PD@?I`iH(eMmk#K? z!r=Y^b(JmeQX*vVV6Py2x_?k$x$-!bWlMCrz?>6COsLHBp#sn4^!ftL^*U*Ln zdUw|`fC_T-9upj=ez_7%6zMdZ!FTzxdAvy;ZR*d-3w>qUjec7{g8`2ct6ZGmB4;o%v2| z0w3NB?Lg}Jp$7Eb)<*RG0Z)$_7p5zP99?8-4rj#A2j?(GoS(+&p7x^U(36l6FAcQF zfSVVr=#9`3Ss7X+t7QRS{r>4tzkHN*rTlT__j-ER0lmWlfh-sdw$<`EnN}{w> z72rlot33T1hQ6RCrHKNA@A`rvAb&V#pdf)Sx9B=m3B1l^cJXEY+~C4Q7wNZK1@a<- zMMYv`INn#L9q7eHGx}Let5>0x_z!9_v}2l6#>|C7yF%5Gd@mqI>1X%{XDHDTspuShdF zV%M8pb`wv)M9#H#+Q9BN1CBnh^i`5g#e?jTqGYQkfmWRjvWQ<8^J*(fiUGz+k9p(| z=>=O$8lM&U@Rt{LGiu5*OLHvb0$@Rw=1M@A0`)BnsWcxuE%VyyuqkL;4D3L1VnxI# zR(XNGi2Gzx!lT&W^AU$Uxb3$Y8E7pZj0B*8%#V0gz5F~=+=I?-Wz>#Y$iWCOb_cpM zVvzxfQ*CH)q)`UEHR3oWp8WMX?67b8+O?%OEex^U*TPQpH;Gqq4`{dYf4ReB)G?ViS=8|8>f&fG183C}6t!aFrc* zz3srh1qp-kH+_x`VDHQ|dT+lVL@CLc@aZ&DB;CypLzgSXV}Da*^UML^T10+);WdJ- znte_%{?O+dgzJ_v3@3zeURpRsml>tUvP>8FJP4vx)orz*pLq3P{bP;zXv2R4uqT+N zGx=PRuL!tiPYNilM1XVue`_1TD?eJOe_#cRc`fdwyeP~ zWz|_;U7krO4}cqxDhgWKbhZG1s6x+gnjlc{4gJX##qy-TdtAg38TzGPshj5lUIpxa zhf4vo1bP*)4?C3KiY$4uqxp#%2DQc(6&j*sj20HU-k~&Ykv-q(uqfbx4y9B1qYigf zy%J}Gq=f-DK&VoO;6|x~AYCYQKou5T4OmBTGhqDnv;HNGoM1~(MXpv(pn{;05!lhE zXANNA-LueRe0J7XFNXh{m%Xz0eXh=_9XK`_JO@IT>aegMu5*B(ar3v#i)zs?S=wic zG*{*|gT5MuK%`9>MC$N81?9i_N<9{FNwwc(j?x{bnisb`fiL&=8Gnx^-9iNb_I~XQ z7NPkwMBIPZ+_|7e`R0D@WQQs3(?X#U;S2a)x-%Y_4P16Kq2w78mW!CZz1mdIRA?^C zA5&fyDK{+A_zs^NUD~8CRahYNLnB7|_l!{H=&Z3>L+E9mV{24B3{xtzRGwh~?dwJ# zr2Xs0R*Y0drpL0NCKEFM(-l^7b>AEF;uRhdH@4_XsSKF%@;H`~ygKf|&JBX*>K@C{ zY^hQKJBz%yKi1N%#)~M4dw(f)#xKoBI|j!tTB}=3${#Ud5#m(?6HSJVg#(GPev;}++wO| z=nwmBH&nmgzLptNoaUhrwa%klQDS!B2m@D+BE!Mzd1Al~s%OF?a{YrcV6xAJHv;VF zPQP1fdgKaKmzTs>zTNGNK`*SPCu;uh&~bwQn^RN#dAh)6YB_-%U0`y2E$3HAmeTxn zUSK4}JjgNe$+GHSZD6d z3q-%~ovEN|C3ulZ7n!R#!PgRln6z~lA~^YOv~>Y*08WkKEv|uT67!p3nPazxFpuz7 z#4Zp1HiA`OUyF>xAtYR-bvdvLN{{_f`!?U0l5vA zS4E+1iF}^NYb^BcM4v<;n-vLMnCA9=yFzEuAj$ua`C&|bV0&b{l8J}GP1yVMKETjh^BtLRve%0d_pHYciF?h{k*q1Fnn~s2 zaUkTXIk*8vwlzDoQp5if*#I=f$9TS&7E0zUyp3^nyN!%O!l-0xQ@yX7t(0NKv2S+~ zDV-uX{MZI>Bn*(Bhc>%pmK?7Z`+wn!B^Qu!YMw2ZHH5sv7q2q8TEzy(7nN5_3PS(N z+4+BVwY1-ZC6o7hdmj28_RU^QA+Pol#l;VMx@Xl`u*Mf^b({A2LMhKe1~?3*>m&z; zdTli_-p9*K7QZq;7kdXK(eJCKJkI_T5+0&4fw`I29K;2*P-m)Uw`+W{T*+04$nA7` zFs*KP^g^O_{d+b=9_aNOVO3M6UC+4(ncVh~=*NtU`hYlOOsdRNyY7GZ5;LlaK z%yuO_6iKr@C*)^kvC*v_{~sVn;=>p+&QtAn&F+ImW`&Qa9hMae5A~jffN;`0tBrux zyDTdj-yNO(=wo&B-Qf2WA@%pWeZVad5$KP*EGML1f7gWx?tUls{eO0K&PXDz2>U-5 zq>t+{t&}w!jf^U%P)F+!o?b~$Wp+1O&@F4wu5mc@11pxCerCaf+MU>_AquY2?}bLt ziRRZN(0QA>+Mu^B@xF)AkR$Y0TVt&%;1659YT)~=oml6w4NEb9Y8}^pwG%-1 z*0zu-+GvP^0#16qqerFIF05`p;VqNS;#GOe)MYt(^i#@Ly%GNCRmKqfdXs#7x*jSJqq-~;P| za(A(*MWVGBnmH&IjvsFs09z!rjGy(?vK6!&@2!n+Gae__{aUP>fZT~qx@#DHyrw}pTTXmt7)nHbvCYzJFqox~_(A%Sdhe4Z;h6(YA##tP43=!nk zw$7tZqh6cll(j)hlKySkPwXhx1+T8S3Fuo9I|12Q=}8i&0yi~6+{|aHA(P`v>X#Kq zEBRO2p44WJkfrdsO6G(`#1~^FKFxBpLR6x=7*Dkm$A2Q_BOpIo@skQ7a1 zA+g~x5L4c9W39(;y0MsY*NsJ+XWg*liSD@!s&|W9m13T_Tl}fp(~q4IzRcMa2L}q` zqxgQ`bzy@wHzj3CmHfkIO5wOlrqsCF*QbF$G$j5W2Jc_RptZFzDWBv0b*we?`8t+Y z+zUm}57xc^n{4O3)hUa{#Hw1pL#+kWvm+1w?wMZ00`w~z%ODXNZHvXLWD+l6MJIj< zZ+ac4Le`uAh9LT$rKgbH0@SxRy=w=&48-?l?^BQm07=bmiZFo=07Dcsfh2wJ7Qh+yJgXgQ{ieV=Pk^N3bk?wy_gCd!k_yKf43{ zYJ=;9s^;|uANH_8(VW^9d=U7L0x?zmNkhH#9QyihXlA8K_T?orcpP-p#|N;MIX@VO z=HP>(Pm?~y186F#L*H4_0eCoRL4URc*Z$FRPYbSI==~+QxY!UjEyI^oVo&(LXB*q1 zOmuXTd=+)UqL1ywh9{-G;_mFZ|0nv)1Z^E)yf;VCwUG=f==yfju~1XW;*aPZV?(1O z+m-mpP)7KBY)JTfB%6+qZ@;QsfloF?Zj8i6;vzR*(Ekrs+348n0-kMnoO^hS@#ihZ z4ZAtTbred~qY@PgVoD7RO)XPX3i7ja5>rYiJKBkFzQ{Qt831fq5K+0K0eGC9R&8&b zMiBnauNV4#QGC&fxm&8d#<+O?`Cs?Zu1vo-7@cCmH+^_|(}WijWp3Low` zn3refnP>Li!1jkN4r=z#aa$`!_HTtX zz`Mah1Cs@)`@eZ^bP@zN``_*kH~ZTZoMkQUA!`lQ-$TA^?$+AfE zx{QY|Ws)^K9wOQwyGtec0EaG7LYRisAkV}0Rx0B=&MtJl79Mu~t3$vGV zInPDn?oK)R>^$(99E4(dh`}7&6(!@8(1p6FdBdf_C_3*%Yj8$ztc}W59ZzPx=4D?K znWhpN+!W#sJ}Mj{eQ$U&xumX+6mB@H$C-;J&5>wIkUZyFv+lU@9huM^oMQJ~ zr@9mlHAh75(hB-qqIy~9{B^(gcQmcovd zF30i>Y`1W`|NZWIdv*C?pIRkaPO&i@shdhoPK+}qw_*JmcsYohg`b-#q?Q^yP#>?R zG9FjP(itlue=%*8Wi1w$exQz==@ibiXBom7te~wEZ&m?U+(npTY37LqKVObLJ@Ten zFQ+<&Csz00HO${P9N{UATMRQwq{kv$YuNgX(%dZ8_eX)tyAa=6-Sl?Y(tS$})%M7O z;m872&gT=ko_ps4aXFn%DA3h0;EH&02-qRU%$p^)Vajkkt!!C-pTd7pN zEY{|p-UfEPNw5_E-(~6G?;PCIO#7QsXd&^KlR1y9XY3{3oLHR~=U@KZUR<4jJY4<) zpZ6a=onIbqKjRvu4LYz!{|yFC92JgI$(Jj2MC$mNMdsTO=&y+RuSv8o1nM6C3$%F} z0pdW0GkBbBQ$26gKoFHLmlUR;L6JZrS(yR{oh@iBox~|}M5Npi!3EK+*7g{dtaq*5 zy#!ZR@CT4A(Wj(Dsp#mSN8%6g52z_v+xKD4nZll(d9&|%X8iTew|gJ2<`}0lJ(GYj zqFFAaMkG>#%{1WVY%jvii_yqVrN~eOZ^;GtSQj~{W$76|=i-vvb^kH)7bVN+b$LPjcN zMzjX$=ZsJuoL0}HWw4=IFttRWA)2?2zS5HB?m-QsDRP3qL6o;E*2E8x=b_QbG<-1` zO^;uN9qAqIU2=2UUy(~N(qnKd)`8)6Y8@rB?z#%B$zPfR@ecmRwmZNBf`{j zrzvn{K)H z0#}kWO_LK^l;o0L7a!;@C$CSB4oSP|)|-wjtD16BG$r9(%P3*AV-@{COHwtN^rZ>5e5u4(<2(3-Aj)A1}x&bz9vx-IEiqk^za(^V_#X&gcMZ%xP091@M>2ZH;Rg2H)S!%$b-_B)E;SeL!2E)hq^>Sm!M0;@1;8wceNyoN% zg6h;V8kW%81zmUKKrHPu)-uT>b~yg?>{mGB^Xvz5SuEb)pq-0$wFYlo)-)&QoDvS& zYU&&^bN6tl1(!QY>p$NI)V(@Ce0g?obO^rq%(_du#E5Y!!Z=63HN}cf2yG--r|J3G ztGyTLSh@{^hrftfu458HRyY%YWs%E6z@iQ%Ekfy{6=^vbRji0-R8Hhh`X1rDX6=G< zE@P4dxHqiH$(xD`3@&K_3zW2%@93gaT>1z%Rd=nRleKHwgdRxQdFuE%F%Kill6s^@ht<%*RXJmfnX!crR?WQvlYlh%;uUtGB#LQ=?kOc zOThBwo1afl_dh=<7j?n8>k%10fS@>?!K^($r}c7TBQdto0ZkP0wBl8RrD#E|uO?8F zco+5d?81*!7zh-%au7h53z6?hS!3wYF5uB)^P zYoAD~sYlJOXg5lc0NJofQ@i1Ny1i+kV#fFt4MYyx#xb%hu6R@c3BWzOu)HPZ3s$W~ z$%u(K^gyz17sa5MCWgncnO|28dO} z*c-!3>(Cy)0EDor4Xn}2zAbw70hVAG47fr*pA3vO?~oqEu|kar8NDkNwart)d)_vl|a0Jj=KFqt|_q=1C*FORxYqXsd7?T zLdFU_wd%?mp(-ur@?d$jDJMYS>&TRwyhN~oMhgD=9%7Vl>UhK?Y0yWKJn*tj7%DkL zPEA~yXjSuHuzB*Lvh}qLlsC5z59F%JOqCRJH@6~+;SH`2dX0`%ayoFS)}!5F{L>sp=luVy;Irn4a|H+IWMkgOw41r zCwo2KXc~vx*?jgW0jiZFrphBe(K)le^cliEz5B3{svclFsZ8rQ&;(8Y6Bc0Onilv6 z7@|Y4WqKii2WxM{EHAt@g1fO8E#Lx&3Mq;_JL7VNER1^Umco$da21j_D`|Y;heM11FN?K8Vu0m33Mq*j2UT%I$ zYEFD|eo?AIW^O@#QHeruNn%N9@n(Ow(Mw zi)s{u1;A|0%_VZ|tN_t#B{T0AV|bj~@803L!JLsdGq)hWs6-(-KP5G}c(NIz{p4oG z4k@nq_{7qZjQpbbcm-PpC9l-HVg=W{^wb=s$@^JCHrFssWaP@sD=00APs_|noy^ao zfW+Nw$P&va93P*Vmst`YuTh+ulcs6KrJ$fNnUhC}9cZ3keqQS24Q%3@XS1qvOrFFm zGC4-cak7CF$7CD9-p%Xzjxa(6MJCS^um`hiMXERF3-&UhOKh$c5oI(~Rw$^<$;>OU zQb@@xPE5*4wJl0bNlnYlOHI)&ODxI+3F($p7Nmk)0RofHacfQ9F1l=TfEX_jvrLW^ z6KCX_>?i;`K*YZ$0~O)eTq>r+46|+X8Oha5Vh+V6i6xoIxv9W_NdcP#v_oOCwT#l{ z#WLwQ<>jQsCu_@p*{r0X40itJ7^Or;0E||9Shvjsc$~FaTaVkg6@K@xAZ8Fq9@xsH zj|K*4H=CdXWV68R0EBe+(;?(qExaDt64>xLNKL?-}XaSmQ2CQ-`zqWS8U-3_pG8XEX!q6 z@lyUo*bw3P|XE)aVgdgA4xcY*VecYt$qq#pM42_Wkp@kUX%??+ z4_m!{5FOVJV3cM;}$} z1!7F27L?Simg+?Ime`)3pcpy@hm)fxP>cMtW9pPS*LhaOloti|+DKf11iR>a>%*a@O5_mJN$a)-?UI3Gutz+uP-0T*e(ksN(L& zWL1h{+c(5J^5tn*zqYQfPeXJKEuc2Axqu?#exaIiU3H?eafpoztRp6fp4c9O|6}k?3h!5e%cPTnA4mI^v6F3_F`E!BqK_UiW1u*B_v zEWl=jULPA_rMW$KZg1qvxg+e3S2!G)!CIaA{j0O|S=RzuNtdfxd$z$l1q6`*Fk@~4 zeiY@J#n38E?wc1XxUG23unoC-qpuS3W=4&lbBZosiL0^WMujatD`2aQ>T;JBwgkKu z_IAS=K>$@eIvhd8v*gPN&uq7iZ2rZR^a&qT1`j~?0C(+@@47J<5}mH5WG!M0FszUm zQ5Ayco&XGOa){?CO~gK`7)Sx}0;kl?D7>s@Q ztpW;*vHQgbYmv78W)yA%O~Juen6Sr+VgErv$eSDisg$y7iY!(#Ist0}cv9gNqi(ri zX|QXAx&1w1?3@|k_M}jA&~s5%aa2WGV_ zI>90j-j@;7LLd{iZgcRc8hU>~Ru!PkBOrUBCFoNFc0*-`(m7QslJ%=6^Lz#vi4RIj zcjbkAA4m{w%C?o78|HR8{J*K;bmvzIx(BJU*2*j2YNXB4ADsM3!Q*;?Y9{@I_`0Y0Q$a9m~+Nsm!JSRcj zit4@>GqoaDLFCn${Xx3l6U2kK^R~sG87#~wH29`Sd(nPjxxC233v=<~v1%H~MhKGv zd_55;!TIy1k2fd|eVmOWU{nwz>!PFYP5iQXnpH;*mk+!>`Q#N;Y;P3y7P!sWG6v8(%fu+i{HDo1qu$Q3DR?Fibga+)&^KDGd8&$l48!xYF)w z7iI&fmR<1*kUc{lg;N{CHig~_DUlf9?uRKr64os*Eita0Xh64xWE%IQ0_4UkaD%h6 zUWHzK7@}ZH-c!wUkb*Fo>tS-2%Yv=iy6vZYO@w7G~4Hl*U-2U?8sM&3Kq&r#AgG>Fm^LNeT`)&*1O~0E{VQ zXK-YEfIt)goDrK?s2iq31xIo{!~>4&q(%mCIAteno)m1~IXy8$xaq7=jo=kx)ZJ$yBGFdV*ikS6Z70w(~S2@GD@pQh>{G#YVoZOf0-?O7E41il>FM`(&@$!rjq zD+X!2?T;+Q1h_B=w3p$*R9o*Rc2=_*8TM!68RKL)VrlzEn2r~WI?d}k>N(YA+%nu; zc1~FZL_ZPp0=idOKTenpkzVGkY>^;I|KEi-eUn_+`7*s4mM$vrKPzdgqMi*f`acx2 zmMX)kNT+8OeENJu?bF0QB_61a$4;K-?9@^6m)j?(#*6;|%uVkV=r56Dc${TY&ubG= z5N4C&ZeEkEF+XT(OCB4Fo7m*iQrbY#s=3tAK=ouPOOk!NEN=FNx0@94U=Zq6!yG** zo&<$L_v)d4fq3)gU8LYeP!M$YB~4rUE^oe>Z-$v~=Ii?JYNLS5r7~_)-Ezz-?s-Oe zE%YE{FxtVIX7s!sBbtV-PM0zdH(M^Xdmhn7cnNoz<#++jX?qrRhWXW@n2U|cj0_J7 zQAJUPANIn}pB8=z+=xb1K}488|K`*nB865ELEvB6g&A=Hj<4kkcmwb5jcFLW#5O9_ z)-{{-i5mw41845*Yj7kVMx zI13$0?;(lOVK!{V60nV4Pqiqu;V1eV(FmMOFNCu|BL0s5NAYiCoQI=?&h4DM35lc# zkK_i&ALVLlGEbX2hGhow>hMR_rBgqAk+bl0<{3{Iq?chmv+V0vYfObKlhi9N^dNmlfWxE|w~RCW;JcJx3pQWIJGBQ78#}csZrC~w3XQ7Z776qq z*mC;BGHs$3@qW|AJ(uVe1pm^rIhT0#kf~m5sfgfqG84bBpX1Cu1?j}V?PfQ;CAHLK zrn`horN{flDjM(IU(DW$AdU!Ql=;rA9EovE9s3C!%&qWwKF!sIimKcl)zWc27(P5* zr8trG^zqA7`$brp*F}Z*q`;f`)&G{e=Oai-S&z{%koZV+? z*dMB8waUx8k=nMm!$0xKQLooKy1vgFwXRm%LaR+(J>)ChsPs*hkqlkw+q}#3_M|Rq> z+U(r-s!2Cld+&bM+I`z(b>n|D`J>@Mp3d9dMmrvsw`QcUc%$#L2c61*#*H|=&+<~Q zrjJX#p(x(8c`;C(pN6=d4Z-VTzN~7$#-zU6QZ57aDlhbR)iNWUfx6V2BHLv*g+4ku zdZvb-^87T=+;M&j2H^*RV+H$6`Be-r@kCFA1C9eZ z|5WI4#_WeLyVPhx>f-hFbfjjx_P#2=RI3WEPfnWq>b+VTQyzkrv1JGj%-cP4A%33m z&ox4X=zv}+Aw)IRTC00_sDdD%o1&?(&~!HZ;}?JYpA#cDPUT1F&h7T5ZaKP6ieR*? z^BW!ZIq>^5lYjm%n4Y(Fw$wM-^4<8l-s)dZV}t$WkK^9yU{aE(Yi)d5EHaI5OdV0W20=-y+2efwj*U8z%^rf2q<8(Ts*NTiqyh_B|5z(QL zls39GwrI`N8_Wr!%V&4|D7>6A;HjyJ{r{~HbIz=lgoqg;%cNA^dxs{utyKS3XG}Kg z77@2^e7uB*!;NS+En?5ML0}NE+FXZ_owbM@3s0_D%u}Q4G*wyK!fcVQMk7g`-Ui?* zW&xMDOgfY#DEuIg6$L_?$~K!K$I@+em~3VfMdN8tRFOBWLYNv!+#D_b?@5|TU4B`p zyhOGvm+*PSxfXfL#y)2~PCQ|UN)n$32b58WfZ_y9mSfeEshA8EDa1z{yaxjUY)|=WUf^M|;tasNSfw>qSqP*K3w$4ZMx#v$8jsEn+{+ZwC1H^|5-cgmGEKNIP{q>TE{;+vl_j7EpJ0#H^9SM~p=!GGd@) zsc0ZYWBGW6j1WX_A4)J1o$hm@#$#ou+SjteAx?=n=U(GBy!qb|Gh(CAJrQEcKQcDh zm%RTOJF%LkEpLDFQ*D)UZDj-_u_&C`9 z)WmU9*Es8ja3N->julHcu+b6aG11t~HZN9XV-Lv3QyNKNm2BWQFjBAF+VAfx;MB0xeYGvXjYe<*^jx#d z2rz17EO8|0+Pi<4je^YZ8m7bo>If0#$cj;%u<;H!!AV1&C!L|eTik{*&z4zftqYc0 z-5Ejz?&c*l;CL*ve7{Og0=-CTWF=N|M51n54lFA#R2N>N+9`3o4UiwbE?{CurXabf z&IK>XUu!{t^lw;mh$EJ&w=Jc-#S^m9Gv!0x0_By0n4uO40vI69kO@N^%UodV;*cxl ztw|D5wGdga@Dj2fJ!T+kHM!Dn*Sivg)JbCU0!}5hjp?sujWQpW5ew) zOBb-i%PdFL1-l~+D=7(AVqI&RE@RLJ+tVu9t6NV}7N^`BKQ&417vLWHkDu^LANlWA z1LPic^k=U)jAx6I041xNf9a*m!Vt)83y2-T+G;DPSp>?cjT%>Ewg==*1oZ)&P+r6j zQY}JqNz|WVKg8_PL=b{5d>*FBw;hU|IYPxzM~1)ARCTmW*FQ`eLMYhwzIomx$IqMN zlOFVr`b!d&>7#%-S5`|jiz1XtWJ5rA!94dWRWb~8CW(*#Bm2_ko?v)~U%`#+Q4A1& ztdU9HWMJnPZ=m+2rRf4c>34^C(CxyWy#5Bw2UHI2PJS_1xFBbsor^yLoMfp$2f}6i z3`5B8-k7lgwCNrIaXSr8Z-AHqDh(FYg(QEz6lN-His( zRS%H!*H!Zo6O2%H0fFoe=0bhWVtl*7WMlR^(6p=2)Te~_d9u2V*{O&nv=P+JPW4T{ zp?}y0O!~Q~+B4VuN2i>bJE-G7C_);RvrBX=Pp{SFFKB^XU5^eUiAE)Y!e(qU3!8{& zfv2|Kb&aal&9-QrWp+%0#^6PPREbt-fC*5N(j&&#%?{AA9jR5`uth(_H zrD@e6Oa+uB9$_M@wxO4UVKmIo-|c?0mqP7Xa3P*W7Kr3-JG`4P0n47T!FHX7Fp z{bzO-n?LGKmox-+X$W~(IX+}{ zo|Uc1kQ{xRYxHPL>3y2jIOmpg>Q{VB_i4>aj`QCdTe>p(tW@&j3 zxn0`z08Eq#cSaR*nD37)9&jGZ{Ko>wsM>%!>PR#f)%^Cbl@QI8Q78l~b~%;KfCM}n zztCTCAd5+Nv7qyempIeqa*GAM+qOCqtc4+~92K9XH;EUIqT+2;6gcS|ZFZY{v=Gx= zxVsQFE=1U~&a=`QA&&Ba#c6>KEg^7GA|6eNIP6Pv2SP4G7+D*?Gw{kpx}gw@i*^Dq z(_Xc_PyaDFpM5tSnXHJ4l-e2Ipt5;~v!#t3-I{j{a?#BMcO{`?DFbzvKj_j2V|zgDv+*~J;pS+7P4L2u6jqAiPTlj9HBy4nH_ngu?p2YsI} zVNJ&&@N(x;oKT#h4Q?jxWjS1$Kv5eXub5#2%HEK4fo&Fr?hYzRx0@A{DZ&JbAA`x@ z()!V&<2_9FTLWZF`qzg?yJ2?lkf7NhFnOz?F(ti!_D&RR(Y`^dw$FdpJ2@GsAHB9| zJ&ar1BCBzfizEDoS2-LcB6*a(u#vmG{5{B^XIZ}k$U+1D1LR^E0tRfWAc|aw47=NvQ0ra}7tL;Xh5y&z?CdqD~9#16W z0)6cW3!~-2c!zC*1rsxX%3&BM6G<$aNHoLqF7Ut}9SRv4 zX|o_MXGE@P7VX)@-y5ktKw)Oq8gDwDboB8E_mpbf4l^AKDNbU-l*FNOG%t};^3{++ zh5ysNVfwf&hfbU2JmI^5@NjFSyhEr%2LS;Rub4LNP}4?)cJYSyA|#SYkILpO_8oA2 zhy;)x^EJS6j_4zokyybXo1;$$P=FWs(Z1L2W*0cKhb5S2($o$oYGwsVJ-i!d(4e`r z*r*|H7a@(4k!_;e`vCL7Z~S7GW=^a z&L+@t;}%(XWggmK->%J}67)R4a)#~!L?`6?eVNklqZbb`*tY|9gZ4Zia5?J2jbOzd z2D>C{*M<&oUlOHxfvw?g+mnEXW)4~?M)jxG+@*R z89BNJrun#7gj7Zi+L6>?*=%y2K481tl({e_C!;OIu~^txOpRu3ab{sMaq_6fE zT%-P%KupRsLY%r8IByvM>hB;lPa8|iZX=^fc^9oqh1x_P(_G{U?p{e3)m#dU5#36x z6ugwi%;n@1B6S-HNYmO31%G8K7g$^%#ax4q{SIVkn$a5qTfYh5eXT~M9%yLx`}XW<08RgU3uW!SkUC*;$l4I3g%ad$jNOz`y{L}DRa6vGJ(Zlk zI&oE6Q0T;!Y9h=fEUkr|u5)DDr~8&vgOg#5S)l{rOEoVK$h)ZM%EZ-Op~>86&iD(4 z7c~8OX*oI!_u7#CM5!O7VfNNhox}9$1_HSo@q-s|1eJ7_Nz)4?kF4AU`EmCC%>I*^ zfABN^@TsY?=ASvUyC|l9fwOUIr4caoyNiTlY>n5hvzzKc2Yab?zwbpWw_y?Y+5N=< z*r7;*h-rjIX9P?nKq4ql)eqHHdc~evsi8p|VU63G1h0C@pJ!k3$=5i)#rYG)h=-bN zBDFheHYg5EXmhQD()3p_xSlxShCoo(kQ~4;qc@B$-WekoyzY7)Eu-Hj#$(-xu7Y0m zqqg+KL=NxN?`t$~nBV|`Tyr|MK7R+8oFW{;;3N`C{P9#0KUXr8Qv*du$_pz7*-iDn zbon&CI5_|0pb>5a=IMRAE}n7Kp+s)!3W`cx32;|bH^^K2IN?B#+KfaW0KUkqDrENO zjUAH?*}SD@e=-UP6}K0u!M>fG{_Xq8 zaTUm)RLy zfK=#$;W=9H!9Sj#E2Hv+b1rU$4BLrKG4M!tgY4AX*Ct%16bfh1n7uxhZ2bNFZU4p8 zO~0R=nU2rkE+k*S%|7g}K)DR}H@7}K+H7u@xAq$Qo2~l&`cA#|aWzDG&lTK7p?cv? zM}w{_h?Js4%P3V-HWIEX!J?Sc(G^HnN4*M%5}^<$Ef5`ad#2~sVH@4`(1<`BMee0E zo`^UIvQ&}_|DOHM|1&$&7x)Cv+VSbdi;zss$X9g{Jc&9eJX0RCAoNS%SI97R3TfCp zI5=$Vx9WSl)x-$sPnaD~ArKEIrj8OsKL}HfEk;7@?zL)FXrStH9c)i3=pgVD6vEVX zbig!#N$J^cSOBI3hbypARjvY^NqMK-8r=npgJ-vnQ;i2xbJ}<+_}RkYi1^F?UkfYg z{`JN87UT7LltQCBa=Wd1F3J+IJAXB^AxV25)tX1mdaG3@9zJ)isJoKZgKf3fn$M5!9?{m0|W z{#UQQGD6$pY+y$-FsRXDa{hBZ<=KCcf0VA@UtNNW{UALW8^s|-{&9XKGo**)xZS@n zkusS~q{5b`d3FcIOK7mgZSpp$cmi^Y+|o;_J0b4T`MZB14HNtB z#;t{%z_)VI6A~_~De%Ehg?DZ&UhzixGaK*vyBn>vq@Qo(ZzMw^^AFdIwG{3Uha`BM zdzSwqe?z-;y^@krXmM(>f>m-(VsWumLR~>(QE{qX0EjF~PymZ6l;kTUr79#Q<)ng` zrNyZV#hJMUIjKcl3P1qXp^#cpP?TC+oSC0jtdN|a3lvOE0jbW*FUn2KQ7B4HFU?6T zLRO{+)NQSx0CWM^nB>yplKkBGlF9<0b8Ho=YY~PQ#Y5a-tAOmf$p`qvC$E>T6)H~6 zNz+4CsIl2zriOX)E_t2FujO~iqM4DLhHT2_6vZYn0C9O?Dd+)!M|hljk$)$DgO%~* z3S)uEe#UA*+I;h7V^bCYh)@ZSzVRP;ob7#UcN<5p;CKIu9_sjzv?51+rl2(tI%{o3*i)=|fCcByLre#h}_O~y9dZ8ZOB=vBT+2Khnvbzd}LZMJ70EOC# zcAxD=lYE+H*Mn$TUG4sNeDdVURgur5@%U<4EsJD4j?(!eFRCcMEc4m2O2*=MFS<>u zn{ipiRWeU9_`S?hfR>DBX_XZ5tQ3GQlbiT+qJWfDvKSZ1by`-%iWlft$(L$br889$ ze@Af{jq%G9`EZgiR_gmSy}FvEm+B`rTID%3D<91A>uczm`k9ygMO@vepJn<*G!I|; z^ZavCs)qlWE_9)lhE}EXM1L>hNpcxaK0SHzWHO7(GTJMymq>(8e)*4NQgsJUBKWl1 z?Y%6D<-6!AUuM%Ng(uOot0YG1Mpx-9c}7%;vUr|EF_eJ*LIYJYjg}>L06|fSX)?)+ zxXO#@Vi6Zm9J*XyjQdZh$k`24uc{)wgh48y*<>JI^!w)dU=Za+3UrBQ;-#uMsh06f z5Pcq3lbeJvt>BeLt{(*VIi4*O3)Uj9pu1^2o2{a1wMcd+dG;9w2S8HcD8C}WiZEfg z*rElN=;Ky}H)#o+IGX_*c%3^xh9TvS$@^aKboO}=>K z@NqdWp^H~AJkzvX%;HtJl_Z;5Z6w4LcWpuP8U39mS1@nWEUm`lPMOTEdZGh8Y@??K zz9)vEM{Nv|W|Cit(V$vibbBZXV!c9ahtvn_v4RcnG=EtI#K;dNyI8NNt3x^9Pj;d| zS9ulB#(6PK3grKtNKCT#Fjo%pNnE9Q){(*nFb}-6W?`$heV?h`Z;!1ZFNldX+FZ12vA%s0?*LJ(#7yik)mZzf6iQ(0+lH)ucN(db@YF ze{>j~zWr|W{oX*=YW=JL{WAC&LHyDJdWK%Nq7E=RwIUh;HjlEriWWsu049Kz>XBb+OO#_c2g)I0+=?_#``1|xV(>OD zGAL5gV6?GJTTY$;Pb(VqsQW<%Rz;wBXJljnBHWMwn0Bs{ike{1iUh=TW&<@9U`fO^ zrKXZxar(TJ2GTW9F5{9OtpQ^d3&EMD#Rgz_sSuPRnQ3gL{1`&r$+Cc&46I@;{JhQQ z3lMHt7kK6~3g7C6#!^UC^ zfomz^(l?Mq9|zHijR39hE(XCKI7H$^=o@|`Sd3Q57nB5R2+j(H=siXr9M6)ntZw2= zl065pU(g!{7v{U+U6}32_~tEZ8O1=yfKX+-x@r zDYrqOiCA$8T)wBYfl*Q9MW^*P&Tz;kFpEHIvpP;ncJ#CyJS|(%)96PFTJY0Bd__09 ziqf3j#=vcLa*&>hEXxJrr;}Q1P5MsC5C4OQzG;*+Q43K3e4v4@W9~* z)QqI4)^S~3D^$&y?1mq^PacCKU;Qo^a#qifq$8Y;M$z8E>Cpf*7|=YjZ~FfYlz?S6 zq3vGZ(H0$oU_S^d5Chxb4PV!@@;w^9qcF3OY#6Z6IKTF%>Gfk1l?22qzu_WT6tZbw zvMk%LY~50IVb}tGk_z3^@^w4JTHb1`M7zaJFh~66nLcQ%a^XQ^ZNRL%gxyTBqFLt* z9Ro{d3Rba229;Kqx3Jmj?ct_q*TPvh#aY*>CjvGDI3NG;jR8I$E7J_>;B5!E#E^YkH2+Q?>@saKs z4hb@dV4{W^hU)^w2`dQ`kdogTHq-d@&x;~oKr1Uf914GTlI%2YTog5!4(l*zxL6$) zNV}%pmIh?>$Q=jFjsT>_g#p_kaEkyxI5LDY1*<6$Y152DVbodF$(x(FyzvE&=C0AZ z-SSwpuO=*H%hBoi@$u2gSuZ*|c{e)Q zdvh@21rLwTMgz4S*A_f`=|_ue0^6@iQubZUYWsj1l2ml`Tk+G~2sNpezlol_+O#8^ ztJr-xexlgFuvX-YI;k1ii-*VYwOD?A{boltJ((|pZSSy|e-|FKL=QAlFBf`EjA+*7 zv-sMq$_||e8=BXg<+&GC@ipIjluMAu9o~{awA_{*}P zKM3Or4bSA0S|XTEdx3m6ZTF(~RSam*xAIfESislrLzBSA^1*0fy(n+;Y8Gly$X(!+I_rSKnUm`6i5U!A)1^6bGJ1RT z{qZ?Yl)VyG@$4GieN;)dsZ83?6Ktbz!3cMRo=${0QaIeA;;Xm}FDb*R+ ztW1(j`P-cKqWvryW!JN`yn)x!yQsijCQ(cFwsi-;rD~~zKZJ+-3SE>2W;Y0Qnv|0w zB_EOnn>}}%Skp;K7X_@WV5K6;#2}fDZsc zo^jTHqYGb%Qh3exo~FVd?Nh%2_OWfxl|L4aNfHe_19 zohAvoG_D30lRT@6d^W>QKo8JEM)o(v>7v$&t>qbfPLg=Kdz8&qedtrUoX_K8rNpbv zG3_!cmKm@=3Wss3zSf>6bm6Gm*m|~O7!ZdmGHnz@!DEu;zdiSCATQJWEllY zX?Iz|{iv*}k@aVcsc&HzV8cbL!XT1&}oTn`%DWk&jEY z)IH&=a7(^z-ADN(pLfr-k4Ahs5Jimel)sJ4cKzl|+eAM6@X^t4-z!8F`n?9lf0e&Pjyz&R}JGh%mOVwq< z^L=RhVf1^8fHonC=0^i=*o2$Xk>Y6#gaLm0JSi@?B%^!lx_Od=t$j% zmu3@PR~Tw*K&?+$6|mk5CvyOr(pm!WpoZ1!*U?MAP@rMlB=5aBIyoD?8$_r1Jdt2P zuI9IqYOr66zeZ^tHU2O(7LkC6(*x;y$!mxqO)fqxiw@6+(I35ixoiyMHZ)G;@{us> zOcYA{sj3=Q!eFQ?=h#>^gv{H&8~b{oo-+p4 zYMetEw~`SdxAE+g7I3AMa1@!XCiRd;u12n~pvbFPT|hKXTv21_vKOhn){$rp z<_K;2QSO!~i5L{x?En;P!+?0RtVpWW0Rk9kiG_MO>|ziuj2kFuK;=a;p`8_rDccj> z(1St!fx62w0R>#t^ZFJ?mdZwaPqrT1?gO)-`fjx%BiAf44^VSWRt3o}uTit-1P=Y{`gGuF(NVF*zl!sQA+%;6y?Rr)1 zYRQ)>RE=v2ymC$4PZK7danUMm=BYFuf+i>DDD23t(rZ@>=Y#qVqu1w1AraG_YC{{W z!YIi2?CL5mvvfsmD-;GWc!!4wV2nZT%<}7WLhKRy%q5IVvg9z}1QdVH!$sCcPV49Ljj|xp7i)i#>ptwyq>XQ)J(ptyrmt6cIq)pG2d~>f;e^(bBotB z91a8U7}IP)YIPXpe8!{dA&z4J1n*UI=OfM}AI=Jfqc!cvdi0 z6F2!?^_dBFKEb`x$JT)^i8@-hHug+2 z%MqZM)xz^64L!j&0-E3{@}MXnjm(C4WTwZc{&}3@@eI&O#?^+xY+Csmpg{VB8ff^MkfrD% z8*Qi%WM};74aO>|^x=g;bVc+JvqyTRdS^k!Q;f7I$m5I{u5>`pIxXRcXmtY>`go$I zvuvIIb^kbeKiWGxKN(@vZY08Xx$#A`+GP>Q4bDoNnJtH?HNOM?Q1Rt{Rw+4s5Kx%K zJwez6Rs@P1kKXR@9Yk;UPDcZ+%AlkJWif0ysUeW>Z3xWbkaIlRd8JsjC$0QA_r#`` zor5yUV?hg)>!5BPGEt|GE+tTl`{Tv3yy3oa`?X^TV_RxmSFM>YwK`fFOPKX#j@Z-E zOzs_9_SUR#j?U9D=)e+ejViAP?N|j7!mU~%{Dn{ZvT+z>Mg1(W57F-wIe7G)poTh- zM7<~XX_-`YM3pvnWe}E2w=R8?=by^4Tw+{{i&@xNcc;Z_OnOc>tzYsTu--aM?pV;? z6l)?@0mGPR7+XProwis5Q5|UaoQ{%)X^W-0>dN`(gK$VK$W3u0yQ9DD9h~o-jiS@< zj?NF>?Vg+;MyF@+z@6XUp`Qy^BJ921=wnHep zHmQMv_N4EtGhD${mSlUKii$PICE?--k_OX-!xmmSWXv>UXWbbUxe?k(uddrcQ8+Mi zd?+l-D68!7PL(ehN5z*p949Zzmx zbfv|%ucMcqNkSB0=R~wvvZFU^L&S{W`dvkdRjY*v0-|^^)9t&2jIkBPiyAYK2X&ES zw9DN*atca&QBwwk2aP?^dL)CdqE8egw$Hw_JUC=L`gNjDe24F22B5HR2V+p!3~|Cx z%o`JlBAJr{QOx^0$D$B(c?lROCc&`gy<(t6B-BtvL{WSQLv~F_0`vM|R02gI=$-Ff z0u0Dxw5=DCI}L3m3lqI)1q)%@V%TyK!s}Z1pqYVE(kh3|mJzvX0sb8eTh;Tsh+3_- zdV*F#trfFd1nBBkn)~ch>n;(xuHU3SJXfk>7lOP-e@`$jA1&T>!KU|KU9{f(8w<)c zc*#0nIVxARzdkJ2?A5+{T&`~VF#~h0M(!M$Ye9La&|D4lQDbv8D>ek@awhn7qjO!q z|6^)L)}VU2kzURm&B)$ox_Xg%D;PlS`p0s=D7HMbaw`kn9hD~&$jkJo4T5^Nh}l)k z)>jYO4QOpv0V|BscPto_8)fv1cA}Hf`_akn+0h`%Z(-*;d~b(8S&c%1Zs`f$r&sBs|N(k>szDSeO-L?@t=E^kw(wOp@1~&Q<1z1j# zWGYmWBr7?;OMk0Zi=CX5;c*jRq0vxu;DU}l^N@gXN#=`cMXFbjg!&|?H~WHFPRI^; zu=js{*xf(eKZ`opMNJ1rWU<$B>yAK2Gg2SxmM9Utijod}r}~l7dwO+*lY;?DWo50Y zb})-#MJLvdlf%Fdn4DEr>~|mk>ENTTKMmY|*=^NIJ)xJYV%D)&w{+bs(i1QcXmLUS zOWGMzK3ZTgidw|-sMVl11y!@qw8Ddaj^o>16Xdzy+7vlD*KdDv6Q`N$CWPK1K#x=xuRCpzdSJ z7APGx!Se3<(%{jsoeBF{1XXq^CJi@Zx}9B-J2@>UxM^6`z=O}Zsv&t*#*t7av=}1^ zrRCe(8Csv_0DSy}qfB+T4v$X0-#b7zjf>D7u&6)Az=q`yO;P(QhJlrbLGJ|eDfC#U zefOE-a|6eg%^p^@$24}3s;ATshj)~sPJXxoYc~I8bD!m$YL`bf#k_jerHIb_|fzl&YQtX8E@p9Fa z9b<~>f)_|i71Io~gS1j+Pn4L>QB$i~9nB$qf!>N1^n>zRDjJx2PB?ksWP%39bv_Y6fZ?7i+i?6Z9)I51EC9VWHp31N z3`S+Ba158zA0mi-4dVwWy*`TF9r=e38Q+KjLNVikG}iUO;ASOe=OUdV99JclZOH_Y%F)VNP=2q7SCQ z?v~Q%>To6onxz`!@lJWcf5OhAUnX%exiJyDY|u83hc~V*D#%t_GItG{Hz#h^ z#mjFHtgdxCX-gLthcUV6#$)(KJUzDRJVb!|)6$A<=UA|`dB1L``v%H1XFX}e;ae`_ zgzK3p;KdkP=NN*Pr+!1kI({0npNo8K{#5DJqylf9jQ-d8{>cbaBJPg<_vr2U+2~y_ zx?EP0B&8g-(8iF58rIM(Ud}JtYP)T{x|{r4;84SP_UAq4ygE>JJ>kxSUG6Z&Xn4rz+iY&=Wh3{PD#_jEu|SHsW! z&k2Nf#=r4{0y-YzYn&9Qi3wkKRKT4M${JsPZa{Vg#(cQ|$}i}Ui68TOSI+0FPLR*H zo*S~BnjZjPxGq?H@aDE*O{AbHm_$GM`%FZAgWXidlxyj`w5+G~W?!WhftuCe><4^= zDIt(^MT5dz7Ru6K7(h5`ZF_W$)s``hkO2)C)$hL9$1z)~*cRVBiyyth)E?D!eDe@Vkt#a04{$RlFnT;oC;@GyhC?>i?>ET~9YA0QFF(Sd0^vWU*c6c+fFf8@ycIA* zFLx6C*AgQ=iUjX~brxv0ApZkP4SZyD+>5Im(sQ-;Q3FCKbdL5?o@}5tJ_STWKdFo050vgMvb^B2nN=WqL=>c=$R=ZgQk;37we5 z5t4M4N3YN@^STu83Vm z`jq>u6VTXEnPVNGbJCI^0urMLJ*d(86;}9Nc*c*8PZc&Zlw}dJ2gk}^p=bz(^rufb z@h3^A_3CN)8g)C?Jx`FB5fPU7PiBic*0(G5RBFw!0F``+(TPg)sbMOS7-F7O;awo_ zYNlWy2tN*8B{Rx}EgVuQ-wmUme|cg*`_Qt+sr3=> z?v|Zb?k3ibsD#!CnX;y1>eChFEzQE>cekl3v4pIpzpt+`RmG=Pq7767K_woDvul&Y z6LN~SFVqAPY~{HJRgcE}LO^%b<3zG%tBZdFg+&WSXmjaM*RCxttaddZp@qDIIc)1G z>Jv~K1UNAOHF>Q0#c{y`;*R>EfKpRrYF$0Ys68f;GZa``^r_`2=)6@+@I;W6tQbmH z*^%Zfx>|2&4MO0sMZ-s7J>*>ynvp_Pg{0F6IeHbX5Li&eQOruSHsF)SB|$FIynIkg zFozHDBkjpfE>Nk0*TaIwlzIY1xpop?`@Dl?hQN}g$I9@gX6E>Y#Y2*Z=#2eTKzuP@J98gcBF@%Fap(@oYoHhnYR-Qu7r%AG)@N-_< zFRp|`Xqc@sH3N?PtBRrCH1LK)zgpLd-j38jM?;Bk2Y2*T5+QZ!sZx@lToYJcJnco3 z1Y;^dJIj`HG8d4%!l$mr%|E)#hZGkM{JNbMsxUN~C~Y^rjL=@<+}$Kiie*I|S}-*{XKh7|#v+}w)(#^7$egRN z1j`uBr2h5PduNoZhE&UHaUk$|ZL>MUOGm75b~wda7>!;bU_ZB$1Z}48HCGWN!8+nL z9j8|Keo^c>H}^M<$!(^ zjltLEk`5Uf8VKrip}n9x;@hhq{1e(n1|sgIvSHz+H4qOaPYdxODrplq_Jki~3ciqV zt=y#E4*UB!c$<)Xv8-Ju!+s`>FJHACccuEU9me<2uCX$+4ICz(;d?YwS9en;KUX|T zKc7e6!2g=f>$yl)#y03!bX`FxqcePX1ZH=GbGVyvn+Hvu4BoD`)&-<)s|TWf3h|7S zUYDFGe6Oy3EsI+{a7Bv;L7sJme{0LE&;4!=me<&q^|@PPT4rfi)a2PL{mPza^@&8f zdl8(jTBEL;7c8{0hCeW&aqb5=y{Si;+k5B%c^u|hh zqnCu5*m#v?rTWB}ZZXnk`^eDGomL_YCG0uvg4LNh{ z{3miT-ZDYXmK!&r1IwfY3^ga+is}RNAcS(~xEDQX$_A6okYgTm%z&K52}wS-yg=DZ zdK!61{o5w36FW^5+vu`MgEINnXsfmNx1;@c17R`R)fOX*vU<5%lkmkhc7;+^IPyX( zx-uGSRtYaZNF?0);T!3kMm5$L)Jd&&ZB?OM7OcY|JH1oJadSPC5$#e0v#`yg6Xg>2 zm$*rQIJ-%Z{g9C{?2ZZDg|%@)4b{PiN#3at>8j{(I+)_Kpa$KXdqb}Bnod+D_Ax1rY=2$vQE`!RCpk!@EY3W4oSDt z*EwXZv`18^Lf3&XY4fjl92=>z=~3(;7gHd9GYi=qv_`b?ChmX77e`V(lPPS@zS}?i zi##pOXQ-^=Bu@PI;qwhR$vG)r%P;mp^#gM&N8Ks){;$Ddfn*Smz+jrg?r>6GORnG* zaxb<%J70T)oZF%q^xyH7a?K~?C27%h4n%cM%C9{mud4s9&&ofMaxlAO&adgqQpYBs|$HA7g<7)3{$l=mA+w3BXVSM zngJbJab|RkN|`=j-~BnwVcpjyLsS*cF5R5vJ40mJrNOwy8_iFaaS2v0z@SD@e(^jD zTL`auA$kWHdPf}Y;L8@&U3WK&%yIPaH?sInW}1@J;QbuQ3c_|yWL@=fuR_6S>^sxD z)*GA@MP7{O(9QVTu;M6idOAH-Rc6!$k6Q=`!ma#^gvfWJh` z3_3_Xl=)xBS1kuvL3=bmwPGaSM~%yq>zCF^y1WZn;LRNtb1nDux(;%y&X?S<=ATlm z={?qajfhHFLCc3#gq=cd(iL2|_4zWWK+q2%UCon3-R0tM`{C`lD&k3kfs^49e7xsPVL_46BOWNFcf{7R=vm{m*oy6BM@P~DM$#1&n6izqRZH(ovPqM0h?(XzCQu=!{ zX634+XDD(y-4EYvb1mZ2(s)!mHjA=!iPjAW$xnL1k zs%wF=PN}l&0IuOtBQ~(kY|CI;bFjn?KsU#Yu>&A};%U67WSSR!G+Gx2;hW_o*x%v# z<4KI_fF%siVJ&Kh!vzB2_}wRg5k7!i(fDLX_+R~Pq19VGqEu&vAN5WF0R)kq_Lh_ZN6O%$1fhxY7VWdnEi8Y@tfyr-$ zx;D=z6p0H@VP!P-FiOm{S@I?;s3g6TRf9+1*JNMvlF>->GLio=661*;9OmEC->!4s z#3OPrv(#hb2+K5{x({Se^u4tB`INwjUFSHcL&q~+kLvyMZwfNfzkZ@0KSd;N$=0PJ z0#xNZ3vv*QN>PRKBLQ&F@Z_|p} z@W46KP+iKRUJGd&{WV!#=5aCI#|!$3B|L#GO_+J4S0R)^QEU(~Tz2ox(FwY&qc-I4AwM2xa^-3(+`K(;{A5 z<1G_?4x;vR1;M6wO?tg7mtH)&p#$3clN2}78tp3IE(!uiy{1Yzh6LzzJt~j%dVD7W zZ`bA~LsGj-VnQt16{2l(iJ1pe*X~4Dv!uL16^m#qeP+T`H%%(|>0g<%?(Qe)flW(g zBkT~7K**p)d|HqmX0P1rJ=mrGah@W9-_z_I@94FV0*;|3dRAxdP{Ft?2dnG_@)P0tR zaO3W;$zAv>bst`A+5K65yG%2BOP=P)9=XAQnU@EMr!nUXs6rZNBS;xpN%0Y_`&^%)ZD+K-|!4Y*oy!;ql zr=R6*yCNtf1HpZh#B}i}p5{i?PZZw$BQK42yGmGOOcA57p&wK>P+C@T^-!6_r5?`@ z)ygxOVKY0Dg*(7hB}4mKPZ*Ar@Ry)LLY#X|qRV`$&xKkzHMzvj#3^pvbHIen>G(rj z;KLrx%v%wN7gy~PxAfIbKl)B}oGuoSnFR?LLJwz4afwl_B3=LM8rby(5oNZ;r!1Vzh`VvkiOYvW7VDWTH z79~n>LFsx71=KrfM^Ys`--SX-*+5QYoxY)&0q?+{Km3Siz#M0COP68KLTLrDAW5-?>e>Z9RC`B=&WVKg<-5jn>QQWUJQm{QCsCi4Fy?E~@UnwX$z z%5Vfmm|!%itSc}Wn9x)uCMfrm#7|_clHfcLR`<{fOh08}ETk}j>X`1@bTr_^%2?vH zyCkr^P6%?;UZv*i@fMpcvvdOD%?n=EA)z;MskoF?>;?ubXfD*bb3a%V`4~Mj=Z|mz z`MuFnZDA-2C_Ng7ZcPLDP8PJV!)D~;=#|r`4QfuNt@NKHcdT--Q)6KKN)5f#Km%C! z#nk997)+nSR4$U_Dq2Znr9?}OR8^uVIAT&VvMg=?lws)9StWY9!Tlg&VDhcu_R&St z-npux3ZweuY8DJFB#UGYYE`YA^iwz1F?yQ0oa5OU@#7Gjr~*3%3%f8`@guDff5T3a zy(e(eBE~3$za}es-)RY0!>2TVmLlgO#+6%bxUts(U3%5TL!jo^eDs0W z{pfO#j(PSM*!rdo^H>$IX_KSRZZ^yerOyqVXGzAISHdo9N(M|sHmmvcM+}%WY~n@9 z)=v8tX$?$|y*7Ys&-MUUGMb6t{|&I_3&)A5CKTRStv8hFs8qVGqf?v^XTu`xm^}66 z!31KO%f*ghJ=D6byt8_d^cP6PBbCiICyj4f_iVnAoQV2!FKYGw0Xx^axrLv3iJNqN zQQzC6gY)kX@gPYg+n`e=T{>1`2`~B9xxb6(Z4Ec6o$3W^rQ}ha@YP zy3AM%*v5=IqROSixH@VPH>a71=5jeoDozF z->Pq=el}Z|@DQ$vjA^~1EiiEV^vlyJr&6r!ZwYQ!HI4bNP627dv5Ot<0g)}pPrt7 zKavr^(W~KWkRI}O0%1EyOUD&MXpZG(n||EAx8uj^t#^1^@J5!bi=k3t9u-*8Id1sa zEX{@3wy=6IvoP1OZrjZQ&u0);{^062LTdunUP3P=5XyFL1@{Sw&yKy)ptei7VUJZ% zD2kt07~;z1Vll&nWi159FM*+acgO}ZiWx?5zAP&;8|rQEj8=URooKMO0~kJdgY^N& z^N%0>z#)3^P2G!cofjWXJ4!H9_og`wo`_JPAmJFDyI0GZt9Ow775YKzB#WEkL5}R4 zA+mxts?l)K`g)jG`xp*}he47lLDsfuwDedP0|01D@g*+|iH(7JgYzLL>bj6eF-aqI z#~_^=Yq8{<(lMSsdxm1Y$;>P&x_0Kvl``tlO8X}y$cHw5ZGVhz>0B?a!xEetTV@<# zi!H6(3R;VDEpK54593#B2R|VhW?R7#_kazYFqX#HfZ1DQ7~js~O~^Vy;Fe8W%z5;~ zunD2E#~BOzqZrap$P=-J#TpNFFf^6T@E)e>Mzb`vVp*r5C7iULg?cmlv#L!A{KZ#W z?z@`ZNL%pImSNd^FqIm~X7qz- zCZG@3_CxE+(z>#}LgQ8x7dM1!X*JKxz#xq4M8)KPN>2Iy=sgX&jr$v=2Ktl-ZKv$z1vQU!b;6?ARhJ7~%sA@)j)l)Q(d%UtW% z9a}Q#T-j%sy9rIUaiLewvdkxGTq#G6OgT)M6IJAPX;!>doAMl%%S+K%j<$vCy}RBaeD*&QZC{N=KQQChDj9&3}-8rGo{d&S@;Z8 z1Q?@easx_l1Y6CLi1P{NtyPMEn^Ns@+j=by9qZTA1oHr!W6}CJ2i|fMol8y0?!C#O05^TNFzFF1TybBarFm!qtXIt^{ZUWQjzbO#|&F%_e@$} zb!`a)^*s8cWsetATI!6mDP8g5>tlka=@{*qiLcWVL04328mGE9weX{{;}I(X`&9B} zL7D#QZB+A>J|>Y)@gmL%GQG%?-%{0ELaZ6_z88UnPSjZnP^PY~v_)r{mKbD&<|^8~ zt}Lri*wQ0yy{J~JHtQ2Xs%O-yCljUWMsH{7WgpZS%h;L|EnLAlePuAAtd}#D{MOrq@ANQ~O5{ zDI{O9Jku-1QLJFdW+noJFpI`6H3(zq9BZdgaOt2?QJrK2BOs-a!IQj*K~hH-8eDlX zt~t}c%qEuD6|v^sCX=v7Sp;bGveZUDXantwttm{6+gHqD_pQ(L*#Cm zkdLKSP=qmkGwXt;jxEep6dzS>IKmIT?itj>$M9+RymR=D)dC?wgG5~Gg$5394UMcK zvwRYV4u)eMGJqFw8?qYon^a!)u!EI0@I5JSkKYD9u`U+F2e`yw>ddj(dwRADUa|cu z%QaiQHiAc+8HldYQ&_K_mcrPetM}|~ZsF*1LSCe^i<%1i0D}&cj_$RK2|H0PUW@Mm zOexu@9&w4W{>_k4=ThljOu7@(jt><=yqS+A-c&Sn>Q^0sW133g-qHH$Rz72wIn#ZN z#kG#s&@FqqFTCmVB(Hwxn`z^ND*RD&rZ03sUNCGI!^%q7>v}94i1w%Im>?c;8>6go zwPiiH9UXoD3?ajxX9B_Q+Wn=TY~mocWOIAb*WX7%a7$~rn!D^YwIk28Fh-*bWxO{d zZGjM$17KImpN|)&i_QI5WeNFZ@UytpnQR2Vz@Et4Fj^fLMDJDGw>Npoo6`A5O^T_& zKJwJUU)R>Il&~^l;V`C+s8DdxId468=xrEPb{L(rWq%P@H=ygy@NdTl4zp}*@~A+0 zXl8Od<@zb3nmRHb08x~rm1Ma)5#Iy!11*oOlr0jfQ4iEvZ7!q~an4oxhnR9U$Q#+|yjAxJNk!e+!Z1hY$1@WYEDV_`z5A6PPnc9uxK0QyJzx!`hd6meI+Cr@-1 z7n-@V4*fe$guk&g208jG)4JRw`uY%SQpqdE(1nXoA_Yax0m=V%3xg;+kXnmfDe6cA zUr$^2dY}XKyB0iI@!~}mBTcty5&Qv31fhqpKc30TW+v=R1nD6?3Oy8=lORGb?Y;9~^i=u> z)RVMV{R2v8R|N&ZL-S5EZ{GX9dEfU=|7MO~4h$&Im%*ccK-v~;H{X<(ct_x0*X|E5)XTvX}dH^>J*%^wBS?7SWwqlFN_3#vQ+M zg;}`W0=FwQ@ge^-y;_kMIXk5r5FzhJB%x&(?!pRCWm}{GXD345YL$|!DS9WSEa|mCJytHN*8gFYYS5N^2~s( zx^*K@BF$>$TASy8^!aO@;9+m%f?mk}18rsOeD5iOQFxrikTFifFcgLb3$$ycvKaA{ zsgWu(uth>*01klI5Q?nirLmgWk)NG(%MDmEaSJ3)!9|!j1a?#r!N}4#S+d{v|NdTY zzV6-_JCOxgv7zB*ww#3nT*K4zuwdAOpBxLIQoAZojZtgu+4vU?nO9CRfruq6f#OdOB|j(W`b{0Epc!if4$U;^;q zltOcvX;nziP^~mtjXC3Ito9`26ULx*#xFh^hwD%bccN}8Uvlcj;a*g9=I^yHXF5p; zE85Biq>cITamp@!_uyHH*>-foLu~xsvi7JypuFI&KcKweZt-7vpXXP{-%DoZ&F}C5 zff#t4wO3n<97Pl+!Rtg+G}&mBcy>atJI*wls6hq?64nW<#MzkHh~lMF(_OPuZg`^u^;^lzAgCVe-Qiuz6d_~;y>`5s_LGZ%@XjzVPWfXuHU&;|2_DN|M1hv z1O4E~tLG+}N`cEF1(D8Fmcszotyb#-RR6s2ezkT&m!q8Jh4$#e@3jDb?RNWCrtXWF zYsjY@yqxR2n-$UrZHPflfI+Hao&ZmH%4HrH&Kn%BGh|~jhEc>N%Y@QUXx@WDk{BL$ zK<|m!j21JdbxDf}6A6#4j8V>K8d7#ZY`~Jl*x$X+l7j1?WoXD)uqW2!OO1H&gcP}8 ziLsTVONM}c@9~L{&ZmZ`Bq|v5iONtL)UE~%*GQ#27b!Px#E>iGjYULU`IO~G+6ojf zXBwo+f$#IEK$99#aghnR>$HH;(kiX_4wEHouOE>rbWMcTMvTA_Iq0b>lGvzQv3h5U z^!R58k>da+BFVYYpYmwRq|mAEKvIf5bcF5Vnnk&|&%0*R2tqdAO%(bolmwRTV*Jpg zDDRFBx{{^513ZshTrQcAq8krcPngtrnC!5G;FWWcqYt^s0m>aeaH4Ed^x%fO02M{} zKZf}fFPt>;N8~}11hI)Ra@`^67}UjCSDVc8qykz|MWAsdT4#MD6DJDE8w(m0J@|lS zdp2{d6cZO=br_t_qsd!D?t%KlEXvQqs zo3kv2h}7g_EE16)_%4}DWeh&P{=u!AgHdm(GK{+xnm*X}6poR?@ z4Cn#YLZXqth@T6+1Um++`r(=L)wxrzUAq9?E^KZOKN<|T2E)xk4>p}%Dz-YusCdDv zW6-T*kZ`|xzID2~cIxqbol}f1(6(mFwry*dZF`q(+qP}vFWa_l?6Pg!=yPsv_hY}U ztjCp=d?T4-=37W0!V}joqB&eUBDa{-nhUbZ8XQI(OxT4LnVavr>cb$9z+%u?{;{dHp_y)8EPt9cZ|k zDuLM?e5qwQPj0=zq-p4y1%4uoi2RayL#(TZttNW6@}ngB@|OLoUhfYZOBEd63bGA+ z3rKw$;+`T9WXS9HA894rzONrmff)EJvvRLWhm~&qv63EwadFr zRK#3PpXZ9*s~8@BL=_Bq7;Hr!TblV=(6uw;#OK&eT2H36ITnC&D>{d=2BXjYRcW}uO^Bu7OO}A!t$*8^&R2)Updm?*`3-Kv-Ha${t zXrHj?m?8E)owyVI3w0UJN5X78Ggo?|Pbgi43aErgH`wI;Q|4^q2|U9x2qUhxw0l>- zP(JHA`i${h-3~9lP7BA+zqnxNgJpJ?wA9a;~`YW=UI{45c#as_-YxJt8*7b#=P3d;tmmNRb9ZTnK>Rfuz6df%NtPL{Im zd|2>qUSk>$0=R`H6WVeOmVg~zn-qhLJLHBu@8RgW_Kz)pFy5Juf2HT3wzDBVPKCU` zi?n%!Kiz8lo(ICN=U=0)*=9-PhAbmJsq0%65-s?3Gb=rgUl%*5b?Uo--$yQYJ%KO; zcm2`;-9Ny7sEQ2Ze8u&O--)O)~BfLj^^zhO)Y%Y?D8?vD1JKB z?sqH}0x`(5DFv{0xLI=vP2Rfqy^4#i=5 z0CV~QL^y`T@k_M(=I~blTs!n&(x@j0Fr3u%oD}oMn_oB#n66ZTM^aymk^zQ_QVKLXr4A5%`tO0f%!+DcnChI0>Ks&V z??6dyUMyh3=V3Ox2D|I+jb#xnVVn8AD5aQ=y=sBkS?LkQS(%OFc3)s_5Kl>yk?Sw7 z!6R%UHwBjY11$2$%->;h&gWphZ-8zM8r*Zt({z6=XyCyTfR)c8p%~~J4i*7^X66=+ z20PZkC-iF}DQE#DG-WtR^eQWmfKHws_ySfbiv$R$Bic*fCJ@sDu$kJxV?0EgHuFal zH_-yA;ddY~ zJN*k&*hsKBR(qdVC#ig`ZS{jUyif`!UJ@?0VJ)yZN{ulk^WY=1*suG$to72RMeA0` z^e6X>*pwp8I6Z!S-*x0DAh{FbjpNE{6cSc1N5nbn=@v!BWD;EIGq?4Q7lJuJk9o+z z5?T(C2H@tLG&RJb3!t(QbeyCSEgYSD@&CR(4MSh&o}lP3bIDD%3}+5H-4Ueg&CQXky9AHNBBZxbMHDG%Q4fQ7bs<12)#SnzYPt212A=6h|fJS7|nT8nwH2Uq`F&cR`XN00oJS8g^g##Q0!TZu`=xL8gSBHXD8$$gn(lM2&j)~T86r- zQ3EM@^=}xMQ!U*t%`w_-2l4Oq>b-K~tOc(+!ID7Kvt&JYD0035cFq`y8CofTpU_5m z2M%=@neqy&PFlmSEXAvLz8S~)ID9j#`3Quz;qr>p9hfwMTgYJv%~;F?EkR#y61C&F z)w@?JnXxr!H@!I^Dt!cHKrOh17%m8}`Sevy#We5DTay_}NbVfSmv37ff4nIZebs8U_ph}GX^ zCSH=LyDeT0hiLnV*SJAy(YM#eUFvm?#X!K6g}v!G^B0tG5IUaPm*gDBr`fYPR>D_qZmGmUS_0gb;A z7SW}_-w)?@-`nEjkzIGp$?r{%Nh9rQvWo|3$E-YlVH$Z4zbxBJr`8iM&-%$#q7s|~ zsoNM#;*}a@hyeQ*aJUHyNTQt!MPr{c9;$jy!5h%TFHW$`rVo%1Ax4v1&~qjdhP8wY z9PS#ZR~7mA(VD-0xjQBjl&x#2&oTShBPZpOq|sHcSs$KYC@ZMvt<%;2)z<>u^IN+y ze<6e&T8TV{4YTtAXp^{VdI@X!{{PyN=2F#C@~RX7ng!|E`e|Bl%Bm?D>A96aAd@iQ zsa%TotWi71R}$nVuEYol+&4T;!RaoYUo#bn{9IL@Nog&=MX%z$U^< z#n2uA7FI?^7AD1r__^sRy2$ud+Hw;Q_Sb(`a+q~o-tN}5wDFyeXHtLfL`5PRi-!+X z5|UEhZx?Z4PrRGO`FdWx>(&t;2aBN<$Tdp@g9WWlmZ>suv@!wfxGF{tR3(g3&y%K} z^hM#E)?a?+V03626DT_~MiLkH(-C*HHqT4B@^H8p6cZYhhw6pg)zBQJ08vP|#~Uh+bIz=AcT*4g7@tXWLch34+@FeZchC z=7uh#5as$U99bOqw;;pXoFs1(T2GAa!IlD?tYGxYMv$GSNJ2vsuAD#!9>OmpuhZ)! z$Zkv-TAK*6L~)UaNq6ewHKuJ&$;Sbj_m{wyIfFB%KTNSVpltdJ*fL8QFr{mn9K zf2Yy+%DLEpV?iOC{I<$9O?+jU>U--`dGq727ICjId>~8E`oD0u zMye(*iLyp`3jrjC2->`49cX`CYf}J|ltC}!=U!mOu#9;Ml~%%~yFSS}BSl=*nmq@> zTFpAl5;AE+j4RXg0-31C$;uWz`6P@913$+Z< z^{!3DNdu2V**WDD9<9BZ@*aNlFo->VcXcnSb_wVmOXM|lPhwn|y5 zS0AxIW_S%%X$r9*(Or7Den6GcEOnkv`vak|(*@n2Yu`^h@6j|$R*FZ`qnAi_p?j3q zC#w6{r^wv2AT7A26wmeC+^@){}ubz*8Z z(gr%!KO6$&Y?S<5eN?K%|Jx$gPS#M|>`~-F7+qgTpHiltm7bK9mYJT#{LVRL1XP}g z6MPCP?*Xtr(i`kC{PTFkH|;15LzG{wppcoIscuw~kfaI7NJ+NJPOsDcZ+)1y7J%Cm zIQq=YH;qUf=yw){u%iR~KY)N^ZNE8w-{n7|7AVA=h;>@q4l&5ZxteynHHs+7>=cTR z)ZE_aQ6QNrvmq7z^Ex|ylhk#z@KW$vFt{)5blTGNsMlwdyo%aNlf>GW*Vw7`cjqv@ zr^ls>b}|Z`WNTzuybpv(KeESF(`J3u7UQAv2v9MiIoifsmv$#5ymc@4)jyPU$oyxh zOM|uF`T1Ya7RbA-2%Q>l{8Td*$KQ0<)Do_6MD$(Fh|9vQQS^kxaYu%Qh-lUB!@@Zd zX@d&cTO7;T`%7rwE!9wZm61L**Hm_=5>JpWye8YPP>Bcf+69u`%}trNEc`q?`gk8v z?rth40@+urFTI9|kP_h~K+nh2KuW5QHt*dyTCxL3(1}v=)%=oWd9Ls6Uyk9U(WZPU z1wkguu)-jGF3yzh$|;?qptCAEj6suE>Kb;ZKM2@&n%8izczkJ=BfbMo&lxp~aB)@0JGZHp=EgQ*Nm|G_t z`DJ&W*BU0d@7Pfx#-OS;M!==|S!1kbdSo7%qnaOoZZaX4ePa84eNk*=)eLf%1tP;e z&4N)dOuhUqY*!8p0Bn*`KDj*2FJLdB1>X9Hap>r)o)9mQ(zv@#`cen!_Phyd9Nj~4 z@vYGu1l3-7hTGy6KG!K@L`dm@cVx9jeeIvIbu=X`%^qK`m2?D35$adOvqWB!SZe4< z(M@oKziv5Y=*dE9 zvgh!h3TJ7NiJ=$>In_NiF^=yZxFIHz22AhCx38DHoQcRWy9*Z?RlfZxYZ|p1IdXb^ zzvmk^@;qm!utbyhlIgw&*XvFRv8AhG(Sv)W8!;N!(Bl8K&JvvqcS4>_HJ)5cr`io@ zgLhA&CuN~rfuv;y90X8j)GsrYSevRQwi0ZD!X4wLg%QmAK_)g31h{9vLmK&5Hg#wv%kG&!t=7y&zbO`$E6M6QnD;1R`m;m2i zuB*($2u=Q8KCh1@LreSkG-uG4UZE`(DDZ{U>uCCmxvPbE%LAfVA^Ts-7sJlbl&cI+3eAqg zaTFvFqXe}eq4Yr@Cn=0~xs=wdgy~kFwN!r+#rwHJ6W|d;jZ)v`@qC=itLpc2h=y8O z!wOc`)gD9qi#(X}?@G3(pd#WW!Iu#MfGI?Y|MD-8#-J%4iAtj(jSvpR0HrrkK@O%- z9>m6o9(Ro?b*vl+lPGP=SS_F=Exv;BAk6YLr7x9D`ks!wvWcaM188EMnDgBBk8)hv zZ+n*9>>S3a#MGgF=>ktV64w?cDTFDsZzRbFhS*(*9--KFP=PU}^dp~NrH|;DyphHa zbGARX_Ot@BQ?$oP+9Aq)+>c&E-=jUtwCj(>KLe??A%DUziB`}E79~(+bp0SbIT^nA z81?2&`SyiFWoAjL6_pU?Z1omjX{j(_E%|&ZLAaT?T4hE_6ng|szCo590jNIx=tO?V zob?T&*hBt34H5i_Jpm|=m?$Zb-@!gU3{w(tc%FTHrd`SD%`H-d@l9&$#q^DZ8|hy8 zK9J8FjkR9}2OKEoYur$b5|#u6+*ryH>5uYV1#H@rZKwKuv|ZD<$vaK8kkdA@51*74 zq7qEa=vw}gku!yTd2329(Rj06uzwol>^P)nOC^d74C#9;(kpI$g195p&NN`9jP)g= zwwRyOe&s6Dj2c$GDSU)X-XO+1h+4|6!`4BZEKPf(8+S*9hMo)_NW zLge@s82YM3jPPEQaHJ>#@w)(4^Y(6LvI3 zUk$1X(j9DjrEi~WMv;vlku1;YMwL`x`xB!Nu3WlJdtD4}WIGlY4e)91F+oZ|e%s_s zT#45IDy+SMjVTHtXb;XR`nZ^p4`N`=9f~fcx1Cme1-JNH34W`Gmob~)^|Uh+U_2QR zc%fURjpM}2v@_^x+$q*7U*kD+<)7*BJV6tc7EIE3iYDw;%yIK!0c#yYrq#ToQE=Ln zlQ?`U(jtLUx!f>%tueTUvbbGv<;Ber&iso6$4-g^)r@deU^lTp!d7O@UG4g2gL`wu z-;y7&Oc^iW%@8kOddCbA!|aCiBdxRv@srXCu z?+7n!ISZ^9gWM4=i#~)7z8!J1@1|p3Eh1?6#>9?%{4DUT<7479;gwJXnZc+_x(BPUl@eK$BY z8c(9ijHBxzl1CMAtjwCCG#HtWDa75;CDqL{b^*2%u13GFa^@Hx-1Av#E1B{WyV26l z&}x+3L;efi5?s$scCT;5ol~mf0N;R%Mt?YZxn~y^U;jJo$yVfMSJHGG)ivOv$CTz+ zptxKLe8IS^G!LY)812UC34`v>|u8bU6jH&fy=Npcr^Dw<|r^YygZ-wi|^nw00 z5sR9k*IG6d_|$oOUcQ{Oqian3MqZ0ka)enpNcKwjJxenv)9w56%${rxe?M;OJ7xKdq3yTs!NVz;0 z?n?nj+g1VSkh{C+17uMJaW}{L5Uh5~Y7?!|AvZSHeu!8|bIvSPQEYQYK1BUx&zL zWuoX>tZX$~&cp+4swJih+E<*?ch+0zAO|48H)Omcn9d6L$a|g;=S#%?4T^cuXf<~{ z&5LB`3o;;hQDun)`t`i8{fR_K$_F#Ko$Y?j=CI%S?BVzvQvZFw&UFAuEt?#7!A)z@ z6l=SPK9=zjojP{X>M>PZa>EUjQy6n5)PNU87AH7w&;85WZ2M0C^sF6sT-0*8nt=P3 z)4$4g&3)qngwP?^ETr`YyiYVNK1^YI@P_tYs}S(20H;!w6}GoZwuZ<%NT~P@RIWe$~YrwHx%)qXW(>aLBHmKT@$(hXBmo}BofXi1+XWC8KB6=&ap(5kqPe6MrlHSQ|OgpnE4$L{9FK=x?6DgzBr z2Pxm6=&@URx1<1(cSZ*HJwy7(z4}rf6o?F2St2T z07AcOKj((Wv5vaa($&hZ|^HsXr;aI6rocFs4^{qk5Ih4M#yjpZ+n4tx7Pk z1?dQMC-NmL&tfZEffh|ZSPk_|3`|Nm0iFzBGbwcdcK!D}9~{@6>W$4QP67242^--j z51d1xTWTS?^v<0d+HV8=B43%{jhC~4yP}SseznSC{aFzR0=9+9_2vBy`^GomI^c?r zvbXX<8=XGj6s7|K0AhJ0O$Dh9W&2)Ek{|$qAfW5PV1_KhJQDgvu63|H90$ zF^a}z&}oT!wa!y6l$9oe)A<4eM0^2}I}w@9BapO+wbil3J(QI zNY&Pe!k*=d$g_kINoJ@lqYh37z9m=AHV|glc|F;B%<9IA$w4z1@KCu>r#5Ff*J>hzpX?RpeMD5*gSf$Z@A1_N0^AGW8swz? znBCGIDSqaucOv&Gx9%oAu=*hqdS7>xLbQZT)~-${(maqpJ_7jIC+oY*J$L3wbIjiS zBI2zf?@2Bh%&Z4P7%IT`j_tNG%X?}MhO_8voUGtZCw z61T#BdD1AsD?-zH@AJs2Z}6Q`i5y((<1JgZpu#v<$&LC?d9a5M3H^hI~2ecJBBj}V0;)@ab(B8iEkR^gKMCht#boD!06EZ+k5I9hkcItJVt0uKs zWHytT9IB&bRu3p-PDv~yUAYKGdpnXdZ*a0cb{MTj3(5c~wvQMqY8ZA5y80TmbGkAy z>8687QqhArT61&&8HwIApchEr+9h4FQQvAb>-)a?}8j$csE%vsAwN10Q;R zqyZMRXjysi5k$%fh<3m z66Tse#4KJv0q&~P)qVecI+3KQyvOj3K_7Wrosu(Xr)!a+r`U@%J)GDK11o*DgGXv@ zlj2w=nLP~!m==vH-?;Le&^g<}!Iu{Gxskt)<<&;PIuc&d&1R?7r*%s)ve=qsM5z{LvQt&C9O7sT#8SnPBaN-P}-?>gg{2##kLGOqOSd%*fA|e^=u7HmY z?86rmB47g0fax8xtxxb{JeLm=Z0MMKbxk@_K=kJ}^PfQ=yj*vGE&-P#-MEDNqK2V^ z0}NV90AfI$zuUpTIs~<~qM;4sfVSa6r?;Mge{Zcn)tevbuN~D?0hiXa()+>wX^CxZYjH3sFjJ($3 zX%jN9b&2So$FFRCug;qgX7hX6s3`&KjB%eY)GUZyhs;%?ZJZLkoJ^p<>`b)q|1@fI zv#mO(EZPq=7la@F9igd;0bD~m{-~J}$^tSb=T7E^DE`^#^_^s!h1P-0`ayRHvLNxw*D&N*V^SHeyO|RuNV-mp6O3c>#T*o69vJ( zHwdNP^n~=bztaTh>v7%i&hQCjX$ydOH}4*MXo@4U9=u4Jg%kE{Bp& z(*A9|h+gxT7+cR1pE7(hY$^p&R0o|i$j``lx8^S93@jCE62ApT*0wpMmy9MP#4)t6 zLBOK@fl5ih_V%`Er!)}2U)!9f3VAn*PZZE;MCy<%ig_sVzkgkpastNPRB+~0W*Ii*63gH=OKP|7S4rH)=Sn=BV2S7XaxhRfD)icnOo}9}A2^sBXx>GW5ElSOl7{v6KOp-o ze>-qiih=*@+w}21 zb6ICe$E3rEqH05&js@fj$foWU0VIVENC@rF;u>?!y zk)tNDkcbqc$sC6Q2D}bWw4=e0v5O_TY0JZ0&B?EREVr-!q26~-@|Q2ItMy=yBGaz8 zG2~a5;OVnbysdZv>sI_^G}fVeD46eLol}0=xE0>@rTRwoHNbJ_Fx`)QZ(RkVt>-ok z5-M5?cJIwadE>#7L+Xe;y{cw!$tX(52RnBirVj|@rkx22m5#EqvhElKLOeb;E?0FS z9;pR-B;6$EKe?kLA9tc??b*!IC~QqS`?<5T$JjW;j>7P;aHFk0e4p zDa^rb1#@Lb;U5iD#Pb0qCvV4YbLv)bT=1NRJ=Pmhet9PH5k{Z2O}=OmQWmIXzA5TZ z!MJe7v?(bpZc-Rhorimv#7WT9r61QIZ4w~B=Bc{s^={I z`~>oKvmNy#A{fS(siq;n8*``x1gFjnp_6{-(BV!>XRhLrT^`zc1qPUM8!~Re=q-o8 zBkAJV8r%17MJJeWonKgm=v$b$F&3djh%L8JaS$h#VHJ4@v~uli7oInYphFru9ahFhR&_LA3aNg0{PR#6VSRU(R?Yw zO%A{thDT{PK^=Y4T+sV>uSDHEuUM06ks7W{8zIe%+-{>N+SxkG#!ssHusj(MwYl)y zE00_x!pqBLX)zGR8R9Jm@OxBvBqMQe^9Ev>3P&b&2a6ISFqL|H<^6g?oiuz^`5 zj0=ch$Xv#TRV5aO@eIvzJZZU0sUED!CDRdgd|OJl`;ys>@}gA4uvU45*LIi>S}0B{ zsM^WltnLPiIC4T3Mk1??3K}5T{B1&L5))dyaq@{X?EaO2%`F}3oDw4wO35B%m`pV) zG;y%nlk*M1oI!6e0!2B3Xd7YV44yggcAc;BQ8nl;D`>wIwA&`68@k9of)5q*0BkNy zcvM6?4l%#XY_3ORU$QKsMX}I6fsn*jx1$9JY6_{V6SJ-@OB3fel939`X%JI0adrLA z9FD$El9;-sn5;#zfb|axmjJmcF_%CaQ3DwZH49}^u@a(CANL?_>jeWA9qN@y;QyV+?B~u8XOMc0_ z3#0%_4?x$_$XiLaV^BzUqp*;vyqR8Ps<5<~qmhz)C4EAArFK$YU3PL_davSElrA(> zJJN;HBV(!@f~osvcg%KBrnUs}AAJrEHV*0*i$^{NztIV&Al_tkCrA60W5vXb?of#c zOtC{V!c+@0d_KO=#-+l8>96jinBnfHB{W)Ea1lOIJ{AUWG6kI^4J9pJ&!$e4_#kmV zd2{uhX7R&lStrRIC!$;mJ`Yj-9a8-;$>HrxJ zz~{ouTYkD@Flm{cmZD#+u#%Oyk!GcyrK6Riw2@Td|Me265^h0`KFLo?F)+y}%Iw_s zbcWUQ0D0+YnY9Md)OCu0tYiodie65xJ|a~K;L+71r2vrn#)FuzhqsuogCyR3w|q+^ z!MfXj)W%S%m8%ue>1ph#k^Fht?1vY7*!G?Oy4 z1IBn&BVb%ei3=S>D7~j7VT_qfo$_NCo01S#kAw+AC*XN~l6_6c*z;0VR)K-wi_J&xvW^6CD71b}^+b0+ z=Y)(PgbR`GwvpvR5+=Db5(d`?bApr9#uLOGaGSETTWsdEr|tDtriVu!kz4t15cq8j z_{O-5`E2UJn7dr!1DM7u!%_zb1JR3Nr?4=}WBY1sQ|k$LPTSr+_AY<&jO-~M{eM|(cix}%gs&QvR)1YaM6&?I} z$Rr^qJgkMOUEMs4YOO)N3CYM^lDpw#IIcO*?`x^&)vb0!nIwOo!JKP!7aYkVS$XK$ zfeaJ-D~MU=2y7%qdDQf&j=WInJSs3?oOm3~u2JwH4|60{fys$s>U$A)+4v^AIy14C zRm9)%WE>H}^#vRwL@{xp87%uB9#B@4*;GI)wW2sNyfPhvUlP%gqP3lWXNKWdv2DnA z%a}w;b&`{3P1wS{>2ZCk5HNJ{T>rf@{TtkK&0%xpS@#KQ++~@((s=$B@V z_x<&@X=IN+X>IC|ak)4JgV%O(yecKe0Vm==wBB-C2n14y8W!Rn=z+pT7EZOt-s8@1?fUqydL~A6`9Htg8i!JWYg)<;kOvXbu`d8U^QeCO*JU@ zOcYsym?nW5T;HhNufU}mS~y(sd=cTItwoW7m_#RvdgwBivKVxHL>pktsQjY>7D?{r*!=^jTPN&8ZJjVvJ8M!(P` z+i2rh!rTimgw-{KJ|{Wl5HR04Rb%l40iDYN;pJOBoZTwRWj=w;t87>r5MEL2>|z{| zS|mM*V39E8F0^Yh{EevK3>*^N16!Q>tQbYRSGTR;;5I2&$F+-3oG&Ff3=uI#@_HeBdB1Y=9G-NV?$2{Bl1a^n3>9mNgbm|9R5Y zntFM>&Di%dxpB9|sT`Z^SN;@@R%gfhh1<={MBq=kB&*`3x@^lD?l(id?rCDm3==Ji ztn|9F-fEtHXj_BkJQE>cl^XlWVI{1p#-Mf};5_$wlU5Th|MVlb_zOZ4F&40o6(ahd zoFjJ>whAf}`k!R@|H*1~MF~loX_|n{JPsz#VU%jh|Mg|)`=~e?{u|1Fs2e!ZOZnQ1 zso0oS`-s^7v_!ztsOf0(I%=XNQ>>a%i1Sd4E=(Xy+X*(tde#<#ARVQrp{1k^V+Om9 zp8h9yXx3<`(9?^7$Wth28$>y21%XAO71;S&z${!7A?8i+L;uGqmKAXke7OLQm7=Fv zILfjaC$<4wioD|QS?V@Q*e%GKWRYP$P<~8$4CH1dGRjJRTr=UgHOZW8U(ch*J$stz z;=I6uXJvkrX6;`oO~D{f0|J#0(jS->oD)R7z-h0iQNXh4SUTcn&=WtL;nO+A0`?IM zy}e`%r1Jpq5I-xL4SGdxeWfe`-j2ThpRpafmo%KTa1a^IzAB>ORpLorF+yHJ&7B1^ z3DX;wC||1v<4}>Z)I8n2gjQ=*FX-c^C~cJ(R1*ZDA|zzw$fQ6i>#JpChJez>$=VkG~th}t2t0TBQJX&qa$5O z4O2NHSj_6l)^3?di^2iE<5-lCY zhTe>xV)T&0&Qo8^a#7%cT|Fi}05o&yU|2hWsd*fOHZKe!f;rvA7`ZV4!YgRo3bS0i zSz0HU<(eG5mLmC@QcWDG7j%Xq_E!;!(#I?tD7Fjw$~>bzWkD&hGD<1cg<`BJTE6yV zVPA>nf5Toqt2=QjQx4j~C2-+LU#HDOaf|aEp^cjH>M8&Jdgc()l>Sf?45-H&;`kgm z(CI(uLiMOKE;dW?zl z_<>K3NgJtJYW5J}-IP$>Do@6dCN_Cyz?@W8%BzjCsbl8R9r@%6ojfUVyFqrhK{U;j z2eI%V&l=i$-1eRAQ)H7#+gxGhAOW=ddsdm(7oF6*CxL{do)CG^SP4OTAHq`I zCTrin+YYE##g1hG*xKFUp82}t@7(C%;9$zDyLg{~ou|Cy^UbOC5g)FPp^D@HDdxv+ z-l-}ZKKiI`sM*IatCP+bzT+s~Eyh2vZO_Xn~Zn_P}$VcZCwXNWXF&QT( zemw?>IFjyE>BsA%3wbikh^B^b-z<~kh#FMn?c%Sa?SJ?Bam$Q7@oR|w_yn=MqH7`J z_M`)ifEqQaw3I6J&3mWpx>TsCBus1`U{m-*pEgJmp?{yNEgl$O-`CNx8v*J2O#@H@ zK(t@S&mUdDKwljkqSaOJHcpP*_;^SI>dhq9VQjmS(Xa<9aGDbW=~kb2>td$eq3ecp zD%~MZ^hAQ7={95*v61m+h*0wu9@`QYl`%S$w{UVUbKPhd` z1&H4dN5w-o0#ytJ>h$9wwRRZ1YdnPZgK!A1?*aq*2EMM;r1men9mYjvZQ=ftAQxA>o{<5a5R%PMyKm|W$K#8b5AV4;?VhF1tUvK#yRaA1;QlLkg zV7W8ki$k<7fl#26mY#G$mPz*kSkD(>pv3Q{B&Qm6>RxN@M8}8|&n3Jx7V&f)9AKec z3)Ceqd%v+E(;HMvtVJiMUsaqnl+igr!EK)D!NWPS@CiF};I=S3DD-BK0rX`@GrF4G zo2FJV)zhzh*z+3Sm$M1WqAA{zrZPY_7Lnlw*~9s3dgy3s7uXd+njA^(lRMj-FxrCh z(f6hjI-*-yOE0D!Ka91 zw77!VKA;v7EhG|1i6|5st=xxTQxrRnkKQ!`G?{z}LgY-`O-WlrCgBepv!EzJSUNV@ zT4mjVcJ^@}nn94H5G~HfgL_=^wwhZy0dGo!q(!3AD{*>DORvqRjb89Noixd&;a43q zKt|mL5;xUJviQ2_m<$82K+gqk3JP7r@05Dg8#}V^w6dOu4 z=z#~fnsSROw@}&E&)JpRjmx4vpt|}*5*)34H>%R-jozB?QadixT5GXOD zM_imDDI6jw=EI)FMuTqqdqFrT_(K8;RGOAY`{6{jG_0ZWa@xTMp3+A3t>tdQ4LQ9! zZ!Uw*A&kU+EBgOt;OTf*Oh`ZqaQL2?Armrp-PmE(pQ|q^>pd8S;~p@%Te@?l`uV6^ z*K*wZD6A7ChWcx6OURizU6WgeLDluLuH|p9_VIokEYq9s1k$cdT%I3Mjx)}#doY$_}G?6+;=n9*}IG1Fl7MsEub ziUg6O8+5_QE#0iEpuhs+C;aAC3nrut7^+7jy>d(6@e5P_+4hJ6;0Beo6rn~S+DV)u znvC3k`ZuD?*T|@cWQ=Q?DOf8>JkKT3jNil}_rR zXuB^w%0HMZ%Yx`p$6daG$J0Tw%NOf$RNU=1uKtvmHsfi;KXsaS)gr-zw{?`Eck^wz**NA3&DU%_tncM3)-0`PFyC24ZN?1i zD71cjZ;ye;uPiCn7N*eILs_9U{Lpq~t|FQ)CepE}o!X2J=4s-KE87lzZ2OswdVt+T z!!X5;xqm+BnQ8=T?exctzT1s8H9CJG=vcs^U`*m(51e!1|0`ky;Ko_VtVjvvtcB3( zckfZ(y+$5VkEKa*7D5=dN6jZ=;DDSJehzfU9OYYX%VY=8pom7sHU3u41>GM9jA)PF z3I)QP=QBP~nV%yKYKk;bBQ9+;M#g2cnHaR!=oMU#Tg+M335FcO6?S$>i_y%$WBeV1 zt|FJ@(N|P&Py@35LAD)EC+6TI1FbMEDtK zu*lIE7fJTbN-35f$nWxudTzb-DESw4-D>FLKbR&kL&VqBFWs>6*zZ>GcBiuJRt#Q$ zEk@1w2Jub#J)kaYhzl#XV1myPwg93N%pHnw->tA@E_(e=*I@zBe>3NIvV?b{PLEla*Xa5>+{Zq;4n9POd}fc|+U-gwJ6 z`W<%Ot3+skv-Bs>Z$lw*P+#A;;M_F0CfHq_-Oc?$R<4RLB3(=t^p>{n>qr2L8 zCE56tq|m}e;FQCw1E#Kkx_rjEMc}O8Wg|-AN~HW-j%dVI8bcav@3`XS#+K((lueQ5 zMzamGG$oyfCcbWqzRiuSWE~U})4DUxt(hH$zz-w1^Qrhx;$qnv=x;|35SNyuX2{YH z0oo(eYKP_=qJ49kgE)NgzemzkG>hPd^bJEO=EOh^86y~57y7KkqvI6&LK^xR^D^#> zW_AfYt@={lsOLbA&W1lZkuvmb6`|03Xx(z^OxAQ=mQj%bG0icJ?Y$<9E;<%NRI13g zVnh5)qrX?Jj+DcW70ZlO*6hbc< zsb~A9P0mc&?X*@_Y|fu5r5uCSCj9X-Jp4NV`by)PwxjRyFw#`$Ip%47gLju7LEfDF zW_0pl24myIh!MXo-Xz6f<~2Jb-ifNzsa+|@vZO|r>zH%i-X(haiUWIg{M?*>;+BAt z{x7ARcS>3XP=R5=LKcTX;~tgE7K74JyhF6+r{(e4>QkRbeL z2gbCQmPaWuGAWxSLD&uFXS@5)_oEeZmAi`N`n8I8g29cv$KPP^nFwxN#%vEfxR zh)qZ%i~Sj!t0mb5Tz{jdEx6YuFFGXzU6KG8?L@R~y=yI$HN~>U380ZLkW{2pNr3jU z)a?(_Kxq~tK4C0+R5w+yo38<;_)=0Ksr8|=sDz?P*-Sn^vt_HxSiGrB1+9@1wIzlv zZ%JRh)9{Y&zCr-$1!C#jk$LSr=mo4*`*oGiVc*D!Jc25M{Ek(_dM=)3f1#m4(@D>& zqvN|*rw50K-bsRR`Gb`EzZf`BWczo72a#mL=BeAUrTAjr-cfN{6F#RlZA$fL-z&(% z{B>GT5y<$O*=f?Y?SxD2%S)OeE5~MQW2d{WGg5tE&fS3aRa(V|Z)uaYXgbiZdxw_$ ztTOLAiw}F``MF_*oYb{w!>|it6r-rh&d10+9mH^bahu5ew64P43ky)~HP#r8BA$hx zqj$v2cP^7oBOaGA+&pUNHq-o(Go zEcwvwo9pa4Q~axqKhZ?-)*P}T#Ra=MRI47=EIQ_qIZ#w))ZhTp4P6>HY3WSjg|vs4t~pA^ zRSkYomHVnx-;8OmWo14hy%Ob`7llhhtydD6L0$)b3-g4H9HC=geRV-z7O!cNjG7jT zL7=(7Mi0pbRco-+k@!Ec7?!e=S1hXDb@oeMQF@9B#;IRT=15Z}GM~b|Y06S&tA^Hh zNDTH5q@=fWRI4PZ5TM%E6O2nsvhEco8v~OXQ!L zsh?RY zc${@oy>8S%5LSpHfuSR!pi};2X-89{N#illH@CG#9*? zy>_ykk-YQz>g5SCJYN1jA3&urv(>MG@%=hmF#NjWUk}{zgwOci@Mz`7lZKW=x}7CpmbvkgY@$FR`zA-|bK(vZr69p`tBVuHlfd=gEz|+@>UH_IRJJsQ zZ-v#kKV_XE6`X8am2RfsR-uz@CtX->kBRaBVNN0OWqyrI_Ijb(NwI) z>~2ZLNh%#~$`V@_B#F-IT$$=D#K}@7b;Vm;Y20Y6I5nDN(JZE&>xYl0xv5dgPK1pC z%Q!cT_ZRDsSxWDV0fS0-oSjuoiz7uCX3&5J#e=&exU#%-6grwTqbz*|0@-Ak z$-wHeG?nh^q}EPXQ&pLn;74CQy7n*dES~13cQ2m&1>#-7{RQh=mHtX*V8K4jr0ad3 z=l!gw|6cw4-QM@VJ^tg{^p_7`|FqtKQSXb-I}ixIgc)6sGwMi1V^`2QlS-_CEn_Ye zNUBz`YfL`%xFCuPd712e{apHTt&!fT!R7thA}IIcI9YA|N0=9#bbL zuGb;`>xKQqFm=Z~qFGS=NE!wXiV}9#B~v0xhiWuO&?P^k zcG<^gl#5fz;u=WF%7QA4NrNlQ=}*o2;IKCu4f-%Sot_N)1DM=}!^wC$xIf*=?Mjy% z62~<1O_u4C=im6GNS{TL3S}R(V7r3tDysNqn(Uoke*EU|FD3MXdTzi%YU@7{S<)8F zLp~#+bj_-?Amm>0mKBSI=1y12EG=F5>YLm>BiZ#%ps;icps{7g4=mTD=epKIbjgz} z)*W!sqe||Um|0CA5`r?J2E^--MXCcnlVldsuCBVhlGIPimB}dH!zjF1j8Olt(4%Ee zm3Qvj&9c!R_bH-0zKl&H5l7IWRdQlpI;7PCA1}Gfq6HO9b*Ca((UM2I*qW>yLDBtY zyVEo^>P22mb%!|FixOFG-Ogo;*)+rj9kz*TK6oO-(r z{lU>O-nr>;{F&j{?Blfw+tp;7o7=8A66l2?KR2})9nPxe3d7*(DhM{834G6-u!|Xd zJedwU(5C@eg(}Y!JQ86;0Yyg$=KD0#I%U!5j0qksQA?e8ZNY-`FHysjeABDnjw?gY zv`L4_TYwEOTH~#RK;GPRy-*gMTUvC_IO#PuPFOniZM+9s&9TsppftDTE4%a>2NYmpS1ViZ@@9d0qIWrJAESoer13X zZ?nqna+RGQZr(&>Z}%LbYw#8%no~2Moaw-E#-P{|*Bp`WHefJ5IX%Wv4RZ3zJ%I)4 zi5F6wTDBeOGHq;`j-hZ|L#VOo zubo@3>`eLc>A^oQ{s-Ec#y&27n zuFt*S7v9Y&F=s?QmyA!#e`Mb)uipRi%r@znZ^?_roc_R(;w;Zm$3wv}B0ks^1i>eX zRHFh48B-d>1PY$wgmFwkY0RO4sX>hx3XPzTsfM)3Gd8wZH)k0ng2cJ_X)BCtl$>VS z$-wu)+$KHqH|a0-DnfBI!?AryT3n?!a?B*BlFp$ml~nbuf{!&5+`T$QjCj+Po@_9DQ7*Y`-&}qO zHrfU2n(>De#5aFlzckQWTRi9tXqtvye6;l3*4KExyFLkH+3m*D@V?kb?PlHAb;rwh z$(NN^b2WvxF%-c84+b;Ac-Vv;dQti2COwCt0Bd0oLIT3~r=#<^@Dkb&?88ZG_Xt=E=hrkJXgYdkaoO zEnKV{Okw8FJ)q?b%{c-Tq{^lz|4YXx~j z_VF3Z)^+ETE9`udluB3&ztk(aX?1JwDTM3~p<28)Mw{s(0eW_%6LeYSt`9QPt4~>?RmNTf}HIi+4(2& zCfPMnRRwDlF<0Kp8GOcb?tvDB>EDWkOQ)zn%zch`%^_zr1B z>?ZaZgho?YQGZ@btiHu($5mP72Vfio#yhhpiP>h*qZ|nB=vbFd*5KM=*GKilB^Eax z#?Z$;(hfC78EHg~BLLVwKL%ZEPRcff)Gy!Y29IFw%a%`e| z0&#$j(IrZB8xNT>0=`?0oI4A6Ej}aBs=r|LZeQV?`r-2_o;m*!&F23<(=x26_r`sQ@i2LHfTA$7S{IJxEgXeVX2^YF0jB`SR zBJsWHSDJlvtD-we4A>?doTUoh`Q8{IvRSDcM;&U(l{*X9#pQ5Jp9SJaugLc}){R6N z7M8G4dL@+YhgRrHoEYv$S%0;fLF%tk^!8ULdNW7TQN}%ILfFLS!Ji}S{cY1{K9*JQ zPrQWWPC7-S^pWhGEVA(Mv@VhJulEoz?{D9J`0X0r-Mo8Pc$~hT^*Py7vX*YR&%NTS z->25PV-j#@=dswq0E_{vbWJ@?hUM;k1u6Zmz<&)HOo~D%RTN~TliQt=j=6W9T+`%V zMD^3h?OKOpc$|e)&rcIU6iy2$EJQ*=1T>_N?S;a2O^6p8YG|}@5kqJVB!q01-Dx{< zx>I*%5lpm+2d;+9pJ3w2lO~=#dGqdpt9SncFV4*F!d7aWJ?xve@8|cvw;vbI3o}J1 zuav=~J`UOyc-GuJpZVTzg|rKf(~5W$BF6#T?a`2fd&DS-ICA2P^w(U3y}mW zfMu1+j;*0u9q@CWKrN86|It~?UWdN9;!unN0{2?}J%uv7(eJx=z}EQznVdo|S4 zcv{ek0xwgq%IjR^jfW*i_#9nom$i%7%dg$mv#G|T(Jg98yvmb4L!@PEz_eb%hXbtL z(FtZ;qju?G4d%_%lO9RNGSv5LkDBF1v%XV-hH6ZC=?-+Yn1M?|q3epx_LdwT(h?UwXg6f4y-kPE|HQP5c zn)tm6rhHc8o6RvNNMH81zTH%{F02+qIihFWCa$n z%}gwlnM4#oKv_XoS0UKbH^9d;IKGmSij}&OYMZmY+pK=UmDx--tu~HX`81oAHMf@C^6lkQYlO8@t3*G16{Sn_8H3M! zKBsRGVIs&Z8Mmy~TUqj&J!oAEu14EVGb?H^L&}L%WxcNi(*~sIXUZB~iJE~>Bb2k* zj3j@(xw*PLzh+lApTAtN{EQ{q6zKOfWn5L^aqS2_e8B(G8JPHA_~9N(Uz z&+xRyr(Ox6k#;3EtSF?Ct|$@+d$UAMGUiiayJTQOa6f}kECVn1q#u@R*+_>Q&oACG z?raEjYnW7rW_^lL2tQ=mI&DM&_QAa~ymW;(N^xaMn}*l&Ur`khp)EE>H-$C{W++X) z&rjBIC(A~-ovs4DpoxkJ{6&!ZGsYmUdk>6bv=qJnHJpAvfMe_K&uz*L0gsBjD(0iU60MwpT`#49)5GB?g5+Y*2jr4Zc)?Yq-_ zAcm-q=&nE+spwq|HecT`iW&JCrSI17nSMPU)?gtH&L;{Dcif?V@D_CrNLSW&Nkt#! zA!23*=#;#1_h3E8mVnz)_GWJMJ{3BdWmlfq<*U!1)oUdvy6!U=jy7 z%v#+hClgx-F=xDOg{rU}jg3Slk5Tvv8e_n9YK?#bx(3>~JGmcw>~uT0Q+?d;ee1o8 zbJ;J4wNX){B7Q_|#s4!K4$K?uF!g6cSs6tJq@#Pn-wG3L$Q12>0j#P>^sYw~o4aQ} zoq2`hC>o0masEX?ueMN>a8ncYy?44Co=;wK_I#RGFXZug4Zr-z&?D-YYtoIvW;N8j%PTY6YiKA;)Hr4{V*sT3`iP69Da1>bc6nV~!keaiFnfaK%Ml2sfZ zBJLk3bmYgTQ0_$eZ5T=74iI;w3lxLq3YXMQS~{WOwq}rOumj6Gfm;@P9v_ci(_V{$ z&}*;Y&{6(Pz5Y}}YrQplvFs`~?($s}8T*Yx(JYyUaLgl|!*FlMkN^veaKp4U&SH04 zpsykO-6%@jQ(ZCf97wz|CjGsyv z14YN$*woLf@Cz3LStCjoMJ-e}Cr9b)Fu|2YcYYHNtdj}q9c&;Iykcd)|GggE6vbXicqJ1>0Sqk)N=h)bh=gAc=$6ZMtZ4TG^%(Ze+<7rKU!&|NUl2N+Ko7O49U-9@YzNY>6BW=k*y5yGIW8 z56B{3vgoo;vUGLuPkhqptde+5e1DatSwelEu=OTRQWDI09A+u?Gcc5u_}R&gH;v zr_))40q0~ETpkDM;tGbx^FQe#?e;qaK91uI<~&V;MM~xYr$i14 zndAXS3Qyjmt3u+R(nB#<+Y&8RwN)R8lb>_ z;R_lC35yBN#wCFloUI5GAWY(fL~-hM3VQubkOXTnu8+Tu7zgnIGm6+Rin^qf#soI7 zxc18V35C~DpUjes_6TxRn_8}KnfDSD2orbAn^QtRFT!j|mqeHdN)w13aGH9$V2baO zHtv+55IrSXMMX+i$h9VXW5`1*K-)+`uD+q~rJ8S+@EufUsM^p>z(6P`aXLotThl0| z%Tbbmr{-=pSfuO|)ts&TS~}cm5`SV#kbe-7Kuka(khSu!6`1)th_(b=nO?>Tqg=^# zHh4v*!`GwZL9Wq#MZiO)`CrtG?bpLEpMo%>UyEU2P5v#1X8cyG(?Je|C~;RoZYtXzY7c~<8y5Gh zq{KcIJ)p1#sX@j#2-!6)LVRCx;dz+w=)pXU7uWqh*=*CRI4XTz+Wzs@SisCP`3Ixb zB~4Xy%Gvg#U=3o0mq8Y$hbM7FEAu29UhSC*mIWax6GHaLK?}*E>nOg7 zl#WL42FIsIqrRaP`RWX^4v*Kgh!tFzHMzN>5ypv>!MjBqEg5EAFg=JOYnt{ug%=14 zd1xJk4DApp#1T1X(K5c_WHPmnejd+dFb=>(=Lrm@2}k>)o0JT%Ak3@q@U@5Bj$%UEc*3{_I|1u?yLQ|xQogryN2do z0lA2b$ubtwO|QW6i~*=>or7xlQqnkFNGaHOLFu`pJTVA4p40ikb2(GVubnOMa8B#I z-O4X)VyDq3mc$VT4R5nGGwGaO1+YW#SwBw(3IbO1N-64gyN?abs4Cndi_2BKue||POpN`G|@j6ofPPb>0h`H03UqLY5CJa(Ys_Syl zR~uis$PepTypj8EDRqo&a|-KFUn$##z>w0<5PsByN=!reRa@Q)_tbo^g60b2QLp(m z+qhlS+;8M)FdH3=-VKl5yckLAs$(>bdivq!@9qZ={@>m2KH~UF@b}c) z@BU44#V#XMph{_e2^wJu#Li+6aOBsdERb+nMEE|7SnB&KH=BmuGj=aBbg!m_s_f*j zW)7=~9&D=;93WTY7}I3x0pzPr!cdcyKt++F%F>_d)SAU>CA~` zgnD9r*DKUi<}N|FCKdC6IausANTCvpa>mxdwe&dk+|?!0tE#qZp;t=OD$L#6hgr>{ zF-X+x7_}g!_e>yB%-r#^ua2+LCO5B13bCp=AX zii^=U&QcQ608jJCU`7^KLDIDs|3+kKiz}Lbay7pH#|4fN;Oxy5i(ZyM1qS@6D#f#! zTZ^H!n3ybw4)anmA@y@6=Mk5A=Ml&M9JD0eiYnU0MbuaA0E%&8c@e#Y(aZAeNzSUt;wHz@8G zd0rRT#kBw!3GxTi*$4_wyWo6DJy%Atl6RTJ*@nB_W-F?UbshP}F{c#nVVRJ>bLy)! zFyuPoMP&l0SQnU&`h(E3^hGqv&#XQAv5*V>m<6Gq##Q_%6M<OBY1Zk6Bz5BAYD6s%V@OH*Sl@2UwZZh>uWC^#SL3d<3T z`Ra%sRsk$3=3mlCX43`~EHF2EZX`J{RIC#<>T0zK@gCQ&rBr=p-6yt;LUOS%-YFVy zrwLs$bdFuUH_ItUuH#h}E$|3mQx}k>2_9*NA=;K(8(JyYEiAOv?3;WFNUKWz9++6! zu1PxY6)Qmvq2h}<+bt-gNhum~Vv63TG`s&5scHvzwL=~$EDIZL!qSQApcQ|DRRXxb zyTp_^m&ffV$5urB`^z570Y3o6IJ& z-%rOUugLIdFrAJdT0itM(%>dhxIG84tF<|M!q8OHC#k2q#@FOvrgMkK&c+1abccHS9ZGNEV|)iJw~r^ zVw|%SN@``P?R5N}tlb^^==>G!DOJlD?-YW}=V=EDa%yq%rRheUG#CR-*SG~7+I2UP zS8s=w^@<6e3c1*JwhKnT$9+@_9$Rf+Inr)2j_$<+wN`45yTh6qUHaSF89%I5ai1nd z1&9u!?L%PzVnCh0QTYQsV5_yL@Xab#F!f4Wx1*&zM=$Wvd6veNT$Y-+RY$US#jdx2 zU@R?Pdw_h~>v;taKl$~%ouTFSuo>^_?SjsK zUC^tP1olvV$J=^8WpU61@|$mM{VX_coTVC(#yzh~=`DHn15nD2^(}Bo zTUsyMiYMRYB1HABL-m4#1?-#huAr;DRsjBaLz&~(4*8Ymd}Hg~pklQR{5*VH-Q->= z>^5CaGv2Bqgf7cY=g!vo_h`S4qo9Sgb+Fype*L~3WuqXxe>d)bROi*pJLJLQ8MZ4? zs>6iKVj0jvzh1a&_jlfhG^)+$U+6*A8hcpv-_EpozB$_Cn~=$W%~K`aBagM4i#4m1 zrT*j;z)lH+$;-(ZfFW``o(fE4<)y|%JvUT4*Oh-Iq;}Kk{1>nWM|-W1wVW$@;Krd;LOp>5mvV$Rvp?Q-0_{p3jo-}s-kbOTVB_KE zzFY74rFuiv45Uk&-+uF?r#(vyqSYmZAY3-2bs`wJimIC0Z0M-eGIx?vb)D*d1mA{a z)R2zr1eLKts;bsPhFT>?jcB6i=U3QgvK2W@k|?+&lL``3$lAu+<_W+aOCVKq=ni>` zlatA0Hzd=wqX$*^lrDYi%?0z+U^g_;8*^2M!Juqs@8%2$lEGdSF zDw59NQi>|*L|zk`I-!#T6KzRn+L(_l+9KJFaTBv>o5=ppZa1)`=?T$!RxB1<($saS zLcs8{EK6nLsJi{Uq?Wv=ifVLD%QdXYEzgBQ8FbJjRrFBVHzx(x z2{V*#kOpdCT_2OHM)*FVE z>vnJiZ9 zgrMII2nV{P)BS-Vss=xdF%v^ka-ubr>awq&{vLeT&lqi`QuK@PNqRflFS(^8aic*L z9#%Ff;i#h#qp5*kl~&x%lQ6Sf5YWP9Q|-gG4W_M2Gf! zb)X+b$LP#(kY4W((U14;rAx2$T(IgZh+UnZ6|!$;=2vI4B7d9XX8!LrCeSfox85Qz z<&a4Rgsw*Dm6?H6&hfnPD_WD7#fL-Z;dX9eX+FDWkg7wefd03}I z$99b(`bY3My&Ved{tmqk>)G%OtUpZ;!um-#2kXI8hiPu;5PdN+4FAR= z3rs|0*=}35t?0c(fc_Ri16_1W#@M`z}o*<5;V zF<)58WeT<)lf!2Ky*|uLdt-RXH@fx9@Lk^+JFJj3^uL)&$41_`)R`?{J}|3G19_y*YBc?bK?W_kt=>h=vVSOIVAcedm910e>Binv=m68ci*Q^M?RqMoZi>Rp^9qhZBjPqSHZ*M zjAe&GVp8SfZtWt8-XCbGu=afjr5eB7w4i)yVS`d_qQF#uJ!cZ$V=^n z-&0+mRaasBO-e9R!LP2zcTgwc9Sd3#k)aX(Cu|QJ=C*DgezL3WXECQk5V>Qn$Y(7* zzKt@DD%il5G;mXaF-|laKqanG*PPX?!K)&b4MCQ!63%OSIj_hqeyL5&Xt+wCgBvw$ zu#yNJ9dfGDLadb$#iW@+D%RL#O(NSAWRuM-h=JKf)o_)#X2FhPDDLRgwx$~kk7?*Y zaCP*W+5}sc2%A(ZJHqKMJPXbqW!%nXj$~QkvFaoTNV4b06D}`8d2#b`z09HR;Z*pD zH~iRPhv4`7p+G;5<>-|?JzGD<{E>eFXzV(H;Q@<2c$~X1lW}r8;{^MSfk)&wJ7`W& z1^`4W2MK8&c$}Nu&N!)^al<5M022KJyS%mncmcIoU322b5`E`abm14_7@YEbNm0eE z!dT9d>jeko&AO5lJHTKoDQh;4xTRdS(2lta@km z_1pNZ6>rGIZ@v4+tA2~{I-_ov?jNHM)5#TG4@dvGpU$E_J)|)!q@^+(NUm0Tsa9W& zJ2RO^VV^c}qEm$wByoytsB|rlkhQeXY2hAk)t*ufE$eu*(K&yiQ=8bHsB-~SMy^Pi z+GI;7Mq6Kx1zRol{%?Fi-)K6SN5e@p@BahJZ^GN*!(Bx4Xf}+(A0PX4o8_eQ9DkpY zKIHLx<3-tX}In{4o3!E*>W1(ex%nK~pTxD^&{lm#kEClrNpZ&o_Wi=d zf9ea`sk|7JZEANcYS6KxT%#cwq0~5rzSNuejckr7+febW=_!6e{#jLzd!2hE*XUD! zRIJdsm_hQ`AFDIqUWa*6TH79rpOy$vW<_baUFuxSF*(@Y30~vk8Ex{)A3MF4*zF?} zwY3s`qNo-Jvsj}PpjUhVIYdptnjLJQi2ZkZtY>|?g9#ry6qQCdwD==7<~~{XnFH85 zTXWEKHk`aqm5pW~(qh|%1Zpj=RRRw-2fuSmGb&fvcE`iyHOtp#u~l!3=|Dc!=p0!gK|Vy{ZMh{Dkp>`{ zQwn-5s^lyMuvp`(2{8Gd@%5fKPej1Yq0&R_qqEEYF?dyyh!4ifd1%2s+j|50UaWHH z;wwV8rsXjwk^!Mp3ARK324UEvmJnEgU;ZhuSqX~oSheRnOY{UgIN}P3ePMcSCt9Y2P+?R_(TR` z&R=5#aVgLwD>SHSQ@J&eyj(E2O#Sd7y6ygOK&6#KpwnqH1V*M!QFUBG1=#zDa*czQ zZ2BIxenaw}lGLcC4V&A^u;O<~|XwoP|F>jA!9Z_jWq#)BPT7nO=z+EAnypc#V}X$yN$j zfK8@9Y&IHG+Ly8tcW7_RT758My|C*!rp@3*B_&g)(<4}|81xXhBfBDj3{g*YG^!4# zs%QlaKCyPLm0Pb)pQT{A#|Cl1h`*q0`3IWmcvN~sSaP(un?Fu&X48+DFfRCW@;+K6 zf)cyz_2~n~YnCQ^+zp^)u?RY})yVXk0+(?MLc;#>3l@Ov)%3~o0M?*xwL!}&UggX0 zlG?1)PRlBJJ-n&>Id%T^l3sO;G2oRjm?Q%>tl?c0&L+cX{HYlkn!n!LucUvR+dz!J zGx_zQa@O7{Jj(-=l}%74m)EC`>Td?FS&#V4W`|WU9fF6yQDC1B=;UH-W0SV1_7ev_ zUQntT-q=p0H%7xbpg+8ug~OXia!WY{J7r9_c+Ru(=^1$4Y~odn*!GR%t`WqD6hwBJ z#(LB+zl>9r?`4T-XlOVf^|@?_Rj6SK%RO`mHEK*AZeQodL6FC7=R2-e;|7p}{m}%n ztbn`abvTc@;Voz*stb8!w6w;o>N9#L2@;84LC1T?N8b(oueCeEYu>*Q12)L63!)uArCF}sfUhpT zY_d^k+)+P;v*;4Ii)ecNQ#gt!ni8+Gm$+JvCqGt9TZPRk_yu$y-2d%U`}Z4R|E28y z=(%PSG)v~?`2UI2@O{3~#Z766%Kn-lb-*>)V1p;4u+n;}u*_^gaaCN0Ix1oq9C6*V zPImlz%qqjp*{-ve8Z0!LTKN516$(Qb&GKG!EOjy)d=zy(w10Th=Cl4)|ES@g@c%RX z67#PG>o$%Hc${@oyKWOf6xEt2#iAe_ z1Z}Po$?>AKk(LTe1{s9{DS#!4C_=~@?_S$Oc4w@)v$0*dpov5iv>hcMK;s|ab10yo zpy%$xHbSt)>^#mr=iJBl#uxwkz2krU^!SE*1liBp^X#j$v-;(n);s_>g6Sfb%61@< zB!)3|4MsSU3Zs@zEt-}R39foO-<;hSz4NEfIxBzoiJR%$pPgV;uitW`}du{n$U_)5)FVyMgPvOa@jDEY2-8g&9+JeY3Ib8yzAM2#6(F&?6vgq#Czkd4ZsZ z?=Z9k>`QL|sgj|N5H3ZWBDGyM53i3M0iL@?kes*s=MT$> z{HuJHxZ)OL#!UnXYqx@j<>t`)Pb3rr(u;W?EnsHEbczwomTaComzxi%{knjj8Og&^ zNfB-d1rfKUvKVZx^SKKk(nvl`^bEOoK9Ek($^;3RITi*%s7+Nsv#kZS$u1+FO#crm zj#hacq%9cLv4xZ{KQ_4;{7d9`Vqu7Y^Jy$YX?b9ZB5z2lguCmk#%O0nO3k&t*IbwV z-oMNI8z_n$%e$Zgc$~dhOK;ma5Wf3Y%&G@Vg{3yPg%&=fj)N`GrfwYPvRDL+M8!m9 z$swtvLDB!dGbHtP0`H<(9U{pb&f}YJhNHZJ@NEc5nTp~rhRxM^_&fbF@jP#GUKNQJ zWx;ZxpFo$Os{Ou{8Y;zQsP;S&nMiPRk%_xXGLnUqX$C$?&{Gf@O_NNPJGkXr_Q0bX z{j}!_#Lnp26yJ*Sv6xIIZy@}Y7wS9TTr93Wez{o3zg&6BGuSh!_|0uu=Dz0Nbr4Sg zFN}9Z3kn#}8fOL2GO!{gtRA@37`+BjAf&a#1IsH8zCf*|QsOq}2py?gTg-V1T2^`s zN=rhRUVUhdhll8J#j_1vY@{wUL%;XT#=+_9%!*BjbN71?Y(Dp#*zsP zB8F?Sw3M=xGeGxDC;|g0&;^m!A)C9&aw?Rrw8&LNf9o`(+q$G+jiBVZl7$K0Z&oab z0WzTlmw0r8ucF|GFb3~O!FK%T{D;Bgr`ICwOrRP>n<>!MKIazFjY2fDQerlCJCqG` zR1e0AAP%b;^|GawUlW5A0nIP1-7_2u$vc?RpnpUcmuojeRZ8ZLM+xcr&| zSg~>g zd98)46sOM6$WzON)Af4uc|}b$h7XRYZKW8Th_@pT$j6ao%j#|i=%MKZ*qNab8VWCfvC=e3FPbM3)X84R#BILfSsUAV`C+%bLIOkgVabKh2Hv8 zZyH$3w7`qB{W(BgP1K`}-qbs^k$w(>5fSM2*GU|n{M`l2;Q9(j<>C`&die?mWs)O`(KQ0L&?+R3o35<>X77Qm zgCK_fS9VzKcyFhq&X5$t$ILkI+*Oo-jL|&QrAG6NCK`vx1hJ?kQNIr_4`x?be$_TH z$yK6D8TFL3Hs&>slTm*rx>HfOuIxthVB{;Abc=mgU6XR0XqI@6I|cS!Y=%YRj-F2G z1P20MT`t$l%WDjICEE&5YX=<0JEoH@SJ5FajAX|LbqLqR=^9O3^?Aa-W5sEjFZ%MA zlmD&99F{T5=7EdX?=+{YLcuVAts|*M-&2 zG_J$Yjo;M*(YPE|0~Jg)TZ(FTi#H!5R#lR4rGimej6WWZuL}o9O-XFVXn7EMAD%2P z*)sq|{~aQu_1^$wH~jzb7`rb5WIwkK;B!u2g3laX?P+C!ai0greZ10j+y^XOM}Ndx z;Uhm}4dC6At<9M^*G8j$XTx)c+cW0^_zubgO!?5ms_ZCuU0SsNq!?tqJG#(v@DHdH zSe@sHyUG9gDXK0d9qq_ikCK3*X+w;;c$L?JP$I6tSfBsCtw-+#Y&LkD+pMx(WkVDD<~sJRTmT}T1mobV0Ty_irB>Z;(=ZslCK50}6BpckWK2q? zG|~nVQbh&QHlztOA;GRDRC$TBnx%1x-Hr;OJVft!3hsCXUV}&Ao(n$P`ElB8h?1K` z{yv{`e0=Qo`=hVVzCFELIDpTKC?!ISsT}cG55zQqF}a{#l!^diB8lJE1@*8*j{p;J z%rn{)^h{M50M7ILxEe019mMuSC$qbup)MnrFK1IF6PKCxYe& zIB-nHR7?os^0N;#k|n0=x^HqmV=)y#AZ6zx*}J6b1u=`{j1}|}BnLU7FhwXsE=NQH zNmG6)V9uu+37be1QKZBIOh`_~0$7HqSw$U~iHHO4=X&%@xZ|3h(9uX?2oaBI?=0of zMbYoWWRAXPPQA|Yd>HX8Vdv<=>iXRAJTzrD(3;yO%}6?>yEwB(3D2oyne<#!a(#d; zIC*>6$Cj`tdrYm3vbT&&T%{R{xx!qXCr7|kiu{EBUY-8Rei#ozR6cH~bH1;e(>eG^f%h=B;kvcxuj@>=g z0!hxtz@$(~kRo&~Rb|v`(7v`R;~z;Y<|fUB?puzyyDh?P;lehoXfuo2f?f{}j`rX6 zULU)NjbTiU~_SQ!(W@Es7TH@PrEtFw{M?X+z(0c!fu`1&KUhgPGJXlDeE=} z-lz4MwuLD7B^|G=n=FVzFhlZ%`ndCHKpHRKJz|{5C23?kYTHt(0@KRTA zwhFAY;a7-PINq|COpZK5;aeNEyr_Q=QfTt71h$N9|39gAx|tQ`bdsvyW}s7+oGzlJ7*-W{ffPo;Tv{}o+}r;Ff!Qm!AJ=W1%Dai6 z^Y?v-Fodbi%*!l+DDw{UFgExr_hEa|OHQ-z&C|CrRc(SRD^4vbEdUu-xO#fnUj5&y zTz6I$XZ37Y_jGyU7N9C~Q&WZH{M_8cyp;IjjMSVQklLfs_jgtJF54BpNyGST_l2xx zwXcfU)W#PSpI#4IT4F~xPq_(&G;5n@aJ?Cag zH?Tadb6s|r<0;5+Pzb=(mX>6K-SO*e-1aRiYAw{RDCTrbb4b?^O4fxcO-szo$;?ZK z1Q*EI4F&d3--eW3RA-toxA|@QzB8XSCYcxjfkIAxIz!y4Z}qPYvz#)S3*=4aWq8T| z&3^+mDKEby6=6)^@*jz^Y+N%Ow#~IkeSgLMV~_SKsKSE8;$jpl<5!+Jkg;h++l#WJ z6YWwtM9Vw^V1^bXmSn(u!L?#3`?crJiZc(+^(bn2S8J1z&j>UU6!PHMiHCU`9{yI( zH*otuY*l)ta&S)+cYnUFgT-a2BT7;$N?-=pv)oZX^Ll;27Q2w}%KxSZUQd>>1OPjw z>s;>vf=_sy0UrS1|I7r;1dzfM>+#y;ctEfINxyr)NHl#|V#rBKvDS705zr7+>;x`& zoB>P#v;WKl%mk3aKnL;2LqIOa-4;~RVfXLVth-~)gYN+qP}3@+#Zzz0V!DANt|+FUT=pG9w~q zL_+x=)?fh545LQ2Kzaa^&+sA)F(HXB{;l?4!B0|ECeq;;z(AR2)ndVBGm)ISd2iL^ zc@1!po1k&+HDL0RKDCEt9&=!YVclIV0EZ=f98>j!(b50Y<_oiKG}hXVKTLfVm42=f z>d=g$fNfxQ+w(9?+S|X~uQ!L#Bks&-I#SP>A{Ntce@W@0NZJm>5Fna1REE|{ z#lc~e3xFztUVE%;T+rLR{5>}L>YGxS9Zsch@RA{kTk2p{2KHzmK{dBDEPvG6MV}!B ztkcORD<)5DkfdSN&g(FQAqlna;*dyAkFF}*?UHs<#te;$$>hdmig6`t-w=d3YB@Nx z7zZlROi&~2J@xwkbZ?p7b@<7P%C&E0XVZOyHJ>-GOO$+D^-Q1VK+}OHAx_jROdbAZ z7+5~F(yB0s?PslTL2nmubwxgdqs$$|E956{`H$*B%-WUSme&O zI9>V&%3U%ue|%dL{LfvdMi!~-3`gzd!94s;1zOu78mt7DZ@ND88-$i>SNsYjQ1w5! z#e93DEkOBy$1QKN3D7`xnaJpe&}{#KEh8@(RzV{p1~@*Mo#5}{{{18hNDjD3J~*Rq-S^kQXssM$^XL0vH$gzNscg}xedVXSrv*&?zsx8Ee>)0{vaLwfVc@u>8v83j2nYhvp{Ao_Z{ z|AQVrHoUS+vcY#+Dt-PXD*jrP#8(x(1qBXysOy-i1qfGBoJN|3S*9gQ9GVE&oVapQ zS>y4E*9@Tlr)PR3w8Tr8lm9}7)cRA zOQrTA%}K^1{vGNJN~09^Y|-Z+1lAEME6HfeZrfqV+e zwSHRVybt3M={yW^L`}kumIZ|v{oz^JAtF57geK}sZOle{7|~bKzQ05Sn_fk)AE_$V z-xgw!XVsDfaJx9K$Q}Jz-*hwK44TX78^? z6A+0r=EY>t!dlx!VXXEu=+Bh0HEgE=>x#;RfLG?1*_2!?k&@${<4i1L>oL6?xmG{k zwkK_&xC-vX+=7IVosr8Ce5^e@0xs39Y>8sPogl#rp$D`*@Mj8z(wuUbo~f+Ntib+w zR&Ni3>>Ghum^xLKAWm=!#ZdD=E zC>gf%2bWN5DKp}@AA$EGUQF1ej3`V}tL=&RqDeh^bIs`Y%|D$vjCj7@ECv8UN0;WD z(rLuzc*4QhonoZaOp*_1>pZ2TDFeLgsHi9)>`RNPQ1QMK%L0uL*mn`qj#|}9cE2mZ zRghl9C~`B=FD7Xh8LMHnD=74_ap=S9D)sVEks`q8nGXok;c!<4`F3SuG4t}<3yxxX zLXU|A1EMyF1`kNkQy^bWMG$8MOM&G`&_hqpS&~aGR4BwRemv+}zN!uVY9Qd7vslYH z)0P;N-in*A0b`_}KxU~}6vWezGO_zuD21TT6%F4IR8Y8P)bqTzz&Swjvb4I+G&TB) z_4!bEMj4&Lon=v*YQ;u1$>otBN{Xa$VGp7fcm*WB&Iu{qNYd~yV?l%=fknwuix@v` zc}9!VNTtxbM|QREU}<~1E7<;FKBnuB{R5ie0<{)Q?v`%k4OW8DyL)l2Q`vdb`-!1@zP^#=~{S$1hKha-zKy@X7>u?AB(T0x4P=6 zi@w5*?->jc;)jJY^^n8qKpt&I{p?uFjzm&6snBsV+e0hnl>~=Fmu*Tl3h_smNBCl~ zssoS%U?>caR@imiU0_N|1z=;mhGZ~NL#ZlTAkUPR%8q~mV?tjjIE|;8yqIn{3}q0v zwX;~w0>s(q^}j3w0Bt&Z*UT9fEoYR7`Q(7a7xfa@z1>pE^;jRNaMNjOlJxYJ3-*8Y`UQU` zIdc_?%Wzkly=t&s>2Mx11|Xqt6A_lBOquSpUtqjqBz472)=)DLDuk7BBkXA7gYV!e zA8PG9yiBkfjZ{PEd0iTjA^p8|xIVVzpbcM68yp+hgjd+!+&#p_TzGhENOj7ZjcMh81$k)&RB{N;-2F!$qbkjOXl3Uj0w85#Xj@2-B z=ojSIv7G?0r*(-N9^{Z+nedsAg5U6u$$h3d?f5SB5JJhGM}LzUpV$&IKrf`}rS?qn zkmO~Nq$J{G6&=)**s1Dhb@h9vv4mi8ec8*C={5YQXG;^5E|;-JcGjiE6839A zZyx2!iAgP;BNGw2=3&Q4_L26UHp*|~<`vSLp()UJ=bGf0>9onp4x(6V#vbMSQA?{0 z8o4=8jl**{vGg-nbZ2zX+`(}qAT|+{MeHE0FHK)C;0m6pf3O24Y0unya6RIgMG*ND zMtlY#9Y22lJzRbG_`UmYkg6tJc&?I>?!v36LFC3Tm!v+-43I-|L1h71u#pUzr!N1l z&zZFB-gOQnP3=Evsxe?*Oir^HN8jVJ5_d_fZ^x~1ACsN=lZj3(G_x9PPG)|MUpHR$ z9N+kx-nss!7H!@-+_m;3uv}S3i_0Mb4gNMkM0t9?cI465Z;qb7pG==RkcF_7_Hz7W zvWdfHk|1KLXGx4v|A7_-oOdDU)DsijT759z8|gp{g!DN>nd6els=TsUivRT+yxC}# ze);o>5OTq2rMU~(Bd0aZzy>b!Nj5GcwxF5+*S1 zEGkwEhRlre`>C5Zvx%&FlK^F~!RjyJ-)|4TdwjjV{*akt8UJ!4v~kC$$*kU~Qcw$; z$e}6}p7611m3NB`cAm#6%l3$(*^i?S8jy;Rc^Iof%%R|qx>#`=?bQkZO{|HN164|T z9Y*GHf2hNmu6H3De3g#YNz6Ye67|(FFD5%>SOc*|-VUEx$nV`6&DZQbjqJ~AP4}Pi z>s|VNXZ%Bh<0)(9Niuo&suU}p=)RiUpRbOd%kwWL8A?;0aF51_?prqgi!v)dZ&;Lk z&guTNZ2$e&`ReRhl*S%`M7vgS65|~U+lYG_pk{tKR#Mzh&r~tQoKYQ)%R&?@$ zW{{Q#Ew7U1oxq0#T(#vf(9i7Ul%XJ-p1~@$OsZ*%i5fJ(zvw{}>v8kIUsJB90ugco zau@{_44BiB@6upu^b;kor8DQkVxoMXDCz7mbC!MXx%oi3e*qXp)V^JqW~B9+5{kj1 zrn=e@y&?PcqrrxEN4@IXW3oy(z|#d@dR4)fuwa!s9VKbd;m8XWr-R@f4ZdMx%7nzR z!a2!1_g~4`MnU{n3LnnzPy@|$*=ot`+r%_${+3r>>!oLGo zJi2V;FbK8CLr{#}MsBuDhHZilg~SQJy1@62+*dF?_r6(1w{bL-F{Hxv2NAW!d&e69 z^KY#=h4TscAd83VzvX0yb8bp~mZ*!CVyf45p_Pl~I}O|({aU?6uY(!b9E;0xQkIm61wcf8y<&_lKyr#If}F7&B`2^KB%bjo{Vh! z)u_sFo~-*!)xVn__V{x5KHuvoMXG!slcF8=g?RHZxc;^=C3(=^{R_nP>Joy}u(Zco zze|;by_}%Q1ip$np=Q9L0cak1`67`J32le2iHWd0f+GK7V?KvmI}j=*lD_ zHiOFuH9YtiXD;Z62I%5w30fWkjNihbY>rk?Q!$*6A;b(&H3M*qU)7?>#-4iv6)!(e z_P&0tNx1u{!_IlN)5T0^nCy zEvU#^m2eo4DjBO)4JIZrs|zJj6U{i?5j3(NpbAuDQ$z8KiF#whK=5&y4`9v>f&No( zMR&j5w=F*((Gfx>2BI@~@N*ji3jvQ6_mJ&itf=LC@2c-7e1`T*_yp!Y#X*=QQ;oQ$ z`I(PCKGN%=zcmEvSxO)n8K9C+Gd2O z&zb1Ct=}^v;ZVOuqGaP_Marz-W5GQW5eC^&?6SN*aa*HJ>D2n!4HoKUouIzr&|-Szcr*5jyA8qB|BvWWvJx}W zq?UZVg9iG4RhOWVq?o0o89W9TaIgFO(Ms}CaHde=A7CD$A;-ffOt~qT5u z+yMm2>4};cdi-%hCf*1&eA4uZ8kn+g4hxYrI^{<1Dc6b63NDml0PM{25lV7UMv{S! zik?bJRz`JtPO?Ex6|id|4VPg@it@G2C^;qMV}6~8gS4`Fpoq1duym=2f;qsNS!&Y2 zP8`61CeOFyM>PEJVZxFc^qsoW3WmHAo&4VOUA!}rJ5#+9hp4U$9kWtH|9H&^WE-lC z>3pA9vsgwowy9?D|kyB-L-Im@Kwo0P!D|0}IIH^g|U*@wl^!v6Gvlg0W**P;HQx zTnvwtK3_e?#FqlVVSwS39XYsy9)zN^h_Au1AmbDS2!^1U@d_k}&Ld}=#9P;GNN@Ci z6~~TTv;}}NXpq-#6xcj+Qd4H5P=%4k?}>0hi}KXOsBknWGGZh)rbWProwY{vBMin1 zInSlDOuNFX5GM2fp{MW##P1v3dMn=%`@jUbc&!f zaZXVq3zsO+Y^1|_8Z{(p0UZ27UzVe6?o7Y z0#UscJ!Ce2@y-16zLdUHqdi#2?!FGUQqPy9gA3ixQL`MS|MIv=0|b#IT?SGJ9+>~j zcb?Mg!D-PA=Ai2}icd={ZgRlt!EWlkfo~?BHhs8z))OLS%6FA9$Jp!Iw>#W52j+>r zSb^DHNL$LN7qtR&TBkP+t)C*r1}??q*ahcI9NVBAUR;pL${g2FX&m#uD)^ARRxt!t zA_!6o(320D8 zp~O>>mO^Ld0;?wzxOL~@9dOQG>S^oFWg|2RE_(mtRMnD87g&)9LFlmQ!OfX2Kp!I2 zlV0iX;yV!;lDldxO{V>)I6n}){8lgygz`%IunHOm7)~!0Akg)A^kUF%>K}AKSZeQ)i3y z^1O&_gaHHEm59RY{-?1-G>IiDqTldb;SP4^9n~*Xa9_j0Hc5k*Dq~juhW~WO`Jw5n z?W3X3EdtIHXE>!y8`@j93kG+ETRs6;DQy~z8!D33GW^JEqiwoeUQ)ATAOiy=kP2re zAv#Bxrod2>F2DKV$Wwe+#Z4PLH~FG@`5H%ky_u4W-7C>fZG>m9OoS+%sU&j%IN|P! zYlraj!WIlJW5cb0qtWl63`Hynb8`f%ih$mJQV&qO_|4Y|oJmDEb_eojc!W44=X7-5i)0+33PTntW|) zK~X%ZF8A?gl)Mrghln^4DD+__2@bsUVrS*>aO7!4hul@ZE@g!cJR#|=Wn?Dj&?6zr zqoPN`$qyiHEgl&s;_0Ux6$hfGwHzf243(0SGT;`%Tn!^+*3p57)TSL^J8T3xp`~`D zEME(`Waww?=xD7R38Gd>5TP_dr!g_jsC+j)FT1L&1mgq`_YCLMssc1A%!YhUXe!Dc zXva7yHM>luK2N7imDdwW?exHC{yA$ja}@&w=4szn4d#*a|E{9uXQt^Q|7QzD2%7B&@B_{G|0>8Hk(nmVGpIOp_ini1gGMBvrswvz^hR$$o#j-eY(DPK5l+*9|lNr zikPD1KX5%dUXhM|a)L1`Ub8`6XPbvgN&UOiv5T3nw^iZHk9!Rk+){e|)Pvq)HHUJ2`fRo(!i=)f=^H zl1ugygI^&{^B9IqPZDz&5&Z_!0R4NnzEext4#L<*Id&6448vr{Mp;Zls!fHPEVIT# z)JHKpVLtM2SxJhoKDiWRGMcmnQd$BguK@(zy?K|1Tu+7=rH?l8HEV3$2+4r>fk)<^ zLg>r{PYF;32nt!uf-^b3_2M*(BM7F#%hD{<@3!I!&guj>4j+a z2)L(7$O$ zV$%K+>x1yFM*Dur8-1{0RS#Z9Wpt=$ZVI%+|KZ)sTpla?+Az(D^~uYK79lO$g=QM_ z*I;h&0Mu26khn3+Ig`xNMstCZ8b^uP9Zn}pM!h-fY6v>IVf8%lvo`s6+a@$TF3I;@ zFl9ihHU^|#PhO6%%PSu7Az8%v{ywI}3*LPcqs-x*-65kP&2+|*&EVOwhtHY1iI6T5 z6bIit9XQf=f2{$lL`pUNrY;l$VEevkw1xTE8i1J`o~PuxXYg+#{Wh8DZwWT#U`(m< zTqUEwEYmp%`vlChp_JYF+vF&vIT6K~!Rh^>h2~~%e6O6zFT>ji1>tu!W9R{`@S7vS zJrfAxsk7I3xa~esHwIcV{5lKMEU@JqbkuwhSmLKnqb!$PQk;y8mJSxqWvKm`3205#{_ zp|GZieIo`X>4P|2a|*}?3+Ra?#~Jxu0=*T zt|;EbP}ZZ;a7X0}v1>N5xAb47JwMu1U&;OyCp!ezFdqySt>~UOQ*=f0+>hufo*1p= zm;As8+C@*OB^8`hT@fPNH(jsmKV)2y2X|hd0BJQ0ga${~oIX3yTcVW~pfntA8lO7Y zs)+&RJ^Kn(Ls%jgx{SqVNb)ufB@?n$vfYJ~^ZU2qV;7&8Ds@9@YJu|QiuZUCg|LW} zFYItj)_OXjgn&?>u=q-(sJ(RT?qNshQJxA6(WR}vJ8m^FzaS(@;!3E90kL>sXFeuY zdK5YgV^X3BqW*{nuEa=NVcE_M&}uiN8-Oq*64+4!v)V2ouxuv+3o|!jLBQ!Vc@*da zO0lBAy;Ov@LqN*|*q6ORg_iOLy1XPa$ZZxYN$gVNZw(E$%UIHVp-dXFR;uZ4!g2<8 znASZt1uY*Yh2cbAcNy?a3sZd=ToWPLr7WK$B6Kyb5XfP4q2wVd+d*j)XyI*g^yKC_ z>@n1>lIQu@roG&u@|;_i4u;GpsE`CdX5`jL`kAFKjIKv63Lp!(%m%^S@s5Asd>=Fm zG!;>KmccI}A<`^~p;8e4*NZzdjvuzHe&N(JZ879?>)sM86S`}Pc-k&jrNL|<8nG=> z>jAJ~V-R3K=mAdEDL$OdI-S-9|2aa__u_58wX8w17+7PiTi zyW~s!jS6$1rN-G?5m|#kMnO6pSqoCi@(KmXIS-FN%uRmE`Omh-NV&~wgrX?48itTL zIzwPIKX0#@=3YZ{pm=SitUTz(H*cG4Ug^57636@ye3V2BhnA}15`U5%gaISbMdf1I zQ@>}#^FF7OUXqHO_Oco@QQP0(GxVQC2nQkR(tmI+1e!{V;v{xx6>m1G)XoyIGBC#? zHMVqYrU^O{sqA|Z@~2Ldw5cg}H-HXwEGADlw9wx$LiD}fQ55F#hRXyHX_z{GTjnMu zZ=&WfVIkVZl{R%(M;36)JDUw+6WM_eFXst|zbG>uf#0+aI^$Bg2=11P( zr*tRa*r|o7TiZ>})sRvT-O^9(*?n1AlDEzrE$D^Tmg`kti)$al?#G>LUiCq&4DV?6 zS1JUnW9T@jY9i1%nfysAc#<@)5#4{2JKYzDlaQK<>a3wCizAiQ6F}=9j1-|o^JWLX z6=yf;pX~TYag9XVFKyT2i3wvxQUx!qp5)n=WD9%KJ#CqU!1Sh9SJX8Eo1_Y`+Uk)7 zwedJmzCZ8LH=4%FC(U__6~=E%vJq6JWztka_SBH3zrjN#I$_FYoMX0I*353& zQyFEE%e*|}@a~PWH^-l!pKBy8y1!n7)@c(T?=rVS+}x{WcjF3l`x5pd>JE|*HcV&6 zb-8goZrL@Rm%rw1_U4~QS+zz;_10aA2rcoE&5DY%dF+b59$t5P47ZI0x8X?p3>M!& zC)-ZqN6Mag@nSL86SvF(YB!%?&rxT<-X^O+Mmz6|ye3ZZ_XbCgkHhgMdz?yne(`0w z%WDJANy1ZH^-T&u(K@C!wIob5i^b0#Ek)baXv=3c)x@>qtVz^sqBn}2lR4L{g>rV?8H z%-G=*d$g)_bVIjoU(ed_ECyRka>rR(ZHg5}TFIxZ#t1T4-THqSXRW6Ffye^x1%Zq+ zbfFg<7Joypl^P{uTuV zSp&-#OH|1Wbx&TDRxF#XNX!Kxp`GME`Q?~d{d;0ez9j3Fj~bNphMWJP0|5RFZH{i< zXTJJ(xM}2#um5V1FtSZCfib}J57HkzUt*Ijrv`gP+Tn5HDoE*VBqXJw2*|&a{S{*? z18PbbYO{x2={)DjJ5XusjHn8?{4{|V_{dTNjR;uOoFWHplilVpx`H&$vXf0w+g*DG zxL$T&JzED(llT~a=YoX&phhs}Q1`O^_aBG6{eKSyUuq)JL~V&)8@3OM2HFXA>*}&? zb{hWS!7x@06B_`FKy<%{kNSC)cFMASy)e!oyiL5l2Z>??Uuk3RsWwb%d&3}=v8i1X zA!S>^;V`E2wyX_a+zgIf9nhGl=NUefZ9S&~9|)&FeBybr#QKK-ZvJE#w#Xxl0i_H* z%I_7J_D?m~Hq~V;xIS_b8&;c46bcO_u7Nl`-HK-QKfExFhi?Iz!-%Ssq2O%>^KLD> zyPSPTP(aft0(kdty)`c!n%j>{+jfUIhdwzrIZXK;#*({lYPF%*)+6~p17m?|df48n zXREdz6(j%}wV%JYHIY<5DTT$wO3yw6K@z0tK$-N7vA>9P90kxZL)2t0gd)r&$HVelu`q?w8^zZ(;U}+#$uwe8`PcwBA^t$?0}W%9>@e@Wjp(;w#_r~A*3FP?@^@T9(ckgPk&XvK#IQ(j>NXBgi1 zCBMv3I>J^n-epGkPJanw`jQRPh|)+FrV}3Omf3K@n2Xw7jOhTJL)E<4B^E0@(yV1m zS2ipfJGh_t3;rh}ZDSroA{u`;#`8!_ci9RIR9q->vOiMUudkyvJeP+kzok}X&U7bx z!+LWIr6XLooP(NR6o$>T5RGCCR|7Xc-1M$)r2fvH`JTaXW1HIb4RYf&PNtJ!ONwh0 zVV-NxWz+=YF3QZ6=_E-^WP(f)&m{b$xW*j>C{3qqDNSiuixeN5w@eI4!4@~C@1#h> z5L`K1DY`9r2G_+-T2>dn-Xa&1>} zhpI1D_>(M6KDN6saKh(Mt`MOxMX{d}R^U0uhDsN0|O92nIwFw3G2S)r_5kb+2&bG#f= zGoza;6d8uInA1+meu#FCCJftL5rh@vk^=j%bJpz{9NLEI$q0@4-sSg=bGQe`SmI|X4^cmP_SF18T$)Y{!$JX|4aLxrbmNiJLdkG^c7OSiM6!eov6nve?A#FVQzEfG_F? zND<&hd7ag!yhohbGvjmn+4tV}*W2FrqfegoaTycWrR-(W`s=+QnNS$AMXjVkM0wQJ@FVb1;c( z8A^;Y2n0SJi0GYndQETW@d1gGwV>7FfOAN73kFjz(;kl+7%i9xL0bWYNtEdk{X#KJ z>*q<$t?PT7nxL7MF_o!$r5zWhU@x76yiWlXzXo;1Df{njE7h;xz<-VB?f`4AFoXPe;nD|i6hB?d%%c{NE=F4r@s zWq-97gJHD}st`xk$W$>_cXM2aT;JB^pk;s+QCE_2TSt$ZG0kPbJkbq=F6eoh3thI2 zHsLpXn*R8P?wM!ot3hRR3b6CWzPI<@lk3Y=wHcosdu8|Rj>D?MTV3nfQl~qyMV&ek76^#k-m-6ZS($|IN!C}h*_5WQ!|LX_ zSAN;w`hK6^vb;ngR764UUlF$-!jAoflZ+*sInOcg8 z{v?&wJhyVe`{=91{e0O5ZIYds^hgGtwixs$MES3Nn``pA!-{;QOF~TKM%&;FQ+$Cky+yx9p>ntK0OTB zmwUasCO}5*0kp>D59bnLevVdY$14$g&Cj4t{wd99DX{n~C(LDYS#2^^r~#jp>Th*V zA@EeKxIUty1nC3pTp7$$_cEAA&Z>^B{dOD1f1`IhpsX?DZZNKf4QEDOvt3{pD8!Th zxNE_tCZ1_k1NahUt`I(Nc~28ks3V(}**iNl3IAvxd(P1!&KG`#;0y4YDkD?A!~aDH z8$Q^#)!w0KOpwFK3>c(4@|>YbEs5M}5Kon)p?1QCgGfIeKV1ek!PZ<In}|23rrP&7?Q2Mrd{v0#Kn%cz$^iKdxW z7pc`up(dz@5JgaV(meN&&yyHdT+uO^)Bjz<6 zEl0mcuTzezN_earPuh>VD`P-n@TeKrXK;Ro$Rb0?XI3B@K~F4TtH&l^wskBUU_ML_G?lpLW5i@+qRl5*Y2p zsfk$z0xlFHa$@UR`p4w5v%d1EChIt58dPcqT0n9F574kic;2`^Gs{!CDA(lB1AvXd zwNM8oY^Oi48{@=meBC zAFQ5K58sBHgzHK6h(jCKab?eHfd(?ipuX7s!1Cr9%*Fl)W0C{UmL7VNNnjwUXEfL_ zgmUzSw}->%lTscNZ!+3SF5Jwh9b>q}Ea&c((DHx1Y%93vB!?E!MXLn4hEw^MT!m=S zd8Ae?D2!llb+t+w!H^Y^DXL+`l}KTthS6DAh%?}oXXKBB`>jNSGnT;OQ9RRwF~_!o zpD*Zu&%~D6SZz=wi^NU{!Mob+QzLMS(Set2?MQ)=!NXWlwcO~hx(qB5MRDM@QJ#Hq zn^i;VC3!MIMz79=#bxufcp5GsnE9ksgi)(4Ph@Smk@Y^jmGs#7!ne9#ux|vfM=Ve z)bu0=a@{*;%TW5$asO$n*n!=stKzD6DC)K#|19BhopIOgm%jWRmAz3$)b{iWd)YT| zxjl*_ELmL34>~+{g?%kFEKe|{{4bg=0!QDjHE8;H!?w?sQYS!%%w}guhxxpsg>m79 zf^rtjhr36D;n}cvzt*{%bPY6DId;JgD7*`Y%Y(t?>cLU3kHaa}QY*ZtdP z0-=JA$fiBfD`1V#9C8V=1iVXd>VtaUMakOP2Uv0k47ysLv#=Kdx_0e{H!tRR@!G2(B1}&sLkIpK|i2STlV3+iqjNf`QI*%1NwR>4=Z3}i#m+Uy;I%(X{s~Vp$ z$FVJVeHX^pCD)h>&Zze7%cR|ZYK}j<|KLu3UDXZP3qKX}-9i~dppO25**oqG-uhnh z+VIRxd^2sUktTL;T)j2A;gzHczptsHJEzq(iLh~9R{>IGnLU=$t-@Z&fv|*|J;H5J zG`~hqKd(=q_bauxi^tp3)636|+1G)h>vmFuT9YJYmHn7lomv-;-}~h}E}ioXLXA+9 z-mf2(Nf0GQAYB|sG;NSvh@fqp*mZZBrBBDmjdaVIO*2`A5KM-}M*mo7sAG*64WZOH z5YnrvqNp??7+6?dv*#GwF?UFDXT5?mSb#}KWl+Tn3|>!XL~_eSa?XEr;YroWZDND6 zkyuJ*A46<>IHi{!Eh6WRZMOlgtydi6Fq!=Z#n(7Qs!kZg3EJRGPxZ>=Bm621W-MF6o`!`%{QA!H)+_aZJWI$M zrOQ7;dY%nKz`1Hx0bD-$X?v9EZBD-S4~hG5I&4SLYnyx5AWP`7&6py18>pCcl=IQR zAV=;xI;fyR16^#_*_?-RH+nRJ&d?VlHR!$|?2bU@jA7{LM)KihnDXO&bab*?a^~)Z z95Spz4?`U%{3*(0gjC#~XTrd^HwZ;*q!6`x?lN)B^fAhGrGzDVa2N^XtUB}Jm9<#l z@Ar&6I!+Y(erdLHH0K`(fxliFm*@)>(yh7&^#?X7yTg9;~G3`*_gFY+mA#pDiAK;f~{<6Ed(XW>I;jfa; zN1F_`k!7{yk5-%Nh;1-l7MCd|NcGliEoaNG@A-RQ>~I)RMOkw3a1o+qf%!?iHBaSU|6TmCCNT5f2D;$OFJr607dXEsR#RiWS% zRpt%BagJTyl8^o9q&AwnF}E9)1cTHXA9W@**gx~TkD+zUlYR4|@y>t;b3d<_J8&0~ zaghb}aN_T8qL8=1BnG^!ImusTQU(&f(Nf8O0t4|i5t2uPd$+{KESDe&>K-}U*RJC> zLtdf(ADV(68dNmXll0cI)N`CP^Tn4Nd+DVPlzWc?u;%p0={|CuviUFjuvP;i_5h#y zr}Q88QLCzGvo3@rEAsM?&(=5LLQj5lFqvDf3d$@zGB6#r;1_?oqH2Ew8}0zrSTXB*3w&wW7d zsB2G;tqwp-I)sC-C|U~Jf1>bTI^9enU4!rp^9&t(klO;GUY?Y{&oHE$EA_QGSaI%M zCzn>=O6H+dKk+DoX*syoSmYhs(u~jJEN+9}Hw$GpA~DuaUm-Sx(sf4}LjQo*npuv3 zEtC-#2_dy%OLT$i`vW|_K*uWE5>uJ>9^pItes;!YMed|0rVqKbB!mc6BM4St&YMGp>Sl8{Il0Qa|Z}@~5`S*ueL( zYO^p12y+SwC3LUJPHH%3{ug_L%_4gbUJ=jJ)8atPTNbxmpem7!;&k<_bZwOUv`p0` zof1u@$-Aeh>wl|+04>3DKmS2?>+`X2`ZRxKSG4pJjFIvb4DvM7f2ZidPc2<~0wqt= zhpkc0LuIizfs`M7VwuWMSmfyx>HjE7F-9%WPfr6|&|W(`_-*F(O4rmMbNElDgY43x zv8i+p1Lq*AM-CJd5R)Dsr&OY44q4&p9}a0zot=d)>gj1)9{Z>#l71a862ST>0(9H~2yC5@36W zUx9>~e~MWtx|-qJ%^B%=S{iv;G3HNT#A49*wMrdiHo2{e-29~Txp^JS<*S5Q1$IgV znAsr&yHvD@l-N2ge)0e2asS>nyGQ9bpk8Fn^fY~4sfDG(`_$F|2MW?eGu(Wu`_F$| zc6XLBsSeN#+;e4aYI{z1>c^x}Tyi)!+`gweh9B^+;5kGD^(1S7JdD4r*ZBKlWW1Tn zC4T>*C%n8_5*7a@kqyrl)u@jGvC{pQbM(V-+-M zJnx2FP0Y^7#mP_3&&g0tfL5{g|LA*m{EniAXY}>7sVy2&Gq*AqO~pVvu_&cTAE7)s zO-D;dBgZ&Hw_pMrgS}3-g)`JD(fIO<*33Stf^6?BypVmMEnvRdUi-7ubzdA{r6F!( z@l?gcUHkM*6%`|_LAb}=zcX^;e1pFZoAt;6R?XM+dIbtpB+J!#01^V_k&`{b5otS& zA(2RtOcfq-vED47lEzcN4nW#XZsoIjgqC2G0NOT!XKT~*0B%(qjN4*D>OG|`J4lj3 z;v&5!mR)YL#zcbN7FE}VpcvU5iQ_}){_?#JA>vZ2qTwhvWwFmYoyA2Ih{atxs!cFS zk*rWGQ(Ah2V8Rh@lH$BHg~1h}T8&Fra#kJaTNEKMjF+TS*DqvCq^#1h0(B|+QCB{0 z>Q*W4=6^A@O0v~xh-&uau|@Q1KP0tB7Noob`oVzp6WhzCw0ZTlqu7F__Y4I#>7+_* zT$oOy?T~q^4S~b6gz`gsFQj~c)k+A3^sVGrE(+i08g{q{^sNb~{gapwvIUlW06y1# z3rdJKqHMFQOsfUL%8#_9@nbCY{2y2V~^G+R0*smLHQPh-Y zhdm)8lbA1r#Ex|`Azz$0W|#oy+5_4_jkS5>p^Ecyek!B6Bll%6C*CSyqM#rA3#SY@ zErEY#Pp4MFY2L-!u4dpNedeifq5z@cNKDx~1^R{Lw# z8y<(go;5hW;nw-9rQ_4pusxl*{l4uHl6L_B(Z9WB*LmGb-IAm{7} zdinuMNJ_Rifea?`$l)FP&i4+==xqwBORE!c@{=(Kbft<|NoUo8ONB(!)=~*-692E> zV5+jws@ca;Mf3UGl_;~#)zj?hR8BzO zubH1O^E3;H;9^9tlHI=$*S2JZnTfFJGS;EA6lRG?CW-8~L;1VcVHYpcu74PG=zGzY zX87*e+L^9_q-Q<9Ja0?Oo?N6+@pPEfO@4*4D9!iW9{y-7p6|?Q~gI z(>gb9=c@#NypGMcolL|XI+T?HpBX%(>kqE1_LvT0kj`BQSab>_bXg4Gz1Y7bYkSpD z0K=QT8~2cdIUY{A$?{8yRbz(DRfqU3iwQ{!w1q&bw&J3~1TbK(0m*BY<-3LGN@dy6 zm)sM^epduA(Pp!SPECPb=$rPBqYn>9@HlzR?N>SG(eLH)(dy5SCm^ATcme9s@DK*A z5?qv=;dr_lGd`Gwl(4|HN&~q5eiUgn&;c*n+IMYk>P7jr zUS%#E<82BguqI=Rzqp*vIc1k@Q9p&?ZNFBF;l$y}lSN;e7m#}o zQTN@5^M7cm@(^-5E=~fZx-s6iLe+T!QLy{)p^xTWF@T8XsCuX}l!0(n_qinLsa&4B z?@`8-OG<%AVLk`mj_TFRq8C4rc}D|VX5_E)zbOk_y|;>KVXJT|5(KuZhZ_;lBT_doS%OXgA^$X$iU*>fxm&-X9DeA8y~y;yn5-gnK*PC+xy(J6wRD{7DW=dt2hR zo}A?7(XSSEZDfmKm6$NAs#>pcp%3mDuj`6OKRKOR3Kg7A!ybZXC>HM;ScG^-iy9hc3`tT-LYdZ*1 zVC4p=g3)gzhW$tWf^X&fPT$afbB+D?gK7%`T!&=_{h zV5$lSq^f9u$Ke!D(&c_nz$*F&+AV{{z3KvZoV{4x2Rmkds0}wkWBDBs?ZX3<;YRq}T+Vk7w^j7t_%I;O+EOgX}~RStE53MS!0ncpoSi zFyc#^c(^#v@=d{(D~ap4=+6Uqadi9>%r@W>CTxyls@WhR^7lG_j3(1FR0PLI;c<9` z;*`buaCUwch-%WLB$}cyQm|~imI>q35CUYm)H_SE zajqXdNnRg(-Pp zT(-!_LzC>tT`gAxF5TR2i&u>Cr&?eOJ+6UP)OnH3sSuG`_SIL=(L}#utV=deDTZ=f znII*1G^+G7^bPGBihErFUEx6&G?g)m+~hQzlblJCu)nAu7%PTqPf)SJq+S=i=GLji zyI?CX?15nIxQ)1J7M{tL*LE1m;ab6J8h6XHZ;WQ;cn8yVAT-Ihc{ju1^_O|O(X*Sk z8%ZI_bIN1ip~YaZ>G4+AjBiMgomo-PB@?pPAf~_nao0(bXg}==X}x9(lwIEriUlPY zH&ocbD2ELkcrujJcurIl2eQJF`1Uv0E7cX+kckeoli`fa@0LZj=J5fEHIcu)FK|>T zEz-~>tgPgUKom?cuFkJHVzorQcGVBuU0dMFjZtRkD^7v4k0yeCC8q|5|Cr_Nx_vm~ z?|Al^M`elJipy|GrC;ss>GJKAi+aDSU_HO9qV6}0mK7uH9h$T@S2lDI-&AOC%i^Ti z?a8fXlJBs1BlxV{OYgWzr0s`MS1y0Ux#Bpu3WEPpSRK2L&~myhypdyV(nCNFgm*#J zHOWM1Redd*gr!XCOGOWw=YyTf(BqV(Lv?8oGDaNjq)@&WyF>e)Bx|gWfwKXj;z5iX z63YFWLrpZ#QoI0a3X;xZ0uMdd3}Bw-{)2PO;IuPt%b9JWB*VL{kQGU^V1RJ4`|KNn0=-Q^bH(u7x@-`@Vl`g*YP}n zu2Lj0Zt(4bLE4D+;A@VPLk_VxeP8DjVABTHE~?SflL2JK7Egc6Xz+RnF0^eV1x*QF zeE8B9V4G9@${E3zz=vV@iBIoX-r$9XGbP&?t6JD*HbYi--=pO^KRLUo`mRTByG%d9 zxKE0uXf{&lIW?vFZ#7#RT+f=83IE>T91m_ySzQaVq`IBRQ};9yB(FB#xs@Z^cSOy&ib|KIP`o14l6m9eVY|?tDl4k#&NE*H`cRul7-`Xp#@T zk>#b{OxD=V`*t%Xr2Q9!-hPOQfv6Lw!dH$|Q#bUmfjtc2oIHepRdI%f%NEwm--shM zI4~hA6wTz+lh!Ex<1fHrJgi@hRsm0CFZPQftDJi56cxMs5 zvn|-CY^4!A?TV+yJE%(c${0SyGC!q4YjnQ{9J|j__WfJ(xTM( zc!kW|g8ZTqg~X)d{G8H~)OZMg;`ayhsDL(5CnpMtW7D=-ou`3m^9sIg%!~$;FABRid9-7(1}z}Y<2+e0+1dCBecUg`i{-r!l-|u}i`n9jyO2_}&%@uB zlX-|ccLoA@6TpaEb#}H|XUg}y2d=mIio_!EifMKmp2ps46njPfF#KD`J*$6QshlZq zboHudmgteNR1ZeKzP`GAHGDn%;gj38ZC#6W&!mP3Hhjn65xeWs5$Oncifpt!PMAR- zVoil+ptq5Rl|Yv^X9^da4Z5oxf7t5XftcFXMv4Sc-{d-%j8fo9Ca{-GVnMW~vF0ee z%KB9`YjsfdQYex|dTVKU@GZcvvLp5udx}}6VPY(yltPv+rhsEtEdC1;0i0B5#6jt3 zw_|HKFzwoIJK1E4GP=3(A>&!?STs?2VaJ3$aqWy;%d)29+Yo}fce08UOQVE2hy`Ly zDf+D02I7(&S`tFFpf&KcK*Oo*MNARiKl0L;O!0sESQ?8pPagt%xp+7D&FoIS+1eBo);qNW_mVlnQNBo=c&#q zwi?U)*LjlBZ;z3DP)N*oyN1N}kLdha%4<`B;~$}I#gaV3+|1$W8qaPp>Vrb*(QoXa zN-#?>OiLnTXDGC#?Lwq#m4!G<(vR%fuH*D5q1V4;L3LfKJo2dL@sNBXpg_UH4;+(-N&LXX_zh zxlG}*JXT4>Q>WMrrXp?W`xfm`UpvJEBy;?28K_wDOp{tGC;_7ruAoTJU|gxEIP19F ze;)c@>Hs9klyu<*J|ay>b$cxD$M5kXda2-T_+k7hr0*s-Au%*vFRz!kZ^L;y5v#2i?=lOBwo8ifCr?oYw z3#m?p+CkO0jaI=4#9w1r>O!jZ6dvv`;&YOq{NZkPnN3lpcEY$^o}H__;oCB)8hDK3 zf;*m)Fln~sGc3f0@5HGWR87Db3oeBchC5;5>g@ccO9)$C)TMw0x1s<%|D1ilhCYN>5(Kx|kB6(<>~0zWdQ}K;)%#2)VRD@7O2o&e|pwcboo55c>?~e4_p;xbY ze0ko}oxq~hx@g+I`r;Wd0{fvXaM;Q>Y7OXBUvuE90PDXfRUN57dWI zqIm(&d|&f+vgi`swc7j%FN&OZi9;3_YyzwuWBkHAE@hrc#5Z;f$%@ydOM8a?t+6&l zYYfv*EQ=2PHlnOjHb)n58hT5hED(CY^cf|;0;_9R)viM}AYs-Os5yeQ&3S?5G($wT zd0R2Rh`O?c+(H}p*U96!n>$R+mu)BBCEZs#n$9Tj!L;uhF`^6W|0uBaoQirj5!3ss zN=ugvJKtnz$cXM;G+~T3AsZ^_!>n|ziYa`t48Fi&kQNxO{21=;vpJki;ac;e+rh|$ z#2b`ct!us(gxzoa5{(d(P)C48M_oqyXiy!b|9uLdQ2JFOT|BSfQQ<@6upyM8#%2Hc z!-e55uC6n<%x<#V*?smW{PFXXcWlT*oJ7~EDRFgAp^%m@N|EA8#7^tD)N1|N>vHgT z1mkKvJ^81p>vdnh5u<6(BFktTJ3^0|?a?C8cCEDfL1{O-E{l9wYAev<0&@$m6!>v0 z#$F3Y5HR)YXjOiQdvEGCY!@hbHF(po??)ok-o}lN*tSn%Qmu#;ZbXUy<6N^R#fE7a zgFCom;>F?KI{y{~=$7ZS3h3#?w=>Uav*$T$15jzj8@>d7-y??q00~gm)Zqb!X?UDl zE%Z@vgB0Ut9Y!&>%~|XR838rh1#Q1Hc$}S*(Qd*Z6o&74iZhH!yJ+3z(!|T{3ASs3 z^`Ima8aOrj_5%@JjWNqeNP+X`*0UN?2jigOs1~k}_*kB-0%rUk_1(+?10=<^2x@8bY zjx7%8L$m|yTZ(C=s1^%4w9BHZ>q)v~bcdw0!MLP!)AgrC)jXtlPec<~e!e6fJSy}ax4&^2_Ea>%-E~0o z=;?3V$JGq<7#q{V8)I6UAkTa7owNi3c+)Wq@;M%R6S{?n*9KbArO+W$`^Q? z-F;hA9LJXK`~DR*e$kl|_S=a#5$6qoWXZaEgXLpS%tO+h>Mpvvid`2lOiYBJg)SD_ zmMx*XjS!7!S`suMq(&Ern1+ejFSxOd0sEy0Y;SMd6XBn5R%YMo-YaE!?}!tYo2r$$ zR%WjH^14=L{@WiU={0ilwf`gi8$7XRH4ZQT!e8L^e@d^tUVGlBO0V(ff31*S>m;#M zLf0%eOH0C}I*@_tj%}G?l8+Fgdt}oONV;30hLh!lrs+N#(e-mnJoO(sYEKpn6&>-FFL3$URgI%kY~tL3^nu%PL8;JiOL&QkPSN zsK#sc0271-1{pD`5?$7u3AM|nMOfxt(rYn~S*9YZG>AcZM>Z){4QiUQnsBq5$?(#& z5$~7njfnj&QB_Lo-wS^K{dJC_GzvvuEo>~IaP-ykMsefu#`4C**QYmLY%HVE^wr$P z*v7)w0|-QIjC_4+<36M^wlM?06JMWdimZ*R8^x~&A@a=E1HfA3%nvwiYGa`i*2v4o zDF|H#;qGue(!P4MaUT)_wy#fz;Z09dRVJz*ZW{%r30AC)iF&RAF}HCM5}9CS@v0yK zcTT2_`x2CLY~wl4>cGYl5C`DH_y1C6iaRJRc5+V=qknr1Y` zRx8no1wDD`p<&7~A^@arqxN0fC~^;5l*$X!I00|sc20SN7j5h!2eAkE-3{1~kgUzJtKFm)>hMHfKXF)2xu zxVQC)g4ut5lz@^r2uA@qJ>&zEtI7ku&IAg4V< z&c>pHzcz(iE3}td5;N~i7_vxbDR)9^(AsFPP zV2~%n7%wF>#v`T{*8XWm@N5(Uh-#$dNQhQwU6uo+u^=Esb+t7aZ)lxRGQXrZv?>!C zTJJ+4yd$kBARQucKZ;;LfkY7kIe(-&J*laV(lurcLX(El9D3H^osERd8e)!FLp>#E z7-O=g5=AzNDFQU$F+K0D`9zCZ${DVAYIp}qHE6a%pP>XnGsXf+ccPHFuSyh{QvAuH zFlLTZN!ddKxuYQ00_sj`I(3$wB|uCM6`52V*HTv8RsW^#)f+V4t+7PC^Xxjj`e`ib z2iM9lHBx=itzKzLEsd?-K!fXOX>8@9Zc24d$8z>DL)ChSWHf@%pgT@dBCTA!Z`D7} zi}k(n=3XSoFpz4cC)K#DqY-pWjbmCgHIdY*eDb6z6RRnRTJ&BTj|%{(Mb(ouLE~~l z3TuqsrHT=Nme#(sPG|zrNecIfn$(hJL5iX&cuc&fip)EY>wR$_B;vT9?^pr_2pAzJ zbW6m%M7@K+Kt!Yr-pMszrr4LDFpeReA_gM}G(&&@Gafkz32`=BLf`;zC~E06Og7+? zf)Nyjg7(sc01A$lCj17XI7Ol09bf$ohQXT*0}4q{eBaVZF=ocSR5rS0s^F}QW_46k z%8CqYT2#Q0mQFKdHb4R`Mki1VDhE@2IIcnHO{%AZ#x-r!GL1%`6bPbz(Z;08!0RB4 zuMIqi0O>-OMymP;FjPUIXzk|O?Ajs_r{1BkT<^k&doyYl%EL*)1C43>W#{UnRVF9^NT9J;@bUcTHEju7dl0Kg#SOTmcRm)5!h*5!fWR1}IJ z{Sh>FAo5lG*Zy_%#z*)M{p;wTANanpiW?3iJHEXQD)vk7wY-Cm;8}i^*68)CN^Cyy z-(Mv;k~Bc=h9MoLH16z!W#}yX1hB$}PGS8XjN+BRv6Cm@)sCWTVLmlU9c%^nS4rEPr87n5ZtsR^Op#NxqP76&!SopeyADm0bUBgqDm)l{`(@oQL4haHhdv6a{Trjp;EH({O0vE~sVL=#c>Fw=( zT~ahHC8d4MO$5OHNMk7tz-8_+_(#QKjP)SU5cdjd_;KJN#KY6 zogZIQ;<$Aq)wx#tzi~cRRBy19&fu39TVe=Uw6iY2IY6LNY02|mXuiI1pqEgy!F8aw zbWdcFp(APONymHXGtc`a{vL?0V@h0VGP;UIp{%`^pdkivr6d$pmyBMA$*4ju-K&t% z(CbJNSD9UJmxw1OYsK8L;X`>i;8O{JxoP@-pm)nUYsFCwU7t5E!T5epdn3vI;c?wV z4D+85*lwdFF0q9xlR_t|YLZDXL%5ct*2g=mzJC%K#t}8qOZvR|s-g6FMR7iWy6Hjq zJU~egR8oP_e-dQtP;kkV)16co7@r-cCXB@-_^MKpSRy98y$Xy58>MexMni$+5b45= zwlozFly-`;ucZ39qiI)DV07rD%ljRgnS^DNtSo5Gl4^j+SlEt?eMUEPIx)3?rpy}@ zK2>yjw~&53a+nF!(lu@fW@b5$toD@L?-Bim!D(oKwRwFpqA=ASFwnvog`KX<`+iqX zW^Z`{5!NN($sBt*Pi7L=+^@tFYIuUfe3{$3LySDs=q9CE80AL5Z=WH$RMGG~P$U}6 z-NdO`gWB{8+?pxQN&YRIV|)j(1U!}xSu&=jddo_hR$7iX#nG`eiCcyMeD+Z#PU4~d z?fVSSa^NJ8Qb4MdqBIf~?I!an2C9|DPXGx?8)1Br_CHw`fdlB?hlP_kD=>B&&fNCU zx5L|Kw$Gvg!FSe7A|L@$hqli#+0ypet;wdyfVh{w9scI}H#6T33*cib2f2ydi~~)f z5r`1rngqUiNG}2*Tl19-HJ~SfeK?cbr@xumKKJdg6wV*H59jXonQvx5%vq7GH)pF% z@KOE9kzaW$f_J$*V)<9mfaNz;`3*%L1n+J2KO+A zrKKZ%E_ufBi<{mBcSG;go#CIlE~4!y_uVy(BSU40*yf2syO($ zz3yv4Awr}5O*LJlhiBfU&Skg5!0!G+70MoOJx<_;0WAq{n-o${OHUPDz=7Voj32ms z$4I2~uxa&sQx&Rnt(L4yvXqFG#tbQ;g#@Ui4kjOurH3(<#`Iux9@GQ7g*OS6l|k_8zd=}ygR0%tOhRJ8zngjW_ z{3@>d8d+U1kv9XJL%5a)s+nUs&D!@Py+!PNk>_~A&M)&EEd-9>s_96;J)ema8dP#3k9v65@@<>AFT3m3l5bxss+yMhFb-y4yEu* zjFnMRqgO*N2#IWM|3@zfy$J)hSm4wyK@^&ZT#kI1^`K6zUxRVXORff$=2ch6o)B4Z zYz_NqvSogK2X*Sy7=;h9)=(Qfio1}nu11GTKigL-sUm}Sm< z&z^|x%d09~=278;J?840!T0DP0;Ia0_ybcDs9B(AW^jApCEWAlFS4u7-u4O^aSLfw z3*7n$ZhPtPy)n7YSKF-He6R8`L+fNYYK#)Jgtc;3)eO^3i*XVj(eFbyt$N>OFClEZ zbE~caY=b)Tq~1eJOlA8MTy4IlPk(8m6Xu4~zNj`@j^lsIurUdv#q;%R>nv1q9F;bu4ij+}hdfi2B_fo3_DNc=)E_XBa_ygO5 z0^9mXLMLf|LbZUvY)3j~lyZ_mBqzcT(<%jBMVJs5zpsMe9Ar!9y>o@&dT^jLW}2lb zyvJG_YDaZxN{N@oQcZFH7F86Q?qB^_0M9LHs;Yf*r)#%cOI$OWXjAT2wD z)sZCQ{2{SN=(G`o;9>NN56Y2&A~N%)fQT^L*Fl(Isx;VAT0I@79woBfONnj?sWM0@ zO*LpY9xRo!YS36YMA`W)emvm(cF_B(Q*2MC>isSenD8A59Oy7ux|ep0_*%?POD`3O zUK%sJE5$*Zt>uKQDpXF1oT{|%WEfIn6ndq2&;ggFi-yAYbw?q@nRzry4wqgSY(I#T zndr_Qq!P{)CE(~<`m7{!T59Ptnjisf3U2r&u+nD;t@L3=WNc%8^9jO!OYN_1#=ax8 zsAswt^-TAoo+-Ou!vxe?3an1nU|c6<4j1 znxdHx#T@JK?A3ef*((^D9fj7-b@E}F|t>{kX@=oRw26Q`_8#|d#cQUtkGIw_}S9UTJ zJDD;5d>swNoy;vrZ71`|e>~jD+~JS6nuD&+#eZ)?f;*XOJPRND5)S|$k37P;#%f%b z1i;9Xhl1xhGdz!1G7(~hqcG_U?6bMXF7a|#GIXUXCjyr|%aw$0*O*y3&^QefAo2I> zwesYA<%z;@?StgFgxh%V^5j3|n7hJr214>a%hg9w2>a#2?Vks)gHnIFo<&2-$t3+$xc$q`D|k$? zZ#eqk=cz|{Ji$l#<sfAl!(-j@>8t?NEDt2ge1j-;$ob{`l&W zOahE+PTC2+u4Q#T_eqthMG4tc+hvF%i;}Kn_;!VjSrdTUMlbYh)AzO!#^#M(HS}HCxY(h0y(Hk!I|Vl-eFrxqtu;cHIeQo0XF!~*E*SoDGVKwBArrbVnV zs<24iE0<$ZH`j*9@dm!KM4{;||6DVjdZV>Z$N6_+Z~S2QKD<~TEH9Lw@(VQ@0>&WZ z(fX!CL`6<7Wg?%Q`i$|7RU!?%0Zs;71`|71I^Pp46 zN6@__{3AJm1G$87C#?cA#Lc+FV5Mjeiu`tIo9HO ze^SK%>L|uTnz>&Ed0#a@1*_2*yZx>9%KfSgO_^ruwA1CA)t?k}!)haOs%l4gB6d3#v#-X=-`^%~F3s*&2zgV7MzX-pNa2>-Xh@OFVm0x;WJp4YxHs$!X+QGDb0W!Tl2zh@7|IhJXDAAV!j^K6F z3{`Mb5BOsGiy79FmKP=Hn%Ji;`1-fVCVB#do&uqBK7^~t{VT{Tjbq8*|4w5S(+J0E z6Duk-uVQD2_qe>T+D#fZ&1$pEpxvxTX`JfJd7{a7R>7%N_qnQ|TLdd|s9WAqP4A___7YXoQI{2nAGez(isK{xLvJwX#+m8t z+>o8i+Ed8QqPe`CTefqz?5PWOZp5CtjYbP+^|qLSrj6WrJ9p2{E!nw6;IMN!{yf+e zKX&dak6E;*PF0HKOnus(8sHL{ES>;}cJ6p&>5SO9#}a#L#4QNG(azllO>!{>51DCg zfd>vsJVMwmljB6~BAr3|OhAEC1uhG+^#BSPX*Xf&9_1-buySIN?BRpF-mR(Zrbl1i zhy{BJV&yAOXDeSrz|aCH%y}(IktPHRLa7zmO}XVFyvYPMCO@(xfd-CWxyR!NE;k#>&KZ#Td4GVMxI2ghhg4p% z$UoxSRvft>+LtxMmnGD4Y;`r3ooVI}5O(8VEkORqZL&VD>86#i0zHkoD`BO4Y zR>PpgMxfkCA83=cX@VyiIA5Wx{{4_T&e+RLD~*?%61y|I{Cqtll^>TE+>6(2@tzYA zRibwJ`uYXeOZRyNKH+)0R>#E4vXE3^A|V|2DS)#PSe>Oa{m0?CbgaXFu(r|^V0lu^Ae zw;q5-dIw3l)MIKwcZAcGkDNeA`B5D{;XdeG%kA)8Yl*cpR*LR;2k>@9gSSI-U%#F1 zc4^@RRpY2pR+udkaS}wBF|tDMa+x7lmslLxN$U4d4p-`eL(uywS-B`H2m@vtahWWS zYjHQ>eV7ErokLqFc27Sw!%mZ^REofUpjKaS=SjTo*0a!HE9D$)A*`1T_`qZ@h!0?9 zncfSyy*2BodmA29Cz^IwHl27EroHv+kW)gd^R$GOVdon=*22HMYv_MZ&zR4kONU_t z3`CqR4x>PM!o58N{beo%j4ghX$4v26dCV|p7-j{&6%fXhuvDH6Ds1$4>>6`KdBlen z-qA*lz7RqW8-cY`y))R@ItD6P{!M-}qc7t!({xn!`+3ZK25AV7&I%P44=Jdc{q7Dl z-j3~eJkRJAcVf|}8aWDBISmP4Wni!tcQ>&W3iVOECHGX2aEF_Az5BN~+x#86Ds&Ba z_2(oRI3M0)F|T`1q-j~eApvJvW{Y1``F#w_JwBJ=I<$IeJkV;<-qZ9b;rOWZIL5g^Hp;sKiTfmXT)8IiqBG_-sYB zB6e@4i!-${I#rYB5Ba)+LaI~;Nz01ALh&3;^GrQzlqT5T?b9*dD_VHYRu;%U41$Sz*NS5wA1VlR4EvI6U8@k6^<1nG8h&@Mi-i)R^Yah4|x zuXjO=U7Q2DL%yG9@swS>&pClUz!}Ev;$?erxOvT69OOkD=V{;PDuUz(oavqB*#V(r zykO^RIjyI3t&&H(c%A29oCkr@&V@f-jNlR0ce(sy}=$>Dk295^Gv`O ze8M66&|fWaGkm)+Z5Il5Vc9Os*t5tj>xG;>d)6-G?ZSjTdy#P#@Fo_!Fk%;$n2dtg zlPR!@7S7v+dz@pD=XBgI%t20@*Q~-dh{oej`{GAKyl~T=J;Tb!3J0ZpU>C-?igG+F zVGdXwRIw6P0NM*#E^m(Khvg~~_Jtx>@WqOX?7{+9_G6!pqhQZ;Ji!GB%!lp5P@~W+ zt7CpdL_)G~PU8Bi;Hk(ZP4MR|{{;nH2mmUs1KC5n9B&E%J``Hh+8#7E_mEi9^@;#! zBFQe+JmAQhWu|F!8^+r(t*G<7ZS6_Z1JWMLG5PI=iKv!v-1yP0z0C*`4BNZN9;Yr2 z2%tNWwDw4<)~Uds2DObGka$QZ?cyPU2tNcsOK1U$NANKYvZD*5fDL*<0~q2;v82|c zvd@f1a1ZGc!0Vq#d)vW1en8@mm_C8KqWDc(noP^9qi787Cn@5*v#KSHL1F2tuF@37 zS-Nz!pDK#?K;dYw47raga#~7-t(kOKdMa>Y+fjP1r%IEN7x0Ll!&^H(*Cd8QRz_E5 z1=c&Hev%gQr{A|SN_9uU8z{l~*M0Hy%NuT^@F!n-yZO*Xb+&lDuzn5=o$@V6>}h4| zP@VYY_40H0592`n#WW=Ng3EaJ<&E`I4#~IKR#3k5{mj41CTP{1?W%fS$qe5O`P8A4 z>GBh{zPo-FlHy_fw-O7FN+{SO_fvQpIyW>MXXrW>y6^G@a<=W~Y<(H|mAe|a7@@2e zz8J6UFnUrc>iW6zg1}Psr|>lwbiYfjYs+xSoD%a{JuYEDGM+OI!2O_R#j3t>V@!8rR#Wza9Q& zY8!KW*Y?oXeRg*(Fg$IF>aB(C(_52U55FDW$~RK`W{TZ*3q{JYztT5T><-+=oHFZ- zw>1s?=e8C&H@+@xO@1@OwACQwScYpi05=L_Ct;YlAQ~XlkneB5?aISp= zcD3*J(6<9)0YIwn1rkfti)|EeY51&Lw+kK0OYL)TmD;ttbSaZ{Ry@? zzFRf24hal0c#rKKWUvDxK+Y2Di=EB&^GZwDyuq%FFP8A*i{G|mnQhr->4f2~zmoq&&;L9R6M-2Z?)Fx|&zeQ&FHr9Tzupdz4d0Uk~n1suQIVvyWvdw)1pc zO`_p4At%Iq9EU^(WtGJ&Jz{@=p1D?s;MJt<%0+6>j@VEO{5Xigp$c?-Y z&k7-rvonl6p7jc;QbmyWx2MnX$ouQaV+Zp7@b7>4e>4Qhrn?GwoGr{j3xY5hfZ_Xo z#h30-9bD(YL*XJZX1MIoWhgEj>L!~>7X9~-x;>Zo^%ta6nz$PIKb6I7$Z`fTyQT@< z!oivj%7?C6S-~wn!(Fv9K9Vg}MxL8xCy~HNg)3_A+npb9kR;FRR*uRSKo#3TaLu zq(vN&9h`gngvZN>RtmU>2`Jr47okCpt*y#-84!?^`1m8b?H|`K&kihNJZFR#gr4G* zA9H%T5av6x92}$-7(0THN}HcMxn)620bnt#;CJ&_TZ0f@83SHQ*mb?J9Gb!7lQhEi zo;H(hr2Ez#IC$frFFlVyI=kiqc$~dhZExc?68`RA!D)pim zSdiM-r4&~SmS55QnG`#< z;d$o`>0S27lBXLsn}{qcuoly zWXlC5@1n_=tXM{+-|5W4e?N_8VKg99Erht`I=@9EG~Jm6KuUv zunvpv(j)!ro0}f|^~qvK+Pgo5vuFfr!@g_3@81A-a7d4g9;cJpJQ{S^w&19t^ovAo zs@HYK7u7i9>oxeUvl4s@>hMB=O%jYV%acMeo=p!J(x&M0c&r*CwI5Q_dnmx?t8<@@YIaWwiRgcIt21smQzjfZmxfG=-DN>}=XVv{m1 zCPtoYX_v4(rMU`D7}+J4m!Dq}v6h}WcMNxYzBOrgSEXIjBpc)!?ifJOC0kNS8E7i| zg89{=z&tJlUs4H)+M+djX-Y!I<#s^@QZ6?TyGUc!NdeOteWn?4!N#P_faIT^qwi@h znlR@IaI(x(fA0)|pX9I%k!;S`UsL5ecG~GyK!Vc`Fr=bc^gPXi<_4z^SX9%%V+??7 z_JTI{zyM`&+C&uoBw$JWneHU;d7EUC8s;!Ky=N{;YNBilCz-4%!sUe|zVAEaqK-Mp zAR`wY;9A7=>F-P`S%<$z0N^V)^_j%^X3-lMCM|#Y6dmlMyl^&~%m#-}2CJ=FUPEl+ zkX&~v*PEjZ0G?^y%0)*wo-b&Uy2fj1q7uU)FtL*HB$aN(pj#h7Pz}623H^#LEw_bq zkzJke=Fx3j8`Ps?CiU2t3W~3LyaPP)YmWY}C#!RB%x&>$j<#|v%U4|cHF`gq5;w`v z4?BPcs?^SFyY;}UeXKc1G!5_l6S2dgi@-BF_V$b89q#fG6lm??{_%!o#wB&VBmE%* za;^X5{VU4ept6(qokKuQvaHrjz6Q#F6^aop4AI$c=?n<}RSZ5tV4qAXgzb{N=B_hL z?xU5NgCo4&1Fzs!l+s(ly|wM2Z_5w$(bT<9b5;^;u(@-#Vpa)cV>s?h zY1#FUfZQ}_VcRZ~xVkWi<03&@*whX~i%%AuAROJM2wzCdBe0-GxP2aNZ4Q))Y$x1E z|8K%U+DZ9GK4{7Jp+tIjg(Y{KDwoO>>VkHf9 z<*ZZvj)Mb4ktK@ifL0r*qUIXpS1AIKhLp$kRnG?4<@+#v{&+L^WRRgmgwmH1$GLzO zY)w8+rn>$7MBYL0VZ%l~J_0;cZxU+kr_LefoWv1VdbMi$1|mRE`}W~#@qtmIOP(oo zJUkEV707E5`bnC`T$8#^k3k4Ky`ITF7^hUKz%j3}WdEUOLd+u5=|)%W3W`kB8R8Ai zioh8exI-a`ekEM18o;}-BQX2C@=K%ql5dM-*=S$CpA-%&=ov>U@Nlf4{n3QR9NjU! zru37<=27#v_vP1=Hk!&N>+f#r;;$Q{ zW5~4}EnZ9}(+Da6ZwZBPd}b+4E4_e~Rn51?v(-)Tf4ga1=R}Ne#c$QFtB{R z|D|#@df!i?Ui4G=@Ia!cDSicjt27nJvngwM|6ia*FIVJ+W$6-t+7?iIv8gL(?P2WM zK7RVMB@*24TsmhKE4~;isEUt&?rF?!SQvAITvEhbh@gW&bC(R_`-8qjgu-^ zzKZ1~ZRsTs8VcwEs5r0ZIp-%J(2RXUkS@^DWZO1xn9Evt&aIQDR2~kT9fK%LIQ5Xv!n1!a*8__}d-++3EN#=|%_crM^`6o$4 z?^60*s=!!P?}&6M^0)@aDC04#=o|!*7$;Y5@QP1Jfghv(eT-O34}f=#vy49|b5UV~ zkWxvIx|Lo-khPwdRUC?XhP6U{SzlgIO;A!`Zes3&8TzO)O(msh>Vs&BCycDU3qJ!~-7tyQ=|@c0%Lwgmnf!Te>qD z6V8PLB@zfjj)K<{d@bd4GVD7IdEH4BpnAlfi4!_P^<4x_uvTGl1-x=8l!KDArF|IV zK%{m;>6`8nyMhzERcaQyVqyd4!;>==M&Qf~9P}q!vsxiHE4e5;O+O_&tFa@BKW-%^ z;K@L4ik@O(dX9QEm|M|==`T=kp=HV~NPxQsfVpxf0*$}mz)PR}SwFsO^Q9A$ThYU(+Y$kTCwu!1S#8;<^KIQ+lAl2lNTwIu>< zh7_>of$CHfTxxPQW_zna2c%MJ(AicM`n{9ydWMfQ3;!>k#k$>_!uede@BR zQ8S(%3b?VG{T00r8m==M6s3!nswOwFpL~a}1vkWk@Nej($~Xu~e4F}+Nl}HrvsQz) zl`w7AUik>K*F*uEqWQaoIQ2n7c#OV*)wGoSup}{CJ+SKNl!O;7R&l(_u50VAgzaRZ0Go9;EBi$2 z+GuRH=@+ zp~)t3fRe2&0WB59X6mn0LnkFZc-05^16YWPwol|{D19RevKA+?VNytuV!e-dnlHeM zOAYKg0F2!e3K0xBFYhA^-y&F9#vMg-ud<8fF3g5*G-KIi~EoRqZq>U+F8MN(ICI)lk!Oc+Q+(qa-Cr^P#G z{B@{;#_mnpxf(Msf=hN7PiY&tMr@&WBObjRFc$~IO}vbc3c{&sH6B{dlwFq}?$-wS zujpv9-4sUlH4D>Z3>|pQMjv-yUgeP!%|8w+5VI%BQqsBJzPQ>|$x(UJ_ITK_K*RFz z*Uqh>44>eaX}p>$v4CYX#Pco0KwWtX_TKCL%j7XWcn@4ATSuvCHOq<{C_@Anzhf5b zMeL4(8#=waL=rrj)|5=SW!L_|g#KD?IrC!XLPwPwbQ{omor%^BlnOP+T!3~9e|}lS zT}k@P${a?WwI*}b{M2Efe&^L>-o2aCTDUqs9?fbfDyWHSf;I|y{lH;Y8+~89hOoUo ziszP8>?z$db;>Be>1oArY$%Q!!4KbaNFrwRKzd-j+R?PjwvhbVB!;BelFIkGb-<|J zn%bXTpM%*Ownoc--JcSjm7D87-b=^Noh#tB&+_}0raS|0YbB33H9nGo0PB2S_c!(4 z$rYy$x`!#DRia)VNBlML!*YtWsFm@4(}?+B1ai}3`08sX19AmE!%K(kDyF2jE)fSLwI5z5}3OaUIOSAJsymWJy= zQ_KR11^>?FwuXl0?_D(zvwUD>-Hlk+6AGiCQ^9+8loqulm9j{_!fkFir>eToZbK`Z zZ{2;x64+p(F|g;MyBGhF+`czUAau+0Kn_J8cE{8zORxU)e)R0~dff_KjNzU%xS`eLvX|coO}WuA>#qqqIeQE3nnho)Kc`T74q@XvXrz`wDRc|GP4u(Q;ZZcQgZZ@ zvy`;r38^bmP)NyC2T@5&*GbCEYtzhq03vS^GI}_M)X7_6O_@Y-W>Q9xR;o#HL0e>U zR(e8lR(3^8d47Hl0IBe#Y`uiJ%u42WDhqrOxu-E(Qh0n*TLcVO^_MehCaOm%IybW3 zu>&0uGOqXRgL(j;U|ZX7i9L4tjiiJkPqI?-!)yyC#8$RCxzaa)Yg=ly0}D!0M>2|{ zbg9^o&iMCbZs^`BMLKr~^XoVYAtiTl-<=`!{gk#THnPt|?X z@KC4ut}jQQ-!(5n2jxFi&OTP}24ziDR~FD2l8I`;N+5Sm7V>mqGRzfctdtBJw`@;e z#-bsep3uxxRc~pIJH?Jg&v;Rhq`+b^YnCr=_;#YfG=j9@Bk(BJfidvVH0qSsRE}`n zx&YD9*^8YeUuEy@yE#2w`aE8mfgPyONKtnBZkO%3D}p^e7K~51)OwjUY)C%YkQEla zGx+7H%Gbo(>=E!&s&tlz`beDU_?8$@ zX{&cwOngB~&%hWqcxy6Z#y?c*owcKinj?+zewVp665M?~di7Jd;VwgxuUb>B zb5z}}YJ@owT(Qh83cTL6{30oK(kxMee&?j#Egi$L_M%5Yb#ZL@c^lX4SP(lcLo@l& ztCKA*!@oq;$~lOhI6t-G==dIidER5*3DY5z&QOfhHzx8RRpI(VT8Ko*WHuf zqN!7B*2{S7Ox*4hf)HJ$-T-uVNe&16(4-HYRA!bCq1j|+3Vlx-}eQbHtZsFn!IX485Ohm!Gpi?E% zBeW}_U1;F}{rG!@Cb4Fs5^4)5u6Bc4GTO^&%O>m!*yn)|#iSR?Req5Y!BPsG7i^6W ziCaY4$oX$^>$FM$+h@5R_ZM2CnySDdm8p_Ob%@6m_?Me#LTlQ8#EP_~87=Tq-f&r& zDWZI&QJAq;cLso?QY@VN&eRyI!oU?377VU8@A@0OX~RChc@D)cq=@oQr8b3);h9xy z5h;@uA6iywRLE^>RKj${GDOUui_2|5Fc0D&l4}?6El>~{-wbY0;TUT|~zRHCOrYFssyQAB4BS>)ADE!6Jk2^U0d|8RUIuLc?VhCzk!9-DKoHa{-rclY?$g*xXUmf8G9D%*G! zHMZH&WNd7Buf6vBd>wa))&C(W@MBVcL@xiA)Jm722sx0b7im0GYN)JmP3#I2wB1pl zxd+^0gMSx&(BYM5CRMsXA3rZe+4aM&IZjkh{3@<>JRYtga+^bo7J>_Zvex>txP3z+ z0d<rAc0!gnq>>T6sWYT?%fj#~tSZ;WFsWU(QHj2s(j63oqkSJIGd;DG1D^M#w`!y~?VwwWKwF~8Qxa@Q8&75C9L6J0L{ z_lEN`8_DJ<(+N4*8`UqJk3tx9M&}Vc9kV^Txyon&pGI?iUHmd#WC$r4)=H-Y*#m&rLI}MUI$) z`6CzlIwPri1-A>D%!-_*@sbdqt+Dyy0_2k4z~1fyMm4>Cxd+L-GGl=YkjGdcXZh+T z^rCp+D>>azAmVztv)=p%W<}!pX6`Z25ySadQji>Z9f-|>x4%UJCY)D-Vm(?80lhz$ zxRq9>`bNARpVgKK)XHXJ(U{u?bT0`prB%WVT5FA>L@?e^-~ zP&w&^X4bb%jc9bN*(*g?4PlMgFX6m^=wP@r{BP6z(g1Ppi3W>M%J2$y6>}-UCM>^d zCix}I+)llHdb!K~18zlscDJmk9v=%T1G|QGI$j>i3Vu7oUuMYuwKK7Bi0v4r{jr6o zD_lGvi@NuzneF~r6N7g=`>MKdcFZz|0CBujA9+FGv&n<8aKAOM zN!EeMO*+e7L}JQ15QI9Z-kpO;h+xIpw(oj!N{<$nOtJtvlrw+sNVQQk&6(scODXk@ zM6F7>5OHvbccI; zPRyt;2mKSC=@78httd~$JXyJ`R)GKkACpp(MC8gxnO80)igtM+hWC8Ws)$@PX%*sAZ{Y^k zx7KL6h|)6R9*)t-l(EMgQ865kqhU*p*ID+T^gu@mep|X`^#$AQ?YSKH)OSPi!7ddu zOT{-C{|8M&7ewQ(-d3Uv!8vz*qaiy!%vk^IZx>%vXwbG{9DaAzFmHKf6OtIwCrPVn zUnIJVQgh-Z$YmX(cU|tr9)puV%P!1*Yqu<7Ry!Y=RbV5rhKhlIim$gtea&RrtewE9 zLm#lPd30vCI6{@31DV!+hB_)}1EEEo;Ktq%sKXZ2rgjVLBmGYiAA0cg^j>~ly0PM* z$0%pE8n|VWT(b@`_~ttYZxYUIwV!=DeAYtk9s0+Ws|dBg0sGS!@Shf0=pqX+cbs|G zoG00^kp3uxFoju;YC(Cd6#$KB7I&8K$BE;MsC~GC2a<_y0BNLl>ChqaSecpAjbFP#KZbEGkeh(V2r_d|m?sY&Z*J0r;Z23hWSlDwG^?#yXroBvtc}HKUF_(FX6TInEC-6( z><@k45`kp|AWiX`=@p-Z{myJ-g_h-G0AJ=x!+NiXk%0!?!9P|=XqXxs85Jo5(~Fy> zngkgnl|e`=#535gK~6T6?=umJK>Q#-hI+{|p07aB@^3>3QXpSdOZw5KGsr-k#{hE< zN7I4RPz!^zlgBSXtl5yO-mUhL;XNO?C+pH-^%eNQc}Qk17Dn0LE9gha1aHR-|o zb_Oig*rXV`+!pncHuTo>xJuH9jdPI4f+|A&^L1qAwmveUWS6>zMXx82%%Qt+Ij5v; zx(=0MEf_6Ci$s|cLIdXE^LuTqy#3d~Q*mOcm}#};*$FTB$HGuwX7(k-i|rnIo~)J7 zig8wE?%q54UV^pV;+Ht0vzu!MxhJlPp4<6W6ieK1uaSf1^4Lvx%Maa|4{s6fRqTqIc0MwPzoyh(ZURTtkR*_x zMD9IH>%d8#>qHY?V`E5IuYY}*T65YB|N2%w0SLVW@7_o>3-no>ngpfRR^zZ9gYvcM zfORrEZk1^&Ma3#*T5%0t1fA#WnaQD8#Z@T2kFQ|Mj3#JUJIwin4Azrh=|RbB46wLTg3s_-CRz9mbF!ZB9bvS_rbnW2 zHC9>oAa<150jLJn?tt2FcC^uZFUZDxRuI)QjS}wF`7HRIL-1TO#xROeL6g6oR2&wP z#~;jJNnRUfWd%zlREesoRn_6wwE>9+LZYjae&ldREE}x43|^teKz-?BN;1l~$MM#w zww79ts%n3JKPss|AtJ?hR1aYSjXeNgGhV^A!e~XsjY3wU|64Q%mVtM?`Bd$7wBsB5QQBK-zv{S+<_E>0INZ!dQz8T||c@OqM> zk|x@)WnY+=&r$JIZGke&m*ucCT5b>QwU>?9dTH4NATnK(|b^Db|kpNU` z$u30h+=on8RQGJ&j+&cm(@y+Yn}tX@Q^~)Rwm)}opb}CkH7qxoCO`8M#84oF_rPFZ zm-1t{s(I#z0BFw)sL>8HtN?< z50Qow@>3f94#JJTN+n;tINiBa`ReSWX#BeoA;e;7ccK1w6he^89E5ebJI%IAM zsCdumzYb?6F0>ogqu30yXc!f(8r_?m>%_zSW(nSNc68=WkFGdlp0}reIWuSJ>}n@K z$OkMP4qtZnWa>trK1^_Ob>qyLV>F~8m(H&`RHm3H$1(ZFn?3TN%&ee5PMvX6Q&B#oR1h<^Majn<4P7bIN@A#B>Ql#yV@#_xr;}Wh z#7Kn_Gq-j1zqcwG&>*LT;7Wy3r6opT_wNLy(W5Mwn)6dxf`QXTN=W`|&m0<*>US|M=8rbmjOI~E1{Ao*5MSN5w+RX%ezf$k(sn@Ndpuzv`UO#a%p z-dW|cX_1o~$9a8vrl$uA)|t=uVlc0lpXa`Ad*5K1`t7NYDh3hOLp;8kQ}$bkHgQN~ z^?PuUbY^hAg3ie~|I^<;-57AgwDJQngQy}&jk=D^Uwa><74L1PGPJb_{l(|Xn0aV7$(a?7%?rT%2$Hs0a}I49Fg*og(?n_ z`ujrYbGObsrG&Fr04Yr~2poG@1T0dC7;^qB7aN%IE>1LGZv2xLvjQP_QxX6I8h~dM zMM})w=sJ_(dnU+BfBe&b9G~}2ElA}HQ-Q@)T~h*n(B^)=fV9K{3TMhB3IaSC-`@L> zSsW-rW_a+N75J@Y2`Ri=M6!e2eXm1gasyYNk)r%ny7?QzYp{1t?w07F^I{R2T)Tl8o>Agb0l%Nx(dP)3F5`=L@ARM=7AGL-V9Ot(y`lqbOT~d+EWC>eQ19 zeJP3#l5QVVYGiZ*kBRL_*>e3i5N-OZ>aN&ecW}SrSej@d)7R60{lSe?mo_3=??wi@ zS-JMglnZQQZDYfRbrQ1OAbkdP;&lY|=93xlD9TJ*H=k+cx-UXJ)imJehQh}XOYLhD zENO>XYSSiBl8iGupfX)0g%M(M=?tRqQ=pY&iW(eL*p`!PqIpVcT88Ro7o|LZo(w^X zQoBi+o6X@mzlSmB76$q^#4`U{03aS=31YluVOj%-dHXQp_?A z0YAOy^LcZGX)RBfPyL|P2hsLCUE7g-@odJ0hRR18K{28?x}}TV@1B?5a7|A)-i8WO zGl`?Wr1`D{h=rb=tML^9fR0WC%;TAN)KqV7W(_~`qOM(pu6`D!Sr&Ar%2C_&D_m{5 zGAt-Qu#hB0yB-+Y!Y>!Qq|}o`pKb+O><2Sg&5JLwQj{7$L`obBY#%+~LmjE=b+Q_2 zX&y7qy&p9dw^ZsC!VZs$Cfbbvvo0YhXdPGF+jktig~7o8ykqPHUPsfQxBQI=lSlTN z#;Dp1wrvXLwzq5~Y%RwNU@x5#o4f8hZaV(Q=lj4b-6hp4`H0Ckz$CU2mC(3*`|v&| zR#&z&?{M)rjD04Rb4S6<-do-QS?cy6kvZx)Z7>$tHrwMp+|p%LRa6%_dl`r_tcly# z>S?>?OBVlC)i4%KqPrxCNkIkY#gwr|$>DEqJB?#3DQ zW-d{~wvm*SZD|bt*0d$<3cP#Oo&V$kVhqP6JN=4-WbcZ*BlZy|qu@zcmd)1=T6nI2 zu)So}Ey=c=sK#G+$>!M87ofX<5WmQxH6I9Lbo*dTE3EYiR@nemLbGTw;Y-d7v-aZF zn5Y{}X7GnajK1ZVR6s_bae|b~(wy0Pwjb|swzHH!k>ey|(5PEjFRPj&Xf7*O2CSOO@xZQxyV=Tm<(n^R z(~J`T3dB7g@l(v3zW@r+Erwk^XVfKNeB2ghc>w$&Comi{p)W>0Y)vzQ^vTW<{n1Ga+_DS8z1wPxQ?e`ay@wveiuY%@} zmbr^;zp-~GZrS0$Sens3oTEW=I%L<>Eiz9l?6PGDlpO^&@T&$7*|hsGLp5H1 zj>A6tZYVdgfDk^miOX1&8i|udRyp%q^#13{`=OUXouu9|;Yk4P6{FGK+8F{G90U)T zZv91V{w7UK_#sO`Fsv^2AsG|pQ;gOQRlRALE8CqN+do{X>&}bshf}vW>xvEXZQlpe zLcTi%V9DMXhrhu~hS4ULaRT4yyvAtc9^a1-F7J}|nSA}z`n5{_e% zHL}e?F3>7P&{+4*3~aQY+NFi9@h^u9aYY(T;d%i?He-1YagHRu_P66iDJQ!WT-QO7mHY8N^TXJO7wY0aEg-vy)DwFhq5nW!(A zr{td;dIp@FdVg5>*#M@^ke2*2x8d8?d%M6+82eu6wo2Or$U&OStekZiixuWKei^n~ zIqu!)Yy?MV{1VGqMyi&i6z;8}O>5~+ptSYPF?2z?7%Mrhz zkf*;lw^Yf3|54dVg3=&@Xk!g>&_Wf0&;!<@))Try^hDRPTrQUwL=CpL)d;oBQ`0n6 z1Qzk9zu{7j&pn z@F<;Ab@TV{SCt$paGdFlFRS87@-jH z<=ybw`GQd0tYx;Xfq4M_09in$zc*#?MD{zY6YwN6W)e5L=0L=sIhVoLw%k6_ChaK8 zVHqkQ89!wdb%I)q`}K9l#0Ph;2Y zqTmS@x0j&Nv^8oe8@VgjANwEr9!KpJm%6AML0!86GLj9OVrNjFCH4p<{W=%5Mzhw4 zDWF7gaPm5w3-*zy`8&e_M)&(Fn?36~SW_%0Ajg@S_})N7o8KW(Gn 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
~*`SrY4m;!g7 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

    53RWOQlM2?31WW1bg`zXzP*JQliLv6jESc6@ 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 z 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

    m{m>e!a1e@&b4j4*q{Ym+T<2$S* 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 z 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

    S=h-A+ZEqH+(@a?dUXch5 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

    R}$#e{sRxDZzv%xB!XSLs!7dupw+ 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

    %vb~~hJ*Hs2;2;ppr8YiE=F`^K2NbF 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%0D)AE#J9S(`}QvKa2D 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

    +}sYLfaiHBfW5EJ$q5u* z%onsyW9jHQ>U!l5K-PNdcdMar(*J=1N2X2jA3jz-S0h+SQCkreDi%8d3X4{t>d>W^MYSTKRcY?1+{r)xzaKv{Wz@Duo=YBC;w3 zW74r?8b`UU-%TT+1tnbEKiN5zgz(6~_pr&$u}W!P4pRX~SO-N%B}d6cC2d%khuBtS zSe4LWZBUxjWmw<|?MDZ0CSK+QkTqlIVuL#zCm^5k+Ii5Vy$p-AV{~Iui?bV@>uKqb zAYx61$h+X>LGu4nO}cj-w|@HOrh*UMkpGb_w;!|J2?7s>DYXxkea`~OIzQqa;wD*Q z`ad?|9S6c;Td3Pc`}R?R6g@`DM6%q^?f-|K97XxgLU0TUn^L5n~5qa+)pCO5V!Fv&jpcaxo;cyxP}or{Z~Ymk{rREmUE zfuu*1k-e6#kxIbc3CRWn1Z9C(?h-0v>|bIE`WpoJ9ReEyTjvOhu?w>g%Jq=*arrUC zKjPa{{cAz4w=o119Ta2FgkN-?em)Y-DqasNIy^_Xi77d;3QQkEcI2WQZm?UpUg=LK zhK38v#%qmKBO&-tPz+E4xnCD5*)}Wh>eb64Vo3&=gt>`o5KI%uOcCecGdcg6=fIij zxWqe*D3DA6%_MF6mCqK0IC-+{asa|QjR(~j^dm9_TC+DAx~2Uh^HrD90SqLo3S;UT zt6&HVko8XGBWf2|BW~;@Wv*rIEoJOk|NkoQiqx}z`#eiX3~;)->3!Deu@n?}o!-V+ z->1tG-+7i}j&T=Lm*4(}UwJE5?BNg-$UW?&L10`VdOVYpWuT3AoZRiRcF-m3L`q16 zZOJ3&=_=weX4i;pYmZGB*>&r2=T%}sGZsM}!ToybfPTd^lfcVJ+1U23ZC{(*FPHcu zWr{oVnc2Bv73^|MhJKEgUOt8qs-1(K|G&z5ob0t^{}Jg!-hGqtx*oG&4t8_>O0A;}_r@dFkP9Dp%IOo8dbPLi_t#hyP+ zCZuyXUNxzSy9Vx}GjOcP+U-s)GXJkj0FYnhRFEggZH}}CR$t{=6kT^A^BV(kwr>Bh zto<%3$Y(%y!#Prb>^~bmKTmw*%8UvJFr^+9@1mbw@Thb?w6Y?aV&ciypc4@g$uRiq!GGuNRi&fR zk7K9s0yB$Y97-ES5mi7jkX(&l6yGA#K0~e_RgEL-Pp`xY5-X9??b9rW4k1R$|825N z`W6Y>AcRD*|7nBGB&#RoR>mh~Bxt64qbil^UBx>C8IFtntC?dCN|sQj z$nZ{G4AVWlJci|VpXr71=y`i{GJrk*m`kS8f!FkUMr?b9&9ZkAz|D=R9(sX3ezP;k zjG!>QCQiD7G}9$zXU&WoY&y49cg2g+#u+n{I&m~HtCO`;EW)$jg5wqP((CR%$=2%o zU;w}8Y)0pji?Y#Bb#%2zMtFg@}* z8#i)34F^Xst=+7*`v@QVkik`uZn$r!-Q1;Fts)meusyxi6+sAfs<1qnJ zqv_~VMTUI$s1?cG$lmYeoHNh$ou4D??8rWgu`{*h&>*_7shBm`|JQ1xPTygn4lkc_ zRwIpcUrZlTe0D3&RQMHS)b(7fKdMghgRZg-gl!1@=)JPN9aVba8K+=i%LaH53@|CK96_=^aU3Wj=c_Kvr!8P|#-uaM;FuO1QcvnUyh zj%)SFGnV?ne|t`(NL7@tZn^_1Xr<^G#wKN;X(xJGjax1&wtfA2RR;T zgzKeK0|E_Wp5m0@E`@jj7hRH)?m;nEc1vWKeBt)QbNJq%_BlnIw*=lGKCpd3(8%Vk zm7LC!=H0JTsR6J09kp9s0$qGMI`JqZr+M3=?`4RH_6a7g$vBSK%}SJ*5#zgICo zl~0oW!xIsL(l;5vqtF;sM~CyEpVr_UP!)xO{9ngGFnxY&=czAt)S2~ z#6`uzJzHFLxF1(7>Q7Z+MNB>%!MpLG^N_slR}-GWGuycy3%h&UA{E5JTgKVff9oak z+IWE{F;tergeSlAz)0YFSym^)I5!7M-8#T9r!KGslRRQ#zjj7Slh@}Rt58__B?+B| zHhhY12*@OEvi;B}NEpQqRVZdSx!!w|{z8=hZK%)aO7EjXfva0&V>i!1yGUflM%0dY z4y~(`9#qNwf7hq<-^AxXok|CTok^2PgFw~zSfG56NxP#QYOZe=(xbLc#=)m&Km7mF zY7Hr4G~ekY`P%7jZJBQLQ;&(vA)4UtU}X%>&<1MjqUEM(Wc|q1&dSn^*G6DzR>?d&|FGD)j)>u^j#YE?7W&^!MRFOGIj%mi z=#OSsz?Vmg;`!C7UUGpGFYZW8kN+R|wAeJKzX z`j{p+lf2IimNaqmv3rFG6n=s6uDt~yMe5XwxmuRz^qA`fFhYM2-FdJrX{LnLGZS-> zqRRt;bEFQumpz{?FDGw97sxHe8&wk=XFZI*KG+RTc``s&{{%>7S{HNSL5|&WG~nsk zE_#QX0>X`2NA&+zZ&fT5xpio+2o~IX?)k-!YDX_MpQ0zMt{JbXir{!zD{&r)klN|@ z^=dkPh&`bWUFD_s0jEXIG*|yCq>K9MLWh|8Fq_wTld@Z zOIpq4(fD|eW^HrD31~89Nw>p@=_yFPvFHo<)6DS6c;9W4XA=NLBKhYQzNK5AqbD?} z>u}tz6o3%;|4{ahO`1SUw_w?}ZQFXvw!3WGwr$($a#fdY+qTtZOrP`K8!>ZZVj|`b zBz^P=ffxF#}6x-DgyR!Jp7K#3E-eG7l{Mx z+z?)m9NUEd+S`msB@}2_2s2SXgcBokP)hX8h$@F*;ReSxz!+}lbb2Lp^1HvFHONt) zHS`3=Bh|M)QD6Cj{BkdLlV`r0zRg~b|KiegK|4dOj18EE`&c3Vt7j;9c;?g6XdBxt6;vk~ z!6%7yh$r{=S7`^WFAg%YL-6rZO9K}9^XW!4J`*m%SVl4=-E|R5*P3c}{SwgawPElcHf>upJdRA6aRuSi0PXZXNrptpn zF*vjw?SIzh;YskA$fbhaeEBE|!1O64GTD494MRlxnSolhj4fYf# zTkoW$C>3so+K>X^Az?-%nsjxSVnww&skm%XJlDHAIK}NGj?-cZ$Ylkq)W?FE$0V_4uU|f;QCgvCaihhOfnUz9zgYoA5 zLb-tRkGVh_EbxJufd%%M|EB(=pjE`N2nAOQQHH#)Yo%+G2Imcz`zws`t3%|fBxq)1 zz50Oy?MZRuNtUI6S_R zM?o(G_nw4C71{ozkOGlXB`7HGqlBw;Lz7ZtW;=^Nwv`-Nh6p4s+#9&l-dZG5iW_*L zh;~T4x7e$A(VhF#n{_*0yvN%sV$kg!Pf5P^-tR=o=83|wKbEVHYYQ%mOLvWWR9PA7 z2CvL%buyiFIZjNjavX)IsHg3!t&_4whN-i}kDCKCBj&@aY<~oF0H__~e}2bb-TZdr z;L^L+LAEM(U%$^k@yVF4-*?Y-)PeK84;4b+KLKuECk**e4!2l`TizR8xM)D!gQfKD z*pEM~y`MIb`{Hk3L9IT-UDK{xFslPkn#_FFT`x0`ib}ymI6CzH4(ASUora$s{H?r7 zanDNFtVyHVHKaU9|LrX*e}_MC$08C!5=oJ86q@wY9P;WI9-ZQzogKa~K5O9W1l6PL z1){dqS?ja<;w5%_m&v=id1&G0#=-7t$>sVzrHPX#TPj#pZjREEo-gnE@>pDHGx=Fl zeY3oHn92MNN|kM#nF;p;Pf_UH(NBB^FCPz%)5pmmaOnfBQ$4nIz?n18;*sN-g~<(0C!H+ZTM-4VOL z0f4CO=#Ggghy$Sb(c@vf&MS$~k|}}~bWhoCzk2L@P;qREnrHwb)I{Rm-R4C?P$8(}gI^(OjL$&*(#K(YHyoYYq?OWq>L*`irj zzV#2mG*yyku77tOYQMNlqI1krsyHj%McwmmvmDZ%yuHJuKk+R;!_rG{mWO9jIiJIX zy9z(5ttfphPkOv`I*qGJMdiW%VvWLs&5DI>`YXVf0rssh)5S?L(j~N}39QGaRj8wmi5t|f zQD;vmQ%p~e2*VbOFUk=XpRJ4#!fz!HMZ10#cepzAgFBY=u(D$Cb)3{iE`~IOP$n$Q z+j&h^PzeqiOAnQ}{k%`4gWc15O2+-xbn<#b^I#Hons|{4m39$%D=$XFP;fYDcjM7wSJ=L#COxMq`GPkZUA1eg{`|~!wPLv0n zfvI?&n31iMqOD_O&g)4WPgp#E^1|08tJvK}!TA8gilflONYmrV{u}?$gwU~J9CJ;J zf>t_0ZiloE!Zcdpo00+2G`s&enk;4i3LfP%In{KiaAYShXY82uEozRGsMo47RFWj2 z4h)D4Mgvfe{(m!|ouwO>otm^OzO zZ8+CtH&m(%mg|`(7PAV-A~Gn}QPN_fVY>4ZV~VFc*8Jv3augP6J>~Pr2m&K6L5|@k zo>14%?tpi;TDTRRlW;4%qmZkmq*>^9K~f>f;qZBA><_`PV9IRl)-+eJlo}(Vk*E~S zT;PIwufXqTRu-5p)|cF+mycPxA8?;A>C@9wG*+mx$L?2$nf{4o)63v4`j2=w@GUuq%Cg*txoH{c*OKtYL;LBxpIXK9vG8lqruU+c@ zk*c;K43u6WO?3qoTZ!k9gFnHH5F~^qHm@oC`!8%NMm>Tzsy7SYo3omMa%7S&y8`#_}}@aaGcC+OdHGSe#70GJMMe|QMj;(o`VL!c;xWX zxTU#@Koko}_6U1fMG8Ag87WCwMa2yq!Ew+6*X0a#JuM79Eroc54t1f0j%TlJQKUPs zE9}fJLjdvaq25&D|G(n)e*hT#)_9!RqOw$%dU%SdbGHyCwXn$C2D#bUyq;9Y1uHdv48@Fwf&UrjHINj zkO!r{tEl^E42*Be@^pOtV-NO^R2NH5Ir2d`Y)+@b zX~xGD;uYlSsHo|s!7F3d(0o4KR(JH})=fukIPwpq-(C-iRLSQ$j$)RIj1n4Y-6qon zs&5VB(XwCoYFwB7X=UtWG8#WqmhcjA61NFgpv+&V^M0N-BPa7P{aUvFR)$qkOVZKE z(}PfJVmZA*iXUW~Du9D=#^YM z;osNZ63V?-Y!;7(O=F$z@$RD%jg1u(8%*7cfcmP*Ao}4j!3Zw;W$C)?EL<%birnSw z{kH2S}jhd)@s~R zuj2S;YZJwL?H7pE=Sh0vcJ3e2x5tA)c3x9MEQoyNLJxWwCJkIAnL#*x>$FI=)0Q!; z2P2N4ZqzNd7K1+?NS;%6OeKMNu(osu!@H}5i~_!1{;uOCZYsPZ(AENoAYr|S#;`tV zk>NzI!s;S{K!Eob7VONcLw8Co5lOYJ$bC@eyu>u}!lb@3!$F z6hy1Gr1;P?!Srdb?r6|v_Zm6+>TxzGz549xHjUR^*Gf~uZAx!?LLGD4gao-vb2RpJ za9c<+S@vO+%}SjH7P;&WjIo+H;OF(UtzcDlh1laWOoj2gVCC9%eI0tkNW9)Z9iN}y zS*?jBZqv@K2P}|z&E7zEN7^Y2nNi&YBjh-u7gy1n`u(t6t)Z_2r@!yHwY?G|(cQ9D zlh3zKrpF1u49Hwfq?`8k;EaM~IY@rz;C`vKhys4WpNAFJG}7{SBi%5uT%hp!~wLz2ZaIx{2kl6FG!fmn)#uQU}19^*I) z9k#aUY>C@(Xm9msUwNX>zM?63aLvfMl$>5kHtFBxN8mR|U2;9jnqhdqZ+qfno<>S_ z<~DrCU3z@s3uGiZB(sO>lpJeI!CzZ`olGt9x?uYfs;~q6LzZ6D2)p#dD;*`{lw0jP z*Q)JNcM=rreyMDFy$^+^aKUnoJ==(uWnW)#;=7J~r8ybZj=Tv$Z0CqQi$xmg9*@nt zd@n`Cs>XVBtWoxEIBiPr+8dL~F;FaGS>-&c$`+AjHAILlt^?bNu-^BQKVPk|+(7T{ z*kcYkPx|qg&d<(2b#{Q8%gug+cPew`IYt|F@P0R}uTr)1^ND1HGxN@}NS&X0_GJG; zZiQr9lR-zA>-aSR2ibZ}tmAj(3dpXpfs-OQ@|Gisn1vyAX|+&MkNFjfA2hCwTOAG* z(Fxs)fC-c9f~$oyZ?rp5l-HQ;rI^~fKH<8+!fSf#QHLl?w+~v(k?CeBLh^X}x;&7P zOG)+6gHa2Qt#m07?duCa`%4OU3uyG>1k!jTTIz?tkibF9zl_o0Ujhb{njb|SoP2IS zEa}ry&I|;E?*6-PM1j-t9OR~d50IM9AEYd~rNS-1l z0SS>pHWVGlvS7q$+B+4$- zx7z1@3)R={mTe&hAFWOa{A{Ot`aI6ari(bpD~8D4v9r-e@E5C?Xo_d-+v0}ks@Xp% zl$7g96{@t{J>Zn7SH(Tpc}O}R9gRNhg})6E8SU5UX3VDiOBlhGguG4SFyACa$eweX z0wLpKI!DkX+cgJV2r5n)W!m4^Yxua4^1)?zN6FT)l;-6K3D#Wy$t1tzD+AcIuLG8q z>VtaDPeJZ2gcJ*49E>Q}Pxn_A>gM3r`BpmWHWe~j&;j7`E%gr1ZUGri94KU3%+5oxRSBjXr9Ssk6^(#!>b zD&?XqHGFvUr%z}W4!Br&$qG-8diJPBN+1C&h0Q z=Hp;otqcp(sg^fVSjkK63(}hzI$$+v}9lrjUBwis(&Jr-#HqZT0x(h z1;5Q~C@lj+(iYV~vWDJH9;Y}D8<0&)o59N-qbvs{2K2LQv13_kr8OVnz4sbS-=YN7 zvT#XLLYS`7j-#JXEZC%B%;0>KSy11EtxGAR%R@9U^5qpI0`g%XW5inwxx=|*1Z8Pz zA1VWRkHs^++k-n9PcftO^Jne-{5t=%_wsgg_3FItz7XE-f3Mz;IW9xZ-Nnti=%wpy zSihJYz)fx6o>RfaYh~4GVsS>AU7mpzt=mi|-KsZ*9FogK4Dqq3TlO?|jAX|>KhB0> zF8g$CRY;6o6a`=m36-%ibq!m7QxGV4Pf_l4sWyqCOB33EH8I)fI@IGLwCoqKaCPeB z1qXxLp{U;je^j>RUtG(sK6pHyJ^*}Q9_ce%bZ|Y;+={JWKO-qy&{^EKVvd)A5N|y1 z%1bI#I;j4bBFfH=u9~;CMQ2am7oeuZ(CvW{9Zs!eiBQ0pgr+3HGeZ%5J+s>HDj1K# z*HpF3Lh3RRiDF(1)XdQo#`KDxr;dvuP7G$8tJ>%9a^W zQ(>8BI`LzT3$+WHuqc`xBP=(p-WVLjjB1c6Qd=G{8s#<&%x$Bw%e^Sm*;TvURhx-C%-SnagjbLi1VV;GCvTqceyh4>e0iL>I7faGVXbY1ln9_d~h7X^16I3T#dfO2MS z-P6VO)fn&AU*&=~_I7pXGT0enFrC?oF8`9Teg@>IzzM4pU`uHCag)Ikg zn#v({f#7wjmzCShh4XA~i#UJY75-FiJoX*H88d-XB6V1@Iwdd%;^5RnYNkHGQWN?5dsNT!#R3O;C|n`H8OY z`rOwvDJGM0pNm`{c>u+)kMWQEwR8j{wUKB*HnObuLyLM;=5YXO6I=O!Q~2kYzRgnX zONXDwh7v-bgy!TRR(|Wo{S3Dl0lklWsKLK*x!LZ~b^t^`yT6RE$DOoj znAbFJ&lJeEN|2A&i1Zb;$_6@g;1i)t0UMYz%2w&0JiEJb-*+qiOF^55A9GE@OuJt< zuFLz<%RKvEWpb;rorym!@NU=Sa`_$ls|ew4i8x#RJQ2s@lE^q9s)sXiPD1>WjXYV- z%|mS#jMUpJ=$(XDE4Vi}oilK4Dw@Ox6|*-Bow3?qN3RKD`bdN!&TuQl;({5?%`!rS z1p#_jCSH-63PX)sU5%yJCO+QJt}U;R?`91;dHT9N$aCHBB5QP5B&H|~nHV%nl#M)C zi*C+6_C1>qBm+~o?n=Fbif5Wr)V*s5WZ|m!d$}lSIqqY@ao#xOAF(=@p~B2n7Tv&} zPpyQ*_l&e9e+yZO@!)5tQzI&F^xgLk~)5t9IjHLZU49$!@+ct{(e2=-i(Dmz21u`VRDM~HZA{CK?EP*@(-!ZXe^ zCE&~4NA$Zh`!%;Jzx@c2DedVJ>YTB8C*jem<}$@wB3@-s=kjKotKQRsiWO}?J$(7X}cx*y(v;Kl~^&di*vwLG^j%Gkr=_Vc|XCSp0v5(`L=8y-?l6DZAq7#FWH76PObk!l)GW|KIl1P}jlK>(ar| zP|%W5!h-7Gh|h9+I3xueT%X{@(H5?=gH!Ft9{UKw5ji!gHJwHQp^cAzFbEd zl>~13`SZf~?|ibba3)MNw9>Q`)gl@}`eys^i;arqd@k3bw;j(M6P0t?KpMvXbR=dN zr)dGpg%8Bd;rz^@m)c@?k>i*zpGl`3g0Mg(g z3_7pBFc45osB)$!O>B;3`psJ}DVj1l)>uX=T^OFP5WgFG6}dtLtJEu0%*l``9L;2w zV;KVruG=X_f7$nYBOgAEBkZQE)TSrsWtK=Edo*q(fB-xkT-*{X1}ZdI>n9CARbsrW z0-HQ5*b!fe9*JKX>UqoN{B9{6GELiH0!P<|#8@tCwHuAJJdX`R-UGUHO~vr60J1I` zD*h@P)><9jfh6;8!q6+x4#-~*JzB{A zTVyEr$UF1ojT-f3w)I|YfugK{477*@4%LG`-)<4#?$A~5cscOAd@4m~rdf-emk-Vf zKTSW{gaTp0Lz@W>%m-Vl%N3;iXF8|*M&9LWd?)LcjUCO)yhp?e+KJsNk{X$IPW{W= z=*PgOjFnb3X~V7CwQgXg);I8RWR!hpJovxd!P$)49QmuO&%E77liLCYE^Wmp}LwwdL=tP*rEQb`uz5 z^Z{c}hcR7v3juhI%$5l#MAxTl6>%pbJnQ)sP2aTRN)etj)MD8|OVKb@;GV~NH!GL3iW~oUfi4)p)GZ5g!} z=}A=GpX8H+n5dNG*f{2;fq_a88JuX{n>Np~g3h8BUq#s>Wr`WI5=$~3yto-dr99L) zVk`zS1j_&uPKn?rmkf3JrJO{F&Np_RI9P-clo^DPotc90GzEMc2# z4BI2Oha?&wFXRK5BtK{(u-DQrK~4l>97+Je+a~pRHt)+> zCdP%g{lOZMrn|bHbvc7^Rq?`LO!L*^FB^Zk3ykoy`+2)LFph>w`rCL;Gha6AJm~Uv z6YlTx(njd-@%a1aNB~m8AV1ky{+ZwBZ`|z|MGktp4YD>E^D+Os>bxFbPFqIYSKFOX zj$XF1lgMZACIUD2n#uHh({coG(pw>Eu$ZvSY8w6fhv+jB4Lx~EWuwHx_tSMToH)aU z9UAtZ(KDM6iK-ha^GKn!bQMj5fq+j^a4;a!E@wcI@h2+2$0D<$@n&tl{aF53o4l+T z;g~dmLD!8WFz^%Dw5W4Hd&t0M8Ymcrv#|SAG6`Y@FmRb_eNem(Oop)R;A-LeHTVdR z@5N@Bm8ds~Ji`?XEnFqDpHUuwOi~miB-y{$+xLeib8hZg|NOfFOn9^q zAczZ-Npaz^h+$%$+djk2X8aQ2_K0u)H0sCBYyiy-?+a2e*#Y6afIGY*J)(TsSaH8J zZ1lbqN+;A#s6vE031s{mRJdphT{G}JkY(zLv*%MAX~URT(;j5W2ro-32IS%28%XRH ziH@f0p$Y@#IPLh*ZpVf8rs8O0)u2&`<_0DirTJcDizOB`3ktuq)E`UNDj#6fA=;<5 zM%c1(*DJE7d}au`Ecu?U4Kf-Q^h<|dq3fqWkGdT`4i;H1_fXHE$%fi}ccu?t+;U>eX-4^a^ry6AGF|{*GLG2_2>tVQsf7&_S2`jVlThQ7NRGO| z8DA(qRCDSpl0PA`t6cY&MbLhEG`f>FqEXA!CJy_+FNydnRJ4hTXYr(uQdtrz)xp83 zFQtjhW@eoiu#h_r0!vWVpTku2Ij0=X(ue0=OgU%khEe3}g97xMVX~(@LmX;P(KK?k z{eg!jxeR*jRv%l%(&z&N4JiJm5znpI>8xb)ose(~t$@!apHo|UxQfpkkJD0d$O}x}zV)e`XtU%UdN;x zSDY~?XZ@VXMFjYelhHj;(3sTAS&=6^eoijm>~v7zd#xi;*D$Zk-0cNfSd1BNQosZJdJJvJsyBagA~6aB^D+Ufxi16DKzu5;u&6_DKa( zUI>}Mc!Pou%vI?muRHS018Hi&@fIsm)CaZ|X~fko0=sHW;cj=vZxrBt~^+J`UwpSR~AvZ{r2IhjkBsBB#}7qT1}WAY3b zGxooG(nxKrSklmn>sIx% zEUIjVL8>%_DRy#pDHl5=aBK5){rOyDr_=TJ0Vpvj!% zF=c9R(|fp!=H8dzbPkMwV9ExQH4S1{vqdRFEi=2GrsUb_)~3Xb4NawdDqj*oxDahm zfuFmLd>8*(LO(lG+T>CR8~yHcF>7?AtzKW(_GDf=(tBJuwmmnAW$UcYh2hwyAWshT z)pz<^W*7t<&@M0CnCTqU<_)t}0l$=?qa_sUZuTR3G{RY6l&090j|B?SKSRSOF{^=t z__Kxlrh^)-K5NxvlZ-m>6EyqDuT3;&lFgB~eg)1*RdhBiXO8q|l)riVQ48;;`PCTo zTubCy&wi?+f{u02=ArI;>cp@$X%@q*zFsdp5k3s0!;6 z+`iRPl*;TZ++KTbc*3DwO4``5f|MT3AOxpZAYZp9IwUu!I=4f51CN!hd1ilBFD-M< zf8ud?=nGj1pvs8jb6@1qQP|{skGvm9NPF`=jkD!^$XJPYBx%`hw=DY_vAB2Qy>CVE zBvsXItB2)Mc$tQRnFMn21!jKfCn|@E;KL>fQaY)%sQ5#uPQ-{$+~{D8ac1&39l-2x zbDv_e?H7c|gM^P8!_}`0J*}52Lx+dEn{5>ECcU!xq2jMOwer?Ma`KRG(1I-*b?IxRUVO*gTiF*%_wIY~V! z!yr#9u~Id~us}ObC#|MhS!&Mmk&*R$WM@_*25OHdd)ouC^~mwYeP#MD)<2YV5Tp`y zvT}?RO*syOw2iI)q$&`g7F8IgWANBQr++eaczbF(IrCS7zG{)8vQ~mN-@I}by&yF$ z`yUhID_Ar2?yjM&rSUpC4n=j+=op8VKsCo&wU$CP>DnZ{{|@BGk4)*p6wz0;5I})0 z=kS~NL9{$_tWW%gTL3AhjcC!+M-~{^^2`3Kx!TZqT_^w4 zUa7i_{U#Su&xZyQG>B3FX^93X_f;7*htLMd`c`9Lzocz;k~g zA*DQr-j1(9m`g$AHZb<<69off@s6n?QI)f~TH~!h?png%EE&61Ybzm}G|@&3S-3&| z8|z_H`e*nA>rZP-ZoUx0$8g-zZuSAwdhJYk2bpNo#C3PXU5~)iYD_0zxu{7a558yB zhO$Dv{lSY;yoeyCyEvz*LJbB?UufY_BVggoCMf2Pt&h1bh|X0O8Z`mk${HE&RjnK( zg(7AF(NS)tEaS@zB>N#!85-k$9BVu*tCd1zqTID&#i0dCi&Vepu@d8o5gW4&{D5Rr zUiDgW7{a=`I-~RV1qf28fIAi*wIZ#TCKtIp{kYRp1eOwCXHCn@VG6wYMQt>@jL^Gh zEvd0zC^~A$N0$Z$YuN={v}==cz^Khpurzx>1Ej+>3>H5@LL4^Hx5JSRMq472qb4V% z5`QQOI%HZ3Uwt!cV#1Ivxe{m}NxZFq6wm~yAMjy5^CQS&AMi16?ipIOMZU^c8W_lD=OQtp2BQ-GG=ncy7H*E zKrLs@rkV7ui-!DD>F=<=_@#@bxLt-?q+f~2nCHb*pVhBYkq9kqEMGX z`ZH=Qmd<@VUDfZXNhHHr*!$RvgQ!pC@7yK%&zv6F01ZGYi* zmx>@-!Fkc09?0RVaUcIKx1;u!fPkMTU0O-IXP19R@7rPFnBmAV@TW^_VJX`gspKli@mB!FOT?<@#`q! z*17no6~J-`X;<%X;Oo$}^G8%2q>HQLEx#oyJq)s3D88B=*YP=uAocSN`bRF{iDtz8 z5Oe;Hm(7_h)-az*cX#&{ng!#Ad8H;uCwbnD?Hm7EP}Vp9 zYd4$!Xw*Uz&HLSSCc3!ny8eLa+PPM`9rkk-RXdlT&4%i3>E`d+BK+xYlY5s@wiJO9IQ+WHSJfG7VaBO}{K*&jZM*`VatA9^iky( zvC!FZ>p}LHUVWazcCpUdNNk%gs|rB{9MK;Kc&ow#BAWO}LtQY)-!(PWa#Nf!+clmq z`m$3nx<*B@eDQpeMq2GxbJYh;Jj^SFR|g99gMc=AsfToOe3c7r5t>&-{8*Lzk4 za+Z)%ypD-$vYRXF_RRuB2k6V@rir7N?v9-S*HmNsCGR|lwj(Jn2JGY4w45sEa7V?$ zLzKBZXj7fSWCiHfJjZooERnR~N?7|aQ9GjLIxOT$-Hkzqn0DGn#pdnMV@;hvKn{@P z1>Q0($W#n=STq)X{Scu)RWlkrl$}-(pO}9YZQy0BE?am}ktvg=Ghp2n$dxsS~ecmLH>6$Aa#pYa*dHF=Wyz3Ff!K*b*{O(0-NVq;lK&m=cqA-25im0-wQ+#5`AKaWHbI#xCbJfp@I zcUDnutM}u?_bJBr%$i*BM{<&VLlO=F2 z@bFb;_Mk=RZ^BOMz&3A1d?BNq*WgMR&!g%E1f0-m1QH$gy25r@8f4-0k(I@ip!DR4 z-0Yn3`pB7jX8$JGGW$8l6P(Y7M_J%utZ@om2GnbKRZ5%2#sHk?FwN>9=9j9Npz39# z1?OB199%FcFRM~=j*dYGmP(9&LbsfTMJe3WI?pXm+|Ky zlX90gb)n_+h|L%~LLpXnFgtTWuhqm_{i0Pw1Z5oip&<6x3a4j^ak^HhZXL&=_&z!6 zP4huRXo5BbCPg<YgSB za(obct>@#HG(2|(RtkH~h9R>;vQlV@GaDBRZos*flNST>a$4Rms==e*lQK|Rd8_wp zXUDP_l;?WXZXVg-$VvbY=9SHy1>T#Q%*EZ!Qrl#%yYp#g3jQXQ{k`?V^}s-nXL4f% z`S4sX4i+&)}0|-B2{;mP&*iu%jc>YHZ1W%%iHpS(aebl-%y%O9D-%0mn=ek znEMqC_?8WhSj*&He4+V}288>S@V+^}N$=txG5kkftLL0p%V62rq>UuoOn6!s*OcyF za8NF8EYmp%FmJv>?LeOPK+X&cu{4FQ;sQ}*R-WD`zpsn z?aH!jgYa}0?Q?~Uw9*LP-F{~sB6H1>ZoZw7=El=`t;^ea1`?~cDsQq;fDM;;KU}Ap zGY2vj`~iw%sl#*(DpU?FRWgW{LQAz8>e%{#46@F6S8YQ#hs3Q?XoJgMgEKA~J<-US zB7w_nh<_x?F-rQ^eC)l-u~0#{To?Tg27qB3Evn3#-jj=MD+7j5cs<|+PoXq8N9gu^ zt2k_{D04Qae;>~$l!))1rxgIo%#LqtzjqaojaE~&gW*-^fLOWheC*te%xL8OUaK2%iKk20YT+AltVnmZ%t5RWT2cL$z}M#5g?8EEs_ z&(XnND0EPZ!4+Fj$HnqcCc>8Ek>oIg3W)ab$Y}e@qSYd6GC^u3Mr;^(kBYXZ^DX)w zI#t`^A-;X4At$I?Vx`911bo+Y!N->xHM*Vy>1XQQ-5}EwiV}aTie5rU!BQ>%q@vDK z-HK`%yLDBMCLP49Z*6?NO&}n!>Gt-G10M?bxfu9NG5WdfRea65dh8MXd41{&e5i~= zWSg7y@-rB6*t)C_-Am^Oyn1aR*s}4J55jNzrU(Bb^p9e?@T_0>27?4C-U+|iKT6x) z2r1ryM)gXxM-gA9%BdhufMHBw^Mgy}V`!AqR`qk>kGCNV9}W9c&)QwI5BElWgD8*O zou{H)9M*jH0Tb}HH@B1-DMwSDY z@2bh13rwnn6@O~dcRPTZUz~S8XR**I{{~P zdSPLu$Ub=WuA5ZKJ0breB_LB4PlnK79rKe57nF%*hrS$zBFZ~Ffggvbp%sLcM`!8e z@tX@W7_@1@31UhrtK$a6cGY;r$vNnNVd4%st++)zB|D2becni;o~n?2o~bsDL)PDw zH<82hOA(&_4nRyGB};(L7{04-3X?+rL+j~Pp_|rU!KZ8WmvkDiZACshO2%XBvTIKZ%i3voX`E4fjc^bjcdqmiH$v1H_% z2L~$hHQM-}OW|k-H@4!%7+V=A+r~-|MRD zbr}%RuyQmDd>PP4e8eifc`W5eFj!U%r)IWBx(WSJ2x*T*vMrZDA({0=B#@195SuTT zNq|GsY`ox45%3&tF*P?;g5V#%CnQr>x+vAl5cM&M7DP}rq!6b_=iy~d2-(x~qk^Bj z(}t;|-P<@%WboAvYEh@*?@m_+%m%j{Eo3C5>(EKv42Yu~*~0AyucQBt$DO5u+o&{+ zF@#%NLR^z^)l87U=;%%Lm@AAPHo%>0m=Xq()=*SF0%nde(SSpnHtScU)mf3y*m=}= zudMp>*uGvrq~%(*ah;EQFamuyk^MS*|4oUW4pEGvlR?g)ur{jumME?I$xTLMPENF} z{v&E$q6fIu!tO`4KA)kl;Y-8E3-}uWx9@41*(;QGS6!<~cJbb69Fm(vBGpv)O0`$8Rg*WrLK^X9U09my^q zRn<6O*5`}(w_kK`CEFGX;RK^-gy)gr&fqwwi*9f%J+nm7BtnWT1(l**L@bK>q_L2R zNZgByjbXQ%fb?U8G9AZk0Ag}8ix!YY^42E%frwIYae+62qZ-6I4nA`lfS7r4MUgKF zICve=s>)FeoD||Ono)<4R4nZztjlpIn@)mA@)o~3r6}-%rstS(Rq((OhOLzFYdaW* z2p6MgX}I4`BVG(H z)|_fq9p$kw9v#R6{X|m?-R-}RrZw%_d$V@^S_uPNSXq>UgyN8JYvf~rfJtzQUzhy0 z-2nTY=ZvWK^h`1>mG+*@Kq8zPH&U%CY}t8?6(8?-#MXs2hWR zJTL~EH3z{&*F!U^P)n@Y6EXH~4OksBA<63t>B;ZYq3Z)sRX`k|Ab|UI%+o8 zzVXmDxwn(LGn^<<2*DfDAU!t&St4gd{@QE1mIQ#xg@1I>?i_mcjiOQ(iHa_8=AmUs z_@Beh(^D(ALV2Q;n#7PefWD(7*UFLomBSBwfl8)SX{cr8@eHvy)Y!S)cR|Lx74FHl zFBGhaqEV=br&R6p;&!Qj0D#{W91g+g3gl+PP9UfrLrvQ@Z}p+oNh*J<{_uW1KNJVT zD6Rz$EplTWcfcv$m@v3Z@?Z6v=#o~eokvYKA`g)+miz<{RMtm9ZPyu-6X*zqv~|NT zr}r6ouToTe?9ZWV?fE;_J7_D!H!5M8kL%V!!inJQWC3#1Re#JPSc5#wj>|o^08;y1 z#GEqxgxw{-wuQET0@4f#Jcm4m!j#JvAcMr=VUEB%w?$X!GePDcK}*)d#9vLm`eNe? zC3lx9OBjIn?v%OT94dKCr zd*A+KiO(*b4IZWceRtWYoypH~0P2P~=8%6YpcV7y-NxfTKc8boJ1%e|pbh6Oq4agO zIcu_mAF6&9&x0eCbII1k>?Dw7PDEJ*@T>U*5~rqh^>K7ytc+jVh_zKdst^_gihA=S z*-lVC9u6lN{V=oK<0xfIy8_>SEJD@_|5MxDfu+VTdgFBB4uj{2Y44zVw z{0KkP&1LEGbhid@^ZTyd#--RwjCa$EQV6vBzleLs7+rwo?Q?9LGq&xSdu-dbZQDF! z+qP}nwryMcJny^vPd3?Pv!C{RRd=V;NLO`Tzij{5-Xn84O_Ebt9+d-T904Mst1SdX zCT)C~hdr!u01L2m(HFpD=Mor&!DVigPnx@=hX=CEG44}!ey1B&~ ze5HePHnmIq1s7RYo4{bqF%WIO3?I2)Tw+eZU?_6`| zuJoFNjop3W_MTFV%RL^3p5+m%}ahSa`n<- zJq&I?QU{HIi4!2T#iLX02Pl`UR%&yH>G{uc)Z{S|tHJW0uhtez)B4zrFOT_m*Mg$W zu%m%|!{9vFhGQ3B^|d?+fM{7ZJ)4!Ov`FpZLuxM?c2$`u^v#ij894^gF-z>0Fg;`{ z##}_=UVz1dDO6n@#$NM+=R9U0|6Uen;Jyml8aRj2zMoL39A0^&<({y#2br-Wx;q=k zze9J02H}D94J+-do;+?C40EvOB%wdqT%DY#1n&3RAI2kaJ9igIo1%S8JP{^23mdV)@i~iNv3{`C zlNa5i0FJ-nY$Y$0;(1ggmI%Bo)iE)K3(GyWj#s0T(^HY0DzH)H^LzqBnuB_aj0l~U zP4lMi5n~r@Q`R{V;GB$nryeS8HnlwIkiS-%<~f^fE~~^De@JDj@#^yqeqK_j8f@2jEr-#EPf!r> zoxJX-02>{4Oq7)^EUHBxvxRWH{|ed;XkI~S)Iu*tv!XPt{8hRvJtOm4sgETe z!p1P6n7uo11c&|S3PJ_#j?z~VDPoFv`k}$)E=zsWHx|xW-ht*vQ_4i*YY@fm6NePC zIGr~a#3rGC+c17stObW6;0;dQ+uaWgt4BR_J076+gHX@vjhpPFl@pJ?C6aD0XpCkN z5+)=>JA()eHd{K}c4ISjTrjg2YH|MnP=xTUil7?(rq}B|blEew zX{E1<^PH|4M)!1H4!pX)FH`#@b3`buEcUfJXBiSXVHP*g6jMRrdl4k>61toTD3E85 z)iQTBJH}EB=V2GeBYzbzK$xGHGIu^dFlfbbl#BgAK&kAjIt_j5cT+LI_fAA^n6{W3 z%wx&w_IOV8Q2RST;0}GhUnLvU)h14b{)|S#tpc!PU?L976IA|}na_Eg;UQa02z9$o z0#&ul83X> zYQ7@^Z(NIajOlf8_AUOBo8KqCSmt2sM?7LQ2h>8I$jVLBj+3!{*Wt|Vu`$}ssZN}D1u?%-fO2+5{WbCB1! zsS{E(w=tIr6H_!3kk>OYQj)7IMo0leNm9Z77a*M!(f5#u?P4dJ^|~O&bXftf zf#QJsZH7+|4?}ophU504#^i$DCY_b2zG&CF6(}iLNk$5-huc&;yF~y;L|^F_qUkuC z1+SDY@Y#FmEj-$79~!fj87SF(#$0N)*bV|b-?}c1VYbF>+D{;tYC*qsuT0!NVp>%| z)9C3|;MHLM<~jDBUR?J^Sw7_Qn}2%vdi3wnPc~5NQY+MZ4z>ZHI*)ax)!^mj`O*8* zyHL05D+Ap2>P#eWz?GVB!p&5)|FocEm$(sK@j4D0tJz(quuX?k=C5B2dG3KwsDK1$ zz2X1iSdjruQa?>2^p1_5iiLmHgf+Qm>wcq1z?=6$0kumcsh&971*PyPyV9=lMYY0B z`pmYbDqYTD%i}!6G(W2lJ0*M4*=;E@i4&!`etO5kWTBWx%EHC6_bef8D-iw^TjQMP zcUNiqhXD=GHO_kpw%iE07M$H;_L_Cb;I>Ar8xE7gUE>3H#c`SxbBs*PTe7KBIQRp>EH6?KHKQ{YS~$N?$MK z8mv{bs$~+!Lq_1zv~jIU^nU$)8cuWfU;2fS%H9jG-*v}1^=Xrf)^e*0xPrxBPd$SD0p36D) zwO2W8A;TWMXviYq6^op6I2W0zdUYf+{5MxSLNSCWQk;w*k0oviIQBSA3GHoA zdTj+1Xd!~(dz^0WGVFH!9WS3_3=M{p!v$WfYMD1#<1E-%hQbOst549@HE-1N>LV2P z1)+`jo`|rJJ>N^1P5zGPo;t*@lsq@>yAW4U%GK9|TM*A+)lmq@l{LNyhve9oIhpz^ z0z$H_jO4a<`7f*ubAg9Wo8ZoN+8E>|Ypf)XF(mPJF=g{=zR*Npd_(_5jf~RuW1awVfx59e4K!?^mAEWiyhH=m;7bdElP) z7M7T^DQ;VvI52abm)-rL8_T2abJ8BYjl#kh%Mi3CCImJQuKJRk&5XagSF5h{w2#%N zb3~QH-wRmwu_YHCWfNOmMO5KQ-=} zy|DOGQtlC6GY)w7SD41Q>4=ofvF2=}b#IC7sWe!B!4u-KBnKg5(=b?8g@F>DBAcnD z8x%aw!mGdKt~E@oM!nK$4xwf?2y2z0@Q6}Y(-38B<$7jS%p}k2mD5=4h){>Qx6}}y~bBwIf(tcr}G6A`v#576w zp$k}eRnsVj^zN0W^{v2&N;`qSe#YM{8m>mQAbdwaEoo_AG#I4P7htJ=;Z_pMw_?L! z8YFWf;(Z0zuLXy!W}AutIS!saLjK09+$B5S3MT!uIcXr5gSq2iZqt%2nCOhhZt(JZ z$22U0!+KI-i}d0rF5uHZgKF`|J7EPv2~l2OyB~7JCQbr_YznX6BcYQMe6E=Lzn`z4 zrT7i&`iNh;i+iMkj3djqBFbSGcgdnL_LOm?yRz~Nxca?srjqREn`X8%o356K3bGB+@t={Jqp zkCk+mkrx3_ols<4r-7Iw4csqLebVBt%Gn>CgFT1={%}5aq=R#+{Jk!xRhcq8C&U1SF#bq_}tqm8`j(~Wv z6cmM!iRodbl_li@JhPkV$g2qwZ-4rch(u#MTanF4P<_{tct!uB+26=FLkAKy?7?o% zAg36QgWO0oqYzk?HR8@XZ`L};RNhLmuotBJDQ*_l#oRL6thZ@B?+^0Z!jvt|oq2cg z0&`p!!>Zv4euDoKH-3plFYZ!o*m>h|ymhXsAG4u}hY${X``BT4f8cj%ZHR7xSQG_z ztpJKq#tP3A6i`>bp3nZNJJ2kiKpY=YN4_@}Yy8siaEKHIDMa~gDmwd#Ht@pnCnD_1 z7>loPdG$;H^`m_i{HOOh1G~G6;#v?D)GAV~z4i1r(^b)UF84pyrt35#*7Bt>>mEwZ z{z~tgcV}s=<8U%tXNS=yXM@zv1<0!rI0cy04tAX>4Y!67dwQ>DGmh<()Fi}o%F z*N%u&(dcCiK7tvB;Z4Dt;gA`|Ifm+}B-I=6l`e-u6=Mwrt0I^5)WH<6S(!JVPNPw?vkUpL zmWip_d0;OEaU(o?vjMj@LqBW%Tx$(p%<7&$IFnku7YP;R^$^U8Q7+C5x*#iJ42L$2 zO7HIBHtxSnOu{@&P^;j-M85TK`>p-_v(w3ZxPMQ2V?~*^)jxWttULk@k98T;8_0(f zBMG@s-)jBp`z{!O!}Yk+G)KQ7rYYF^po{pDj&=sG_GV6A%z6JFg8pj^bMyM}UdGR( z31lOzn1p+R{6+1Z=$LNAT=I{Kng59){>DDeN~>H zMg{eZ3pIAba$`ca46sXM1g)H3vKX5c!}=sQgw~FFjb_!Jjo|AXVwuFVWL)(tZ@ae~ zu8(?Yiv`|m6Pnh4y^|2^x{;*-KS0b7nT^J5W50#0%jmQ_I=$ze!e3)HeS}8T5V*X1 z!Gr9Cb#gA%!;wWKkGFIkZ{RaKbtQ|1M8o7%@4{KXCj`T{WZDecNo?54Wx0E-ti-RS zTL-MOq1uF@=)4D&vU&9D4unHz5pc2H1;f=M80y%`zKsZptq0oAYq8CQMLH%xRghh^qhcmr17{#X4 z=emyBCODs^e;||2SI=D%;}DYHMYl!v6$Ysid#Ef34B!cCyVHoV5d9%^zkn&!mNg-p z*XB<#AF}ZW6fIC8jzJg(Bl`ep2$SdLqb#KL&Dh!7 z)bb+VJiZ2o%$ZdVq!9`UXIq}D&Fhax)E@5iY<@-B_OmJm8~|Y`u>d3|sd#dF4SJA| zaOf1&vyH*Mw6#NTAn$xD_!vgHR~cD?nr=ydI9U!g5^N-SN?&1~xgCDQg$mUcFKC_}e zKpcpY)eSr9DWMMYgOKB=tWI`m+ue`}pWaA#!Ojv#7^!l8Vu^;8YUMFJSphg|AJuk9 zBy|#yTMV&ESzkzcD3Hh<8oq^ymiQS@0^BJO7@K%sRI`8G0_j9=M0mfi&zv-+oBg_R zi(K=k4f{)&AoRXhR1?APUlKMpEfH7RW*epAkD9EH8l-|!;Ev>t;&@oUP86!3t!S$9 zn7RP{Vun=BJlxR2L#=^EF%>Q1>kKl4?xCL#!#Ohqm)#1_&)CR}jaB?ms1(S2<*C7o z1!U=~G~XiSm9i#AjKwzM5zH&093*~tZ3yrU*oAXf=2sC7p1EwBNE7nLoR)%JeQ5-< zfARk7g1>bIgULwDu(t&8w^6F1ViTj)gIoRdKYe|`pT$78WbPJ3k~e)Pfd^nNf$|7v z-s4JSJCF7w#<3tJ^2vVqiDp>4FBP-c-ga1Y)Hy=>^+iS)KhS%RF@&4-GM5-XfPTPi zQ`jI^y4CN)@1Xl5$~I}|Ht#lbw5?suHOnW5;xDMdWc7Zxf_s*W(sWEF!=Ii<6yj^b zIRZTW;vLT$NgF!_V-AKtw^-QgLJMUVovWZHts2C@Iq#+?nZ1fqxBKJHys3-ijxW85 zzcQwl4Hd#~OnfHO{0w1;-doj`j!@?mi%0UWCEEAC0eW`3I|N5C#`&tf`OPY|jP6%+ z%I1tYZd$+3@Igsc35?e zzFY42{inv1(Jo4~{OQU2EBQjZRxr}UE&tLPiHWtQSkL-gnAbQlaTRW*mFbxa-a1*@ zlIoK2F(8VYWD{H}nGoJBrwy_ zKY%;Fsf&BBU?KOILmR_1D8gnmLqXJ@#fZQ!{K3pfr)tdqsqwy(nUa;6oRTmpTjun> zlms{0X_hSyk`QSB@?$T(%=oXUowtL8p@bbDF@oD6y;KvvPS7tWxguubQ?``0cWg&_AAV@N`d+VN$rLPh-ndQVmN#w#)(} z96q1Y;|dwOJjsMdCs?FNrpU*~KB`{~>u2Vh>>KqwuK~k>!>UU9=o7X+m6PIgRAr_k z`z)xd%+tcoCqv7R{=u7il|&Jee8~lXVq^n=kgPhRhx_L{4CfTu*yo{6oH~rR4cs#38D*P(D1+)eV1B8P^-$V-=<0}fl!v`6%ll^*v zuEgb6ajsC-5EwO;^>y$S7$sRJSu#*pl+Jjt)i5o_`&o$rfi|tS2Bo5*sF|Rbln%w{ zkcuYO+G~0nk9eWyf-9Y|L6`M=1P(N6l+SSp9boOAl{v|s>LKXyZ6cu4SP8P84Z+lz zGMRKv(k+wKwK><w}))q|Y@pI^+)?(c`X5$;6wQ<w|bMWf{q?Eufdjsr`@_&wLK=AJhNPE@*>Ce7cY3q;mJC@hbVj+*!!3sLiAP|D_ z4KVfpW%)NACk8pd=h53aRaaVu&wY)j#j@ew(Ga#6@JJJU^$jqUdloPr(Ee{WXf|kE zK8jK9Va-xg%RDUG94xl@-U#^d7h-(#*`5-jL)RvVdsel&&40D)ezd?>(D6T=8CEta?zO z!-^;NnIc2F!o)*NCW=ipDKM|V`|-S0NQ0#X`&rJ?&~a=v=+=n#!D*b57l?wXWYVJu z{wB-@PQKrdzo$mNFO%+F&iVNLu8yDo^$8omVbw_@3J-kmd=HzI??wOx<>GXZ3bVH{ z7&{WS%#liA1~YYK%W z5Bzozv2pZwUEmOdy^6K!zd1AxjGVrKo{HmK7w__>?WYJDEfgtUkRPHsJ)ul(B~nX> zLNp%#2d_t)1OGLU23$Gj%eGeyX?2Ka~hK5PXG+WV$U5y_}!+vE}XR_$@B(O&n`_}gd>{Z<0}4K$E8j_N4prXI$KxGIXPYpxz2 zaO?6XE{?6gan}Qb8e=*h(Ni_tZ}&%Ho^fAo+7ayc1?NWo`h@ErNRqG>jo7noUB+6f zsy-MB*7O+C0G?iUHb}eY{Eiak&c-5;Ktqxkf$`9-83Y;0^)g%X=gEf#R*x*g-=Hp`!3i@>+y2v1g8$9%S6o^y4M7(yE!QhGCanQKjn;X%ikWt*sWFS*}54i z2}1F9I<;deh~P{c8;+6B&aSD25mJTVC;v8OL&M3n3Rn?fK{^#|&*K!%7=`pPk~*qt`y3*!nDhC_17Wd6s}`+)DXc6GMHywY>jYlZ zFw!C;YMMC{3`in1ql(NUO38bJ5~Odxa42DzT&1^Fj*Nas9fyVARyk?njIAL10?X^G zGQr(I5rrY%^d6Nfqp>$=nKr?BPZH*X^ZV3f@q|l|GtSv4CWnA<#dx%?ZuJs}cy&Kd zI4)`=UaKh5d?WO#)b#OzfF>G1`kYqWMU9+v%9C&;{=UPtg`6qrxLaBJ1D{0j->+0* zIf-yV1%Z~%2Fb11c80thp)jFk&2`$)Z}o%A-^wamU(q{ScT=ZLbF@*HXNE2xV1d&_ z&K6aVWCs&#dDKXc3ZlYHc~a`=5k>a^%vcynng}+Tf=$p} ziJWUlSiD9pTUo0XJxYf2^sc_Oz?s{BW+H@T@e2$#2p<&E+HhF{>tiV%eyonPefF#k zd143OloLf(($WmWPOq`_GrTxcNT>}*eNTJK4zl4dEy4p$cM4twIImzfLb%bZ3?;x= zO)!M65&@zKE~U{Z;HBo=AO*R!>Cp_3+0An_b=~a$ z&KOx84bDM|PkO(^Wf==%{!<4V>8f^p7%-d7QwF+YinJ)eXNn4PEm*!9?`0$8k01H3 zqkI<$@yR+>{VmOz! z@{?}?jMMK*Mt+BaW#M0XW_j0Cg@@JL55kg}sPx6SwN$vhmJDx|D5IZX6=d^%k$V4! zvFv?7=B;3|DSP%~YaB&0Ya?zVV&9|ou?S0fJ-8yI%0<=EoU0uG`eT;6?k>GWV^k*K zXJ%+RdN4a2oCRW-{%Do`cm=tnP^*jy@jOiN6q3HmcIqo>V?Xz?K>BG!ggrn9^#>ID zyesG!VX@c6J&WrP6OVOJz?CVohFgwj?$^`PRF^aO=}_Q*(N1()%6-GA3Go$ipejjl z3PpLz|4Z|^qF7!tOS39YxjZf*BSk$!so=jx|0SF zB~@sbKhvK4LWhaVgk%>2*}yI$fjNO@;ew)u^@6sR5~9A6^#jIS@ZsYdn%oOzFzqNP zC{>P1PKk<<5!GaF7Ltu5Cn%?Kx&<7NKqiKA*=L~s9RIlu@m}Vvf{=fW-F$tDhYFq+ zwwAh({ujkToQ6)8mP)~Y+&X8dH`>anDhrGa2x|{1=MeNieqLwKegE;}vl1{=FuXA) z_w~VKkos>n5C$nSQYlgrrEegU{4p099B7FBFRJyzIof~vBL5Y%9VFbD=5tSF1OXyj z0WW9~aL=+);I%QJH28do!J2LK-sT-lj}0J5HNzC(wV^NtCq&&;6H zr$i%y#RLTPr@phz8tu5Q=TZoYk;7!gpd17H>YD69iPQwRj&RTHz1H1@1Gss4d}<;M z!LED=D7@nUrkcdjao7dFfQoToa0<@i(Ht0d1YoTh3SAAY1OP2f(j@5DM@gg`nd8>X zBs*N*)U~>Iks^Ts+O78h1$ftmI&;w!{gE-`ESQpN*;&pWgDEBjwVcCxEAI=Hv<|by zT>xz9{>Ihvx2dcRsF6aopa|y7dSuy1IAuXuJP@!E-%4`n7G9pnt0Zm|^u{Hv;$d55 z_|LzXy@^Ay?dXwFA`B3hX}lX_vp{K266OwB7fNZ-{VPTam{Z*<`bA|4dGQhFOiKn2 z+Glq8m9%n-L%U|qYwpkis*d?)7G^zms;4WHG2ayIzEm0j4#0 zM>v3Cz2UxUt?4ZSO;_^e`fzB7u1VKNTSiR|&6(G-mPcJ3oaqpW=9&aqH^rg}`$2Ib zNl*xV39BuV)jL_)N@O!xHbr{;U)YC9UL? z!kEOA6updeu6LA3cxEL*eVH&JpA4ab!GjqZwQNmX)RN?LfpW;WX;sS^C#zcBPcslu zy*^RS0jiFBmPqXXrqc+3(N`9eMUP?30i>i!iCkMO;Qt+;*dEZeZ$fi<%?EM&fA<6; z5*+;|CJKJNaz`v-Cl1?ViMUIQ9+Ww~P!;zm zotI2!IA6vwh@mYTz;2*HhJ!B*0yz51;bp6!+E3zL0@KWiOlF8N%!h{T4~5OnoDp<4 zX)@H6lu-32;QwPl2@_*}M`vDH1NIDC_Ik zBB<#rE9>iFs@ox0Am|`r86fDPU??D986jwzBPbY{kf10SC@5>HYgsSoVJaIVs8}Ir z=-}Y%Xlf{738Us=DiJCuAxfowdc?1BJzo1Rlpc^lmI*6us0IW=;Pv=7puGd=O@pf9 z8q^=?KZmK_fBGMk)*UIDZgdx7!LT9sW4JbGSkBfqOMyJPsi|0W5R zuyl~{*7Q}dHI$IBL=CHA;vqZ#d2=Mo)_9oX{rrAB9GtXRq@3W` zY(~eDUh~CjfAKr<3h%kBVW?)`L0A=mnVo~UxeTKy#UQk?$Q`V9w7=4#^Yg2b4bPqB z6E$Mvf9ahMs9~2%YiQJOybP-l!aB*{bz||9B7W#ltvf8^SP^5-{>Ig zrDddK5f8>zHIy;aBNiwY+Tsf79q+nElkc?5jPlV>?niR}t7>Q?X(s5QVBu+OD=I@O zBIInmP_$4U`+GUQ*<;5-zqN~hh8s|oPr}H<+gy-G(cH!k;6uFXExRV861@paIQg|c zQQV?ww+~&h1iDEmw7dZh5OUADG`lg&VbCI(Sz`rs`w4{JQm;FulB+!!%P2JDwEX}B zwcEoJcGUk@UQAUXHjDL-@2Of;5@g=7d_h;!s=P`?6JmUZ^2E!zr{?=qojojTv&@aE z!jIP|L=<8BqD}DwP>UIN&Mo#VoXo0}34gB3Qj}1TjvfoGs6w$ZWcCqxny}xTyEdw# zk!_LnGtH;LLhoRP&q!B7h0#b}#&Nfx(F|noPuEL#%0Y2QC@!Kl!T=byDi^1QA(z$d zI%5zn6M$lB4_T~VnYgfQ2nL}A8`5R`^c-_kTM`Ju?--S$scXbT6S zxza@c(IfAx4b`N@4`#A0lq4~g$KwZD1jtSdpyrIcOSD}XCKKi{-mPez=*Q&4Evr?Am z{22uJspWAP0bkDJFs&gpDZsiReym0NGgXw{Ek--seX=QZ8)t~evJlzBEp|&@Ijdf1 z6Dk-)w{zXDJAsGF$rXStKrPGMqS8@kUHaa3KMJyAt)Vp(&*oG%0(&5BVn6U0q-?@C zRN9MwZ^lN*34R&3ausIk4DaFq80s*?l?iJrxwScoZIq+t0662DuX2+tBeAH-+=3Ys zq%HW)EuxYhVq3XI<;FzV`f7N`fq;%7OCe+kvBFj*lC*6$Hcv|BSn7UUOo*%54rZ&Dl} z1Ce?cFRj&UvHm{K&}pDES$sG0xu+PFvZ6K;?N$}nRXQCo9MzPee*5QLM}qFf5{zlP zzSgqj&ApPFVOu`G6f205%Gf4} zZfBec*bVwL-Y{k0YG^X3y@Y*n8pmzo@%a=kp^ub8gpwWdLl{33h0xRH>Iub`8-B*# z)ERZ{*7=oG{Q>8h4^6j?dVzG$>f9M`Yfp3#A|E|z#?fR2VxR}F=_!Ny?_Vq(yQ7x- z?Ows>eS+%xWtOu|U7Mf(>TylmE`76&_gD!7DqK`36kwaU0rQvs1^eqF}4Pi?mBxG zo3Xj^j_om6z>u&9fuot!0+u|P+G@bcej$+qmIm=C2rru{>6RGKOPx1~OHX%odbl&X-K8v=Hvi5wg&$-Kc zdhBLfpf_tR8*!i$=0|Zin0{~6=a(@Lk&!ZD!DBt8f*=SIw$TI1+}HjL!nE`V6``Ji`Kk==^Ls4Mb8V=&Rh!#!MhxO|ZS2cqnAzMZ)ELo7MII^S z;GR_ENTk}Cago0xXn4+)tn~{3@$&bxwI~yHhSWkA7MQ%att^VHz&tay%G_7DBn}N6 zA*f?P3wr0RN6JS7;Z8`!-gVh}@HluHe_|62Tj>Krwi-IJ*t4Gz?xDAdnX}E<=b;nb zbEI;VH>nq-4UKe*+!a*u;e}Fe88G^2yO0sqMvMtQ+Yl#Zy zWnP812Fyin2?+;dfz#|`S`K4gk|oRt_5(E((rFl4NAd4FNvmCUYMc!0t z8Y?R|iG4XP#c)Ui?B`a&XKH`yT(44HTu5E7%;SI=GwV}k>P8jVp{=+>4KweN*{4*= zg5!ce6I2ccP+Fl}9arL08C3Yzri>KPP(*6daUmTu_Ymb_#-bKM>66Zg57i1Wq>~)` zN6vl-@O@LmP@<{i^$2009(hpczC+O<+%b)N@cW_s=9FNCU=^?;$u!_t=j}d2WnAU4 zGQ-`0%8=6b6!Q=wah@TLm1Laq+}~5oSPBbf^RWa8s?8zKkhozSg5Bw5U|hm2=s@!5 z9fw)rx{lAnhoPF33F4!iIK)S^7LE~8q`2HM^%o!a9lTQTE0tDXk8^y=Z@$P1U&Cs) zn;!lmzDhOG&kRS$=l`X20Shg>JfHUkX?$-W{wZB~21vHo8fgFW0HQKg6HgA6DPDo~ z$gAYjyX1vOZj$CJk>l>a`zt{3H_;a~X zpM}m#$xgO}$tZyqpt#_$zm;gizE+uSIY_BME9_#n+yDdBADaRH;LtxrlewiwjBy(a zLX6+P#YLt?#x9RnT0@$SF(AY#8+IaWjgU$^3fsBho0WnIp`mhNu`knLh0Wqkl6UZ- z6fs+yr>p3@_&t=HkU!rE%3R$gCT&%lqRiDTiiyF{)7-wm1OVhJsZQYKl2G09G8>qg zB2%(8akp)8olUg#7GAd$mN&~a4)HJba(KZ7XSLBNg~NZP$_Vy(n}dqr8T}c-85n#US*nYV&{Iti+5{E+`8`~BFD!1bEM zSb+kL`zK=E#9;sQ5UM5LC+p6xpDW=73t7#r&Ov}iS_JL~d0iT-v9dhwe3|nYbAn+B zv?J)D^UWHut6&L%8xhsf5?#1CyG+^v?9no|NFaZYUMB!T%RA90*ppLA!vuKQOV2DI ztgmcqUOJ9v`SuyiDGt}7h0v!(EDK~X%Q6m19I{?33?5#4YV%swG-}nKjk1?xRsn~* z=RlfP2J!GDXbV~;=Jg|mu{a4Pa;hRo(KEfetDzeMRt+eqfu$d2sr&cSqaH4$SnN@u z@pQj|b|Ej0;}6~3`91#P(S4sacE}dgvNNZp4+eN^@DzM2*Y!4OVHyvgco7 zFp&_l4EI)#7!$8VrMI~SS`n?q2v&HU51`HXZyA|}&)0RIay;^4^AkK1ox zFi?xd;C80%@?Uq?cB%*kLn-G<91-R?+UZ>_#_z7aN7~NOKc|!?*Tb-8$Od(3M&$Q# zW36z&0VCcujg?oiN+53n6qQj6ybN0GVignYhsj7X?l%TPix!1gnFDw)1M|={!hpMs z>O;q8U$0Wq!j1+4oMsXR^hnWf?5v(cXaXUpYONT+4CoUG={YG5uSPHAHmjxc^QYa) zI?LK;C-;p)Y_KZK6Hi~wx4izZ501RT1i9x8IH?-XmL zd`;Ort&O5ppS|L~S5r<*jd}$8k5OT1xy9R7pXgFmyi9{Lg-j=BWZcdYrn9{pF=nZo z9~!O`pA&2Tltb|lU2IXO%Rl$#zm>b97`ZUHyK%pIHOk9!m2i7r}p`yvl7p30w5ZCRr5Jo8v5do_;C;W=g zkUegL8?+UjCm+;gxLAlQF6@9uMdq84HPI>K!+&!{U^5ITHa4p!xUPJ2@Zzo($dOXY zRXdfOrE{41VATM&NGa`KL2ZixG3*khVF}o0!Tm2g)yewe%EdpW=k8h@g!4{OqG@2n ztzA7zhBN3BnAkc5VyQm)mRARACE5B)w^>n_(iV{V7#b*PADTn)hv6F%Fi*{}^DHT$ zjG4S%cBZS1i)A@F@Hu4^XVViUv;I|R}EPs26_+N)D-{YoBAF%QV1HUASXDVPSXKwf99yyQj(2YSJU z4><#-chAyVono&HcL=JYl2WkH-7!^CF=&}4Z^{h^0kUa^n!5y!YBKqc)l^%WgJ7@t zwHfR-vQElmPAz-!-A`lsF0|dd2vF@OJj*38<^PzC-P+K<1yA9N;jQ0xF8!EAIn5%^-_fj}taYDt>gNC5OaJ#9tIv@-pw{j`jw?5HB(>SR6a%_KcdKs7)>Tk`nFMIiqZ zf})_4pru%$E;EMeB5HL|`nGD}Bu{PT!(8X(jYMOE1UmTxzukTg?4Gr(Ci7p>zV1sk zX*jTiR?WgwAc%yU7kPp;T6uccfIbFu3mRlpiDdlnMuDGC1c}KMlXZ!@uoez5B#y_E z`{^)qI;>*arHYESs)S@!kd!vlS14}V?*x((1498a1{-*C)D109;p}2xHeB*cC)P{- z1Z}l1JQLOrFlm1gqj9(>m&#@HtfaOAGwTLHiAZd&9!dY77Q4jiccL_?Lrv zBm`JQNk1N$yy*q7X4Rs1R(N!hu3g>SEtwh{s1xG54qrlPp)aqFPaStl=9;$?k3K+H z+o}>DUBb32j9;?7OctFtJPk{2C^wHh4!m*S|mFscK zkxkOfG7EA@#Ml-|g7~{QZ~~h#+*nt~ki;;uJOx+&V$1n6H2i=(+=b~D^H1DyW%G_y zrVwWyTfgo_WF!h5A@&1iuJ{tkh=%(>^SF10>-1Yt953{R)CMxyofJI!BCdcS>6F0O zi~sgPDOFw8vOLqIuHKim#$jBUZ@1P@KVAB^ciVT{+qbE!ke6G3?NP`yiOM(gcVCmQ zv=c?W!3IoH%E}*>uaP2&QIFl9M(TRI-;j|L;;-q8S|Pkf$mh#yGMb7-FM))`xNak{YaNo zPoIVMT2et9J-N)=;Y)TGbjZ%pHd3F6>PHaYUfGRfhL>q!Bc(==M&_sk=G_pZkm4V8 z3NtIZd)rPvzvDj^gYvoGUoN}TTd$PgUaFlp!sq1VTRx}XU}CjyaiX+(`tGm3zSW+St6s}ygnY(xT5z>y;t0fIvlmT00!vmNrF<>Mz?qC z)N-Va(W1{uOQJN|l`@%6WGSOzXbt)+qoDDAEmd}-%shYzuxOXxHffe{yUE{Zi^>eYAJq zq-Sn_>kBN9~sv;d$$@**R|2Upcqob|M$!)b$@LIU+{~C_ArAOs`je2`PE(EFc7+w}O7~SqW~-XK5;G z=Bde#+v}R0Vn$w8G$PbY@xB8dh7LT#Qo;WaODYB+c(=|?Z4w`!)!%?e9!ImHZyT*K z%)?M+=jJL++AZz;>U-+ebcCn)@_Tm8owLH?Ix3v3S*`@0IV3KAE{ zQYe*2BLmo?K?k0U<>mloigZm-`QLO-LlbiYR}-L>E19@K;OO9Q%1WY*HTVQZ_NB!5 zR!Wqt8oe4xko5*mV3*dAFmC%9ks_t|Cwi2My)#P}iJv@YJOayz`igd;NGkzhix^>um{#oKw;8sc!q z?F%Ub4Lw~eeG6@@QiraDn=#>-Nh51oiT&JcrJ%ZbGBy4Gj&zMU zp8c_N_G{ExtDp($-jX@73V8GV|A2H&Izn=;MzfB{sAz3I$vZs9E&#YA3aNlpOU;PW zQbAC58n#-WH-6x~h}V0}4r;1>w>BKL1XE7RNlXKmb1do&X>ygnKe`MzlMjM>sFPK# zD*OMx5MA%}6)XjO|Bm?q2Gnti(5i0kpSZSbGH(dHX`PfW`$Sc-ZB*=3 z#kOtRtk@^EZQHh!s@PV=?z*4n>9_wcdW?R%zxL;|#+rMNv)7!zYtL)#wQjbIBG5!- z*q0f0*$oX{)Wbm_-$WjMa#My0B~~^xG>bFqMRL(-=%aVdsc?Um{JrT97qaaE7@(?pL9tS%3T&okj`!o zEEkqAwKdiCtfRmN6dl1;cGUQ3_yq}+;izrh2=|HihEu&j$Y+>fQ3?=OcI_YASn58qwff9p&% z%$jQWrt=K=9gA98`sII>jazM$h%UIKM)@-_CZ-HvRa6uc)sr>scm^P}5~vL2&cO&)8`4(jBiJRwvL_fF1FvCqe6i9kohOhcX)>;rRaQha9Cu<1+a z;3~Uk$44iJU-0r%(njRd(mks+3~vWpd?&a|U`E?EUs_$^lr`ci3LBWR@l8rPK2Jemkv0MaJ?n!2SYU!8EBb^YZneXVG(x35RnJFF4}HkknD~LS9iFI= zq^~2hh)@1Av`sWPmsgwI)?p|6{@u|N?^jDH2TKWy09{8-?x6axj5CA}>f7~0Y`o0Z zp(SbUj~3jB{6I-){)gM5D}1vzbIU}7@w<7U?@zfnt@oj_Y-M>7+l9$A&KlTzl-VhD7= z6x9}Ms^@2xpiOgG{$=r96Ne&4lv$=AIGa3Fzg4zs(6&>$&Fw+NO-S=?D^Se}b~Fyp zBF@zU_ccsv#*RDU-bJPw8tE&>p07BUO%?6Ov4i86R!c3;bfm zF@MV{*#CA}%_JvS)lpZr=T5U4%gXJNDqLsLV-iXtKRPNhDNey6Pc}Y03W$={^GH*v zF!m`~n+S{gMRWLEK9clB8qr^n_+LkX6_PcD?d0`BWrrKWH2ZXL?hH57XsB^qJiQQF z>K5lgt)_OAQL1g}6}W%nT4FnCn=0`~TI0ISlXU#Eum{3Gkd%y66vEQYu`$TI{A%pg z>lrKAzkb~*ungm#M-#A2ZdQne8I-6~r`3F?;e+B;xY~JSP*w4vrQxX6pLkGGc<8@4 zSvuO3{Kxgxsg=e;X*kfVrNn#gI{5!-UA3_SHdh=0Eq`B(X0)@rxvHr5UrNb4MM&QM zAv!eYna)!0yzR|Gu~Xxw5_18n)4Ejrk9GC@j;d{@lF-*uVK9&jZNmo%QPR(bH`h`M zePK_D7Cu5TGBS@@KkajCc~4956nA2fDDTnK0zm^?8w!9>H|~6a5XkrMQt1(x6t;6T zf57n0_d5p?rIXpaUE1X)No$7U2BjHXeL07PRYu`4it@&DX~aLVXgTlLy&jGC#mq3$otUoZY{ zJIk6k(YL!eVE38G!^e<$mxg}_)3ED!4#3&&?JlB6{{@-OMUt-h&cwyW$<9UKKW;oS zdHKXNwS4(RP5D9v?F7wSu4jrz+2qOfz|64)_e%&s(g?18$^WLc<-a@aPLU_Jqe3== zcFHW3$0+%zg?2LZ-QzV^5`-S9BqW)xs>&_**8g7L3EIOPq|vO&oIOE&Y|$)_Ts!HmyB^LpBQwJbTY@^tvYTt|8{UP?9ILQ zAakAc_ZhMMqHdt|x(+v8v!n*o!t3z0nf%i#)*^N|^mk?V27I zu+3J~a0(S5^EbU~0*XFEAwnVI41iYA*SIv3JCjRP#WI@tN_>yIuGDSvb1_zz3M`ow$f8xA_kdJPIo4aRPnc13c_6|}h#(gjke59o$ z|E_AGXf9S$eSf*%{$u?;?}=pBi?bIK@$1@f|-HXo*rs0u3uufj;_oFfm$Vxh80hREfZq5&fz9 z%F9y4{e>0AoB|i@oCjMLSudh13ESPH<$3>d@~>one=0#(|?q;#t z^fOP&e^Vd-hEUK1zd$L(>NGJE2!Aef=shtTBl_a=Fa$Kb%#@i9qb6p65#zzb3B7LGG_+`yEKnf^fNU;pnjlr(tA7ml?kzUR}_i{-$H2PKV$+)#N zi$mrhNOe{SMf-|lB4^i{Db6@upApogPg=E8!AqfXUbCpT)LUju(pX0L(efgk7=1eV zTT;Qaa}ylRaCi+*Z1rq^jG$0 z`o;E@2J%3#j=QB1+*8SOWGUt*Itz)lQwoy+2YK{OuxaFC5;grvoWJc=h5rx(1gL`IJ#BrGB1L>6`+a&C>noSj z&$6YW3WIS`|L&cPY8UvaitgLC#e@>fj7_Ulew$^>868NeHB z*8&ohuy>&=sV_!9uUh3l=hDbtZGzW`LGWal5gQzvBXzueok1a+d2Ar{C|7H2o-bt5 zCe}7rOMU%FtwDoRr^&%MwIAv-{^EK#QN~30Q$*q!L*E+Nuazq-iQW6BXCa@EwdPRbfU5(*j9o&B#3Pcn9U9H?EdYPAfA z5@9Jib^-aY%TR%Ae0Q@0!(u3|L{wP#PDV;J66_LwK4w28NleBa=1yy+B3bRaHxbLO zjdUbrXvEHhuPAvm@W;+>1k;kE&}`kVkk3bhb^9v9F+Gf5cNxXW2Ye__jPkfo7%vZu zS*U--tbcenv`esiElq6E^wpoi1%zt+sK4tg(<&L`v?^$pWzkC~fiKN(r}7alC=-i6m8WsWTZr z*qrZd(Q;H65{3(LB*W@ zU2{?*ftJFruH{)o|aEM;&X0+s=5))Kmz=;Z~w#fFQ4cR*?VqsOZ}9{b;@46vv3Hsr2vW70&JrkQT4=8@t_427zU zv#ZpW#w(O3kBBHuE7v(Hq-w?v@AmnxR2nzu7zGeP-NQ`PaxYV9j;x90FTF0@Y?)Qq zD0P$01`-u1v&OPmzg~eyP+ECNRs*Uhjg6 zNO88-Bv!?ZXxH0QcI7zMr0AM3Z)w6$jkoOu(CpQMH*$`kds!Tw?ZFZLFz~_g?Ih1b zmy1oPMnx?^VyCbr7wv#W#I+hzEM?y-J%PTN@W?wEk3wCaTi!Cr~1JpLhb{ZOJLx#1#9Tx|+WSq>hQCgh|842KCFtm<@&6Ip%*zg^F>tiNhv&RX@7 z!Vo|YAfp`$-p>!-Q#Ff{*8bGTcj&P>paS`KTaWxaxzmGhEr08YI@z9y8+J1w&$vO% zK7-Xe%%66LA1cY)xn8v<{C+jv=bj!9ZbWUN0c<(%2ulcx|3lvf z)v_(E)L!`oDJ7cTHGvq3w%N<+3r?Kiltiq@9W)!aFCaWXsrn>+pTNAhnv(?14j!9% z$zPjz-1ezFTknDJvEcTc$h#>t4g(e?d$v~c9 z8^HPU_of)T5V74~k(4db`DML75M4l4;7rlAY{@$i<%@v7*Pq)V=r%x#^>3*$quv~V zn}J>H$Rr$$Rr^J{d!QMQWPO@p37MyhO(+WQJLZz-ie?AX_F%XS zI=BGFuLhpq7GBJCRYJ5}V0et^F~s5&=<~8RZuio4d^%axr}(k8i@UPH!jTBt@!S00 zzd3CCqjJjjLS1UhJ4yt*_q2QQc1SEcrCyx8+@F0uZu#{*1dV)_t7dOl@b3!kNLQPX zY+ilVcNRFEHJg_zof#*{+v!Cg2T;YV$dq3vd;&5IIHB>+#f zf7%Napq|m>$5_dpK{jS2e3fdkZp@-RaW|^OAdk6%GpxjFJC!$Aq;x4?P-yb`IQS#` z?knhOUFrOcm=P>p0hZRr1N0JChS!d@i@+GBFkHu)S z=_PV*cL9@&U z8pT@fv+}~(z8tTm8Ug$M2nm#vbA%3^x>hzNHx$a8KAKe+Ya&%zN${Url-YO+Xpi)# z@FzIpFWKsK^2&1zpfTkb*QTSf!bpnc@%gvAaYEIe)IYLm@+1oi#NU^4mbr5<(k9<= z6UslUk*4AO`Od%#PKQsj_IM6sW%cxQ_7YV6xNgU}79la^@ybj2`ERpMFMny(MCitz zZJyO>%+!70mEw-gT7Z5Nd{raN@;LDbj+nyun%nss{tm9@?a2BX%fNyzfSNn+2Z`;1 zOqi1arUq+Yijf4k=njqnwg3DXpSxq>ukWOR)W!D1lQ#EG4n{f#4U;POW_2!-N4F?L zFQ?-lZ+?0ZDM`g``{04^Y=u3-YxgTrY82oPi_9s%W*NiC0Y6w!@T;X9!6acr$6X#qnE6{muwn8y}aw7rPT_ON>v}&Gn$*SsUDAx`x_U(yJz<} zoZL{O2;Pri^Owdyy+@|Vbv1llK=jBXC-FTN2Vg1p8R?4jpdwu*ur8eB?N~tbN2wS= zc`?Vc;-T2)(%5QueXbukVf^$aVGfIAtNeJGOsR%CjfY1ldEk8ziG@tqbGg!W+^Iqt zOQVmd7*XpuFr2sdB!Hx)ly=ieDJ$+FM4&{3&Oe-*!{KP(xa>D%zHp-!vGanKZ>#wp z7aI0}a3t+Hh(jgH6ccf+e?x%GnbFD1cK}jAt-qFh6J_O{6DL+OjKRdI0Pluf%)V%A z`6cakpKZweoGStj4UC&;#)jm!UFi+2%J)x~!N&~aXCX!3+jl)53m;6mrN?TW(#?)P zu`d^euN{n)=gQc2Z|94$Jug$yKmmsJ^?{bI=j-)pWwXUA9g+MKyV{!)C9{+mA=lgPv ztibCm<2JW*j|S?J9HTB3HYI!Y8FyZ1-uM?Z{Ij`lY4->ODX(xMC~6bmod?0c67qov zzl^`Qm!j$yUXK`u)u;|r%F9Zk;@iqQWA$YY$&s0|1zungGh&EUdTQ*n#w?3H^qi;GU7EuV8i)qRkkTk7epwalG^a6BwST3XJ!i;@va&A!lMC4)?XzM_+$i=^+Lb`x7RD_tqINM&mK1!+$1zIAt*}S5TKxcbLd=p$|h$u6$!Ch!R(%aF~Dr& zT3V*igkFAOMo9(FT03ryai<3)hh%JeWRJYfd@1AQY(xEoIfE?$YyYc(A{ppM$K<5L z<;LU~Vh#fBot0Q3t%bl}ZX}A*xTs%n$=kTJ0a`F94Od`c2V(!}816&tL&R|ceN5)x zrc)C-T)}N`=MGFlOGLnG>ZH=Z0AEpB|G#y*j$s&QY`UIC6K*z_fZblhve^lh`GB9n zB<+{bVLN*6nQOK^6Q%>`%VS;|(UezvEE|;*4{_m~Tmp>rtU8Q6jfJ_5#`UmAL1UfT zLm-qeSex$NqG|B`R2kR376^D8+3s-@rspKUiYZ^f$Ry}d!a;@ujX6hqc&6pqe-v4@ zc6?7!RWOM=gSGHo18}25S^NKY$o}UJS%_8|)b}o0M_(7s68?!Yo#*=fpZ$7aeB@<< zZY(M}ttpYid)%FdRkyf(=#*Frtqn=`+y4gP_3L;13lA$6or#rDKO>>-_SXPv~Z7lc(_v{dFbMAkC0~hE!b&w%p zb9P&*c+~9@SbMbd^Q&lni|e0?JzZGX%ky+{(z=Mv=?Fco)tpJEmfj|M)BqL}x*0Tc zW-Z+#<2_peTggHg%}OW*HI$Zzzvx*65P9I>)%Y``(XzCz28iaMpF$%@68$E2Qd+?t z-KFktOk?-@{Ck^kO1zmJs|9mZ6k)c4Kco@1G{#2E9H|>^g*GEde$g>>O$!~tzM9lR zAJ>w*N@}lXN2ZBQ{ROfpSv1WE;l5M)8XrXqjx#KL1?<3u-KA+cLLN(l+?Lh@y_NNh7}L0ngd8u+ z3(V+tG~q>US6S)qS-XB}&y!f+F^kWhi-Y?JG$7~ znmGRRLU^ik;LGB5uc9rxd(?bNnmW6_L1Rh(!?Vjm1I6vM_9BxsMOd9I!DC_G`F799{ zn_i5W0uBU{VPQKtfB{a7;KR%q-7~FBYz#JL`yl~v5#W;hU}=bdrNq)$Yw=$xgut`B zpZT`CI8}4;&;Sn5{RaDH8+Hf#cfe>voY{b=xcI;n2xunA|gU5`=6Q1yRMY zV}jXW1nK0JI{=22QEEhWKY)@r)g*;HH1<%tY|674>J+U$;AXDAWJkf$Tg;CWGz0%r2HbTOKXms>Z*`&c%b-= z6ZQ#w{8aG1&vjpHTQzKu{h|}g#5Cn&q~%L{V~O!AlI*ti`ge2~@*j!FHGP@$#BXbS z7_5=$A=V|P&fN9b@XdM+gwFd}d#3*^yRUZR*;o7=jjfFS1A7Z7{`KV>aTy6|QAsqbF6FcBTL#=P}j+LJ`0fELV+OV&%wP*+UQ9Axs+ zQz(z_t)4x5ec1ZAHd+y$;Xzr*J2d&C=^x#e;puq)&K?m8Qj!5>uX)3-)@HF1mXlEm z@bPoipYWHS}US0djVj!s3gkX^x@pPPh1sEW^r{?7fYana^*^GD3z54wh&?=FWK5 zII}=8Q{4)?e)=UvS&PwsMgmY#u>NU_2E08=Pno2dRm{_bbicO;`+k%3r*j+)en)CYrGcuahr3C0Jr~ zsTgw`E4{gQE5i`w&HvZdbDS>_$%#0=$>}T&2cV$DgZc!3GXZDe|%T} zw^l0QLxu&P&39bi^2kT;cd!0i&24Ss*826qN#3w}rjNF*>d)G#c^jSb@%WV%+vLiC zInf?klBi0|E6N-lb+-3956akbI|&tTrfV$Dvw{5giG^k2ZMwqRd; z7Fa>);02j;O~CNpCAu@ws94HkhVos&ZAHH;e-}MOPOE4Si%(inFLgB0S*(}pWyR1a zm4#5wOsz*>4SFL#=dpdtZO+Yd(~O0Zug{z-E47Kf20c|1^DB%?yRo{ujT|sxKW_ z&!~7UsThvOX8lgqwmIwJ`80x99AsL_)tB=V=t_t{hfY=jxo#Sb-9H%X#=o9#t8`$W zC4q9s|4nxR)f2|3ZW^7LMN*afi%Yxb;hczVC5ZxD`i1~VcvLaO4Qzo(gprianAL)~ z51nfl=|(F9&U$dr{yGo>x{MX8nE+1c3`0}1`cXDrKxMD%1*()rA165VPJM&U4U5lR zP59}27xb!FaVsZetn>#IiJQ!C=9vBHlCten_Y!7KZMX1zhEgb8s3etun=gCjO2awK z$Yb&CY!j>HR(As9ams(RxQHS-@$V{R4TJG@ndz9G1$te^XzH}HjzINg^rMoe4Gk5Q zdD{Q+y3BnP!2LJ>iVHB!+@=~glV*Vl}T z0haRu>#fe@v+%$!W?kpCP8!Wp`M>e*zy-BlF^?DjH;-PjL&r6YX1nB&4^^rNcp6-W z4g1+StBxs@Zv zEj7V)wFG$S9h;V*E38cK&u8e*`p0o=2fc2>7W4qgAVfoTjsoZDx2rkr5Y4rM%q=$r zfuxngpPFh3dSJ3V2uCK>4W8b#KLyK z()|aW7z|x(>|IS9oh*3-o&6is|5<4-w&xXan~X&7z_)ka@mV>!nn$O-i(Kx|+pz~fV>wE$tH++sh4 zs$#6e%KR{FF;Ep4D{!Ic&GkG6YDc|t3tc&$@R6aoWeju&#>ATGx*>WU3ul%et|@la zzFI%t6*Bp6JF>BzkrMzqO<|-YiRa_QZ!~SI9}X$axmQMaSCBcv-ge@alTEdj^}0uPuB*VM14#yY z8p$cz@KAWFRT`XA+>Y2-IIo={2fLuKSeP(#N zms^1k8GwujzPycCHA?QDDHF|u94Lqr9F(*JOF@A_Q(Iq`cdwwXFJyHKqpAVXk@1cl zp5?YpLXkay;SN)idsbjSo;LQlvG_~-vX8^9KbKfdx!>_i$aPxoDsDZU;@iw|VFl{c zShAu5{RSK@^(hN@%dq(ws@ouSql4nB$h<&k!3P>$J>y-kW|2CLZIwRNMxV;Q?;ZM^ zss}xL)RR)+c{T=cvA%cit5oH!jB6J1a07M&r3l&;oIkUBCjBHId_NNow7zzaQl}9u zMPVI@GX^BKLf*FZU|7D4p>LcmfzS;kL0_ahK#ny3b->BtYGKJ4nzKR`^lYxFCJGo> z)e4QvY~VMv;={68*MJy<8U3=fYyF-V>JssT;uQ6s;z+b{k^j7^Ox}J>%2*Ldj^RUL zEc+Om>Vm7FQXww#6W;HApjStT{SP{W)xxI+`|&JL7QT&84(Gc17Tum|7BoBMzus7MHB!})u?nCVA2sTl*da}A zZmh)e#jMt9JVmeEwR55l%>RjW#E_CyjKm?h@URb|^;?*k?p)@~?@8u7{H%R}WoKNN z1-G8uSOisE)hO_0W?H7-tsg4&hFoMmGm*DJJ&Oq%2{vbG57}Gugc@9@KwR;6mT&aS z&)>aqDQl=Y`09H91t@0G1L=@M+MTb{*r|`q-7lxjU4d6uxPGPMnQwPb`~UtBTwEI5 zSx$uV^_Xp47jwtuv-1Y2-He}GKsjW)z`yy8F2~ElYl?uU1M0K_v2EGzwTZ;zfH$@N zU!Mj_Kh3uJ#Jy1SmV3E%baTARW-7wRPK#R_EGfjI#5SP_xY$_3VN`YQ>Ub^Kp8qk? z6~P_3JgO{=N!qEvePD4e?B&H5%Jb2~@cv1@PMr9Pg5D`s7N>9U#P4)-8(Y)1EB)FX z!mz>n9=4YlXIjc7R^;Ikw|)K5O1`c?UTnK0#aKwlVs2H|>GAPJOu^eif?^dVW081FBC;8f4V_~-oKoVL4rPvQBr1xj)A%y^4aaS+ipuBhvlk=^B!L<4KdW? zs=BQ9m`XxAR<4SQN|K%-q&N|)q49gU8TyxxEq!aV2p;d-{(K!>=d@OOR}K*Yc1kE;NhS-)l3D`uyYlLkC$bh3Ng6;+JI_tbs6 z+zOU0&zF76Gh=}%fU^=(Fx4G1 zh7ortHq4qbiQ=N;4i`HaYW98hC`(t>h8K*>%t=X3tJbgBMl?X*{2dut<}h)O|mcyIvz~v2Whz*qEYnh{Gvo!=!fEjj5$8V{ zGkZq-l{Zeg!XhcHx_ty05iU0kHn02E$y5aQ<_P-wWP=KprCO<=oSu@RS*Vttl8~O9 zmXe+i=RiMraWnQzT_#BR)qjX(Ave2rR~QL1l|_WCYE%)l1xu4oLwkHm(<=V$1^TH~ zlX{=R^w5Ip9^E zC7|`MKmKO_;0=rE(C0%1P|SspaRiaKq4OWJ{0Zax5Kw?e|@)2u1Csq!^^^6Wr-T`5O`2lHv1msfmw3Xbf zJw$D+Air^Zu-p9&6b`%tB*H^=hK4{2E}QpO01!HS14BXL;H2$LtnxeP5x<51rPpo- z{^~V2?{jT4Nx9|I?)DqH+s z40AIa9uaNV`$>)%bB!f-o1~vf_#(6Fq+0R-n$kEu%>++QUgB4^J-+wfRsc>&jRbnTx*PJAZ2Ad(!b$W|A3g^{UEUfsFD#20ao>}$LPM`cC{)|=UWC~iiEdO~J=dcB9koEsK^ z_*g6CvJcMxuh<;owX((=@yLBH)=iADQ(Qd8iEu-2E7VPPnwQ{KC<#FuGJ2{dr|q}! zX!&04(&DwbK`I6_{aZ*O_vhYVHgKvS8VLwBkL93JE4aqyzb9ZL-z)P*>I0zv0`U&Y z6-xkzN{6<8@nLP4St}?UltDpt>0sUBWZimwH9howD=41v&hxO3lE%*=f$A!?Jfl`@ zkW`Y}$*8WLA@s7@m27CU>86P7ewd%TNyt+hO|K`mqfr#9Q8tm9pW=OM5n7Z~;iNO9 zI>@S!;mo*TcKkI@-G&H z(wUQ9hmY)?e~O80DMv;~7}ry$Si$df{gB}N0hcR*+h^mCOm*w z1W%f=nE&TD-6)KW>)&06-y}-O`4I_!mQu_)M=B!?DYMbys`J%aMku%BbtI99EhVmu zOL|%y7O|B+x=3~^sd8Lt*m{FK1`j!`uMpT0$Ds4cPHdU2aKg8-d?(!wj&1B_r zvLzDk#7I_m^+^%k$m(ew>pG*?8EG+7s}#u^+D*sY4ETo0;>oCk>2qpqu{jd^`G!W1 zB+>_I%Pj)kN0UubEyzSNTM@FfR-8qMwd(VPut7KO;IGm@*jkw85_D(TUkK?5^S*0_ z%0`Z1C7~ncQ)@kY=gV_Y>LkmukdTIvh+0N{n0NV2TIqpgh8pG7L6_rjl4$tUD66tP z@)?8bDW;<$^v|6T5Eo!$yFQ3R<+#$)&r);FZI;I>L$%F5v@~TLFmkDqZTpj31&h0i z4=3mSk`c!K>1SW+`^hrOrSY`Mh^@p(>`pD?i6W>)s2342+*1=zOM>~l7rt9uky(?R zMTl*kU6wHFSmNJt-l}>`iCXn~MzOh&4YFo5?xW3K!~#du82oSZiA5FI-vG_-wyT7Q z2|Pg(hMM&TMJ`H#O%TTObLw(^*Q^M|Ri@Oi2#VchsHQvePdL1F&M6tqiwA*4<@LmB z?u5#SN`Q8ICX!Xs4S;Fy;=blD$pK!(ZA=b0ekSQmB*73sXBtztHbF zf${_~JXUhthwUe_LdSCfjOcf4%GkgpMIj|HWm+n@jo*S$k6$6u%kJ~E*Y6AYWz+@S zj01&7XC12?e(N0c#VW?&jW5WW<%+mKxXk4YhOmTGf?u%eD=e~a8!axA<%jC3IZy z5iTLao1*nM9NoFl(Vulc7~BIhW`dl-Ic1q?TQjE;Cf^(xpcv4-(_JOGVIF#l1LjXm zl;EMs?gG|X2T}Vwez>M zr%2H>g(C>*T_R@0K)?id;Bhj_60w5kBj#{N?ozq*RY zNrd*(t!OXpj((8T_uK&Pr0CsFVCY9qRwfBvytS@I@F`p4rgU{=xnz$MA~S=y6_b&n z(*myjyS2EaQ?#xY8f-#Mv#@$54zlMR){BE7B)}Mtq6UzT^0}Rvu0yD|oY(YO6GXnv zN7|wk`*#F`$&LsD1#@h8ezA%BRb1e_XDl0;aZx+c{z}9UP;o)h1BLMAUHr4ZEr!mUhI;0XDX@=Fc}Bu&nv1s;om*cH@6seN z8iDsUxsZtLhYO18V}P~i)iM_XkokLVt|5P&fydGgu8Ah7GT#3R$o^;@Qm(Ase@9=u zVS+Ien$fu|-eQQFlWY0(EE&02F^#>9a>29YKhD)v1tLmGQomey6*QK4#BFkMcHK7d z@k|||z8kOdZ>yX3$!l~E2HMK+fQR+uolJ9-c+$D#v+ouN0r%xo-9yDpubV-(ybd8d6wE zaT`tiJGLfSZa_I^V(%V7c)lJ+muX%!laE44Uglw6K2F;)Vg{h?Alp+iU~wK>uiyJb zDRfk~y8Ag$7sADx^;SXqDp$^Ys1)7r*3&eXTJB;Zdd$Pu1p^_H{R0GY?pFHMNS$0(oo zK{Wc{$9AGL2Tz;!gXxd+xE~%$({Uzqv?HNG-(u3VNU(`VV8Uja7KvfxQP7!S?F<);~Fb&Q*ogue8ht^ExVY zL#5ll?dzfzSAuVhT@V?Dn^~ztGr+v~j}{B1DW+zj8>maw{{ULLtFhF@8CP!Yp*%bI zBH_`|$@!KJNH-laQ=;9oJouJ{p6fSQSH9I`gVZ z>BxRv!QoS~uH3aSYN+h$Vv9I2`^kQyJlmj<_+X{FC>q8}9CrH&eyvMNG8B5z=_aT) z?W{znkBRg)sDcs=X<&@}+ezGU*xQ~GlDHlNfdF#qkL)q-dD@)DpO;{s{s*Pl^He-zbQ^S4++d(kxMivooWpS2Ez!Rk5fw?}0X zJ+y;Xwx9u(dx1XizwblyVJ8&hh^l|cI0Xi&+m?q+mq+j_@AbPlamJVHS$ByFC4?$e zT9QK;sAK!|^w{~?%ibk@$LQoU6Ge-RKS*v=i;=pzPTkzq*m8#>nK&K z*5F0bq7Ea|+-d}0E!j*M;66_A>icR^BkL(Ce z<|;;MnYlbeUyjH`FPekrPUC04qFVI^&JdeYn3`WT511-%I=-YJrtq=|I9(%C?k z0>-2rzvDj79AW`Cvb6STW%9J!IDNar54q)>zfI;bx)E?~Z|ewEkVK ztK_Vm5PaSqX8uT~3fFkqf+6DuMa>0V`si5MdIpOh7{zSt zeu~V&s=$nR zF4Y9ea;??8DYfALrjJ?w17d{r5^7%qG#%bj6WE~?D0bnpO|Q^3rUAVr%ucxhy% z{)rBBp*;n)|3)ziJj5O2%oR+#3t|L~p!rG9Hc1-ZTuLnRkj7+`C;|;hH~LQ)nx=pr z_;`2Dh%jJ+JCk?x`(OZ; zKsZQVLYPJ|LQUzIm~pFODdrrCyOtVIov^C5^5^eg*%N{Q`T4?QD;$Ja~~} zQ?tg41kXZ&3)xU#96cI)-}7WcOYtGrq3RFtlz!D?5(s9p|lCta^M~0L#C97 zd&)8cQe7BmI8yQHS@HM z0&Eg9MRh517E95{D{xxfWKQ}j!+T`VaFT9xfW!PjsO77Ez7f!B#GN!&niZW(k;dwHPf#98f z>RmI!my^#v{fRcx+ab=22K6pa{)K&}BH`mc+{nv&IlJ4bw1isD&zHnw_F_*NLxIz} zNI4KzX+yblvPtMP-o?|=FSdQ+4=Riu(~#&Z#w6(uIfOEMEe8$!|3TS1#R{WzTbs+a z*Sl={UAAr8wr$(CZQHhO+g9&=zCWkWNxD1f)MeewN+p#Vb7nk)EbN{-^-y8#@N*QE zA51YDK*V%6!v+5J=Ki^WPAX%8ml(;yWhJ2P_v08|i^mALQ1&zmse>?K=VtQN^b zszN{G=C7zRVXKCkE*Vr(_?51Ac9?h8L(F$&E%JSA-OEd;JefxrzDV47HS#(vv@o8G z{E7ZmBi=-BS%uWle8Jumu}fKO=X~C=1ehhoiy@k#mIhcQ1)j${$k+8h3WjUoS+97| zp3$B#fTT9Qr>nIzGj30_Dq}8p1Wr5lZmGuKu9AWJ=5Dq?pTy*bAURDOY4#W`RdN5j z>o2eAA+V>~w26eR>84(`6M*Pd1`5|EVH+6 zs36)q%e{-41j};S;OLObc70zq%`nAXTzs=y_&+Oicn-;bQTzVRjna zUC@5^v0CY-Sf+{L(qZSf6ZcZhZg_8J(in{~O4&M}al;WJvmzlnoeS3p zSx(+GOrL-h5fRrBnOq;BN#6R-{p^p+jjF1j>^r_ks>?~or~#jOLUx+uD3Vwj!26NpjN%~j(FTAG()uH>eL1*;%tvRZn>H!C?hIsVC|{`RP~2} zQh)uDyWo064Km%pRl&+rI6vMV8@kuFfCLj=`5)Rs^S4@s+-`c{@!}n^{LXJ)J7{8@8TeAd~XC4$|F@j(^WAma_^oi>8cJ+SA`0-wAybciOpFGX@5G;%dAhn-} zgCuKfw7i$3lXv>G)^s6$%ukl^r(s(bZ_e6peylC`}th--JL10YO)1r zuR!C+oFRXu1XV)WYp=4XP5}Xs^%5{VAI6Q^LZI9lGUGgrZK-Rv2vOB?CSVW^u!gQA zcR-vC#FSlVqN0T}`5t>YxAQbV%N`+wR zM=DuQ`Rrs>yz}L}?qD9s>4i$0-6edAWCbttxvV=wF0|dsD7$>+tn?D~T zb4GWb79OUfXy`66P#}EfhUAqA2?ehIxY}z7Ec}q<#a`nkG*iJZ(${oi(gX*H{p;d1uMO}>Q6wg_G`NMFCWc}ffUl3+!-3-etZy-bJM6ri zV1tFNI-qG6m$VNBmtzRRxC2icSS_F>6&-Uik~I;0O9<81f^T28y&+3gechrNz3KO) zAyypgHxBV4WRn!$^0ysF?FXkzu+ok{HBK8>AO)xK-uv;;j1+S@5muy+WuAea8(XxC z6kVVYOkQ~oF5?0ks(vv)#%Ln86xSlvxkHVp z^R->-FN1eWqMYah1S*CKK@>#9Ikd&HW|pB=Li{rgHiCz^)Mp}wQm84Y+#qh+=4v|9 z_lm-<=%t<)zlrd!(jN^T4mr*(yt<&cp~&VqO*1yyNpnPYpl%dw}c)4P#VH*DFT48%B&~i!>#B)xY@SbE-Ts_AY z&?&+Wlm=F@_J9D`o7Pa#SkoBtpDo|S_s}pi3#&thq_w7J7{G~L0K33RE~R@+JX-WC z-``wCgn&@e_`bEO%3q*i)R?{Z_2K`jL+4 znm~YL-9t4p0kf0zK7n`!tz_NZ1R;fG(6jw<+$~s7U3uNO&F6<5Sst!~w5$>K(`LJa zu@*NM>RKN6j$Hy@cdUS<;#wXus#q2%K9naMF4_}52F^AVk|vIim8@tAAb&Ms3=RYn zv`JvpQ0FfOMRa|9@<8wEwS7HZ9T)hpr##%>K$AyYno03(<`efu&9lxwYOHx9j7%`= zFcYLQhb_oWE-6c-t$OrjX0Hju5`RdgY9ofrwyVX?gHm1i{^F@JVnH1eK@uW|XjKE# z8OPkvg3oAg`{>f&-ukgxnV;8iY4}3AfhKR;TkUpzqIe%Z;J$*nR%R9R?wA#?9z&*V zzuCI}{&fk%JDR4ZtKAtZ5kl}H@Q%lLK%<+ui(IZauXNoDg^ey_l5X@}aBI3+oI{~FJ>t?|7HH?fm_ z`rg_DTorcU72ZvhRXl8ew--%YMJ=s!lwEgG#EbWve^)Mg%^7UXpMOl}N+pRCW`Y(s zUFeqa*#A_9V$xNDc7CqjtLC;wR-upq^h0*BNv{*jmPZQ!z*z!e&^OSt68+Wz=G&-Z z4J%qrB+jZR6(p2lRrzay--y`T4Ezur8gnmJ|LDod-nCVYQad1r+Z&wt)NJ3;m?;~6 zG^5MiT3f!nY1XFA-ms`b+Z?-85fQHkO6;@EabDae-eFR*nguw3UI84ey!B9F9vsHk z2i~7U^}tPXt79&LuawEAv$x%D{LIYMYlnFmVd4KP7F}y{13vs9n6vF^>y=I9i6?0j zFnA;7rOYW~?_-TziOD=|@|H$kwY=moUnvJ}XD29(WTG!vK1PA`n^e9U6>#w574Zg{ z$JHuNHZSFW9Bp;%udoy@8G% z@S}xY`9WG8`^a&VdqLI4D7x5-s*@nOZRe}9p3C(;<)=I@ry z>+R$4J0KM5Y`*!_IsmL%_&f#O7z`-yT8LkTYQ(Vc3EIcGYRe0@{sT_c_T8@3UP#E# z&Pv1f@-f=*BdVG)d;ibLFs#^UBj?2h4!;Y_5Rk)gg^lpjJ4~cw>;i=r1ms<`o?ziE zy(K~f@eqO4EgZpTcJbb=5CI~vqf4kO`hL0i9ybWC^;gm3FVGskecxd&NW-?cTUN1# zrWN+8I~Y-9kxBwd1d4O9Q5e~_?{vGqBfjq@yYRc0oQVYQMbW4EssZJwlyo(mEtXDF)wM9E}MVL zwXHiv21_@k5Z}txqrs}%mpPWVTBIvsD@)o#j5*jB7OX-)pl5U%WjWY}%pn-0w%x4G ztgHKbmUB&Yx!Fd17IF=KH+k1@uh)ox2fb$_w`uT8OD3TL8?~*WjTE^_QYbk?1o!YT z__ZS2TrzQQYR0@q;Lp^Rc;hG^$4-ul30nT;pj2P^1827 zNk7%&c3_2`?gFzh7Yrb95i-6Er?Uqyq?J=uqZ~o04m`Wj86p_|IA+#dCKJU$!M0}s z6H;KU`QjAsiGX|GX9df0DG`+`h~-?o(X_S;m%aJ9H*|}4)!E?s`xNdUsGQn!bHm;7 zCci5@$RIVkJoP7et{YBwBEH3(??^G-T4$ne)g%@stjQbL! z-IWW2NaoUZy%P*iD0xlGa^5181mxQLL8TX>j7erk#^nZ*2Z`vymovvGywnYU@SoSb zfYm@A)X&jz`Iqgdz2VUeYcst$u5kx46JVdO`0nf;r={>WRTGPktM<43*1v4pIBI(= zE)+~GNkoLSr|xOv6ffuJ`YJP7Hx9O`6UUsw3GMdMB$q9q>$2jD4Fq}{np@r>>aFyl z&VrjPG+{+4*8bzuZc%R%Dp(=mIu@m5*o^x{;~@J`RIz5Js}0Xtt{Q2-4;wsiawyo= zSm*IwUZ*NOS`;;v3?c}|Hk@^A2ME~=O0JAl=-$&#-R zm%$TcV)r`x$(VA~I{{%rL3FuU=UKpY^y8 zt`=Nr!H|g6fNpCgt*KgY=?f~9_y;*JVnZ)yElL$D0NdjnU2eim4Cz1KUuvtXZ!Ka8 zq`D3DZDt)avBUk~rHA)~3YEai>p@C$R~vA<_=(zs+xz`{OI2vmoj?Iq8p8&<)e#bt z=`)XvoW&!Lvv(Oj%ZZ$HM}jjwAAYE$q3gfVv#5Un#*4l?2Z^AZvR~6Yq-eo!*CUac zT`V7j<`#d=2o?KgP;5eIgQ&PY-mJ?Qhe;Y-N)>2nP{%hI+q+vdD0V9G3E7Yr#pX5A z;J>=oqst$qa=M0oK8gjctRJ*qQN<2Nz(OMunxFsd4G3*0gKPxAc3GGM=?ahmND#j3 z$-hXXogu@GS~FAoJ-4V2!d3F`Ifp67;k7PNkUzc7b{_@(sz2^-4Q1tUIWYd8QNFl(eT9A711C)lAE-IG1L8d2Fi#!ww5d(MY& z5LUaBgT$WUNJNj}heYK$?jP^r5eN9l*16mDu*ZO3!hO*7Hkub=paL1BmpPBni&hfEGt#c zlugy!322WpMZ#C))nVxJ9*INu(W5edIjqcOPa|MMuF~q}6-{OG*u0Yel20e{B@>#G_sM zC~;E`I@c?FVD`SY`nE3I%S6dP#t^thm1G_SfbP^b& zR$XBsWJG>gQ+z(U5A)ypy^@6*tO9G;`NIy`5G(U2|gUM~r&3BJ3BL2+GFCwCfFK+Y&xjy`(OJkq&_ z$dpdp*ut?YOce~5r(lOWP8gPorc}F9#gdC;8W7wvUaD2$S)uH0wTF?*9|Ew#jgq)_ zdYHCL&~^R!$B(~9@W6(t>k%RHp82bPKq(E=*q6&8?)&lx;B#LxbY1sIl-A+ICsp9( zzGrwRgOl|S7X^Y2&w-rU{t3lP_ZNPr>mzmpN08`bcVEs_HckXPNJ*#qi_r;;C$Fm& z2v{Q;%X}GLd=L(v`waB;v4A;=F13}O9(r9uzmlOKph%9^--du~*27TbTdSYh#)#V6 znA5}Il57q}(pl9@R6O3kEDDy#(ac8~SSwru-WTBRJglvd*lj_hMZuR_SXkKPLOKfnZ%Qbo4x(%V@ksDp(e87Aec_Mp7 zd(^;FG>y$cAV7v308v1$zw5Rozwx(W6H+1wY;qZ_Hi&@qI!)c)F*X?|>a*3>nX$XQ ze^R;E;rGUHNIeSWauwX1OuGYfH5}a78HosL-NG3=A%#aKFDhwU;@jSA8O61A^i-(= zz<|=^HY0PBthx<;9Ti3}5$taG;X;LZzJhKfqPt^!v~b!5=AFpdXLxa?^9ty8JhsAx z+xV1&=&ouJysnZM(v3;bnyi1ViBguU)RVMYx15$7evUr47AS7|xbIszs}_uvO+@-U zS!SBm*EB7rVzo6LLMQ(n0`ct|BONJw#<+{mzg!ZMEh2hWF?U|rX|D%XUD7i`YIV9Q zrIT?27QUmUcbGiWrr-?MUvf>a?e{WkZ_9p7O_;-Pb3d^HuDQBC7sS*$8DzjMa$VG8 zhuT30Q{9xx+F_$ z=KFG9c*S`UJUCwxD*AocE_h|#p6l)N!S-3s@mCa=c-?*VYX0||Z-b0{^bcLOsVteS zOMfLT;pN^-ducI1T!D*-M)o1ll!Zz)8YsvyaU6_KjBTe(QOWQK$lCPJXK~hn;_cul zH-H7@vm<{-Pkuhne>+?6q^D%0C#S@X+mgqz%#_^}tg-_g9QACZJDUe`%>T8dBIs%* zs3oLN(dXX^kUD1jWoEp#YOB}aq25x|%K2B2kBd!9)0n(rZ9UNJr5CsQOI(&fU(TQe z2g!IDK-81f<15ydwFT)N#_BVHx;b zsM**4WO$rvlv-5XP4`;MIseDrqo;g7tFiD{r5$?>qu%+W98Dy6R;cDJfYTA)ho_N_vW}iU!Q=7j1j7GwN%)-jQOm=#TMvP{Rc6#cs>|@hN2VL&kQ_k>7Z8)(B+(V{x6F#7PQhbi8#Q0WR zxy-F-Y2Oj16qC)ldp^ZdU23QqUBr2g|pyR=#ru<%{p7|1P%WSK-qD9g$vt8qZQa_@>6E@l=ph$=E~0Lf(aRh;CDY3?%$wmMV_!nr6Y7XCRef))7ca z-9$%%lGvwYm#s--@t~Xgk+?+0J(w=`HH{gh4;2tuN(N4CouJ(;e9gTT^Ts{5Ygw!E zfYe<>5Um0R!)v(wzepq`>F)O=$)Iw&l2Z0h%}NiaA9vzBRyt(2n#G}*{PZ-K>Fn>r z@1U5;ddaT5o6>S~jxyW&UOt0ZFVI$;DR^oi%IZlOIvI&-D7hN)a!DFmS?Rgp3|oHA zwPUuD#m3H)Oc^{98@c!H4>ZU%ph+SMeG@&)^}i}@NxwzL-VmqLn4GbUE5)3H$*3tN zXn={HI^y*@;=+)FnU(B#-=%DYC|RM$UficzmjB26k( zi_;rA94gr5rtT@mdNObptZBA2?r~leGskC+=R*1JFHVsvWTR(x=gtQ)K9qBX+N~*c zYjKPU`l7bnxO_QCT{ZX#1gaFkI7{%IHMV);0F112H1ru1>M4gq{%6)TyswE8SORbi z9RZ&8)+?C>QWzL|J?jzUveSOWpZ3CJ7KJ=G#}(k`mtyfNkxb)1+pI0WuO4l>=CG!w zrKQNp_ti*g6IzWP(`8D&89OR5zl9-X%4w1}QOpiUs#HyIf=O1L*;*m-Uvi{Dg3Oob z0hFiU_ufx7U2Ue7AqmYJpV;B!Cm}v?bB*DtR`TL6PuH%g1KGJ)^RlmHDljkabGm{uBLlM{=tkRU9g7TtxdPA0xW=WN;UH9VYn01g6C9AT(uL`5s? z@@Ev0AwkAxDgI(IMwniB3-Vy4oX)3-f=DCg||*;oK%y6$G@fVzEFeaj>JmV8|Az4HNRbZ`j0 z#K|vZa?4VV>y;U#M;K9#h`SpB+boAJp!7vc8H)%?ODh9`M__ILtD?QxKv&I}oXr5u zN!Qosd56#ip^8*qT`KFk`~CF(iLhI$dmFe}WapmnE`f!fUHd1FGuwn!fVk(LW86fo z9M$CdbkBy!gi==zusKv6crk?1l)x3V;d}iABD#`J6#_?dQ)~j`Wm2aEGm3M^4ahRc zuU(UN9<53#{~EhYfB;~GJHWz$p9Kq2aw>wS{?ERTpB8K;Z~SoKhOE}kmopR-)Q+c~|QQRf$v*L<$- z;Qjsp_UGj_Ut3kyTDWC-D@)sM3!yASTZ7C18S|qSRdh)F8D^0YzZ5ARYaZ=6h4qq&u zLEoM!j`p#u9$Y)w#$4!LZKKGQfJ{pKSvR zR~|9+pt^6HX#?RZC#Do0NG``p8kxX%i!mx_NP-W_LChA)xho?PS(d9OiwpOJi1Id1 z4Ry_g>NTLQLwK-hmmseYRTfAvsSsYw92A)yD=$M!FVVnM)JTv7gdA&k;U2-Sj$B(~ zpWAk?s97djHG~q)ml*^8#3mfE`05a910_k`s1PC5_&`STJ0jIqpD2N9AK&!xOp@j7mc_- z;Gjw%U?v5zzAA_UWRZ^V;BEw9lz`3_b30m2Ggn#^XGV?G946dJ?Jbershjv~fsHZw zC}07FVOEwVY-jb!YU_{=(ZF{G1{Wotxwpf0#|H}v=iR}NEQN!@puWt4plI|r{zRa= zN&$;49Fvu2ME0Eql|4P##6UV>lrPfL*K%Kb627P3cQiPqgy_g9ME!CEh z>r`DDEFGa&kOItg2oI#SH14tBUMKt^SG0N6Wmd0~Zcu$K6pUpjTF-N_aV(wo*Edef zP+n=q9wMlS8bj!{)3b8(h38u0HgIL;2*Zr)@w;GY63yV?Gm-_)upx`z4L`V^`xJJK zXc*gN_EHTdtpIK9pQp4c&=ahwv}pBvuiH09;Glb%EjCtBJi>TGry`q4lvI)X^TND2>Fl5ZE5V+5$w_kcI6YN?`^*ZXVZ zNaFYYMzpeW$Pv8$^ZMer$Jh0CE9IS>fl_{wanj1q^rIBKB=IhL4K_4LfXIE(lN_~EC$fd z@^q*qom_7I1D zJL0(hK8@j^bq+2))o@bhQBxFuC2QCnDTxo~0XE74J&Lj?d6IMV>L(;Vmd;W6WV4wZ z>9P;Mu?fR7?ETHf)bz^ePV2H%k>a6vXX4GvZhCkFM~TLPBUo#YK5p26e`R=*IPF*g z2iDp|FkTnITds=QVf#%LNFqRy+__-HkA5vH=^|m7#;e?z1HvRN{sj1WL_~V&2p1=) z&4mU*a$uOsb>v&|61?6l7A2Dw4l_e?>%S>=0CdyhDm~cRSpZjxoR9o~0!77fS@>JI zWn~g@D|!rMN4LH{008`X2c@w3=aw=lxV1e3AwNx+UW`}(u)=^V^JxEn(Et8*$&*Xa zjL}hw(@>hI)qnPlpx??&+(>J7X;b<(eo4%$I17f!|D$34(KGJD>G$Qs0{qZmSZz}_bcjOy^qamsLF%4fP$~5f+d5x%)hc+mmf%^7n55g z_m|QVrHz^Xk`ON1!sWundaBvY#y|N!8aDAopB~#wdZ7i^FWD?D)aCAY?QUkkS#ar(OF;MZewW*VBno72siPws(G&!!D7+D2~GEj~Rnzt5If*DeFO-dJ>m8Uq%`ih_7VejWoFmx>9wnvGG*)dW;3 zXB#i+fkL4F)z*Q3boBK*PsOUy%Ef8|V37z9h!%fqCG7aG%~qad84W<(eC9?W8AhPZ zaTwt5m%{&X;yM{SI_a8Q+u1re{f8&#VvF`nqPp?R2_V2{Vqw1%i<2LoSPUqNGWx;T z7+3i8_bzAjZe^sz*3b-4CIJW)WsYWdAs&k66NX6vQC1(x57{pmJCOp24~6Z0oT6G| zXsIC9+3Jye^^KsGcI#geHzV7_DlUBN#zWpI3Wgzp1+k^s_r@XxP$ zT5a1FYZNimNHRsH#b~ubNTb24fF#j$(KI3cFbK(dGGz&)`FNuqi;U8qCtmWx;vuG; zQzJofZ{dkVOxNJn&>v0Q?OhiyK}JzwgF)Jd$ykww!o)L!Ht7rY zyQNbS9FO~H?jl(3A*>QbxQDiKJZ;L~Zpuv3h4G;Y>FPUrf}{JPapAAgn%!$w6@~Ya z*v`_9kg>!zN_5;5=js}?d+^YZ`$q5Cj1f!4(R<^3aQK(9?-H$+>XZA^QJsO^bM{Dh z`)@X1J3qx^$_7)msavW;rQ1+9m9txdL1C}5Q^uctyIFnQA$inIzzBkKwoDj~wc-Qba3XDnuf1X9ZhA;kdk+_=ULF+h44jc&Y!4Gq?ACNA ziizQg38GC7ePUC(_z1{xYh|g6SXq*5)$!1RsMEGkH-odAMJv1$8SJ5BB1!QwaS(h1 zGiZlxz7VB^M%OJltQG^W;}`J(#;`V%?;lX)zVT}{B{Fl-*TNBdcadc8B<%+HXp{}e(ne`WW#VAZK}X=vL$swibVdXC z&XA@BbRT`%oJtN{?Uk#DKO<*>IvhZ;hHtg;J!LUd9W@fMM-tgeAPQY+LvLe1XoRdU zVByr8hy@W_NOIzRO!Mj21ok|om{o=ZYQN}W%Ef9`dD}wg*grdGR;P7(E)FDu@EI-l zS-VVbUJhS)Z~c2egLxX2nJx_KD@sYD+GM!SZgJ8jBY&ciZ(ZQUY`7;5Wru6`9_yLx zB4nNy?7iGgs_yB0qH*2cz)MH(IO`XIpVXRhh-h>V57#&n$7Hfg;gJW74!g_8ZA9%^ zs)Bf9gt0~sdyOMTd@{bhB%SJK*2&T&uLfQ-uecZ1D#iK8EJ ztZ{aGklIDy0L@6=IQ}AI9r<%j7^9RjJL&)2Z~>~u&Z;H>#aE3=mQkvn8FBzS)NL$H zZg7OH)3igBn8)5v9DE5RB#2)TzbmobQi=_SqK7ozrB!gDzou(}cdi_d|Dn&abGh zjKP!jVSHeePbl)7)Ya&D-e_>TUWxW(O(lWEumA^hgeIeDFsbPNJ@;y;zD(zWhC95E zprx|oBdZy#Z>%r7{If~qlS(~HCR~g{C6uMYQ0ocQ74ndFHO)5%6hn{68FwRo#WqSh zSQX_5uQ`+|M>OCRFrsEQikM7dkG3(I4wa||O}%n&_hQ@v-KEH?z7Ir_el_Q}Ns|E7 z@%s6Ct4RGKXePZL7h$If+o+o)&3>&yUUxeN2^bF(hC(CCOMWJv@B(Jj7?EE#S62p_ zR5wlLPPisRy{IzfF!gS;oAXBTv&H^1b8zjsdQ07taopQwUSn<{(lutu@zsbL=DpJ* zLW@@*n_Mj{6Kc|$bzIfwL3{$oMYw8Eq7ADrU=0P4m@t{5$|L6Hjp_yoSBRz2-;+hs zv|O7X;K-{#Rt%NNELNx51s$rb2YgYF6rh7V6a2_%uWnR3w>P**BiRuunFc*;niK7^L#W+YiPz1yxK*(FJ!{H2+6Z^Uwcgk}(T z9jr?dJlGB2rsowRbSlaG`Mrk;a`7 zwE+X=+qhO7%tIg*$ZatEo4G|6`-5 zqP}V?1lHC&%(zzKGGE(|B*4bIZy&f`JmB7GnnOY?&9rWBeOuh|{tpZI@9>*B58(L7 z0AXCM%@xTY2fo4h1_kO5HQcMo&qNC-tX3F+B{)n_j~*q-NM7c)*9`wY9H{bGtQVZ} z5=Q~Do4L!KOq%qr%Q|HBjtI(K^143NRW^E+iwU=6eqA%1jC$xrs1qlTj?`Ukjl-<& zf{EKtg5{9xU@_?*MxQ5h-Gv!?NtuO`R!I%%U14@kmRSb_+EtIx;|&`IT_`vAcV3$C zF2-$pajgv|ozk+qi*Xc)(WTZ_>yYlZ0>uV+PN&?>0wJ>< zkuxMnwb}hYSwo6b*DD482MF{3=EE&Y%1D~F-S5^Ys*L+=AKx`MoCZsq(tTFDFC$d2 zu;Z06GH^GOr|Vk;Y;66BEseC1^pQu97BlPYoF)J%p=Ks&B<>~uFFsiIzCwb%WacF7 z=kf`B+mR)$qgfsHOfZGie}l;5dR{xISQwsqd=8{@Mxi!VdYxyu1Ij7Oq-MmVXTUTn zir9YVo>g~ieNnaMER5GIRH}XxF-t0n$m^*a)oK}8L-$9RC%MA?7yGGhWtPnb>icMDgxP_2{hp{LSD z9e^r^R_A9Irs5-L5+gf7nx;e-1~;j|++cMd5DT0QILg}{G!nF<32 zIK`}8P!pGLKR2U}E#!*)Tfx$Vqu8|(^(^mx zjGA_k0($hc1%wNstX1;|_qt3m^^6KDRF?Y&tsP4!*v^27tf?*}y#P*b&4YfH!g6!6 zfdJ|6n627I)Xyhm0~L7-eRC6e3mXd^afZS9+nGnETO1=Kt-l0sE3(Cg**&XW`68&L zDM@I4Oe%qW34*RykBc{|yWHuwb^SFPvD$xx<@rehCEC_=9PxVH!h2($-!eXB+-%+k z1;;ET9v&Sd4)f)qm3oi(YpUOYUxMReQL5r*6;+ zUCvJ8ERc1F<6<=B%;WfBYB$yYB-wbeXU%^67!`(I&5o+<+sj=_JW%zSi&`zG6sn%~ zoUoBL{d|FrlE}CiP&feSx>o`eu>3!EB+jn7A1?&o!`+X$e4tCo>9#9XyI$G|q||K; zOmKzPjXQZOto&wDTP~6Jzpj}XERVR9QH;O4o2Q=_3x|`Wzq{iP zLTyh_lFb;pafTk_{0gO~leul*j0(a?PSQ4E#x!g1)g(;VZGUnW(Kj!81W}2)>M5P}m&h`&bV0b; ztqe@Y*@!v?A1R65A{7Yw2kaaVI7ZSU)UC3)OrF7KT5;b=pT6*yvI-WuxWd@IYnaPp zP3^KH-+o3dDLx18iaBwA1?5q6H4-3S21!3BNiq&5|Kus?`V}x{BP3p z#&4rj+w4Wx`JBh;BFkk^T*q}lU~T^YiUOtxehpX~DxHcK-mc_5$Gl^9tvK)T4lTm? zvx1*|Q3=i4%(eUAcE0e66ESig*>III6<97+P43_RBsR<*|DYJKlBjc~8#l#;iqadQ51O#0kbv;G#Z_8hp)&s}Y6cFXbMc6NW@*HF|m;>m(h z3RJj1@BDGUO9kTdq*f?+%yiY_S(4FykkNf}&m$d(#>`dEY38SQH+GSZ^l*MN$ zOzazDMQ)pPOYoiRlT?OBC{qexQSb{iEi=}SzJz_#Gd0!(25kW!Nd3ibvlGE)<0Jlo z{E5c(+#3S~v~^j%AF;<6f0**@ef_TAt^GCjb-mO{9VK}4VU33@?SZGp9?}A0N3xF- zyD+r{2g?#h(wEn4VB=7~t>l%k&Hd_rG?|d&EY4I7Dhw%>wGtO)jHga3Td>6k^73YI zC}2YyIj>ycRmBE5#AjUI`@S5~G78+sG@{Z|P8|*=?R8+8`5zBDKmp z6`TMC^4gUde%?n34A)b{Nvhsl*}oC|9bDP@!T!mGW`34z_jt%Gmzl&%rhc|{Z#Jsj z7>IS_)vi-Lnb?|tvqZgx#p&3n-0Fmyg?W}9)}{n#U7AIOZ|IG~RT}E47dO1iP z`!#1sGd>iTdfIAhzVV)YwS+y35IQ^3gu#v2(NZK4 z*aXn@ps}uSc9{qspjGB#q53_AzV+fcy7}5^zL{tH+s(K3m|slIC_P%_$9_us%qNeC zv^ps|;TQ0kz?bMS0XX{K*uG&kODXJC)RhPNx-R|oW8*e;sjkS>=6*I7EaZkXXK8~* zH}oyGXl_gwI(n0Tv%RDk&1<)yozLvR)yQ_(Vo6~b8S?}v`@CvoX2g)9?zTakIZ*l-SOPrrQw)K!dyA} z!Qq2~BDXntnRElAU}ZZP=%Q?dwlIugm{|%n19$g*NZZB$)1;t*dogr@rf4-xh9kp# z+sW!KHuiDIL={7|q;7kabjJUSi+76c#fi6gYumPWjbGjF+O}=mwr$(CZQFKtZTJ4q zIl0NreVC_7)=Jj*VP=w9pDbo}qn!9*tna(gVN!L#vv)!i1KAEHpGOIhuQpcT0vkg) zB4*u0(A3BXquq&?yDU+tzJ_Y4`T)6+?_iLy35*mRen3~H7f)b0kyd=L|{pXeMxt<{93EAPeY_8)gP4m5QRhs+9AV|9O%=1lT;@1as>=+2{P&uN4T(>DMeG2CdD=qL1R2o?Hrs z%+axeLZslz61+z@2<0S>YF#;w4SV5IRsjN^M^jO@e*_{bUW>w;)JWHzs|>t$Ev+TC zz6m`FfQ5ODrM;~Y`9(z{70|A4Mees(|E#sS{Lop@jpC6R#e!mL;(jFo2^Fn#g6}&8 zv%_E4R|I^uBjhtw7?{8;(r8LTEQ}_LCLb+R=nzdpJ9k9&o{2=x1zrR_jRM+?HpIe_ zD8J7Qx!S6DLJv(SYmZ_o4q*PkihYTZgua4+b)K_ydU`4`4HqPwQP@-$u%;x=nXY%^ z$}u3ZtCmQds$Z)YO=dkJ!!zOxh#l3CNJ!ua;25d;lR@4WT2!4#XTve|FkEY{m~@gf z-b`*Xv_MUJ+%Meg65hSK%u1MGW)vF77aZuomC}>J-Wi^2Y-!;kDSd~gFMJSjMCI*O z=OZRL;%Mw$%EuRyUEP)3z#>kYvjCOxjL2qrU~J@OQCD= zb*~yFkdF#G@r)NXA}s>?;3s4zPBV0cIJx>WHfq7YD;rtTNpr80dWWIXBbRy?E0%0- zE#R804O>}8k5r=49D8W&78~}37bH9moC7ld!)n^3m|(eFi{PMW%u9{B%(WtQYo$UC zIu=oyCt^BQ;#Lzen^_=um-91-fzKk6a=hEHS*`8tS*4sDDztOBtH)b{$2bUicQt$K zSA8>cYpf742{FK%jX9=5wFvo&jcqmisN_<#LHkq;T0*dSu$*uM#&P}pih9XW*$5gb zIar$K8J!oce2-1h<(})h-~x3T>2Y~Hhk|G|QplQ@*8cW@X5fk|*3-rmvrgda+?oKn zS_$9PmbN~=8R=3|Vmgr^p)Y;rf^yf#oSM+@lE@R43cgp62@%2i&GbYImTKuRm4mqW zJ&ZM%wwVrFLVJF~MF*2{;R-2dwBg|6Mly5OV#)=DtW;g5BAj<^lKdtc#5ft6tVV)V zHu>=#yP~;5!<^+wu!c9IbTFmB9OH46sfj4CeUW&+&g`ULSwNg=DC9S$cfE7I6^Bz& zg&a(*R}31Zhnyvfz(6s}C7DYCute+#Savdsx_dW*sRK9};%YyBE`|F|37brFqc(LZ z&pE+lJ@2f%{_Q%FLC3+qx!Hbge{91-e?DXkCE5&LXI|$m_NWD!i^H@4%B}rcC3NIN zl4txzY8x{H?<9h5P+I#2Zoh$E{9hWen)4ENW8KVk^=|Pg zwW1%x#_2|sI$sX%`29Dk2?~cVq*y8l0c6L`karFV9y(6yLg)-eXc*jhNYqHz31T&d zRP8}Shg`IXYgcH+Y>PhU zO?m7cbB7F$6S}Knsq5NhbNo)9vIZn%oSpcm)9IV6eQte)9}oT6Qm15CuEc;Xo}6jc z0+@mCXfJsWOL4WXfmw@Fgl)k=`4zbUFmB(M+S?rkWHt9i?ewBVZ4D{qZNTEEcUl2nm(P-8b6@6wik~s<%}w)}d2K{Y9^#IiCt_R$_2stV=(62Miz= zr#i_=_0AGYnSUAPvCPxDBZxJ|;6SzTw1D~fNJ)2!88qt*=P&PSZ4Gx{0hYIu7+!~F zG#6y*DGqUOtzkwi>ObqdxDHtkb~P|UoAS{9i%dgQiD&%U#%5CZUWO5eAD@8&0YV%s zT#_q{U1Y46u+TsQb;Z>I<$6tY0(*7Ov1eg2;@l>5(@@Lo1|Fg6dB@EK$zeF~-4sC} zTCeN7kfpe`^z15ptSLG{FP#vap}+5|u`3;lkZPM=xXmnb{PgD$Xr z{CKrt8?ydMDV7n#)!F$+{j=ewp1Aap4n}i1JFSY+W#pOOE<2!+kWv?0`5z!YTAl z(z%+Q+_g&SDE;~^-rh;~3FxhLbOWf|?7qR;(96_0H_+)+B--$DH+FXY`~KC?5U;J_ zmG5Zz^ep@cdIXr8NadebU0;sfIr=7e=*Lg#Ty|CM)!M#~Ry>ddK^{=CpsEv6aMR8o!X1-DAPm<%rqWl>uRR!5##_)(zz`Bx6wmCQ94|9kLMF z866vj6aBw2{XAwk>7P%mW)#wv``Ar*M=PW3vZ=>!INw*x$-B;a_PW!S9w+VcCNDC6 zbk-ZMGTfwu$;RUH(=mHa#ODb;;l~$EzI~(!csk28;I;Wwyu(G|jCxy`o^m$Qd74_YRFcZ#_h`FBZ^`}J5r9-I~g<6)x|Lf)iM zl!|>Ear6IQv;eF5QCgu$)~aA&H|1eo7i$CHPzi^svE!mOrRs*-JfrTO zbtw1syjbq^dW?E@qv=-N%FjgnTu~=%!3cclTwL>KtF(le})V5ZW^Ij~H`0wjHo9Pacz$e~K&l+*8`tXm@I7vdrPMt)?zw~-mbb9 zdH?;+ui?<&@HIUj?fm{|*Bz}^r@|6m<#+-2WidA1(raJw+Ar1=@Mx;oCCY%3PS+hN zvLfaA-FSF6w6x#K`sd-lLAnC~>tm+tg(i+~_x){oV>4l|wFH56cs!fL zr8YrpRzD!oHMpfn+};9&&etSb+M0A#*3fiT`~bY!>@d-$39D&!Gjd27nOXT(o2gt{ zSlB~SoAjEaLc4rEH!gmJXh}HefS$&O|}Q^FzVV~)w3kQt9YII zZVCtoEp`qH__fsWV(?V-x+d_3Ek{h6#CBNp-W$a7{o7H5A-AUQGJ=cNf+9f{S_bJ1 z#PcSJjd5#sXBk$yF@00bT>zVSt5(V8=&Q3g;MHCgWy0|Gdc;xh!=vV(GJ+ECEW0Q#G!I`3k)@s3#$)>6y&CwU5a|alr*8QsbAb4+Nmf|h21JV*GMT2$U@&cp{%V@(>awhC^TQ< zp$X-(T6IZ_XmjpT)V}fFWIJ2-dbQv9Z|!)!@?8u9 z7EDknsy0SRbEqenbCejLbRD}H_?53r_pP-LKas@U#}TaC0v4H7N1w< zLV_A*Jf#Fl5qG@ZtePQKMvy{(A7U1?BWR3Rv8#w;oPmkfn5I(B))#A5Ccm^Z=yvqi z(lFGf+*F}w@g&5H&t)Eb8#?SgzBtB>$`0i8cHyOr#<=PXZp!PRg8yh(*%6h?fNxYH zqB{hRXLce+HJ}iaCxI0I@uFU?Q;G%3QIYHiu3cN0+ML#m8<0!N6ALYcY!4^OoRXY+ zoPL@g)ZEgGUK0`9NAj08G9Sm9+SNp>%QJn=Ais~!4lf$a%6M=_inIgz)ts%nDa8r zj(jg{CKiqo?a!1ftXw^1#l_i~DdQ?pk9Q zSN(Fw70occg;kFM8PD;!EAGiN>N2@r^9^9{uIFD|1xdCLy_K-D$SE$3Ao56Q5K8<^ z3Y?Sd4<3i`WAEI4G&R4%9GPEyRT<(%a}q>R)W1qwMGvjoh?x1!BuUttQQYnU1FZog z4$=mJs7u0Gb1CggkR@VGBSJ>ZjPRAR&8;8pfXvaF7?PL$J4hcut$#4MBg<^?rs9)j zRfZ~6?o9Sc1EG+n(QXq=n;vmZ;n|w3b98Q{Jv9FJDm&%LMO%<(Vh00xOLT?c$I=uJ zXUR*C2scXg>a*@Cpc>)Hct3y@uBim|?z_t8Zs#lNZefMzT&?Nu%7hY3(Gn-`96 zJmLDs`Q@4CsEF$Djd6i9{?Y-7K)(m-2ul>fFkl)!K?H4Zoz$z^Q|56~2Hn@_j&XWA zH-Mk&I$&m_p~#oKgy&l3-Vr7fe0RrdUGL-V*Fl8UyWWrxVi{Wdneofp)o)vrmKr!Q zAM7r#$$MF^sj;&eMT@0{fJZ3|VHgeVCCn}rK>&Tt)5{)eZI_)I#N$lFr^Ujrt>Wim zgs29T$yg6eu}|#>i-~7P0&e-2?5kcmWl(+8eqPw%4wN$iV1oX1kfl=WF6k5KZpGcw!d)N0ZXoBfO-jGHHKXeaw8=Nrac|fnP8}g@| z!(EaQu@bF8Zk5jc^RQuPApyTr&7T8}N(VcX|If=%&Y!XH728cs18{fG`}4npMC&@T zLrWE;cR_}1bhH)*%7Q`C=YNduhU+^tIV9X4&IN)4^e}np*;?8jO(d2iziO1BQ=iLy87Kr*s zLd1kS*E$=4jIA`p_I1mXO#YnnWLV<=gLuTvP*+O2G^L?$#l;G4z!Mj+9-?rcG z62HUgyVEJNyO{w7^yo|r6*MlnzE|i~i;K%#eM%_{R*DAD8loxoFoPqg1=_Nz@VM{a;==UxtTm&sp z2uZGg9T3kz9oD#@ui4r!Dc_zv150hIQos1=b8DS`yRBaJm-ZDRxK6I>^cA()FKYlh zK*Yaq=;vNerd84)&H_`xSmq9R9;zq7f_g$ORP47gXh3{v+#J^mAr;K6Omx5J0cH^< zVL9c#&O1~$n+HOgmz|?KzX-w*F`W05?Vr2nile*7iHWmyDiQ3j%yz-?_gb&duldzgS z1yRpnEV~zB5}BeWC*EPwwr4`6A>N$wizUXri<-_V1;M9#cX{$I%n;5v|61i9ILa?g zGNY8)fMrNzHwj-NW}9Oxbji6;`>oEF27%`wTanFjCn57Fles6v0`ZR2>xQzW-`Zz# zu!n#tXsVmX)cmunbGEvgbyq_Ml$c)@svho+gOa8_jw7=S?_ym(^P-_9ytl=teGLUI z-MG0f!uEHB(6BxpFVtOLx90Hs3!OmHzzSPO?mFh*w4&lMn7bY)O4Sfda3z!>0+Osh z40XwMX{u+K{HU5lzU#{;n>vAeyne^vf=-NnHrdnaf{k`8XdN|kVm zVp^NO;yy+_Ry|5ZEf;E!FN~zRb!$j%DByK4)~d0Ka8Zjw2|xW2*OWvgvdL0mcR^JO z^Vj36q88CGt_|=IjF&wdbZx_{kK5ZZWHMXf8uQsM*Ronqg`)Xog(*qp^=q`GtJeQP z`^8~(ABMMSZ6HxFdOr2=@N;Z*=kHyzC8}CpU3facr*9I^Kfu3f2&aFYxT*gL;-)RU zAiJsa)-&9)@_`}!w09lrqey5arVi``{=_;DRb%M$B!Q0|$yZyuKshl_rTej1Q};_~e@4quKcOV4s=_j>0Z&C(}1w#9Kzu)Rc|$(3=w6@!U>VvldlqFv1qY z%un@8MCpmxfNuT zsbr_eWkWLULp)*+-PzNJHNsxa&_rs{w*>D{rfVm`V)D)xqAvKH~WW{wsrK5{lX z76vx(+FSpc(U6commzkYdTv@@4*|<8?_8ilpr9Dt%D^DXE<%AA(P%)y^RUnxRuD~wa3FC^>In;bwo&%-I(OzX z(!@JThfCHJGrE%s_1;aiaZE+fb6lrW4QvG^8F6~g)5}(KaR*+xCjaxVOTP&FhR=&d zEo-2p$5gCP=l+9!$H-59w2Pic{xu_+~Nr7Q0271Ih9g@o+-Rr4IE zrQl%3shT1JIjcP8g;}BT5642P&Qe{8EqFM`3{!jCmWsZ@UeB99f(I|7I~5qYFl_qzu*qQ%CW9x%;WMA~ANH*Suhtc^?uejn4o| z3g%O5lUV=(C--Tu8z2ofyx4LYycF4>pkO!KrLDY}1hqE@eo0=-yAwEXEHMmiPKVsN z#{l6c*O094Yz8#A!6Am}#uV|Zfik8K34}tWQk^Pct|)wXps)3#UYk8BdP)p5yra03 z7_OqOo$6FYnI;0fM?53{KMj-5i8fS+UmmGU4d!&bq;bs9xnhKK4G)`&HwZHTV~rYD zYHtk+JpCfB?GylZB~OJFza9P`BuP#Bbt~NeAPTw=1{u+WUcE!eLuG?OU=Le}$khD{ zxM8kEdMq=AB{moPD2X7tJ?`!;Y&M{bKqI!?6>To4g|FPwr&8>VzFJDAL(=uRMou*G z)~LEKImd^v9f(%?lT;IE;8^M}Qchtq;ZrKBEdmh9$D8G-EfMT@`B+=ZX~D5@1sG(- zzJ|@YodfpQCGNxCa87W^N;WgSmz#-diEFamv&O;*B@tmPPt)^_iPwt=o3w#| zEEn4-fcZR{c@!Xub*JA?%lVPvTY(k!Ni2&G5Y_rO0I=T7kAkM&%zHKq$0-y`=4ewU z`v+@(d#&Tl`^;g^=Php!&ga|e6C*C^%|4s#Il0hAI`N+s?ERxUDxYlQR%M|^5?M+5 zVkeE9Mkm3X_@*mfr3s7Z9c64vWvxx{key4k_`lNHQ(6sWW{sVCLozEMaHgE4#MDA7 zrp6NWtU?Qk)a(Sde+&El!khCfWL1)?n(WNO1duFRS)HNE%DW1K3kGEh>><_0HhhYP zMzS)pO0-e{y0);2ZA7QeyMsjS7XOr(krS~#S9&?|4tuT0Oi4*mnw!SlCCAe2$h74! zo56n%rOt8~%$|~}JJ_r7v2`2G$JOTJxRDmvTO$7*8?GZ2Pp%A54A`aC!{G@_tQ+o6 z3&sQm34aBJ)YGIlNE2vHQk$5cV8R6S?m0S|yPqTtEtnddsgd(~8acYSurcV~dqql- zV1fBXthoOO{T9&y+jl_v60q9)AW1fWWQdT{1=1LU z;)y6KH=zaLgIBqcJAsh~e6<_*Z>~cs(Os=&L2NLrwOrGjb7OLijt3TJ&Ijyjr|WbJ z!a7@%$7{?oos$?~bs9KL5v;oKipaxUVxTKEuk^43#3Y-49O@NZ2TB=7zmK95QnF2{ zu`_~@9f+b*4NtF?*$heIazxH0>mOrlXQOnVI}|$V(mdTx2*TFG5S;NGxZFRQ7y$S+ z4djLlZ7#f|b5$VBT~*U7Z7iP9ke$l?B2S~ zb#{muV-MdTUB+IrYkTK;aa`}P*L~)Tf`mW<&5DHygU^BAfT0)sBfw?a+`*@v?vlVW z8Nbk0YGl+MY4Btrpt`h{CIk-#E-Cq5-gMj9gkN1nUg~{Y+r{A;6NFsAbNhCdXK)Zj zaIJfFh<5F=_|TY+tC2Sn;bx*6*%4g;NJ7Y2y3x4<}{Fa8nbEq3r9SBfFfmWg+eANEMjDZ=PYhV`M)L z3(X*2m4G5tsHw%yPf#~((nDbGl;9FxVoNzt-c*{KV^y!vfvWirpA5vb_?05az1hFc ztUG6nz^B-j6HB!xgjdG!!FnJTwI#L zTKtw5Ms_c}?<;%w|7>-sCXl{WsCIF6YP+6ZJH-t9Kqu(699Ls6tntGtaanVY5n~Bl zGdG^7-eqF*c($9BX_rQbxsRAyfW_%ce%9Lt^I?kxs0S7hJ-U?4R?N)z1NS zvw-EdFTo{doKYw=y0x7hkAulf;71SwldG_Z!Z@YjWM;WKK=J-TmTpdTfB!gyIgWmp zmTf`v6&^33r$I7@MR?N{OkoOBR2$YIC^s}?kn1iCMi%=AF8g+{Gh4l0=3ZY(Do0^9 zX*%XM3MqZ!2KaWNM&H|1CNh`{RKi?8K+{LaWw@-@mQK*>9Y-oy2j9^<%!#lGkq=08 zzhcILP5QD0?XVH(;D}$_Z{G>Mr$bOPtp>{9vyVi3=!%cWlNp{A*KY}nG9;7v2hl-l zXLlh=1L1f?T#iBNo*z9>gVrh0_rv8WqTyH)t(Z1*a44FTW@o*8Nkrk`q) z@74WD3BLtWL$z9~OE@W!g7!0d*G~r#aENOr{h>>tL^_ip9*>!%#-Mf|YM009nBqft5MS5piq3{`(p;B2^tSeaU<-L>j7BN&^Y)w zP%WjD%`4nzh!lWW?*)WxvKX>j<}aK z+nL%9keK|NkJWI^DioVapg%CEQyP#xO4^d`sfho#QZc`!h{iIvQsKw0^6+EP+t9$l zLd?ef07_Z1w>*WpJIKTxS8EQz*GQW9sia9C6f}gmN{#Gu%9$ z^t-k&s+m-t8-rGbSiTxt93v|uOoeK6H8y7lk7!3S=YjgW=lN@qcm1UMgLc8EJ1Se( ztCcY{d)gg$7je>BcBh7lgkVIxQW>m^6XmnZkAQ5Pz{woh$8Cz~7*wi4Tx4p~9327P3w=Wj(3~nr1G}8)N9Fu!wK2>K(tzM=2hqg!R_N{r6 zo3Oh1(j?cK<7?O4 zOR^&dU9Ncjp2oQaG*FPv^*iaY|6Hz=7ttFTn7x~;8=U{9?i+6Gy3V@Up= z8YJ$9p&Y5y^Jo}j168gn6vt|J%VYNAPbn65YBc;3X^j(4)ubkv1+@7r$qTZ|-?+W- z=te6aehXPijb`%TA!g@#55OKjvi#@!k8SJr+T2g^FF%N8pNq49`=yg+$e$00_LEWa zF7cwPlU~&76z_Rmz&4VyPms>Vt&z=`=wtf@fZT_Gqc?lrq4pMJ9HP-(Ye-(Pxh8Bo`E*TV_1AI8Pd11 zj7QBV*hKge2g%6y%Zg?83s}r^!y0zl0!hkUx=6`(1%=Qa`r*!%R73rVOk-$t!N&;u zm%#Rt^05iA;!3Ol&K9^_)DvS1k40vTpw0#{r35g$$A!~sO}|ZX96k=AcEUycRhsAa z%;K%KGqQ^d)v{1cL4&V@YYgoLwuq3hYnnIzcf=nnEaXy|dz{7o;+>NKvqKpe661=ulEX~SdQ@(mm0ke?{k~#K30`Vn9|L3h|;b$I7 zh1`aeazNK5kz?79X_7(b#>n46^_2v3r)+OZX}}5GrVKn@O}gXup#kj$th7aDgzR6W z$P??v`mA}P1+~Nv#o%H@#?(XG6+0STiCqRr2k}s`BMfEQI9Dwd<1FrJG0z7A>tmKf z(y?^CK%;(P53-d~<9vxzz0~2}TB;hR-KdNeZX)=N5`m&tr-NAiMv$Kc^ewqPT6oR2 zSYf`oF-{}B(kTPGe}2VTfU7E`9f?*isB>;hfHVf&R;Y2b|G55y#)dzMT%e9WA8Zk+ z0*M7RA2_q7w@O%T+Ux*~1wVa1@DG|R%)qf_FaAqOt5#MdsmXf>(dwu@(PtTpkOLVJ z6%It|I8|NjhXf}y+6!zGq8uVSVp`+y$LL4w-S3V;U-kaJXwlVjIu9fS5jM&d4M&!l}7-{%6F=PmlI%Gz0Z2=Fw*)a*x}uRsAjNaqM$a z;X&BzW$97M+Sf3GH`Cnbz&F~u$xaq7?jX#Jy1C^B9n6hW37prEB})1!=2NT~Zaw&l z3GTDLAj0=0DB|EU@##0W-M-kHf1s4I&ut#QFB#wWz9g_WIAa#$a+swX#H|&x+M_qd z=V)X?-%!-aU>xd}U(liLIOFgc_PaZHvh+&eko@Hcb`W7$HWe8Z0Hb1|gP9G&rH0rX-yR;wD zz8dm;DXq5lgGNu;j!^;Gc$uT}I$o~1Iy@r6g!hy{=jdYZU z2lAsJ9E@3&$#)S_JdrzO<*?M^if?I^&YNB4)wHHIsLS?6w)(OU$qQ8A=^)3)+%@f( z@qH~kcZF_&>lnTC!>*>%>B`Q{*b+1e_q(IM;A3tb2BDU~&1#3`N$+Jj_X4sj1LWRt zi^^%a1{;d7b>HPQ=GM=veH90gZ#iF?JVmX+8==@!Uhxpnzv|&yg1&=Wg&b^TBdmhM z_%?%)5@|T|4k;w8J;(qu#(*_WE8l7RV`q!@>j8*+0g5hE7)&+u^qv}b(Bsbes?}Z$XQ|-Ltb;k}N)@OW~c=Ddggl^R~x0T^hOn2{3vI za84a#*=|ihZf*d|8a0?mpl|Z3CrUa!=*NCdfpE^Sk}pBC))d{dfw_Q2es^JZVd`N) z(71q_JxsnJ$j?rf2KL+0uoNY&J$H+l%O7pjw=w_NQLB&8Y zmvDg(K(hUz{!=0b+Wk#}NrI^#21Uzi5AdiSF5t4$R{=Ji)*a%XyZ8vkp( zc7WY>4%0HI;GX?S-=uCEcxucyTJbDW5kXCkT|xamG2;0ya`6E!@~%-aK|b>Fe=YA1 zi3sY8ijNnQ3XzeFcaK)ii2nhIX~X>0S4mV)&eb$5iC0im)Gt9?$q%#EH|_Pc%;gh~ z>*ZaiLPJGy0`vdSc}S9SQhJm`k@5#v+nQCIWmCPIv!FUrvjeHY@=zRrWUVv1XLpUc z#94u|CylcKP?NN_4_}mIBZ67x%(rNwM(QV{S9S|-rllHj|>Uynz2zD>0ZH$YwJc2W!oBO1!{1f;xn z1#eJbe|F(v*kwjMr*_izOo|C6N(R9*4d;IYJeM6A$z$IE*PPk(YzH4>qM2HPK$@tu5ij=f{ z{y^e`-TqnZ)^>2oYY^pBx?Jzt-DEJb`;Y_5HSxlS{YC+pVi zO{E!3+*)mtq7AludvODmz5H9hi&CZEhutborZbHu-RJEoY3J7^3R91J_N9CM%64}Z zyZx5Zw`ZNm+;sY{Q{Fur7OT!60K0X*$7#+bwoCO)6Zg`wQv5XRYE!@&e%tn#DM*~V zDg4@<%&FQ8#A#;R7frgLYGt7AgUqXlYI)`rxT#0JS1;!u(eTk2(VDf4Tbx!kc5kTL zp7Pp~t9nf9F+XC>WPxZ^d`1?#RjQ2X^ii_QPU(KjcSG_znm+>{xl>sbQYv&?!?p2$ zPqRdgT5Ub&#GEiH)z6w$*fl0HY&um-E}PCI=bF@fKeza=d{5dK`ld&#GbbKG&#+tg z0Kq$s+Z4F14R=7nWWwbQ22HWVT2?ajW5E{y+PNZ~k$sgVwkR3Zfc9Q!tTLVI@r=`{ z>U5uJw|p!afK?{}7l+7Ry|s8$3$C}!@V_M*UbD?Sc5Nb{fChpxV*}F3>Z|0yP>WAI zN&2X<+@Tl!VBy{^%6p!?a%)2`x-39k1O-Ai>f1CM?_P^!GqI08%?haE%?$yn(2k}0 zj)pl9LaNxmu+i81mX`(y*N0gTl z&|ub3@R1{wDRf7I=^z1rl+}6gs5xFe7o1L>=7In#BTfIH6@fgSusKen)Gu>9&EICF zI_}3}b@DNKEp23nOGYW+8qtLer4$gH2y~~bciX!Z;jC?&he`-xDwG>!&vXKHRE2SH zrl7(zAyiuH;p(FY39plD%TxQ%6Q`h%ieqC4(;yk?(-+gF3|1+!M|ZiWh6-x~j<&M? zex?jOhAX2EfmFP`G10~&3qhX8v4{z2zB$JvT5bSS=1lRYx+@P`CuI&kp&{rwXYQZ+ zg)8+|e*;)f)&At2fkx~n++iZ4jEQANQ8@%-v8E6oA8SS}tTF{iChJ5QGD_Hu<=lm1 zvaEF$&V(tm`e4?Nn6uHQqoAa8YL--NhVJkT0i%o_cZ2tX<8!J!`VL5D=?At_N7PS> zCZQp4KsK(7*uZ4L+!u8M7U1C(Gsac+%pZaI@jY`l{R>s){A>}dlK5DZ?ZE{99@T;wC9EAQ+3 z8~=#>EzpCb=VF!#h3L>4oV9el?Up|Vn-M=c(Ho*eS7z8ZwD*D>!gA2@r&T(WXawQ@s2C0Vj1C~PoVSV1Q_BcK{d$lf{0*>O zEDG!g&ijA%8PA;ubpbe`|3t)~dK=9Tfex4ZF$aEz3Q@f4OF4dw4c{kdxgP<**6lF; z5^GeNbAMKnh|qz&d)-#{3#FfU*-^TZN1}sQ2juGpU|<72pu0EI z*b$rUTI-tC*kA4FTkV?H=CO=c`IyM%!1&NdUM6O~ zudS}DuGuWXrhIvPpeTSf_^s;nv#nTR*jnrU#GuT*P)j?)!fKcdPcUlQQ9{$^Im2JA znF~i#4%qlbI@CT~+#sH*!m$OgB4#F(G*|LRj?^Aqy1G1wIc!> zCIXp7QP3>=tI&`Uj37sf29pGZDrt(1kQ1v3=TwQS+d}W*j4(LRPd}hUsv0B(Q54L$ z6F&7vI?Qm;#_v7AT-Z8X(Tb@QB2+@mx(tsY)qzzr80*8I^Hpvm*q6(QI`8_$zVB*~fxwX9tvYA+m%uC4eaJ##b`j3y_^2lfl% zR;r$OznVsmY$!6`)?4gW0M!B018v43TFa~eK$pQ19IncUYsP*fP>WSJT@S<&Ni>Gj zG&7%4SqKxq;j+!ohh-xE6r@cdlH3p>4Vxa(fzT%K{hg0q_?#z&Y>X! zwo&^h1rhl)lYdu8)tthE%F%nm_G zSg#k3+%D=^P;T^>2zeL_R^Q!b#FaJmI{8LK3ReHNrp+SUWvPun?iG`v<wvDYy4krTTW+)K(VZVwU;oYhQLmN(AX2b-oej)88d zo~T?hhIh95f$_eCxOH+>yMQ#NeyN8xl4#?XNDe%!;^?5at(k7aS=Z1xSSnQz#l4wv zmT19GuhfO)45ppyUieB09RaePR>xm34eBa=5G#kvEOL*80eiA2B@Na4EAgZ zL8ri&>RjqwEsYEf0yt$r)Hd9pJPgA)CURLJUkkWn{VZI$q90NK$*xY{sd@VGdq+fr z_@ipTKsb}owBSd##6W5Vgx34UZuy{aWrIsbSU_bsGwaz6(P$ARV9eU^pF;pf9E{2# z(a=2?>Vi8W0t;SfuKhL@w?U?%!4J4`*K)6lb%9ySq5SSu7Ap2=0X7 z4#7RRyE_B|!GZ?2#ogT(m*50M2c>fWmTu~j?U-P1Gk^wZt%Tca{H z&Ym`bX^iFhc1~;lRAw=dLF33K0=7|^sE$tdtNKFaM=_Ehb5^NWTPuzMPu1l*!PUb; z0?H;t4r$NBg=8d^3uaS;%ZPZrDdwM1G1p|DV%HNw9X`TLtRutuFA6o@<)Hm=;U40S zBQc>WMK(2=Ej{@jQrP19ov432YSYaHdwH}*k3~XB zwlc3L!TymSaX8RwOJ5}HDga}Xbfo+`AK51YIg`M0#rX!>SypiQkfJVW)SLxvQ{1dn z&T_ig_dQ`uCfBPTqNyqS+E$#UzK0@{55g9mHdoCm3J~lx8DrgSr@5V)#?vIRO`W~A z+Vw#mo%Sy^)cjN{YwaPK-Lve)53~ENlu-bz@-*kkbK-WyoOvI*2-+n69)Sdb&6rUu z51+#OW+#K)m$$jby%Qm2=~=tfC=SuEq3BF;7h}^`rH*exr{HorU)+7a4&7Q|IvL}q z3~ocsxMHi2GrMADfq%3(?7ra0~Mfi>MU930s~H zKBybUF2^7W`rw|Rai^dRV2QcExg5nvLfm>e;g6lsou3VLFMz&lgt`|)o4=~_J>%o? zI?i98U6PL&kQ+GQzx_doK~9sJd%!(_z%_u!CAB8{#$puty~&-Pl=25%+T$lUKzeer zX%~@?#jI>U{Zlx9qw{v(a?e;aWrvDb0DTsvjd2ZvMbW+}V0k`lf~_p_&bhX{zt;Yn+@S{KTaB$`qZI?$F$)r|Ljo7E6al**j z$*;3X^kg!%*3xIq)*(B=>WpUJNa{X&`MmJ(s2rI!hN*x}8XhRuu=;M~0%c#o$`I~M zrdN3afK`DsSS!C!Z%FWpv~5-Ao*s*w`DxO2ThKU9WmXvewSW1?LxCDgb(?cP6IA(V zJ_S`_?=e7ni=H^`^``&W^vu1FI!Zy(y1K;02`;A{PJw<-?bv{bIg&<>MbKoUP>hAh z`*h^wCr>Rt==gxi7cj#jbz}Q+lm=-m)L&~x_%Pf_2HHtBVUaejAR#yC5aR&%s|{b>fj*_IO~pPh4Ln7 z>Aou^P;MdP%MnvxN!EVI=_R-^A1p6=s*k>PcJySQ*tB7@}+wngx|6 zE!rb2YSA{PeXakoe`+3Xz^zRErWv-%K{}1R1*1`aveWB;MO*Il_P{+iSs6#aW4mxU z(P@YGqNFg4+;CN`FX=s7cxmf|Z~JafPc+niz|VC7DWFYLzPI01ZK+mi3BEQBy2S9> zGNEo0W^Wgs@+r%%ZLH87(V>{)rx|IwTpRyOw@@1y$usUZsO=dugKFvp{}- z^14GucY)xQ{QGLIKu_29-o@~4@|T$UtJP#?8O{;--!Av`Hays=mU}2)U8n#cSW(mQ zaQseta1b`xr-sP=3gs3rtOLZZjJhM#Y;QwzMMsi~@;(|TfXF^jJl|Gy4K2!drM;b1 zpq=ArFYJiRZJ>6X64!erpq!5@nYCk1KrY&R9HdItjbB_NmrN3{Q%vQLJWIQ0d*qNB z&$En#QP9s|k;R7Y5MU#t)Jq#_lYPJSl%_aKlBN>9wOZW5*fB^Y{9a1!;ojQmZS%3@ zexwFvjjQ}D)uhC{`9qtanvlYDX(XO(W)JNfN*@#R6Ax?E@1H(S51ng}_25jZmA-ZR zp<572lcP&jwNo3!GR7Ayi{i6rzW80sWbfenOhNHiCYnm*S(4=(7mJu^vF-@shV|tw zc?6%bBO50v;j|U64;|H}SLxP#Vq}$eI&~hiol`Mh)KMS!tA%5G3GQ?jG|As~e3C*E zQleOy0xL$9XUl$SF0Bv3^2W$m`GgOod0K_>bi`gyi8b`CTcbWXAz&aF=(i)`Mq}yE z5#jljaxOmxPQ9m5$Bf;e%&Wj$G&7$;9EaP1F0F}>xlltenSGvAmd*|B-GHYKTzjfN z-agxNYzb>-{8vU{khGR7xk>(`HLAu!y&$GqO=28ATE-o}nC&&p8)tBz#k7(zm!aQ? zY$6}GVQ>mUuC)H1uGmiJW*$Sh)5ClWH9(G4oAvuPs0=W#sp+m?mUJzfT9Qg85r?fJGDLhUKj5w>mh%=CJun zcH*Zj8z)pUjY8`c1$^Bvr$QGt{0sQ481x5IWoQXRN_(76%xsl+Fd1MO`A}z%*ORWR zL=j#tXbj5um$+lPjLItAz-G*u7)?1&-3MB+N*9%T@=?Ls$gmgsPt(^;b4iJk^1UhT ze9}9hZsa%ax5ArQpygLnWi<6|M=@pe9G`JsKf-RT^fJqJI)1PUW%1_(IG zmim4Tfqik8?H{+!pvJ#&2@EP~nT}vz%Z|4u+zUDhz9g3h=xjyPK zPyW0n&dXTMkR`<`(4>td=Gp98p=2zwqWCqZCqn6HEd1&NrEKxGHhKLviLIxvmrkb! zwRBWHS|q+_Lea65x|Ot8(OgJ zWVV;fDPbgHV8{tK8G!coL@VS_XmP*K~@EM$fFC1*#AN>zM{K#cc zMhEVnU9on=cEpN8Ah^A*h&p-a4P*MZ?TmY;43(kEj{?vZpdaX&Gsfx;%!hv~wgrM0 zEWQnRkA~l8ivVq&GGyl5Y-vtHeStP4d_rQ8P@mPmcDKGv^{DCAXjBu2x=30MS6xd6AU6DW#|oU2aG9{`Nim%uJ#BFx z-`A~+UHnYL=EbGFp2;$K>qT3L6R>;w3%<@iUSxZFI<4m(O=~$rR3nEVzpe&cI>MZ;^8n`T8zNMY{heIoa z`_h2TV^ryFn3M*~N9mk^p1)h11d?t|C`fCn+=4%5bhz@g5OCmwAzxuGz%Jx;ufy>w zk~#A$dJzI49n<`pHjq_VrjNaNI!hplKj-vI%m^%a@Hzk8rT6kMS{iUS?I1Th{8ePi z&(Xk04DugL<2R-*DKgRRme_*e9*I*7#cGLyZg6rlnejvy8Tpv63AQHKIvST|OPj4P zM}00ej2k-r5hLdl@f${T#6auMtjNCUHLl<`& z9&VR3hc=8Ac&IBzcJR=4I#0R$O?Y_2Wu`z=^K7{-cW2*^=IC?=*!}GQS^O`I+jO7N z(!O-+$r2wMQkF>@vXu3qyFX1odB18a3lEGWbGW4U07B}7F4>~GM}h|MWpt#(@6uMk zlW){mLq;~k=^LuLe82e}yCiCLmG{B%z_2zWDL-J&A%;qlXP{9|74bMGLx86|-LJ=-Eg4+LBkxGuhI3viyTR5AsA&oOif{aAsck;1d4N7y{UzRksC z5QS#yfd18s;UzNfOy$Frc9qSmeKh~1`sf5)1PD??xW2kio1UKhCp7CXhKA!<0=}c+ z0+GT2?#bf)JSbWaWVtV^l8bBv*mOeDoP|Ux#ux!$eZBG3H*IHTf?Of9OyUFkO;z0V z`6wWxA9Q`+g}0*9meuDL<#-hZOU;ZiCmSZyS-;M#vU^6&{jPg7^;Srq}Q>^ zR8$UKa{~`(ad14>vT(VcU=7=o*Gh%%>zZjzvo`0O+Nq|aev^$?tEw*^S#3{6xgWQ5 z$q}o{|$iu<(F4f-TlDM=0l$8~05x+NWfLuWFkEMT?Y zoVQCSLVSS+V3+96P52>Q=RZ2swnp+sjt>N^1tC|!kKmEdXNcSs=qW*~s2)$UV5Wjj z*@}OQoscn59C%Eq?d3@|*%%Y`Xs9DyrT2^tG8Ezl!;Ad^I@|M<^UiI9Fn1_!>$E*% z1_?R<0|DY;sv@nxeH3||!&^Y<->992HYyePz&vr-n?;<32tB3AB)fRj?2H}BM^rcJ z#;wmohiXTwSEVR->H)!p$pj}Ji{57{n+1O*IFA?=yLA3a7{T^S0Zjyj`Z7rWzrdxo zoV)og-A20pn~J?~4*!j~sb+;=-~y;ZyIBH3XLVdsW``P*9fdhV#JdVbntx=`+4RWi ze4wb^<(@C)F6L}V?gjw5Yf#=Sff)W78)$Kp>mg;E*sOsSon84>%E?hSp>cZ61{Vgf zsfEhB$pj5j{|N~#wi5#QJ+W=0qCOPL-g#Mlg!vA9y`Qk~pUaxT`B0csUcy8|w4Oe> zA#yjBB+Ef`+WM&Hs_$KB00?^V5uw(ntG9#yqaQ4tGztzO)_XCW!<7@a1KyE?g)bv% zpNLyfT7v!U8JhhP?ciH2zxR(C(P06PO03ZlhfHdb)P_eX&@zdnm;CH+vy2a&E?;}1 zY_4VM-S_%Kz6S3e!;o~T`bgaFjWGeD-=MXcn;yz!g{EU~GRHN?M1J>}ag-c9;J_W( zK-;UY>U=+dl>0#15UdL^=0S66My^?6&_W86BF|u;tV!Z=OohBS_4vLXC*_@lra$Uv z{0Ijh+O+W#>ViI=7dj14wu#DqsZllsa^+ZF{{aVc%S#E(+!b56Oa>5!Kj6R+*<-}% zeu}rsn0Y_U?b$QN9_wpeeD(8N2#{~q>jNr%wn0f5PgB4y*N?UIsQm2`B8+=JRInVcO{8VaDxfuq}n348nn z$PMWF`+Q06o_~FnQ4tbvG3YO-?1`3B#4?tCiQ^suBEFKNpWKRy& zUk6E6m5^!~6ovP1RwM-i1JubDyJKRWq#0dI&YCS1E?7QMh3bM&L272S3;3!5FK)Il7^f7a|QnsYdTx2BmsGp48+a=43-*Pg^HEs!RBcJ%u9C<+b!y4=wY-A<)x6Y-PQCVg z)>>Io1Nj=KWBhCL86*eTX8VDeFGml0LK`d%rYqQ z)ju=qO_zb}XrJIRSQ*x7RlI3!r+y`LzW2w>006XzWe`OE-;N6ag3as}sW?6&O-yNz z_0(yg7o6s1u0oT5`JezxK(xPy8uasG!T)))LBhku$|Yz44R1Y^b$3H|w)vZO@zii#x0mPVEe>gQdkG6c6B|KK1tjrx#gH!UFN!*i z)|z#y6Gl#7o117L=WR-HO1L?=zF_j9ItSwzRo?7-9{qrOaNkgv9NRuSGXUh@J*xq&u-kcHr5vz+^)br|veNFTfCuShQ zpBE>bJe0D{ROm%$Sl?I%?2@VEs}feHb%gefNDW9c(o6n)?-+*Q{Eht9@g{YRRC8>e z49$0=9~WGk5p;tU&CywdWbn}NZP(;CY__J&MfVe%LrvxHZ^sFq)BL>69$QNCZ3sSc zyo6}Z-KgSQmak2F(wo8b)E4C=g4Tnts{xwt>~3g=zLjg8ZZ5hvEa`6hR6q#{iS#7f z^b<5--^NkYI}7H--G)qjp-hz9(RQ~?s~goXs47{xZNBvB$}$M-cUz7` zg|S>BHYW|tq-r`pd#A*!10lRWZ&Q%DDJgKh8TR6>x&yBU#Wv}}-TZLx3@V}E<0LVl zyitrGBs$XBOw*E>k+PXGXLL*>56NO8ui+rTZ`SKxXQ+Ad&{(^$uN~cecICdc|E0W^ zKoIBUZPN?Ovu}G%lUeh`d!gJ*xC{h1v75l4PgzRhm(0>@ZuuCsOEH#Ojib$V#23@# za*ejAtoa468PN^GuT~|Op=?5F#;hiTVr=}L=V~K6q`_I2-8X4m(~U0HiJu`QIQk?3T1*LE#^XlVbsWNmeVCAOtD?IlL@8efVRZJj8e2gPRNQVz!^U1$=g^~hA=ZouY@W^S1a~= zZH0k=!%T~q&CLrdQ{N7DKdG-=GtadIt2^KRz;wVWdxKyd^wcj#veg@~Ip)(PWWF9d zHcF%GQ+dlsQ{mGbV#0!W6qAjcGg!rK&r`&!=-q>>A$%}Mg`>ZZ`V4+jW8fpTl7EIs z7*^H_)!4kl(S7oF;Ypl_%+0_ovv(>rtZVA=ons<`c>xRN=mraL7@rFd#S;0|v;2UdAblrBsCvB9n~26FMq+qL>BJtEZ(1Ag)8 zC7V-PjLgRB^~*|$rNRB-QMu^6xM&W>#u68h7Bh{xfvJVx2>HaK7xOZK>N9;aqu4c3 z=n|Z*h;vU2&aigMHmG{@u zujT_x4F)%e^Q5E!yXk18%OG!yzn)D+p};)PCuZkZX&L5ih%SqtE1J;R;E{4Zd74)k z3fSjC9a#P;`R~EFciLs5^Z`0yHAMq%$2)|qoME=sI-Rd$F#$ufD6%UE%ZFkvDfI1? zm_7m+aHDgf_GI(?(E`zwdM?cK~yq|rIXHB?V;Et+XOL(cR_l#hkA)FR#-~%B5v_l}7&5V066?|LwNq4AFqriz-k5J8y}*X{c#`yJ z_$VgcW_EgS>b3eawu7?%9A0c%n}P&!6+U#jgLmuY(*BV?0_5e{G>ck%)XzqP4vXJJOEaWz4}RL`I0?^@_GaO8r+Ndhc8{#hNo}J z#_pvR3+2WME!Pu(^9!i{D{v_d7XQwJ9}(w&0Tcue<`~TSY`w+`sg`ZkSBg0Dft-WJ z2UY{}3|14YW;6e7ZL(&kI(I7 z)<%ZM-e*@$EiUYwexH{`w|d8o{{8rCed)l3v60qm%cc7k9k*;iSLImzKrWn2Z@=Nu zP(d*EYT;b+O{wnkq%ifVFxoz#>GSHeaNU02*V`;jdoD!#F6@NE*KGv*EIuz8#k)Hl zbcvPYYLbPC;Um%Q6INfEBu^x2OS*Ot1Y0Y*mwhIqIBIVVrIs9krLoBP#4Nt@BItZx zag?6nG6op2AI4%Bi2W3}0|Q5nKgz*P31RP&xH^6zrLgv@h@nbzlRp6}fv?y@8GRT7 z9Kkn@TYe*ob3yT`%8vB(10Hh%M!3G8(2wemP>Go*>BIeAUHGUK-)X+H5#nJXn0!Xe ze<$Ofq|2QW6^2PdGjzgRhQ{=XWlePAwLR0k4VHJno<2z!j7|C4!<5w!t{RncyJM3$ z*?CCEH?ztYP4SMjuc8b`T& zuqfS+t(tb~J`^gl`SNq;;~v)p6U%87T8pTDB(_PEfai_%TZ&58_*q%+c%Zyo1{wad z`2*(}CJg*n{1x8kP-yT(?!43GeDVIu#NOonV`>?IQnLe}aqanNj|Cw1AsI0lG13Uk zgkzX)PC^txdGBabjv49tLf3me%4O?+26@OkVCDbLj5$HnKyVeSJz^Q(`zz$Yg@_Z&trR=mX?{)qd2SAHcjru3sAE^nEEQv)fG=hef1A zry=|fQcTp_RvT-~ra*vi9m2TPquI0hKMf74{oy1=?#ptEG;xPJk*}!xnC8`4h&V%g@*zFfoMakh^a-! zkBWT(?tds22Z9CONg#9`nc7X~@QK*_x#VB=^0Py=fX{&7UQ9)GG~X)gwZ12MH9L7b z7DdzK|JND{5fI$T5N~GpgxCDza-$~JrvH0)5(SS(W97gaXc_CzRj;-4u*8RAGl{QppV#pPQVu-JFq?WX4&mQdGox%qjiANs>jWu-!pNDIaHbs0F#G?`^eBr zDE>`a>tMkBy#iB}C7h8TaU(5Y(Cbt%N5`dp6?72R(H53Km7$Lr&u;8N>|(|M<4UGS z>(_0BPG&v^xLE@3d0*}Id>mQlwF@Aip7ja-qxf3Fe?^e_t{M-8 z12%SS+(YXv+(`LZ{KEuvKvT|>;cb|YwtqIU{+#Utj!OJf2bMWY)sZCb{pT;XeC@R> zC9Pq=TeI~3cyB*@Cx3fTyh3(SdBCkT|7GHS^3$jT;3J6#k^q+e5;J^wrLn5De{)&C zhH2r1(%1{3bFGvF!{Lr%2yMgA|EJDI7ZH^<$6Jd2YOjS9`v9nczI)y;o$y0MPA+OgaU>5|r~bKb-qC&UkuoT+z0Oe**eHfkDNl_CPQ&Fn zQ9R}M62%&6%9OTkg2P6OfP|stP0`@{ZNZ5DrxZJ((|U_s)!viYKK@Hr8G||QHMd_< zd=<0WM$1hPrs35<6`JWbWET*DpHj$X3D=g1(k~wml-tW!ng*R3)7LSRul-jhQzqA< zFV_YyS0=NnCP`6cXc^$1e|$pqm4<44eKVKF+dq}p`}WqLWwN;VLx+NRP zo}rb%g5e_|AFON|*?&t)UY|5cl%W!+P4!gaEEY^2XN>!DmqxZbyZJREH)AUg zdVvl;m2!;6TaB1c@|7;Ev=9{Wh_?=T(KvBmzcmNnVPFHk>wb(Z0R3HJ6sM!2k}4f! z94{Um($`~7qCEfcfK}Y`{v`M%{xHD;7bG4X@T>|${0B+;AmihH?SdxQ`VwGgFBm!I z;W|^QqJLqUx$J97tkz!D=J727gHuWkKr~XXj!!}d8^CRVBC6g+e%JyszURGDLo6MV zg4Ew6kxGPAUp#-+)wzgn)Mi9rLW1)S5-L+4!wfcI8qlM8-IHYpgo2(V*aLc80LIb= z-pEt{g1!c7708}?&Nl(lB1uS1f-z-XMS?K+hl#?Zf09?hGIf z^@*m5F4a{dI%R&NY-oVohBhTtDy}>_q)gRIC;#zjZU#GNobnh#a@x{b)}T+cL8M7b z^yCUwg$)LbG?;ezT^GAbYTtz#T+HFqq?n{AHMYcL8ILM9Xf+}opfaHo4sc8t^?nD# z8~2gp3|_?B3ct)|kFOF+$d1SlF$^q@6*3SMRJSnpjM6c-L6a8}6qI_Aos*OCRZ^Fq zQxTmZIVHVVH#$9Cu|zj60g@Q47G0#7n2^j;$>efOE;`jGDXjzQ0Z8A&@3Mz z0i(cAt?98oG=7)|D+D=D75}g=UL&eeJxVXz$oGgnBVG|+ zzGy6UlE40}+Z9|@vH0kB15Zve9Hb-0acb3FqRPYOsh<^ z@lWhCaolJP4el-^mxrq@!ua0JBF>rzD3NEZA$5Yn@3K(<8kF$AYyf2+$r#-zMMZmn zlLLk2>6(GFzUb5tw_0{0KzxPiiY2xg_ScM_!Ga3))GNLx0Ag~O%}pTwuOD!} zE)DTq@k3A`QCDl9233;dnJ6m(0G%#`+D*`-rItAL&nsR;xK?37>m#EY9u1R_7W`$U zj)e%#%-YqUWb#QuJ`?~rk3;cX1wFdC>G`36oiNwQnwH9WpX4A`Xda|A(J3KRhLZM` z)T<<$T2ovjI6&PxqVq2B@r1iQztpkoe8a{E_k2`Yd|0OPEtM?&Hy&^Lk4ON|X2hUv z5c%UE#(L3TG7kp#An8^8EHrY%hSMpxAC=RBo^-{exThtWo&a$@Z~=lVs55Iwk7j7T zbWt)BCYxO&b}pRE8Ej5Sm<;wwxy_oq^hxQ8uD;EhyPRxZyNwxae%In7NzU-MdU;8i z;a*ic=SpQKXN7K3Yz%^x|f7^IvbZGc*73 zTKk8-L;({M9qGZ1d8<@u06iDp_%cZDPcF2A)r(b;2@eG!qyr%p@K0b3%xxGU-{7es zLx}j0BEG0FxHKcEn0FP8qpl275YS)!GNDVF&*M~3>*FoP{ohD zwG4^?{EMR0LSNLiT*OLVg!2A-^{&#dtR`hOz z_@*ozMlma7!il>MoLB_{JkLhgKLAD({3D(=-;uLH)skp>emIa>cDZPIqRF6jOv(=j zuzZCw_dD^uxVn`~-7UsnlpY*BF+vhYj@|Fm3ITNKm=Y^+(Jue03O#Z#>$RNjs411q zocd;w!zbD_?H#hrm6DDi@J5*>fuL~w=@DcP(h@qSPam^1_lwLXGU}7d>D*0k`_B26zRiO?nkkZvKNx4;m z`Hmb%p6X?2Gz=I7);33wf1YX!tPsIh1MC&$u3aSdKpWx6L0}fw7gt|}T=wY$ae2!P zE=>E0;fNq72q|C#@mmJE6(-ec_}MZT%ysdQGp8qzY(z@%SXK_$uyuFYCb6zd->XnK znm@M~vVcem=DKK7w-Ff_9>N8*Ud697hVk%nK*317K=3(=@Kt+KiD=OFyv<4-G<-KG zuqpkU&o%6rMWH*$5Rf={w3Bhx-mKIkX5ZB{JS#itCLrL?OU51F8QU@FJG$B!>i+!d z_;<_Aq4Dc_K~#(8c~=n=L?&w}o;byRd@%}%!q5au)@V_Zo^t9phicog1$6j=nxdaX zV?ZH}V@8SX)!rS^Dn%ScbyJIH#vEu^WYL<=!F&3^B%U5wf1@ zrHPG4uCDB9=Q(@w#(eM@m;D4TfG`0AvJDfU_@C$Kxst&J^8o))>B!)>86TG0tpR88 zUy186TW!tZOz_L}&*0ppWGr*W(CmU=8L-UUGsNYe4~zas!u-GT++V{1$Y@2svy{qy z;(LFUhLm@!o=?y17YWMF4{9|)cp}u{$DDkS;9n19G~#X2vU(m4^zcJA`q#b|Mn>!;`Co$Oq6(zD%LGq#T@lyJ_)4wDF83(^5cJ!$*$hf_@#uL$OuR5dZpr*-1I=-0rNrk&giwvAm)EOCq8#XjClapO;Ti~ZrnQS z$(ONY7ij&5=jQiNIhH{iTV{`xs^i$t*!M|xFZTI{!_Btau23QaUTM|$lb0PMt?wOS zU!uPR9L=DnA0TH$IzJ*@frEl|C!x+pbXI?#Ec7cx}=L%YU?a z@R3g`&17ZWlKOWU_$w6%#rEx9z45NrD-v=QH9?D{>!<4*lu{LkD;|`gXONYat9dI= zAKs_=N+%~mO(yD z|5bMStuyf*Fr**H>-_`J;u(h&QI;uKH+dCWb=T_3_^jr4{yBdD^v2N7*5|)^gS|vR za@PjJ4TILJ4ReVL|CU=%tKrQ*T4Rdyk~8k7FV@qvJo`{D^2P*|?JGRpn6o$O`) zjgrwHj{l;I!oCFBI57Cr@tv@unCHe^#MiXP*|Ho^#FWrsD*oB66&6>dRUlyS8fEbS zm~v_Rcd$g<-6)LUl+&nr#c*3ky13_I_XDm;^B0v^LP3K)0Mh?wq2+%caxmOk271{p zLh3l@<8U{C-ya3%Ah1C?mk5xAe2{WeFM%j(B0Hti@%H~c{Q6I!ipjf|~y4Q(Ba8SGpE2L;*asUF*++&zM%D)x=hk^RtYw@0QrYt{u0gX|eq<7LfWo$9~ z#XwsvP+t8`egQ|7Q*+PZ_q#6SIiB#jpJTmKK=y5_ZuuPj86@b6E$APo&fYA>Py z7_Kp?erhoPX9BgtA?sBHH00WTQrdKWrk0H~xW-neSo&~)dO>8R-^t&al5%@3WjwMO zU>X`9ClkB3Qirt)0+7d|b3Mv`koac-rr|@LiM^{W>KduzGRHjoe19le=k{xXm&egw z{!V@czl!#Qz(**_{><3~8~B&rP2! zm&8c9?U{1>wZIc@D7n84>FV`niJ?>zO`pW>q_CX0Bf5B7ng{`8QJDCT^1YG%@ekPM zjL#oohCal`R^DXb`&qrX2&LyADNGv5Z!@F_?5AGJKmdgl z#^4fs%Anoj3hM#V|B7T>On%?D-hStRYx^(`V z*P`P5(1u8rqoDJdUf+-XqMgQ+M!N@z@HOX zZ8&{T9|uyjaR&+ za$BXwsOu79)PlB>%cx2k%;y^XW5Fq|r0=3Uq`BAcK(SsHLYJ?{04eD8FMr?%6*CQ2 z((A0fc*8pTO5r}5u;B~dWfaM1Q%YJ|s_etogWb54z09bVOFH~je+0y8h<|RE3Cq3$ zH}#%)8Cyp&Wlf213f=Vu_Nb~A-sHwK3nR8Un9gr^&}0~slQ&j!E$$6PPVbcKOHvXE`!I`;14bXJDlN6@?>dG$p2*qesM0L>F2rH}Jib zk&Q4*tmGxLSUH+`Tt1zDzh2!|nv5o>3 z8Zhi--3fhi?VglMo*R-(IszAYd)RvX!07Wo^e9Y^uLy4`zId=+#TvV8KXYEnqeF82 zgpk^pXK`MzEsk4JY}vhhqoTq27I()5)$pmWQ%q_J&R&=YQo0Yfz;|{*G7<6)SvMNI z%ivCWsS{Mox{sR#bpgjyd%)zF96Cg$#zL*wj=2fa%B{QCy*@QuV>6q2Duy-=Flvds z{R`FQyhU<&0HT)k%qA3=${*_SYCFbKozOS^RQmVRFD#<;*d;kMl7e%~8Qzs3e%Q&> z41#T@4I)xpeFNt)h@}5Ak{qA#eeqn?`g~JeTh2rYMp)_%*GT>F&BejZYhHc=6fbUq z+l7{dv=q5iNm)$6@p+?UACNRIZ6z#YO%pNTkf)@f{~Yy24Ax{N1^wrKzSHbD_k?ZH zk7ZXRqn}APnw4EqVy(Ok^C2?SnEa22^ zaI0%=FMFEUZ%rY0h-#IFAGgx{!suul25@y`gVi=Qe9yrchFB{6! z4j22b0`IdR0~eRv9E9ke>Acjv}iGF(R#_H(l!FjXWi9@_Hmg#YLfG5WPuowTpqnrhh*o+cr_J1O4Q2Yua zk+9T%J=Oj^sJt^-KaN~IT@*=AIwv~rMYKVh5ut415XyTyrDtid1d&5Tp4b8}rG|$9 z&fjE1YYf9V?fefoGSm5~K6e}BT8S}57%%4ge)zy^_xc1~*}yVK47|Xl9WN3w!f8}| ztYALV*j)>;&eaJ!4pze%?{7!t->Oz2R(o;y!{Hqlek*Zpc&vHn8oEe>XTGR$E>oQk z8BC_0dVCv%w6_*;{lZSgjEOk)ZY-Y}Pd%?!kTc8oO<6RlhDCK*73CKzBqcpvg9gx+ zaec4%7@Bx#3WYqo{Q2b=Uq>S@^qS)1J+ZvC!AOMd7mQh3Ini=+cg|ET*#~s`9)XJz zY^9n!GO4Ok*;NDVO<;c)T;B?X08%U!ahoCfKm*)a(M2W0thl=m`)Va$i~(d-nMb03s}gP%)5 zhieX8`#ULf`I(qFQ%!xcegPbtxaF8Q1w#!@rye78UxzR^-%Y=tOtF2S9zkO_PaR#_=gb)B6zC0UWhxxr@1g^l=a@X7j-{+GjZ0)lvxP1kB(%+HXBl}sbZyZ zlwp2AwO-o7S*d{p4vI^EiiO$}(C}is8Lj*%UupQn@Y;Nr$+pdIOKN5+Rhrs6*T;=; zM`jusW8@QFr+NAb;Jt$@(&0H1R1|MK*iws2tfqggc}ZQt&~4(mPA+4QQPT;~l-aSE zW0``?@ z*?hu!MH*iMvQN!|wZ48(3qz?4nA3#CoG1TgDiZo^URJiPJzVxslUxONCnPb3^Ewtk z(5Kj((~Y|`X|L~9-HBcILRQtws9NXI;WyI@)v*H_geBW&82dj2v29slXhu=is{5~T z(amzsa#l2Cbd`nU;iVP^P6WoHkTY%v1?iSqLJy?*&9fG?{umlM%!8N$MOMndI%lW_a&pPMK%vy6X z7jwV6SMA!hYgg4%^}KrGbS>x3Lld7POpo_2VaDItBrk_3sZ0@fOcO}pwQaUETCc+$ zj5(`Qcpvy_|GXt6Rx#7Z7GP$H?Dof_O>6@<$ zpO{Vi?h$h)zYD&1O*dAr)REhxIU{JHdbq|ZEsjuflPU-*?==S z82VOLGu5QvDs<;Oz5xtdgmG3o0w*)PN2$35(YHBl)c2DW-gp*cf86P6ZcxiiMfY=3 zLy2T@XUR?ZdndyFQghTiheXX0MeWR)&mzrOt#3Q8+Ik1xLlQBrypjAo zxgo?ZtYVkwjQ2^3otIX%Di>gG5Q5_r{`tf1z}UK7ltG5Ja{ z#@ZHyTfSS0`)8C}UIM~k&7qnR+D@f2Q&pR|glRKoD9NU@DSnniM|y&5q z180U$-q64uFDTyI4$V&(do`a{D3D_DyTNw28Z^_@t{rCE@NryUGd@mdOr`CV*|?vc zeRl)bZ8_y{q*!8VVxRb5N-T0SZQoVj=+pMy(^a6j1OLU;jXTH9_d{8nDsC?~t4i9K z&knni@~7`aKGeoft;gTyPet|As(?3_5^gsimX>FD@e<9Ozlft;}2#L!5;l+%T> zl9T_;TNS&_sM9ga;+)%4Q)XWek!PZ>Z@9hJmTpl@85)oLmDg9rJla zo$`V{&9^n_41mio28_>1)!wVWlahQ>SzZ;?o-)2$$GNu;kKj;9Sxv0pN!7U<%JIKT zN)%R}XzfT3#1l0;V-OD)9nUro`O~lg44LTWJHU($fP2Qz!HabBZag*DkQap*6$~J1 z7EpB>96 z*v{3|(a_w~(HJmQK%mj&&EvCbaLRm&&V9Fj4D}{X`3WT5)DdL8{M266xOn7<5d-1D zo9PWU1wOLl;lA3V-;Dk5!PNh%z=UfjU=gcSVQPaqthU*~< zPKIy=fo|GMc1K~Lw&`|CK0*dwi+Dvjf=M8A{$<@1JPj!T%KZG4_aGBL!@+Dm&t!PS z`K1o552k`D1BJiev1~(3TYH3e@&1&TH~3~wN0OvAZnqz~MOTL?pX zNm@Ecn(5v59Pi$v&90)!3%b$1)FLsUW8c*X8|g&|D_M#eX_g8*Sjwd_XsEQNBtpliSWhJrAJkff#y8g#FuWlDHG4Kc{E`=t5Ne^281Q^Kn zr&99Qk%6|PC)1V`zS^YY4JQ_!LT~kN%|_JF@j*j|qiOCzGW@A$|6VKzN;II%^p@Dl zTg1C0#xgJnU2c4uoCnuT>7M_%=7v-@%^QfbO5(2IPaP3xK0I%P~ z0WW`3Jpl!}bg??AmO@*-Z(3RKix8Jg-OPLYqDo>_^yqc?x)s%Dv+Z#Xw+Kw^x4wZK zl}=9B5!DlP8RK?TRipnjTNduCh+T*|E8vA@QBuQUw8KBE?O;{7X>rW)$Am{EWrru9 zo!9$`1@&)j20Iu(D_3f1tVza%<%wEY&jK3mJeoX;X!HrKn$crtn=8kDzMYSn=TT^X zVN@rsD21s+e9TUiySV1xL8o-&DAMAKLk56m-m0%cWE{S4 z8q#1HTFSf${q@m1oy;zd`C+hs^17aL=#;FVZ!w5oc?eIXGC929)Fm{Nr1$ z-DAnFEHs@+qK}o*+q(M84u=iOa%-Eq-U5KjJJ8tybjDAQXWeN7^8eDE5yb!cF7zP)7nO4k4aR-m(T^^=Dfm#GgLgT>Ff0yZt)S?L4|( zB+d0Llsaf(PgllE)db*Ip*rkAWeBO#aT`3I!H<);Yv5%?S+Z)E8)+(&YU z>qDwjXji?fukO8rLVsM2h=h=wxTrFNqmwg$@zeQdbu|1i9mI;Y(LNhBiGGF-FfZ@} zC{g^YdwBzo`o+@sdIJH{4IIK@EAT8Z5TrtnS+zIHEx}hBB|jdxo^-Axya2X=kO%cc zHtp_cw~Y^d*)9JB7!bQ97cd5oLy*5UbvLxJw>EVGTrg^0p44yqS2YY10!BsecytB* z{yL&Rke(Bu!chLB-&Ivbqf!1B{=o7?t-VM*Fgm0$NEuG99DNZ@On2U%iVdms;pLS1K9 zn}tS43liSGFPUIU!sfL8)l%Aro!!|^U|lBTA$MUWSJ7s--k)z0{~qgU50na(+NxSMaQ#DvN*ZJUQ{Dxm1RJvf%9T5iNnf6Qw8-MY_h~vtsP?;#|vR*m!p5w@_gw{vuU!9W_4f;@yn zWPjJ$&J#^;ZVOb{pWT%y4c#9I=;w4jI%cN#f&ZI7fQGmm~t!(oZTMFBq08)Ef$R%=GHw{4ygkeAl zUWH)%^Jcv)kG%vHE%`ZRKyOt6ntDnamOw=ud-I`naL;~;mJuXgl!XnMbP zb~CN0U7%yF$A&cMUi^DCRV`Y;9xx|W|M`VG4L!Sl^$q!nL5BxHisBB-Gu0zC{ZS_+ z3J_fhA9M)${LZvKhMpZguR$0FqgGSd+8Q*P&wI!6FN?)W1Cgy~?BNa5+E!!@FRVFV zZI8_IX}bWN4l&L4p|W#9&jLvS8va6}SAYUCSE{oYtZ&@1C1u{js8a9##P|&RkH!Q0 z_ZGJ9`Yz5E)-T7Qr}Ojfrs2k3mu5SD%Fw=jm+v(Vm;ge&Zj@N^1eiU>@~5l4OA%ct zeCl`-NPU3h6*A1Mq4=vw zgVrE2BmTis_4{%B3JKc!QG)acFO88udr$awVCb}KY+tl)8WId7H%9kegGfjh_{Ss1 z3YO@cT}bL4`6wJ{-kAmWW4eKb$~yUOd+!BHg^@$`JppD#%KZtJ{!GD)?RyfG9^}Pi z{xbWR?A*zfYRIZoNK%b1fy|pZ!pLk2}HsRmw1L49( zN)Enq7Lt~H!Ga!`pC(NtDK#aFoqcQcgp4F%a1yk2H2JuLnX`z#jg+sxH1nmj#SVBm z(N0=mk4ywkkw&k^PX*>oT@J6u=Si(RBur$ey!g!wHre*u+u^q1_*-}6krCTNnJBoe zj&OOFWSMJWLXi^x&W4tWdj|2yP=<&ayNe$@F$S0#6HZ_Y4k z_It}-eoxLAXdLzhl-@=5tU~5;0p6Rnxwm|pQkrSL7uQMZvwaG6W9`)IwK*kU_r$#I6$?t3w>b(42nYdFq%iX( zot|v^N4z&}x0};;N#V%n;+%uR^b9m3L(=pR^X0@(r-K1(VCY|WJfA4bGEb7u4dT<< z!YvBn$asrZQT(z+9XX?R>KbVY<0KwD?H&2*hyd^S@`JZg0uf)b{O7X>VgcLK3aeR9 zg!es^5ViZs{V+?f>AhKa{ZH1J@q5@6Tl8D$V60!s5a8XXkL6_s2WLF5HMQ^MMIc%HEYi zzv8VYP}0lZ`M&P6bffD&$TK@Wu#++kq^Z~Q-9z-({m168K7FvVTcD|2kMX);7@sWG z(Hh~dGMXP8@Qs2eeG(8-)dSPTJn>`Qy_4wvV&yr$@ogXs7t;o3)T(Z>xSX4$ue0PV zB`;geH=@2SHy|K2JY3k;SISb(+tF9CR8NRP1ohWa60M=QAKd1Y!%j^<{b~JAXPak* zq#ra;Z7n7EFNNG3$KMzkX5*#>Ho|9Z4r-m{rmW<9oHG`# z0PIVpI!`eD-@WWXAl>*mU#x(2YcyMauuA7_wQ5+nYrGvB!y(AtHK*^=Zj7IovyP0I zEqVQs-iSz4H{|oETn25C*?R*6Go!rN3=IV(t%Oo_g#iOk&&>6^26V5jSWt(is^s$iLj%Nj_+njjHN2`7=d&M&=U!Xo=YDbj( zeUPrWrsa;hg!^pZ4h_uuny6w~%gC8}y`nGu2j;xKOhI~woScDF`B;^$-up83%rv+2 znq`?4-BQk{#Ml053My&I$y!hoHu?nP*2?Bjn^(Y(Z)UCtrJG<7$aCIAFuoMPO8DX% zd03AW#|lQZ1#ff&6!O>xPWFucojo)`0JQc)f2~3Uu>OOe@a1JY2E971bZN4VU%_|# zu;r7Citd&E?9Cv6c#!ukC{m_1@o(KT(#LSQNYDV#AApm4sM$3nfBJ@mvs+@R!`|z7 zf9D55T;+cTuKefsYETh!INC zQZzz^zV2(IE^YGrH%*%b_meXN^bdy^r9kzBY`qtP6(wwN=G@Jo^v3Qb_{Y!MJEC&5 zYPEYPRkZ{yl{8qTPqfR|x%WNC-5~ zCUqyVD~#g!a-|$0V)isO2u_BQ{MVdzylVUoKUE{=ME188*n10FTEayWiB*+%pvt*M zo+zj;uY>*SuH1Do-d$uv0@ND#9FBqhD9>9W1g!l^044xqwLngD?2qMerE?wwuqnrM za?9nr<4ke3l(Tp!t*d+u`$X;;(Mn_Tm_i^qbhJ`5qg;e{-V6+`rt@%v0p9>QK*ql+ z%QYa3a+2~aA~>W|*F#;KQd21?2ru`)LV0tdW;Lh1zurW~`~^5kyTwU~b>|#ywDxm9 zC!oC8_Brud`RS_fhx+)0$72w7*}Im_%UD6mR90G0%X-H20XM9KdQL-Lm?m9QOS>KV zCMqOxN{a_Gj0)QirP2l~!v-QF4Z7A8+clsiF+!w8&8lhesa-P@2xhNiqGrahgTCgl z{Gqe^5Zi>yFTh(W9D*@=gBe-)Wwtg?RaOFk;Tpr=OkWpf5|i-uN7CC+jrMZk0Y8-l zd>=HUb{-tx!FSc2?zvSGBP`!t2LvLi5%4d*_h)H3!jtEy4a~2*N9c!!owom|kYs_3 zEh;om1@zb3WW}iD&iL?PsrQMWW)dD(h!|k-xgE}@S`W}@>!1w>Ydbg06GCltMR*ek zruthH`+9+0Ye%9o}$pP^ngS zB@G3UD=zlY_T^rLis2QhQOq1?5d|xSZ4U+CLH44!=Z~$wdNlIW7V>BX^CZ z3_6R>;KY}Sd3qqfMu?OotBaGnFC2xh$w&x4TC5Ry*JV*oB4-3`ls@H1&W=`s6+WOV z1&YFl-@IHPP2wWj_<0$E= zI`v~~N5*G6(Yv^cf=seOtEoHZG3eC!x$ z;6!j(z7LtuXz^zV{&#NY00~mprn$2u%r`Kwfo4}HpFno%+Z_UjK=Oe|r9ynB!_-v3+&9RZobr5ke4 zbBx9k=!+o>HooiC#1p7ldk+NFoB;B=FYhXiwl}{5t9t;VMOZp@x)2?}($~0CzkAt# zckKpIf%|n&N@}FsTts&6OD?58A0BP6Xr(rACs`1Y0ls4(sqVc>06*toUiQfz%k-!H>a zkDX3uyw%!bAWBH~ss}5bsOsSW0>HZX0cjI9Q2JTf&Vb1OI-K_^DMD9mOJTl4V#OLF zG9RiKeXE`ihXx2@APf%}D0+zVcGYS{1jwaX#wese8^voNn*mh{BthGymO>~>oKa?w zPNsuv;a~Mn=ifEfM$%xWvg!)mNl1`NSwtJ%mw3`!Fa@-TXAaZWE@UFppTX+il^!0@ z!s=3k<@_VRZF)o*0#!fZWiB7EVlZSspVX}sLlConnW_c%Kp z1r7sLEK$SuAaj0V{<#_R1oH&3d>{>P>9{89(ImbY{9if2czuLF(mvNHoWX-O40+Q} zG$zgUQ)5!D03iQ`3@VyBRfJ$DtRVdIRm|*Tn!ibe&QP2%+wtQ2^yM|LywAvi7m2-{ zzVhW)Sc+#j%v$_ZMlDB^>W^L>t<=FLQfzXrCZNRe=h({L^L}k~DlLd_sRs6=eYk$y zLhPa=!W(K1&A9J+7LHdIcZt-`6i#JDRn)aP0?$+0(M~A+q;)xq=K9wibXN;D@fx8sBAz6uT~H5#+$q zJ6*CmGAITh$XaZ0r)z@V)g2a=+~$?%k?4?SgRC{1jln84S%Z1QzlH7i*^VbGxMZI;8> z+I>m^pJ(YW6Vfu@+s=cm<~O5Sd#Yj?`;(fBjZ-{Urn@24%vlYn0sF4k_Loj>$TPGw z42JJrKWuY#=!_36l|0R{%ih_nWLkSuX|q06>~wnijPad?XRF{t?_A@(KIUqCI2Ol* zBvz1+8j+xrHZ8unS$^!YA{kpKub^mGM=94yH;Icb|MCJ)`+p7lexnx_KP3CBPj;lU zO0GG%YYhyqnwZ*0+-6Z~e^>eg@rd%AP;J&aL3u^`DU{3c+_ez?3VK4_cFN@8$Eey# z{q_;B*p_p0J5G*o|1j;)nA~)k%uBm}{H*;tpE*(MlFdd54=U*-vY?L!L=9P8b2FPN zBRzXfemxv+9vGS9F=y3NWaqIl6^?gr{n^N7dr|SVZx^49E z-uYgn)-A^O0`J{z-Pd=+Fs=L$tBhCGtV1=RqZTk=wi>7eD%+~Rb#|KKBP3c%)xgGo!SniSD~808{eKX9`}T}D2Qtk^7#Zb5B*F1?Lr8N600!dDm;Tcav9*2Os#Cc<4b zxN-9SQnD;Hcv<074w|jZqiCFZ__K&ucOl_6B#Ri)b-kS;!En}?II5ldtP|gryN_f1 zMEbX)Z64LFV=`ZoN^M`oVn&3%_iv#HBu6k)#QCaXs0?MSJ;TO~I*?}+5lX$S+{$Tq zV_I|yCgLZjhyQ+`gNrFq-O z7hk;7dU0{O?Ut%4BtCm$x$Ds=1@fVutIAHxjyr2I50u8UnyMNeFnK7JDr`{8{!sCd zj71z!3GMYU!*9=mlh)h!_zEJ9bU>YT2?qMp0Soz^+GUAP12{kE^F|WY?NVTJ=PICG zV9SZc$|&v(2$N2eo51aO3wUqBL#Nl6pV_$)W!-$_;(9!Z#)PA1w>!x*`{c-y%}`F*}H}B|REyQ|sSm8mP=Y z?4dRpu>Qby>e&|4F4moLQQeVULonGh^0PI5>I!F55dlpHcQ0>3HU`#)S*3=)xvv9z z{i2pQo{M+x8fZ+}^Noll;J{##$;RK$?ZPeMQydB-|4F|2)QLpcMTG%>;Gs7V1c=u` zJF8qAvyIU1YF$q$@8>!o^uBi7`lWrvWGw9yQ`N9TCn5Y5O;hG3YzY6ABXqheP1``` zH|g&NcXF!)$yF28%roe&V3cTK6Q~ntyayX51vOq@H^T&DD!o$YFc}f2CL3~%b-e=f z)l5K`3|~}@GKowRY7X}0np?Q$(gEVS*6icL**H3nsCQlyLrRRBYBGeICs zADU6-*JVgSY)@mT!QDTR3m1W&~DIEQEE_hG?wOAjgZQTK=2Ts zn`G129Y-@Y6)N5-)|%a5S2Cv4seP-jxvVkxW#T8dBJ19x0(;(P!BqSZ%nL~t)m-Vg znCN}+>a$Ok(657s+#?Stw(D-ux^Dds3dgp>svn}PAjVL8(?607D}45IOfaiIqt8qc zw`ZLb=a-nQlhy4HPZzdrtxYH2#Lu|=R&9$<@%0Ju++w5Z1U5I`?b%QI0sMcJKS!z6 zn@BI-HvEv_{Pwz<9kSH>P*6pF8?1zU4{FBv6?dpuU~m}HiYxH}uKR0| z(jeFXMP^umk8~TpfAKj~`8mv!>C%;a?@v4n=p$AS88;AjQ>P6XZmWGbRADfM7SASD z7f+U;4Ot&XfacYH&aXru`5_rT@JW1mJ2sB{Mj=)sK381<9)o$76~f7h1ze8hpOaHd zPA16MLDx{s#VRQO^_!Z|vc}lE%(5I7Zq5+I_hFTlU7J=>G4mwfQe}P&m_P#**J-a0 zP;)}4{siA$)aY1#=%1#YNRt)?e5N~hTGNFk3g2y*h>I!0zu+Bv*6A{h6uW9!6HS_Z zpf_jjXP4UzZzXF6BBBH*7R{GgWKTak3NrSV>`TCLZY13%han>)4a>-Yq?971*Z+cs z3Zb%pD3K_UbZU=!ai83emDE_5*EIAaAYw#DC`Z1fVLi#Ja0hXE>Do4O&i)A5=DRvP zxuW7^3J-@P*kVp2OY7;p@1|?za*Es%ayg_2t1}No3=e}#mmh?TpEg!mudb6j%Uc|E zPbW?E%t{9IQzzbKbtY(xc$T;|o_*f(>k{yJ@>CZ4XznObhXNSqd0)8(5dir|13{SJ z{tnYeJI^FFRUJV)Rm|!G73)os!i*6^naU^t#CMd&EtJpw+RrCA_ocohz(Ry?a@)C( zJtAYjcRm#wx`cW^9ZQvx#i6)}!fYGh0X|ubu<6LTj*Js&C$4G6C3n;%i`8ytW29iG zXGQH%S76PeLmOt{)>qDemDF*nZT$F}YWVfY04kj<$V2>3 zSO&-$Cg`}fq-ihYqCBjB3ZLbFhmh0H;q$m=w&5}5ll5YgCilq<54^8h<87rOoO050 zK7&Dos>HGQ=zlRmvE>mrE5GdYQ72J#X!i=Cl8%#^6*Z5prBU>~^4FwYC&Zg6ahRRO zAD=h!5R}z2w3M^}O5|UCei`2?K9N!OEpP3Nwiw?%>d_X31JT~}Bo}NKY~nDxf79V^ zw5eiSv<{dN1pC$M<^1fxSYCFL-op7b^O#pumLnCRgec7#spO=5Ar)~YMI(h9=-fMDcNlHu z)zNP|Qjd8<%Rt!rfKu8>-p~wXqH~uH4U@d$=<|`zcwF~^ig;i9vOyGJBNEBCfz#uy9DX#V!ieWe5`0rzyj5SSfr#7 z$}g{mhK8;XSP-3AFCwHdoE()RFV7<lO0XB6SvHZXy)c=aChte zLp?)b-oCUOh{>77H$b3)RFX_KcY2cxu(8aycc|y)Xo_DQq!v2?D;$Rym40_o($XvR z%LkRJNDK{2(lU&mq8H%^ht<ZZO-Cy;25+xHOGAMM#zy#Yagl~%|gKusAPZZs%`39ZIXbGZ3$2WZv!$iSQs zRRTfIkMruNO?bw*!X(k&-|7ZTvO4}-bJBmc#F!K0gpKb#?Yfv6@gP6KwR8BMM}f&9 zlR#eR0Uv1JnjDNF(I9VpyunPU6jcR}LQ?HlvxAO4KyDT)JqN!U@b(~6>`Ic@U`Zne zN~%72ClktH88}DocsfXOmNZ^SIy9urR6iD3&(C4USx~OjWHg@(iV>@p8gxW+suc{> zm#)9KsDjWF;)Tl^6BcxJXU}Qgy?s8S2K$v2eyXr_Y~@6$o1ZJce*9cHYrnZ^ywI%b z0ADRetVxo8)&r4`hy(@>-h|f+flbwelV@6EWmIYV9Mt?Y6eQoFe0wLA7s2-iszj=u z$&`%-gJuFQkqraQBk{XO^c%KPg+z3Z3Gwa+gN#|@h8c{Que+MdGIt#Gh2zr}^~Zoj zchOizQL7k>;le12XtDX$#UryMTk7mq)0KP##p4s4eBUy(@WBW%sAw8@8pROHpbmyyHC`C;2GBncC>e1yI@6bNWV~3Xh_+!e6nx)R>_9Ly@FRiDA zAFmlY!{{*UnZhN70jN@JA*ka50!(kGG!it|I2vDJBU_bh;RUNJ+o{o%PJ!2DjO(>T zB3_5{PTFwQaT3$AeVsFo&W@m4RV5j(I7>svqB^^H)T8c)W1c4N-rql@%kSdOws9=f z&_fI^$)gNz9H@w@-D*lq zV@Tw})ycx> zY_84S@;z2amO|%sGU9F*JmId$gMTW!<}|)dDOU9GmwFd+fj<3( ztnxL=EzcSjugkqhg-=~aOF~T|LEH+-%c4sM!w7b*fEW*(EfHz_N~9J;Ww|GYuj9VO zhT4aY2xB4`(OQ}XzEG`^h={pbLqJgz!N{>c^apv-w;QT_!(5BCJJ6@FJzIAb6kQXO z!J6bV+Tm2CK4HYJ1i>$mnFTHIs;AuvV^UzxSMiiz21>xWr+122~Yp%A8<;rM!x4DCijBFV(*V-o0SFaiS18$lU=ZgD@NjyNx zT(9Y>qvhVzb}b~TzAfigxGKha($%UYa=Lf?@``S!)GQijsYo!|C`Io z<^l1DtlqEqN=g>dt5u>MHg*Z`U>)pT!_|K{!Nk3aTOLH)^{ZJF>6i#;z2H{T3p*`@Sk446YGcSStqN z%CpFIRyoLHKe)L~*K_f4G_W_h(OaJz;EU%mM_-r1T+a~%qmqE?&fU7N!5my$c*qrq zGat97fF$^)m4dYfawO*V6usR((OCA|29>mg(TF~FpxnC;{vXaLkdaMzK%5C(W_G@6 zkR@R!udug!3%<#-lwH^IuL|2~7_PKMuWEo;SMB=puIV<`4qlat;i8IiG7wFBy8zHR z8s|#=%9Zr-?1GvoJ+AnVT(I4%jPI>yG8uiMOyuA&KIGF;n%B;lut>+HU1|=#+M%pV$7rEv%ZhEW&5&B zuQdt}*|SegV|OQDWtMNQ%O*~53L;KQ#lp|sQ^Qi7iwUo_e_H*TNMGXkXtdR%A}RN# zIPi0pFxQnt7JVF@Ts+1WV5m_Fci*A#`sAoYs@?i&8e=ZJEVv!lrY;)!Xa+>Np|pH!c7f?jl(i+| zKDKfUd{uNa3Qg9AG^p)W@^D#*M+7sEag(v?ONfB#Zo43D)R^ErDvq&sh;jRPa!FYk zR3yoa`=@}+r0fvFYD&ka_*KOWV#+AfErO}OK`c#7KP5Kj(nS09f;i$Mf^-C-Dwa>g z@a@Cz+$lO`{Iop2KxkSG=A22O1lOnTeHWlg{wVEUJ&WrxeozioVszVvBlmvRJe^j- zPaV&CrgA`HW0alaeT*!l!9tWTn##;g*Y;PM+g{xkI`A@L+QU;JLv8;~du~Ph;)(X$ z5edQerc4TglQ)`aFf5%TB^tjK5yD2sx?^sT0%um1<-&cB$tvJvkfm4~40)XO01@0= z56SGM=j&mc_i;Z>E4kkN5$=mMpX?9_KV_@HD<7$$=MeV1pXn6EM}=%=5LuS|wO zeO2(7r@3YAFvMVX=+`Q7m zs`u#~xxn^Y$GvsTDPK7fkmoPVzck4^8&X2C8OB}@ZfC|!CZCiv>AVXGyXKJ^wlW9r zp-tQBS%1TqJy>kFdnJqi@v(%gN#Eu@m|{QpVdq=dFqL^XedatOu)MX^J1ShkDyH{Efk=xZ={bf;Gi6c1_?XGX#66sw0S@5(gf=xwNylnCozmrKY4oAfTHWu=_OVW`Oo;3jM7C!4i45`E&v z4?n8BWe9rYn7f-O!t?jLE|BPe_jIL%Z`WahvGo;vbqHG~jX6=AXRyT)i~Cv5w+_{n zAVVwG+U?E4Th_x z+g~>DgBf8(d?JQnb)9wn#n|8YR`5{73z`J+hh>L!zNQXsS5PgM{fHW zz+Kez%c=v~e9oK8mj~9>w|R~@>#2GoeuVk;#^pndS=x9tS*x)A-B}m9nyp?k-@C#$ zaP2XEo{Unj%bL7rY`?qt9226ii7FBraYiv!6^q3#w^zcTn)57Eq0?D>g+rVnBf{!# zla3HA4y-1@Fb1c7vofv?4U-ICv3b8OiUs8EW(l>gUW??{)M14EI9a)dl5{ypOhJ-*#{AwW>cgi) z))?L9FZSrsVzPNmZ~1!;?i0Z>Zn`_C--2ojDSzPO!|!Z=;D3r6>c+;qXZ@sz zB51wZ5b44$COnQh33t*Ti-Vq@l14d}ND`yo4eybpkkICE<^0AR{XXV$b6jePE{btD zG)rj;0_Px)M z&2m<7e6PARqDr=#|H;G36KvZ2yXE6IDeUeU(eWczn2Mm@5=l0^iQ)W@)ZW^dTH(3(D76Fv|obGUkIfo>)5 zs)#YS8#KRFrmB{iO(LkBb9cmYZTBH}2j_ek&nLzYg{u<`U<@PW;v-%QzzD}2 zDnSeL=&9gEabYj((TP!ms?LRU$41^TQ|vig$Nh0r)g?ojV@fuXpubOcCrp`5V={5S z?ec&}e)~`l%Xl4js^jyTiXa1Bow7QAsZWt+qwh|S@BHCCH5GBgWJd;eHDAv94w#&X zV9KXiF0wfj)zalA=8zSJbU}YUeqQM8Uiy7wyXEa0PRmv>A zooM$4k~wTd*nNSyVQ6D5$nmi-a*n5Ly2<#({p)9|(+MBm%IBJkFJ?qDSkS7AWud{< z#b6C3MI~mD@bJI{lv5HIw~WW#>Y{_lV281<>#w{b=qXK4(?`OR2~efq%nlXL(5Opa zBl4;bzCq0pliZR{))SlG={O=uD}2u^qT$cvx^VZ-*(75FuiuLt-K5taY$6INjVX|d zh*dmXlu$Qj%iei2=(p>ml(oTS#YZ|81jtLEY_@V@c8CWZ$LdKY+4s+QdNTa{wOu14 zPvd6nDW#;!f@+8sQZI*##KCT+Vz&4Z_Q+1rl=h6DGnjx~$ohh{dC!=2wq2jrzV2?l z1hIKr-M-ZLw2001u@!OhiXc^XB}};w&$xMJ`)#6w8O^Kg$-Ut;zw)jK+l_a+1Rb{A z+R&sSBp6>crrGyE`F+^2Q&Us3!WD}X7&64G`l6fWw)rCI7#du)IGVU% zsCcakqsW0^%@|P}a=i86MiR|y(i8`NArm2R0-X^7IV2LaOc$|2mP1;cXz=~?MTB~qE)iuWF#M!q|v6CPJ+pX#qWR}yqsWVnA>vQx>{TM`f3h= z^N&Wf!{6Jh`sO)cP;=359vZf}oZ!IQ9*8bN-+xZeV_Eae+F;N}rLDxW;+p$x6GDyr z2&E*K(2>Zmod@+}Y@S5hE;F$7JphnU*^!Qct%*eL8D3Y}HB|u?-M-Ygf{Xtz_{7^CeZ&k z2p=!dj#8BOREAmz$(whB*)n>0zx2EJ@PTtt2E9?2k{>+PTNg^fXxH5Hvu+v^4+v7Z z?{B)_0mf0b5ah>pS5|bDtMk2}^Tjk$gWGWae9y9n0zCebT@eThdaDiBSA;IiDeU)c zhMK7HMwn0bFQNS8Wm|Wpa*--58=Rx3zLZoLaasKq%Kp{VocH^mO)!4KcMODM96{YM+h}hJQ(`V3!#8 zOcEM+{tIg>WVLq0QjjktWV?Y(J`4hU-$5$*J$cT2{d3q`93}`+%;r*ZaUriQqax$? z@)wlBPNM(8+*^lL zxwU(vGw6;9f`BO9ouVKq-O}A9-5{w*N=&*zx^YUEQqo9+bax4e^Z~?ot-Zdr_IclZ z_H~`_?>XjpM*Qv^cU0hm0^~GjOoYJhNN;YBqSL;yo4cw89+^DEFP$y3KrgRAD*DMA2cfjUeUMxG)3=+3vESG7FQGw2r}I}O9t)W&kuu?wmy8o%V2qECiZPdx3aQRMsb>$l&vL*D7uIqAm*9$aY3zesRHn=*g3 zyz4@I;*oz5+b}=lO+}aJsfzaN6%;S(;9&6PDfAG9jZRZ^5V_{o(+(e(F%Eyt9IUS&zDviOSpR_f zjk*5(IFp03Gx(VKiw>+-?kV&|{6R6{1TVbH&ohRoI{hbU725lOA`4^w^5l|=^pbj~ zh5wkA7ig?ttVW=*lq#xkACQrJgy6wZSpnnL39ubC7 z-DAZcHqD`hn5wM7i`-YYqXqbW@GB`1GAk>*YwuF-2YnB7@$r@qj1h7*kq8hn*DmOeJ76RpZ75 z{jLOPf6nE)gR@HVD_LXbRXe&ANox({>oY+G6P=*;r2~wd&_pQw(^jfUzJdctToyhJ ztel?K4B*1_xGhz5wLoP&zWxl?DootL4`Ly~3_;&7740bxjlQ|cJO zDB>XkxeZFiR=nPVfHNhO23QR7)BdJkA;!iIZ|O~4 z&cg!#tq+fik{fyEk#rN4rJ+K5P>mpMXWi)ACQBo& zY|^VU_cwXD4K|gbB4~S1eROrGAco~ZDIWDUIK2zu`oB*B&A+3aM~-6D6iJe$ipgWe zIpy6>bwEAqzoMPxfRL%c*>n+lHzn+fD5o+JIrq7=S5IInAW@)<)&0~(>iRGV*W|E> z{+nj5UplQB9fc!*46bn1yN|c^=E#8Gz(0~NjwXwING6U1-J;O0od{yLfr@1`92NBp zG<{Y&mpTU@?noSx?#YC{z2tFZ3U@nbOgm}ZEnPd?`NFQ+f0%nY1rJc7y{O6BaMP(9 zaX&h&o_;mqdi_DeBBe@`p@=L_@yw7+>T7vnkV~!=@(-TMjIu`hY zw)~{o5*sfb#0MQ9L~|+*f|cg?L~CErEb4QORnqg+Z9K4En;2#{B1?WvHL@Eh5ypy# z+8Z;vq5kla`*s;s`6^}fp+~)au`W4I}#Bcm$%dp1D zXPjOQel5JrHN(h4V@`ZpQdDq~8oo;~7B3H(<|j4Gc#Zd9Us`FY^a`^JR)YDImw}^9 zi%iNPcB&bok@uRs$_H~vQ>aJpguVYLx=8W8!rPMr#P?BPmaE#+-tr@h?bTD=Ny^%o zmvzOGx0b^G57Tz|=A;u!n_M7(1B?(f2f9gpIBUKZ|1Dbh*qf@}B5$hl8@IHVo81n( zX;m;Rako2()RTex1L!&CwJqK^En3Ihcrt7kC?o*bMqsBEj0nEFS~mZrKrCjOhaQy* zu;no1HLRX*Z!fm@2@lAvmOVK!Hvqt){OW9k78Hf6_#;)1f0yo&heNrRY1hcR9vmZh zs?Hi(1hnU;$AMNQV|mH0^PQt!L&##!XW$#(6m<0%@=#W+DvtrXNoloKoso+tOcdu# zI{}d?^(nMNqmd5pzI9qmz<*X~V|J}%MW`V;ZA2qWQPNeL33sqKd_PoVZ)-6A}Ol(Jx;{_6g#@CYTt2#jiLCZ6M@xRRL|%h6r=o z#CrOrQ@ToTxz97G9qFF@4#;XsWdRL$;xbMn-qpZ2-l1+1taVF|BI5or+E& z2FUQhtR(n944@z@e^Vug{&8BoB+o0Qkp5#94lUA600r@VaboKXpO?P`Td&)VU`sk8 zJWB%tSOpO{w}FLSCfC1t#n~Nbx1)y}Bq)ba^#{dFoeTUxz>R1)ac(Bj0SvRE7jI!K zq_STF<$a}sl@O}jT`7)hL1*#36^s+A1Pjh zW{ivEEa%~6cd)1U(%d6TGGwBPGH8PLp#_dH&rc zdEk7f6DZ2y(o4TY@Da+TtWHVaBa}y%D3408AE`i(k>h19>GC)dRIeqJZv=gWN`e(_ z9>U67ln^k$YvZ}iE-;kldWW6oQEts5*cEBCyP_5E6`57NYflvDiqBwQEDFP1R*fNRI#u$mjQ zyB^HQp=9O{Su`POzuE#2EyLa41c%VwH5R#*6glva7Pr(dAB$7JmbqimzD|@^8R%O+ zy_N^ZD3DXeh+`~{UUm8t9MQ+cMK*JE7{0e$A4)}>w+l?Wy0$teJL)6d{62J)ybdRk zq3=I=J|*t#USjRFx=iTX8n*Hx6tG5#5xfHK4=2CgDb6rl}IY>gAz}Yp1p2eQhMS5*df3kTn2^Q1jSPVzFl<_#oaFx zM1j2VupS*D8lZ>%WXxa+t*oT=>G%YDf$|Cj4L}#=kHzxeLU@b%7c0glkBe=@$2L+D z4e^<#af%7sX({4=Z_w2M2T4yqa?#UQg?J2qYf^El^+3M0V$hthYd+e3_V-VyIN7dJ z7gI%Yd46lfzMh1yo89_Sos10FR6-k_ z2c@-ME89t}yg?5B?6APB{fyA&i*~v3q|nEl52~r^6P)aRtk{}ZiUEf2q0?<*XYk({ z`^^}UxuF>EW|-MpvOT#UusO*oq%`sF?zgfRlYJ8%RkG=O_ta=%wNiHWM6IMJa}W`# zM0h0z6LV&yZL~cId1u)U4X$B!%srHyGW!$n%O0{vorpaZbvb308F8(BOKUt6WA>Z( z5iXEQ>&6Th4WHPaX&Zc64LtiHdICLWdx=du(~!-;duX%D2>k379`uO&zJ^YcjJ0tk zc0w)J3XX@EiepZp@~l+=r2xBEqdMye-2q*s=>@6t^CtpxIOA12d-E%*; za9%byeAM1m>1s^lo?%qxD46fAZF;{6X{EfW^Vfz}r@m@$*~Sf*R;m8-<-`w>V)OUU z4vZ*OOaTnx-e*?66gNjy5pF3=f3U*Y!$$}tpMpnQ0{LD`2OtGt@@g5S5hWrDQaSf* z5m)u%H4{DxvurK1-4trPKzYtA2v!8H0n+(mb}oZ_t?!U`^Ov$OAV})O!;?uL&5w`j z%4VYz4lzP5Jr$snpn}`~I56TGuYuAd_-`oHKGoPC`@N%yj=GmKT}wAYqspkyC(;_s;-S+pgZ8r)gkiXEnu;8u_19K9D<&b(?1@1QDDQ>5|u_MFk3V})qEp3iM$oTM|*PvCr4ukz~AD)^U>d5Hmn@P0fcOQarnTC)m`*F8fJq3(^B_qVbD7C1nfho z?_lWws3ZMKJLj{?+R?VxQGAA50ziG_54DH$gK<2j+yMFN-JCCPxTR2?=O5W*EtQBE z;cr^5D%XPS*3Y&Fnd@7gws;xJz@q{@udtOiz<&4c602|Ukq(5k_e8fmcaE9^zu&9U zU2DpM&V~`dAV4h;1i=HK1RuL#XR)X>E<{twi7&=!dV9aDY=lC$r5kUrR~QKE7_MNA z8)yHJ$*!G!YQoNNlCXc!8{Es-10M=FGslG61Z8}8zE-IiFNEE}M5XmX3BM~~`s)pC zAifGqAjDPY6Lvq#fxDbXOX4{}>^BBj3F1)CgJK$_et+jFR6O7(;*csOC%qH@lvff<=A0Iw&%jZQdSGr<_08V7Y^5adnG+oEIz2DmuIFGm7Kv z?!>bqs}`I*x2FUB#{F#(m_Eegnp{^GxxeGyj;=nH#B8t1YVFm0HiQb$IYnk)MS0|! zEECFz(fka8pfq_1=%5A;fQKJhAi)iim4$CfsjXca9Zy2OM4C0bvAky2V>zc8j!&r3 z{;(Q>9=6!bD0!ABqHIgH-p3h#I}$i$W7&sO4F1h`WSM z(ZFPZ4#0mdu;L#<#b9FftG5S z6}}Og2^?T53iW)0Fe6X-T1swvw!CW5UFq~JA|`I@%y$bCO*ny)WQkG}iSJ44w6yT5 z2T~H{F0Du~j4-gZ<@1`mnv=Q!iW{ZmEyHW1jj$Elxi0Bc+Yr+#iEx&_-L2Ycw zp-{q!*VFx0nmO6Uz-QLVZI|S|HtnG=j;U|jlLAFtDJ79#U*QST~Hd* zj+t1tr}O}32GPZ?wLYyot?xH+r3m9;M3%xmZN2|$XCbXtD705{>Xx`5#s&tA;ao+P z55$>lVm2f&RS57~VJ|^%LA}ZMh^^BnRDKah2SPjgOnp+?-sK?(z}b&*I1lpo_>f_ZryIIY4^f5zjmsS}2Oa2FzUDa-q3l<81WFV^Q zwbGmJdZ!`#Bfal|!g-KS(eFZpw@RWq2;vDDZ>oX6KQ}mKGGkYlf|(IILDmU9J@hlfw}`VbG?DAeVwZ;87?X{5&X}<4-7P%9t{q9OtyMcSC#S z7SukQd1BM^&8oK=N(ktkM|-*fOrOU2b$M5h+tGujpf6nQspS@slg^{4%@1&A(sTgn zC#VY>V3j|~nVU0d?+;LG7)!bu7kdyGhtk1Y=zC~+tp-O!G`bms$bEHlI$0BEK8p2A z=IS@b!|=efKs6d-vw2Y9pU$ddf$~ztJ4WD3$H6KS4WGx+T3G$uaIaTrcLLyw3ghQ( zx4eHH?0yWqfL1@HfO({z=HVx9#}TmlO7*Y7$SN2G*SzCG{tw=<GkY{>B96L zyQOzk*U;R^auPhDKOvAJ2kXfW?%SJc?emSZx2)rW7*v2FFQ1$U%~6$))`(5e)gacr z^Dma_70$(_#XX*g$i~Xka6BN1wZQl7;ZPodZbPKEMna@;q$EQ|41G1qlClvMKED}h z@6}Eo4LvuLq)uD-Cg292JG3M>6;92(j5FKwxh`z%$;XG3*DvF$CYbMZhcK3j15zw+_QEX}KG z1AO~?3vYTpa|x}^9FV1qewOexn&3OqNKV} z=C6weQ6`+YNuo%^ph&*UraY<9YxI*dQB*KcFtI3)60);k6F0L@D_bxDiq$*>faXcw zT{Dtm_&?R}i(5baG5x?3=S%zq;cT#%Bki`gX~RUg9WO3m0u8Nl4&+lvaQ8%dTfXc9 zQkwSi%y%gIZN{XATTeagYQ&|#6NU{`0&?}?kSyS3RDo_dO#Qc)VCIkl5CoFDlC_Qp z$&NK%iNpVLk2-gS65n`*ew^;-@@lsAioU*4OpkO+hQ)U=+WBkYdLw*XLAbxbe!skM zgq{hQKSyT99NNiw;_K6DKqxDw9%1hk=fyFb+=yhE3cSj|9V2> zgR{ez$GjhO)}nI2w_fzup68D*g>pY-EuQMJn#dPe*wyyldeL`N=C<52Q3>DiE(yZ{ zlx`{-zELxQ`Fy$Ds6f=-78rK;%Fqv{i;#ivw&u?}>Ko6G*) z7X8-i;sySvIIPDQ*iD!x+XzY5oD=vG5cMy4Eywy`=&5!Q!UJo-J8OORADWosiNEA^ zIQNfOG`NjsYkhDKzOcJ`dFmM1KQd=19+(YM_-Qdo#k6$|mcXG9WRv~Mn%m_Vrg@Ef zO%0}NWTqDw|7Ef3OP1}Mi+*>?%dQGdZ*g*h_X86}j@M3pi2ETXw zp-vt4X^ErJHSAuI5y&_}SINBi*N)jZA7HUw9l@A#CYhY#N;B{I=15$NXem8VP4Oj!5>%I`mpGK5Kes_w8Evy{S*K*=IU}18|li6l{QF zIRB*5-c>6!T@ebMHvoxV4foR2EqNx0SSExS$2#Q3RpR_1R^4{Vt1- zn1onH2!bf>dGMW$1Lnz&bE~Ic?_*iuEset%LDs-?c1-SNG#}@ivvZ4e@P~(*7c>nr zq^`^Oo=$)UdOf-%uPo}mClUaBe|4RpYY9hsx{i}OVS<=rR@|xb&g*bFh^~7{iz=>@ zJKj?y>t_?P6bJ84&?V&n3E|7RlOL)>Q=Rxd_++5LBy>LfL%GO<4!%~bqaV*qrMenB z8G8g|7-~Wdl0A3dO7$k!9Td&JOo-E7SjRfMdCd+cY<|iFKN~S!mZ4=L6)E~$*HEli zC%=joHktGD{qZ<83gQHT140Zrn!l!8lWIY=7P6g$;) zrg$z$#*v{`+W$mwcBFXrT59n?EJjDi z%(DTKDMP<+Ac1h{Q{w!VWIBV2!K3E2M?QK2IdSI@kx0Fc3-V{@OZN z{J&0vQnBMD?RNQQ|BSitNrK;=_33B2+i6VNa!~Pu$eW#)D3~@xeO#Af0{w2M;mIJf zodZ^Vy5`w+wNd-uB-_!Y>Ip))nD^P1KmcJngzb5dALut5pn!J#EmT*ua-69EdrRn( zzqGwOo)PGCXwvcy{z7T#$#)D^k%p&VC!#*sIG{QJ$pITj7~o|P;~kN-h~@Nh$G>9> zuC|M*ueEHg{_uVy&VFF0zWu5idN=JgGG4vyM{K5NQ+3RXPmTIj|J z2`0R+D?W9qSljS*dkHgTXhi1o%KE+=Ks1arEf3{i$<#>pPLBIdBR9o-TzSl)rHIe< z%Dg{SEgU86YY84pHW3LaQ{D!rY#6T?vn4Ca^q5x}NFMI8t+FJ1J2vhovIIk3?2Bf* zxu0ZH!e>+N=i>#{!1Lz2Q{qvgB?+vc_6*JJZ||8rEvy^sPH7~to-w@ft(oTsQD%$g zx1otucrkOEG~lZ94^Y1m&0_LX%HG8S7&1TmQ3&@(>!4ox5N0WcK`AL223kf*W28fe zFb{!)-UF8n#nPP;+40j?S3*oT#f5IlH`17lf2RC8L_WLrYQc8MfwDE|tG7w-r zL>jsT8i7h*^Y|Vve>;1E_druydkdXwO{j5X$uKk+Iub9M#gU6bRX_^xoF!Y<^$1Sd?cS^r5g-M@~)#LVi&auNZ?w__?_Ft-p z;7`cyomNe}Ru5937!#;}hOPEKx%LIYqK3l1*A-z@RgOLWVn zy+M$F@D+zazRKJCph#8N_vywzZjkQ&{<5Oe_F79O144LF*tCRXW>xPeq}24vP7<#N z-!r}8b&seh%GNp}q`nyX{6U#q%AzfX@KM7+e?aX<7+ z7-M!FeuDCvE_ykm1P>2y2qht4Q4f7?1MDOIXKnv_AIhHso;$Qgwc&Tg3sIBda=JNt z(!ijg79ixMoTfwkqVH>`+Dr~t<`Lzmj(VSOmfI~!;J6FSNS3;58E_XdB0s26_RtO} z=)Hlnbm%+qHhNa4w|syAxPOJ2dd=(%?-uC~f_1#{$wXkAf?cZ2&+_^9Mg4+^l(jBA6iqQe+o|;&J|GgDQ zU7y9Y_=VtVwm${EHfn@E20#AaH1Ep41Qg7Je5L;Eu&D<@e4)i5c5<$-h9!5^7EEM^fH7Lz zw@+~x0$6(Upa8VLjQ_iXxE+tKfJM6m@AH-BP7(e6Y#4X%yjcT*9N3?dVR3Q3d41SZkRH6)O)<5cz=+@k{`}st9iAmO6__^I z7D$##wKESg`cIa$jeJ8#DFA~zhWGDcNA{t5*Gt>Amn4ZATkJ%*$ru48>c5t~{~_z_ z9;=Q)%KRZ^eDC6mM+po@*UOIJ{vRUX)@J^=FQ|5{;B?XdxmgQ22qMPcm}~De*&;YQ zWF1*eG8h3bnF`|uH3H$nFtInltpA?kJpwVJrTeLoj`}RW?JM~kq@>|6(yI5j^B|Sq zzrT!~@mc3r#KCvt74)iw@dXE5sVH`;+28{|R_gYAxgYP2jgR@m1aolKvd<%M@?M9_qw=cWHx|mqc9PrBC zm!W&9fD<3eTy48icN%cY6Hu)|3kPN#pr`8{`l?Jr)5Y8=*VnH=GuHoBEmb2jQ46J# zz=%p*VD>)n^T+eS`e@e(P~a>FH9db!GQ+(#&Ix@)M0R=C4}PyvI$V;tzc{!60BN6% zu;)PjOn00K_+I?Dz=ik~-J98&Ja0Y5kTdtPg*DnQy=0+$3BVtdm~cyQjCW&Obg2&d zPa}0_Y}`i6yfz7W0~|^OiVe0mWzc+{J^CG-nlZexBM_ra+7NY^%m_X><|+!EryaLy zegee?D846|n+K((Q~cR>EJug@Z6}yEbVRs&Ke4#xL2pq1Obgf426Wgtnd}$o$t|i; zOVmouaUYwEyoPNQ7y^$K_D3(E-_D)lpXo>!u@gi}6yJyu5Myf^*0|hmW&BwchTt_G z`}zLlW#No7Q7QD(sWkN6?)M&`6GFGFBji3~WikZ;x)D&<{wN{*Z-Mt(QuQ(ZSEr1L zPk5x?DZ5BZ#YL~P`Yc&&A$HWQQwEP5(|ry;;|ur}q$lg}E9mSC*$|(HoYd?xkFxXF z8uK`q8+mv+nagR|XDvQt1avID9Wa0vj>XF{MHnaaREhb}Gd6KBQ#MvpROnq_d)E>s zYth}s9}7OX*Z^J=fQP&9$-?#ANek4Zfq2PU54+h;1hKnU&h}rD04jRXHm^_QrY+aM z^q$ICVb3QcmQ&3_rmW{1mGz&8VLOYz^qzHp^vUZje&haQ_@4iaeaYp=k`tWg)s|Pp z(`IL)kXFWyg+xZgjpi#ba&>3{7Y`tProt?)??A} zHo-oVxOcA-zb~KD6U+8d)a0gk6Ic$MIsRrmV-Ml_@_m7j;Kxz)=vI4}Zh8SPJ)r3* zXdF%Mw=A*+i2!vAm{!4l{pH%ka&O8-1pW3-{m{lF0hSM}HnRHKZM8L_bu*}dv~Cos zc~C|M@4xT4*&vR&v~f+|T$t)*&5#p0o!KlIZ~c098pQ4PfZj~=YLxfbY=P`)Ra9o{ zhaQ85t|{Vx+^!I^dNyX+iKgOxi#|F? zc-JP&{A{h~fjPmL<4t5LO}4Pib;djBwyiXs^?Im5_pbx&VbZ(-@gt=u^F@v0~M2fBt~8><(7 zw~_3pnw6fZ$+=|*#jwiYrYpQUXvz!&*2GQCq<~MPyR%oWhKto(g+2kREhid6-FDP8w||v+`rn570|Fc9i!!n(V$VbS-uI^<^VCZYIcxu1FURr`DY%#*2kq@LuBi6PNwtd(2PxFX*${~>fB*CCF`zeGHyC3#B_KWAyD?RH$#+oL?8zQ zD1XuNZV@j3&8wT{{@avSO zM+vTFF0I!TVs3M(LiMJH>@P1L&jz{M8rK9RxM3MbV#jgAcd*y5Pg{RAa$YY}EUi4A z4f3)Zs7*VjmQcn^KKZcx1=Y?vwSoDdBsb~C>7?PMU~M2FVS(*$^5}SlHpP3z(Vf~# z!h?jS$o7>O>2UCEGok&cs@E!7g8RVtt9<+Nj-hl5=-nM-eo%&+-}7e znuinBvMJ`=9#y8_)y4R*2eN~M*dLU+H9!VTRxdc?A~knSI*r_N-jaR3I2rl&MKXsM z*~Up~X1d}1kJh(%P|^4c!1{tE?Jm$4?oLf#Kv+PCD1tomtuBd@#Vhasm zZG2q*DHF5`#Q3@m&O5qRFzUXC?tf!%N0-de2x>#2%{LFq=A}g84RTx04qDGgF+UN# zvzDJZo5&Uj2^uKatt`FDSxCZ_5tsx4E&~W`c7c^m*Oo?IrybN#sHWp%>3V9o$BE{` zSV^#{YXiUX_oeQ`u<6x!;NB>v?lw3*?3!zwMeXtFx0sq-E`**BCPUuTpJz_BCMS1w z&L*^|*|Qxea-Ws)?Avbe;%CRLi^4B)4&*biw{)lsIbV%yZ=M%i%d54z5cq0C3UD;JCutxeo7| z?4&3cGV~0RtNEyMG9oDL-FMk+^fJ78gMQ^z$m)=6KM{@@`L%- z15edvK}DLG#>^=3r5D_Axos&+S=E{fJ&#a3hy=;wJ((65k>b8(&uTum6>oPfsP2AN zOgrD48;P8hm;Kt^=vxQ*18k<_gq}fFveb*|b5JGtitt#&in&^LKe(+)R&2UPV z7&+&b+r76;sy~OF5UEVF8$@;5CCsA(P)CC=jhu`azeT$>#kzxsH`9*?E7P8OD|nAo z6j46~t4)ZoY{~8gBJCyG>-CSkeO~b59-BvO1!qM3< zWMoHqFlOy>D*p#}@ji+?S)#lV!7xqB9ASUst-cfaczHa(w+Q2*V*;f?BTuR*UMA_C zRC`uLc#gLt7o{(y4>A;-$a=kepRJvbcM0+51C>OFJK zBmi<=z{A$SVO)2$_Un-9kRm1_@m;Pc9f_uICQ!rSaSKWbta(LU%6D@>kRPe77l~rF z(knzuwc<;DkHt0ja-jL(s6!zlr}>-i!;`(`NrqtD_u^+_$70K^LhOBqud++|X?~E1 z7l+R>wC8o90mjVG60L)YuLpC7?YAi3aONa(!ZddffEgElXan(`$X#U7uhsDV-D>{E zfHJw)ki7LyG@u47nRSXB7U#{gKLx`FsskZn_?yWib&uzRR~}YyK}?*JCfOEX{vaIS zKkkQAo-<(yF8bvk>b3*zrA;%A%sY=vZwbfeVnnWu7b6^FtpFs*;IEvR5JI$A-eT?2 zsmgNgLxs*RT9SQ|4dOBGB$j?7I6!*_(cTZftZ#10YuCP?5`KBcLl^5x) zQg{?ViM)kWD|n6256Sy$DDCLYp(s@CDk#?Z0mg8cVvQ#XrO$-kg9XVi%dnmo#3<@-oj2+B$3IIA9S!p>&6>%m; zg$_9>rLQzhGF`n4v=TB3;sqZ;bloz2%yNuO5{z9P%rXNC@tzScEMVMmxzvC-QP!+E zP!-?Zt<~K;e0G8%EZm}h#D!qGzK9NS{{pwr-)!66L&KWvg;qk)i=T-)Z= zxLBJIO|(6K`SA<0BzOJ2AJ@rNt;(vzB{C5-ED z4+%{I3uPWui}at&zkm}P1Na{WB>XR?kg~G5lZJX%2~T8e=F5BGPZ<}vVEtbikPsaG zN^tX6K*FD`oWG0B_+{m&IhruB9bLf$R;!err@LrOed2g_dshVQMEaXx$-hkWcW3%* zq85B?H6f~H8c%e>R$>LO2`t1sc>EBRsELoGd7613L1j`#Fr6_^|0(fZh4@+mF(U{SFl{hY)p(5RBNoT^XSGJoA1w6e8-#9)gI()q> zZ6Yj>MOzaq616n)JJCK|P=#r~3@{jHV_gc<8qLy7*qO>{BGYv4A}p7qQTYO+#|b(> znPFEK)2c?vOm3Ht7__~3jP%5nPoOtGx!HkzkPz8bWww0ts{`?ugNIXLn(#5^+Ifbv zrtOmNJd@3tbMkHKPM()yVCbGAGM~4Q3p9uJ@^s3Q_2LK1`mN+B=@+{MyIE<*m%jX} zPGWcEG5Ygl53^^^<>x#o^xj`cLow022U)p_-jLKb<^nA&GH`wMMQ&#_f3ATCgP_E!tu+4vwQBe?G{+MB# zhL@df4=0z*zSDySPH$xt5-nEfs%vGPu4{6`3mF@7QLGn!AE;oR!AN%6BksVq*e{XQ z`a%A26dF=A>ez2T0gETujpa;DYo8B2Ennqu;VE9}dP7g0bqn<;(W$IjM;DVSAVcCT56?27Iw_5$O`Bn&z9$QpcvRzIbw_$%YHW2>o&6YUEk zKn>&cz7vZiwzFZWSS-t+cAyKZgLLLTHuB;Eo98*I^sofYLs&$+keA6cnj(mLMs2j- zJx*ou=`w-ON|X(>LWu3gsu>BALK$SC3UqyhvgngTtnZk7;Fi1VHUrZI4sYZe_lzfbR)xA362CYcTZ%fyuETA#`%5dPsK<8` zDL+*cIhRGD&9N&(9HFiw#f~vPaz7rsk`3H#&>?SqztN9huW)8_CG3lcxARK##~D^+ z5CXXWvzBO7t4R`~Q2B{o1b#lTw8a`SpFj`NxLZNPdS4}sI)Wr9>;r#6*{ZxMteMeq zu{jQx#6U}k0i{_F6(&*BYlhb9&g7p8b7uFo<$exod{RTuvNw?@$enJA|H9Bgs^($f zN3=5Cdz=*Ox({<&!8j6GbDjIFfqP!dz3kS1Uk3wmN5y6_)O8?-p~>TMKxQ1ZAxY;X#=%DyznC-5uUDgye8z2dw#gzeP1LXZ?zud!gcop%g)T1UL^A4O!O{w$SygO?9! z^oosm&S>GRJ(yRPDqV>w3$fhOSJroA>wDn@K<3cYX`$|7f45A5Bu?tN2Oi>)Bp)B? z&=1}rb+UzcT74vn3;-ZU9u)NI4<;D6bO`p$ z{n2fMXJ~N{-Wa#is?|17%Ns}Qiwqb?Km*T%M*jM8`2WJ%b^bE^@8V!@hXW=s&&o@| zuF2EtmNt`J*cW}e-|xEhgFon$uYi z6VfcBZgVUMyfr)=cK*b~1n&V4jGvG16uGbIyFKHC)>@)=Y=s)Vj_C)qcOhx;pFPQ= z^@y(|YYgj6YUb3=l3z%A;Yk#$H+-J#S;t|h)NDmJfWh6T7ehbp9wmCW^QXE0^hT z6W5<;+HBOPz(luSMR5%qJ2_!#0mo*t#nbj;Ag2u{5Ld~u^k{e+O6ujT9RYa zb;bxvqUOToVy^r1Q9`j*nZ|gfP;@k6{Udrn^?-kj`rlYe#O>jEnpsNnoxbBNXg} znSh6$@_a|wBoeb%LG{yXvIF+>C84j6Uxfm?vG@pugod?43AOjn7u*|vdOA2c?Gti6 z?4rxqz;7>8;R?o&uskA1x=*70m8;gbDSXa6^W+}fe&*7fpPcU|K8RKqyF$k>ZFza@ zcDp&9&0}#}4ILla?V2Za8!JCteG|;D+tVkYB^`WdMDC)`C~Oq|b~Ck#8n?2nFPW`r z(Yh*0ZMnqt>x$TSecCnEY_#7V5@9?>ZjY(myaRc@HH%wOURm#aUyY z+|obrKXt2JHYOWf%NlUS7_zDm@@3fkD)E{gUc_1Pk(>VK!Ajq10D@ymPGL9he{e*WM@6?BevDRUQjUSDktt#S6b~^}ux6)}qT@rl57&v3spO9? z5#YmBlOmgdUi#^iYjbl%Lyf05>ycZ@d*P?}+nG@XCW^ZP>ePwc^pvQ_PagG4N6U~= zyQQv+fJl-wzNoq`ebhZ<5ijagluLf&O_Y4)=6v*HapBZ}zp38cqv7Y?{`ty9+uZI} zD7yH3v+&k|t)A0E7x|`$1p{9L4rvN4Z`JUemFMJojO>J*#7?Ct>8#H4eXh>CuCw@6 zboW+zQ{RU(M7h<9$Duwc`M~Myrj<}Sd0%6PRE|1Rgb#WdYPd4HmGa{mr?1cUyXq?i zyAO*w?kNth^gz0g`n8BqBd|||*Uvm2ARfgdniG*>d&oXP`BWvi{gL=H zXZ(TY9xm=4jO~TlmiKajy2&zbZv@m*CF66s;Q7Y6XET3ADYq8h*6~l1+E2UjrfT3} zb)~UOXx7tmW>@0TCBM8-TE~xuhv)0Cw9H)QOw<0CQoUIyO7N}SEO>d6AIKJ43S`Ve zzN(7@@vwy#J!8^diYaldVAP8Zm485;a$7bT6QJ^r}DDa1X%D{3fbGw za6pYY8DhjVg@K8!q3oSPsvh_g^2wJZR+3+ZCXHTRc%n*rgwQ1jy9uLn#>X&rhfNe` z!-yhPznM8U5bUmXaxB$P7xt{xJ&}=MEK+tFR|bx#Y#iIwt15`mG_{)1um}k&dX)2v zJQo=VblAmnwfho6M|~QUV_B4bC5Y0A)Q0=~nN{y@r^}0F5&rz;PwkBkTdjj7TKghp z^Ee;XQ4NkA2>=b?nu)mQA*yGn)=bZVYY#JleFYR=P=QyF(knp$ta>o>tf#&yi0hJ!yL~G+^+3Ykj>gT=(I-xd1|r zt?H-Ds$90b5q4eVcGSvI*pdAePd1uZY3X>vP)d| z%FAaL_k9&!w#jF?tPLtD#Qd8YSijl!&l5!0Eyc39b(jjCBx5v&8SY_8mde# zt}&hHiDueM+y(+JIVQqW^sckHw6Lx#PFJ>#hvaRj-!1#w9(_lj8qM5UV`*f5_%sWT zTuKC!*zCC#Rv#0}fXZmi!{-DmHGLNBub$U;Wfo*#^(>=Pa#>ItuUyfTPg^%-v^wLv z5H6B^UjI4&(RtI`!+d*j*-Yb%R9i#I)$wE#m!}Nb(>3##c>G2wkp1V<@fnKmD@Wwc5Q;pj^I$alDdBY6`6 z)?)e%R4#jrgFeg-`u+#WLI))G3h|OpL=gA+_$*VUoRL@t^Xdxr#<0RWe~e)wQM2W` zY_;m?NwYKh4vY4uHhS*AjS~=fwf{X=Kx`+6Hzwn$oXddZ1C&>m$d~Bd+VrIJpghO*+K5b#K)0 zoGypcJC!_sVtTSt7kV5ISRKNUzP5-{$^J6^HasLGc|K{_s87yPdz@L=w&|7L?es{p zn0?oOi01r@ziil}Blm?a$yHbF{A$bBeublCccEK<8ToVU)g8FXZ#O}#54q*sg{h#n zLbetX=DtEEI(8BY=JpaMUOM|r7t)E)RhA%W6NAgZ7njTq9V-;E_OZR_$@9`lL~cLW zfq)cxlFth`v7i5E^%wv1avlFzfAR0ib^KrHF^(tp!kY)(c#MC&6Fs1cbV>d`-{bDP z3PsO3tbE(LZPZA;RdE6u(iH-}!}qU+v%daIUY`1PDPLc%l?a^d2|a zlKx6>R2b*pWLhjt70d@Ds3!ED2TA?=bx5uu_5QCes}Zw_&6?EjE3LkE_0%X5X->QO ze76{6(ZQ~m1NkKI{+|DSNC!LLyEk!h0YrVVYy8UJ4-XVkE1TOpRT!`VLrdsSmf-!l z|MEce58mzvz<+)z@O;A3SU|{J=D}G2PirRETe1Br>UKe`FUc1EANJldx~^_n&lEFj z%VNo5W@eVP#mvmi%#5~}nVFeoF@wd-U@==P#s0o?Z%&ev9ydMG>2yZ_UVH5^*P3(I ztg2P@yr9_n_>C>-2(ORGv-NH5Gk>}OaoA3j(H5EgWaxAhcF|cKN@5~OTZp=k!rWW@_MxY(I4FJBaRBc zXVV*K`yxpzw`tQovRPToVvO9{nd4$-Or|zDqmDNmS)X!e!2}vohYA+2` z_|xhjKLV7NoZJZn7GfM6Q5Wu0q$C?30!|MON(w*G7$1Jx$4sIuOgh|G9y&U}JRm4p%6Qu7W=Eo~fKmPsYa=;!Xx>Lt4;?kyt56 zEXm{{nSeYtZg2J3**d$FEeafD;81MxPkTDgf7}x6AS6%V{eDZmAp9SZu#tc5nNRSr zT!>x?{FI1YKpTkOHSEPpdJrp5eyD$|67KJdDzGpG2cEl zL=dY1Rq*w>;XIaYLIM~SARlBO8-i!LqA)dQK}fyO{M$}Y-S7272RKlpHaJsf*{MGZ z5|!L`C7LC|X>CCL(=L!brQAV-8?z{ny2Q3TTT3Z$?`Qwlv=eu;h7M3HLAA5D@y1O9 zdpJOui6VTZXU>Vre*8X!WE6TO`vn1ofq{cTgxfo)$SOo-3*{)K@)p5{6*H>Ws?FC$ z8Z!0c7pmweCo0!7voY6)KkTkq)~h1iGalSocvxP#o}2jBvNWNm>Qta=g?Ey+Nq55DVOP>WR96qWS#(hrgc}I&#^3d`_(UNtKsAeaX|m6t_U6k z^FlWK>|>lFVoPFNalMkUG_n4y0Jk3<)<~-y*%fO3Mm`{}(A1O===BEYTGL|kEXr^p zC)o)@sJtSQ1L}cQ-zhAwHPUTT39ospHhLT}`;(Rk(_agHPUssNl-)C{6y>D)8S#oT z)@osN0rOPGjF53fCv}XxoV?*?_v9Anv$f<@GMXzE+Z6Wma@&(mJxiUQjURg?NRAiI_L#*H+ zNM$&gV0w>YSR#Eq1;eH0uS%u7;@*{?6Oxe>CX{Wvw2qoM6+N1*k5@!`bOIYvh;-4Q z6Z|zC$ezp0UFI^Of+Btu`ZE_6RoWI)-y>P%v$o24in~2$pbmZPv&K*NrNC4)L2l4` zz4+D3A{doSY7+y10$&x3dKjI_$iatGE;yZv2w;b$3vUk#>RPzz38fDwg8)sM-wISh zgA&a?#XU#-bWUjaR&`f3XJKu294RnnvRM9g_F*#WkYlRj9sL5dJ{0-)DcQ#v;vk$T z@jSkuE9{qIZ#%7X3Se}|IkNbOmO;Or2N`)s%-*%%|E1%e>7zVpw`Po$l2NEL8-HhH zlh7!&Nh)*h91*rkRBoxERUF-4*xM+Jw>sK7db-$O$I`=YqbbAF3tOlX_TKBY7q_P(MzJB?hAlkbyn1g{ zSs{GWT(enZp3W4zS_I?6H+4dk2WRp5=S^WOJ$l$h9zF@2z(91O_^zs}wyy%ry#Y({*}f=XLbCQQXnlbmjNn=vss>1ya6{L6-~{dXmA`-h7K85Rbs zNwao5{wOKrQb-SB3gT+ZjirT8QuXRWz-l7ZE#nEQ}&kUb$zvpz~T z@~Y&UB@r&WPpqu&Ossr3{@TYw{_dn~{R!qwPd1h;8_XCR^R#Vwn+?{ARq>Dln3ST9 zedM%ZidUYbdcROh9g0t1Evoyx*P_+)089Gy9dON|PcEvX?dP+<=A0}Hauta<^tAMX z{PLB2$`RYt36Khm8bVc+@V}C-&6}4`MGutbjk1l;-`RLbnJAZ?y25rx@=3en#j|eY zb_$TSGChugsPIYlc?DVZK85v?;vt%b@;so29ptTGt2t9TrAE=BO7+S&M$@&Bs65(J zVk5q8zt5;oU_2?%qGL{+K?+&;vEL=c{`AjV9!Ja`kRqv;uvx1I&x0TdxwQun61s@V zEFdB{?Z!$>goJkj)E{x+kpBcGs9C>>>k{EWLH#B;5H6~g( z#Ggq}1(Kdc8|_l3HOjF^6nv@adW-Jvxb~5I=z42Hu5WiE-BE8p)8uPWud>2Y)ypKL1n(Sho3LqZ zN5)>xD3WW7BC2yb3J9Y@X0kNR!sUEqM0;X9)w7RT0Z8IinKnWHtG-Z(;Jm)SJ zzwZg5O1NUcDzPXJdA32w)dPD&Vj7scb4=h9*zocvN=e>gK-e4sH_#w%roVnXzNA?_ z63|KFA6s5K^xBy%p?UDEuFXj!s=R?)a6H;iy6vj@SeCm82mok{_94qE9=ThtOjsziMAd9a;=FY;GeU#8y z%`xhS(sBZIX=QFjQAKQKPJCL5Z4nC2ZnHvdsKYJ7 zkc+k>oS=MWoF0K*W|oG0Y&u#_s#3PPMx}nmc5BSi8NDz^VQj$?O0Kt6E(I*d!v}4baF^rq2&yMQWS(*JurCDjkvB~K$ ztRyNmtq>C68-^9R5GtjGv8gHfu_=0B>_#`hU^w*Y)us$#R9t2FV1Q$(N1ftrFQ87CZ+6 zj{_%f@4K);!z8jlouCDjC0|V=Yg-m2kbt965B~2X+6=ln9Om#I3 zWlbY(bq#G#_Q}3JBrzocii!)1O%98Sf08Ge9wr(e+Eg3unkDucs_S;!+FIHwTK?FF zIy|t1Q>UY)9Af~=(1WHYr)FkqYV&Gj9faE>q=0cRzeb9M``ifF_D_=YR-|zVY}agW z;!*KM^rO#>#Czv&E@Uwz=enDP-t|%qK zHEG=o9;ha1^>;eTCD-JQ5XNssPk!&b)5E(jJIB`tPd>9uve@R# zGFkeT1DR++9?V}>Vv)XNk!+jW*D~kuA3x*!K&kg0)Ia)&W><8sZ4M zXiZLKvRq7(0#1ur8$KhSj`jfxgWp0jX4X(^RF0Cj8`V489~qZL1Mn0Ure29egBo>C|vBmTMjzC=lQ3GK*|nR z1&~Z*9dD8A%O*#RM2{%O8GX(!kxI%6i-bWdjMIcx{#kn(&r2M8%gVI+RJ0sM!g?8l z-Y^7$b_GOH6+>}{@Uv^B;F-oX^!8L%*l>iDA`y25i`!J@l3VxXrq`R+^V|J=CRDEz z=;6_h=i88L7t|UakG}p~{-+i!7pdJ8W8c@vP4+SUCZ35MLF{3CwdaTdbzLl~Y|2Q1 zFXYI6GD5@^hE)qSRhyO5dTZ<6Mjhn7cq=GwUy7#yJB(cI@hF#t`FY@S(Z3V!AuXPtWZuYH9G%Gd30xRaA0R}5r!}z>CY2pik+Dp!uRb82 zrIv%~XG~AvTjUdul4E6GS|lJ7&e1g5-;+}+Q)xwQfK~fRBSXhli@AP`A_k|ql1nx0 z0PG@f^T2%MYPvY}22;=SGJ=75b)wwn_~)coL_B*nz+jZTae<6Z8J#;5Z0QNhATeL@&q9n+tq&FN%h%z$* zHzx^jn+%BtS*_-S^c!XCBFEh@Cl7ZF9Hi5>pR}jN{l=^0XqzrGI^jc%M2&ZbMbvdy zN5{fpt@Jozlp+c0&32IEC`CQQ>YmgJp9o7_t`+HNHYc;ub4==!%rkYL25aq~e47-@ zDbw+4^k3^Viz*|wvNJLKWTpuQw0Q$t;dS{UX>7|H^g8fxdr|G@N1kUMN8#%nbo>=9 zdP^b<_k=}7Fxu-Wi2w`h%F9zxZ?1t%m<3cXd@3JBC6dcZJ3V)R-L(KeK)}CCn$m3| z93CZ&L>eX{?x!eN6oGI2K2mI|Goi(2!1VOe%dv)RKT?nVz(mwh(x&-sIt&!(ybu8X zsD%i1(4GX^+RJXnU8eeIW>#R|LUj~bOe#+=&a)OJIg8Wo(cK>KfT+3t=ro?UWT(ZT ztsjQKx@7ngl@P2lvWD%D$=mW98^QO>t?5t5p?4oYIlDu-!qNwr3cGebFUW+~J*4q_ zVRQW8YBwz(z9sN!aun5b@UvF+=3u98J7#L6#(qXscz}H_i!>A+$J;dMCkdlb;sjn{aBog^)~N3FV^KQ{ z(u;3EYN3q`YcUMG#z-2X24)7ZLVZX}mG^ibCwj0djLO77hFR+F+M0SlCHf(w8!b5S zAL}qtyO*9)02hLe2-NY=zLp4H7|M z-Du=jf!QDdWv!3y-Yfazmm7RHEq*xT2>v#MzwxW`@tWFbIT<EO%5;xImue!?jE6rgOn$)|NqY5S{v-P*3Y3x3k$WM%7A&Q>1{{YQF1 zt8(mp5zO?x56An{fR41n)CR8yMndJt1aH~uBq8ge0205Fo!`@VI?WQKfXtyua{6nM z1vZEyoBrH>5op(-hkIt0ii{nu7*_H|Yf%PkL`EVjF}>24IJc-SFo;GbM;drE(p7RH zAVhqV=3+;~RPvjlS##20*d@m2iA>5A$t&bnXioY2z6f}6fXO>$3uy9^IZgIBGR&!3TtK8 z8NLfz5l|yU%>TK}R=W4wL zdr#s_QANM77;^^R2&=UEP*5IRY-^FW1&eFF%Ff2Wg@gU{rRCSy_YU|VFVH;)p$3`L z%M;K6l%LI^D579bmuEa&8x39lt$kxsy5VmqBx5TQM_QuZ3L-Y7B-S%Z@xrdb@cZ3Y zwFRD&Jn|(b#rwqz@#W}fgO}g4!r@~ag?<1VkVQ|ICAQ&XQ*cnnA~8Y90wd2jXPOoB7Meh*VOl*)J%Au zfZreLJGNQ<22)#gf&#y&$=hQ9`;@MfKc~Q*`yuH#!aOI7hIV6oxLXC2%8a}hFF({l zkV^GUxV=FPZK`pUkOjBU9trN+h4C(;v-WN?_%RG$X~sdejq1QY>(%9=Vr6F{{?}Pa zR>A1ug}TOL4JnKQq;&301g3^ml2DJj0;u{&RxK!Y0xGwxmT`huz0x=&H=e<^I2f^` zR%A~~+6$)_xh(OMg|74_;l7^U&4G}-Bc8rUoM+6LU&2&KxJ{>}H|Da|M&p((Y*lurb+4O>^M6;)NU}93r@rxR_A3C2d7P!da5@2sIUNLo+ zVoft(v0bS#NsE2Ua3Cyc`rK$P<@%Ai_TZC!ItAaESi58slwqa3-zGlpNwXep*vX+X>UtYQ(uX$3HR)nrvW+LhIykHneBs@V)*xv@(oD&ed&6?drQOPE39rO+`W9{qV$HJJ+2 z(z?i<(!#7H_71&Of#=iY+~!@>>Y5BZ^B2^+l+M*k+_wD!MbEx3SU^3AfbW(f0p$Vw z6jNKZeWuZvXR1%U_*iv$w%?y!Qv#mM@4e!l{ zs)xGiKpyro?&3ut+blh(pWP^{q{Y&`WdgU7l#U2Qu$^f}Kk-XBQ%i9)73t88I{w9g z$*s_^<6<&C#9qv18^UTmFT!Bxxpj+%s`J=FPncufKHkdM>=6z{quAbT9DHcgUq(uj z82u{oZqnK#8&+|yF;k~0jVC>{yx4WyT5n@zXde?l%h+I(YN%;%ZN}8?Xqj?FvFD%! zC2O7Yb-R7%lkvn zLEZ3jO?*k$kH9igw#6nnL+b}i@8u+}9*80@UMBa=HuFjIOmSWt$}fs;W{*QJb;Br! z?+XRPK^M0Q%QOn9bJyt$*FJtUcIVIq0K8Pwu@qh~(17>5Str9JV_EV%F@86DjJs-U z2%X(uDbTgGZ+LHlc)KRVkenQ_b}`X1Hn=OQu6{FkfvI$~xU5pf^VXnqOHqN~ZCIxX zDI>;pfU`Go-t(8KO#Rt0n`-K7s$HO;&MUxl<4H0jqjZ;Ki{x@xD=I>Wgd4hX8*1XX z8E*U)2#0%;kAU5LLJ6OaY!dv%qt+7m4NDTKGOY2(7#9|HI_~{36M|(SsPo9KjQjVD zS;k2lK7Tux&WRs4{U(dLFkkY{l z9UAGQg!7;Vyn5EwJ##_bMp|nLJNb!~ot+&kkSL(P4*yIaHwG=2lxT)Emexw*v&t8k z)F>Yt+uBRE2VEoc=EBwTN`YdNl?s_tavLCU;oN(nmD@$vd+R&Mo_U$_N9`rokx@mrt$I> zqv!K{tC>Xlj}>`qzP{RBMmT1$CagT>A65$pa6jdb6?%gI8T0xAJZ!q z`ZtHp@LgJx$i~knibeq%b0O~Z)O@+~>y0A`bTP8JzJ9U7rS=^V=&(?f{67`;HwMhL zbAz%wJ+chl<8<>?E$kBEXXEaWN=SLen6(|Wpz3+%>ZrIUV2FFF7iDXPDRpx_ICl4F zrEUc+LU)o6``(4a5jrHrQgg$K@*8mn-DL~Gi321c!5RgL2OJ3kqJw!IKsSeUYSpjv z;)vo5O2hTQB9TC}=D>79*`s(}N$$(xhp2lLq9Bt*R> z(@jh;*OppouDTUjkqyM?MLTol+5KD<-1x*fpYeqi5g&nzudw3U@dWM~eV3TYr4j?v z2`14cZ&WrjD$)G9SO>4IV~a&{sNYl0>5}I;&C&+y3&e#$&8YiNYO|>hxBJ_3D@XHL zr=56Nm7A@Qf?6Dp3LMWAUF;T_Xta$gzL#_K3smGNP?#HPZBh;ADo18}n#(CtjCq9{ ziFwN0@$>n(TUI1CW!%*D3Lp4#>J@~fPq6W$O8n8C2vCZYgXoF&PuX*N9b?{-ln{=919B2kCMbaqIOYO_1 z(y(Jrs%qtM$2EGa%>4zd+)S)_XUN$Xwq|%v91h%LVo?U}9mAVW^*6w{o)JE|U%kg#EmF?R()H%3_%E_rC6to)44yxM&LCw>v*fJ2O$|hc-nQbV!vvp!AcS?)MqYA)F#&(CnpFV|I3+} z6y1WNk~b$okp`;ol7qh6b^b)ceD7p=bYYc~7zxp(MxlgW_du)_yEx=e1o{BhRbR)C zF*md?V>ck_AupxizEM;CdDWQGPhj>fRs|)>Ia%lB7LQy6fjqykv79qQQt)(Jqk7== z{ALk`ZA>4ds|Z>Zj#psp;*W5l8|}>sqrY0&+zff2;QN1%NAPqaC!4Yj)xwauBFuoz zuJ=Q?%^`huSs*VeWyWkLjNO2v`=#r?bZtyFgmu^{`}DwaMDN&I-CATPGmY>%W)#|U zu4-J()3L4I(iEPFc&KxvKanOe`VAuiIMtE8R7eq@PLLp;>^ak+E!|$jSlEV5!YVWb zI-AC5of)qPn&L_rh)msFAu4oq@hcyOH2!f|_em!rI_`ywea51XwPWlGj|QWHL;Ufg1U#l~yp$Gy zoglTg*nJ?wa^oi(_h%{FZN&^C}g=a z_J@>`Ik6nQ314}bMm>}Vz0A}NU$5q=GPA#?2qA)5*CYlqCt0oFw7@>}K z=$qpc@}#l}KGqj@517Vji1|!?6Q=d%H3nuAx~ZJ4_=1hXa|Ggk(G5K)*huGkBLCPg ztcD#X2J}m&KoPAm9zO#YtMTk)H+i1Fl)dY6Ey{G?>(!A9aJ%N$^W)pxg!=FF6@o91 z;_wv<6LZ~{wY}##f1~`sp%jpeYc)<02hu?#XQmnEeS$3FerJ0UXG!L!4iuNRznMmp zo8x>Mf=wy@6edxhJ!tW>iRvdKS5t$g!R%())c(G5PciHlN_M=GK2`#8izY&8zj3bjU`uigmJaO$ zH94-m*DL&Vn7M!lE+W9_BM-#iJrrES-`{()~JTakL<1#eCtf?aU`6h zU#8ILPR%+Y7HV6dck4~%Y#f@_JD28Qns2U+)_=D26S{1j7U(LynrVZ}d%G7GiV z&aMWFu#yb{e@K)`I!t;wv%H$_&^eh_sp6D&nb7MqZx|eZco@2DzPWL5V!ol@4e^QE7Rl>>w2|=1UAS=~&5=bq}hK z;a;JCgq@3D@hd{K4W6{OGEs!IP$MX0X0(HuSZ?7<4mRfMqk3PH0Zs zMS5g4coZH;(K??ge;Q6EDf~W8A-H>2qk<%GBfZXYwDy$0P=h*=C!6LA^T3B@Ckasp zqqG|J-KDK?k%ZJ8yif;Sn|tE}Bzfi^dD5#87b;XI!Y-z>Zyt8IVo8wGxrl8 zkHswiptc6GX=$Bb0r$rdB}*L$d6o&c0o3SoN>TCH#pI=vRoCwAKb!Y4A%6r1H+QVz z3G0t3DltplMEy}JW}d^QC&O-OY+J9@vw8QI>ON!+gBst_PVKv!h@ZIYe9c#eI`*pR zFhm!*Jf+y&_o&RZdDA*tCrK?29NYgozi*veBpG>&tmAk8_N>+mS*03UWjgpQkY-RW z8HqN|9Cc6anS!!hS1c3*+T1} z$@#@GD7Pb3FRJ2cPKzgZ%$qk$=PghNn-eZOeJM4>FGkZztx;i!fzgOy9JUlq?~8yO z$I>=R*90%r2K-S^rn&an=N9YX;mFBVq+8kZ$Y5%Cn41Sj7o>=XJEvRdwRXej>X~#l z46c<~IjPeR-EM+MEj7?`_K}4jgG(5dq?bI0NpSHdM``coQmYM3ZHgo+Vgt|MA)E^V^B3gGFzqiX~J9c?2)!HwQSQ(0H! z7|d$zJiHHkhHw_9Um)|!{S9(^OvaB!J>Yn@xUDK4U-asDR*omZ;$%kU=uKg?uiqE< zkn>8E&vPI`$v)&{T9i#gBubJ=SwyoI&y{Vz>bcI^FLu${9(5&CTx5X8$^4D=r89l} zR}3%X@c4<{-C1S6R^jF^N?Ye%ZciHu$k1BXwMW8YEIxLEfI~1P9O10+TW%SCWLI=5 zDW#;UK62gUaW9!X12y@ygfulUY5Nj0Dc)sMR70*Eg1T7ed-} z??LbC%cORfj(jY@me8waJe>5-)>gH*mv7nzo%s38B+&wScO(&hOYZFFAguD>0$CQh zwZ>Z0wM~Xw?eZR(an54+rfSk2uuRuvE5C8yBQ?Uq)z5zVYw03UoaKJfkRU|As%iG& zLjRz=3qiF0g38o_fdc*&E+*jNDD9#j)BEs0$y zCyXvE19+pdkc#MBCg&DU_zWfo*k#ws3<0H^CjpZ(B~$4{{Ps~2)DQ$F49e0Wxc9Cv zTZ)s+{0MYinu^=3uP6DtYVQxr93*jbaTer^vBrPQbqCSaL_a5_KRw|QTm%I};${cT zpXDDs9TEP75vBsfh|mrjT=EuX0rdDR#|w3(HseD_Q*>RTaG zaKZv}Q`>f32XRwNS;;zG({5j&f}w`#wK1frf@#-o{U~nQ00lHN)L20obt&!0Jj0xv zzZNGwNWQ~^WbTtKNC^dR#12@?;=k3hufVLp z{9n{BdxN0@P;ma-p!5$E*PmMX1-n-aSF`M7?NyYCy%e>kiAw9y;z>7bt5gt>C#0Dj zut4g6dhD{NB=%`uPPm&TU4F|BmI*se(Tml;AN#QsX?O=r=f4_DbCa2N?kxlUh{rw; z@L;)Q=?KN+ud(13p!Dv5t?T@A4Rk*!0C2Zjxtzn3K4bw`pK5hc2m<3*)UX8l3k*X8 zg@5}mUcf&QdwNKhmZOVX2);&q+{B9u!g3m|Z~sN?d80-8ID!5F;-1Mf4EAHlWV-IZNsE& zDno*8eiOp)726Q(aE~^GsF|73z=h2R%J2=6eFrSyN%S-%-izKS@O_RHk^E;nrxqQ=H8m)o_^X zyOSTWoPvPFE!pr{wa@$kYE^bgdiB%(7=`Nt1Hp3wKRy5t)cQTQY#?L*wnq91TNdRo zb_pMRdwN(`(B>cXWY>SMks|PaS=JjbhN*b~zFZ6O`@hRNH9UfdTZDy$4IP1|8s)-3 zLr(|cKw(2&IQhy(&L&E-I#MPggL>qQTVoym>Pe+ml@$=ESu~MyiT~F>DDfg^q zk+bU4qd!fTn*UD}(f*sYnx`oK_z&F{zn)Q;)~)sX zD&LUltQcsDt?m;So-)754e?TDLOC#x1d)v4Vy zjixeUvdwpMv(G&#HPG*iD*ok&f5{p^R-ipOT1|d?T5O0makNQ~d$WZF|MI3-TF$tX zt1ss#&=ntv26X{HjAQmQ`!w3&XzAqY`KfBZ{R^S8h9M~91vdH23|O?IVm$qLuKmzz1_o7w^uK;OUS!On5CglSC_LL(o)^Q5@-R+ znZpi4%jG=GFL3UAzmf2SgnL&0wp^qDz))u9J^iTV*?j^{`QGgkCfBvfU#1tUhpiz4 z^!1f>;AM3TIC10QeNWkL5w=YKfjnJ*dPKgt)(FJj<&VY0np%h=;9~~raQ&Pzc()l% zn4G$*^hHX7!XA((!*faZSS=1=Tl?jkcBJ@bqdCN+Q|dzYgt3hxziKw?D*DE~M&FRd zjy~;m!C}U#2m!M4F~hb47HaqhyL+~~ew6|&{58AMkzD>D68*`OFJ5KIsoV6Ek3+*} zCo&R{S5zd3OVElpzTfsbk5|N_9~U(4pe+IY&WM<_t>D3hdOS+NIq7wl9cT{)(szfz z`u`h`KgJ{6!AbK*Rjzq%d*j7w=tkpVQq%ft-v8>@OLBj_ijCt?YnnTGw8=vJR|gpa z-n~>_d7pMrAm7{Dog}p+Rx1OZRc4-7HP29%UPb@uQA_+OfsedN1mySDnh6H5Fo~le zuEkRbSxp9|jC_K-U1_7KXZS^Vm%p`z1@(-X3!iBwchfcjr8#sc8=WPUcQws4H4&gF zl!5@JOt&gMYERMZN#dMAvhxFy9#)HLh=13*KBthSTH*g;Xu%Ggw|;tLKaLb7P{v@a zRHis^-qNvs+Vy%)80h*|^~-Pf9Ztwt=_VlxdvjzeID><<8M;9tYk{zTmEp>ptkem>SztS4<6?&$c$E`~y2X3=pCb7Q( zK%2HE7=N1%{r_w__WN1aW6&4gYdc%itMk_}8(fi={XID@%waF%#)prwL?t_Rmk0Rb^Cty-u%S9{g zW_D@^`Z)%40y4K~i)x=j;)^*!?gg=~eg}A-|9EowY0~(Ar6^;0Yg~N!736XZ$>RvU zso5?ajH(3t+L3+7~YMYKNXX5nxsxCmig-3lrv>M*CM)zhg8m}5P zJQ@D?1wtJ5zwY~2-L44);6Q*f1fkx*dGB@Cpr`JOmXKSZ>cMk@7kD~g*MW>UnQ#YR zi`(T>_D_URl7qp`1S$wTK&)u17t8Ywa@u_)gB$D3Cp;N$ z)_Mg+&0bqkE&pZ8FF}=Y*!os)g00N?C8pwo;JmwM_lEhu@>vs_u%tvqyVo_HjJoeD zjncF;OpSZA`o1glINy*DQO2R0w4>YMQbp!GJx?s`&HWIm--U%Hr(wj#+G=y3`RUe& z&gB8SiCzD3!`t7$>6`Y4W&W2}r_?0S9Br@VeK1Dwq z?NS$isKcY;$dSSkAt^1Z&yL}d_~AigCK-7Az7mjjOEN}JQSJHYeIsdV6_*l&g{2%% zBIfk1A?7^6Y@^#&w8e<0`7A$&2XF+^=h+UV}7*0_ikpO zS6jmxy8o)oeII}eGJoPxr2B6quYUOMCdQwm(vv9bp`+z z7GD?RIXGI8UcCY7*H3M8P8do3(Dk3;n4_YkltZe(Hb}r+Ze)TvR;lrRx%T=pz z`Ii2X5R!^6Mo?>;ovwD3Vqk}&S2im9fbg@tHqO_hrSNQ%au8N+Msh0?+xV*gf(EH@u*6wbhwN@k9GXboz z&CYrK_Je+iWy#_mmZhM&^yBE=i8tM)I<&xoW57qO4Dv~gtV|5y7Y45t!>||cDzaiuX#z7{}YdyV;1M}ZKTS= zKUy=}AcP;qL_0*Wf`Iz_AYO5-Y@rGPTAusPFrpf@B+fczOlZJ;bqs1;+EiNe#Qj{0 zhQtCnsUc&6A2cOkIV;1SO~P7$6)BbR)A6}jH39@mLkIK#wAMdZ1AlPediDm61~&9Y zE>6yNHhRt;_9p)s0GxL;vvG`5&kq^d3xYQ_+)>sI?6#A(V2lW_{-0U&x^i5 zT-?{!)!R}*!B?S9SJToEXrVwY(wA2zUhKE{Hs$5=tamM9g04f4A3FNL>3tusbc+_n ze7lD(^*dZsl!~O@(cG`$MXOmU@!+!Rg=?7#jA?s`z6-Zb-r*hMeWGgdmjxPndRj_) zTZ$Rl3dvIU<)_Wz6^p0$92lFdyP8gUnxy!7zYTM2?HZVYg4m155?<7R&P@DXxm~Io zwzy(|WCgTLo7L6248juBFgnCCd%QK9SVrI~DXGMIA}cjoWF+<_ftQ-bbn1pnrUV9P z1a37Y!Y&+a>wdXJo3I3`oxeLMN(=}CNJE2wE)P90q_k#gA~VgY+o}7q($D);?pJ?T z92aEZ7Mr@dzgNbC8#_(yo*}$*WyZX-jCdBjCv& z>VzJdlq#p}R;p`AtK1Hw-sbD2qD-B7Su27-^xneP2IJ^08D0FF#Z2;rQ6Ix5RMpR& z9j95m^6rM@+SQnckbqQu7N!q%tiAvpI_8bU>--W77BFy-abo; z<&xNpS4BFf4`9eOTRU&`|6FHMFF8qUgE0uRxlbquSly zi%`kmo;b#!Ur!sE8%)!1JUi8Y!S$qvnMBQqXRz8Q`LTA}H*Wrl0I4RjEPd7mgMusx zF=jZdrsgAE=KVaG93soW214*We>Hi<%*%VwBu)jY9{($Yl3RlBwlPD-(p*C{HKWlW zEt<&n>6b+4hcg$vo#3P?es3nmBnqi;DT%`xJ9m@cFv3~_XjCqbk< zMe%_aD0co;3#XI}Mda&T;*j3>*V~6-hFgZYy`s`g-RCDphq`Vh>cm0_IWtBkWhxAe z_q8I8cQxBzl!vafr0BvOku-w3t8C7t2`;G(*v3uiG&BF0Ok zr1C>LGt-cEI#)x`6S)XgR)&?|F{O)85}x%KL*CAJ;h5dw^rw@OA;`!*XuSA9UypuZ zx{@)fU}M#j7+dBxQ~ct7Po9Y*DZzOzgo;rXv<`++Yz!%OVZyf73SZ{l-zqtLw0!Pk zEp;21p?2@9gkrtZ7%7=`dQF+X?Vk;@i_u#F>~h6)yUbyeUioKbcPIG5*G}{(rIuVB zyQq2vcKh|j3gGyEtXO#Cv#_&;SHXLYi*lJ*M&fZ0=kOc0aI-tlY%bK~mH^SWEl56qdpv z>U?T%PZNy)Brslv`$=6Lw{k`FWQ-pFUibbB)19ngX$Je^N+;Zclc|JBERYJ9S-ZOaUzrX2B_|{=;1VEGB*Bb7c&03Thw-cvffAchon@$4~Yp8 z6c(&+y;+&D&!@LXUkk1j$vHk*k9l5yIgUtj+9Y88O167e`w$Tq6V~8!P8G}hwDFjl zvsae3^YSrX`tXkbY3ki`u;>*zmDl9q9Dk<3%007#gkQ%p@Y_hD*3@u{$$8|MPc7q@ z1u^;3gWd=#TyWdka6mSf562H6(EjAt%rGn&F2@4yt=y({zvUR|?z%4abN|mTx|X*< zzHB7)v}TPGVUCviFeWN2&GgfvBJ$+KPeshBSCbl>lT9gH^ZonP()NXr<8$SmlSiB) zSf^^8TDN`dzFV7GdGrBl&CLht(}wpgobewXbI{85UuleNolxEh1LgdZ*2>Vxq3{sG8?9wEL>Gkq>ZizuyzQ z`J_MCtR_@^`Rbj$mEdV(k$uMvp;8k;rd{{5GPqE%g|>~SderW_C z2dnKMC>9f=nr1c7|K^ZK@kzta)0CXq=LW)-5ahFQThR_!lHxyN?AkCOsmk`zeDj#_ z+~pU$iwo}t9#V=rn}b7m=?*MVC<7FO1EkjE-yu2Z0SM0j-agFy|0Gu>%*66=2P}Z( zpK`Z1PWQV$t9TST-&7X`0PY9wv#uT6eP+Ldb$GXK~BmMDK6mV+f0A2`&?%!i+=G>3S=b%`)7Cgud|&18pw~= zKtn!0zM|0{2xE2u!?dA+Qr4B6FHt~rQncnLjt=yMKVO(U4HacAy&Zstz(3JgM6|GB zgs`lsZh2r^5?FocXwM2Hd(Ww~Wzg8P_`7A=iQ}MElG28Axv5HCE*!@(x8`z4FKn!vKF}Z3 zV2Cr~bF?R7sjr+YwM_Dk9|}0!+`3or;}e#f(TKA&nLWT0%54;eA=Kc98$;k_=ocZg zD|vDIagR(06EpYJoC~zJ3p%!KJDIU<+qP|E z#b$#|G_@eD)bH5 z{!wlv8ugO;^$sZXae{cS#zjTgh23P)$`dmXwaS;;LjHGU+db{RDa(7;xtFsbi41fF zS{Hwl1lqF0;+d1GIb%->Kn`R+9e9xC8|$w`P(D-w?|mM^F77qQSB9O0(+s+MeC16S#@=F-^XS3 zPxr@G{@#1Cx5fR;+Usa__L72qI1f)u>xNm9`G*o?a(U$}9qv_(AH7=1nYqQ;*Xi|A zb@WyDQukE0P5V9v-ON!&qrq#ueAu?^t?>!A{32YUIrdV226#u~9SGcpo( zZG;WZBWny9ba~j^yH#2EAmV6O%NIL)HwrJ=sYYS?26d|y`IbeBlfu6~RaWc05y!>j zm+HZT>eUuq_ww=J?Oqgc(PZDN8%d?x@>&@Oq03c`awI6kUkHmCx`yGy){uG94%_r9 zLP`lzI7dEaGBOl|^G62P%gB$vFMdnH-{XQQ*vu$gt0BH z@HUe3RwGN=-X+X!`%XRNLI)`pjf_v!KTEFH9j^66@fess0w1M%a+_S^66 zpIWzywp%2eI8Eu!LdeUe2Va5Jk!578QEi(y9s_-;@eTyg{tbZO?HuZ=;I+M z8w9Yx6mb!7Mui?762AyNJL%~L13P3O`lI~(xKmO*C)f((g)gFpT#&{uSOLq-#!7i( z%*QDPzv#^QQi9c~k?VYIn|98!r_pRd-V(I^BDsdOtlIEebTu=9?o*Uy2YfZ8Tkocm zdyks3S4QVU+j`i71)S1Z*b!rm2+>+5=!P69DnC?sG&JdzUvQaHPMlx%q6?6X=G2@* z!~rm1npP$Y6pW&_6loy>BK+^tU_Tkqp+i<~ES?!2 zEaa3bIu_aVK|VT7EsPNf5u26IzE9RPP1vI&H|Q{)Z{tT_TENz&uId?NyH5b1S9jd* z=hbde;}{@qL=nx`P{uJXj&v|eqAZS15FE|%9SwDwo&%F;314(@%NfXP%{a^LRce@|i_d09;qN z;2^f({pF#%wi|OEb|U;*qy)6G|9OR(i=nF~`$?EwB2o^8m^F)4pa>(DO}o{frQJgD z##h9=pNFN_sGkR5M-**VDtC#%632#4(elnejn2tBBw6CwhJ<~{@eb7lN+)L>@mNmi z$em%GLX;b&Ntm~+Xbg#F+$<64rRVKYT{G?C0Az2gT;Mp+H9L*t=n$6C{6+~sr;`Ps zh>4rGb-*P4^>B8zwUts`?gL$XX(a<6kaLz0BTJ+_ikHX@`?KWG%^kr&bZhB1eOg+6 zolTsDDuPi?@)YN|h(486inu4cEkAk+Yw6Ys{i2{igkoGi%QlXzS>>~j+g)&-NjKc{ z%mmVd9`21O6{%jARre4w({jB0*lOkpgVPPpUnKK&Q$2bLOYp%TbjU=__rl+}SIsGk|p zXnR8J5Nf>_9zP(200jSN5%?U#0<(PN0hi#kL*te6#aiYNwSV0`iO&3XdwF{Lw@gOE z@@AL3OBZQ3*z)%?0s-o*Fet~NWkN=i6f)=~7m4DH>0 zZ$09Feg0-qWxr^w8P7uDu5H4MgYoEL80_4wrtLx>J+dS3wYPL8MK$ZCd1$H|=vxcZ zY}TGe)xP*%aZ=V4(UQ=a39v+Yjx=p6dOqj$bk>aYNAPA`#S(LhZn-qCp))S@qV8H`l%MNhA=+xc&nu8tQzm>u*%IVjkw%YX2a0^&(~NR&bL=!N^DD}pFh=-z|J?J<%3w;$J@?Nb zPulBF*v*v{fkLkJ#t2KP*Eh`m*xCy-6(xOfUW-3`K3Xa^bO-4LsOp-vM%(hi2Q)vLjst4%)8Rzq%6+L9MtYYzYaZmlIP6p z0a9WcP+)C`oXdXv?5qe^LwfE+c>2exBkjmtg$hRwZl_Jtmc`BMsV;z>uFADlRYqbT zlmVieUe<~y z(k*W?^`yu?OFT6?G+E51IDzc1<1Xt95;Wtc#~W5kGm3>vADIA`zwLe>P3+KH-G0d+ zBJ3!FxjmBYO%gRxt4uoxgCZ15S_CE(E43S#sf^u$Xrlbt``w^XizejE$)&-@JU&`;~T7 z;+UdI%@_mQl3BmyI}Vz|bpB3Th;49bOgX--Wh~u1nvGWEu8?h5W1ZKcQNyy>m$h&f zs^6%dKixZ2rVgP$|D_*iw;mQs6Gt;X+7@aIO}uPm75^?3f|fM%3PBOegA!5-n*!A1ABhFq~EPn2i}VPDtMA9)#D1Lr-^KPB#O*g%opgcUoixK zuNk~p;cV4FY+R#V3n@r+A^70<($6vQ6SeXL`zoDWAEY2fs`s1h%o?{;bT1XVbP@IM z+0O};o2|vQBwM#F@+$FP-%+)a-9I{1b2@H`qM56>e|81I_&ckwPsQRzu}?p)&3vl zYO$Xx4EwG}dx!M&ozba&?etfa{ZE$5Twt~j!sd>DH||$_=b7Qw_R~!N&v&@arB-CQ zYV%^}!Ma|LV6|<}OQWaL*hN_u&!#W67+$ZYST9?-pC5wPwd(Cs`(2KKPch={?z1qq zN3lZE+DcfvzBRlD8|+(Wc*)!}y((~}uxeDyI-s3nE#Ttk{CoHpL^Q-)_!P0Qg6)6j zD!_X1|IaD_Vy4`nm@dAmHs?jrc?N=ZVN%aQgFnkRjfsz<$5&fS>Wt!y#R1bdnx5PL z##1Dea%8h;Iq0h>X_*A#|LaSoRK>eksh3x!7!hoU+T6(8kIR|i$fIZNRJJrq4*w>L zT;9MlE>OZB`}_S3kh4lr&zxFKKS$LS^!yn}=xo!+&JAC|o*ty8>}z`znu;x3=>bu7 zVpyqpl%fN(SNoU5_PalKy>bPma!QT(wVRG(l_oZ1F$igvGM_c5Hf{wK1u<~$n@VN1 ztJ>8FL~l$-gk}wAecuQL>jyKYkGq{`KewG{M;>!Km9QJ-@fN=|)b+ty^e!&B)w6PxdZ@=z)4qx^+exfN%MibA zU3&A2l7DFvS7!Vn z*ZE}8m(K@-zcJyC2uejsA^rmihF?J`7PIc9e|71Z!^EMQMj%00_uZ4(*Ob>DGe8g? z9c$_Y1A6t@gpSX|P@-{f^eJ@>_esfzXDLz z7@P4T>?n_Vq>BJNK*PUiZfWB%QqWNj7I233vl!FCHpD%t1u4Mf$ctS+J8HmGF)t+W z9k%}QRsQ?JiUG@F1hkbTA?c*f05oFo%B)1wKr-5!8ts);jwDblGv>7|!AH-Hw6O_N zgE6r)ov+QlVAj}L8s>xM?_oVH{k;5*so$Coh98f+@=Bl`ohOW`{OLK?BtbbDt!Ks} zhFz1<`K{@|bxit!Uz5kgHQyw$Tj;36l4HruQ=^15oMGU2tpjJ|X>06e)-X5yZG%X0 ztM|=(_!t3r}z*k2JXQ9p^2v$a;dcN>>+*&l=xj!uA@Ri$`oFC$(K z(Kd~CW1nx)jh9K}X8oU#>h$O@pr+PgQYKw*W00aY4zDsDz#YN`7<6dYI^eewk`l&J zV3rRkFbQD)@-UEN0rlXP(okrx_fSj6UE;)xw04yg+l{PZ=Q#)-cdYr+Yd9+bm+w3q z-b~dwbGfWQiey|P)bi3}valpSI0%fR;q+nL!;T-*-NO~b@(~*wenW{5ZxOC6$MfIR z%D5r6bKGsNB8tP=n`kPVQoho4$T+Bc$u;a}vYy|2j_tEOI%&?fZi-1y%H}wAH^3JT z$+e+tHBhSzzofhO_ABq(TQd%7Uu~tgDBmw_Pn?Dp5`LBOzdUA>Lk?piph@AiU6}aT z%Tz{(3wNjv`+W{l>g@gqV#J{fDwBvJYX5aH$?n9hV+nk{L;vW~$)B#1xm_6R$?s!X zxn&;Ciqy8Wq6rNP{8w{)Xn|fm5r9^nN(8$84Gc*M<6Q9eqwDFpl%?94x7$Lcmb8Yp zA~QEUHN9u*NTqo!8N$K2)-VFL4D1Ps2q$Y@t`H2&Rx~V9BS+i%n z;J4tdf}`czN+wD0qA z=rk^qw!q63Uh>1^+1~X`XB9ld)SbiP4T;_GLzi#xTfpyhzlr+yqgJ}r0UnLnTn@$6 z%m(4WK+UM3o7w95{=tRT)!N+hUe347?Bj28)k}|J>eX@xW9SB^=$%F#y1+1BNjBz+ zDxyM6_V{RyVPG$Vf5IT_nLZrmVI?X$8?H#}aA6Tl$I*?KA&;g`o?vlQP~|PL(stk1 zCL^!Eqm)t-5b|b)&-e8prQF3c>o+Br8;BZyp1jgd;c)Q<;gq1~MH);UDjPaHXk@mL zi2cyuLi!6spY9+6Ei<9xqMbj^Lcw$CCK_45I>@JiKgN$^LkXjh5;RL<9*i_ScWPT- z&e%wM-=Ume&lCSbe2;T;WfE?R`UCQeq>LJ@;bk`@Il{P2Om?;5@WPoKUP_;~k@PrS z!_SJA%}2`{I6MCx6&?Sowds)^fZJGaVHjY*cA+EhdU`e2<3=Qd_&bvd+Fiq@cy1TM zu@~8@*cVX8Xyl^=1(-V?-1X4F9b&mt&pvgE!RG9}@3o1=3Ayl6`zU+WFw5+G(f7(> zr5aaL@OKm-p`Ty#J!iRy4>+ELc`BlcZ$4!RSz{#~uOlu8%#7yTrb4Zz8is(^EBlJV zJ;+nzl)lR4SylIHEl>XNeK+|+EH?_Zl|@M=Kc<>CPQYq;UE ztes+Np%eM>NU9c9<;N?=Cr%?I8D*A3X20Q=zgoD6;H}SbQm!@{kfbp6lupRTKY*%; znj3RCW-|gDkz>bFMU7Irq{^Rs5Ed_c25;rn;kqfoO?#rp2o)d?bnzN17ofVQx;Kc9 zRLofq?@=K@xi^>wL?w%faZYcrJ&lB-s;oR`;du4o$?uuV8y{6wkIo=XHj&bqWZT6T zo=~YZ6}agFz}?@?kb9Fr90T}(c&=25=^}cJIV>So^WR^ikL{pJz(s0ml`Oz*={kORNV_cC9{68bH&diBF05;$MnqjFt@#N8Pov#bh7@ zRevXc>Cu(J&WcZVJ7OZwcMRGD)MqFi7W(MT7)cYxkUqT@nM+z=Q8QRuUM#+|LN1@t zfu>rUsHlEIM+QA^ChwYV27eJDpGW<~HPP74!jWz8u7bmObij~bzB1@-v%;NGO6lE4 z4P0bPKAR0NHln}OsVX!CeN3TuKH?Guc zSf1LqzJWqMPviJybt}xWenarf^#zi*p}?m(wpJ7?_ZZwY2_Dt9aY4``{~ZF*Wb_I z;l1tO!FHZ93`uJ)u_$vXj=05R{af`*oH)tFb_#tZ*fy<79&P>lRoN-2B$XYm*{!%s zOSKtCGA3Eu@5Wb4t2_Fn*d{Y|DIp$pLaV4^KKIKwed1fVFL~AM;|HN6_U3lx*EW~; zo9WpbpUf?-Cix2Uc@G8l?n>^< zGbHAj_mPaswHkPQY76jk2{Z4?k$TH;D~ocW3<8e*$oz=pqIf%%199S!IhGdXWojf{ za&Sw;Y*W4^=`BelQYFAPOM)5NC)wo_xn)al>Op7#G&&?~G7Sz_#q=~JK(~%(PdW6$ zS{?R}2M7Q=PJcC!Wuu0x%c=ssujQcr&lS31VU&$SXS|$?QB^6I+ms}%RjO{6DSn6= z0|wg`{aSBjo~{~h$|2BI7chkh8XNrwnG^c@nbrMO?h*r=6{8eEprqQcR{0lEmZG-m zn?I$STTfIGS&-mcgHT)&TE&i1{78~0w{ZSEPak^JiEz3cQomJVm6erlu{%obiaXtX zJlJJz>?TgF_t6%=j9ngYyW5sf_7Q9z^<1b6`3Jg#13%)6pw7|qLtujIE_aIXo^Iu5 zlQ@pA5~Q)ooyQ41Sto19TGQ{jHh!_FTgU`JCS~NEw3|5gUj+5!bZRH&+Jth}e1}~6 zHuP6+&``|;bldJX(P@0p5hSEZ{ObJ1e?t zk&^|Qx=A84RuQf^C}~A*V9vm;bXP3~&1RQLR%MlSPAPA(WF-Pr2awZNnr1PjKhu2~ zezIQ=<0&=oKGN^D5Zr*75Ug4MUb8b7mPbAryMjrtDu-)$leS09x6mEKzk!9cr|0tC zMuZoO-eB9dSK(KL4wO%^xr2R>jg6U7_oj`RYx69>_2e8aqD~X2NU@cH1Wh3R+3`fF zWtD%jf#iE!4zGK+=S7I{FHUr0F+U@Ch>g1Qyp)Mv1-Ss*7P2gJ4@`;v1nIl4Ehen9c%fh(oB;vqTknk_hc?;Kt)HMS{{cC4u5FfU_F$aAtwUj_a z{b%OP8dk{-+QuA#smn1@`h?k1%_fIeYX8{y*`kJGG^IqE7KgOZDuglh=jgzQ_zJ(U znZuh4(epB+gh}1u1C^Zp->0B}@s#a?$*nSbD30NDXvfkk*k-47ii;*FV^>1Z@?oKj z_ladwN$zXYw-sUrE(+*Z&9*HMF_;GM&+-Gd&FT1bFVbz+=)7;~J*dz6#O__ipGV%$ zgLN5FJFzz3TV(T{17K?BWu@xh9bG*gKdur?;WsE>d+hk-DE-50kE0jm@0;nZU zW$j~f&90Fj_vhwDwvFku7tPvLnk;x(x+aD4`sR(>ANqNI9~bl5WM{c1N|tm={^Fk> zztig2iVtBF%QQvzS}kGU5E;o3I@!O(A|=O~C*qQPP1Kdv5wpVGHQXb=TKWTp?Sbg+&ql^ZgamM1!5P_WLH^+Z?86vyQwg@p1?LdhK&Z-sfcxBW4!UbcS=y%G z<&%|tR#L&#K*V^#G$!U~BVp7>gTs4_27By!QLYbH2mckSFmaBc5)%rmX(a{fNE;sC z-5VD<{R|47CtHrSJ_h1nCL*oYBr-D75XaRZ*@j9JBwDSs2j$RiJjAiAjE`#b~yN zCFNuhUuS=ns_3WC>zm20BXG+!{NryO<+IH7+47V^;n|%1sqFqcr31MUarE@y>z5=5O7Dn#zS zKSwloE{LW$0Hytn1|0iFOq{#h3TAB|LM1fl zljcOYkr54!mBfm*)2q;&QmckShZfu8PHAO+e1lKgS|xuMScLU5phHw>i!zL>V00&# zKP^&q3-ETFlE^6O8zTdLQ{wSxs+!V3OD z8+Pl;pTWDnEr}FdG3K}M4`PW|BA(>%xjCejO`~tBEXT8F8tm(D6d z%k2f~v)-{Zd`)zwR5}Cl=?b=6qWetZ~fA>fw|Ad_K0-woj(hxx*U7we4dMDLkh>sA|V>@|y5PdE@9FP#NPPi?GP?4^5d z;2l=Y4>%*C_vn*;)#&eNqex5_;XV<$&tz$YV4LLyx&T;akFTlg%Qe&k{J({v*qb=U zEW$W}o^T_$KMn0;ZenGwgS8@SW7e2T-}>(80{R3$cC2W?Z_r=PmMSHGo_5D~MY6$$ z(8IXmZ)9WS7wZ>9SwAALU|tZL8%N0sJEzCo+1(PRuK#lef)RsD0D;39)63{azgBG) zd2NxQ6y+N5YA9|ZFHEq}3bpnYOo~~T&_?nBr;m$oMf?;4abvek@wLR0h#uPf)ysDK z$JcWE2-)N0)^;gJQ>U(bzOB8P{oOUeahp9s$pk+7KQ%T&BMX3JF2Plt`PwoGd+GpM zE6Hwb6m2CCToiaIuLL}s4DD6?PIqkk;`Q*ZlQUMFh@E+}!%Mu0Pn@v}dvoUI=En5x zanX#m(?8J-$=4Fub|+J6dxk_6{dE^S1)8iVkFGCpx5WG97`m^LnMUY-XwJou-h-LV z5wtCGY6P)Xiu+G^&P)1Mv?MDz%499zG7a!E9M;ZlDBFS?WWA z;TvM$-}fex51Mk?gXW$=@E@MAglICL(bU$=esA|SXtrpw89U(m{$1YxcynP!Q`JtUY(TERMga@)1t0SkFZ8wfHcqnP0RWv#M3uJ9g# zs`#Sg;F+VRqFJ`U)|@PO|CkPTqA1SK-Aae79q(+oP@piEI4qIqIl-@XN9leF409T$L`DGu2(}s80B3n0$MlF_v4d~f0oD!jEl2`62N~&6(sQo z`YNGA-@7ZU_c6NJdJyV?9sv*nIJ&8Ur~N#fo-d9M89a1h>QSHa`?_5>na*C7hWoVz zNs@V;n-#k1S{^j&lj9)fQ}iS|?a@XNnO)ChL->E&;w+Sw<-5?M-#3b|t=VX_ql+VI zNV3YmpzfU^nXBZ~(ako*lmf$9zk>=f-pwMcQH^XNdtRt}VoOykX0oh~sLsAsN4`rX zRX+3mHd%hB3*Phnj;J6uo?=$R zxCpT^Utia6%SAv zzW*onl6+i&Ib>;k)av|f8BY}(7k$zY-sy0421?0_+Qc0y3$3P;@UFe?yq%$XFo|(_ zJRPgaHj%JAl~{8G%xC;^zRC7}pD@_e>0*AdW~OUdKWdbj0p(#E4d2c}w0Dzu=G^>u z5+dauYAVxYrR9HN_O50odf z(GW8NZhl9t-G0aCYS~Y9ExF&?>qYHqTJcRdqr_Efp{;yk=h)XXNl=C;f&G~dd9=lD z0|H&F$ke6F2-#|CS#7JR=;`O#v_uX&e_2@JEWo8-j8HrOr+Cv}7UhqXP714*?8OG% z3LS<6DFBLC#B|mwgCbGV^wr010mHq)uBkcbrB*P~v3K3>?h z)9VPaCpGiOL}=+wwVpw)xk3INXOc!uOb58`U368El43>vPIRu>$Eg2{n+B#zm=8iX zd!Jc3bKt=3YuK7joP*_CTj7B~UHbsRE5t@(@IkT2@#{GRM+A!vnc({Ns7k1gK4sm4b(D2d;rUX@x@;0B1o_jxxid0G z3ZyD&QhaAQ1m(*y8W{1u&&cmlmM+e#cyZvYitdbANd&-*OQxOtWyf=lsvUlUrm04G zNDeHAYQa@vR5xxi(2x;JX+uFf9T5ZFIAG1|u5MmZps*!i-tg#HP8n^?D#|#S6tj*k zotmU!Fb|4|o>g;=W-wtG*>C~i|8_eFYY1yeO4hNKKt*EZsF1p`PaVj|;~tjVyB;ce zdo20VBhD5Rz7;<1W_`SVY@P4z?jLD%BeqGR- zTr8@*$ywww)+F5NNrc?JAJz{evoF+e4qL$YF$RAX~R^0JaA%d9932ICa7%J z=Ku>7IKZ1aFQ)KGd@JIVmlX5-7llPaC8`AFSdbHPDfo!ANJ?vx&=b;u_C=~Hspzf1 z#`P#Mbxp>PWMi@YZE1}3ocsh-1$#o#V;}hUZC^RR2ABJRB{UyS)AUG5yB*%}Fz}P+ zvxjA57alga?XNP7Az7ddwQX8Gu|X7p&i*3^_B^o5@t=l=%-f?jpdn+Pmx2!cW>QLv z7*J0Z-r|Uyo^b$jq6}3-{4TaJruS?!B5C@^6?Vq=;jGll(I6;ZYd&nadvf}&9r#?& zrBT%PgL8gx;a~jetFFs^bFYFWgfiEuMK0m>$7!o_gVTDG1r>=KBEJk3H`LX2p`)8r zF7aLNA%FhnY5pF+f#g^}U&_H{j{cj-0pX=^57Nf?m)-;{zw7wj&VBi0(_coe?TD$o zA@`<$ZZFGMg);M(e*Nt0AK%km|2FpahEEF@$d^{I^`-aZ>+mN?k6-iMO~h=C(oJ>` z@d1UzT*|T?*HTVnNPw3?%CCGwV zL_oPNgoOL=(WyZnMacE8zEpe2K?xKExoYo%F~z4~xTcX@YM6xS@P6z(=$u(zw?l!th2E zMP_9;4pItnb3J>MagC`W#oF%M0TBtFq?G%D^MMGil#j6lL^*=^(L3c>3wF10u*1)b%;W zPuzs^%J#Ja;=kL|+i&+zlzmHHMS7{(c^5QhV5Z<~Or#rBxwRe;r2Wi9I;B;v%_o#e zz=Qt1$t4H#!Lc?`gHbFm-E zPP7cgPkT=d_Oj8~w})?Kv6p*(F5%1yi3IUYVPrtS84ZS+P+*F6tO4Mp-x?m~EHWk8 zgX+)Zy+kgd$Bv%5LjJf3eJ&>nOrgo7K(jA9QSD`7sO(2*1xgX>NS0{GT54Ue!f?3Z zr^=!S|8&1XS{Bp;f6aXhOVJpx(M0hcHiS$`L}rdJ3|%wq0jUzgJaDaMEfpEmk$ThT zBBzuyM=Q=+RFD)eX#rR3D?u(t6Fpoow$oLb=>U*lFRf45AKzXbO-<#6t#;Y03mL}8 z@8Tj|;`|NYulEMI4!{Jtp8EdkWNgEJNDLYG*2*JeHL8p9R;e)Q+%&1{4Ax%{6OQmW`Da4B{p(k3&1X1fsyVmYGBz3f3b^$(DW7L zj4Ng5q{%;sS`4r#p!$AzkiOu+zR((3B7Bi5aZwl;?FZf`f}B_5olPCB%}tu(ndf+$ z0vdK$2|uvaUYod1GyM`EGaw~Hgf=t>{urFUw(|Lv8F*TRUYNWRi^#+an*pqvDKh_V z4yaoSYEg(Y*K0%rOT{dmCl9h%no#p5y!05SK!l!N|Dz3AhNV}|)(q5^ck6>`Jt1Ll z)#p7_XgtXa)OU-ZzN%QfTzafSvy#Z=xG<~{MJCAYSE0?eNV7%1_rM%2CHJ-{G>F~{>pHY3dhTSq!H7diYzmOahy`_|BBiMmqM zNZ1~a2*Ti>q&^$VK`g*L$*((aeBi)*ERv4vZ8LHeS{^mnu%>?AhYR%$1Y(K9I~pCTRU@s9A~VuxlD z+v)q4+25Fi?>`YTR5RQL$-SG$ecS@?ejM?Iv{az4)iBE$x_|dNQwTAt)XVR4hD#r5 zDXFN*Q^$bMkuwoW;_p~wI9FB^RGvNZ#P@L?BiuTPH;oytWRsXmlAW>uq*i$xu`CaO zA%dt~=DvBRf7s;5M(VBr7N~pfFfmg`@}b5G<4%+nk}-~WKG@IABUI0Z&nb%1ivI@p zGN!SEb%H}xW2iJp7Nosa!L4WV;6k}q&Yn%NI0z%ero+Wo8}XCvwAH^d#M*r!mlVW- zq3?b&_@k@r7HOh#GUCY%2qgzU{MF;HSILFmFA94kYXkIg{1@y*^oIEc_V=Y6Yu8bB zaJdve53+~0zeLmy|88z)6oJ{;!)Ii;GJCmtKo5hTPW%(%OT7MkQ78^&LPk~E5TZxf zZ7FgIvy|2)0Cg)-Deoe!GzR_KN=L>kpWK~9tgfTT&wg|cKdZ8!Z&ZY`&vh3ZzdZhI z5x6ehXPK^(tEoSKZ^mkVE*g{9bobzHA6E@seR@HNUY*nqEgfH2#UKz?OFHKJa>Bcc z+wV{>A#Q}`wt>8_H7P@eqAq#G)HqZ(p7Q9&A>*x`+k@1JmVX8u^}$>^V!QnN%SSYV z^8kWjae!eL&nTF$e4}8Vhsw4%w}D3go?z1Ult8InEW|g=1J!88r^2BUr+A>{t4b8L z*c@yMH}#p|rHz}T3tDLN+kJ0PyPF>2%}BY&n5>9AD!V5FEu1TaM;?n_ADb5NB)5*J zRdg)NGqs2L5LvOVT|x`04LX)>mP5;>HXGt9CwzZ`%=uuARIwsrNZtKvG8L!@D zo!XqtML|^KgFYde2vP!R|Nc?&ti53yh5!dPZkr*h>wK!nej!j#r6QVLbce$|QNxDr zGY^8{@HF~1`Ff+VuGl|3l!WENJ^-JCoQsKtigD2 z+c{Xvii?{6DR@ENunaE5?n-vDa};@{nEz8)3D?>$QG^J;NE9FJ^0;vmq>D1BD*eBj zQ!?Msa-AewD(A|xTk9N71)HSE)|gV8^nzE7nFsWjFrvP~v#CpFHBu>Ge699S@;d}l zx{?NL5|h+3pR4sVeWRAphYCTOIx}LSgDjua1&kt8HMBmEv}oj7jA1=T{_yT&w^Apf zeR+Tq5t=ph3CK{V_l03m**zY?u9z$&G1~U~g)UCw_p^BAN3;Sj;YfEW*} zN$YLh@|)#*4C#zmn061lWlPisEj&tze?r3LTVii;u;?NT*FY zmuU%Ak0g13$zPB+$L0c?rrBOWv1P{}eV=)%gfN}9PJA7cYBUeJtdhaB*y31DqXlU; zqgV_VjwLz!CX&?fv$A02p2`B%w)vB6qDg+9fTB^49IZTM8Jgv4Et)(0>ZlS17)lg; z+~^g-R9KoJ>ap@MeKh@FNNe2JmIIJSkN;to?>z?;gRIXY8)X?{ao$m~4tOX+g8@*8=vz6?uij;{6E#{b47$}@ph zy%5|gz&&&Rr;#user|e-E;4?Nw!+kt{dM754zr%i$HS(MHonX0TuR|yR3xJ5@OZgr zq-grkmYu!4G?)IX5&XxHQ*!otDN&P^e&MswAZJbMddAGO3+P4f)n4&z(` z#Nj#4v(y~<&I4R?SMS*$pa0`7U$VOoNB><=at!CLvg@FFfQh=x3({3A2ZTSLUj#m7prnDOXVg- z0-se`8a|1W5J{>f;30I1^Dc%c`7pLmGa2cUp0zAw(wuqBjKT;@)MM>X5}^(}62^`} zc<|JD?o~hb-7{gTf@Bx5=4f@qnct}rS3eZNo4K_#`I4&goPHay73f4Wbet?|B;{-{ z^SQ+A%P8J0OKR;zMS|r?^Hw)WQyanKkN&{Jl=DW1W-2`7n;Qenj4xEjHqTwVYN9S| ztk^*PMKPR@X8ZZ(oWqT`Fa{SA_|jpk3d*3)UUlVIZ#JR+^Fji)S=C>|u9sL3)m33j zn~am}Y>q1gDO1K@G@%%sR81qGdWZQwJobH%~6ach7P0|XFmPwvv=vC?Bm4wluO+3qX zUt^pNQtqx?g|aXB_|X>qF#4gLG;pw};*yO(OT4Rw3^sLOcT%Pk#G%3>>CAHrD%q&v z1DE2czKB-ILFkAtY9zzbSh4H@q{d85lpna0<4mY8CRCWvrAu>{P=Zn3oKRjnQSo4h zQf+1)Oy4$SxJIbVnQPIod!@-IPDoXE`Z|8@UhZz9Ki$|EJZ>0-$O!7l2t&;kTmMh=-f0*srU~E1Hl| z0E58l3My%K%h_bUK(mdn39R2-U;o{R|9!id`!A>5B+#CQcbEBBQq<5n0@Oj>=#{H; z7$DNS5new!oGsl|&5r-7L{mqy*u%(y^rmNAaqm?x8><#DKjZ9$hQaVI+z9jwV?#r!8okswd)Z=|e7pAL%0WtB>UG zSFU@KLt3b-El$CFsx{Fh)Qda#&?o>I2SpL@g3fKPpNw3{`QrmxOh!`&`;UmF_WY=C zYpfN*-Sv#c;EwppEohe527G7NsC&!i)hB+(!+{@bS5;e`|2+SQZ*>xVL~vek^M?25 zVaEWCVH++!_gS%T%eSE(ZZd`bGnXGITmZ6vxDdiVZmDSwYQNK{vtG@_vuzSZ{o2Ei zRK#bqkE^?9+hiy#muA_kZ0XMyOV0j{K!83g6!gQ;c|j9)Jv6<0*%?0eO{09d$Z)kP z?mZlTdX-Fn`j(!auRiJkpP*by^YaxglSN1@tsQt-doF!+{hhmwj6>1=Zml66fvKe)GmQo36+DX`C@mb1@*~x_1@t|%#;vjKZ zem6?5C}4Gf>gp%l?VvhO1`!+ZamO%t6yX0gMG||!VU*2OO+`Ds*qMFm1Lq$c%C+6n z^njv)A~Fm7EciLu*smo#$ImHGa0Ok)mvNjEHjx~1L{bcZqu3K@8=M!`kV&NevUgnG z@>|TTO3*(H%qLvl>l)qcpb-YyXK-NoA(9)MrMEG2!Gt8Gp^O{0PuN>3CZ2GoAt~_m za0xD6bWd{;SZZvx{{fm6Qyj9?2X-5$*n&Gky95%e3LgdYJ0YyX^wrBMZ$q7!sK799 zaCZdvIeqRyjia0+QiZ=yp1vV|Dx>wkY(+)~@v9s5^_!r}Wx`*<4pRs0!6)E7 zP#7a;vcR>WIiQHZ-XCo`<7HQ%I7_+xY~$w+J_O4Bz$&sd=w2}3R+R`|i8b8%zc_ox z=uoz{YcsZOCp)%n+qP}nwr$&XcI;%wwr%x3=XufHqrX2rM*Xd-g<4hjHEPW{OT=WI ziOy+B*-ul6oDYP@p!G>cjRZ*UPs(?O0{T3)9}$NCqom6{{I+Sd7qk4qm{P+`D48%^P>ms4>*$o0LPMr=xG%gC(!=|tZF`T98~XpsDfvgt8Wl1q|CLh~VS`fGkF+|H7=3ehp&aq|zy#Gh6xG-6!d6ep=R+{_zXbU#%val=WtxQO@Px34d8K z(oUFX4DMf*$n^NNd8ul_*wlAyBrA&O zJ@VB%8uh7u$TB-zMefaN+kmdFyG=K(8bsxNEftv8H*)oq_%8XsKX|*A^VH*>2T-iL zZ**%Z8Ty3MxmutetUL)>tvN|+n8L{NS^HsoKKbpmN6btE zMGerj4FL?{xq)`H2b7}lUm%b_L+)rD)L|z*^{kbhCxxo&u-y8d9$vR*J$*V01F$3n zLwF2XvVh~B?Zp=7Fc0(__TAbQ3Q7~|Ut>|IiO|$zRVci-x3v){P?5Lsijk2Fk29zd z%(oH_3Mh#RsE#+03aARy@d{AVj5iOckqC>5BqI)zkVeG^#we;N7ZfN-Cr6az7#L}` zi$)q_Q&v{`^i2ZFO2yoS%rg1p%=AKe?Ld3Q+R!^Hi6qvpaK?0Ois%Wb<6&=fGgG+o%Op03)04R=SXrj5p802_D zwGZYYzVTk(!pV2=cR248&8g7GCZ3~db7ljY2H)zOxx2f^4abS@JN|uN+^lc%EZ9wN z-=wZ~o;M2?D^_sxxJkBoi~ex2L}4>2a>@9Lwy32AR!q~y;tJhtovoZLU0vO0AYTFr zYT#!B{$uE&3zEX**cwlYl1O{Ab!EkoWMV1s5n|MsI}3@CZH=*KTCk+%1d~N5|0(We z=T1;+SWo+>srVo}l6E6cH{0H#s~}5^MDgHrvH?#E6ozwwyKo^hBKPoLYS}Sdu$+Oh zuq695s`?}o3Crng#*N0cfnMdO*{z%5(E^pOJ1YGG}f z1Kqr$bO`&EIZtldGBPh*Zm+A8giAnbEs9=U6hms#kNoZb8j!ea{@TqFmL)#m;E#m? zGF_v86_3@;WmZ+Pkl=v0hJtyZjDXA-kyMGpq!lDt`a3Z6A)ZV{ALS)=6171}^hAX^ zxhS`QVbMPhDKm1Z87to~b8g_VSDFoJS06AJf!C5xPVFcPexP2Ci87YH=3bF0(4`3wf zke%VgnNFYK*0*%KcC1*|M`jOh-;Pd(6f)8bC3*v&#hFs{37ifsT=4wdzc(&J(6eq+ zoCIu}!d>{sD|gOrkY3Dwpi!)LK~GY99HOOQB}m~_hAp}6dTH^PYEoD|0!b*H7w~d) zb+3_3hh!mLN>v(7yaJKCKThl#6$EZBmN-8!5|JrVModG+-K^tkmK%qPbQaE>cVWj` zT`uRT=coKZzdsDSsvhbB5H(|kb^^1y$SJA9f3{Gykkmq`OfZv8&8jZDx>QZhXoRj{ z)Te!IEqq8JiZ{p%2=i|1=Y%xfDY>I;Lnd4Ia|DCvW@h~<3YdyZ1ZhUhMm_+)7ym1+RVR7v(jV{^8Vlk4o`r%^hEGT}6VQ7xek{HeNL1oGHRJw=v+ z<k(3O$1DjX?@M2w)|ylQ@>P#{A>{a(5|DLU_(hKDZV5u|Egb{>!sm8GMy za3T?jiOfBliW>)Ak?gc{@>sH7olyrtQ_KFWH%Fwr!&!jJ0I>H3SOGLbr;khYCk!TUe!}w*DmZtH`{4sqk1QM!<=qqzCRtnI<6S+UDTeGwuW~s!Z5n3DFU*FVcLx%MORLL7e|;S z%ar_RUEmG0#!q=iDmB+*NQ*06^T4d$cxgQgmQ$IMMz!wKN}n6clDG9o%#%(>R`7+> z6}?dc`BrgI5P|@HOs^#`t@R@7&{%Fg!yh0Eu@_Vsp7OZoRcu!7n z*^QGD0cN6taTS`Ao&O^2*o8L+7feq|zap3~50Dx|`^T9=GIgQ3QF2La3y1VKFl|}5 z)x;5Ak^(j!YuF8Yx0>|?o~|PHOm6vfAo4?r2Q+%#gQn?(IJnpwp81xzc&NteJp=kC z+G3=WM6*1*!v3l@zPJn}s2-yRC=W#TQR-jBKV3eHe$~X*^d}s^~MT*DtMY zJiv)X%J_ZDR_3KaB|1xUwo{lg1?}k%)?EQBr%~yHo>`n5DN{6D2;lTpVhTxa z;t(7t(t$Ww7@ZW5^VWKxg%vL|#vw4ec&OI18%|v=zIGtj_fuRMs$b8$GrB+=`?s!g zI?FysDS8Z>Do9hCfOtd)(ykN#wI>ORHZjv=W<$vuw@w!TZ7UPGk`xO*YERd;LSegDyFK zFrCoR+$#A7Ce}+~NLDNC2!gtzoTw+_Ey3eSCeio6pIMtC`rUz#0`C^Z#a|S_@nO3m z4)W5*$}rT^L!nx70JrH*7iaq=R(^+<92oP01NuUuwGDVITWj#Wdp+}nJ=fa@c-7YR z<;v!M$&2r^yWP}xwf%6d_w#l!_EgQ@rreb4G$bL|GT`3z=8_wgqonQKQM}Dc$BsNd z!+9}XvcXnIi0V7x^Le(mrUK`A^K)ZQD^nRIuxUjsMrR89QwKXY%jf)%VPQaNuSA$U zNPK^E`hIS=rRVK=>vyqvC3XfE8ZGpX3*K}1^z2-J|J1NBAulfzT@wkfZe4z&z-i&( zSw|K86{}j3{??-7_c!NGgr~hpM?{7Pf=L2m8XM>sQ}@}H?VPdeS-oOi>&s4rufu$2 z-peluWz_7q#-mYa2ix2px`*1btbaW2G<_9p4J9Nj5ra$#Uydnq{EnSHe_2a-;gVO| z`-tK%MM?`ramU{!w%xQ{LPKypPu%V?e@S_L597`{WKGSqOB^yq`PE;;v3b;dX+5sB z%jQ_Hd9|56Xown#ChUHHT3#8EE@lU}b&}p(Z!3814@Hg>P5A=2+ZeK+LUwfW{Vf{P z0nGkm;y8j5onv8fNC6C~oU`g~M__K}@5Uqi|Ie&(q$~^BL}4-Ep3&-*h6xY)>x0^) zX$z1Y2t_7&FLF=Sqw9%lY+5vgS@O{0cIN*8F+k40=)3qHAWm{>-qdX9o}HpRYqu$k zqUvj1ghk?Mkq{rBi$dGKUYZ};XvrQNN@-axpBQ=I`NvmR?jQ$qI(j7?*h_d*{S6Gq z@gyDl2h?pC(cyrOe}8&4%f_5mz0r8K`=#f_=Vnyob!8j=WqTbSuTS5Qat|gZgxJ8L zGUG@QWHP2J>g$Vuol2gV-ZP{+K!ZFX;Vdk_**lmddfuPnt-0O=8FYZf(csS=oPTagqVWzi_X!Nlx}*RlQ?dBmnB-8vO9+Vo z!--}jCKPrBnFPT}6cTaVAMB^$mWSL)r-?Ntqj&>RPIXRkq-FVDAXDjj3M8b*1vifp zM^-0E87#*M4V8747}}ruwqFmR{b`yr9-`Fhv&76$O1Te9Zc`GZ!g?9BqlDu#5(>6B zYg9)*mxq_PkJjGzpKDD+$dpVLb@Cg>l2DHJgIVSx?srH=m6_ljl_n;Xs@uaW=x>P2 zuGFhAe59mx2{A+%Zpxza>Qz(Zu@{}OoX#oEL(wN3F}3vuc8JHB zAQdINYyt@01Hs6*e8hd-PF5af^|wZSxpB6G6~!Ug)O`p`oeZY9iCMT?LLvhRpmIqt zFw*G-p#ybm(kT!iK&6s82gfPmIXqMxEP@jtE>r?^+^(YJK&9fizb6W^tRw^WWmk)x zZEPrVwa{$S+8NS1?4qlBhRGadfrXXF>`=3#r^z7(mkl!wH0cNW28IPFV$eidneDbO zZmgJ&jO1uUOp=b|;%=VVz{RP;PgFc8sZywaVp)OBcecYf29E87tY?~DzqiHk{Tg5V zhj|?vw#?lG!&Y*i^QOyg6s&FpF$Pb>M#G5564oS(B7SN9DK=WdZ$~uGv&L=RvEy;i z>&=sAgIq{Zx8TG3ew(oAB_=;gj@*yi;A`EsX>0ZKJt@WbU8pIhDD!dfe5XG}ar8WU zrPozA88vW${k1o;8}$65)%S?LbLHK&rwE9DO7?k?b>(RPF@JnCV8ykOHoN2A`9O#A z$uGDElqL6H5t9G@pXmldxt8AY9-mtS&=jU&ym8$Nir+u|||j9xfQ0ah1b%}+quU-8_tv-+|f_8fo1Ce9Fb zLPBs)Ea*lAk9YI1Sxn%25g{o+JV7QR@iYdMhm4Usk$x%KhQMF@k~Wc4Rjs9}Qo?~X z=2HM{B8}w2TacHi>N1+TQBGFHP3aO3j$2b)zv-spgZ*Vw>%HuALoe@3gcrN}V~^I$ z!RP+TeAOIbfh^6Ta5)e$i7a9vRXUk$#~!ny#DaOIR!*;vyRVa{qo=#~9?XwGf)eDd z8XpI49Mq4%HHCbTl%uQ6u~NKPaKSm8+Yk}6E>!rw18J!_H=0TPtmKjg_S8WGb%2w1=;CB*!sv*TF#Hln1|J8%7yQ!6pe8q5r3pkT_LV zX4=EwiBq-cFmREQ%+;&QeT)~$k|QbHivUkc^R{f9!gW1wbI{!*x?G6IVs zvid6b89OoEM=*4&1riQE{CJfzktdSkPpXY$MBVA|J|-zLR8ly`B+>#i3QIo6(6d(D z&)XMWlP^5P_{2=IHC;MuY<}ifyyLXt-0wUc6k`tLUO(H<4FNNNerFuwHxr(UT)8Eo zLXRoSsq^Cz`l-?g70L829OerWs>VZCRUAP>)RJY4kFA45fVEzIb7?bbR=+6Wu6e9iUeUrj!B# z$774<+~03+bxr8K8^LwiPL5gq)wq(XU$TB_?R+14`I^8x_A{3;M%tF*lpf_os>GfT zE_dk`HO=G5Bnkyd&!>;~j%oDRu9D?UHHkE%$ilbRdVLe3pgna;7mr5bvc<}1VVFcZ zt9V*fCShV-#fxYB*zqrXak zE-pDmAofV4mr^`fC`z5dR#t!2)t~R65|a@L3i?vzwbCs#lp7|$|2|UMpUiy7X6)_p z<@|?2-|QNN^%-HtDKs}dOiW)*eC|gpNDV4k`iCQhH|H8IUO8iPXu^wW-c}r#FhoPF#Nz)wdHJg^h&EN1Vi~j)C|; z0Bk};=M0hSg1O8s5+y=i!kiPt)C>y#w!2TOg!Ge?@$qMXJ#kkKz~q(*ioSF|x(rS_ zgA1+{^<_hK-ShAXRyi>YfFk8pGB`&{(L#5c3OR4f5e#HaXsnS3|G0UIE8TRNX{{YF zH4aI9VXN9=^ez@JL8x6sX?V=- zagRd0oX03((r!YWO~HjqDf5cOQ6&iO&+7*vat@&yDBE0QuL<52hkx6EZ8%n`8$hZKX=9&CL^BaBjE zOd&&6j>3Xs(sCX*-~KObQ(M4HBx%HN7}M?*<;(ZJM3+-EjV)0otm+* zIH2GQCd!7CXn@)3Jq6k}(z>sVM2sSt%+9*PrkEr-kS47v01x!5FkJC>*RSdL5=>yn3hn7(<`$EYm%8isN z7%KR8yeTGuBsW47=qu0$$CDqd_s@K;j@JdeG9G5@?_1nQ>DmjUDHmVfjqdm=Uj4<; z*c+oWM6n)Q{~l*qmq?X&q5Zi@D)YI&7~1t0L%aTB=vMzlQs8FQn!1X`jV(r+*-2iP zja%%K2%1#yPVnYJW}f#Mpe=szD(a=(CqRz5)^Dl-X{x^p1{DYw<|6piJ zNAkZI>Pv3;tJd8yn6}nM!WZ?9^yxH%MU zU2UsQS^hF>$}OjXP&r(RP_6R+s|Z_@f(k6PRyb5$K>Ksk3jW#t z5bN=85%!aYAbZsZxK)DvPsWRk^*trCmf>=H&?gNNmEz zHpW~kh>BO^o`3LMdb-vzxrD`GmG=j0up)r>!{gZ%(IcRd1O;(kyPOKqZN)>Nfhv&f zTvuXo71#0f5A(J%UjD+@bkoW1n)_LS;jKbtL#~rBKE^Z%-i}&J=8dE~<;K{WI+2kOB?) zxJ(|Rj982s<&=mZz$nSotdM~XOPb!;5t>t!{h150VH{7T{9SeEahPN@%aV#4*zDCn zpIdBP+3hl1w`VofSTwr$sSDmYHx_r*ai}hDwI1bED1zcx6%+G9CzCVryk29se?=Y~ zDL7H_{`Q_J(Tvc;7<>eXKIIMG`OvJum~GtES*_fUlzqw{Om5Te-&>L&9tn_CyS~9U z8rs$ZDQp>B;Mgo*R6}~O)T~kN<-^TxJka$HM9Gj<=9C5)o3${TRpzfJwImwHp#H$@m74ZKaZ=bXQM-hv`|f| zrAfy(Q|=CW?%EJg4^>!qimF#$tFt7TVqe^b6C=0qfm)>W|l0b>t(662QI%}+iv?@*=)#*~x>dj^-KoOvU>ae$yu3Lv-vvB|F1irj$UCcPDIn$^~ ziV3o*3lT7)Hzu6X=z>95smgVex-1XA&Qw>;%WE&j%faBlI;xRn+mMKY1Af|1FVJ1( ztDcF2<92D?#?8Wo3D60j3@^9)z3|0}FZ{*Q+8lBjgl}I>OgmsDp8YGTJ*6Q*f3s1v zB$kL@k}{p}k^mbpO+C{A2%V_ZUlQ~739ObIZNK*5md{kPBnkfp6UwNx)z-NkHykUE zJ#V)r3%QR>+2P*G#o6*0VBFZ5Y1&v`l}08<$xbGw;-#!t(N69quB04*dqf5|O`{iQ z-srSdNf!A@-}6wETMZ03vRSj_0>hO!OGM_*Hj*8`BYQodU7sNhY%_{5 zOyG-M=1(rb^A4a}^fS>npMmTZ-h4~w5=}AsmDBm&RR8oZvez^EHXd$F&pSSUJj|c( zrEgum4O!^0Hv*|$ zq+z9D#dD(+$^viH^j7I@*gbj|C;y}ewt5mCmPz=+{fIKrA zBssv8E+=4goB>yLskvu!jjZ*z7*G~@3YZ9#B&Gl%proN#kdKT8f$SfopfEn5L{ddP zIX);!Iw?l6wK1wP*_s;jjza*@N+av-0r~$wzHDT`D5*HTUUa!R5Hj86@v8?^N8Gc| zoBuZb2pukK7s#K>Jv)n*MaNQzI&N%`$mfAQ;E zw#>GO;25cZ;-}}xRC8qnufu6d>bp7A%Lbz+6)CAmN@-8z5P$)#Pb8~lC)w7il~$#< zYvggmN@j`UiovZky!X2X2`Aj+9!L01hUWxuK**7P0UXHjx074|!~e6#6+1RUcGhZG z@NOhN-%iBUT;OX9rilyi0uUtz?Atj+h(OU4Eu`!@*Nqku^S$%m?w>?sq}%q=xo2xN z``;aV|AtM~&dO>>YX<_L!v$U11q%FUAPE3={+-f#9T*f&(}q5ebVQ|jq?c9y?XfVa zMAX`UrtXLXZsPB_BmeJq;lkbK7yGjFl;`6PF-}V|dPv<)N~^a2Y!}|eg84ZE?*Au6 zmIL7TPZW3*czp*TO6s(TF4>}j4t|SIkM+f3gmP2~NYXT59m?LzUXuQxg%Z`gs<@wo zmHG4+31w0|(8nh{w({S*Hi-Y%bYIQ@&&&YVZxS@^5Qs4}Q7E1RC7lydHz}*Q@ifgO z<|^aNAm}L&n2thfcsRt?G+5zEI;)e!rea1nfsnnU5X6Nk#fCR9 z0P;9&>mE>m&Hwi7zQ;7GT<)YK$_&LiOH%6i9n*p0%x15lvmiJ`VTtH*I`_sM9~w33<#*}Imx_fposnU5QkaNtLP{&0T_G}oxRahl(-Z8qu7 zC}eukXxpFTrNaOKt|yRJ`w(I0=6^dF2;lP*2N4Gm{|Dv!ZAn=$xCFUC9_pv5WbG}Y z_`W#d{22utiD%6PP1mK(Dw=M)1(2Q7nHqEwny9z7Q7My#%dK21NP9bL+FqHd|ZJ zbGw=}(e~E^zqn5-2joR@h;KRlNo6jew>$MXHp=DawnSY?dIx0Y{dHYy3T|eX$Q#>n zK5TK#B*?t~-zklbF1EHNj(RT67S^=(9st+4f2uM6WP*8GpV)1*l@uJg_md`B1NnCX zauHp?UHumNyFmLr!({|D1k|L|2s!vjndr783z|t}R)9zbTLeNP)=1{<8!3~Nd@LOP zNk+01@U}ISa1^ynhy|joBWK}3CRaq!Q`Cr`7(se=kTs16C7TN$&dz>y&$rDtkcC)mMopf>4cbRjE+Ze9 z1_sd6QBXMkfkKr!KQqu>>eNRyJ)?Nog)rWw4Pf zehnv?Trh9vl8Wu<>yPxcd*7m5m;c4@muJxFe9`6E|LiXF^};j zHJ<~ac%N^UiS!1MnJYcnmrMJ-PO zipC_~MBY*|HPjaYks1nW4J+j|6rL1Q%^d%uNdNTQj43+lX>HSoBsp~2qb6GA zLC^VtN5yB6!8^r3i_VvAuN-}e7V1*OCi-Q4mT6-b9fsu045(^66XxIN7wnr;jfs|H zQmCYCYLjYil2%q4^lR$y}&3I%pR=V;bibPoP8?gIY&+`FON1Svm(WnUp1`y~T(GDk zM2_HO<{m1^ICu!z7Ec5Yx_J|uoM&YaSDOl*QBmV=*2}57(A1fqcG;oCm6i~yNX{Yk zn99nb@-DacAe_7(+daaP7}a-E$>1ngSFBB01%0b6O~u&5SWGb#Vw10}kpBAu7!>QP z2PibsVA#8;xEAu}f3WfxCx90a%I_;7w(ye!3oYxuBLVe11Y(D04I!`S#P4tHv*X0e zNtP1G#4N4O;+P)WT}Na*Qg1MGeq@Tct~Hvz`v)9tEm|K8WMf3PtXrrd$2btgx2M4X`-^IU5O|~MWlPZL0Kv>Yg3kf#jQZ^ zmET@Q9jA*&@ATAumj%}VcH{kd% zLc_hpl|I56DhpckXR@LVC~N?}HaM7~m!PNz`wXBv@-(RIEK*5?LH6}N;pbB0T=tJh z=*`cAZ0buO*h>?C4K5)C&9m%*UAejRzuEx1b;G%CcHtSiP_5*`L!u&yaT( zD{~y!WQu3$M^}R%{A~5If4S@(FR!0`)sEGVhLK5z1mQHp>m?hbez}6>-ut7*x3MV6 zO_0Zh8N5&Co~PZ9i7^Jc+tFG?BXrx)3iJ8ZD)bA4$rKGr<5xqa6&Vt4?6;^U$sAGfMhZ%P896k#`NV-Gu3of50;!3I2lt3Ly_aEm_z_`WRKo z9y2!WWO%9{qw2CJE?+6V9aoI|{ss>TzC~UZ%-FE{JXT7gFg*zxrjDY#xuU{voW?^L zNeSFWIwKBV2Ijy^6&ISJA~tjNYyqc`@eHY^sNs_C0Ph+aCQK$dAVXGGE`b$PUa{X{ zL+jD}-_7KX5FZwdsHztb@_q}3Lzu>j!yweNk$@xR@iq?sBtEXof(-J z6zO{uf>sW{z@x#=9q$VRmClkw5E7&LA!vBQ@_+3Bf0?zmMTt>7aus1Sd5vn}K`Ysc zlvtfs;#63ee1;ZMMOC;DQ!*&KEyJ7-Krls`$9Gm@&c|i^p&uuJ)yplT8Wr(0oz-?M zl_`7*}Tjn{QI!uOJ1jZ$91VnOzGy{6E%70Z)zxzu2473G)e?h*+MsDddi z!KG(iZ;?6#dS-|0#p6O61^4a703&PUmQ{pfU|naBKF{UjV``Ick2iVHRB0G3Q)pYM z-y|d~a8!~6u*;4bcz(6bZejDqm>K;rF!LV8OB=>HV1@S*>v{$w!<}v@x;?5@X=B zr*x#%gq5-sj+Sh0EzEygN-5M-9bbMW--mWkNvwk~zz$WkRR+@keQU1DY1O5cer01gQh7A&WJVcb9H2T{t$_v&n3$D*ldUF zV|NQ|Jl8#O;FQLN8HO9idG{d$ZEAQm`feG>%E0JGv$84C*!|PHZI;be!C!1nL{hXl zB(EviDQX^MvWZC1j)d=ci&u|B-Fg8}@UXP)dUZ-=lR{_N(%5-vXBhnEB*1{$Bk5>Z zIW4!*5$UOST6rXY6b@5%`^t0F>;zNW_zG7+QMrWKAKqS#=CMb`25ku_)AJa2vH}5o~WMkq@wJ0pF*Sr0X*m4@ET1)SEM!a(;!?zhH0lxuRW(Ig4yO} z2q`Kg`A8)=+@oO8n}<#U@ANR!4ah|{3cj>ek?JxaY)KbiC_Ar^TW z5a8Usa2E32atCA{W3UogyKgQZs&cMfpT2TWM`gvmErz&0<;)jrse9EF)KDT9w#pPL zsq`9{90QyZoe1)~s;dsRp-^(5sV6L-xDOo6({S29upe5zENEANzQep`~*Y`j3k4;-?&Km+^ zUf#u8`7g&YF0tIV^a=*#ay7RxjIE>8#%&IfXWRPoZ1Jz`k@HipfV*-k(8dr{fcJBL zv2J5%+QAwu?mCU9?U}8u!bulLbxs5kOKWe!iz&?xPV->Cl12@%$zBD|mOc+i8l5cW zMiC|D2O8DdH_)@S(kGd$W8D*&nE?=P=p;r}O>)vEMMK%-PPM5lw6MI>cavc&O6dJ6 zil}vkZ7M$HjKLj@OAlv3?cVcz;^@*HSuHl)D^jY_OO(mTZmZoT)}dmFgsP&jGAc)u z75ESYHlaO?%cn(Lni&lo(HC(xzOCG3qP5)gVB>j0@2HsD-x+0e151SjKI;XU{T1OR zz?3g0>+toiZ|9c2$eXL~Iz8OYFbMo1^e0l9G=*)@31sm;Y$YLs(m|z^)mBGEm=*K) zNfj%tRk!iz9b*%Mu@1_W0y73VOb8_jN`fNOr{plAF#p>+o2!TlN=xSc@+uw;vTeTW zWC|Ij{ETFaZSBK(6w~w-UkHa(Q=&5wr|ja}No|~rPOhfDgeI~R+O<&?gpa{05E$O9 z5OTFiya9{AI@N6Ou37daQ4eO7^|PAs5IR)mJ&RZq446dqp~$)-`w{_b)NGJqi)Om9z0{3Jq1Z4ZK?V(DoZz1pPXH} zd!2I;vtSw^u8dAcm zNLQQ=&8&c+UbwX+S;I50IL*9h^V9>eGI+M^LeWh?eEGT56sS*ck~Kz5C$cqssw zT&dlm<@tdc=EE0JvD=NcTA|zPj;4*C(7m|Xrvdf%2Hf6qK(Co$Es}KEvggi&>{c9& z*plSQbb?AZ)H=>hl4&}2Vi5u1i9sh{aJ%|i;-6*ZE(iXW&}&K39%0yA6iRJ4QiN|0 zj(8npaC**6h^8JLF7KjU>@z~C^enZHub&o!?AO`Eu>kq7iK`*?n<~VE5jybu0xpK{ zT#`=LiqB|i&_ zeJzuUd5QAn%LXBFAx(d&ZA-CxlECfctU`~*US@gn7ZFb*F)=kgtljb|%i{Fj2Jn=V z-b?m^`^I1My6?<@JI5S}<)o}x1a4r8Ne9#|DYCD3@!=Yq*E>QT_?wNE;c3SWWf`>* zCP-YuS-?EL@B-%XcKRJGPaVK-I1Cg6eLHe5o|V|yKU(7WGJM;#v&=Uz^)q1Ta5MK0 zwdEM>!pKm)ZW?}qlt|CYPB*@V073qu>qIF0p~sU~^jk;AMB~V}6F|4vBl3S;q}J}2a0n*MPMaqrblf8CW%SP0 z);wAEj=?V|7%8USF^K85P<$h~H`e8SXfo?ACo^lVULwCzTV;Z+G;|4>Vf#4XuXlI^ zih)Aia803=bi&%E_?3^w+HpTSytk>;hkt(aN%whhy-IM$=yqU=CFCzX9`=fK{ffikVrO=H zW+une^{cYQQM*~y-lkM@M4P|BX}__T_MHmV#U;rJuwNF}+KLx!?wEy+)z{(t7tQT` z1o?LnW* z*UQ}pj;+I7a!}88+3xbU>ucDjd)Edaj~_zs0{TzQDW=_l7q$1zF7nADFdU+*DDw4> zZMU1Rg_P3d%Pf@NQtPA!cusX4IX0d2&sJ*47_jir(2(oRB8&8>at|2!o5YU*o(Cqd zD3}1(UQUPZYu2P*5Z?;?pjz67KqiNM@*xSF!TolOa2Vs&Ck--Z1dRk$V*^l7P|w#R zp@q~2m}G;(Z+yEYvshb>2$MAJGD|u!OoiP;T)s9Iz5aeyF|805M1P8#i(t1p+~C#> z67RhUcsxS=K2|q??aZ$GTLd0maD0xf^403=OOP{fI-D%N2mA6)9_H7o_Qb=VGS0n& zhdk~vbj^0|K6W*T7oatWL-hU019cVoX;Q8-3laUpMzisPq+d#VWCVYlL%PyG&}pY> zwarvWw2#V2$iWou>2^d~4%k(EEkZ}h+)MakRhIzO(BRh5mI3oL+_4RrytGi*dtPC> zZF%AR8rzZlR5kP#jC+_xVqAI@*ch7oC%<&MY`7YbH)UVH4Y}9E+r<)R>XbV2n~aeI zmB|7M&%%(S92j;)Pr`WT7RZu=;CRY7^2i>VpvTG^GA51PPEmeaZn8y*7TLI_ALa`T zy;Wh-KD{qf|9t&f2K@fWQj_bSR{sd7A5bz*?S`~jT~$S_$A{lL-J9j}s)@4~m~2t- z`ov@Rv0-O!h356Ra>LV50m2HaTmWBO3ES0r*kJop=T|mDv1M+xmlNwyoFWrg+DGQ{4JEt_!B5y?W7_W5S^6Komus}UjC&JVY zd~WBM2QgN#LK()lX9ANvyi+F1RUx8F)w`}Jd7}O}K|1@YU{QT3%Gq9HK;x^T0Kj$D z7*hqN)H_KW4V>UIN_Q#!C^aOIArsmfpG(2d0vZ*N`;Yp(j|R4Se7p&h>&`IGy{NPU zgz(7yElUAJb(|#F_j0d`+80jFvo~F!gmc9l zX-ZjB{5O{YfcNHj9}HZ$nJnRzksgi4<@l=UDbTRSM!wwB@-G@?Q7nPhC)!!?;P5-o zZ!DeAW==Xsg-;1Bg=5WJhQX}tIir{zvNGf51qq-Bjn;I6p6>=N*EOuuxos8^m%#{- z?9@Y7d?IJ!=`#SyTuX$IwmNG+%E;k%FYT3EDy%L(w=!S)ZvCi+sFui3e3>`X3tzXm^41fskUQfHwc)SAQ>;rJ}j_PEwqrlFGBRH`kp(Nu5kE71pPDpF%$V@%oG|-rU4U<)l`B(-qu}<@=wz&?n%4c zzxuObJvV%!yaJjrBCS=)WoPfYbTFRpwE^i-?k;rxQq!oy!sYHj0*@ofBd8#irC)yx z=QLs%gu<0a%;_!h%)%Dis{3an_W_xi)Yjq@bY^FT%)H#PdTD`E2vwAl6DTVOQ;++Z zV`_oTMiRy&smSqF-ZG*F05;A_Cyg*hkDs?6d{cxk#x#_pUsEHVwHn}86qz8-x&7GF z7Ozi!Wg-j|&N{>y z-7dyWa+G6T`I1a%3*Advf@1UCo9+5vlAvLIau0kdv~+X0dvr_ zCv~r~eS8S=Ogjy5lANUpR6^)V(sDe8)5C*h#RH^p?@#!>~)glj_<|_#EU>N{edE-_r2OVHj|0_!9U+z|OuH zQWUC5?sjzn2)Wgvwjh|TbWA1HWo{1DRo>)-8Ti?aP*Eb;Ytxl1F8sy|jN7N~I+gBi zEyVop*t`%XHAC-0DTsau0JT5O@ur9^JHm!qxfyl^I}UlzX<)p`+<0=Q6;})875}XB zMPZ3>v$AlOfu`C$Mi0YXvafe27l%~})GYQ2``i?bakco`P={=QuUjY}b(q9ivArk@ z*JTtVlodeCr|isrM7SGDYuuvWT4m^0VPEY>eCZ5%37Cv|`vF!?5YIodY{GZXj#1W; z)-u6>YegXsYSF?3=RA`_+^{V%IwfPJa?;Yyq5aHEZ|L8f^Tqwud=l@}TN{soI5bAk zTH@1YJ*mBfEfnpL=@eqBYgHJf>$xW<{nwoiQi9=$JV z7pWI*)E81{E&^Zf0$|y?wj*UlaAF8c7zrRE$;)H;)QHv>+?U0JsHjBx)Qv!Czvx%r zazvy7j=QuP1}><6*Sv0;*0>ISs9t5zo}L8^oajLgX%Mn{i6ks4;s~RTaYvL;L<|wg zGl(n^h&zHEgMIL^^jU?w97vGD zJ;mdzwR!5X8_@p007pQ$zc;6CocyT7h`TbI?|xS zaJ$1W0==6py71b$>AN*$)p4P~6`!;+jcjn3fE(B81djl9;dB z+bO=G%=uV3*-)A$MQInu94iM`SqHcJUck@BZQ5++k0$(k)q@{As6U{RWFo{A8xWY&e}vlr1bWy2fU zv-n=-ApV?v+*qAC4+e8b@YH4lzLT>f$vNLF?-(4Ocj1pY4!>?T(>-F8$i^W9Lf;$6hb!OiuXiI^@2rA< zwP-i?S(-hY$Ecay&RpY)1sARsz|iptrsu*5CpvC+X-^ftvS_Dneqym2BlXYQuQjoI z!bXB>&JdLDbeBiy?K=;TEZXh5UlgJe%BSQwN&1ano+L?%NK_4&abB<2SV#4PY{(Fx zM5UmlCD84lqy(L+Nu7;g2@Dh{ql8T6VK#z=6zs^b$UcSvE{du#nyaJ0UmB!AC||Z9 zghHV}6(yD(syJ8DSBlu4pH=%Ih1gg*{($`-8**ex?Y9KGw-tDtrCM)n8_9Kt>a!%% z_Sv#zS+XsAL`veWOs=H!*|PU6pJq-$R-gIdmzOn|Mx} z0(0W+P~zCOM=YaB-Ih_KWOs-9<87BZgtKvpK|Jbu1a>F*DLQ?#ra$@&-P^Pcr(Uu= z>NxF|_lUqaZF$46HB}=e%k)g6(b&_;ve9rUo9!KDPXF0Hp#%GBe$>TB!8wZb}RUj`Q^ zwqtJNF2SWOWJ>CWXOJ!1A+@&SfdBFH)FLcaD6RWDO{*WqSJTx%lC?3^?67u)t+(JTo?s zBf>8ixSOdd_Su<1R?ducxV1~=^4%iIT)(Q5HOGeNr=)2+;4tk?Za&l6vN4A1rm=0= z;7KjVhAlVaJ|dN@HcShx)J{*jWYSHONx~J@9@D*D+o|XL)57>yR}XN2q~IFcNRQ;@ zySMV?N^wn(F#<31+OF0HZ*~+l7fMyx+v@3)xP+o#SAAw|arVs1lJ6y8ykV6iJCnTK zBpqeHk-69rpA!zcTv{pIx%0YC)*(xwt$tY_-N;eLM5f zpit*NgsuxIHgj!OXTLcy*$MMQgQBfpLKd#pGQ1tlp$+`4$hjQOfPdC@>x!zz&IDr@ zC~J1J1&fs}pf&1f^nh=UWa*ou?=b4}-KCh6h${Vxgif3jcv=ca1&GKcKbMa_N44tx)+i zDc&!zd# zv4x1%06ZMaUrR29Old0>5OGWUBw~4VSt?a)fbL`s23|8P45ojcIMI0H6fTA;gfm@g_-)8C#U-+Ow^A-G70K!{xxKnlDc-LjA{dQnq!}%Y2Y%k{ z`t*6GPK~oaedP#SojTWf4Z^sw&Y_}WZ@vMzFcEeYfwo`)&sv7Smrx0Sk|+`^s(uO+ zb;9Mit%eD3t8LY=!W!Usd&J&~AUKO&0fv^3S&$%HOA2cxV)@m2b597PP+K6ZUBqBX zSjlzm0xf?r5Q#rO4@kywWJLnPXt66}%CAFkg1=#mz(=U;=4RXD7+1${`Xk}wn%Kc3 zEigFSo4RlUQmC*gcTV z2lVlUvN{P@{BY_t`TUcj(kL)YGmlq)X6m zL0`rr36QDuS9EX57~(=Yww7i;x$?Oq&=L3sWGh#%vXetEus;|&%)WB<{6^HOzB`iu z+~-Il!}umFpcsPXy3G+XM*k*-|7jKcf5zAXyW%GT;A-et7CvRs$)WZmutLc%h9;o?BY(*mC=K}FUH>tuWDl^rcs+($`sQ0*>gr>5#L+jOp z(&jD=&noFi_htc>C72`v!0f|2stFjYs_d^8rdf0D*bC_Gys!Mxt9?w>2YOQMk#dGD z7RK0*ZuYV7W?y6<-JE5{%{2S-V|`3}b%1?qah!dS9oYZqX02zM*C*)H?i6lAVOl{j zTmsYCR^D$mOlzCxa}B$Vk)w74cYwXK&b~1;%oY|W*dG^;vYo}LvjXK{#q^i>*&U*i zy?bm}h(7;+lnB{fO6-HwHU?6M+5aq_h=oC110Vqn*nce2Ng=abSzV9FOvq!;^wTFJ z8}wuI4-12=2D08BIt{Xq&+wG`e4%37mhBzf`Y*2r?pms$3Keksz3R_V!{0lq0sFte z{;p6{f~*ROsme>VNU5;`rs~X?8%es=Xa_QXP|~^ronTfJ0Qo)9aurv~ckxODRcmp zg7Zk0BR>eMHM`CG_1R#eZSngC9Cr zs9W}N_)}`O8uTV_q5S)Ha71y-30M*vGAtQ5!;`tzjR`xiPj!TNzKJmRt3h`!8p=p> zndmCZ9<+TBf{|9x5dagLOIDU(Thhv*?fj^(P;&mfD z@c|@=LA9a@&7mBBi$+&ApKu7h{!XACPjvGYPf_nz=&Mk9W zWtHruF=xc|e|3lHNr zX*>~Dqc;q`Jpb+h0AjK#>=-V;XbuT;BrUJ&((JQW2WNT6-zruh=5-RexQ~)71H~Qj zW`snOF-5{Jnq=+6jW240>2NZso3seaT}x-V7I(`~)5TrGVvyOqNPC7Xk4eG@bNWN} z?zPjC;d@pBH-r;Dw0{xx3kP`-_=fzmb$8Ltn7y zZWTxO|7Ci!r(cq?_b!dFt=zAN10U*R>|J$~y*2Zh{l&b|!}Pi1r-aKy9CH8nHSbU- zZ1k!SK}NgbRWZZ_zLROUdzxAD3Gmg?j~OHAA9cLp(I17}74;F1-Ei+^40w~9v0-m- zV@AUFhCPVpCU+A^q?Wi|LfzYr&mQm9yJoBa7>d36&`$7HSkFrzOb92;hI(cBsmaQO z8nQ3W4ZXzE%!BBR$qAs{BefmF+NOTV z6|818ZH0Iy^yQp%E)z63Mae$;ZV5@9)EX2HY`bA^0ubd?s_!m#y$$(GOo)d+`4z&U zwFj9H0rcmus3+o!`FQ7fX8^1c2Nq(GgV{ELNCbFz?w=tjK`l$kVy33p)$5POlCT3k z%fI6W?7_ZsJ2A7CDJ}>nB)$a4sUkl16&Vf-_b7|jTSvT>YvOXVehED>;=UAb{5Q{QvJvf0|n>%Pfsj(zKVR%7J(8`m-?ffA<%Wku8O)O3N?G1)7;!1TpWyb;(5=?OsfHcjo%FW3#MO zxA||8fT~Q-NG;0Fg!rXw^U*EW?kw?pa_7#0+K)%8uJ80~geuF-OG$;q&wI-Trr3yP zPrWTZjE0l$is#E&M8FjR6HHDH*l}AM82pSgJwFG9-kta67gIZbs_9XvGGOo(r^Y9h zX6BS+=Eav(7C?P{pZ!AXJM($-HZ{CF;>`T#c&2P-JxohRW=?)_enCbh*l?!8u%wwW z;@q;$M?U+j7zP&2SJ((uS(KVynv+-*pIT8+lv-SznV$y<0t42)BEKz_menoKX!`zdsnAMzWeidl4>4T{=z%_ zMFo{GwWTHbMVX0^VEfNkVfsz{&+bae-%BRH`?=*acl#`$I&)J~h0=l)pflqknIImR zr9f$`w`$eB%RZGGE;g=ATNS@1_~e)V7yx@gm*nCIg*kYf0fGR1|KSJW2av@S9`eyy ze!0d~*9M5UWvPT6@$_+9k=b<=i%t%=!9(=L{-ea>g58+Gd7g6&lVSn56wDGUT!~D^ z-5DcO=ip!Cr_XT%s*^4PYZTbibf-f5U1!N&i;_!}FM6kGS>=&weV?fd1Z?yeBc$~$Qzi$&U6vuTvF1PQ)bsfN<^`k27s%K<^`}&_@RK6J8Ivqu)2=~ z+3+v~*k^&@^XX#I?!Hw%<~-bUF$Hr02nS4&iaI4gUdsb69QB@-LDbPJ90brHo(CIR z!65;z2<(`s6V`q8S1=GRP6XpeN?IVmn<#KR%sH^CIg+>S3i3r5;Jgt~YgKS(i>>&A zFxp*_9Y4r|X5vVD34}t!B^6gc&(#i&3vO2_S5kAAma9M+#kxxF;|i$~ovup6!BrG` z0;(*iBO!30j%fLiV`pBjO)W;>QoMgW$;^&zkV``o8EwZbqRqq_xdn3($no>HILHD zoqayM8tr9Lrv}XA$fwzf)(Ox_z)>Z_24fyZ^xqijMyT~47}`gu7M7LTdKW>uNP)LR zPb6ungctc?Iy-Zio!Mk-LCpgeqFInX&n^8We9_ue&5~g@E5GIj<>0`x$jyzU1`}`= zp?Cy=^QkyCDfi9~pFYf6vro!*Il&HU&aN?%780H*w=6jGi3Pa`d^-uzmx#fBQZwhu0M8;Y zLv%&!vB%t(*41$+GcB~yAYylQI$U;LY zZ4L7%0xeSn5;VAP>O1NLC#+e67`d?uefAIn9*zcMB`wV)G~hml)?fqy#!?|54~Hl0 znrwztHRnTMX@J8zZ#NioKiaq4>l-WXPV17p*?BXb z`E6~^DC$}o_ue(3*7_vs{5Y4W%q1vvzqMfHva)?fA%V`(gAn@jhA^?6L%WNQ7K|u zUBwemPy&n8AZHOLyK@N)?N;*k?Nd_h}ab^-gbk*fr1VxV0qF6x?)?zKfinhwSw!g$o4#7UlA3P7wGoRo4zTfx6Zskg6M@O?j&rkm5>&d2L zXoFH&ik117)0g-4mcQ)$HFNjAma=TS*I#iFUX+j|q&S}~00=E5fkBPw2A|*e#P6%P z$GT?h+SYo}t#7{iYaSv|e!`(>J|IaAQR0#n9C&6^ee%_Vu16CC=SHNgNgPWMQd&d& zVAkJ|hl@u4753_OMUI2z`txoj3_;)mR46488YOTx9|#aBMsp+xEuu8I!fEQGoc4}g zoexe#$(MLWb^q9PS&P#khGq*ff{S2~BN4F{ba;2gIw#_|aS}azrrkUH)i17}&wB&J z2;NvOpFIATYV?luxNL7BZDY@N+A-*%=J+THcr-!Aaxf%T86(1%Avh0c1-;1U-1?OF z+kKH_ujk^fpT&pQov(cx%ta`ar-{?NcV@#8#q8E_MM2TX<$_?|e%}j!O4@7CI&l6@ zq1}dA?spxk|GGFJFErXLOpO9uhLQv>1~|=@#2VPMO1eVOl;BeoelUKXe`lMRRqr+~sDAIy57>ppr2u%Z$EdrQCV`xf)UsDIM{^_Mb zizGqftVON&|4}xEh@@cMFg7Z|#K_^4)`w|Z4u2Awx%|eCqgnZ52nk6DNkCB!8f;<@ zyQ#PVSQ}Xx8(zA!aQ2MB@}4mm2}r5dQirwuz@vTEA$euCM!^|F$+^d_l#W3t8c4L& zxLSnDB@;$&Y^>qO=G$5f4HfB*+-At z5{=_R72^^dW!vaw*E03*r^7={U65mG9$ghqH*MA@f2T$k|RQJJ_bmw z-QGDt^Bz0QT)gVSDd%Gf`9tc2qt{rNN%DK$HE&%BV%S*sO`eh zNI^YxHUNe2VZap7=AqW=?62|ei{4Lc^^RZg{1@3>^PN@txLO$YSazbvowMhivR2vB zON_nQaEUr`0uYo6jaP zHRO=9yx?94X217IYIcY|O#uw96^_y-rId&SLJ%WigBU~%-_#UHRITf!E4jA0MOD5a zU~`3g#}BNO|LY;9ptEiK!p}{aW&O^;VgHl2hvi~07+p%Wc&LMKvJr91CUKVF%_{Iw~A>kkbm=KNtK{0sHXyCvaSO0^e zeSXO{)-Q%l;=Npkdb;&tXbJ`{)LGKgt}F<_GfG^($&5NR_p=3!9xTNneMX8$;Y2j9 zEd-6dfh$PQh12J{)9$RdjpN;-%B$;#)hrX>xT|yKZjVFrCRtoh-8g$$)A!AxMNXE3 zZ*UxVi(n`YV1vVxLR)$r0d_v-;+Eur4bOt=GOr=J9EbrtDXqK>byu8&RcVn!O#hKt0ltY{;fun} zru#6>ta@Fa8t1k+89HfKLYT=<+kCAiPxyj0DWN?mLDwuQmMDh^L5pBIl}~cS1YfGt zAqNAck(W2mX`hwBXtxly2p1kxcT0Qu%<$w2TtBjuV z2f8onan$Qr;b`EJ2pOvp>SI=+qYLPol@R2DV&&&#p{J4*Iv|ISBFffg3jv&gDDMry zjufUlw^RszJNnMq2U$%Sd%m5@Jvc6n$^g!Z7QtUIbnO|UFyLi9?(a=q=`>{ZDuF$i zS=l^OmscIcY_1e8LlmO15;*NuvI{T*(H`g@g+{C{X$+p6)MT0S9AqwEYZA#^*ea3V z`V5NGa8ha4Y|UE9aOe45Kc)@Iu>;*dSB*~bGjLo9f6P>cVqp0+ZpD^Xw}ms?xh=@W zn%U_AeQ}JxQn6Sm?AtQ5eOcgQcCF#`XVVp1hi*CNzgW5xs8MB?!f~lQ>XiRQFg1L& zHLCj2eM4NfJ?V^h<&wtYaMKU|0Mh+R_Tx{pvPyWId&4tVWI~QezqF@a+sqf!EVN(j znbIY)|M;(x*%KQUINmeNJ}=5<8M&-I@U3pJl;LDG(;hPRgAg`VuGS9ayf9MAih z{~=poaxJr@$hP_A`?IEp*`839m0I6Gpk8GRH>0ET&cpZKa1SEuBcBk_V~3&|L)d$-g|3N%{4NIE5395&o`~` z^XsnhSwy7=djzaC`7MX4*w_-T`0#F>L_WtEYC8{^nOrHCoT<_=rCtM7HBzt}AJDb+ zyBuVr66$a6F;!`oW1IIuG{wen#q+t?8)`B)X+>S=WR%T%Xhhr-YlBYdbdQRjw& z(2LyLMOW$*uIi^w6|KB`3Qe^ITy@ibtGJEJD&I1#)>gcb|2BKYOqXe>icJxYUVU9R zF|1GSnAO>7v$ik$wxz@SYc-l;M0m(Iey)G4KR+!aMeylE`7O$~bLam*hpO5PVRYpy zSjfBVzT}uRZc}MPAS8TAMLr&L&i&EfJ1Z7j4K9nthFtPiKBsfYYht z^=)htXo?YzW=Ltn_}1`Kl~*5{YDDNgtG0E!n9loV$MMG-wj7tU zGU+&>H(7zrLgdyVd7uCCook{dDkm$RFL8Onxy}&)$D{q4?G4e(B6yrzr+YwmLl+aj zo1>?XtBXQ#sFQARh-<*)nM^7IXku2A4>Fo>W?_EJhN1ePknm(VPR_}>Vvdt5dF3`2 zaWykxYM;Svw%MAu0MoLALNb$&^QmtB&A%N(a`QoO0fbaPgqx7&Kv2;-n zRXHuF&>~f;v|Xvk$|V!906VfBSpI$OV3UMR0$Z)yQph37W8U*+r|QembMbiP&pF8Wa11@P##r6$+13=k_lf>bwqDrk#doroApm%04b~ zJ(5?oah2Q9nxpIME91?Kdwbv8oBuCg_k6N_%4_2pzwPak^!nMXWx zovY1!d;7z%H-DBt7`)=#O!mQlj9m5~pQXP5VMo>6;S0{k2zZ=Z$b5%+LLj@7tA}Hl ztJTB+IYGyq9EGCP!qUv5)ZEm(l47n2fs^?e4RwQET@@UCg8i+ylob@T6f#Om3as?? z%gf943Nj0HGxLf|5_57=i}dn~()GC}_=j`p7AYhp7H1~wl~j~~I4P-RsX6%taBhBb zF^rv?Uz8eOP-$d}E?@=|$STgy1G53w13C!n1%MZLoV&w(n0Z2(ieG+FZeor?X>nqD zs(xl(aY$DP!(hCxcic=NrY!wXkjJS|EW_re4 z#hDcljtLh456vE6;sVa3Sa_W4XSvS2A&rsIVsbiTjEI?@Ay;yKS!z*Yda8n*t%9+h zITrx3L&py0BVyD0Tz+(Y(;Y}aCrbxCDj%HNomgRQk4usxO2q-H2hLA zFfcYWG$3?kb97&6ZE$aLbY*fbaCrcBZx;0>SK9wO075`!YH{9=9ifSnr2$72$NDm} zkfZc8@Sex;*2bo9V`u?Rk^&VJUD!nu^{A#!HG=0r{La7eUM{^QlPLl~6gc_GDXm(> z)S{1dZ1X7E{HOZAfs=g#9TX%9v90vx{+S|OYhPCu*CX0!Wv7#_0v;5aSy)E1y#B6q zgEg)Ujpwb*-C)a;t^yhvGA?j=0D>pP#*8+bU&3kBY744C#LQyl<5|CfW9X9vz|LlP zoXuF>Zxh)SR{{yi1PGLT*d&CBNw5dZV0*)|>%>4HNf#ADVWG=zY7Ga{cxT2W zVJppc`?A`;EZoORt=g5^hpJ!lKhSEczEqXkRo|+ryQ=!M)vBfHQy8QA%6ilv#DZ@lHNk?VHF!jxlNwuVu>tni1 z>^bt+=qMe0^3Fe|4L-*ks8SO3x~d{wENOaGHch0HiItmL;bB6^5z^_Ih*Mx*%c-YNWc&vnP;sN*vAB%b8s=9;1x z<9Ynk{^6I%EW`x_0*s5Rb){02*lfZko(9VHRdC>6!Q;pJ@CT7`d~V<%{$*qc|0!~Y z@Hl2uBDsD`>x#KX5&&(~@MzD4=Z`4fCCcW97tau`*h28~AL8q0{DG9JnE^*hPKyN@ z_EfPY?8diyU+M062V8I5?tj0FZh=p@@_x%T3472c!rqMLW{tpzt*;?9#x=<>HezHT z9phYqA}ZNJX{l6K?GlgxpeEWdg{&(?el^)J>;ZfI>ZTMZ0R)TxU3?YZ?y#4H;93gn ziE^<>N5Bz9Rcr?+hNRnH6x{ zX40i77b`1|Z0m%PoV`RUCM362F{wX3m9$?aABr-b;~wIP!MjhheV99O5SNcGC7~t} zfQX?j$aMo5Qb|@SzHJ3_vROBt9vH{p?AJXQgnOn5MAOu8Cxe!~`Ctx^obs7ThSb6k z6phc}D_j|1^bPp*@UKUsu*3Rhd}AW@n(Sjb8sEYxPXsFBKX0` z??UshH;zVL>v9GgZ$-b~jSq;Qn_ScCu}WCs%5*Xm{k+$5ViK{vJ+DT2c~SwXSRpL`J863hC{IaFOaHAu~ed%P7lyy)pm@ue2oud>r5g$b)G&<2$PNXrY5@` z#o4eD{xBA89FPB&DSn!GfgY+8!bjZ)Yr3ME31}76ve5YF+4L~}?7%6!JpT)P`s%aB z#I;QK5XTiDXAS-?#Q!E~rSE9#`1X~^HF7LKbHUf4z1ScRDn7C>l!d=k zMc3AaB>zHKu8d5@L{-|kLAEGG3HpBGJE%ujL2D&$Bgqr5sH?%maICM`IP*4Q24pKi zn+01iox$H&h>r)nsH+cEZC!Qzc=D5xmx+=j-CO>`@~zjFrE9lt+`G9fNx)D$Fqm67 zX^}Nk?fp;ZlWkqkg`)io}qHM}(w`PHTM@|TcWI&{7 zIr>3CPm(k|aKBXyMTHhdEue&LKFJfoc4C>fVwPjhcOUn}Px0r@@pl$)-@ATi@zpH< z#Z7ZfQ#0a4Uen>9tw8Mawl#7c5q+v`EplEoyX7or1=b@mci<7Z7BlT?2oq{kK$w(V zw!HE|!t1NROK?2h&;fB5kChN~pKwx~mx;?F zdxe%CE<0&or@tdzp1-hb)pUxgTD#HRwa4icTb5mEG~EhOnb|#+wM>?@9JB6XO|>u6yr46enJ(dc)x<%OF7HCN3nyd!G^#HWn6ve1~H%8P)+2OV&=Q@Mm$jH}hAvEok6E1Xw#@AoNXB zDKQ4!?B;V03U?@|LVn}}siM{qoxn@8hwp^h^lg`&(CTeO0biLNvcleZ!D?sLvlI$j z>)@1isD4PdPAQea!sRt(U52K z*ntdEA0gd<`Cax=8#TCa+MiSFv1udAnA@gX63I7LA$t(aVZYud>P*!jV$euBDr9~ zzJ`^E=N?27_Bm(HLmN!!oSV>8GU>_*+`j>uE1yf^8G@5Nc$|C0(Z#ud(fY9b_G|v4 zkL17C?cZ;5Q|QX~c)vS_1_ov(CJN3Tj(+a0!Fol-B@903l}WP z`;#_%vNhu=#l(Vwvee4_BE8Do9EQ#ZbF9}1oU~r1Hbp(?#hJ#O^%txs|6??+S1pb2 z*zjxKQg4Mb_mo6Axi8P@;xsV;0)?d1jKs23ljPhK1BQ(D6Q`7HpJ=f(na@8sukHscG^rl@44Tc(MS;h{&lf5Ev?K>!9g51{06PSJj0GN$g{pZpF>WOT4 zoUK-GY#c`w*V(RB%iu{501OK5?WRMUI2tkFAS`{}YK`Ig@@MiCi z@6wpKi2ZVNZ{GX8H}C!4n|a|z^NT-i{@UuvO~jcnx#elZ;DU~rtjDwMREb&>DHJmi zRTL#UT;zh3Y{NGhaa?? zVdD>5!Fl$sNoo~*T42#=CCId8a2@dl8833ZNQ7gLGK-iMJreJ;3MLoDBbp`+4{8oF-Z%-`*xN`ru zLW3{GVzA-)dtlrBD}yVsU2V{7bOs;$IE}z(r`v)vJC3xpCy8KYUbSe6C6V-0*cQxB zXM!g*C$j0k^wx+=u{2D;-C7dncXh@WBOtb$$8-+~NOheF0iV0DI@q{-Z7ck9dhJ$e zkxG%iOn-K8f1ielEjhl&asmnHi+F<2JW`#wzNNyMD;@BTwjvnVcQmqPQNrKsFA5iT zKLv>cen`r*2eQrK;`+mDo5IDaNB+^eQ_hH6!_^MVEsV+1S&Dj|%SSLs0jr+t2*}}A zx|*;}t`zTuzfBLo6Iv{=`NpQDCNH=&dM@(evUj}n%a(g@s|$z48kl{p1*{7jg2&zC zO>LM(i@B=6k&_E%y;mY1wgkbGW5=5kOHMtUz0euFfAZLhMJ>2BMon&{;PI#52)2Fk z?K@*jh2Fh=4HOdXaIkx2F!a^lmCN>!?Xum2Q!o4=0tbxsKwerA*k?wU-HPJD{Pe}h zjwO(X)IuNZ>mABwG=k||zbb*4m6@*QTzfq1f=i>V(7N}5;Jt7ED-u%cy$io8bL{o+ zw3H>k{_f9O!^JnhuSTMZZy}4&n*x_-PQ%fej<9RpnQ(x@%QIbdD#7KMKeX(;Ev1sA zCKA;lF5t|otM5p8yu@JURWrT-S{pqi9OyVh>Nx_lUPo~5wb|DD7OUTgYf~e|PU_6@ z;O-x92kS@6gY!Q*e@A%8$6nu4Znozx{~{6`pY2^9eD94*O+o4RY73m|S_^II82t8+ z<<89hX>SBZ^KEc>ZW)|=^I#~Pdvhp6fU~WugU|fscTH%vJ~;GNHWIw}w%SyprfH8e zBc~Vf2Ege3n3_xVXt8p%X^Y?>>fq>oPxojRgID7)#+zMWhJ1Tx2DhXuvCR z%NKQcsRleMidDQuGv6}s2;qYwG|MRs+w6ponV(#M?Wu>QONdLiP0Y#yfOdNTf=>j& zOWdSxB4j)qp4&Bvj|N(*)lDN=N9G%&%bRG9X|HY(VIx$T8gYD0QQt&Yd0FR$(6lmK zL)q&v1>PB0Ip^0%1oZGsYu`k`a>?+IaF>SycROq!GYdG>7#ft46>3v zCf`&O)qbgOp@m6_Rs+39_VsCva-es%KeA~-Cp&zwZ}7475F+>La)6M6eCFnT)0_yM z*!WU%7y9BRH*nWg0w=DPN9Dzc3O_2;M8>%nUul)AHV1(^5}5-P3=k{e>k1Z3~ABD zo$UCZyui8}2}s}g&3^za6=C<_g$BH^b9kJcI$LZU*L7G~BB|ArA|*=J>vC2kXQnf1)90X&}$ffR7z@I5F zfXUXtNV9->P_5FG6KYD4j>EM}p#>EUfN#6kT6*vGW=yIWi&KvUmoB1tMk@G|>JF1l zl{jwtZsw_H=hy-_wkocrTn1Y{@W*g2<6Hc2rAwAA(t7uCY9|cT#7FylaTluJ`Bh{SKq~TlT5NJ^gcM~Ge z>Wyg7ssWWCz2;EuRXa)k@-j|ZC^D_qT!oy!HS6w7%-KD(SF=qp{I}!QTJHG_@-G9; zP_U5s1?+20Ez;Lw?9nw}*WZdSu;8Q7!LASE05vD)w0c{izIHf0>iH3!8`|M+WBx%Z5SEee$v!)jOWKKbaRjO zRV;&*$FhUwe~z92hs|fWfn3y-Y0Xlz%NWrv>Do)!w8n>8q3H{cMy~yUA62;m{(JfH zNLyBI7XCelouXVk@Gety*WAtbh1tK&)f3OqoyYaCF0WPIVVf2tl<7u&xCTT&P;h^N%Ll<;g_c_=6$y zG3WZ&Xk=i8OKJigs{MM++VtABb_dkuCiuL=<)LN%cwwLRyl9oBX#UV>gqtFcBGFYq zVTp17V&6p`{8Vl2Tny9ltiVnA80y0LCz{mY#jW4(ca;`h(h?KkzA1@7SYj_jhjlOS z{44@A&qvJ2)qC%m>ds?9iA3a`dwlBz?v_T6F-WG6`F3UBH}r7YcZn>#8-|N{L4EW6 z;&1E!sPIfw^<2nc^1ndfdbivR+JYnDp(6kMON2Zig#bN~BXX|st`mbfe-{=6(jm9I zhIQ}sZr~7_{BHg}S?_)OT<_%^Nwe6Wqp~{~xa~>PxTb7zd!0m6YY%Y8;|UT72H%Q` zr~Sp?HUJ^Vso>&O*8A{i`3Ni)MGwYjuzd~iq+c59xIfzRGS=p7xLvM)Sz|AIkoT^Z z?#CB3n-+LK%sQebhQj0}2(Z&_&k2m39clHnhQ~){WS=%=_TOLi1A15+y14B5t{3(v zvWIX;a1r4P6Qv)oGG2MGdwX)MTXWggGtFb7x;#b{(<9A-0DqAyJ%? zF_-aABkz0kaY;S3v3UC66kxRJq`i3Mz{}fAvC7A25qS-wneYmrC#(vF)Jt$D+2tK0 z;H5-v#ggHwg8wFH0~IQ`)Q5i^-VwayE;&5(+@yB|?IWg`(AfVbc2mISx*!$Cj^&p^ zcHLaHtKYQoyks|>8nYGYY7O1f!RCd#t?TW*{SrVDOcJ^N^QRR(H|gPR&02;GS^NFH zQuvBDwQRmnQfPDPkp^f1k^xR6ZfTw>velqs1vMC4R;AuNMne;~)HcFPf{%HW24X@6 zYc0l0g=#Yc_Hw-7+VBBjQAY-~wC@fTQa~KivQs6)SC{MbX;;#ypifq`q^q`Qx2#wz zim8G?$%YrP|2q$cQdj_M!$)WgL(lc56!yie-)psu& zajkW{*_>h22u1-ud9qmXQ0kYYA`VMh^cOr)q)azEHtx%tlLJ@AI&H-Ch9%_ZjV8?6 z@t{{cR=~f9-G{RTP|%Bd1vJAEW?h%UW@c}mNAQ~(KXO$5=bc*d<`2e^`PLs>0EkX3 zkDXPCv}ViUa=#2llSU8#h}CL%5N1U>gg^`}^+2Tbk?vz!XuWB!j87NqHVVc&9{_NK z0ne(Z)yc@m#?-~k#ivI4bV&YvKCdE+prk5R9)f6H1LM)$iyN3CF%H#`rWZ7g6#~;; zC80j7d|Iq0oDERGmKDS5TTzBqiAGNZ%$Q>GqUnYwv=Ra8H z>4*3Xh3#*f0JVoA988({q@H5-@(=%B*m-H>X+5$J1@!eM@YpKpd@KrNsvwlg7gQ4X zSQYD)5st_ z!~y*G=RY-@O9U~MFxLGkO&}g=f$1tfdSelZ zaK`!Y7gB&ps(M+rc_}gR06JpGhh=~UtI`%xoTV)7Kub!|AOyxkN=JqF_8;-jcxijJ z&~Nj8pi_g;i}81^SDkOa7udOg#Xu1JV6{Gou*ljZQ=zwhjvAvJNdb2-&NFaNE_#*v zhYhTfkjcb9?uy;=?soecOescTj*bX;3+s{Au~Zi`7+JL#rF?r6eLF-T2r;9?{P)T0 z?dfkSmf{TJ3qS6ejK`ZT{?}KVe6O!pGLq|kP6`snp#Z^Z@#gdUHRUxsR_Qo72!gQ8 z=`hAuOltxH@`NTQbw^H7$*d1^#I$C0B!9Aj$7`{&a6CqL5@elu989n@2)ny>n}+0Z zLQDSfWt?!sY$sdt@9Q1TbScj>byUlAaZAnkQHSEeO|c`Khkw>kZpDzDNq|1#&TY5# zllFLDCl$~sp%D9@_Z_^Ve2UNX!}$Mt5##7dx-U?$|Pdx4fB;4D_iUL*^34d)#E=8$*6 z(1z-Y8tEjdAvsPiEi)2<92WLl{q8GIZc&&bk9l9}Oz~`y3k)#Ik zZB6&(N!*TqTc*+zK+)xP1ihj%qzB`sE)q`T}KmBN{Ln9G~{ z5g5{M&p#?h{5)@;xuMW|7_ZIlJxd%aK~P6qH}+JYMX};M#ZHKTld~I3ON5&|v8Geg zD9IaE23!Qv6Km)JB7LVVMnLcxOOtHuNyj$6MC@!SjCSih{g`!SDBjMTZ0LCS%c#XR z-O0H$y@|dy#+8bu^O7|5t?$e%n|W=tm4a`;i+Zy0W`1hhGK;&T*Q(U|_vH>1I<5k} zRwtIPHFzVDpnLgT-_v#(m=^|Uo9f;24U?A1HQ1@SHndzEkOis71qk~?lz|%>+}-h_ z#PhylPz3G^MegYPjs;v2yjETKNMIx|gV%$w>;Lh{ge6+|NHYn=@lfJz=dI(X@qL+= z#H|FZa{Yh@yyiA2FS#)-=x@3AX0`raZ1n4dS(5`oxBt+d7_B3CiLvVck*)KoTuLRJ z1aaJR79pnlOp5WXeiNnjUHcE|711t{!I`Q2ryk~$OlVWwSNnJKIFHME7;#Bc+lUAnJ7uW+%rajLt!W~Z}|NIgS`1=#{7{7W^<;8 zWD%{LLQba0ex&6O+KdF$q*ND^$c?mf8Sec9gzb<3ho}Z7)NLAbaq3vSEzMoJM!Y4WG1OF*>0U6eFVG5}wD6ydub zrWJ%+kXr)wZuPBd)VyIq96b}I>%)%3*5M<+K6U174bc)%h-n8{i|7ZcQZ}qgEKLw$ z>jQDo|I@fYpohoBh^YL0NxV7E-Ee$bpb_%eUP}UiTV6QnVG4c7Ei)XhC!16$SuEE- z4_8X+%wU#EgZSvQqgZCV&>0Dt1NG`Y7oXRLE~U;cz75irH7_nZ2R=DoWfV3@)Vg;D zyfE1U*C4GzA>ssve7>gZd)1%>EAt3LL({BBRBCCJQ6%JOlM-5Txayc~?TzuaS}9Xc zQBo@zj2+vgz2W;9GP{~! zr7?~#fH(;!;z_ZElrjkpBvqgHSj|;)X>HD+_16x%!W+&Qq~WJYh$TZK`p-VDJsbH- z-J(cqXZe)_sF25o>JA}n!Q9jpIq~&ICkA{T=;&e$*0bShXaXbY<+w~HMzBz*z|qVK zR}r5I%5f+1GGZfJ;0gv}M!rL8?XL}Ica4YRZjri#kq$z41%4ztKOI|q?8wu1YN{i5s|upREdiz04ivl>NRxg=kQw{Vw5GY)7YX2| z`6}&<^m1(y0Sa!1XM+JEig_9HrKRM?vn!?WZIen}hfTiM2J;DmA>t^B+MOD|jw}dh zpM=E;Z9kh_JFSC5>MoQkxPd6;t)#+Xo+)&Tw+N7~mjwH{;9%o>j5Nc12@t|O6gE29 zB|dfG^io{wiGsh3L$uo=OC@@u#*FRkua9~Fb2s60&HS1<>!y~Fl+Dy-`E&kD0v@&H zvY`hwTmaW37YflRoB9YZ4$SPoMe9;;Xpj3Sd%E6}P1>anAYPuxwLiNKS_<2cd^mC6 zA9{4KjkJr&2?=`Fx7NqQ)S8Z->}B?i{;{;S#=;OBGUn^4cal?NgrbU#iz?YFCV0gw zIh&hYFlJaZ6_GF_eW1A<&xS2$aoN`&bGa_`Y~<>`_zu+6KZ)Q02dW_5M*h-SnUhiw z%7Bga$zXahr8Tt&dSy%!iVlgOXk>o|&2X$V~yJk#8%S5s4fyr1lZMN&WW3M01;vD4SDq7lm<^=ntHBGz+CQi|m}QMsDL!7_3im)Z>0yQ3_y_N@X%Y zCbC>;Xe0ZayAOA#f^;Ke&ZU_R`+3QLrZZg!QAD9r6gGHIZ+#*qzy59DW9Pa)%3@#u zw7?Z+@E$|*c3QdCJ}po;#aO$yx3J6*H#4h*j#{BgDcR^aGvuDoH3@S|X8h`L5^FW0 zoi?50bt>UMJx#+$2=@Gk;ID|H7mM`8i-KBeuy0Z%Qap@UG1E%ioWSGYYS><+6~*I% zPxRVU7JBHIx_3;|KOJ@GD}<&7W+4zphQ`Q>Aw}HTjRL$u&DHsHXiijpz0;5bntjR{ z?n&&K&{}m!BI?{T`V0+heXD&32iZ31Ct%?k4E?+5Z4$cg1=gzD0@5n3M$dYN^W>|>$N%iFoq z0Z=(jK={tTd>Tzx9U%AXYr?-w%KC;pI% z>69(+E{UDk=(sb4W1WoUTjp)3#<+#zlY|rR``nP1;x)H7L5Q@LI-$1nSXxBYIJz{p zUUU$|3$Z%%$mT3h;yEH-rmM z;!>F|u=_D!-YGtF_J`-ot}uOv(0R+@o_&?|z){nCqPzdGOFKRql=(A3_}ywbnkFHT3p(ooz? zo?>wEhHeGo(+5Gl(JXwExqrqKJtp!_O6H_Bg@x6>g8k!@`DU}3R3#Seox7LhX=9Q5 z%xU}xVw>by?qC{fU!rP(^`=bn#JK{0K zkqLjGLI3@J-hZz1_(58j+b6#FS_m+a+ezf-?qNi7c!(=pOI=&r8Mhs`xU_GHACRg2 z;}NJ^6@+HLppxIvDC{i^ExFsS{ z4@8t~kqpk1zQtB}aFP#9lrqe#nl1=I)OU6*LboB29jMMx9Hy425&3-i7uXB>{DyNU zwNBA8NWsh2v}KraHt!3LrOCEeW4y$!RnVNsD7h-K)BoKTtHORIILksRSvNpL9E*=3 zazDGaouBF2e?4DAgJg}8r>u_}8F5&cZQmy!TF8N1b4)gmyvL+6L_JX_Aj-yRxJ#0o z71vjr2p{sfZsIv2Y)e@^3C@Fmy*Y?+hSW4`;xq`erxh*6%2^Y6x~F+3%awk^$_+QC zhR}BFq+T!uj#)7MJg_e;P_Lt;EYK|-HG17W?S))LHJ%wUghoJ1jA0a98)bxhVF@hcm+78DwV5Hl z$#GQN!{Tvy4{xLo5t^<>M7L0j!MX#i!x?f2kmJGn{A19G$D)F{gdIQiJ`{)t;&T30 zw@<@z=GtzcXtSmyQ_7CVh^XQ+2IiUEv}rWqgyydsvZ;4^D|5p|4+_GW=Rf9$zfPnT zBWUb!R&qU%B6xY)MqEa;=ap30Vobs7MPai$cFY^R64+Z>^eH0LlYVHce;vIf1~alj zo4UZd#`l>~x{(g#JVa3Jf_;?f_}a&;k!QLYVAg7<7)KB`yBHMho-IL4X3}dy8h^4l zr1%Eq(JA*etMh0|&)QJmBh08+ug+V9rEeWP$ynlSP%BxpMkIvsYg8Wdz`+W-HCT}{ zG1!b~#$(U3pF*gE7l&1ks%rl(f>*EhLA!Mt_RR4$OKbVu*|qK3vV!+?^ILCscXU=b zDEFr49`mYBp<33KZ?bXi{rFuQ5zEa&f_H|pSuyU4Bh-T745AV3bKM1RedFd!*f3Mh z+iujJ5FaZPfUZ$H85{g(V=WF1TXFO{GO@9NhD>{@Tq_$htBO5mA7JPEuCf3C9ABC2 z%03OI?6D_0$Hlm7m?IlTIs@??u1ZhHG^p4&|90YVHZ*5tz9&c`GJ&j@6U9-qoM%PG zFKydN-rKoZouLa=k576m{GDvEgjCL8lNBKzYofd;rW=bd&#iY+tA0UuKTP3GIghlc zh!m-^Oc8sMx>$6EGJ`RraS4D3Ux5vac7BKS5I^n_8p#7tH2rmlhorZn4L1H>`Ze!D1{zLT|58U|YNp*$ca~pfAOS%D}Ik<@I&KPcyM&ZVVJV1o~Z` z@2}7mHvnteXo)5}02}Y+(w6Q)Hz@QH-1M;XcE?Lg&xaTpZ6)d@738?1WJHE3w>lsJ zo4?e)DVRQU&@0Js9bhTvlB}c}$U^EZK$J^+dL}i&#&==qc2=XypskozeTk6R-=8{` z1j>%>HHnNxs{UXv&q>mAySoe~><4c00RnQa3neL50nB}BGhsp%l9hd~ydGL-E5VMQ zYaf2in_eh0Y9v5|OiNgG?-QHp8(`uLSWmBE-{kUkH`a&!Dp7++2I*4py7WT82qSUl zoLyxe!k%l%CgGebac5Ds7gly)lY9)4IyttEfc;c@<3i0ZyIX&rl+71w1X0MLC;t!I zkJ_L$um#rp*6h@;>t7d|}jP!Y>@4J;vw*6s;D91N~^pB)-w~Z$@__{^zaSSEuo@O46SI0nbVgj3S{0yNqU;l z4i`k2{w3JL-LW`n@%eW-QQ*)$aD;L2OzC55hvc#LGK+>^o1C>q1Me33XID?C0cHes zg~kh<#AUFAFXg$}3eGgfbrO;JLz|~vzI`25QddSVV9=_Vj9=Wk+kA~x@2_pg=1N!T z%Se+P8o#tsj%2Kp$m#smBC(@99|Smn-Zg}#kec35LKQX{2QHJpE#>G9P z#2m(OFr`at8VR$HAk?L=ZPbDdj{r|+nw)VL5BOgS6Z5JrTZd#s{n1kt6DhT-tm1c_ zQvqQl<6;CUyN7`5U5nU&ioT9&b5S92z2?Fz+&6ZRY0Ze}mr@bxpzl7kM&yyeS!&DR z6yE3hRr^nkVqsm40GJ+)RBGWOwZ8osqgQhePk;vRWj?@GfbN|iiDz?+YyZI3Z%QoE z6V-c%;@e`_E(mj5B2Hh*b#qscE4sP$+V74}m%}5G*5vG#)}&sPV&I~2(oslXNHrQN z68iFzJTWpQJ{p^SIq>4uU~3yNg6;F`o0Nx_fDsLBxAmQgE%U3?tHRBd?fAia4sm}dS+V0?uaC1QZno}M8?%r}Lq0gpEf%di-AR}qA_(~hyhPrH z3rA%~(F zh#a423X(hAlQz?U%%X9Jm3cC^&p+>%*Nr`&^`D0VPeF#EsSTu&@q7lr!jf-V6lP2VLrCwpe}g^#6=RHOpectq^f|yD9V0 z$q!RiHTIa5ZSsI@Hv96o4s^-cu>rXs-2T2d_&WapMb|Sw4k?l}-LrKP1+0(-P{uY` zOZP?Sdicgk5=NUfFb8odAw*!q!(Cr|oPBV5g40fkkZ${u5aGwv^5Q6>L`U3EV z=Jq!>tYMdz?n6EP_P${4en>taSU!FE9^VQx{E&ONiA=-hqvFUQk13B5=AY;5W%_k3 zKoa>=Xd47ALP$so=4fliHKz%Bpz4%c8YxLQ+M(|OnyIAj_XOYb$Y0L5$gbqL+z9_X z-q!y%b3T4%we(ze^Wu=*PnuOnfgDMhPlaS?ZYO|d7_(K2Nd!X)>d;Km8|q>zDf$jf zB_&PTDd9Cu>2k5*R{6M^&KLMfEVBER2%Zp@=CH#g!0lJXEez6+LGu|1fD~a^O{q@B zc6|EQczDvWN%pN7LIMScNj5;aeILI2I8q1O6W8;c^L(P=gH{ur=K*Ksp@bp@(nqPN zbe52YdD$h~fBZUbomLpX?dnh^8@Q zXsgW=83)*jC&)9XSJoe4BC(;0Do?SXJI!J3nkY4Ek~?tUuWs)?QUQA&oI3^lS&3;- zWKFYrAP}~OTi38#O`4cv7$!5L6J5xG36>$f;%2Is_Z!`M-nCR^*$I&CKVEOP{7PDGZ)<~Sc?Mr)GkV_AknrW#kq zsTk=6$J;HfD`0#owp$=Z#DDo7bzZY>w>@8Za@9Y(eAPak6li_(g* z|1!~}B`y^avP^c4UOah{oFZoxHMz5rH8_iC$Q?AyMzf`D91|xbI7q6%qDV+`Hc5g^ zj-5qUD-;Zw9Mv|dm9zw;8Hb+}4a1mcfS`XHn1ft*VupHtN zVKi`X7|rn&;uN8&;R*5D8N-rTycFz7FKQ(B@|S+xwv=Cdt7TrTx_U^Tk{M@&FgX%( z<18r?6_F?;YCMB{>z!4ahB8;l4S7oebLT%FzwP~ym9J1@<9 z8Vf6#nD4e2VZ|6B@@89Lyv}PtTz@`jk__xidJ!pmaMg}d72M^x)bDlWDQVxk-uDIQ za6R35@?3pxsnd^(g2@Ie@H99zVbD~KVth7v>&6y{4R1iSrQqsUwvI0%Nmi3URR?q5 zOXxZIF25DMXy4}276JA0X~O=wpPhcc-0q;>NA(De*AXOjb4nSnq!*Y|N=ZnSE1)GM zN@N?0%ElL%FAy6?WHP^Ng#4s2r>u;LVREU zW+JZPD+yCXTo0$c#~&xwsC!+GaA?pd!ugVo@bBezb_G)#jEXKjOG{=h9<-BqQToVE zkxIlwH^-+Q)qii_yd@`bTQ4=R7=e+59XbG9*VyhFa1A6{)8o;yQDhC1q~o6qxQSvp zom-IlwX#1KjN_ZlGt3|$W~Rg#?4CYFnjF8RVIXKGGgi`F<+$scN5jHB%gM&T*SqpW z|8<}Lns3HamKaa<`oc%&VA`JE5W6lbOAmX)J>4Ya#$RwO%kQE?W#=;!e~>k`4NWv` z<^+`rnul0w6zxBI17P#DAh+h(-YF;#V2%<}Ls5N-uZD<0kZzRhN}JRM|g(uj{&@VQ^?cm1L^DMhH9-u~+0 z;+qZXsUKxD2+=4DAI|38`BVb(qHYWsJ!d6=7u=cq^me?(K=Hoj-P(NCOORyyz1KIh zis9#T549dqP+BU*ObATSGfu)(s+|w0OHQ3L=}K`0BFxm3Yj8}m;Gx#WzQ!-Dr-5t0 z--R^*JAiZd`Eq?b)Egv)PcO@WUo4PH+iy)BH(nH|zON~RTXS^6p}C4Y{y8=~0e3I7 z0*>nHrrlwhq~PAd6&(qQ4c*T;C#7*D{VSVAGik2A@N<|}^ z(^!x9^F6e(+7~P<^MUt(2KAH@hYB4ep^%_qcvOhbtqQ>d^;16xq6@n%Kdxr7a* z&I%t=aPB7$lb6jyo4pQu6I807(97xb9n^DJvji5VWeV$1MAha)G?$NV+?L@}3)^1l z&)IQlS@vhJQ{~Mw~nEANAhy8PKgtz8$f$#R~I|G>WqQF4c z#SRMB#6@DSaiB`?haW0?^I>lHC+a7(*KcZ}6sK5iKT<@Z! zUZOT}dp_K}6~p)>mb1N~qcJOvC-{^pWz?EgTHbID{rFY_d9V(zc9#a|h*Bxy`!M9< zB2y;aZ-l50kFpTFo6UeK^Q>iL$DWjPQILC5g2bSZAi--qVz3*l(jrVA*#=vES0&u) zKDRk1xW+sPi>DeFeF?;Er2gJk7PYo*O~CF&G}*@Nx5d1;aC6v^SPI3L%g3b0B1f!5 z?A;pKRtwsTsTKTJjI%k&Pb((p;)0Z&RY~N&{t0cLpu4ROjThCbm}Fhv7gA7U>Gt~| zV>R-UaD5HVZlrbx=s7Do%rUG{k})2a>0$2Ko9i(nYv46aK`-bpo@&T`lt_F)nhsY|pdhz0&?@V<1LNe!d1Y}NeVWina}q_>dh z>5$`eo$`kLdF#V_AKm2rw|)pm~&uFI`2z;wVEsr0Kyx+zs`SL~LMUh5y z2nRa|B0^s3K;LeCD)jf(wq3|FF7bh-wM?f#_&}>;=-U-T-l%$Lbe`MRux{EW_c=o{ zDa9&M#;e;weCj9|C!ra$n7IoAP@@Ttx|{sNHoumJZP00j*Ee`v#J0|{pICj$$iaz# z26`-XSxqE)Y8h9JTe@v=M(07E`AYi8rVu3=z*MKv$}F|U^g;xJoGQPPh@FG} z>^3E7Yb7L&4+vT7Zy1vw+p3mo5sW(2ZnGAQ~X*+=azuCJ;QXdB;Tw)szm&3V@+8?I~^?N7Kg2 z>apVHX*bF3>v&v2BtjdOTPBP5gR>->j+C0Q0-nm`>GM{69*vbi?tSb*%6)NrXX5D$ zRyOz?Vsh^j>0yCdt^IWd{L+#%K?e=lCG=Jj9BiuOEHMy z8~9o=Jm#2~bhUh0K){KiFFET#JYHSsKJRV}$Gn~T6eFl-W)i@x+LzO_- z2xnxt4XKS~C5~;Sa!U3?iVDg1+JAA@ zZ9>c$vZ_rK974PD)^YJ8&WNUNBX5FGD9v1Nr<44t@PTAi@Q9KH4B!4+ZGwReCNmGx zMo^ZYW&+|?)NU4j77#5l{9N8>IkP<{UkXq!tz$wr4x66z7H86g))Jr3LnqI@ zIFAkMGs?pMk*J6QkOB}lsBcH3uYBN$g|Fi*a{dC!8Km8%(&!qlf6H9G#&M&gTb zfU?7}2?6{ctrwmCGk9_EpnE5LTpIAdO*x>tnRdIDF2v9aYL*~>-ZEkh`H&&HQ)4O{vY7UcTrv>G!?75nA)~kWLG`?y^%`4kW%2QYf)wmpe?dh;VuOSx zAUDZ?cQnlWE?ThWnq*`T-K@ZKx?4b5O9|UznMS6=xHy;j=Kd`nYK<(dy4JY?rM7)L z*f^AFb{y@Yz!x?5Aqn{2Bu<88Om6)j4FVO@;9@>k@4jTydnb1=JBh8A2UIt1Y)?+` zPIc`4P-OVN<~0^zaSg!hI5H})77(g*GacsAL%!8agRh(g;TvP#n^T<}Xs&IdgfMG~ z^YQ^&eh;j?4?Nt{=j7(r`{7>}V6;7rzu_|pSYpw#yKMBnhT*TJ5&i0aAcCWU9z?By z-G}!>&~z@&L&~jZs@>KcUSPjm#M#fE5jeh1JB3Up|2!Mnr=6~wHx=+gy8`PUj`ivk zknV48Z|skb(I^G>57c<-=XY0C;|)lxy!yM`KzJ3J0B?UqWs2J4LmuH`uvzBJB$V#I z=9+^c=YBS1qwSd9pmD~!h|d8j3DU2aJ>1!&9V}Lgj^n{kw|v+tu=Q*@oSs)Rxqzt1 ztH$YuX(_&si}6}>DuMq5(`R$zIOkN=x?@$@k5S~#R=8+T*?Ohjf9`5`N_zxmV zj)8xYmCuK^p}ASVp!>^(-(&Y#z1A#U9c&xMy#=M2{(g-3p`$0!Qs3wT!=ktHs~k^* zDe?NIO#D5#;wr@XecxqKleVX$O^=ZPWYM}hQTCwkp{9wm@nTlqqbQ<1^Q;2-c{if= ze$T|TJuEzas4w^0!i@3l0Q|ie<8W^`C&|6mjKMwj)x@#va;D&R*{{Mz1DfBbPycX8 zzDN4^sSmn#@kJ|Z!EN^KfLqjZK#0>_bjv6pXU_e}&uOURUQG8rU(ldBvt8LID#i$t z^t7}0r*Y}ob1NG!++yRSduRX-sdu%G*q(2Ww9MvZkHHxzAxJQTNQ$T;}x+Y@+az!D0&Psub;+R)JfeZtjF#TZBgC0pOJyaeaVq;1YG zN_Ys!ih4pR45~OscviAY?KIbGwhm~xZlFCGiL*Pef$zTcBdR9Z>V&QxT*=)A&B)nQ zQk}KTe_7yx;8g|X$i;NTJ@Nf6r+Z}Q{rxJrSm}FoK<=`)6Z|#JS)$&DUB=u8Ioz#q zQ5IaigS9KDb=dWH77xAfYlQWE>*L&Pc|-t^meL=F+@%jirSahF*#@iCT2~bx*}FgJ z1Ap&NmZYYrR$PZ2pX6MX*TGEDtq_K^u5j+PUsuT(R41FB4C;cH20yQWy$_v$$%&CM z;SDt|!}+Lvu13k;uP(u&`m#ScKjHFftV6Yogr-lJD{_;QhUv{M3#=Jo9kfijWSvNh zPOT>)@w~4{`#ecjd(tPe=;_o3k)>f!V7bzjoyQ_Y_qJE$ExW7y~w?fW5qm`5oC%}8KuCQrBq7Y>NG3$6Q!x7;Dk&%jaSWG4lB(@6_V z55MCJ*zr~w09fa=Kz?-NKqzo_;SO!ZeAy%`M#_`@VV%ExaHn) zJm`2dELq?EI7MUFODUWpcq1K!&fb~c?^r)upoDsS0HRuqWHkxQ9%ct_u*L)cBNro5 z9fL=KT@WUfJQ-0Oaq5k6hP;Y$ZHzc7;-ek)}fy| z{|+J3Vu5RfFkHBTGA5F3WE)bG9@@UeM`(pORxRbXS5Z@xRGeg=Rhd!p^R*o;9nLa& z^-_+E90(zTEmU$;>3`fE^rEIt6F;nW_L%e@b*3@lkXX>7`Ze^Vy>mlYiGkq&*ZZ8M z5-9x}#<^+}n{UF8CqYmH_G=pLUY}mT(rJq~MJ!?N_o3TOMV4B`Ny#n=;TlfvNteeC zIj^5sIdwp4emQH<3FE~+my3as#=gZX`tmF0UqEbP?2MIO8{a+)J~WT|4W5Rk;l0aX z0t=z~-n+9__9(g}Uz0X<8ZjeTw%zfiUU6!L6%`$edx3|~ z!Oh3|_smFaGmws9xSGMNoyxW9cPT%Sqk-|$(>{Z%ur5E<@cXX-hE*z@E} zWPU4WWtI%T567Nt_^NHEH!p}}rT#W0O-~2&z<#XAiqE%eP^imHol!K<>tIZ;&nxHy z8FM#*WBq-Y3*F#DQ>phBiwV{H>4WIoeRF;Jc>aF=n1Yp^#nIi-+}W7$TEio8J1i^2 z9uSm)XmT(9CF0F^CN23T5OK5ueh;V!D3f-Eky7)56~aVpXWYX10ug8HC9_FIDf3`O z2B+bnzVL}nd?zS<&Kr_SKTQD8(`w^xPzwbg3gm6+Yiad4gu?o(b5ls$IB)OCZ?uf( z=Nhoq$32_NBfaB~{wb77O5H_@(MgF+Pa~1Z`vCpzM^)0)#n0NJa7AbwiJFhR#haa-nDiv@R^m5Pez1p!a-4X$S-VWqC8cyZ+Ssk;83;%|#0WS}Wc{~J}`GhjiW zIi*=K5$yV%tg_1pq_g_GiJqgL5)i$BN=!+_e1w2ZR04riI^$5117S*i&*zaWK)Sy2 zv5Y9AqMO(pF~$z@6tx&#WBT&_zUW>rYr)lm$|RkbiY?@%618NAb6Yn0^dK8|H6|lh zF2J38>4U73NQ+YXqzd4xtBmLXMIC&Lu*^sEEXM3|_FKsK^R%|Jr#Cl8Zgf%CY1?Gs zC!QoIwSD;hTnlXbP1H?WdTPW(e_%qsb64hC@Z~a`yWJ(`uR0bDaQ$DUPa(N~+;=gi zI5;FQ24GjkuR%w*_x3W`ADb@8`zB;yMm!!F7WjRY4;wJOs1kZ(Y3`W?K8Gb@?Nn&> zf{Kt4lIyPb&Wfzya69!;1iM5Pn$D`a;0by~X=zb*En~G5^MUG@fHtRm$W@JsYa@%i zYT)=eKd>&3xx0Y}o$|pVIs$IJVziRdid$_jM0Jm1x90MbVVU%q1t-kAK@=7|xaEUw zKIWbUp9<2k?bj)BFuowUTvFO0>RWuG+zfY>#yJ2l{s7Wk95T&1X15A3=E(;4Oe6dL z&p!MLzmnj}2jMzfzKlZWy=(c_jr2ayUE?1NNs8mYjhllCxL0i4uLTG%hc2W1;}LV4 z;e^=~#UWkq?Tael+124gT;*883(jwDPw?V3((mpo^^2ugS0>evAUg23%O|v!cMUJ- zPa?jaau=JBZwa@@i^yBdl?^=Sx9gi5)8}3!?}PY~j1)$dp#g;JJ1@J`m2bQHudVy6 zBGgyUKbesxws^+&+f-(JGkdxza9~*4cA$2idPQ$7&d1^nOGyLMWIK0 z;>?~)SdpKF?Ot@8k8o*UyJFRI=C}mqD5ia=3(c@StDO zZQjkGwouCZ`nkA>fzQH+Ma005fl@aTA<>DBkByCtCMO3*+miBuMFk-i_4P=El%xr4 zCOYv9!%Wd*!;=hDDp||%j~t_A=@Y2!=VjSrVqirHU2XJXdX312X5wzC%JB&j{Az^I zV#ns`=mW2y8CcRJk}~ywXlS+k@Chlx_C)K!zT|f_?zF*a7U|Tc7@3rVq`_fffzZ$i zfdN5#T0RfvdmrIF9PZ`S0IRNtHs5VqR(&3hG6Nezy4bnSM|VTMY1szfX70WCW}>Ou zjvP04qOw#t@hWtZqiK-ZlQ-fGR4135f{m2=_Se=VFsKB&cuyVJjIOhLu_QYD{l1K? zh3--@*16q!+1%VbDLxzyn{TDvlYSFJloXf19UT9ILL(s~A@c!ILSj?_7rLN%$U1`B z+o~x^yL!)Wnos~E08zFV1{lBek8$z-!KUN<+DfQdLVPwg0Br!SbYVyw07?80fTd59 z5dQyJ`OKfjNV8!80;?cU9bmPeW4UL`#LY+!@uP%9h=<^xZ+5m9(^jVsYx?2q7i{_q zN}-835R5bDu%ahT$4gr`UT)@)#2qrdL-a;dnF&_k_Ih!gNhBDz_eekK+CJi7CTE@ zBnRqCL5x#@0&yE8#f#SSBl4pa0SG810FClH}esla#9K8G32CBU34h$>m7=w&LD z7;v|}SXzr}kk1=ez}mA9vroktEcZQ(#@YOU6ApT#9smXM{$Ez@D0Sn~?(YTW1!nyUG)hYWi#9NRe@#V_bOiFO zF95gs#&OXFG~mMqT=+gvF!uimKIky~mRm4%fj;)=c5{lv=bgkm*JJqK!PibH zJ#xHB-=&;}SnU$g!6r<*f^(7={WZC&pAj04CA~?z-cZ?z0dAjQgZ6>6{!g(!$^A?1 zolDK{6`RhwH`fxqt#Zr9?BGO)Op^@Y5*7|{AE=l1A8JB?o&PS@s{^5oHH{sJc;?5W zsT4F$q(+1_)URzeSpyLOf}+9C>;p0U_kN{agc*{B!3Qb^-QywMpWtV5xb-D9hFtr_ z-JI#-eh7elXjr-%z_v_nkDTm5j!;LTl!z{a33fll7UlRaw6m(Q7mo5vH7NPN%D?~x zU{K0OprO?NfT#de{U=rG$pKNUHeJY$(H}NBluuR8UH0B?6`69IxB>A1Q8@9?#M}uK zE+!m9Sg4*X+u(Fw0+VflI#8HIfSwIrJB%Ka^C!0P184w7?a7%TtI5u{=o+uR z)Qz0n9jOmbv?H6FgQvU&3`ueRM}<@menkaML3L?$LQZ~CX8LU@LY86MA_LgN6U-RF z4}h8|C|TqnHlKJObuOJ zolF7pa`|uNxT<1IKjml>gsXZazF(b-dY}Q5?2uI(oIG-_llkp884yO?eWSqLB!EX)!CF}k8y7HCm|wI@|8$|aBt zMvgjHz%@~{2-1Yn+yibeCi2tfnuliAY8K)tQcAWkKev7lqv^iIM&9#9kzulQQ2<=7(-Qae`%ub@db(BQM+j*5&x*jJ-K%j%|z$#BJe#ab27^Id8PT zVs!^qAdC3LtU*b5QjgcrAH;%zODNka;bB~h`hor68F0fQ)^W;$iyU(EBDJ^-+Z}3O zTgls9AdGqwaXz)cW$6V_FD{GPzsLTZMgU`dQ1KasDShmJSj08VI=%mTpuPc%TIPkbQMbe?Ju!MEp?r==!H}G#q5L<{zWQ$zeM;J zJ%jgl!aBWHkOiP0w8%5F|^B^`kVFC{kw%8iBX>pO=jur z>}txu{Qr|5$qCRhAJVA4|G+W+(}n4VY-3>fB+pYjjmO@Xy#3$(w}<>} z)QsXxfD;$kyMNe;x3ox4D}V_h*tBcQixe@B z9AA}L`%M*`^z35Yg{0!^4KmC0ZnEnum&ou9!cq%O?#j5KVn8i&xa*^i8RyIWwH@zS z7fV)IoIMbvWpxNgY=59h&=3{@AshsVc89%yu!MFL$5VgwQ2Cr|9W=o+sEIx z_vh@n&z@dg!M7j|rp=Ud6V}D~+v>Y;u2_l8aZ_SZCjTA88mn<5Pa0#Pt=#$(#(Mvq zKwajArulIql#)_e7-skIm0}@eu7|7v@QsP=R4Ia=)`lq7$mqPaCA`Jk)*JCBvS!ff zt0xkR>anSz2subLh*z840kb#SJ|*u(OUW&A!~xb2yUmbCFJI6l+`M4Fb&M-(&M18T z#C3I`1qEl=sUB&!y>s^I`ty^h?z7EKcgJP2@;s?^CWWBm5Wa5>g@OuwFv&}tZs7I) zKy-?S(WnT%BB&c~(-GIDqobG(l;O4B0F3*Ij)>Tpn z_7pUDu%gV=Xd%C9JKNU+!U{0nVAqg!;@6=A99($x z`p)~fq36+64n4CB<};`CkrfL{le_wsuG zsh5Ec?hzRL;(q&191c?^=#9W`Jr8^v(e+g3V?BG4 zl(Ppl1Xk@|`OM~&gKdapk%Sq!J_OZ%bm2P@mumCZlTo>Wn6%wVWcMO13>8!xNO# zcn;RRw#i{jPf@4=#o#ho8g4>AU)rWS_U@;)hrK zlF5{T@N%WUDZhyQ0^tn~01nP}@%lf8cBy@1C#gFcwSWC7NQtus%5@HgO>yaAURG`J z5^|245B$+9?V)Q9hDhIS;T}@IW?0OP!kM;eyZE?UaRmEmP5XwI^JYE7g^a{=ORGm@ zRoitlD5CGHFY+jI1b?zGt3?$Vy{ zpN>g6_kj}G|Ig&t!KshDThw5ikZ)MpRWM>ymsOQjx^1i3lQ|f`I0p>5-3q~fjLZE6 z&VP)H{l0}0FaV1WSmYrjmPZcjUtXv|1`IF*CRE-LXs&XFJ98^{`#<0k+4LWReo{$k zD1;^iA4r;GYIC&(<=gN2a2#-dQm3WH9&pAMRGfy;IAw1%ylD5P10xjj>3@@(iu z88|QcllIK7m%z!W|0J0kVEBJcVO(t)^&!7ldhE|?{S7Tld{-=T>wlZVM*X6II?(UI z0}eD+n9cI?)q!)jCR-p}AXoydv|GRwi+_>u0rvjma}%mja!s+EqG-8>I+{1^7SB~~ z?(f#38~Ue!E|LD-qyg#vXNzdPSn;m1huVnj%J+90t;|w-p03*JC$0No;Gzt`3Ju)c z*%x5#6^chrsJguc&KT+Hicbd|wINMCSZ(o8Vm}#*VrDfEy5x^Irsv`s# zE37g(JO`Igax9X&aX40hxax+69LtAP9B#*U?3#VH0El~Wr6&amF@wivy zy)&-WM|NEEY%@N`)T}w2O>Nmf&DXhpC$c41DmF1BBTL;8?aEL0FAa3F5!L5xY6HV$ zSm4FH=Zmr2=wGg#%R8uoY-S_`U){m?LO6koDN*|hh5EXpKFxK+ zLW-weS)raLAQS4=#U$#k5S60?CP3S=E7h?<)F)oPmBE6+p87rO_cp72!?WC6I&rgx6z@I`tuuj^T~3^j}lNX4h0=#hbt=h}W0 zlnC$;tN@&icTG?Jl5GbPAjDQyT)6z!DhQpSxi(Q?d*EV6=z>({wcxrYcDql0poB1Qn5yw1@xj=9v3bs9(UwDCW)}6Ne8lry0=IL)1e*zIccJ5qecW-5=jB2J27*L?c#Nz)GgDk_Pgm=F3HcI6;Sxv{OW6YXsShJgf?XB zVfP{LGpliOn9Yt83uLe#gZG9WMFa6V+MKoM9pa+osw=KP6Yd5K>xScBLV1dqH-Vpb zye&D@i~%Ho_0iMkQ025YyX+5-L`TEt0t5Iyxv2p!a2Q$B(MS2xQf*S2zYu*q3@Z() zCVQGE5n!HSdndW<2G$jr)2$xtpOOAyeD}{CMy(P(nh5^1-YzyPq>M&jpUFLt{$6~vy-Bh;BiRcZEVh%CZ}C>znvhi^Viw=P3PP|rj?8SxxB~(ta?D)u zB3I+jvV@g|l{%I^laqtf5Kln`KE;L3Dl)PYB2^;PJ5;hY8c~yRg$=HPk0+^SIy`k% zgD&X?K`GV8^|N6&3Jio^y2^Nc|F}}ZFd)d%kX}IVLoDUbigv}F%zKUA<`vODu0N%9F3;mN5D%RK)<0SN9!z~0&(H?XLp~%b z?4|jBO9YwHuxF?l*G!R&PeA%V+xp_8O-)~RBKa{c~ zbV)o|z;gE6yG@%l#_4EfglDsKGZ=Hi@s7t))4TFXEl!}dtJQxcfN1%PKOy094d z>a?-jOq=Y4QrT2#sNqsJQ=@=+eufT~d~0vd(xdeOLi~9mgvvMk!otjN4X30-I=280 z;phw(371dtvo;XTR3m!*d%4y0BU)!(Taj$4&9;k+^YtZK>RC?m4v5p9K-I9m65GV` zeMyka7HsOJdA#?kwtE;oZlN=xyp?Z8f~T)THp#xPgxoXA)iQmXS$mPzz?dTIe-+CE z6BbWtkk#FF-ux^G#v3|2YB4%T=^CD7I@&%4N7RM531h2v{oV{rm?VT1Rb?V{21`(F zrl>LQjPB2tG>fa)@pO&-ggFhwDnE7yqiHdJ5MUWbZf>_=dg-)m8tuT-e$hJ&p?h+V5ZXZ0AgqOaM3} z1g8BI(3%_)kDMAUZyW3h&u|w$%|a6CR=frpZM?cGX3NAB(se$3+Ko~Zt+X2O*y~LkUlIYw4jiqcjXx3_ zKZ_u=2h>4C0*QsY?95$Tq?EeZApxd0f7y3^Zg1I}zHabYeNT3?@!)kPvc(d|oqBE3 zWmVH6)o3tFWu;0>HyJ9;ZKvmejZ_%brK2n>W}F8!beEr&$-(7kw5>s17ctwKrvZ#% z^b19ebz5+HHHBxbb0RVKSg0?u8f$?x^~h0 zF0W^nWE%k1kEM!`2{KJpm~g!~ul?;)Z~dcz_Ptt)aBaia~tjoA9S~+6nib+qUOPnpS^IR&Qo?#WFQ0 z-{$5vVI*QX@78efvnoTw=mcv|nobPE1HZlQ&EC(Ch~}!z$-w9j+T%If$t_jOuI+8} z_aZ`Au+m^B9ir$g=RHZ-*=C?JFI>2U9P=_w^={Hx&%9rP{cQB=m-eJ8Qr%R4l~f0S zNNLo_{6Us~_qSdfNvViv+F92%duNG6UiJ`XNI;R;tf7@lt5V6KTROMs%94;|q5f?K zAhsBdHmxQ>SB=1|;fGZ0L3ZK<9cBbmk{&Z#gwQYs)c|S8NU7K_ z5yPDlmQXy&0s^^E0*5h{D@OZ-PzGm>Qv(E{7!kaM@+qg6%M~b$y29x^A-Ud7SBK5^ zD#4kvjCDnUJ8goR+k~7Oe#!2Jdm}b10P^xP?ANw5eth%XdF}26lJ~hpG#uc;zAl^d zxtyE+7{(K=jg9Fqm-(%G*X~t1k*NA65r;mt!GM5o{4GsTID)6I{V&pm0xm4F2}5@g z1?#0^+Ahaks;`m=dLxDCa%409ZIvXjf)n`sRgPk-X?lXW3$$-tU+#~RevI1-uGMRC z#_C^IM$Oq%#a;LhA18r;Q++$& zgZB=P;E)^LP@6>^Hu88_88X_3${t{+^U4fjSPXuiRHRj?E7f{u})SfPB;W3Ca8Qb4j}@WTqH*D~q;-c(bsvrB@XolD{3X`B}xKVGiQ zX=yzH92UYB_qVT?txY?VjFk3V<2A-`bEp7~9X0?aiZ67O6B-XVIE1;uh|1GdmKCG6 zV**?_>8&Rl#=~DxS&6>{W<~BO_te!))f6*xbuqNf5@%|WZZY{*$NINmXWob5XV>@4 z-U5)3H~uBzd}Q8ddm`Sq9#?b>bf_uSP&-2O<4E5(&kWzQ_t*)o=;U(EQi@e7b5{i4 z4>aB>~u%oydjm^>ZO$z-=3 z<9k!DO7y$eT&aAG*--bv&94MK_5r_TWaaGCJN2j`w zWkw%}j$;#yWn&&$h66=AG|$dlXShc+bQy z8h`f?8)>vQ%U2TS&y-pT5_TVIzVCf?;LS@6)Gy!jbN0!E>wS1Z$FqLe)5EIrNEP1? zSN1m$r!TG*G!p<7*)#@8(xi55L`4bF(P8JTp)NAI9i%plF>pmUrGBe8DN+g+tLr(d zBDTglT>>mL6k{Yt(NI(h?{j&LO$*3Y%AtqAuj|wN&h%2Kuc0;s(Hf#77G>3-)fkjx znGSB$#<>edui|+j4<^e7DbICzj$=1GZ8HbfPf=;n5dy$K!TH$lZp{4y(~f|gJIU2S zjQ7Z~Gbb^x=+IqGq^K7*&mee?7-DCWAhBMv3>$08^2N?b7y7o(ohY@Rnjx|qF|t`H zk3ag+DT8`hGHHz#5dH!kKDxz7&RFOmAX=*UW6_9BB;7JqV!_r&6?(Q5y3k82OM4VS z%zGV~Tjq=2>5XkE>VFGlX}H=g_%RS_;Y=aWMaG=^r`bf%jT56k%99G|cA!DI&&jxk2S^FP6O97G(aJZgG*?_BhKurc z=_xT57+$Sd0ZPV})JEE@7G(52pnzI=di+i5q#!VQ{@_~9goM3Y6Qieq*8?&?RBqIs zbPn&7g4eg8f~w_x&PS0v9gEuOx_pRn-KaHMN=-C|QBfusC*b?X*H5$u>Vtt(3^6YlE zMZdXMrOFfc5N2oxe!i)FZV<~YhK|?qy@mO*co)Ow+S|>Tya8!^AIT=r32^-Ds0R0eq84yARl zwv$0=yo3=ch~{eloE=2G@vCTo7B757;>$>%1ttIkb>|E1^N2(mL7|E`Z2x)@{XG_g=hK zTxczA?;wDp36|IH)`3h635_2hwHP)-NXqgFa4#$Q`NeoY@&!(qWn- zE-%!V<3)v49bg5c6>FG^CY1b{GNg5+cBIEHWQ@rnD?v=*R#bqCsWtFwnye&)uNzO( zOLI`{kX;}dK%rF`5DBEkt{g(3lv2Bn~bjpLqqe4-~wo`sAR_v0_ zo7VlbI{2P&a4OD|@BKFX4l%x8TzjTfbAN0v_FMx9*w>+bQ}x+G-=hWeNSv2b8pkKm zx`Lel2`^E5Qt$giKgR*CpT+=O;fcwMkmgBxh*xU6mdknaM7-j|WFB)%AALlY5S?a2 z5cgfNe*zW%Y+tU|`zZY0}cSDT(qXWRE>+eUUgCtl4opO5ztQ@r2LOPRQP=BsEFLZn!l zf0N|S&*(!#DI7gZ!K~i^0jr~~Y-W9Xw{K5J*&y)bi~jzGwZd}%5&(4oI|6CG`ua4z z1Cdw@#bcG$l~bNtbl)}w!&ym$bE`CdFkB_dJDJCft^(B_I`QtFStbbTm3qWK{}2ep~xfohheEoaDKJ>|v`%N6S> zg(4sKv&w)HyatsCYB*nBKT7}uw*^*L=ljWpX7$xI@d>(A8DjMrHJkI_T2OtXDQ>H# zDyA8$e5Gk^Bwy>wx<>5Y&tC!VGCG+gd^4pK}lI0i=|?PWq5Es725 ztO5jZ{->>#`=xje{S#j=`|J*Qu?47fj9eC3s0EK0*v z(cDYiWp4XyN}~5q>79wcpXlE77rB^Xk3dH;{$G7L|KBB;0Vko;^~%*ZxoKtZ=z^s9 zT>jsyWLuyF6hZ3S%0`h@mKc31UC2L~qyuQr`Avwxo`6BTWUu=HfVD>)9yzY6-aIOv z*zTC=hDrMgn-o|rn5BxuUE?Jd>k3|?cCn1k4lFa6=4J^DY%M8zZTLM^My{K!snU)1 zT0O1t8tbmuwo`F5B`h0Iq7`W`B(g8Q{I~CiJ~Qt;v#%XK{=28|%Nf45s(XOTvgRFj zjFhj{E^W@4y;-)Z$Vv~6h6(+Af%F0j8I*g44LE>ANX*6twHiS~RCXsM1#-!C=6zk6 ziV+=$uinGgRZ!S(3K~4eVm{Sg9)@DZ>EG#!yVW=(wm>whTu1kHOSjOYKDNZ*8_{O6 zO%Gh5$=e1J%OEC|N`#))ZG#43dWTuE?^muaMa<+CWdRHe7Lz`woxWRfovmdeT;adt zNT*}u231WLiRAS0E&!C9qJ}~ zAPnoanu^&?Fbqx3Q~&U;zVZO-S;>sw6BOARpV!h;36RQ6=yQ=hYIXto6r9ZXrDsEy z-GLzS{f!)G0D+?uOclN6E_ReS=~<5S3G~u%FME}rZB5GR_g|tR%%6Z7EiDZHrk-W7 z%b4@=Y286N zVVFsYFvuASH;x!OrDjed3qi92MQ<8UTV}sa<(5yCDPce>7sKHb%S1xiHw2Lv!ih%f zha@7s``CGC{iuA%+feyt1&_0ZPjlV&Zvi0TI&chqWO)=|oq)DtSmnAr!tmp}I%)iA z;uf=(1;^P6C>7&NxygAPpW`D8s>NZ> zvY3=OoMyq=$z+$a&Jf6D!7>F^`}ASBGp&QB_&uNP4@5I4nFuJYdaMX7(JlGC$>{au zTsmE$@?wD&vGfCZPRB*(`heJ4_tI~S8N>5dSC;tL3nAlu>bUjT9=_?Rsb;(n4u|S` z*p;(A*E|bB0Fz=E8&Y5lk}`l}4!fYm58g;dN1TIrQ!`81Yhele&Ic15-J z*Z|*ZQ4`J|aIE2}8))?v^`keVCK9_X4-!eJG=;vtf?)KUo6VI}+J^-rnL12@`M?lR z-2{WN0u?em5*8KYe^Q2#($s!S_wPWFw(A2o*;omvvxRY;SXZRYQIiuCMd5-D-8E{a z>*KYrUe*IrrKu^l-(q|kT`@X;Z*kf*(Ny?!4@rdFRxl18ooK0|sU?Zkp%$CP@;rkG zAml{)u)AtBu;bAcTz0Ro+rSgGjiiPJ10T<3r@IrSh&2euhIUQ>AuPZ$(&#V(5#}!^ zH-a@Cc1ayBP~)Gar;*tR<*~N}TOEHAxYTRX-%Mg&X?Tmj_!7GL8N%<-?Qp;#!i#Zo z1o`}J>f!>oRF^@)lXr9b7Tc}C^!Ggv0s5Q3E{&dmBSVz8>nozkk=AShW5?l2qb@Qh z*H&7lqeI4$+T38e{+p@>Db@iQf~0`ry_&)l=DxA@!I|!Ik(|jmP_JrDDwlQA9lih1 zCm5oW13^5RxFo7-LPnffp%hwJu&CmirPCsZ;E@ltayeHpm$Ov@xF2cJ7B9KFR;LE0@6BELwWy%tvGIk;EXRMArV zgqkKFEi^y7IbRzv%GI_Y>7Xm6xqGq8D06@Y*V8H1D#s7`Y`G=)ptXfXs^w#Pyg3)iu6nNzsXcpxGTAbpDX|Ak$hyV5Iu`Pgxbi-(})D}xD~!m|b3N3nbh?T^tE-_K;rb@&47nX_iM^Pi=k|Dl z=o=Diyd*F$6Kz4^?g9Oxo*l>;NGya$j&|vrf}=2RUrRw?U}j{bkfWrPppT%DqEW4$ zlcl4ipPi4Ssi0MZo|cu7q@^O&5D;5Ic0m^!Uz&j>CvA_7f1`84PssH1*F_A#5+b(A z1#n0Z!T+?q{-=u%1_&iFK=KU=guVzBfaEV7cgWJ~V-#;P0Z<1@u`;QQW90a~I;0dK zA4650JBV8RnR-#$=ihyVZd-T|{GOKeNVa+9LY2AP!5RoiK)9XTla+g_S^ zl9`JEJe|Rw9+iUhj+uJov|wu6Y_6cnU9FiNtl81<8;$jr8bv#iuFGv!t6r8mRg;L} zY&I;HNaj?gNUT?rDv?%j&~-wst>WQtd%ZHktY!IL1pA}gZ{|AFOC~1e6mOTpXLs|wZaw;K)7N}oVbcm5BIQRVcNbWEm?f!P34ICb zAcoYz#!PTdQK;FlR;5mcS&ogznc17tYPT*YRc`9%lcYnHDiU$JO83^1**u5oHnb4! z?}6+_+9cBOLCh4EY&+n~sv@8*m@CE8n>I>U95=<6&6G~yM3#FUjcpp!K5^5c!vk{+ zWw*FbS*7?H?n=y7+Gtf$qMG_P5!nwONPixD?&ExX^oH_@(k3tg0c2XOCpploYLitK zQb2+D*{~-@>QNr6Bx8UM0vML4P;O{-m!DIWsv-pmRMxXYhD?x#@kr7w<&G*iD%k`#36LP@iLMH8 zTBYFM{&Db>M=G4=EBC$yiCeU-`2%R4q}a+ToE~jsy}YSC7u7EW`I_g5cWD5)q;efq zLEh1f5>6)xY^eI+x!eeaioTRuWfQ1mW1zb@An?>ZDS}TN2ehdR%hzZBCXx$ge8d%@ zvU1%4!A*fA%Tj)K>|0oLh>1eF4>HIPeMAAl+OqjTwu>YSc6R7BR;SY-bCv{nz%HZ2 zB$H~n6jd;w)e5nN?lZZ^xWH2hi zq!27qpd+<}BGqO&DtvaL^`43jsy1Q{N}WExT#_Q&wK!w?K+wR- zjP3GsawpNHBSo120svO>g?)dMQWUu|Eoz>1OkI4Lbgy$lx?6kuxwWCx(5Yi z#Y2!TRtOSb?Y3tjejEHEe;aIUh@=@bkfGiRBf?3*r*5Mqf~WY7 z>>T{&&jy%F=1Wx{$DNvVhNwJ?F_~eS!8i`ih!B&OJc%T|9G)iu9{J@dy1L}Ypw$VJ zrk0Le-B^Sdab4Pgyvso#H(pGbA?X=AckePV+uq#td!cgfWq4CZl$uK84ETqbN6e3L z`6&SW;nVaE;YU~PYzwzy?#@-@+!$Q^i_mCHa?6t!m+%U6g$$RZ^mXtUrW%Ye+(J&y z?hZ?ARP7QHSq{MhJU94>^a`1j(@t<8hr(!1L}V~%IEg3B7Ie3CRKgfhWErgNX7lII`R$gbMhYa?UF0r!>2M|@~mhZt6AdyBh7ILoR;-7nKE-T^P9)NDA)Nl{lB8$ zojOY>qj-q7A$l=_cVQ`ZXW5Zpo{nj7i~Kkp+^t}j>q_?HB~FSh0g;j)^LLb78ykYN zv40mI_r1@i6TQK1lpKF?JS(x5vg4n<=8MfQMTgWfEOG(>EXU0Q5gSRFFQeO^#0X{# zVvmNHw4ou8LXeCw3H1J6?wyL2jQetcn?~p<$SSKALNe3$!3^IY580WL{9D+zo&!0Zjx z(DvJ)(wMWUD21wzWqIFfjiZ?#2rG!XjHV~i>1s?kXeykokba=!ULHTCCQF27OEI+r z%lIs=*HxuD{(XM@vj>WbE3g6h0 zdu*yMxDs^+6h?U(P323rbjwQhHkHw(p(aH52f-UUCNDU++;nPgVkWIpIDD{5?iHJO zO$rKdyPDyP(TL->p?_^XslX@nPTWl?fOU@58EoFG5FfH|Roa6qmyU?m5_VMr4wFoQb_bgR6ivFGx{ zhvGDyP+-X|K;T?Q9jyh`49%en0A%^HuCoonjR|6thXLRX9GLT@T=1?G5A^$TuIca5 zD}bHZxf!W5U5}fkBQI{fUD#~Zh>xgNeIwP9(B~}(MM=q& zBm((5joOk|aE0WWC4<1#(iM;M0bONB02krLcds%}SQhjh;|)FA?>1*g|G1Wf`9c}< zgw|{}yHv*TK+4=98zVo8RgPemM+O7dNxfg(0-s^;wyg@2P~K0mZAdSTPkbD-_}Ot@ zt)^afWViO9jq-e(tFid0#CXUv0~;^viUuW{Tewn8uM@*f9>Ejjq>+ZaNVkjhyXkJ0<&&@{$8%?ADncZ z+pQf%j;1I1p5UjI2DOjnp)#==C=Zg+i0Z-(tDTt(4pJvxNMcIVF8Q!5yi1}BsGIlV zTMpmG*GNr%##qz3BU)C36~*w%;9iDiRLiK^0GIJpIOczp5q zJevrRHgq_2AtcjZFZUNfe&6X%w28L0^60j)0~RDHch-pCDE`C}*K%J1@;j{ZKbdIM zdIWb@x`>8%r$<#%1X<875*R=98NEzi)kE@@Etn-VZ8wrx%Hi_2vZozUcG`=cMH(US zY3!mP64dYm;il|tj#3b+_Q}YbKyn<%5zyg=80#;E6?Vu>eeMnG1T$!Xy__53yEpQG zxd;4hal5jfDuq?N2q7C4BZd%@;+q!9Yy`)??QR2%am3HO=eT>=y#nH3Wz;b*7AfoX z8~aJzyqSQ%r&MfTCe2G^-mO{H7DMtMj607F-cm4BR6B^ezZ%7tPCdnnRiaoaR6wy%mcYypni z+G!poO6CrXcm!0g)H#1cx7{ytbLjN%zNnpV{1t9$0_vD8Q*IU6ip=Z1MAO#uXpMN< zdzzr|<$DUYV^eZ|^j9ou8~r%5>JzY!g>vca3z`^ocJaPg6rHw**M}=+Qcp_yoJ+u= z!`maa`Ixb=U=kaavGSwD)t@b1VFJXj5tW~h#3_0zm~Vqig%PDCt6xu`YIdht!X-|H zz#3s;fylxuVD~0Fd;hs{8+B9pgH9}dW_^gv!u>L{_;>nbF;m7XmWHNuhOVyK98JEC zd;%2HRD-GZ@Jt~7*2c2cD)pF0j<%m?iAT@lK0Ca;Zg2!vD((2Hu>!3bdq(HeDyi4; zPrlCMSQy#dQ)rwY&R0l7YmPkaFnT)r!c^woQj$JnM01;~0#dpIsI_3@5SEl$Q&J(- zp=>U@&lr-Ug~-9^=8+B`luyYbYy0Ng~?h|!>m;EJcJ zRXOxXZ0xCs!iBTZo^p!XhyqL*(Q%=fw3!Ik^Z47Sn9E@YL|bfC)5P0VOO{F9{BDqm zUF56#dz7|$#xC;Dfug2jV`&31A*&h!$i%Pb+d};+}DLS zaxo&rTZ>n!dbiZmJ~$&~4Z^(xO0^~i>!zG&e2YnCOe4!|uR=%*yv71EKn4(_;U49Y zOTpC_-_rD5Agv&b?g{iR>Osl$5+n3D!L(f6KHhq4CD$#AJB|xB3515KzfqH4atrUE z-rkKz>7&i$P;Nb@SRR_kw>E;zjFH}mHGJag(N@9t z_v2&W(pM07IM_zrqGm{ul;qzl)wMTlEjaBZX|#i?Ju_4%TZ{J-w)t!{QT zmtc`kMXmRnV!82~pXV(za34mO2)_RM;m+Z6ylU7Ge+B4}w`r&kq9G7%b$HO=G zt2jJzx`=lu8ww({Xa4uC9l=w%3!jdeFP7aiU|4Pweb613_Iht8CU;T*LvF;$UUrY1 zSfv50EdiLGPinjyLTroNk{()+Run8JIU)G%MhjccJTo3+v(ZbCulwZ~Tz2Vn1>6t} zN&Dj0X4Re79NSn}@3Gt_RsG7~lPhlJGhBNIZ0NiFsgFmn-Ej%Rwe%%ME>by6kR-6B zDA!P8%fKn7y;>7tx%JrL{#dR?z=6AfflhK$JVnYe)A}1yRUg*WBWqHHFs<5z)kTP( zN$?vpeHVI8Fw`taHm$rM9Xe6e)e2ksaxYaaYa;&m;Q^+)Cj9-Y4xujQVoPbNpABs}9EEQk(Df!>DT=Hr~8QfzYT z%(v$>40+awbZ&_;+ry)D^MtpomcOmXuIc!WdD`te1o^2yDu-=tV84P2t<}XqKE~c1 z>vAF56zRqYpqptVt-fa;B{X_|OKB;bvv)m3N$@IshRa&`1gq0xUJ}+85B9U9t&!h= z4|ibFS73F*9yx$E0LlMbLbz#{YXp?UZo;yEsPLmapkCL=wfOH60==*2NjP>DqHvdh z>{X&t^@}K|^nXTjwL#GEai0>1#p6#C&w%8BSb9bMlDUB2QC5xT0mg4lNm)KwH>&|F zUvckccap_HgeB5w?d^^n{}GET{C>!06qc$wn_F|%0|0=DAB=V%=n(OLhI9=ENgDGm z`N9`V?48@RzjmmTeD@O5u}*uY@nmLV0M5c-NB94N^qw<$brwP7t&tqijqn@BXnKcdlYSdOaPOu`^b zbNf8@bgD4HLQPVKPtmqoP_y4;)uu)^hx#Fl5_NhbkX-OOar(%dwy|UGaXrp_N`=uR zRarit3ct)<`n#BZd(vq+O{e?ErhD2%->SAFI1GBh6~kRCKqF z@{{51_(cRfXV7n@mrqGWx;P3sK(EDWqCKs`cAl$5h3Ia-DpKf4i?l9lm;#XxQH-jk zv4(Uqs}`!0(-^7&sKw~LGB)xsmsV#-ImCh*-Q|`&@X$q@ z+Oj{>M#Xk|E|p1N>vbiqnW-ybqAa923Qo5XY_Jj)s?s#o>PAJq zHVRa#A<$J8TzVdw3f(t{1M13=^=hagS<_kILfY0$qylxG+X7(irdwtJEo8% zNZ_qeATH^sYFq7PBuRrxB!7;(7d7fwC><7|&oC*X<6_$D zaC1l6ww8yTbxJJz5c-C4wgZ{;qq~beAKd#-jpN0efB@I*jbxyH+!C)QF>GGBZ$pDR zcVpRs4%U|KIzLyMIEA8(;ln%;sp8K#ofNUIk(ATL*5BYN6GBmor9$W#kRQ6p!RkrI z)(ubQgV>H=c@<3nD0N%hNG+-cPQ>GFH$DOHKRXU zoV;gnfp~^v8N+!wykj54yw|Lgd1qOb#P@GvPNCs1p4X$oy;n}0;=LU>d0=7|Cr*KF zU+fEYDi5Lo-~=Qizw%&elMTg{hea_SY3%~W0e+#4gH*c4>;fa{s-P}~PUa~84{7fh zX4$fBi>7Vcwr$(ath8<0)=V3fwr$(CZB}Jv=38s8eeOALzjJ@RF~9L|M$8^9dc z#q7Onm?WcM6@?V{BC90`D;Ro+&!{|_xvg--iis~Ipw=prq2Yq%K(@D%Y1~EUz4lm5 z89L0ywZpt|4=1oj0_mYNE4{ANmNb2}Kan+P<6M+x)o!Gy^O9cM>?C*$ER_1aee5K0 zydK^9bL{w4y1?p1eYV)t1;pFhS)l4>PJ5g4kLce;E6yZc0}B}oFCe2l^^Y-ca7H@+ z#G^Etz*N}$Y_h|D=FaWGj$-QJn;GsK*eLllmbPt2XRr;v4Ty0E1fq2WI| z`&A32Ia}&g;@Iwh!`^c)sl^r4*!LP&qh9T|JfFo0d0!NrgboS^nS|B>MF1&5uj-sc zVZg@r;~kX}%_m|Uci)W_o)CdZU*R2P_A$8@&yYX=pV@UB2UFRe8nsHZ6%dNk zjV*v;!^P|_!n}Zww{=ObvwS13s>RrD;n$bIiwJ*pZy*>Bd5X4G3KHP~3JO<L+4BA7V$QiUWr40DX66I2C6lD+KU6gq-qCh? zDoNLWd~=M!G(?I{peqe3iWXVbK?c&B8gSj-8kaBg0D}#ZF2@z06Pd0P@hUV_4>{3- zw&TM-l&A*-VNPI!ZC9pM|5%@aB|;wx9W?+3F{}EF@$+w0yGba%J#9zdhW$zO_PHQ* z$oA3@+}H-0=J??2>14we^b$beqf}H2uKGGr2OSry16N;CAcV?Cxga#-!qFwU}x5s8M=bbD%05CY%mT+=9 z{1jp|?bB1mrJvJGRlN=T%GhYrD05+R&tGOX#bo&WlFQ32lJ<;BeH$`!=IA%|tG=-+9pbB^Iq;y&j37(CXpj~AFMkPa+tOA{qYv*rUEZL%>P&jp*#u$nS zNpWK6*N?)7rGcWG)NwGM#=i8O9D>|dYcI()@f8hNcZIRh%&S=}Oe}mX`vT_0WC^}A zx;)fP5QS`$Im8(b!v&ed=hHt1ui+xL&quHDyl;()iqpHGH5fX1%PD13wqB;qPd`J> zg+N^!u9lvz<5V-na8)_Y25hEqjSzijt?QO5;w$lBE_C?O$450ki7y76CSes1sm zoXj3T%3mPX47H?o9!)ma;oCT(4+F4B!NmlVwqQlOpkyafe8X~Y=lBCj-EuyogVQ_xR0!vH1m-9Clut5o{L;DI4{eHW23ps^p`Nwcxj ziJU4b%w`X7P&9CsO0GLd0BjW4wl+qLnOtUwX`1ptHqfH}7FTL6Fl@D@Ur*h6`7 zu+OlBC?#1}JTLzx-zX(C149x-aNrmim@0R<7@iq-hScwlT!_*akN4%$Lv8ajGD!dVPz9W)+I>^dC{eCHvq+|pnSkCE=i4}`q|hl2_-|)PulbkybZW80TXKez6>5cbFm1)0(IAE@m7811 zsixR+8+k*NU!Tu~5Yr9hjMp&3H$2QCd8kb5vRU&l9z^y)0OO>L&guG7rcIgnjlD^| zjV(RdJMGQcB%0{Unj`IDx%m7}t_2&F>gq7-Y9Oj=u$~Fjw@H6YmFTEWJy(_3SCZYg zIuboO{-O>9Cp<$wI-Zf3Io=+fr5H0? z;7B?P)2G+mqmdo>xDaMM)8wcxdLB(Fc#Lf<{z@LMK%swa9cTJD{WXFxuBFA!f-xxZ z*16he53j%RfY6Qx62+$IEB519Zx+9tESEg3wT@C(j$TM=g)Re5Dc*;09_s} zwU!$r{zC||kX|Hj!)j$3yKX!?`Zm|ZR@<%ZwqD7@R|!bbLQG=_*JN*O%z*1#a4QzW zpL$Uo0nmgD8#l3CwX;;wLpFQ{JA)pW_*{~%i2d498U_dP&3=D^k~1&{U=Y(KO`?Ty zlk`;1OS0FvFz#;S5t-z15hrEZ(K>4}MSV0K4~RKRh05}f$PrN#n845HKR(5-23;kW zXiT^Oh(E2l4&x>Fu#Ie!C=0m^zxCHX1PO1(bQygA*t_-sP^9GR<`DPr^8*65GWU6y zzi+2tCGA-CyO=#m6U0Wj`y1MLW?Swx+YVwO=79!(sx84DCcv|OVCASbe9F=j*edZ> zoTiL`u8hY1)Yr(y6A!FAXMQB@pR$AE!_Zcsz|1urdP@x7`el7yM}QUsWwLcbF7hQ_ z%>}YE?g}f(eKALr(-&-cp4`;dWqt>p^?i+P=Hu6MojMEss^L@Tvc|@A)TW=t-0v;U z@C7tCT(t#>U!N|bPYpwx8;R?EoBCZ>wdxvBo)5Wj+CYpGh^)ZiW8`jIz3@91?O~6` zBe&2t5Mbn)vqj4->@14>cKU1EITnbp1&sO-p=F%jGbejSAlq+{8hK#ec4GsxPyN>R z+lqj@9M+;&r?)aMo~_e*CP#uc2cI7N=vq&<#Yg^Z|UyWV>-KLEv$dm^b{TYFWMy* zAO%iCmjjRjo&Qea=Dcq@ItuT_+RhPy)6sQiP&2-ruhX&-%^ipgbYu%Jat<2A=$Qk| z1vK`Zi2c`x56y*C*QzRF!lo6uaZ#fYzh(~!*{DG&92QNnZ~Vt?@eRjfB5)=TIJDp^ z3&bek61KEP39I-7crgRTGv|ZyMaNQt7+Of(9*EqYO^%9D&soP3HgWi}J9+}8lwxNWrsOJ=^d1W>6A zAZBV}Wr*4K5yU)d29Qy+!R3aQ0z)IK5+loze{gL4tO^9;Mq3~y;jizjZLREN?w?mv zliZNkkldLHGRT9^kT|IWRZ_iwg>`XUd3A_=eSUmoU81CugX5r932(*v!(%-Hgq|&Xfr#aIgKYhnwJOr`cwV z%gU@HP;VR=0004?c^$`~mc|XGeGQN+LHMl~$)}`c0C+$v|F8Il42U0{0S88T{G&q+ z(EVG7s$;Rw8(S~r?3A-pU7SZgZtWxDz}&PFlrwTvoJt3zCeEo`emJdlXVTGLW+lSp0=<~gWY z!=@QLxLsH}M8oP!;GmX`Uw=a0PNY{} zELA7O*~tVFr>lE`*&9>zV;=$|lZKBrl5i1cUeSkB|vibF{_th0l*fzh(VkChyRPH{M2q7r3C+?|ZNyoc~_atuQH z_ujPSpU7~rXZ=|Bx;zlP`BP{2qgJy`m*B(lZQA|4Zvx@2 zV}QZ+M(|)Ih_J_;O?kZ#$z0QjI!9_S-wyyM{u>x6RLFDxpaftL}?Oeb>z^rs#I}2 z(FvLBme0L*67VrH@DDnOoM=I4v&IwCnO2P%_Ncg5f-OdDL$0@S1RoHEiedd*zX*Pu z+W>;J>?V2~BaHEvtF>arbPf&mgx&+Qfnl&)_6(yw*2dAVjIywIS7h!HD0E0vMI0 z1c9&^MJ+MM(O8<`@Z^Ndcn>j$-$mQI*TW2gYY5Z+=K4v2$rg14iR=wsOu*#%S`giA^H}&z= zZbcFpe}@c3Z3PE&di7Jd*kyin2~R0`Y`Gp782 z>>?|S5AbwFG6#8MXjuDL>jWLVHu&gkfbZU8#Q$@YGeLpyNoOH|N5BP`$~EIe*b^X? zU2{YI5e1q%l&6SAm`G=z~|ASm#NOc z`+d2=XN#-iP0_bbag0>fW@hMhLU87X9DzWn49r2lt0*FIF~Eh}9+?!AlXu64Gw4V+ z1pIY#`1ZE{vtBZU(go$?qTo0JL3)Ccu3e1;HYPRf(O8^RJ$A6wq&72cA=0(c-Vxe0H0@qcn+z+p6O`=rZ75>>LuGElC)@-FBUn~1uc7}J zrH>*G-yMY*K4U}{!*g%bk#W!2?{$~OJb;c&PkZ!%(W;UB&nXDlu{TU*_~z$JGfD|C9NjgbPGMA z3iwn%Egr5}R`g{lt#)$w4%2aQ)ctJLyTw<(`hg-Yt(Yr*B6(pXj{)sMU!dYn-ww4O zm2{TWdU91dwVT!)6{NJmUjKT;vRLpVaJ2bR}Jegrllklf?nG;&)DB4yUXjTPq{BmI@Qt*@hb8 zKx-4fPTC}T6()Bj$9ag%BOLl%?|;^hdku^z}I@n*aGt5F8uf+ z{d^=Ie4;djZVs=mNMk(^W zlVJxUgX#TjOc?Kf(UN)cFjy&T8dLCIgSEovMSJGdBG{d^9wsNeY^&Z^q?#@ zV?+uAKND>QCn^DR(y+2*C3v1m;_2J0^5>Z%m~;l3Dz4*V&aJjd0#1$s#gA1V=j{d8|$3Ju#BJ=NiZU=c;uUQFSG(FcAf_#){(*NeNbZAJ?hn!JF!n+Nu6v?HoTUeZ zTg5DVnvqf6!h**1izev2L#?AX^kgOpO_D~8bKc*-{d)17xfBkuQP9VmGMiA~(ge&l zGCq$kSbuapEm$G}os2+Y{R%agpWD`udZIh5Q&>K>r@z3JMQCbsSYMtkfzBHNN@uW` zLIi%AuPWCdi=w7cUib{qzTtiRHNrKO3{Y(`@( z5_$OjQSoFaKLTC@22hZysPqV2CpJV3h@$lG)iKjFUQg=@0W6+#NIZ{};>k7Pw>n7~ zN=f(;677bYa5@ZxO~?Vf-)%zW&MFxrXlLtorcby4=6Q^It86cN->N8}k@9U8g@#w7ejxxJ>23Bh8-ja_DN5 zl#DAwE`piJHnhUX-_sYZkp0Iq;_LhJ@XT;gyV{Clz3$FG=GUx$r}Xsc4n3>d^XxjAvX{uyb1kTUP`tt6a5(VXbpe^_#@D7tHH0e z$rt$gbrhBZu3s94x~?UDVD8w)`L%o_W#~>;0WJW7yzVQzP-+~FT$`>QBd~&eqvRMrnd{ZQ zHDTAf+W88pf6Z%9gYK@v7On6d<-!nx;S_VJED-$(I%4$4?;msa#u!OxWJQK^su}w$kJl|KCEbw_S`rDc z>Xo2DAXbkhNoYcX0D)ZBZiMev7?eV;*U}J>R~%j@#A5%l6^^s@6Pvme2ek&|i92Ut zE4by-P+^UoSeL^^q1svQUIlc}c|*;MQ} zJ$qCGvHMsGhZ-B~)cBU#)%u+=Ek`^+OvSRfMd*SsP7+!DsI)s;>$Zi_Rj&Oel_udl zvUWV%1y$uD8n$L*CE{Me55L~-5?Y|OrC30u8qS!RkJT)i9~m{KCS*U%ob0(^cMH5dl*kOGVG zE~>sZ*K~Np5hkD?^XtauYOkpeCfArICR^i3I20cbVYxoZ$;w(zzIp}rfbjKzlsrLN zNx+CyHadB3=CEcbsS8Kq>Pk=u{=>TXi>Zg_&F@wn!_DD5&>%I`+o;d9%d?X5{Aq}> z-pNdFR!mkdV4uth;*r6j{5ZtpKU^!T1D`lG;glrpR4#+tT`sX%$WZSh3S4^j(0m-0 z>)%Va!^>tT2p)eLXf&90-u0?*UpH}RfOqrTgh6n9?~uZ3?u8L-TTY-JJuSAGx810E z>AFI32d47mJ#=y|zgh|?ptTaUZ>Q%^={)%WqZ9E`wa*Q1U2pebVsl-_hh!*m5)zs(_hya&q531vYl z!x654_35$mrhB!d2_NAQ6qU}4@$jl@YgOw}GtSKNV=hU*((v+Krfl5h@iyYS7;*T# zX3~PQaQ1-(5iJiH0#k`UVAD3-2`d||UU@!QAyYevSvS!`+nFlnLaGCdWw?_&C^F0GD+j6cI$} z|GcU6j6&Y2Wj-1N%I00`5*@60WTcvjcN{RtW}HLvb=ncGM6YJ~A zOQKRdgJ!qB+P+FXl#5&Q3)Goa0J6_sUWJF{!&6iRRXM8Uk>o?&#+J;b63Y#jkrMc2 z4ZVn_Vxz>hu-^(W0pF3_*FmlvA>_CMmRhetV77K|f;Ym4UFMvl{#fky^>wXs0anQr z6}u0juhmQ{45GK!KxX_==i07zasaMi?Lb_J@TaJSvfEOe$Nw^!eV(n6J9T0iQ<%E` zMAqC(bvM#XL`p!pz8;gI$B|E0>%NT)54IBaHCL9L!YbtYNOtab?r-V*zT6bYr-U1F z^v0I*d}~Vbss-C9`aCsyLnmP%o)0Mh5`01H5n1bLCy@hcC#lIvH$;zmW&3yho8em1 zR_fmryhNYpCV~szb9=KWC~IjGl&6oS#k7s1OJnPQu`dCr)uG?qoikVMlI6k4ymF?I zwU8~#;r5)=Dbn^75ku)K^mFo_7ivvF1qO$Rmq&#^70_9SdHeL`F)M!k`3B{yapJoJ zuFrw=%<-A{lk7F9k8HqOm99q)poCcN2JGov^ZBF|b={1{pu_@gE5VEILj;a%d*%Qe z0_A^SVjp4sUv=wm7&MhV7Xp;7u{qQDHeM{T3fy6fAt*p1EHB_4mY$G{_5Y;Nw+e{o zb>Y&lm9UhcoLsurhc!K<1~|ca9UD=lAAnRU{&z}iW8Met?yJfOi_ntPX@$Cu?cNC4 zNT(+DVnJ4*)m%7M`wG3k2Er86V1aQI4%RxOyS~~E48#-&fprL7h4~+{Fn`jifq3P? zG%79$$5i!FL^liy@V{hX?w8WxP-Vww+}+?hNdGF|cD;O61H9Tp`}Vm#Ltd_Kw2a?N8=^S`-%bsnU{L&U(C_ zeEQzl19%fypWlV&JVOXa^^$GMhx43XJ{5!E1HGjW1yPI?A|r`?+z@#Yhq z!}24As@5Tto~{r-sL+x`hL48KzZibB_4%HYs8|UT4i0Fw_36#Mp}c)m$P(aqzH6eP|QV;`U63*6F|cyQZu#-NH`+V z-SCLKGE6B(EU-Z+n1RFhu`qLQC_#Bhd|XM!-H~_f4E1OR`G0o||2c>@RC&bDT?p$L ze1hSFBSqGbuG?vYU7W7t!BagKowBuK&!5%Lrgkd5o74B7tKS8e4lx>Y|M3H=*2ZnI zLgK@{A_{}%&Y8(P2LE^?66Y#7T`CA({-9(I_o)UNzloBpYndK{zW8W1lEMPmbScmPsINmup}ZWt>4? zJ+J;~B>}Q4s94VHO1ZwZAar!qi;mE0YL6yQW>zB5PT+iuL)j9;yV7*2Yig|hnSUJ{ z5%yR-4eOHt_JFRlRGUoWC*X1tA`;_1Ni!!Qew&Ohdx_KdK<@08Yr<@VPR1joQM(c* z?kDg?XD;PzLuislb!udn5NhzKQHS~C+&*ax6|QwlU7^ktp9wc&W7ex$a5QO*sY-l@ zYtf^2mNN8%DN=i1^PtMTuxJ<|!frfy-CN{P=t?S@>#@9QtCr$!of`(Lj3HqNI4)in zzpH4Jxdz5M17B-q&oF=th1+XYYB;DayQXeSH`3g%izTfj6;!u#4gIuoN9@$_#znd! zsDJk=+da7+)F+~{b02L&9p{wcXw@4#{SdEGQ?Z^THnR4&rHx#<8$DJwLL%^<0n^cZ^o8X-AsT7KkWDhDb|?A z#Gky`NdV^4w_dk@-l_r-1ljq;s>N+OrQnZG|4Rc-raFsjnAKRMzvBve<&8ris-%u) zAfwx~liyl2X$+#JUC?jtb4!8BOe-E8Y>RUfa^XDO;X0~dViEy?x&Y59o zKiJQ}ZoT{YID~bA>2GYN*$Bj}STtgL7(1FfIayT(HAI#CS1f+Wd3ESdp*Fe>-r7U2 z2u%y=+T-Lt%YRO*fz)k{Ks51`7LJP5PjMa`1N6?L#8>n4GNa`3`GU3}fix4u@b*Ds zS^wkQ_R!&}1=`e*y)RqYDqqWe$*A(+?C*2Mrx_%)1Kx!^X3rcq)fxLGAtVhPvL%jm z0-;EdA9i6XWEMxGR$+AD6@?hWG)Txu!R3v3K3f@^`b}L3ElR1F`+=8|fw+_@xQqj! z{jx+(`}3ezEl(j}KKHlNzI)Tx*Jm+Tgbsf14<{dMi&zpIX7BnoxHlyDl|*gyd18YV z#Q5y2lurr=2Qn#a?)1Ks74SL*h<4s|1K9nrBqAMm@GK!pn5x&Ec|+u~YnWPGv7kNF ze|C{0lhvr}N-R!ZqN$L@1pH^DpysA7vxxTRce2v?7!7Ko?PJl2Fh(4V6ApnQatg6s zbtpg8TGNSgsM7uEZ~B1=Hc1zLlEpKb5kTuY;<69N{oq@Sj*Q6^?TMVS)KSeM&p=4& ze9xoR)r3jJei>fX(!`^_fSQmA353L>ZoaWCbjsOe7@BEg}ZcTTHQ3#*r)T0-%5zq3we=rP@1w0`;gMxS?cP zYh28aGy@_)$IwW6*}{h@*C0AMI{1?2r29C5S%@ic40 z_!tO3afi*GE20pvCB^Wdy_gI0*Btj4lKoMpCSGmDb?VOxYS@SaM)Oy$TUVonq5ZjY zbazRK=pFmhN*quPf(-zGETgG`5gH8N3_SFVci-yzgRWVFj?|1327cupNSxF$+G7*{`lX_Ex*s- zW~}9?<$$ht5U~zGg5dxA+bU14Ci}lba`0nPD|I^3UaqokyD}QITsGl*Onugpu5sn*CFAkuYMsyWocm0DpR$Lt$dk1JjX%Cj~AufKlnDZR}->5fL zV?x^of_dhAjD6<#4B3~?q-VHh08^HM6J9}=pZxu&n`|J{?`+6y$iz1^)F*mlI~!0B zyn;IA+-G|hOPZZwfG{uyfEf6lU-jOH_hTLCfaI;LeJAt*$r}B5otcS=gN=>I)y&1! zz|O(c%$C8?3+R(OWM9OFg<>Ew9Fixf8cC3dR2!fHB7{bhLtKIket`zJ*1P^Cr@vrI zYS#p)1i?qkw8!ylx~IxNQk@PETzalvUPFEaz=Pua_24b#gcD6a0tx)P0wO8U_CJ($%1vuryO$#Oz7XM`_dc#vW2qP&{-X&-#>wkck2cuhwD__Bv+;SfC zedvVldtdGL4|vVH2`}l?#QoRjF-C8lZ5Ro%c2j?YcfpM_a|s+Q{4eyPeL`4J0gZ#E zW~JEKjLavjEIhXErW;dGK%VPRnnxf(^8arOvjQpS>ApVr8j7qhk7hPM^RwrM zM-;vj;Nc3jzaGJs_dfzeDNtjQn^G5#1@)4%37OENL4b5eAy@u#O!5DAwZ?u&l_(Vz zPhT}6*#Y(iq8jvC91o5v<`O1gpcXHf@gtBBn}1oF_8*oqH`=B%1gLzHuj7A*yh)gs5~!>&R_tMm`d7l%MVWG33^ zcC0p|y@cS+RfWJgf5WV=j`rgiGK}hP<9iZqhQKAv8O*{aCgoTu42)Gw*|MkS=(vBO z0^o|76Uo^#6SUnMfttXok}~bXuoEdqtW6P&q?@pYuqcqir%m}W3Mb;}RIc@4gbJ#d zyf|X`a8tY@OY9msugrlWJaKjY0+scDfO@D`d2kY%tGo3|A=l%-FP0~CEV%N|YJW~a z@IOVX7*_my{jw(g|2B-cWcfJOHw+Q$Mnyp7&eWut|r$VZFoXX#Zzt z>_dgEwFuJr`t=YG@0!$qo=)W4E7jLi@m+{aZXb2mXVNu zCgz|NzHuKo82jJthrmZCFtJxS11wTZA%HleAYg1mG5_w!ceo)a)vAd>l@1jMrwr8n zdIY3%;qS;;ttorb4s>w~)+j-u5HRdOCk#@^wCV`@E_67i@S0msrW=mU+dOQdz=+Bs zG97hO_=(2qU9?9?D^I}pI8T0J!Z^jo49&-}UZcznO%-d;L$MlPclX=23&RWIOI@G9 zuNZF@-?t&Rhd(C|Yw5)`^rM^CbThHN=+md#rEw;zcI%ufBi>eRtqKNt-Tur1eLTH9 zK3=z&fAY+{lI!>25%S~Lqc|kQ;^|wWO0t+M)~g;KE@GUhze z)Y;a=d!LZ3)(IQ5B;Dsu6mTa{b>hGu5oA*}Zq#V)SP7uP%Cg$OLbP^aR6+5Hx{op} zTK0c7##2f+5O-V7%9C6>#|x_AUzEc!W>1Of=FVsm_g_9MupTR9MCuB6Me^pEN4?)e zh?_)w9Ypd2Jf>?{IG}?m=){i1KYv^Ni}t)IHXim#*^*=v@*Eda8qdVf#rLE2?F8m zZU78KpTtA1Ym_A_qH!w{t#MvSB#kjEF7${zv0GEU$X_Ico+NK2NO_yKLSvd9++evO z5-_tK3hbNnz&A0FT=VdYFkwz{ba^1%?5*}`5B%9|wuMd--jiruz?fT@YHmy*HW*<%4jtkJ!pueB ziA-t$f773)eG0x4-_drKK6`2dkJnV<@El=7D523kdzB>@ylCx$V}0+UzJ@;0%lEfZ z+x>!a-~C~uJ!ei9^;aabLydy*`Rwcv9^7kEh^&Elg~4fjXXr+l*!P$%^$wnqu(0ZF zZ#!_ljjWGWRt?^>Vhgcm+91bagdUDCMSBjVek9|$+sYkW(wuK{us3>chql}c zK1*`6cVLhGei1suT+V7#4})-%dZc6H{dbevm{-qW$n8=k>Ev@OYSe7Opia1>C?DwR zAx&+ts9oD`=uxaz-O?Riy++>_uce32jqqLX$Hd85@l-V2Nz4KNu1Sqvp<^(Qd6~=i znWDcs-y00zy-3+I`;QgAL@SOfL|3f;%{MR{zISS&nM1iyhgnB*QoML^hi=`}*dUgj z?KrIVjMK;C@wII_G^QI(xoU9}{1$7@{*GXPHrqPTma+`5tvP5FU+cnDe5{9d*%EPI zhR}(SB`FIjT|=G#V;e7F0BG#^z~VYOjx%Nnnps;w07F`=b3kowV0Zhk%J(ntvesvr z0^|FR%=e0tnbd+ft1US(XPROau*XFyqGexFy#{1P*AHqY^kHx-YO?_vYxFT^*^33) z=+oHkWFDbm6B^0l^bbffLbl3op^;tG;^~j{J5+-eJ&4Ko(%%=d9C#Wdg?|$Ujh^kT%&G_%ciqCM?(6mKw!uf0`<|EH3 zMnKSYg=JrXwupI zqhun^PPtz%vLjQB?uWBkOq_1dU|ipBZV*wzn1*A=#sa+W2vqlu#uN=Hd1&4`v3RNk zDQD-VrL`vRS&?`DR^eqE3#Bm1o^jv&>!!y$ryEqF;dMD8|QT3dL4;rfKuv>#(K=V_c>n>K5O z@%-UO%CT5IjH`9zpcm>j1%^^H;;rk(HKxQ57TsW6!n{%{LedCPixWjl*9(&Woc)3@imrnGl7GZ1#+iT%{kiFq@)Yhi4R!h?0pccTaKK*v z7UMStiymk7S0b73e2vRNLHEhZR`ttGOr3|8a=x|o%NyM2Ov8qmA}F2(jbfq0@|&8; zcCQkPP`~@4`8IW%?_a}8@ls8h?a&V&GQfhPuChoiav#QbmTYLo0dfVVAFCL5a7ao9VvO|~v*!!B>qMI2HsH@p*^B)-;@a7VmiJGmx~(z2&V7n8pig3_^Dr2l zX4tOx+CGnm9iaLa`$YLNLr!mj1-H$mk;7}(Kiu+Nu(6DlcsHM9Vxl(d4e>6V9aRxa z#V)_e0#@xAiOWiC#x@hIYqR`rzjwczEyZ~jhS>xkYJ|PfWJZo6NL|S7S{~sOx~YvR zYQ>#H8SGu9+XLT|^+R#da9wY;XniHc<~|EN+jVz=TU(hd3>_PK?=eKcxdL@8Rx!NKQ}BOzdon*?zfna#AbZ9i?(2Av+2KLd49BW-eFVnb1H& zl1!Z^4pyEyHR?ZX(bUmqZQHh3=%`z$bqkx<=v}FA?b+8U;F`7QhKp`#blJ!^ojqP# zd)(d4UG8?$vZw@UqPkN~yDvgC4hdJKoC#e`Kp4NoQlKa#lw+legiVa4y_l>Td04yb z%H3OV?v^_Ca$Ih?_kJmy4&IsN_i4Hp-729@#^Nrc;m9b*10XJt($J+%T=iL8uae&S~Ea$!U!!I5qQGs`3!@##FTsJXE& z>Pg=8+XtJFOpOO+*M};|O_#TzVa&mlm5S$sO>n(gvR$h2V7EIw))>YZ!NV)NNR?c~ zj)0-SU6Dn-BzXnG3|@15H13^m7V%e7&P1dxGw5+xwY+e$>FTRrp z;TnUiCf9@NQb`Gh!9Z>V_TUEmUaGrO&xHW%m%$`Jh~7ltm^e|~HZ&VvW9ClzSP^a` zuvUO;!{>M&=FCN~3Dt4t5VU$q<3-&(gO~}hIZo@U2cZS{|5DM-Z=;CiVumQDPyp2P zgHF?{YFJsMl=fk}BpWR;gp0OdglF2>aHJj%=5-Tw)_3%GDsV-RUhr(xe@;cukY9Yb zM8Yg>CG=}~tlnI&-Fjx)xbAeV9^riY_&>GqM(gtIh|DY>57uUh)g#4HGzB|uyv=t6 zj#2Q5IfSfa1x9_!Kf>hdy5F$~J~lqyWd(5h&Eo2XJFr)UtN;|>-Me+o^d`5Kg^N91ohT0(;kGQ7nr-V|F;n>XhN~G> z1AihF<8!U)sSe{VV!)3k+IpgG_*{M$4;l~eM$uR^*=!EA8Ndu4Y%|}VS?~O?nr-0~ zU`mADJ|;mt>wRhcF2)(O1U`Jqo;JG6yu+B0zvcP}aS*KlCd&*{MRr!A#0Ey}4S?i( z6)y389#TEAzn~Skp`!|zvmm5x{4&-o!RvP2B*kTv?76o!r0?#a2AlgqT^;rKxicGG z7refb0o(1#ejqWFQm0V+`@tpwUxo2$?J(N+{meNX?>xU_9}&h`so5M(ZiXoKYZ1zC z%?2~*G3sgzojulds_KVu5Owjq+^P`@kyf3_?v;``%F1|zIQk8 z!^it${?@O-$J^(yA+$8j|L2Wh56IaQJyZJkA)@EA{_ZtIqKocq}?nlV;QshVrnQ%}{J)fGlstDekNuYwH&zNz_)7N0(y-ZFVJ*QzP` zor=PcInfV>2E3G=Y0oZcE%+WejT!6kRICOO61A}t<|_>N+PZQus+G}+HjvA)|0`Cc zKgb!eF&6~}h}XdIa1OUP;`pXJ7oh+95mXPs`G;EiXOCIWz{uI+?T@p8nUkKAvx&Xa zUqn;Mi&cuT=ZH|s?-yJf4ODoC+q#rEVz759zuR5?jkmGn?EMdUPWbc|O22qEb?~6X z%OJs%uure#df_%aGhUEu#(jJa1y}^j`Fw)^@dG9PQWt+N9eUCEw}$uyDzHk`(6Ij9Yz3#00 zJ9iG9u_M{4!>w%FLH!tr zfG+O-C=s`vg6j8X8n*|_zM*(s&(x(hPjn)7q=tOUzFt*)s$Q0*nN^t?YzrT!AUFOH z8{is5%a87q7^M^?b7D=+v~y|ne&snQEETTeZed4U*MMbPqo!zRYd&y1A^Mpw@0uif zEONFY)9nh6`Qt4bcBXegwn;-l@X`+dmZd_={f^(3qe2U=c8{bm?({lIzo4e3IDzHj z=~#rez?SwnJYx+|sAf8rw1!a){uM}?^XeNbkjUvs`Oy`X5u&0x!trI$7 z9iZc$^{HmHpwj?lV(*Eb8WKo;0cElY3Tcx0t0wbhxX~b(Dn8OJ70OLMF1&(|%vh_9 zGgOc2PJLz%Q??Ta_!N)qxdE!e|FggJ7c*Ul2?@^FIhXV-^?MyI5$YtLP|Zu8VSwGe$Y34l08KG_E5y1zZm z5p=n!@&!paIVA6MiuyW{Uean|pP& z-FgQ7%oZYG`W`WF160BB$Iicq#<~;`*hqu^x;PbHyiDPwDW@T56Oh`OmRJG0+&M+D zIjDwc{sQBk^Our5wE3(6 zNsqI2m)pMJzF@?5ns}=F29_6l zro8rCz5q2#)+hu(;^%L*6Ml?v-7#s~YDC6zElE&TiQa>IxmMvjlE1v*a2ya`3!}o5 z2&LL4MWd-l!I8t~iXl|9I3Z7})WuQu6Nz#s#f%|SENc$@>UJ!@V0@)CDAuMdxTa!l z1gnHpgLm3hk}b^w%Ff%Edt4V0tMud#5JaPu4rfOl&_pP zGrnh6h@dLi`KiR}SRT-EnTA=(@-HD_-AfFzjYG;=kMTa>sK|U%Mmd$b6@@}>i2hIw zA5bb!l(9l@lD(&7&0M>Vu+PrpE_JFx%A)p5N<(moR$4n0L= zQV{i#gRd6%E13b>HGN+o>ss|$P|5N@lnu)0aOZN5&+f&QVYE}YvkN?d>X{jI{2 zsla=eGKHH#zz`aK+N1!b1R>|@dsbsEmap%i9!#3oXvk-vb|PIM*DbHL6f$;j;DE`J z@Kzrog(jlm`&;Q5pM9npe)@|lVe#UeATKY&wWO?3%}+^%TZA6$p?WtDS4#-P6FYdn zSJ*R@DT6-obZ?%9)KgovydiZO_Eb|XnAh`!Yz2sDMp$Q_89;oGZm@}!6*a8;m<&BW zcXoo>i7P9SuaFdL6o_c=&H5362>b!n^86$|rJid_RI{EZ=~0w(6Ro)pv1>^HMK9Bq zCAIz9;Ylwt$Z#@5J_s^WJK^(jlG~Z@r9#X37>Vv?Nxg@q7m=fm?TA?*?%-gaL%C33vYFCkpf+lpx?8pA zbj-8f-Q(hg@}61X90?#Wxxj2NJ|cU+NFfk7X>P36Q0b$D&rrEz2>x6u4dN|~aj$Zb z!gpHcARa_Vf{vsT(`xCj?ohk`Jb@_R-V4_%umAD|x=~x@ftMFDcoo^^Ou)VMNs3(< z))a#1@Q!T;*}JXge#lPs{QdK+T|n1hL(ETTReU$E#QB^QUS24URNe}-&W!)=xhp{)6^K}m5j;Uo%`4> zT(Gy_PF>P~wPy}yrsCBrzDeS`fjbcglCLz8x#lEOo6%mV(;mY8US>Gf&tK=?C1rjf z8yn_q54o~?!jTOGi)zu-VUBInsgo4xpf-K}e9DB==dG!#XWV!nT_tc#UV!M$XFZig ze7A7A;t9IsWe0L1_ae$jc&aqcn!Jp``Ory!k;*`0LXvG^`LVQJrNeDH@q_mYrv6oz zdnKqBNw3~afX7pNEh&n_7w&_-K?8o8R17d)5t#dU@}tkbMtnyQdWX1OvMWIb#-1S< zoBzR(6x+R>=au~-6e&UuL!7)w^Uy55kS57vyG^}VOfjpRWWW1ITS%yQSc zGVSS90O1-cU@=Jv*Uvf!UwA$EK%%W-YbT}{307(|A5t-C-vC5FyT9Wfhwjbsn@G?* zPQ-ew3(2b<%@M&X9^*PQSQz_#n_{6~_)tzW0o?#`h(xNt_I1IkGA!>Qi_jNLmB&ID zoX2b{D(%zOaSO?Z4Yv|+Sg3WHS>4WKm?}*4nT+0JrMq#~c9LQId$77pUYEp66XFlH zspkIn(lI3jwHv9=2{N-H{UR0`jhVT6#H|tQy994I& zOj^8zo?wZUqwG~_L4L|T9V(KkLH|VWz^Sdr(Qn|Yt;ZF&bT>MRMPeHmP`0;-MZ!~Y zHT>NEtqP&>x8A*~2u)IonwYnn8ebk-LPgdTy<1mqJ5}MmsWGpu`7W^b0mgX0&Z+35i| zxQ-6Wh{NHQ-E=6PVeW@rIJm^-EdJuSVaz<)wx+W^n`x#8ppiE2`&~%BH*npPuaK7Y4N!2PfZ3Sj)Rd-(U|Ds~_+`Pvq;r0;E2a&dDIvH1_v#2LBi z#vo7|5M+qby#WdU{aXiUAEQxrQ-y34s#)T4%5)%Mf1&5&(o7r%044+w9X3J9tpA4X z{U_820&%wt(OC~iH0g%sJ`&$!ws=6zF^U5w_7NjCK!a}oEqZhf^WEod$Y_pVDHEAI zMb+7Q7=)R;e~VseK}Apur!#B0Pz>)YSLA8}AVygBt1;s32u%^5sY zth|z%4d3KqX9IYZlS}9N{&p&Y5xaC3)HD27_fP^>{s}%)(EoZQr!f)q1;{0Y%CHGa zGx#6Aoihge6*4Hgo7O6$s6Mq{jPT$@+gi&jf=o25McnS{hNYW`F~fi3jWUck`*lR?x#aKIw#k59KndkBp7)^hvDGi59sJB{cN z3P8sn1a=#s?kha^tmCAEq@}ze2E&&U`l*HAWzksIQ_RKtS;uRiM>XU*wtEl(9Zd-1 zM-c9RLgO#Bc|h=c2QlVX&B0d^L}9Nh@6^#Qk^8JhFpvubz8?a~@rhTz9#Wk8!8usu z7!AX{Yt)AT0q6x!AxFc$-lUb>&le0nOV3xhEX`=0jFC7~wKGG@P>vXaXz0qM z)9&Pg3f>C#xqwfGr@a?*G?s(KUju9^9KW$!dFftqjSpUN7`vy16QU~Bd#Yrx zYv+SEvfF_ush~2JuF&n#PH4OuB$`_R$6-$@h4*tPj4DhPJ?|QrBjFyPn_2gOo4~&g zS$yhmiMA2Jz$jeaF)b+@yG!Q-vhP9NY=8pY{^U?#p`^Oa%NUbP!P4I1Cu0@9D`k^M zTQ{pl*g|49z!@!4=v#KK=l*MKeba4(X+EQ;1_ssyDhZhg70()DiQAYO@y|_}MoXjt z(!F6zk062+|IdgDT|NAuGKEY0(@?3W^Mgo@%}WLSKM^HtbH;RP%FL2?gVt1jX>ft? zl}7IGhytSGGHw7}-%{LUORxTeVAh3iudX)%=WmRM$MsuUFFyq?rr59$-kfpcK&6hOd9ujiR8k&1BuFzPuSQ&pC-IQpwdrGH@Wgici{!m0@Uh}^7dMDe<{+Cg@liUO+D*Kddbe0 z-A9{Wa!|$73sUf!`?mHZEghgCY0Ha(9ltp?VH{s~)Qy8Y<=sUK4+p3SVRqsWK`TQr z<(>%gN93?1!ooX%Bza)_dwzz*L14}NlDBY zPt9N68U#uOhD8?PRrIEc`(+R~z2WZgs)i9BM$tO~;#v{tXx6EFJ1th6F_AV9iskIh zNpXBldlZwwB>q4sRw5Y07+RKgAu(%Ix+AU+SIlFwku$82vW6hUeilZaRe5M<(c1&j zxKpx@)xI{BV6R_v5f6iy{Y5*xJcS5eA^Vu_IO1eg3A&wj*hT4jE?gyF!%~)4ECn*V zIh40#1#`Ne;|;nI5}*fTPdhqLwHJ?ylw)pBl`t4o)_3(Mv3N%t(byNDnBqbB83QtU z@Ap1o@R-U=x|V;U*AhRyI}Cwr#i`e|mlk>aMppx8)2k#@=Q-vgqlzc_cocJ*shu>n zq1HJcMMH%a=IS`70OT~r{%za539YgFYP+`j5zEk;V58#~3wp`04k}JW*|uy$ACxPi zX7BL7QSVvnb09%EDoFr?nVh<%4oLzuUXzwHbkpgElZqy{QAH z424l1Ujvcd4nAc|1lL0Cp01gRj+EdsE(*e~L^}2@5!@DCQ;80x>Z9SFbnDlG?1u41 z#rRI+kp%G?M!PCf*;mn#;qee1jrozS8AE6i&MRE1Fhio0Uy}EfIybD}Zcecdd4;q) zb&9W~7w#M0rJZJtG#C*aA~d4UzmUCb9C-`3p#-Ht`C>L(V$(`nTQB+0M-Wm|AUDMp zg_D2o=vcL!j?FIgcR0G@BKUgH_Pw4?oM0|LFLXKJ`!mw51X+BdS&S&beaFaSM`eil zLMxq-CI@$2@h5GAniV-?Nc@!BSOXRNl9VeN$9KK#}) zt2UZSB5-LIAlg2CQY&o;>!O5mz?-DA7FDtcZRgTaPh134@>r1(q-i{;=wO#DY9tcE zgbgmDP#~i#s}X3iaJrFbf78&yA&ImITEqb#kqwN38%HR3)3eHlcgykkW=xrwJ{Fa6 zcVsYVB7A+lb#XXSyf#q6C%QqG2qhBme3|#yUX^$B%y)ent4;X5-Mv5JTH%TW9-~$N6n4a$00QjOb5K z`SspkbIy;Bw&dL$zh7?XNz6X$6Yx@8d-2f8>rVgnx_tD|;tjxw%Pakq+pd=L?0pkf z{u|)qQyII@=bwq}o|UaEB#$8ko^HW3R;*Vj3Rz(!@n{MeKvEU~g$)3O;}>WMmSk6# zT?buTm)BAjhV=RHP%_*U$k9mEWhARW<%&u;j5uLItj{~dF=QGq0BSu& zs!1|K4Il)r6F6+=q76)e{5=s^BrQ|BT?f}udG^)LN_qarJ+D}0*wLSQe2Ly2YQu=Y zcyCXzFHw0Ca{(@l&Skom@3M97exiw{m6}vYiDdOKeaIq#ScRoWV29|1?0p^aqC0W* zTUMlAf^}}}<1SSO5ctOdtcgN{)#|LZngDcz4nK&I4JFL6)P;q*u%tJhzP=Z)3CBSk zVIhv)(CIl34LXRP)NgyDs1fz71LKa^eH$Sgbz~qRpUw$DK{k|VLpBCDAJ%pZ%Jz>8^82`6HRjYq|HnQY(#g` zj(exS8kGyFJJDV2KtZSDer!nms<8t8T;jjjl+Je^%%Y#0SPI2dG+9xxU-W*{W~QPm zro}+bs1I2Qff21BX0yG^d&6=ZZLTujbmZlGYj(3@g4Na-l%d&Gb3N@?zVg={!u68aDoRx3z{ zzgqe?qs1G}EBKn4_2`sN=CU=`;eTQ&56h|8kwdxBZ;oiOkhQ#8>oUifv&6^XYK~9) zDl?~>K_ts$Bin0`dNytt(mr|D^Ygl^cV=?Nk4>GaAqbSfLs6trVOrw#EutQH=zqQm zX}s?|^~*E9qTNwx#3#o@D%5(9;^<3F_;czGugioi(|cS5y_=pA+?HK;8Y9b`FrCkI zOEoFGO0g#QFe(?_$K3Btww4B%o=k$r=cX(=Dn?^zcQ471G92n@tFN6N`lP(YbB1+7 ziw%7k2GfYC{g4)iLVboOmxzWfrf#yd-+7&`rx0TEk~y-LL=eWM>$;Cl_G;=Dm`;y( zlt`CY>!U5l?ivgiQjSLk>hO@xC1_Wb7DXetk=sy=y{e%};NN68(`zQ%tM#{xC_)By z5HegmwUBV@xv-$Vqpq5PqWLCid7n$m5fOry6J)o9$EEZQj{I5fs?8vD8PSatFIWah zl;UV=6hfy8Z57KS@SGU8W%1XE8Bfrdg*!MsP-c z*$A#H?TS*m*@#$8)7Y}EFGpU@3OF3HxO z@fq(6Ux3WbMd%w{hM{z`=XWDEZE)*L^Mz3}&CDNf-27yQa?^{1Jx}D$Vb)jFts?wW zDr=cU8L&pprWsKF#H8=GQqOu@X~HevSMB7qTPOTTL9eFPufq?mzNQaX8M65bm2;bk zyai5EeOn+11G`_hU^`*sV!`<9$B{Y)sy~?wmJzo}=y;##r?=t@80&BNfZ(JEVyp7G z=&bMYwmBIeiXr8myk`@|K+J4RO-0XB8bTxH!#ECVs{-{rR?By;=cvdjmxQ%Kq^^>fW9{>M+tP_8@Gy1QfX z(&vYGqjm10290P06VV}9gsm-XogIw;6PY+0Ev(6=qiV|RABTSW@?%{+{3FQG#KFbF z(Zt5Y*4YVQ@7({n&rHVX#9%a&fa5$B85wmhF${toOwy*r;q|%(0cu#98gk^-7XM~s zllT>a4`Y2{7I4B`>p$+giR5acpBplm@wU2R0{8o0GhB8i`kSy3ksHSydgc$wngfL6 zUyq>!{#uDz0h0c8!}DhpEv48mdman1MHWqSzh((s@XiuRK=R-@)i^c`HgvwCcOn<~ z#59%IzpQB!gFtHFegXs5pRXqUaYfEv7qGb#1rnIvuKe+%QS^J<(?3 zhg2z^sKk2+kz*fbwF8K-8uULUjkln;pyR%R`FtG$2O`fnZ58HtFT|R@5(av2$M1Xx z{~TJmH17L81f?O9LI!ub)h7Ty&^QH51}eT1hHoHC{+i|IR`WyC())eAIFF<_!7qKmtzlN2B@q^ck8Qps(%DW$`ta#wmp=5@%Rj zmLuei%)J|Xk95|Pc8PCUPhLx}ET)9Y;KYhOJj%r`iz(CfJAd`6+QA7DX6{ZuQ5^CM;_)%_l{jN8*zegfxjYZcPvQ2_iL|?) zsqb_>Gzib{mm6+=Ao!7TC&sMprvahsP)3d+iedjSY7saQICV5oV6y2kn(p6TaYQB5 z^c3CI6$JHzVvT%I>>#i-A8e*-YBPc&K7VAOH)2r*F+N;l2uv_!MIvVTCP@0f__Ti7 zS@-LJEt`}bpVQ>=RKrWby{gRjEg_R7%u-!G8FHep(`FxH)5MqeNL(Q>9PFhu9Y+nY9~JiNE$zFCY$5 zQTa{`P(IFDcM@d{PIle-p5OVhooD~#TYY&xUY$9I4`ngU;$zM{Ky5Z4tg@DvG&-DD z#CKt(zB98|h}f?d37do*?1S_PU#5XE0|-XH!w3+ZL>%WE2;YCG@efjYx7JIQD7o{U z1G2O@`&W^3C2jg37s)wyjQ(SBa4U&+h5D;CVIL{(cKJ>XpuHs6Ay=Hrx*!F76ko0@ z$~U01H$wKg1gW{O&$-OfQBc*26CU;BP#SAk@Dd8eQJ80^mMD4(_w+n}dY#kFF{tDH z)_aoa$Yc?SUrrmtw9aEF8ai>?k_)2_(I@^^CwVwXq<61$yB zV{Okvp=i6JRFFUiD3cIfp|%ZV@{x#{@Z}jH&Fia$koj!m&>Y;`t|*aIDepa=z(WrY zH^n3eR=o1fgysT4O+t?-4ikZz;&osQ^g(z1X=<%5=ejGyvBwNRO#qF>mD*jD%UuGu zZvSeKe7Qm_2OX*-VjV;uV$Mx>8Puq4t36}p=5Z*2Rfok&>Db?>fEA{4^tDk4RzG2+x!dPsy zVJ0SSWg37Oi2Ugs7)ALO)Wm>|zjIpLD)^@>1_Z}%&@3^Y9pPP);qCP1`>OhLS%@DY z$a%K)y|Ql!r2jF%C6KzYKIc$8l~NY)4j=O36f(-@O^zI(;lJdhjl08-W|)O6BYcL! zsHnxUpliuZ)PqSr|E~lhe7i<-d>nzr1wF0@kLHu`M&c6aMu@ z-pU|PzUej@kP3h$4$-j%mGJ=i=8h7e`oG+1C-PP)#1fwETb6-q1aqz&ZcL=rpA!PX zleC`chtJ%G$WZUf6~ho+@~cK3-==^#@Httv`R+**JwqH~|`?-^2W!#tD zY;lxvn%deK6{#s18cJG8T5lKao=sBZyRmKXw0Cjbzf_lQ;kFj25Q5jCn}=%T)yB113Qg%wLl?13%2y&paEq zNI%Vh%a0NKtapVa=tTb!(;x<+u>nVW4Ku)5EJZ{Q_Inkip>MN%FqhY=vJ2NUI2n(&ncyFrolKlv?EgB6T2-LSGLanI%(@cLI*{#kSX|^O^!9@Af-4Y_O)Du& z9X3zPpToP8;XB|-D*u8APv0`|k6{9w-@4oj5d8lbu}IFl(7kW~oskVM&(o!6(SLN0w^B9zBsPsMXUpP6+;lp|p6;yh@0}`( zdQOEc*3LnNzb331+c{>O#Wuv7J|t90$y_SnyDF*77G6>R_cqJ{dD&nVM#;6*dn==) zrIge6M;0si%)5$Q*RXt$)VAReZuWRIlF?D*Be{NlFH%`dKclKILx#2s4__y^j+_CW z7hMWkjBv8$N%L5HN`sfwYUROAwuXRs9`#H6lHPauxpB4tm(TiC020?uOA`IUt z%TOP;qh>g#w~`<&8B2?&+VfyBECp8Rma!+ZG9=9-lKf>C2)9SU@ZC{7oZ#6g!^6ZYJ ziyL=Lg-ndmwD9{`B^b&%)1|Vf)VW;awBXQVmMRrR(x{eB1B=C2%6h4+2?=M?Ry0MO zDy5L;5CIi4@j8zW*V7xr@Q&tdNqXkGO2Raz<#xsWQ=5&)K7f52P$uh)u9&2YdwH|k3(TfV5+VaVFl`xQ4Wbo`s)CZ6tZ$a#dh z5U`9$opUsz?$F#=*lRNHb}m9b8qqFF^ey^7skwRmYhT~wkSM8u02@;yg@A5tUV_lT zd7j9(0=kae*_4mz9G{rk=1psPwKZ)GO^HO8pNUgcd)Ys(xL4Nm)s}5srn_0XWJdr| zX(;yhu_#iQhn{*`GN1Ktqt+La!xnqEiBkEaqA)E#I{NBrnR;3%ZVh=NM_utx_qygN zwH1uy4)^|gxnZc}e0dj$la!*Dl&PVVpfwcdZ6$LtUGu8oRPrnCu6Liq%bNeyW$U$) zOvy4vS;Tk#Gz+z@Z_a8pDmBd3W;(MguwHH_LhGXRw}<9ctU))s4@#q2(#%y3_i}^< zCcux|n)w{2cGB*zDsZ!dJe$7r7V8g+>XD1DuU!h;OT}e=bd-C3$gFSg85@h@D9zZ^ zH@Y(8GVDm5%BEjt%J)r)tCh*>(oCE_3Q(#Es#&=(N>|s_IZB~hJ6ekjc3_bV%1Te( zQvNLZFXr?OKaGq!p6J#xTNvz^hRf{r;^`Vumk1_C2VnuaH5`U#sL`2LZ{)63V~F~AZjv9rVE;d(4^)=$PS4MY&w@b<*A#=4; z>cygoZgpv%1abHt>X^@v%%0RYz#aa#W)IY5{!6RQ@&44Z_HfZ84VlA0)%{3nwv}30 zkG8Il`JC*b=7bovoiPUh(AMf2wg;{cWO|#tn3^?A1A`>R*BH${`%HAWhv;3GJ#~T2 zTpl$$S&Fj97%p<^FKo6SE*UT{a6 zi{JjiDrSXct&|ZsHaju7?D$R7Jk?oydb-*-b)N3MbeyPsjUL5%y?reseT5ogKM(^z_-8{laU+px6+n!+W!+9V5MD6ZKZR!l?HY(X9)S=7qbopFxMfZ4omY7x* zw_GV^RN(r60ws}L__ zynGELf)IZ?7erkhM-LkkPCQEvdfA?}Pf0Ms_yFU4cBoU}arp__rX${1QBiDF3eeJ+ z@Yu_i(7G5kXOv|-95U@Oa!NO#~Xmey`4ykx*-^*T;CQbh9xax-yB8rWlQeh39 zx3u=Cvo)l`+4lkLyj3+K7iDo6Qa+n)^sx2^FIJV)4Ve66Twd#8ac~9r-nnfFm(IFU z!Qk-3Ot{@5UdcRnkuhJ;p6-Yg!^g))1cEm0>-u@<=E*bgoSlL-M3i)mOG{)bHf0l^|l6_ER6MZpnc!qJljt<31Nb6$y9z+3Q4CB4=# z$0Xc@OM{q@sSNYVDM$C)jLppU{YiCA+|2-~dSNTP!Cnj8-+*NIZ{&*CPAJd zN@voH(iau-4SOWuC`!^CBW0Yt`zw!KC72BOTw61F1a&rJh!JUf^f$3J{kXTwv`YKK z5~w-&=I9Dh4$icCO5;W*TIsZQDI!{=R2`jW-P$+c6xNUWevUajt97FAEoNw6*jGpX@yq`^&B#0{(Z|IHv`Fy8gbw$kMr#XtjHuIZ8F z)6-^h?{{a$`RX~Dl1WCV;%C`_pU4VmHPePZgZ4N050rj`BlEln-KD?-&f zimU3=PYf1+?!?lLi%(Za)6+^wFH~0;t1FPu|ER2KxvoaOiC9e{F_KEmWjd&mQiKH# zn)fzH8yM~=?T#7V)cO+e9q~u!amEUDC(AnsfVlO$-7{F1|JLa_(&@!{mAhS^tnb}F zv9IRRd~y6mGdR4JMB&LsUVhT1f*|&xa{81Xtf0`O& za}#H^*>1pNVv#wpd^|!d@;!;7Bq+Iz;US|iQSY_E4s~mp-ovcpM-+fj32*Z; zZ0O)$2brP(&i@KaQ|#`nlUT9Pb_nUBN4S_&Kd#Fk|AeJ9Zjrn&hOiv?<(-90MAs4( zkNDpJ`ah9^jX@w`AY12$?N|MeWq2v9_foEl)A8#K4dnj>>|bSn07?IelY2wBArJyH zJ5ZrR%x|Wt04o1w8t=&m;UenlpzwkF>nVninq|D$jz%n?Ch&hZ0sNm#NL+?6G{(tLe0}|2W^KODdhxPu)nZ^IL!E+1B8%*fU5PWOk2k`%=p4BioI@`ix z=N$x`O7@bw9f`S}zZ<`3{4zdRCFGl2f*ZfoeD4M%LBSgLl}R*OA}mlGJSb;Q5Ugka ztn!la^x7Q1sY!l3lxPSv0}q#GVwfn-#b2>n9WbyFA-p`%n>4Ng%|YNe(Kau($4!*< zn@F1JW*#r~!cLw58s4P0t{5TyA6*e8^ifx zN%;|VQmwM2bKzWvYya)pMKsQgZSa+pd)5Fr9l=@}EL{LGTH~ z`LNB;l9J@Kq;cq(SIQ(H3SqA@fB5FjthJSG_fKAnD>}Tasa+t&SUzz*e|7)658)W< zU#v(SqQ}*ZH=i5sVcv0SldWf$rlU&;SPxz2d*sO>z(K5Y@rI|?+2@NxdT9O$gx5w_Gvrapp4nXLV;NZynL@d6Ybd~oMkYUbQb9|w7AHuf=zzD5qeQhTq9m@ECtr^` zQY09STi+t6zKg5|ot5zc2M!L;Gn%_h!9;T{tS~acP`7B|PGhiZ5t;)eFx|?ymeFxW z3|4BH=9KL)t|S==F2~H~KE7JAzq9A!xo_(2_4=SgVdpg8!ZRlW*IfUlm!{G-a*)gF zdlNI1{BO!}_DjkeTMCcR+OeAJNWPz8--gSNL=0_gAB9lMzuw23xSIPoQhmU+ewcx% zbVSSOQ!2EoX;LeP<4^`!m(OO`F}$q>f*#JN zZ~UA+HmmD2U5sq^-1Tn}HT zU~3aHnDZ^jjj#ILMNkXNRE120N>qiFEX55qD{Q6J40Szy2X-jFATi^H$1#cu4VY4v zAVp`sXlM)p-ZNsSSifZjFMaQy?jlS-_XK)KYys3hP=u8t?pbXAtQx+`&`vSX$S}}O zPtMHAe3UVBKl1Td$o3CvZ={@&)wvD0IgBV>>_p7BOuP=D#h6o$O293lDx0dlbniH5 z*};bT798Btxk@0cKdz+ADsvT;aD6??I)}?hiQC%L{-aLM=G9-OXOA@udSX*MZQ$2r z!sM^6=K>YzL$BISLkyAgW9s!CkE%SImrwgY$kQqU$9JOVcdYY@r6aFVbo_2!9@YDy zs?|cPO@|)^(+w)5Bhe>Vqi$%OoN#RUFfc8j?&QAy76}b~NRV>k(pHxZp>?{o|K;R{ zv_MD8Xs{vqjUn^Fbq>A<;fH)Ky6jI&^Gc=^nf3=Fh@~ADA{t zmk5(-BaWbop~Y`Ab5rbGqD*X`g|1e*709PSydEW-k+v( zX??Z_MopdS1I6G6RH4Y)LW`LBV zZ6r|Sqf!0*59mxz<<2328arLgE*raX zB|FsEY;`Z1)BMLaZKpe1-E1f-)>k(ug38eG9~q=f!+EM#%YWeXo)m3Xd42jZ?ZqJf zgA;-*^AD{!S*KIC{n-E1u9H1Yv@2m(_T45|g9%PC;cxO0M*V(k*KL1}Sk~me1RX}XxvssBXJg)BNUq;~PiAQ%;c0ON%IFol7@9U!o6{|ebK|7E zHgl4$M=hnVuAL&c^A!PJ> zsJ`E`$3@lj`V2Kf`O($zog=_pyJq7M97_I&w;r%L#x137`#33W*FCm2L)&H9Et*qo z)&37&4r~l7%>)NLf z@HLCGZ7Pv1X|BhPXY4cIKd`U;l zUXJVQV-jgRqO?BNY%jJiuXhJqLr!{X)g2ByUW?OXaFeaTR`TfVO^g8f|Jnw?C>;G6 zK~0~+KJrp|UresnRLObOnbhC=)=xi=1WyH$apo;D+P5^zWEw+jYU4HxT`(X>6eOjm zB;$4 zd}dtAi6F{BDcGJy>UAE4(EKwfmZ)vXJMA*+G(V&Sp+vYyS%%7ut$d{=JZoK>%IC|= zMD0OIZT?+Jce`o{tm6O4+E4b~njdxgoHO?F9&PH=5#4H+nU|c$jM=4ciLGGeJ{05U z+|T)*vTd_f=~gaio5SX2^<~i-E(&hz-SroYsZZ`d>Xv_MrHd50T-(W0&v3UsSWo>Ji8`rG|+TR z-~WRYzliSf)!9CGcr#EEpEDidA)YbL{*4qT`f=iRK7%?h5dRd_8^IhlW`j%BTna~n zz{IT^``|4D9=0ZvoEHrZLl4cUM}mxtS`%vs{jPdiVJXmMVVs^#{g_mB4fhaU)o@L< zOkG-$nba{HV1|W0Z=Bun*=f3)|96t#%W5O>ZsU6A`S~pNqM2R{Ofo#FizDW+76UGe z6ak&hn2N;}duqN`y7cbWK-0UXJ5-(l> z>IOGaR=M&QX}-*`2s%~$2C$i)V!1U{1q^rU<@F3%2Y7-W`xaoSt4*<^zT; zLxFGfJohQ$sMTQju3DYv2c(`({mkUqd^z+VMsT{;82gMhZH^~DJOx`}u~@v6cO_M}Uo^E{{ycl{ zS!9_Y6s9P@B-Gt8OrWo_w=WLu&BA#4+ z!8ms>*6xn1bJb9UQY6688dFB9>Fs|`Uy#nM`hZTzQ~7zOwgwrlQOF3vC115`-!l+# z{pGmOISb>Or~YFFgdUKGm?GImo($LX`G=+nQ6vW52(=-!s)QOrMzvT@MSOtWLEXF1n zxWs<8Ob_|LXnV)t%D#5pJLuSU(y`I8ZQHi7Vms;B9ox2T+a23U$4=hve*Sy!XYV?@ z>eQ)vzt1)AH93Cs8rOA?F5zMP?{UlTF$lq14;f~O*EcWE$m^e1$=L<9Ik>{S#dBgN zhffCH*W_WO0(mSw10g}{Ghz1l5f2BuzS@Gx1r|LarSkQ_?qGb*TM*uP-%sHblmvI= zKCI-~Vp?+2R+MdGh~|X$z2>TTP9~aSbM%Gre0fW{Uo&VPM|id0ROdR5+~zO zc>p9eC9v@(fYHYI%Xw*hQqV?6^ngJy6yDKEoxv<2&0J)lDP$m4%K*RG4%EvWvsW*7 zc-Pn=bOVDPw$FaEKSDiL9^& zz86j>eH^77^f6%&u*U=|D$bM^S?g+I)yacFf*^Y?l_5H}&v#Vf#Vtk|<83YZ-NZVk z-1wBM*m)u+h?#!pugGFGw8zR^(BvjH&4hvZo#aFCF6H$MB#9NrLxU36!^E3*g>h-t zR8LrM28AX1d_ldu$PG$PuKaY*X}J85Fvzu_sMtLAV5|AG#;9d(q%yR$!W(ub6iE2? z975Vmbm`I|&TcCpU3c+Mg`b;A{lR?s6S<+?=FjLXjw#kxx%7J zp)5aV4$K!OLwcJ$*}TW(;?o3&jLa;-brpuwN$dkL*(`Y8U&j-=VZ)XhI|Q7Sz%_|p zXwxhr^RKlkH_3vfrL}V5wklkxPV*dWJ(YmZDeXC6*A>-3;6^o%D2bg0~hQO#|38ffdlcH6IAf}BN6 zBztv3wHC6p*M6_hs)*QW(8=l=$zD36Ua{b96gp62Y2Wa^{G5GeuLPH*7-sIizTp2! zmq;5!P(7h#Mcq)n{3wLPiVim)Y9Epi^ZJIlp#q5*W$nwVf!dmB7q{=J18U8TV!0$)w4c|H*vLYW%mqsJkkw} zx2Uz@QSP|q!Rs^aIX&C;w-MY`_OPv~NNQo)Mi!3rHLqRGChrG(`Cu=Hu10IYCM!J$ z%1&?9>0(kl+ZiF6&v@tO$?6~lsJE5&f{+DrCjG814wgrk)zhaa(EFQEb9O3r6G$_f zASE}6UUapXuig9Z{N5*MVQTjHB~)aB+VAl`3&`NF8;$&*32Z$*3tI~(J-t73*vPY3 z!lzTU9b~baCXt?6kMthL|4q6L$?y#~3iMohP=-X8+RvOzi+R22M^U z03b>SnEJ%9w~R0;{RY!B1(dJLDbatdZAfT`0YPW`9rxNQ>g8OTz0`*w6ZMn8Ou(p0 zF?OERLry;gQ5r>!+9O)LM}Czgpn}TY^oyDvgZk0^yLFBeRYQHgPM!ehJgS)?fOW2) zD2iI@Jx;a|6>DuPs7qdT==9sp5Bj-|H{D@t(Rv7AEszsjY?nju?p~eW`!NMd{eM*F zdQs(+xR33w&iD}()b@34%5^_l+CBbv5stNu9lCn}l2+&PbDvblmhzX9R}=^ott~ zY6m2q<$vgtEfc9|nekBTz?&X>3R!#>rRtg>f7$GT7oK?MZ>IY1_J4DiwJ)hmq}=B-?a+cZMyH2*CP-+)l`yYw%u|54h4>POJh zh?Del?e;nt$dqfZa7y^UO0(bbHFJMHrxYq>(?yN_!h`09=Kfn6T?^}D7dSWr?5}uv z-AD3Ayi7pB+GD$A;&Frk5;p?By!g^R==_iK>Hp!rsD}jR0sTK-{;%^y>ZhQ7;{P7B z{$IfQuNZ&RK4zd8#$r)&s3IIlK`Vodluus&6$A&Q8y7u#2SnoEFLezFY7pvpy$jBS z*xid(z`e@mkMo}{gn!*hNGgcYXQ0W9|JOkOzn;FS9!#pgR>%MNWP_BlHKfa~1avR& zpG9g-NdbH)j}TUAhDyd@fm+z13wFXlI=(~yrhm2nr2ogTxE^pSM#Kbv@oPc_ zs1~WVw{?2G1K8WTTe@5EocP#Vb#lFf^Kqd<_VT(pC;2|Sui2nz`i=Ir3 z{swsNLaC*>q1}ue^ccD4G^|kM;efqQ#+e{3>eNk<(=1nr{YHZU0JS<(4)`?PifN&f zxwbHCt)$~W46ieRniF3dmeWg=nQT$*$outrXe!B?E|pcABfeX% z#S|%Fi2yh*dU#R$DQ)AqxV@6MG~F24zdjFMnZC#p&kDa*lrm42i+GkHeL$7c0H1ND z0nKhCe9helDoi;AQdRcIOWteE8k)*XrdMI^KQNxynW~?N9Z}gcp^)iorfRdZ;OU0T zQNijZvuCDgW$Gt4eAbrNH%uk-@HF7j7-Mqt&;=Bz0|vD_(X(s%Y2VB)eMCsKEC-Bz zUIjbQaJEj>tJoI4VPF2ySF@6f!NqoT$+GGg&OL5#`kgULxk z16Ff1c{R;J&nohf?Tv1qq-aNtO)^#cQSg01NfU=u!nwkW+D6SrH#c$3O7vQ2>--{Y zfx$Gak{;h|JvM9~xX2y=i8q1_US0_e#+vz5VfAfV}u!GA`)+LYf{SRoeY4@&!?=XyhHAUNW1FnqU~#6 zzE2r!m@&eADJpMe(`db=1U?BGDCA0DGFFoP5ZNz+5ei)$x2}{<5^1VHbwO!xBh)RW zp7=LmL}hHkGEl)B&%-kt+`9pmhDs{9A_bu%&kgf#im3tO;tYARd;}_6-n>6>_OZC% zbpNn?YX{}*p>Q}h2a-BNpmC};pt9hV)hZ_3`zHrX?ruD2_Tf^MVKrf8&lkV?FMe>c zhz#M$eRy})+0@fJ@N+ASH0O_Wo+Z*xo|ai2TmgFqP(|I&4(airR~eQ1oLqhiDg##& zZ-{Z_F_>oF?AJ-q$YRPaoCJJyDrZI3wgT){qd_h}Q>t*Msprt}j8TSQd`Xx!d-6(f~> z$C=~&=>#X3K5J)p@NE3gv6bG*Qj) zmx|0>;U~XwtlcyR_W|RTpitUvF8C|7^xAtV%fROZ+xnRSLlYmr2zs~RRHC^L4HpPe zHb{wlOu-cUUYo8;_T&M`V3a}G$wiSl62)I=2_`cMRrTwJE-eV0D$fu!=!HU=j>hSS zuRUmv-4Q-Ss`Gv_HJZGuXr9Pnw9bYYmQXl!2o<(l8gA7(OMRmjKO9;oPq#YW$^_abfzRQ6^@6zT#WvnP)&mGUbwxrP$6m2I51hJNsL#=nGI8UbBBge21}`asK|&=0mL z7^VicJ}cIKNo15GR8uews-f8X*)#RNa!m|3LbjcuziV+5A^RBlhvoNTvV9aULu`H1 zw}!`vp}8*T{$Y89R3Y;69D(-OcDr^l*R2O2ty6H_Ow|3#G&yCBhfBD#zZSD6vo%GD^7jC*4p_~N~rI}+a|>ni=?=LPsAy+!NVSMHDeR|!poM0r^YpS`sJ zCvA%0XjiqvzMql@XW7rW-!ofKN3q&k=15n|ztfkB$&sEkE)`sgS{(B|M(my#e89_> z8%+DGG$Z%ES4K^4ADf3LjTV5h@s8!KeIQu^f@FIK#bg7-;w$liZof7&bUR;lEVAVo zeS$l!TR)~E`{K8!qM7`#Z1S{ah$>}Ow{z{DYGH2~fT2!a zSUY4fBjR4E)75MBtjAW|XD$kvHsoM|2s;YlQ$eI~l}Bo>->h0~VG417Y^@G-?+ zfnHbrF1thc4DjN5@q9JQ&U_=7@b_6c1^u&b%zq;cRwwZ29Vd}b>cpj+oTT-u*R$5A z-y?lB2x`GLz@)fmI&=kS>!j)M)gW{;ApY;nxdg$4ZC#3;TLu@Sf2|S7UWjJVBv)#i z4ltcA*!mt=8QcGmAODvUtRSe|eb%x{@+;r<)t}^T(Aq@q<#k{a^g&Jj*V^9Dlogl2 zwJEy)y?<)oDNWJgb`^f0ZCQJ;KT#Re5r2AIQp%A(g53e=e3a5}qMPstG3mo-_4~RE zH2hT!gF1MkqweionGUj0->h7}#Ejt?Xiv@sagBf4_(qnD8VD!`sqzxqPx^PEDjUy%* zfO?y>l{^L%Q=$_bLZjF0*Sna!qU0B!q{BRG|h{*)AK*t>fzntjpaVVTW~yc`0>2% zs~bOCxo});0SAnctaB)dApV>&OO8Euss1cQCI|LR&@_|Fu+~rYjEI!MJtc?fC?Sb> z@$KJiC9F=}x+!|fdj)^oxMLg~<;JA{o2{NKOaHP}qa+M^98`<3W{J%NY)*W+#6W;Z zPduYNgauS9QTx92KWydjo2?8i64OL0S#jUrot#*mGNNF*g1%9@j)JKH}_@#ux2p*nw|=bhHyAt z3%{rYCE03}KkM;y6zV&oYtJxDL=X;Rs@7Po=2B&hkXq?cxyjoa)88Es@gb4V{xGDF zf-PAHsXRg*T;5IBb*M>gV@`RVQ4l{lfB1BM1ITWH)3hpatc=H7MqzY&yo#xFP^d0n z5EZ-u&Xg>rp<^P^`H8PpZXy-*x?tHjLWSC^S%svW*Sa(JvK4VA+E4F~r0!o}$N#{K zH5DQ0!?i1A$XF0phdWn$tMYJRlkapFB2)}+vio^ueowMrnohRkpAw!!VPBT&31Kww7_q~_KpF(9DHt>$kdG?SM_V{FoBx9jTbX_LoBH<7Oj6+KnV|*?zd{T= zj{9D>@Zcs){`R}wRhZtg_I|uWtX$6aj&Jv?(GOv1{w_1=my!uw-wJZycui=EDQi)tu6@Q%E*g20VW=zsq8fehQGh#nL;U4( z2M<-3;SqOGxYUx9wp*5DM@Rz*3eXe^5G%Vt4}~tc>rB0l3ri@MxY2mcufnspT*jTN zQg>?)NZBCLl#iiJYf;aTHD(L2`BnVLG9sTN!0UHyp5CL^3*gN1ug<~;#V~pO>;1$FlZPTu`s5K(}zoaI6pGTt67o(3#L2mB6{IG02!7$P#h%DT z-6vF~ujaMrf;CjCPBMGQ@<&+8i0TnXU&X&=z0uAqgLi#FlcD5_P)_>}2T%>U1o3bq z5H3Yo!FDRk44S7}S&QwT^&uUiQ;nWyAQ6>n0yr?f)fc`xTN#sOLpz>h$ra?eI6R}l zx|HYYh&_Tk5nfs#MAhV^T=|e>GSEOX58;O5t8cAsARNyrZUi}yDESK^#{l*<5wlb|z zON@6e57Jw>jbWh8OE`LsqIcA^BHeK3{JeIMiOJ+}(wsyQ=-_YwagYesGPuj-a5RAh zKdV1tP+0NFW9B8)MlHnw0^jG!9)Qj1HT^A%Du(^Mp?yUPL%KMQq1zNbvm*ffLU38n z6``v861ZsrE{~J)_+Pk#C%$vz^_2P-cevjvN%pLlXe*z8^Umw2H%CVF_%YL$wbA$ocw{EFxAjAmPW}MTNdB6auqD9nH}F8n z20+Bq+W|XLvoZL(&<8F)W(j?6IM7bq>xXsyGzOcR zP20~5$6D7AHV(qn=1G{|e0#fo5AT!9Nvjc}?gQSpw{x$=z%CZL(_H3KI&_CE91f3K zt8L9g+yUQ{2d4QR)$Jxhr*O!V+v~;S&xLgfZW+$Xp6rPlxbVaw zg#B^*isL1d3{h!yP=rZDg=hea$kdqU0X8FBW!phf%4Q+jq=Hw;M2|Vk#XV%!=2BK{ z8ssQj3P}(1Zsqfj+M}4;jN6VYPoL#m9M+Z&h7DkGc+zpc;^CqUK0t%P7Fl+V;k(fZ zR+e)QTcR=scHVw6lGdj2v(>i9ylenU0kynee=SdUF@iNSf_e3H#*Cb}%{~HKKV7gp zgRVcUG0P<2;+tfx4YI|2aSi~dsDKm?A}Z3n7gCA@{cAlPbNdQGV`U6<&2_t&Om4ov z#*a&OquO_iJR@S)m08E(SEgw2rFI%zc7n0Wv(zX%&v#`mIYd)Bq?Qz)sf~+69u$9Sw%-s7R!8%B0{$sa zHhs+TFqQ`@tJDDWUa&Mu7#A#WQ}H?X{?9QkY4j+JjKmJ z57%F+wT0j$}Uo^##z=uNA&yX?sCve%{^lElYSCFDvk%kxJOC^)m7h* z1{lf|GD+oy1~FqRHor2NKF0`}Mqv@?*%6x3Wvz`j9cQYwLD>|a z^1h~{?fI(DtsjiOZC$@Oi;h|fv z@UA9TheK_3k_og(#qU>T$n7=NPIe%vp!jPm zjAbaYl$-=Si8K4iWoYXzl~glG(rBU|&WeTPTcXwwbC^W8>wQ@|XRNj`X4n-pEJp^X zU6gTh!)dkCSs!g@Y^^53mcyUmU6lz!KLuwH)qzOKZfX%-4Zvaw&&cEVX!A87GdCx(TFT ztA4i^eBONW0XbJH_B+V5mD_|>*xx;i)}kI%B&gqc^`H4}3?6=Iu7PTLxG)rRI~NH8 zh7m$bjv+`N&oMIPAsH^qvxg#hn^!(c6oJ;FiN+9N4BVn+IcDq=S~}X{2c8LEm~+1H z^36QQ0Guzr1FL{q5&<-?IbwDbBh=Acg4=iUC>NHqtEdBg>Xb{jxjW}XF)eeeb3$QS zd=FSa0A6}Q9T%habVGcIt23`EGw#f%gQT^aikj_MtHW&z(t@T5GU@9?>FuNWAUxqz z7!Qv|RY>))bY>)rs;zI4dmM}a`yrvheM|OI%gM*ck}X2 zm`h6}*uh85SRbHndbeF?iY*O)dg&52>3RiJ0W5VjOci`|Z7p@f{xm_T1vnj^J|wKJ zePPpqUL$FL=N~F}WCU5_hz(X*&8sH+7-N!lmOB zL$?~=KQxE_aM;_{9|8_;N=63#cR@{X@WVq7i_$RCLXlF~>cOY@E$?sB6>9C}o`l|~ zKGPwTp9*MNm_2CJty1R7biVgmmysW@%kWidj?o0>0!r2;h|>-My;cRqpK2htu#Vy_sfEz&Cf-Y{U4=g zCFeTrlBRnGYRrQ_><6z}F{bv|X?xdx0j>^AtW+itXq|;vR%dz??Epa3q2dIuZFQBR z0WwE@X_w+E_$&vjwG?gu_;Ta-T)QY;*E^DBe6uW#c+1wQ%Z*hquo6*B?A{Betm)i# zmJjoYPs{S~=%!`v1l2BTVI^x2HEy-1`}V zO)VuVC#~9<7b&j+(LtHd^T`!C^_((h(Wh1&)58Q(8NwaK`7v@I>UCWbOvfe18vrX? z+@MwJb78Av2d$4QFRNa|_T>Z6M$>5Ic|6f8>_Iei>*V`Gzp;o)xxwIk#>LQB!o44| zE-P-mP_f+sd}7muW!a8KouqD>BY;^xz_If%aYN}4cSQHOg_Co@ zh6}U5_+HjV8LC~;*XKSckzO@hLC4Y-()HxCq|;F~Gq%R#!LW?gY-cWP4(>XF?AEbm zkzU8fl+c&!mz0CMMnka6WkT}=wa~1zK!L;SP_|i{V&g6Ob4_K<$80U*DvupjnITM2 z5^pw!#rW0d?XUQLYjmCGWs%zH_MlnR^sjR*s+aR1{T4WrQ<9bOqo2*b!?m9HpJcv3 zoWHJ(DZ%$nI^%AC+G6V1WhFnce%{L{8_^)S{6zQVY}+LFTD7{o+ERbSr=gAPZby>& zMxQ`uf-bSsvd-<>ZytJ%S+-f@~(PEmQ8- zBmcAgSMB)dCA+aX>-U&3^KVt)gT^IK zh)+T}$ZqXlfq-tzF%&8w{^h%7V^I;Gnx>Ybr3#y7ZWxKEmY(<<-DH1M{PxW#w(&yb)i^7bYz>Suh~>lW*fYAO%qWH8Cu1AGpk_R!SBV zNn3Aers2KHqR}^R@vny9yNz&(CtuqJ*xfR$4y+F{5Q*}354DI_$O?O(hPT)rh@?Kh z$>gqwVbu~T$Vx3-y-}$H9Gjdat`oasTzn+DIj@Uc^XPpuk~oDfHcb=@LF)Hif2lAp zJYxMT8u>SUi*AB`bae73?b-2)szt2o*i`j=D7bjH?ONXA`mH*od_rpe_qlN!xlWng z9q-_?`^0VhJtX*6E~0ILCTL;l2v_lOX^@PMwsJff&*kCR@c^0uL$=vo$+N74fQRxu z4$AI1v+k5%fL!^e;iNv=(A*Hy!@>epKO0$w3vPm)JJCSrUE*A7oC9VzlGlap@Ng+) zM?lZm%T>1vS0f*zw(#-p`}4`C>>^aih_r4$2_@7I??me(fW{*rS^h9cy(uf&T~-UW z2*hMh82#)mGR4s}q3t0_NIc;c`Fh$xQ7_<;=G z+|pEaSo9=V8Po53kAhZQf<_`r?ysXY3W5q8%&psJd2H|n8OM$1lYlY9!&pz(ya62u zvv${Q8!YfouUL7Y>d#=PV5nGER6=u2V`ee-D0qq2N|j|mB2W{J6;^dwVP8 zZMAYkz9EFGGE=x@n~%W;A1aW4+-oI>L)@Xe+l|0=)?=u z`+M)JkTnj#sLAJLGi<(ExJ%7O86G#Lk+8Cz`w79oZKz)~!wzX0sOX2r%g9^A19Ip? zl%wmFK*E3%AisEruHsnjfCOp$`&2a}2&(klf@Iw+XGjrBG{oT9+>{{h0ZP3n$UX2g z3jE&Lm$oCz-#?H7YWO?>Jpql4<2OdtX(5aDBewBt;-J%l%q8Xc3G zv&*y>ry`p*P|4UDswEO91q}HWT5>mn=|;*?aTf+TB7!CU_Eu7nT9TQK{C3I=eF3;! z2qb|#d|bv9*}9jmzEwtEDO9YKlck!5m;M`DqpHQNtk&<>!LW}i<~E4G@jtD^|DI!M zP*itm9t+u@uOGX!aZ`6?Wh(=Z;jIb!pldKr$mEy6-9L!`U0yFlZ99;$I@Ps-ujs>x zzFlN_O13M(jB9n;O+iq+0$z9i?;T}U4$+W9J|2+dewkCS6~t#iij*Y%=_qqG1V4NN zO7~9_cR4i6;q&};jo6bl`OwEUYmByiE#-0x_8Jc>dgj3y$6QA19AxT&u;p; zMdJ>Gqbla6np7ZI5}%Fl$!t3*OVeB2QH;n@fW}^62Dh((J4Q|Zu{MaHF4kcEf?xpo zHb+V`BI~r1%#aM1#QLaAEQ5Lt7?t3 zUS`X65=~4NA#BkuyWx4+dbIf=^maSmsW;fU;mW5oASe5n4d)pQ!VeZ5C_l;ph8LWx z3_hgTOHJn0IuqQtbJ81;@UiXn`S#?r4eteKFu>up=(T>{3nSCZ&~GtFoc6+yUmmR7 z1y0r@EJ`KHZXN@jmlBlM`Tcnz#-QQUKL;=n#&#>NJ_f|*VLvqhJrNMEfj*v`)ivb6 zKwO5ni6AjRtV4wgOP=Nmn*OFVv_BMjR(@RMM9tD8hm^;+x7W;r&XA z`?kb4(*$uOBbY-Jp{Bk;t!wzMH3IGv0-~Z{Czux3-$=rlq0vJY_zP%x00#NJ(2m$& zVHU2|0Q?R*G{m0j3$pEr4bxDn=bD(5S6jL$-Blb?Bu0dMegWmad>`EK90nA7phVir z9^u`Q#J;FlzlaJEBddGN(jwVI&<&p%n9jdACJ3e%RC$P_Cnw-@7Y{UVi9LS-R-leG z`nuwNX(hivqn|;+P^(QaC_bKYtDEms&S*uX5CB~J@|^R6{sLMtD6pkD&R|8o0beE( z$1(p67uU?Zo@fwT0}0a@JfYBVDiQTzzJLd?sb91phGuqdLVr(-#R*3lCjHeu9>|cG z9FqZ^Uer}S!R7~(h%4exV}seosd#!5sP3Y}CI!1%wi$JpSUmX&3dHQsp30>T|z|464GG$F01M(Wm=xQEG>a}PH5%!PkkmOYrg#% z)btU*QyTU5thAY#RCz-`UYwXxn>-SPrsz$DpqKGoL%7;+^7sj83MMTD0VgV#X{s1D z@s4XH$aj&!%W=Dyj?Iz8JFUq3%%qb+;}pg?`|L0q!p9$TdvRzh*iID{LHXP(g>tjA zm)~n!L%+T7BC5wGMI~(Wu{m|yMyZo48Au*J2W*Il>>NL_V4p{YG~sQW_9AKZ!L#wxOEkT`r*{0ueBL>un*EUMTrReQdyVhZpgfA$xoiglXqd zz6NV)*fe7|J7`8TJi$4)VGDqWwk08f7ewv*?qI4KrduJk3n@YlU77a2j>d_cL0d8s z;F7ikSg!BqHQztDnvFGsXTdjWa%e-qRebf_kkd!KK8AcO(u$Cm(l>NOOHIwlhckmv zbzIhTE6-XKG@~D7Uo#zCCZCo>G;2ZwK9 z--G{7RE*jB!_-h=x8S3)U%JzGUCYgAD)Q& zsF%{r$j+BuNHv$G-d{T2d)^9Y-;pG%TG;Nb`7v8lSmAAHr!Fu3pxm-uh7(y2V~TUC zjd0XqB#SH#9LOC8(Oe`&y`Z??aBQZyOqzG~69j%dkFcReYU}=%d%0+d!i^SHc0ANb z(l$vzC&qG)+R_e?NYc|wveuN|Ju*B>G^Z*k6+;a z5kZKnK43uc-gNqYh)@B0c`coQT>Bh%dkqt1VD%6we|>AUMpt{qGXWdbS5;;W0Q`x$S%VrufXf4rn#$lEAu9d-e&kEtm`SfUE&8H(nOJPr2`1%`E}7fNh*`c=DY`nDs`)Z4KD9{8_JC5;q;BNf4~PE?DifYR>3 zGtbF&yPWzMrS7SIN~_Wk!!>szg&EnpL-PP%6-z(Fu4Fy>0egU90a#iM48?Zww1exm z_E1kd(}M^g3UiLrj@n+|4<`%V>YLJ{{)Hb~B@1jD>iR)=p<#vb(!p!D?quhZuU~`Z zQZgM-dTRW&+CmjOTAr@G0HyO2uG-#IQnP?+rq6I}tJRc#S%~ibI(MoUp+v)pnP#h3 zZLr3fN5bB2AFl1y?$zn%#)L&^C(e=M;A0JvbO7|TI&(mndBB%OHNpTfz+-@zKfU~^ z?mI}u!AJDt42l?Ngm2*z9sPP+HRcbZ0o*|R)a3wDdjeaqy>vTlQG7ZXd(B5jhZ<&C=2>X@@%Nx$SWNPl6|6nX4-+SJpPsxva=Um2^IuZgY1 zj063^ExL|S?6;yLK%HCJJ8M@0K_015G&*$3yCE^q3{wjBmDsC(Bji%9ymK@|cO zJc(SJ_q0w)WRSjkd|Pqxy4-k!5G!I->~YncT=sow`w;*YfhaYuv8S=-aG?8nq3RGk zxQy`?sT#rWuxg6lYzadhjKIY#bC#7YST1>s>UEz#Ano~&?F&DM2P+(r zuva`IdTFltI_rB1!gY$>9aheD9j}%y(*7ES#nDHTT-0OKJa#v{8{1WuMb5`&Nkh1A zpaEVTb?r?~S-nzKyWXO}K6ZU-=56Rh(`@R&*;%aNL2GQk@#2la2z7ET>&I+S8i%*G zfXsL$f)eE7U&LyV0+r{-wO+d4$L&>g^NLp?H^ z1(miRSz~Dmr=*D+5*4`JUCQG4le`yT!y|7kFR9U0x)+hz+8Yc8XlGCLeTPF62X$r# zufWu1n0{+2IMd~I8CsDchsH({?2XDwS3r4}kYpU4&9yedY)w!ZPm!e0?;}s2_Kaw@Ui8Wi^~ApTh(b@8rdw zsnm~a@_q0mt>B583`EI+R_I3+$cetn?m%9ciNyXRF^>YhPZ=fJZfI(PDjes~R~C4g zjnq8lO-p7K0xl%c&;uwgyKoX#pN={Xh<7xIg0MOOVEk&M#=Ir$Bo-OD%f>Un3|@6#jLx*n1R z!}C$Xy91O9wc{5fF-FkrhiFSh(btYNeL+Xycw~otKzVo+ zBfb*S6TF>CQZPAZBYSk^x8g|*+2#mtIF`1ffe7+UPq}cS7uY*stM|k+($nD4$e>sQ zQrIy(lv<4w@Ek2HdPp8rqKsz z-q{mhXA3HfJlD&z>BaHsCi#%zuTC}ENMBeILb0<#jhkm29}A9kIKMev4)9*A zSW><3ujiHP;2rjQur~_`c?XC%Iix@PPVOxCor0#5{SUKSMB4)51{MR?10oA=6MyS7 zljE1k1a#oLf71ai?9u^!7h6B^$4BMC7{9?RocUW-l2vXv_|5~~qH zYheYjMz*HcwRR)gReSQ1f_S~`-<{bXz5Bq79ZSPyK6`(z7NrN4%lKC7 zH*IjOsD7D%ERJ^7E+Jgei?k`;*#_~q|971M1Q-RXnZ4lD>NEguFITJtR6mQkrLV~sP629CBGZP8w5G#Yk3kZOHyZ;{YovKl56=0agXJ6lAeS&-Ng zR;v*wWMKest*=iUAQ{>W2jST_3&;u81!yY9 zR2yB&iYqI^fVQtd<8_)WZhI7Sz(Sh^8w+^~%7p55Ta!N%?TY3+?&MZ0>>d_oF``*{ zopWQzS(`uct8%f8GnfXeE%ss2&d^>=z7uv*mD(XX#!RZxp1FrZS7J445%i$ofd~4J z@!((!u%w?;Z5BD#6R9+5hnk5k=oF!2ns}kbyF6zGg-l3-8N?J?42$4tqkoQU(kU(C-$k`m0NWc$5yMiYmPM*Lqx@o=xh15j(pJ4gi{}> z6tl9F4sTr*h+Yp6PCL4ZdAFxX6e;3lBXXojl-83LU22Yhk!krn_AJ z{RoN#1+Y|$A-(ZtaMP=hwo&AYkDsO7)KIk8qmh{9Pitzc5@}ALZf!f%gVh$qhectAxOqF)_A@kky;be0;=jMZsC5L4O#6#pBdE+?6 zrf%q$m_o)T2X11Ml0m$p2x>V3Z=7A0-`8E*z7Uj=ruo-Fd?v`UnuA zG>MyeNn8b_vT`1OYMvXZ;Qv)Lwjmwfz~Ejg=ow3R1D|7KV` zlj!5IQ-ZUrX*yaY0J&_*Ib9rLmhfXzCKB?{U6gTMH|AA+Uu#Nh>c&__gTbDYXr)Yn zsw9Zi$q*~1!8kX8Xmz{LXoO(hb{eaYvJ-H5xd&hnulnn+m3ye>>-^|{ z@WAh$k8JMatoB22e@nG<9~*Tdd;N%wV(Z~o4`MFZ$qMT?>dheN#NsCoxyJg|P;Sj% zGhfHJ_@YT9QA}1*-RQhtLYU3Nlfok>M)rX4hzFB4<4QIoyJ<9fw-+|S&nO#8MqQPm zPKFrcW0_!0gher#;lLEk+Om^t0z_+*TPlZFi-=5{k-^UE5}mV0;vY?%dLc))cg=1s zpzXDI!p<&7 zLWl0RnjIJ~U3XSKJ*qm@fT$o+1w5;YTaw~|rS601nHWGQcxP|^uuy^AYXg?q_|87B z8I?{(VK)v};~E2=eGhuotm`ns>>5VQ90FZdj&JwVmkrkwOc_1N-tJKI+qqLI3275FP7BM3W=j4XUN)1VKjRWaXklE*z!e%{Ljgxc$}DUaZh zklZpL12kK35~co3xkPfK{@Gt0t)u8%!=}SVsFN29En&GdbtBs>iqOWSEeg|4R%QJO zA+y1UjH>NsLe(ejXEMq;){M7pKASOj@m!67-wp#rV7n$g2Qt9kCG-UO0^@@Y@MDd-)dXYYuR@xXbz zIXJLJ+z2y^>!v4!S?`9v5K=fHM4mrN>8#~K`AYG>Xd_%i*{leC;jb5&+&!j~gG@^k zsPna3v`(Q( zP zZUROLLmgZ=80>D68?QS`k9MOZLORHl=~`Xkz#=TT&=iI&kSIiUeH+DQHJ8Yktf#O5 zAmxK`g&9Dk$C_$V(373wzr2y0vrEQz$v3kX(dkX9Qu5@nWU*h9oUjpZk zsT5Ir*Cd<|UKNLFdl#E+n5dkxJb|TW!Ew(`y%ZESVP)GR(e<8M|i6H{Cvr;@=`u0q?V&jd;JJY^Yd3? zOSwDmX$Xfvxs4C`$kPF>HE>fxm#57g>=}fxl4u!OLDtySd|68)rp_)Ml>%e6L#S}P*pY?!rN+Gs+fYo zVVyKA46kz?E_^xDg1xh8yNFA+^yYLaaF_n?Yzib+u)7+R5LV$|U>$BeN~~GCWLo8^ z#z~p;wWsJYs7vw^slOk6i`N3LH=#|G=T<789nW&rI}zZhE`?uXY}I*rcG|ev)Z1#` zuaeu+yJ)6-be(T(Xkf4B##>@}%{ES^S*vI)t0I1X)cj5x?V)CKSsK~RmAAmJmFHR{ zstt&-J@&N-@><_2iqIby!2#(5$lRSC-?pUXnLS?q^MU||Lql&xqP5bq_s2(} z`_h){^M72&rYY33J?3y z5g=Nrrq*7kzz4Z{4MJI$RE8SkP7g*BC~rHeOWSfPjF)jtFNx7)$-y(i2#C4YqL{Ad znZbqV;^4Th4ww(PITez)Q{W^Pw+zpx$m=1dAvlbCvSloQ?ElB!I|o_%u34gqO53(= zyVAC8+pM&08$@4ra?~wKurdpt?jFu0SJQ?ywe;Gr5l*Xl> z>!M}JFTO4s{T6|JZspJZ@(B(m+Aff9rsY4N9d>L|3dCg-=(8_P)QX@OLMh$}JOPJ!w=N!&8uG;ZsR`Ykbhg5C*fi~iE->YV79n8dCN zi;OHvsNY{pMMh@*5o?(Q3SdhL7jg=m4*pLIxyYH9Kx-8-!&p{nRKcA>>$_4r|8pT? z>HXovBZBQQ*|`&oWt*5*nir~n@$gNtK&}9N{XPEY)M_^_4?2Ux^d<)xt@u(OTNA{2 z=Jt=&>VgmU?)Twte;@t#x`|Os5{nprZEw#);BhPjlQ4j6Zqr20l#2XTZL||Hyln0z}4G z%C1X8a+R+##CnTi8x1GH(;ctZ1B3%aR!$jz_*SpN7AB1|kds|gtN}Zk@#jwM*kX_$ z_I(E9CDbe)USFRF*)%yzq0}ra+U?U^OCa zb=sYiC>LfXIuaKkYbGIzvyO-|x6Eo}yojBQ3o=1tjB+rwy#ma>cT|HRDqp0#HuJ1HlM8pJu{43aoCmXuC2YW%+|K@J0BJo zLl%Khgpriqh?io78JFJh59R_~EnjK0s_7a4S08-|1}ny#k3&T*0RhlTZdv{RN1U@6 zz9Z}P@?mqv(8PGi!CVW0OvZyh>BWt+{S~C0(GHoLrJ4ci3%BvG%B&z#S8s?r8A*<$ zE7~X9rmB~~Bh4K;e)-Tkok9z@g;xF5wfkk1R{7<5Ud|X$;8Uk+ir^;O$L3Q{6GRi5A&x8fRgD|LyQ+6&7D-m@FD&kz zhp|DomL&3V=otWflM{v>ey+CCEH!hi&0xE#7k6WlJZ*x=AAyvLcT|K%cfgD&I%Hkx zNLwR$wD-O%+p+dkbm3P9?9Y8a_(emQW6Hh8y*&TRT)_arv%Zq{FB!qzZ|xm*GAW+{ zj##UT>^4(&`$)X&0ROGc`F}>6v+uIZ=?plS@Sh}3{*&6|8{`*2Cz=xJFamPTzkiUKS`gluIihZ9e1KTvX zDjF3nEeHrrkpEmJHVB9@k>syY!pN-*Rr=sIAOKVcXvN(>2Gsw%3=jnea0Y2tv0*1) zJnlqJ2X(vQiG0>y@z3ou9N-R6gxBBk&&~+pZCZ2s$8+mgT5_b$xXClxfGYWelN78m z0{}q(Gt|p&7GPT-w_9eE%5(&_FtQ2jsu?F3L<_?nW==iC`sNgCJ3O&@-E6E83+X@) zDT2UC)k#%0#hl`1X<7Dpu1VFF(knSG$&UDOH-C&j+6^%|rP)Yt0vMftmnu(v#;TCL zUdpHZRryobm1p(qCt0QElZGq^pjF!3zC;bRQ)Ucm3R~b@F|dC8us(4iEA@Ep_?y+p z?!^A56|&d+PRx?#B3va}S*!a`v?CvH170O=nDS)D24K@YUMgr+f$Hf+8iHvNnLg(V zA=MFFdNB^BqPn$NWvFq-qFj6g4xCB7^Z~M z>+(uqA>FRov?9eZmIdVGBJ$r#M_Q^-QTaehM!z;1C4JEjd?ov#d$aX}dhW}?B5dE} z7mx&L3w{QGyS~m-8CLs_ezR@Z1-X2jy2ERN<+3TI_%X>uE6m~hT5WiB!PNq+xNTiM zwax5>^%CJIj^?-5Hd1t$eZ;N?wKQ=pdq<#39pFzfnFPveL}<7f84$a}X7#q?A{u+0 zn3Q%?)}4}re_AX7H2`Q9(~I8Qg#U)nkfBSt zL)AnIaGRE%E2_fG0PCkxxE^ryoH>-cXew_X#T4Qa4pBZXLBe`$m?rkB`!X$DbqwSu zZ@8Xd&DaTLUM;RRco2snjTp6-CGuG^A=7sae-sByJs@Bctr#V0V<`<5yNq`AC<+?% z#5MlX)}VxEc7aXz|uHIaarl3)sb!%f6P;4(f0%3>df|7AqpOs00%Lvc&duNAR#f`nGj7 zKO*hVYO1kB5~lU`pJE zLWkYZw!af3sLMF|XL4hi{leAg?h+xTN=J+jGaS1KbkiJ+oE~jvKhnFs8|@cNP7;Gp zdnR#WXkmI5uxkVcCKcW47J2b37&cpYfQVA_XBTY#y-h3jl~Y{>#Udv`s{?f;s*pCc3IcfbN%OOV}v7t z2>5xHb%ozE{<10efL6P)ElCQM76tblHc+-V>e8L9mU)z`r41(x)M5No;5UrK20q>u zlYye6a~b%3$Z}<>ww+orVX3yleATkU4#`w~z%mKT8v8<$l^hr7N3_md;e3oJH&V$! z^jzlz6za_N1I%uCvsxCq6)W}z*U=_$Ywjh?`JHbzTQp}pCo>S*jmbIXT`e6hcDKs4 z4tcL9w{i3Hw1CU|31j+jp3+n_y-|}91l-scInUixIrhd~?b3t|o2Irk)`U{0%4#7n z$>v+kgp7eK>2+qv8)FB_Fm@%#Zo4w|PjwyRj6m)VuaP#W@b+z-$M*A+cN5mCe7ZX9 zGfi(Q)j1vvzQeXmA3x35Hwn5v-^V=8@Vw=G@Xqv~?U<||B< zp^UHa;!h`n#tq-|J6|Z!`0sq-|F(RAdowpb$Nq+gj;s7pv0O6}FD6{e3qZ-##-dD4 zBQ{>ZzsHUj?ak(r}M2S zCR_NL_)#}kv^T;{S!pIVfb93T-qju^Z1rJ#JCp>0s~#Q^kqO{Xt){#Hd@CfEDuRaudB8BO{IyW(SfayW z-=WU?{~?H~qqASC~^1b>q5NIsVsYfn1gfF&$#xBt<<(_pUCVh?hhkEw4HsDIx^ zPGY>ut)-#HzSoj;*n-J4Va(!xSdFBM+h%AN0vQ#NNe2|vM(q&w+nFLK#v|P?wnRx7 z$w3y$o5QbvH_6W-7{Pv5LB-qnL`ReoPQs}E^gMVGhkN~Q2qcXAT`gJ?LnN8t7CUzu zM%hXdG4OQOK?zZF9L|Isnw**mVO}#RfD#GPuB7msd9g?xbp}*YBorZjXiZ@&#YD^r zQkd`+$zZ{7&H#+j9gQG-t9HC!^B3ZFRDRF*pJS_(rKPyq62cscG{IXN=othMtJOv( zKbOeoMB+jLN$3%W9`eEGC}Y$wk}nT+RFGt#M3PwL%p06Icx3RCQb{~e8^w+WYnhS9 zmqb0rv=}>Kt;!ssH?U6A5o>!3P5p#NBSt9<+0B2-TvD^dYz2%U$q*h{9m}kPKd4^L zif6bhCkHWN;`%jOB%oG0AA*;}w__rFM*%rf;*+uV)RZzQdiv@3L^-EBjWu-3eVC4|fk|m%fxZ5DDV&EWjwr?yER9+QbvY;v=cK8( zUIN8@xgda%pp?KcV1yx9NK~4mRLYXsCsh-DgWFw1NK)?)mY&58*U%!mWLr@?I@T0u zbed|xh_a=^aOC(%V=YGi@qE5(9j8nTpYd$$z|i9OE@0OQMidv*`9t{SO+F!NzP)B% zwoiSf96BRLq^5DJ>Y!!(%bGZa

    dv1@n6x8oK<~u}-P1`|@cY7h5e82b|HQ7a!e3 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�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

    p6y=|k9yg{Ae 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�k+4lS5XE&rI2H0;#7F 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

    (xq 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 EGOM# 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�WU*zE+qix(dzm%e$ly~e|BUGsR7yIv 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�drG3WZQ7{QZnRAN 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

    NZ;$IxSvgYb?*GJJ*XV_2DVf; zVM0QrPA0m9gq`LQM1R?yP8KY)D;p|UeA3^3vO{x|lE z1{Liue=hnD=ageWZG@G%b~L`+@VpQ{qMppw82w@mW^Vh?WC{w@DF`#M3qtcRlhtr? zcM4TXMuJj`tv_{Ujy}Il<}_vJNLok_G;a)RdIjhA3Fe-~L(-=AeE=67j4+LpB1!}p zn%w6OJW{U3w8@WA8VimvsyOQ09W}1+(4b^~j3V8HL%^K7e^hM(44r4p2!zA>PCtb+ zY}rChZm;QsIJjW(VG$ZH_%H8#2pc@vHHM;5%=zeeH=!KK%4$qu-5>@@ndd(hZ37;~ zd{RI;y*gSGdsYK+VGneu$jW>L97ys%>0vi&IdcDqZg3#rVYR${Q@}Q+-`GXOn3b8G>V+5rTUNAiQCO?K9wV!oOaR;%jYJet?4`+CkLR zfNa%8CK;D{ogM$+uR&O#02|1*E8rmNe=kGu?q+G~cN0SbPUCj|L+3u&{66+yWgu4| zb^WI@UaUvm^Y%l=e9fgM+KjGxn%^nbe1L%P2oZjD8vJE$Rr>8V7-755Y1(vJz|#XS zH3&mpb^W)%n^Lo}hs=zK8%!jfLB2jEHypCahWrfMMH>c3Mn)v6)wX7MjVuvf`l~`d zZ-8mhpgP!s$p@5+0G{pxfDQ%q6E1+U9zex4w(it8hUm%=hqx)u(7}p4< z-31;d&Gx7$Jk5+8A&1W6uG7o7$D|HF#y|#s;SDY(K8@_QM0FN2R*pE9sz0!`Mh;fS zy*%(+f-}?zGi0v?(5|G;6H;bIyfDa}U>DFi%sm@QMB|`F=~|E#M(^)6M=ahG zDg{-Z#R0lRQdB!Fs?@Sm@sr6keI;*GZOCT5qy+7;)Xow?$$VjrLIDL>y?Q~guzsq| zQr=NCctjj~cFL17*nT@K;}Igd>2UP#N=TmATHT4LrjWFr8RL$6+fca>yDj8%KExkI zN-<#yb2TR4i7xu*@Qbk+_ZdphMR|4>*XnX}+UiJr&-;!&EO>j-D63shmy^SZHMjH* z7aCGm^kdqj2Ho#ne`biwM|t31JXE=Idwg6tUk9emS8ilkNJ6m>p2fV+xFPd3eTi*+ z9W;EVYE%luu@MU;4qkwiOmTV5Kxfa%d?EVH={ zm&rc0N{aWu6X)AL?~^3zH1yCi(0;$PBo z{==j-XJ!bgHd~ZqPPMURfiTk#_7clKj5AV{ol`7%?n8LK`L0#gOkuT9vt^~dj(+9|8&mM8l!>yrJ(We3JrG+G)o;q zAK0&1&-^#AlreOh&i_dvF#uz&A>bcjl=gpi!~0*?cF|$j!cO$jd<}?;2D}zyM9c^| z->Mc9NykLOQC|Y8iSVN$FmAj%Lw}Zj7@Px zsXV;JeK>NjQfP}pO8a1@i#4s!07?0q7b+w7I6qTOFtt3Ui8lWhSo6(x!OurlVLWp6t}{r;4x9}->b{>odB}+A{xjo%+u6s7z>=I|( zAcx&q?#iY{JIKy%L2hM3U3|6D`-o^U(`H6l>XEezaG0nl1Q>)5Sw%ex+GmUtddi8L z)ImngW0p?6RtwlRaObL>X0;3wIoux|P9;$*)-BjH4bX{C31wrAHY|oMWgCiMtM#07 z%_lXx=g*w%u^Wio=nuk|IFGTxzd2N*>)&3+?AT7M;;vCgbyTNtMwd`FY!YYdYOe)a zTW4krSt1HXZ!(*9#c#=cgAephiTejszDsIwjee}>uCODr*Ont$bQcMn61dIsjM?y- zuUGI{;M*(DJrlxA|A3W1XAlQ-K}&CRHyvc7L6;lZ{9-0GmVI*;VDY-xL*}+gf@k@T zTaF+qzu0^0I9N2G>dB+UMPDRNuSHFXnk`+KKjOUWcUxA-DL{UK*omv~72g!gT{D~X zl)vXdDRvT(VcZCpgBt%a6mdqx_7tFKg~df zp_*|h*UHl}+*qR!+EfN2A?fwC3L~cz_mXn5rS)cdd_}Xx(J~zrYrrXnP@ZCsqr^9L zf>5kCqm5_WZBgBeqM<{g_)(|c zL}?cb(Mn0Gvy9{lWF7HjP2_&%ZG~pH+G`c<+pTksD_wlPq6+v)fz~DyYprc@yCX>i z7gSqq2SV$X(p=1X92~WX6zaM0DBQu2B`iw|8qLi3mV>NjA|*ZOo@!S-Lcg|{!N~6p zKs{)e{?tS3S&o`$vMEi5^LuN5q9iAhxY2$34ZD}lYd0NHbp^hfUsfh|wi93)G-wOl z$PSvSLF@Lsmema4Iugsw<+NLf2wT@#?jjVInxhskP%51q;bf3G7iFpCZjXF-e*eDP z>Rhp}ktCa1j#nsZjw&eq#x^wp_l_!d{T!8vw`)PL$`{5!hAlb};SGo*;{3Ywh@t zKB|hL8fxHQQ`aJR4HKOez<=XUi==}Va6LGhN?Wi)K6OZTNX&5#6c^gWlh-8y7LaW~ zp&yj{7 z#$^oQxHeH`PH6K1Ji2qxh0scO8HZ$N4LoL{0n9euGU6{I8BtAF+lf94W{T^%=yvV9`C#{4^I)%( zqD^H6nplP>NDem$DCloQv~M71^?;<;TZIv25ahV}ieoLJImR4V3kcr+V?Z$^2DEiB z#nO4GfWmGE`XBs>UG2Zci_wma*nJ8|t=`zu1?0LLrITQKOkLBMmZpFAYNPiB4A{Lqd6= z!^gN$)oCtO<2NV=F9ns&70%Nft&DRP$?yk%(ydwk!JqjIEr0N5Jk)S~)8F`W>0kJh zxhZy{LRwhblKJ!>_;c)k;?FCKA3UK~lAP|K&;N}-N!brcr>h5UVF5FcY%~2~ekoDs z!E=3z@*=rF63Uqmpaw6xF<4mp7kWgu$*Hr;E8z(p(-wi7Q5szRt3Sw+vzk51LbnAl z1e*d%p6_~0JW(al87O1XX8qd4H_0^PD2hsr0P^>Y`ObL;L^J{EI7FV{jYdW=$ddLz zj$5XTE(6bzFv!=MTZ7#}a8dmcZDX~yd=ji=pbw2X%;b5+>=6s!(EvOx^@ImFfm?#l z0o?N=yoR4y>-XJ9d+zZk`uZeWC|Kg#`;4xA3<-oV(G~<-f zPHwy-QuCYBmx+IjqD0B;5G@G$WxwN6gIjE}v*qkx2s5L%)mgkmBRMzXjxQNZuku0* zxY<{y%@YX(GjyE+u3D(5yB3m{`)rV~8KMJ{$5`)5)8kz8#O!qtW%2qn3ALmQO70sw zcYf%`w@nf5AYLq;Wjmr+OQ`g=pZ+1gIr}xW;aTSzAEn^^$$=^>7ZBzgD)LT`e~B6> zU%dyd#BssP1aH?@{bH=F77JMbJasNOl@W00cxIDxt89nm*+1XW+!B1ILu(1zv=;^|!$NNVcNR=&E3z@Hn9YZ0E!Mk64|I8F6>-V-#(eo>!uU)~y`kBfl zm>1BfcmLizxaAKxrp*)rci7?`g*SYTbdo9kbMn|iF#26l`rCw~0m|>_wpv*DsYXA1 zekZeyqr!H86-g{dF0fgfxOvHEaq#Lfwv*c_;@iL*2gQxVwwPAF9&|biAcT>pXTCX- zw~Sqgnz{2?5%LTT=|B(Ox)-q*nNwKt2u)ml&$~oIFsu1a2bG1U>zRgO{>_~wl-xX+ zV0ff)&h5a=Q0A#A;KMsb0OlVIbHd;c!*u+cVLnIM*WG-4zW-sEY6paTKl@lbzH`D< zw?Qvl0G|OW`>*OIfg4&2dobC$`|hOTz<3yIpj~Ws>x@)A{fu)^pB67F?`MRd-mYirNO6bOTVSiKZ-rCI$&B}+ z$iwA0q+opY9%5##Pad;`vY8A*@zt~INtltb^ciZwqadMACrZ)0EM;5cGUB$JRzHV& zUUVTJMBT4l@leT_%Sxv>3wwvLL`?&QS5T{mr~IXQsjg7IX(hc||KMgHDAK9HMV zeo`Vo6CBe_dwr+jt?uH|BhGzK2A$yLOSDwL|Lpo4Q;58hO}zN)R>)k)H`_`a=yS}Q zDGvgvQNb&Oz=^9QDB-UfclqM3fIUAFWyww{CuFJ8POEae~kQxt) zUoXt9qk0S~hw!WuQA6TOLOfW)T{KW{|Io`+_qCdM`!z-1Qcq!YsS9;B4~>Y0Sxh3Z zDnrO^nLtz>9-SQFpXRiZamd`hQO$vw3xq}&Urtp4*kGnBal}3-y}v6tUpx&hZLFO_ zZ+x+Y#L5mq6NUez{IL(&1`-RnS?Ot-Df;NyS?P_LvHjlp=mJ-xYKC44Q5zDRw`geb zrs7cn9ZlKtmh|C6k#Uf+>OUkerUGI^!^k-Rlyd(2Www5cljnA(b8+{~s0!YAB0@OT zxaL1yX7g1s756}r_1NZz($N9f??xvpe1U<0t zRU+Gq^%#7r(2$SJw446c>28N9I|nY;bwXsEuLPfq;+8w~b zm@+krUfP>K1OeJ1AXVx7>&vLdf3rSdL>#*QjVi)mN958%>jmY$)^wUbTbzGt3PmP+ z5niqKrG{OcR=m@lVB8o(k9_?p{*48B9DBsTn|xT=Fn)uUhqJH`1>*ls$+pbz=+qP}nwryjTZC9)Z}j}Kbu}h6f96OYWD3xq=e|KZMFvpMcYo(pgnOM zy~BDDIac;6HZ{G)*{qVo;^FRmbY)>g{T;1MtCu;FnGrWrpvdU^`SZ4v)Vpo+Ss<3b zhD_FMn*4BTb{ij?WYh(9zs%{rp_9U=NT0v^>WkW!H%2&F=z55MFg#^lNBrDCSTtdn zat<0x1Qr(+>IHVWHmP|ia@F@i2QQeZU6jbtw2>{LWH8WVj%BeHx(Q!felH{_jY~MU zzz-V_I&+GtT!_bdhahF$DfEb<%caD=Olc1<)V(;u8SPtM_BWcLaB@{N#|=1VfO)9A zFF~$BXa;*$%kILvMA>lWFD%rgr?}RcfXNpY^*5^SA8Gz9{ zn1a8S--qwNcjX!wz!LTN+V!#Nl&Didi`U70i{ty#mFr;&)@dKOPVC=1#_R~8~%1c2ZXhCNAiCf~mu5?YGo<92nVCo9GY6s9SmElhl zuZ9`Z0m$y(b%dCibhn@pzyLop!7TQH8vy^^@Iq!7iXj5bK32xy3&mYgQG1+7(f`SC z$UJ1hOAY@J#bM0AD}1+a7q+IV;w6?JPmY`>p5h=dEW__ns%O z%gLrfu5r-|*W;mbGh#*tBj}C5B7}ahIkQg&#y|%axWRT5E=_W~G88OoBVeig;`B6S z0GR-2Ak8wuZ2Cd}S<`BYFmed(iJiBA+_y_edMi0#Hi~&}bau}BS}e0oq$;M@CFlVc z2F54{4&#$K#~Qf^MkkBqz6Tem%0NJ=BFh2PrG414(6E#g%0y#_Ru^AKzZrnmBGF`K zWD++#(0timFcR`ZF)M*`W|;Le!_6!4(dLkf7VW9hcB~M|jb3`@kXmg(niF>$AR&W0FRw4evT2Ol>=boCm1SY8Ss}gHak&R@-ObRBr#J;*iAKGRGI8 za^J`zMVDV*92f)(@ceG*{P@S!!ZQarVVR1`zWFQ31ZMip+}hvu`#k4=W}mCpe#RMXvV9*ga$c_KE0r)rAf z+SEa-fVhZ{ZnsTP$g}8rKEcg2=BliM%>Qywr`PjNf?!`qux}{>0Af>+uPeY7$A6uo z{L6!w81JMyeXa(DX4=j3C$XydB+-7wCkgCe!3JFeHq-y(<;oR@WN)W^<(Jf2vMt%- zN1k==i>J{!%~1f8WH6_ffPOg^e|O*8@chSdx%aa#MrfH|Yokt0Bv)0j0eWnqmaYI> zUH>bvjUum>^6E&S;%RMFT~)4r4*3giS^oYL*wzkV(yswq82=jN!&q>g|9XmdevY9RkNQ&s+7oO17Uty^g#w;!~%sP+sQHXWdu zn8q;kqZl1AlwFuDkDbst@zCuU`0DkXkPVC6kH|?zC`w8|JwQ@oTz&R@w6YpxS})X# z&Vlujp{3!joPzVxg4hZekk zjo4}zU-W}JNyQJUkFWc&rX;=c9N2v2N7rn1ZcnK&84iSJPHqO(t3|>=@{Ww;UTOJ0 z@oG=U-gP66`2^f+g43GINE+c&1gd(cU#U_tmQdIOeXN2L^fGe(=Dk?%z!0s<>%haZ zM8gNCyTQg`bOq?I_FsmIIciztUq31Nz=is)eK97(^my7r%1k%|0W<+ZTVDfqO8wW$ zte?{eat(ns)bFid?ug0eo_RW+n;pX9w#ESLXNQI8c=)^Pz-H_^E28hRZr@veLS00h z;1)D>ZJX8{>ZLWRwBJUb`j1Ab^$Uq2LWSG6gd^J?3?H$DP}jsppOvQ3^ldM=P{taI zRWpUrdZXYYg|e`95)7|#iwd|e`RsO_Nvb7pTeCja#@5J>v2Yb*0yQK=lVD`7ZdF zhR9u9^!l!R1@HY={NBYg;u7;BR1ODk0GYZ9aj+|p$$Y>)LQsSpwyL_Nk)L_VEv2Al00<)rq8!SS&LLfbpna{z-^S5 z)+E>csxnZ#MgY4LAt6c>1cqD;VvrEId%jd9@I7{r?fl7Cf)EFGqOYZ+5-PKk4(?6w z1{OnDCGYlQ56*lWVUPbW?@d1g=m9H85p5iKY z1P7opFS^OsFK0>-9I#}$Y_5OSQbEthY^!Fk^OgTm%2Ki^-0Fnf@8hCMg<$tC1yZ+! zY2QIQB6|_6Spd7!x(cBRuQNkul`!7H4xn>{VOFSPacB9P)oLCX$odo;04MD{q1DuE ze>w!FPcpoZC0vlRS>adeBQUDWwM)jC=1VC7qO`x!%e=rjJyHiyjwji;Wm6aasF0wz z!$Nsaxl$)&^X2Q&s3ru;rD{-T@Q%}Ls5R!gA=)GrhFDePEYX^YC~g&BS2zwl90x^$ z0yl+s1AeLJC??+KAL_tOD{nvGyp{c?YEvj+C&kNk%x-sYsR;0EZr#Hms&Z@NSajP z5WZTWfDifH@co9U3>UyOG^t38+f#x_tXRO$6SS|?$I~#|o2lx&#SsEB_9vD}jsXBB zE)tXv@(B{i&rG0cP?z@e*b>_r8Z8)+vIH^oDg(F4gn6buz{IysLW^qxy4Tv>6uTp-D4>@`pc(vit2~5~l;p1t z`zYwL(w~joqvs>=ln;N8q7Qf=Hr~PE0=Ih_-?^Wi!1?PZ=!;(E4WG>31P1o>j}wpp zJwU?0{6h?Ogp~yQo?2A517mcgI5W@0bbzYP$~t_gsVkO%8ZH=Z-)waAw#j0sRu8A)}2q6w^54vk86A^!-+kgl)V6X$0yXw&ZtvK8vlB{@r#qxq3g3^F& zECNrk27^6JL^E3mM#nL|)1c|pRAQdm`WR1`^N@kIE3%&M=d79JxEWbbBWk`-*0Fgz z6eKQ}w!A&faqWRqQ17B?_YK+I|w}k-i?AzUq^ZSx8hlj^dX3MIYcfLU#X; ze3XhNpR@i8XpE&~{vV$AKV}z`3z>}Qky5O{EaH|zaAWvR3Y=}E4vruZ>3XEo6gT8C z=eXyG>@%Yn=M7y1HtU!>E_}E6X0@dwM11w&=&vEP(=Dam6v8!q=A$QeIHX z8IvfbJ^G4qGeZEgTChBtSC99KThX%Gp%M*vJRYdat-W9*JzKQ`u_ze4&nU$~%`C_( zUO`+p_C&qsW$zmBs-hcCKPc2Ept%s#t-Y*4Q(8IzKu=ZIMx_K6 zh%QjqXgc4(ki!GKJbh)R`+`|9s=8eAT$1W?felLy_F?QKKS?ih%NFbpxaA&9)hJA9?w-tuZEH;2tg6nkw0^q+pb2UQ8b!7hSPGociE8 zoj_LxxW6Z9kNakp9=eMJ4dqL;pnta_VfhA=lZ&L);LTD?(JB6HNSaSS=H^^)ZpQ0jkdtQYf8u7}rIa`Rw{tZ~2j!QSA_WQ+MU21_+MRJuA}=9rgWy&<)bJJ5H_ zc-OavcTOwNy9Lohf|h!Kx9u_<>)nW3+6xTCNf4Wpl~1;;kH{OqbAx>WJC2zK-py>Q zVx?$bf8$f2J`^ubH_5-xA;BW*^T%~Q}C10vx?>ja5lG=Lvc z%9a{-xTm3>QaU??rC)e__(Ei#!d;xLY7pwC_n?iS1Pz@|7MCE;(MVcftYw$>p4I7YL4IOxBkuNtAo zudT@E0y0ML?Fp2KQzMQF&UGCVCubEm$k4mw;)61#_D80N+J>fr(M{#82b}wY{3OxV zH=1358cB4cgq0$3T)4#Xb+2ICYv_9%u5`3*G^6;z%?kg}VmAyQ`XyKAsp~)DeU3u#^=UwU`Sh5iVOUB zQ@1QG>y~*N0SZ?M3kM&0192bux~bs=FPoU6!M%l-q=|yxbgkBtdf3ubw4mgE5ELtv z2WaOg#3@E6fbQ<$ZRMDDzxaQy<0p*>t=wy`fFH^{~9*TM%e!W*?QU*S0dN@CA#DCYqV>H z;m@$uve2AIz}Eu*POSDJ+lA1#IY@tz*0HNT<-xPm&Pe_tR%3WR43v!9C-_j8XhpA{ z@J!8OqT~Aq9lFuSt^tMrznXRp7+eVQ56|>lgJJwx^MyXml*aq6Ph|K-dG$N+Zw_{K z1SWCshhHbg-|6c3e@j<~?CQ!yY3luZJCrO$Uf|q~*H;%;5XyD;9YypHAjPK=8||h-K&II(N=oiT3|Vh`NG%Vv^gf^PLo^#*LOO z_tij~&^1(l&yk2r=MiNMVhp>LQkf+dSp_#;3~}6}#AofC((1Fv`Jo5{%jngTw+1&) zp?84*zyRCON61q@>z(Ea)`q$-M2*|n8DCJZ0pcpGg*gbx?(BR=s=!vqobOXnBgRRz z=dmN*UKCib-g{n|WB=mMLwEtumz3)l>k5&21EcpRl(WuoBX8J2A7T}6&JNo9aG3cH z645ZV`Bo!{l%z@c$|*7b$#MsMW^NWcvsTEeqFn;wgu6%s-G=97)5c ztGr9phhaY%p=>#Dbe^u{DE;;r8{F|oFMeG>=$z(%JQ@g3qfn5U?SffvB4PMG9BH1k z0-^v@3n_#YJu4V{+Kcj7w#m_Be39{nJ@Xyix$WI4=y=9IKEDz{4}%l)NsvK;+e6-A ziGWv@4@`u8b2TNQbq;;i%){LhmEvRiTYo~&EMg+fTKCUeHHco#ynY#8e^|2Fw$nurT1DKnI={o0AL zS%xCK8;l1Sk^&g-AoNiJ_#Vrn4qbY|6DmV8B? zN0ciLuZFkD08H`1BwvI4xd~bpp!PrA4mj@;%lO7Own^wSEVNeLBit9}{Z9ZCAKpR9 zwMhb`v5sZVYY@X8{t3zz-_L>kfpwF9`iyyh%3~l=#0I5OAv0)}2nXoupHHND46Oa% zeY*O8h@u?G;5U_xd2N!|XFcK)p?BKN-%;!3e+HS=!~$;F`eii(5PoX|+_yRIt93YJPmO62LZG4r9MW5-xD_KFO1 z@2NG=X=m#t-M2$>kN1n?iyk_kE>bGS%*g^a4y48-#KAD4N)9(aT;$cd&ODZNgc(gd z4ENt-|QL6dY)ajgIITQ1z54 z_uSwwDwH5;8t{}ZM2=Z;C##FTs30?hLfx9S=GN&;)R^45H5alpm>-%D@LyF zvlnkX(Q)f;YxbVU{@S|?m#^BZ?J!9eu%S$44m2p&M(n(}dVNBp2v*!<2B9mUbPOVW zXay84@W&3aMmcQGlfCAYB-c0SMBwuLtd@nLOzO}V!3b9cK+XMWatF|yLRRChs5XE4iOvm zj`+~$ZQox^|0>`$B^YW$CRHlu=L_9ancQNN8_ZX8-`5NSnFA8fqND-Djf;a7MtB26 z47Pz{l_g^VJToWqN0UY6HjyAg-;ZrSZvMTW6SM&^C=L0yf(@%H_Lz3TG}lDiuTG$D zJWm$_byxkuT9etm5HZT|aB85cm&3;9g6L(g2p-*ZG$r5HOT`|P!dUOf`!f!w+0N8o zm!5~HQ3BgRd@t zJgoHfkoMFBdE7*fB7$YFU#rL#NqW3!k)S=GsnLoYC578)x!$ozSk6{eT5ABvnr6U) z6NXgwje8T}Z9IzdhPm1z_FH@INBf$ih^hb|?`a$ZAkG@T%z!fV#mZ1Xge|oz=qA*e z7}~uYTK}<#U$$0|qYTzr)QZkV`ID&>Bf6M#_GXXsRYMu&BIB)ow{U$`r~2F^R5+$1$A&KzYgD(&rmeFO|*0Wjj<}wB_#4wOFybhP7xfnLn*j+ zSq_Y!+w)o~cRhH}V&9Qzv`QZM8y+-(FQyB;^e7h)XEN1# zRksnT76;srbT1Fh?a=$ydD^gi=EXV2&|L0&?ql>$bJ{RPVEDT7Z&%Utn(Dk)5BpSn{+w1UxV+^&oyX-Gf7RShuO^fKkm1>vyzu5TAMLy3qn zN;fK^8{FUXLLipyL0?x;b}<2t{2gIIA@){^g<&AKFg;7ZQz?(7ja{bOwl_G?+?y#o zh-XHt9%Br-qr-UzR2jS3IK&glkr{4$p3iZ1XeTVI*Jrf`nxHPbyq*CZ&h*WSli zSFgBcl1Qpm$Ey=xZhcbth$=|4aqz1{)C}H}w1JdjByh0{b$@%D(Am2?Dj08D^!8CI z!Z%_34^g2|OKi{Y&C5Y$W(;1y2jFfs#FK|!X$QLm(@xbKsQf`cKGkEP<-UvNo`#`( z{XE@*)qAF45N^F)($1EQ5$4_d8+iQ^{`I@5>yW|1#134+?U%NC)3q^H=IgO3~g|g&0UIvF$*n7i%BHEru`mgLoX34!+AyD zcZPcBkI9t|Ghgi~-$l0Y?Q)7_CluJ|+D=Q(%lLiKS2}ND*4pnwerm+yeQO8ew(B#o z7XX?>zUu`-eKtVsSpd}@Bd%PMs2*oet=@{BUmRXBy@oN(DtNoN_JO{ddB=J_VNtgs z^)~59x$etXR`8Bsb;5nRtv)i02~+Ob7NgeZYQZ^DjGGv)$G6QTf7}fC^>kUp#9St< z8TQKn_plYeEZ=O_yus(sb4Nu*dOU{#t=96CUvodeonY9x(2=ao79q(~dhrUF_>K;L z=;--GQDPVvu!5+nB@%9SfNOS5UQ0IMVh+AZ;bDB;5ztdMX?#(9A>+i$uQm#%86|!> zFPH8FmG~D;VK9zawxIi7GS1AelF zi$}Rmwr+cMPFi{~8K>E*-RAaiSMI7fd34nNc2Ong!hV7UZ9g?tq#N2{0 zrI{Bmt@Fe0I#Y8mYBdagzO+G-`u=5Rle`UJG z7~?kUVt3UwC-!=ASui_qBd3lV0SZb*DT0hM%yOxd(G5feM{bFgCoD5D`SVhYA@x zE(zAGo<4FLV;L>h5x(`IFoAGiLRv4BB0P=Clk<*uuZ}( z7eUkx3Dv0<#bVSb{FSEU0uH+H=A;oyhsf}%q~ zn?xPph;WRgjMf`ollVWIuwlFo9vhX$enQk9x5TdbSF^v3Rw_=(h`e*`*L3ns?;PZd zz@rbg=%kJ{O@KBo0Icw|@`b?krfp;865W1_p1qZiI8?`wScK=gg<^g+UAu`vO}1^i zOO4&H2r)>=8GJVKSw$<)U+Pz8WOgfJ?~fXprQ!1}x%$sham zpzike*^5-iEgfGg&Bb~WY0oN?<@{0rM7-YlzIPP7b+$d9Qd+A;(-FnqY zCM{9mhr~~cwD_4*EDq89oPWbgHH7#ZapZC;;oJU963nmB&Boc12yc(Z&!Oo)&c{!O zSYsmiZ!+-af8=q2sG zkvhC_q}-CTQSDv9&v+ez=v^WwrlQsQ$${ALu?wL4!Nv=;PatNwu^6FOFye&TchYD{ zNPr!5afmbsf<^(M%uScb>Zgb9tEjv-krwwKO8bwpeNFv~lH~8mVU1&RhR@sI>Dp~& z*|PpShtN%lPzo{N6mC0nkB&i!h{^%K99MxtajIq|;VahJ(hH0&^?k!sHW&BMS|h6f zC?oaWS{82lRhv7xret+E0p#J+Sh9QVV`b=fOwTrq8l-lXARBrY&5!dGtK0p`MkZLd zO3$3t8{2I`11q@h9(Y8<6(n3d;Wmq?nDa~1`xV-MweVS)2A3Gsk~qJxwk<(k<3mNq z87az^stC<0qH~v_8WITf=lG|`@aLoYD$z_jytsocZg{sQX&el<5JLqA4IBxvkYDD; z?MEG+l=wPEJY#L2MBEN9-&`OP{XyGBj}&sIg~*cC%; z2A+jZ?=a|2^i9&2|I)qiSy*7R{#*aTa_YI7pcZBZU!I%vcSt`Kq0Y9D(;d1@X+%EW z+`H9~3EB_7T_OSYT1Kvfre3F(#Pox(OiKSrb*C~zB^L&5kO5pocxBC8P4ePld=l=2 zZJ^!Y5-;?{hSzA!#2!A&ptUK?k)CMJ;Th?+Y+~Vc zhg1D6rN@NL8oVo^k&)(`f=fLBf}HHOW-vgq=SRK z3x)aMg3HT#vAsj_H1>$RaEOdspO}P(>X%M@hw%_2O8GXOx86HG?EDW}*M|@mw+?#m zj+v*Hz_(4Qidc&(V|DyN>Gz}-`bY3Ih_gkp$jKeIrjY<2dUklvWPWlk~Ur9eY&9A#sy%YT8AK_Ln4X_2OMYuTdj=lO+(l zOv1!t!BZKi@qq67FNfazi(=}>uuO^s+74*SfKSVEPcFOo=0Xa+%nsl$a*44D73hF# z%)OMSc}oms0n6p-^p5Fo~$Ew(Y(gR%xZnd_7KwK6s(J9_|dx;k#J07n7-;lT8lnmw~s zonlQKbK3K+jJoN9T)PJU7WB|T-{hhG-}?x%KF?lAqt$SDx>{CK#kSj@h|Asx35L}V zcJ58QEbJW&1}qrFDbxh^m=assM7=f|hNOhlK5Tbk;avw(N{>%ah|@&Kj?;}vQv=rX zjX~L1mv#9PzC21k!!ZUsoaJ;(fy?sA!?Hd=`brONPPX(^&t0D1XxmB1bRUoqDJiSi z``}i@|K#X6rZI=2_+b0}E+KfGwNrA64J|hWDqK!Nl3X@+y|9&Ojj*q2Z?L_+IEIJ6Cav@Hn-Dt4^0KuJ#z4?F|v-mYVf_ZRY6ETs!@S za#?S-sMbEp?p5rND`f84kvphyxJ^6Ck$4#Q)w_1RPD;;VqTqa;2D3A?+LzI{0=zR+ z9p%5uP1rTHjwnbM0%S)x78)~ehAs4L+1A4Q&S z28(4ygTPT2#!~E-u<33}TtV2?77o0w(rnc7lo9Q}MhfH>Uescc$R6xCQvU$B+BUuz zOjcdbl(56HBR|d+?T;PUxWO9iC{Qpa5eL}9EJI17Rbg8a{}vNATy#^z&iRqAA1nLk z;Fo-8*xq`F6p?=cIQ2mtHJ0d|gYJI;xX~sjShI4#TJLmV3|0Wc95!0fz3=CRN2Jh0 zHC(6#M6NnimJiQm#$414#}3Cdp(bdzp*4pxE*$x@$MtYasa&U7X+y=9 z3H|)kp4{XTJ#|X0LA&1)NEnQ?-d!;AM-8y+AzewO-TGSDl07;exM%J=j{NRX%a(f! zmk2IHk1!E;pYShIkbwDy_`~S*#8U8S$>RmRejWPoh$hr{m?rWeSLwQD5X_kr5LM4i zylO0T?>YMD1b)IO;tIPFrgZkF%#_`9kL8xjl?f|K5MqEq4mz+S;u%SLTzHV%PRbOI z=n}+|*ezU=U+?8~7yxH43n$G2-9h6u4o&5m~;OA=$N^iG2I23e`1tY}-R$P}aEKk)L;dBjtr z&wZs{icQl-O6Yjb0rLC>oX#to>gH*!I8rD;+s=2#r-jPo9 zX05M&F0yM!Eq6>m?u}1z$E&DwUVME{UyKP~dO?EN@|9&v#bvn11%T69vw^Ww$djya zrqbB0^kH_H=e27mQfM@vIEU)FYyWb{=@?b2nFBp?mxQrZ79LpJe>o`vh6nX8Y)4_g zFGPZNlQLNzVn%6A?w_zvzBV~Ys;ovnV`;j)F85ML{dI=fmuD4A?Vg%11VPf_-6A>P zHWQR%0x9{sc@3y88zmzFkT4Ttn{!@6pT;O3FhYLsWFdk)1H2G?QIc9HY#Upsghj6G zHMKrp9hO%%FJt}rSRr!b1+%m}&Tb{D46OJQ+##zDd(%ml0@TeDudC-o3ih2oO|6_> z29W{_Ob3;_I29i__Cz`K!B^$CtUlp9R#*A{vrb zmCds}%_`#2nZFCkII~GWTEpk_FgBJdVKhi*31*$labtn0x593&qgZcl#Mm-$pS$ij zNxuoBipQjt2!3DNY|9W9n&t=+f$^%Lp7NR=3BOhaH9kFf+a-_iuC&@Fk;WgmtyPR2 zn<>hHd5i6lywFTEy5*o!BY>}l2x5(b5G*Q-Nawe2ohx}Wozr(&*}6+TUVB8{=LY-= zm|0vN?!KGgE($`aEg@&yvnZeY_T%pkryzk%6=p0NwDWzMM$`$CrGi|@cta#F9! z!lDsLq^pqe@qF-kDl_3&Nd{(F@h~AMcj7wmE_#7m^>g18A7@%yIOk@*c*I*ubUxP5 zPWE2HWpk^6P-PY^dr>x0vQ8^~l`}C}bnKCyzAz|L?H85;%#^8S?5nS!@#P*S=VvYK(AXGHUS0ubT^Zb~(NN!Nf{kpo>#3$+dkoMb1o)&eBDx5P*P@GrYhFM?b;O+fQ)` z?~q!G_d1@U3<8zl0y5D4*r{X)0F-Ak99fi309g#*AeY^DRcQ6(UrZ|(ol96s;wDwF zPtrF|UkstHhixHNe2KXl3oeJ#+WtYrsrI6xqpRihPfY=6a0Z*u^r)f{FL;!d*(uTa4G8|ZF4IZsmK7Z*3E58% zAM%`Ipv5wzpe51A^@CPeq6#Uzv78v`@rAUU^j86UCH+0`T8()dLoG?CRijc+#$zZG zYmzFHoud#S8x4fzKJkPe6(oJpUyu`is~olKiXEl*k)pe+S*3HJwi$<#ahi|!7TU5_ zg7p(YedDm94C*zcm6S|txXJRi4qsV9cGsuqCbb@|AHQ!Sz4TeNH8Q%ZV?l-FzFP>T zo34RaMg0qbsg@j=h!sfT%~kC{aego^55_~+>+shQ+kDXA$ujCpfdO5Jp=%=-Dp8B! zE>5`1`wpWUB z4t$nsEvzqa+v*kh_ovnfZ$III=eQ#hIhKC`QIW0kF1B^T;g-F@?sC`0nux2c71SR1 ziq2NzCj9O^awfQn1!J=L+$PU}DwuODMaYl(Qm$za;D#<@25ugX9_AX5#T&d>*de?% z#22fcJA_s5&v`Tv8L@H@0F&!Nm--$cx2#{P(tmEn`_t{mvo45IoIl4{R!dTnAUv!Nw&T0 z@KFLcbd1Su8dLZgrwAI|wmly-Aja|&t}&4n-9PtCyiysa%L4l+hm+XR_IE!U4&Q(= zG$u>Il1ntzdG-?P-3#gDy+S^#hkbR3)6TYVp>qs)}vv20SkVLF$QU zPTYM1r|M;s@?rGol>CkV`L<1~JFEfD!_{$rz!ZTjM;6A8QmrSc!09g1{~JAN^$_b; z-1bqY>HeJe!Rd;RmIXlO%jWS{MGdXcH+2K%!(jEoHul$C|9B>!hX1Jedt_`a3FK5_ zx2H8(<3j>|mjh;|THayJS=Usi9mEeP>uvaQko}RWIJ(^S?AHizqhXsOC1V;0^@--9 zIl{9LCDGrPnV##pgz!$dly^E{=!ZxV>+jkwahi+h;Hu(55rtVI0fj~tieI?&Qqmq@GnbZX-?h~UT$yXx{erhgJa{zEKqrcKi*w^Mz6&Q{ z6hm+apX}JQZX&HQe46*WIQ_n=CwV6FFml})K6R%ZdJfLdS#2DPvbzmz`&5a>==7** zJwHi&H-0K-ntfL>qkBNdOp6?rA@a@sGEz>|p>d$uhQ)RK# z)@W}=*6HCU-&#Ccv(6%Q&z0E~&w_KLD1moIJ+aRv(2i$Akh{IoLpA-987K)6H5d%s) zkcqdZMMfnMl&v}#uOmDhDHj~cYB^@0kOopgX}kgy_(vI;5#y^9D+wvlh4nS5S+L=3 zp)p+%^hdz6^9Bb}3j4p?Q4X@C;vy=Xc+9iICDnU`&qa&G8@V?-e08~{gne{0Ogzlx z4a7}+aK$c{-@Y^ODqQixA-~N?ow`iEs;D*^q@exy2xxl9+3Jdjo5FTaglE?(sfy2$ ztv7f)d`!R2t_bdaSm?+Y=y;eLcv#fw7~8-Gwsq(%t_dVFd9q$k@1RgmNTSxKfhw!T zsVQY?fYjH$pS;f1Qu7WyLPj31sWd1%k=H3DfQo?jDC<=Vb-Q2wEX|zG<=xn1)Ne0l+7EI@5vJ4S zoUjIrm4A5rQLo7#`vsaq?`24CY}nQuk{!gow>J&rA<73+1c0deB%$0(($V$K$oG9w zyFD@MpyU*V6{UG!Avp!WI89^HQi|`WyzDg~BN~qvA3y4! zS}_b}>-n(AM=Rlf)1@jOxJpkO8R^uScrtl;jTN#es1OH~J`hZrOhC+Agif-qK=Jf3 z;j?lYo0 z&8evsRN83~Nl}WR&Q;Roj1PB@nOcr4>nw`}wulRB3Vo=9!SHhP6IX7B^B}AZS6La} zg~Z}a{y?Dl5%*myS?bWek_F$K)L6GXDn8VVdHPr60GSwsXMP;`6IrU~g3#Lb)~3&= zooqHu*?UDqvKBkjLoos2fQGY^_>;#)qClQsGw%`1cc5-pjNO=mVUt;cGxDwy#sH6l zyV)xsV$(NRo3^enw6A81S|E2tKLjLsyr>Sbd+?^Bd!f`FCTrv9`j`pQ?IYyD*Z>De zK7#J)eTXrMOy_p7!n{&H>2BmT40j?ml`yD!v(7UBHz!3DKsN!vD47F~c!apIdCf_F$j3=2mR6-buN-1QI<)(FS6V2ijCR~Hkjr(3`zvzW#qB4A4Rz#!bJp~GAKvnW$b9u`y3S7=y(&Z z?6KH$-MCxZ^Gfzsre|`FDH1uBry40-AcQF?%pYd{@^~H+JP|2V{g`X}krsN2ER)sD2ls-K5rckh!#&kVU7{w`<0p@W8}N z-$(pqbrOt;q8XRfsv001hg8!|mku75Cwta)SzHlIX@(CToS(=Mu9$1rxs&HAlwK-E zm_c$MT{w=9Uo*nOAG=9Yx3|rohdWmwzt3n=>x7{%EbF@rsGg{>YprJZeuuJTa*a zsWXBDNDI!K4ZcmKX_i&McE?fpK)4-DEJu^iD+vmsOnNTtxB6q~mbW_JhWh|LWD&|O zOFDK^Vt@}>q%NT(W$D)s>CScvgI_zt!IHjtd6|0}I81CN^y%S=;skkRP|qpqKdQX| z&?Ml!Fo)P~AO_P3Gden%j^C$fKFPkTnS3r|=-704u5rMXgj&1pe}2m8F5x}qY~|i! zb_8~1M_%^H@wRU*By2ey9|wVq5ravL0-;YMBSI1~p9sW8Xg%)Y8(@SfG4%NtnNQFI zlSlyqNg@_Skw-zTH|1pDH|&(cL#D$Q%LP!>>QaOd$0{HC2loaKseHR&2pI**Y(r7WNGJO z>O}A03Dgo0=Sop_<6D;?ZlfdS`3u9%ggaRYnAzJBf2#NE-vd`{UHcrdyIlQ7Clg?3 zu?cO{38m61MSU$%+ud0xL%Z9UAz;(Ow#~)GXxeg&~4AJmLfkeo6jW5Xu5rMoa%OYbv*BUCS>gqsd5~d?- zv6Fo`jO;T71mnfQ=s)l9EBukAl)_YbV-W4PC17ufaz<2Eapa(y_)%#8@fWYO$)?MUT3RwzcA1qW znt=Y)2z{1>pa|ZHwc(9>E`%XD4EVyr?QbxTAWFXzBLaN@DVgpV%2}?J0E5)+!W8@ayO$N@E&5FgzO&JA*XQ z41~d>^N~}_=g+L$*RUa%>KIDvZ}}Dx_@4#$rSi~|Ep&urCxUDuF=(k8LI9Gs@v@8e zT2)!uZ4llFxH*hEE+kl@TOft{hmy>zH4*~ar%?%tWS?e)Jtw)kf#wSZS_T;ktvW1r zq_KE52&juy!M_yyRlc*mL|xrFU8mX0HhL#H&I60D@6A|m8pCZBs%$Xc%igLnOThta zS1ZIPbfCh0qZKwhtdoWLGt_LM>Z8JPe!Q`OyLTm7^PW}4Shf0UvyC#Y&QQQ|OZ8}( zI)_xBAD?6Bc{2Tnr&V?wH|^4Wd$ST6oOEO~7QLn+iR@@;ecOK8Tg^~gA;Yqz1y%B? zQoT07*qh*0M}gq_DXQc88LIo>9Y^%t56XuaJY2z@Xq2Zw@=Urwy=@x={zfl2fl>Ks zPAQoA8DLXPHfO_4Ha8gmX|UXb0}-_f1q?@xn1qrp;2kI(s`&jC%bz;TEiMSuaCWln zkrOI}nYr@4wr8uaE*zvB(`RGpoS!wkEtEeQAChUdP3w}h3tKa@<@NA{y1O;1+G!9gXb!uU=r-yc zzLk}f11gr(yL6_Ptx9fB0$;C}<>->X1?#iYZj#CDF0c($Irq1P8TSv15(X4ecAXa* zw&2VN`6Tut9Feo=&Ok+aTZD&k=&&_Q-OnsRHE4dR`Cp~uS44bP+IN|l4+iSQK;nfV zi*e)NZkVC8S2V=B&#I?_1!{>Sv7*xSFdCV;l6{Zt6rS~|ET@;)MKu~;Sxdc0ix^-R z2nKn@9FB*j|IX=}SeVEaup1Belh`SzVeb|MLdho^22uMhZau@Y%@&;V0P(HQvh%Ic zka=xIk~|Vx+BCKQ=SliQOvRS3JwduvRO&;<4nBmAp&mLdmWjLH(j8;&*tr>T1$hgf zi?2LpX?7WpMR4?C^IsdnK=xbL%TIy58R$=BkquVF>TV&o2aKAd1CY zS15*W?G)nXjv#5iPGO|R;t6ybL%_mhcp8Piw9KGND2iG%0(x%b=%A2x0eXeov|>>9 zNS+aAL532ofUh}W0P}{rp`Z2YLHbw~O8Q&p6DEXL#wT6`z4{GYM1d)6a=D%XV|$wW zeROj&bO6>0`%_>W=a{&QT30Q3K=vpp;B><_3Rs2@#HR#lAiWp@p2R#OuKJP)y6Uh| zF=w>C&B0w{MWaG|4rL|9)#8(nU0yK8oZ~ZWE35@pTwH8ebaFi6?~rp**rvC-PE3Tu zua=me*HC*&)k*DWjAj)Q9MTOT01oTDvs&A z<$KN-1dJw(A&4G^#h)K=%QZh^`&xF79Pgp~Ak!h0(TPQDTXKEV90VZt8HlK!O)wAO zS}j}q&2i-KI{ijfg9s^?N%Suztog!p5fnUn%<|SvAXku}GBp$c+JuvOqw9G5ElV@c z6dBpnP2szN;?YeH??ab}z{ky-J9T}!Xe+-uPxpKEpV;}c%&rYIvDzr5>Mpt!(NxXY zUE5w&du?0xE^c*P>+FYghSkvRE4vfVUf=b!(1{h-52xdmfLVZA;9L`98=ak-8pCp( z)`i-7teRT8cJT%JkH^b?{>Ap#%Y}Xyo2YJOe?TMkU|TMv=VZ}>l)4$@{aT8qM2f8_ zBku1$nn@+qR#gtIOj%#`$|9w<87JT5<94%@vhJ#ex$&yd_Xmq%FSZYI&`Yb@C|l)r zH9o?(=pMUgC*2k6g2uG`*2HSHsnq3{=en7!`SG@ohr~bO*h^+RCT_ouv~?E%iG2W9 z<7M3Mpc9tTVp#&oAk6A;Z*e3@YLCJbYujBB{%vy9etTy8*n4IcvEJoOa63ughwRzw zN1x#!x+kepOJLRoR;DhUnWfpYC5`P84>Pk#GwaXZ<&W+z-B}gz9&@Wo*&U2nGRI5= zDr|nR`>tBUvrOjBx~8@Yc+N?X1D4yyK!o1iuToMFwK?^lz;qbEr|J*WM3njCvOiK} z{An^^+2mVWS4Gmre`6PUY2e*qTYteamW}X2iYG+!+^Dpu++VBWk^vv5B>*`xjkf4% zb=Uu#vK9%AoWdPJ36ApkA+?!R5~d(HVVWZUr33DDlz;xB?1>*avu@d;NJ>`E(_QJ1 zg@s?;e2Pfks7yd+DbvV4i^rYH_1F)hu>4LMCF0XQIkP1>3X{MIPeMvE6r^V;lM;O# z!*Y+Q+Z;q@|IiA!-57OU{*9#(0IM8M9-G9k86Du<{!tJ&6{8!t> zk-2lDCzgC%i~(dg!90Hy9)Zi;d{uG7e&B%HxyX;>T--@U@!Z$0vJj!NljJ*GFCBtK zIx}IQj*9>^=Yp#g4E+AH(5P_3ABG%3{)SVRdKQ69cvB~d;ch0=016E(Y^w@qG(%r$ zXS|V}Iq+NF`$Ebv{0b@0%m7h9uD><$qa9$jHi>-W9zZ$^@T-w|C5^-pM+bx}WN54b zPld@eJlPBXCVMGAlxk;uMY1$GK(5JJ!7{WF6AT?OLH;!GWk{zO?bQMbu_MQ&8WJxk zVC984L^PLwq2Z=uIH!kd_^4kd7;NMP}>=8$@!;Mdx-&~i$?I96_50ZD?7G#m8D z5ehY59 zNwaJ&R+$W~c4tAM*PnTRw%*Xi(MGuS8JXhTNE5GxI(Rl7Y|S3vL4|6z09-Iek)UeK zey(PISjE6GXYMh*f8rD(B02a!_z5rvxA9%wM#rVs>%T3$$?|4)h1zIfLdL*1&teef zDH&5JekD3QFL27}DI;#lErXP^=}g>Lk|?*B0ByXOmW}qCk=@ujDwzq5&c2E0jLYpY zqz~q5_!fzb4z4C2ntetsmxz6T+f1BD3op{!l(As&F-CfORB;W@ziFx~YjnTUtKe%b z@{yJ51d&q6`7z*Ns{BbDBxU~<^~E;(zF8xyHv4=GN3Z7#-ho%bf|u#wRGOjbbNko7 zOo~X+Y}qTl_RBMd@|Z48g4bzQd^Zk5fc1awL;8B3nA)MBN&zG|3nwRC4Nm8=Q!wFFog(|zPAIQsy zqdJq@4 z>mf?j3eauVWTv@%9;sDrbbZ%BD&O||MZtky}V8InEP!?L(0eIDIS(PK%XyR{s`RR zE}DKwkJAI`4NE}j00z4%`J^*~O3Z+iE)bJPH&;w>wI+uxQ$(Y2G1U z{>gDRx|SHeYAe+&lzgY3(*Q&8d97A`;Ku|^!m7S(nWoKRW9VAho?znOQt$|k^PZQb z59^W1f2^!~-FDM5)l-BgG+ONIlCPHLOriYSpdri6<2wa^FacdqiiOt8oKH)V@Kvu| ziZ}3rCr=wMV(~4s_iii)cRFsEjppq*A#s4@ZR_U-!%Mxx0#)3Z%N2i9TBv zf(C1kRc=hCxjYweKt%op%(3@L9azb*JwQiMKcQO;uwOpLcJQf;DaFpLn(qrpXFFym@s8b79W(Xd=OG9EHm|P zp6-a`SHFFe&?jGdO;8FPef5#)|M<+65l(z=VEZK-n?J3%l62YPmW0Xj%g)Cv%r5SL4RGPaoP7vGuP@`paR3A4Wj6ynMVYUV>D0!?Q*OBkeLzdvV~H z`o~S{V$VE>oBUA;Yz!6RCX_=IvvohSfOcdMRilEm0SPlZX3Y5Za+Z%!4hL~#h$qICWo8 z_%;CQeWahydzhwsvY`W`{&GWXNiknL5}RV^2IH@5JHbA2#$x+i^haHsiO=dPWe^F; zUNWOGi;VEN6y~QNBMs_l%dQF}Ei$o@VsD}h%CVCcaoy!u>YrY7aBNeQrKCU|lG3B` zEnT^*dz{5{9n*@*baHR-XP?OVXbZjpp?VNkxdSTL!pKm=tQ_PZQD(D$$T0Bd+I>_bwO$#LGxD zjq&ep233_n5kFoU>K54@-;U~9g$?uAF2ygL{#N|5I7{rG*@1dZV)u6Cd%2QBr*qQX z3{Ub;XaA8#S0#Ka?nf1oQeNblQ?mAsiPkAW4E&RRL zt{#Oj<0j2S-d>lb@x8xrN8a+q2KwtG&t4fhd%t3PC@;V;7vbMO`P=Nbr9B;ycLzRd zCA3Y{IZm8Z1GH8c&+kENz6YiV%|Rm3DvdZvaP3@#!~La+&mxg!|5P;W=SCl{Q@Ky4 zdf+||V$A1;`b{x=dnw~72iqd<0?myse&}lK3B*q>{9ww`-taP57k`n`3bTwR2+7J6 zGxa`*3^8{8u`q;^$0y}|2)OXK-&Z~?C3mnnaV5&Ho@r8gzF z49G|F$k`m=40ZfNN-j$egg66|_y6=Qw~KSRF&W(^zv0qeLd)9Txgy`11_W`?W@$+45JV~h0VX6UO_3S#o0`;gOeA5qk0&YVnqBRL zUNBn%?e@6ylz>1~lgbu*)pMjZP~z3RnO!l(Qnkqk_+4mRxo*$b2DI*p?I8Y&Sr}{nu5DtI^p?GEu7VmGuDeAzKYhd$dH|?D9;Rjw`se6 zxp_H2zbqZ#uba2MO^`2ZUjF^l{o;Og)4tQ-i1fhPdpdYu;Lmy+ukmwcF`Eoo?FsTa zj@ra?gImqIrLB87714X&98iSwQiowR($qz%VLjX+V>$X4-J-T7a{lM?2K832s`xj$ z6yeQRG^39mP&2GSD{vVzd#0{zCd=3WX-^QsPvuMg#ZzM4@%~M@Qzd~p(p9#Lg<B`hMg{i)5FsQlnP~2U2y_}lC&3Fn`RZzUdb1t{l+-ib5SRwU)(VaW zIZO|H;<}Yn#EIDme3XNWp4$3DqGkl+m;0jMBJ=?i#Xklg6P{|AN7F z*H2a9NjckKNTF33Q}^De4T&@T$24^sXq#zyqcE1Viy)ThK4%k^QjFqlFv*L;5gV2> zCvo3A`<3_O_1sIY!ffNBs_jlupvC5(MBv;ev3H0yqslOciP3ek|4`dl(8V zB@D5@Fq#*SVN2K?N8dR7A+u>(RFG>L)!D36SinoVOjv?vC%P5DxxLxZtJk@x++LM| zL>5vA*aZK>lei(KFXL>-EiB6C*RM{EAQLqC>9R+dx2xlec5?-ka*?LwF8qTj1O3&gx4lN|3s7x4?L}-cJGe%M^YF5(m zWVT|)z;dW5TyQz2stjHG{g6O(kn=zSN^!-s1Q@$Q4fibJOv!ZJ~R` zt>$&1$3xKS;9S(~2>~C8-S_*+eq`Yyt3OfZ3Y2uqvELJ|$^0?k+NY47H@C3E?}D@d zS#w-{`M&M^Z(m1GFIP6c{9fRzI2Z_URovFkObwW=#n%@>Y?CHK

    `IW83Kb| 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�t|ogo4am<=&Wa+RjdKwjkxM$R8EYlC+B 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

    JxyAw@M_x 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ⅆ4`RdUiHWJthEEWF;^GoFPc*tl)o(k3L+)S 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 z?@Fck^Af2E`Nfd(^tlFX3)2ouOq$b6tAHEDG<|v>M!}ObjN5 zUmWbU@6>&}v@}Hh@FkNRT#>n2+)q!Y$e3ws19$w))VNkxb#)yh+4+TV1e}(CRElF$nAcda$%qN0AjzY%&OiWfk z92*i}tiEdj=C9s#wN*MKpS3~-Jnjd(T|i;5s9^|j?Zd&elCP;MeQtzA%qBrmwlnE;9t;0 z@|GV*1x~5o<1CX2P@kwytR9F8Hbua(TL~mB<)k~xJ8P>Z4Vtf#g@J3JOQW}rKklU? zcbteYES|7kvwAYjg?DCkw;n6vf4XrLFEnLE+6cZgIjTt-a3(9bM z$#lrGh&6``UO~+zxcZqeBe*ljMB-hIT26@wg74q^me%F<#q5|HB2A2Wq~)kVf_iS7 zc_$|Ntl5&aIEDiJNG8E5pwCuQ?C`{rHNw}dun>MgFvp3qyR4;F&GCA8ngwwkBqS@ zj@Bop0+n}|0tR}ImMyt{jDHporavg<>2TF2WlYj`MHu*FF`M{?m3_E#BGm@UXICpx z+KLuTcdxU;#(aRDuE-5RI&MNW2l&}sfF3#u<|be704;8~02hwz04Amq04zAi02hjg z04)aZ04;$O047bu03G_g03$zh00iny00q(I03%Wz004Gz00rbI02-JM04fF005EEK z00c1f04iQ?03(}}04vT103i07009!`02SU>03^*904DGv03)c{03ITJ00xe#025R5 z03VZk04R9S02g`y04+`C02~z700!X703Fl?03PW-04JJq057UU005p<02K^k02gP5 z03PQu04-n|04FcR05B;_03>DC01$dE048qW015u01KJm00$ph z03Al>02JEP049d#00QMU05)aW01`V-04Fi#03z+l00GL}03@_T04M9*032`600D;+ z01U@k01B5k03C#)02hUV01U>F04AtU0121^04BRI02`&f02{ox03y{t04=1z04(wy z04|)C033*c01)B&00^`h05&cr018LQ02XFR02O?F03P-304^R>01PYF02JY>05LOL z00c3W032P<00bJj05LD_0580a00EPl02TJx00OcO04Eft01QNx00BTy03IDa04H|{ z00Y`#05FeZ00V=U04gaK02J^=00E>J03FqF03PAG03P&m03`;`01MGJ00~Ln02{pI z01}oh03Iv`01Vz8048sd03pa203k)U03qh502{{%02{-q02N#s00ACy03ca405!qg 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

      R$_%#Rc0B~Sy5V> zi*`o)&uP)>d+w-JhYK&o*xK84O81JrO?R_;vk`n!E!+7mck{zKzvXV-sPj(N6q1&*EMZ)+WKx=6%Iu`5 z!oHSsRu?f+sDUohbde2un>V>-{*sBBEr^jizZ zv?T3(Pm>S4yPrd0KFFo}8m+M@)6ebVs zb@mHYvCjYklpXbWEFF%n6}o6Ah-(?Dm%BTi9cqtGPM67)XJ>#h7z8K)mo6s5dJ#)M z#`c^C1J>$<6DT%|8U;gvMz&NE{+NcrBth^x)9?nh%EJuoNa9Izq$xHM0mige?e?}( z58i#Q-oyWQ=>NO$|DPVb+uCTs?`N-G{mg&w0rkL}SFc{}%A3s%ezmy)FJJvE#jdZx z@$Xulaa+?tZK7gfG#l!mT=5K!lNWe5-XDd7H*r%zA$v_aJ7RgRT3a`*{RzgYCF2zT ztZInsH=%2M5H3{YQy9>vq#_jd> ztE(&b>X92p7wesq^^?7qEjSmiKhRb3eIwpBk|{ZS1J0RjUy~?fq^Z^0_%Vfcu^ANy ziIkx~P_4C=Vxxz)I_tb@eTHx3D;+Vq-SZii-|gyS#x#O{bhXQlopw=7(b>Z*pR=p~ zvs)5elM2psK-O7zSPor>8S1mz-#0cM*KQEk(yn4@yrmtG0!AbM!sAtMnvrn;z{a+A zttOJ(Vf8v!{xa&I($+2|n%ojI$tXXq5|`z7Cxc`Lf&*b^#@@5X6c<`gx zhW+MAD@t_)j7^8Z4YT3A<(3nwi{aQb!L}u4>{E2t?5r0h@=8}7HcB`QlYQMPf5^58 zvxgiQyp*mA!RJ2!miOOsT>bz}sN`+5+-}9%mIt-9>sk$Go6EU0b0howN*4Gp#@`mZ zWLJaPE>`H1(7bB?n4Ip9G(vx<##C~@&aJuMqZ@O-&i!(~g`!yNXAO8mT!=5GV{~mpQ*Y>XhE-&W_y ziu+4n%=JwsFeclUsIS5aZ2wpdp^Qi+Dhe(x6ARC4U4nR0s~mlkxqq&%feljextLze z=dQx66->mghcO3X3^0_~#f2afQVzTuZ{p@U!S3mnU$M)V=FZ4xaSykAkIyLvrLId_ zmoR9&9z)!+nc0(93*9;sk7gWs)L7m+p76&(H(^JR)!R|7(u|U9yR7pl3)K%8M8OD+JS!bumW1*GizL6mv)`E3woK+w5BksVgox>;0J zftfoP34$V;Mrf{_NrlfM;68l5zg(E4laI}iZ4X(=ls9nKAA@+6L}YIMd^Kq-H#_AsQ|a(K zcY>;NEi+GLdG8P@XP*4WTLehIWD_$A`dv=_crYHqp0RWt3*^6zC!2ZvmnWN_?tky+ z$yzhbl5??ULXtx-wRFb$CPx7oL}*uBpGN-BM?77G?mV{=HeAZ>RG30}{Wu(fAlK!; z9f!hbp6q?S4~MRk7M{FL)vJ@E*9w2O4)$N1?411AhGbHJ)g-suHL*{+U8f|0jyu89 zVMzk*M^c#}<6u&j08Lrs>&KqWn?H-!Kd0zkhT)so7{}eHjz#MqUCXoU|1tdfwEpko zsapTbuHKTv0b59jWQzO0d`1dVwcqfc-$63;IG_c^jx#SQkmL(LC%^??sZ*LwmMv{{PwIPx!C*^4!(>x89d*#5(EUc_rh@*WY>Jc6s4;W#M*t^)F10S}Z$@ z2p2Dp4o^Efhn-WDB6bc>_wh~V6cclg@9V7U+N{6FuIL<`)NwkYnoWnO5cbdyp5qCa zCgcm2o;A@Vprp{&nJITC<^mHxnvnNo)43M24B|OxQy_)=UVPovMLbW3d?Q^r5McRTu#&QY|gXkMdS_fem7tc%xp1^)39PiO<=Pr`M%hO(_OTJibmYf%Q+l!5hR6bg9g4W&XA@uB4Cz4y04h4Z?MQvW{uv zWIZi<-O(iMsnc*44Scm5#0(~g)H!$0*rAwevkA6Kd(!4;A?7lNR+&wQ&BDm+)xR2D z8}!>0$yV-KTF-@+zGO_SXg1NKIOQQBLVzCX(K6k^(!T}@pY;_&@x%dL_s-t}(>3~H z1SF2d_`?f--V)6&#S^)qE-XXGqEYELUV}*Q(rfUZG&wR&?sc)pg++7`B!AI!d_j5e z>?mr;b!*+~44z!oFIOk8-IB$-Oub({hpN7G9JUvrKgd)7>Y9$cfqxl}h8T;FVA532 ztQ$z!>uTCAHma=_c9?Qz%4_plU6gYjZ7HfHndRmGCwCxp1@hA{W3)62YY?C zFU@>=cT&TtP$r@8#R00>uYr+Hy$A|`{p=qWNRUckVc_=aI{Qi5RS1qworMt$r}k0*uQ5A1#8$Xt&h`R1Nz*Zw{n7#PMqzjrhBF z@3eZ{vCR~mtfhgmEmz+|mDck>Q6Ey^F5^~&LmXa%{4~c+M(sr2JI^*(dC$a)(T@UL z!@d_~tjFIoXe|7zHb4LDiM-3T=2<2KS(bB#XB8Pfn{URh8#Sj@2o3-QN40#Ot3@i= z+(Ln8iX!kNylUoz56g59cVbNx!*uV@6Ha@5X{Wib>m*$neR2qHq^UA&sU$gm@9OUj$9aX* z3Ur`CHaIM8O`n*tlQLsWSh4u&j7Xj$t05F%6<=+-o3cbJ$Nkxd&RjaBZ|PZ zAp{wm%T@pqbj*ZEn}sP9gOhuvJvMnZaf>9J0;&L-_At)xtJa=H#TLm^2S6!oXc8wS z_D66+grnBmz*9jI=a+~a60sHdHN2X@R=GbhXemu4T_l6WrV}K3jP0OGk=_f~ven4_?So*VP|8CXLPrjWXoc#{MoC`ul442D zkYVwL-W1ARNBKsBe+9;3(G4a+tz^N%>--*`W}pv0@!vnQXqaO^-Ly$v>FKs&Py|{c zzri@U!SHwWo2EA6Z@*i0p6q?MchXU4@_vNZYu=c*Ei9}p$!<`s!_$y%fEGxOb@F6n z4H@pC;c-rZ=ztXB*;KA;flf3s6^4AdcCoH&Jp&j+0T(Bqc`Ml_5K2zqS08#{IJS<| z`0V;DY35axtEek8kxaMP0L@S$Lh;y-0& zs5+UdZg0BoAuKc^D$YYsCZi6Cgez3f!KAXd6J6Xel>|;NVYWdqr$sA-2-0S@xnH`^ zO*23SUG*s6@K8p2T${XMSHbr<^!l>;*#3NXC$8LqtLz|!>xK5T*w3y>;)E89CEP<~ z;)ITZ`p_g!_bq(svN^IX$Kvi}*lg2bKfO#f$rtG!A_X!xiUf5L@C}A~rJu z>Sq9L8U}*Q<4vcyTj(I+P)OpBI#*WhblfLwVs<3#+M&@y81&NtJDkZ zydSro@9%!O@QkJQcb7S6J>H_q?SmFs&!c8I)`*$uR#URMHyx5RfJ{i*sS?|6CrZ=U zwrF6rRGp60>ZNL!nHEio7O&N!>OMfg=J{xCekPqmVOvizOv{JJ+d0l!slg)Ox)RRX z!S{av&PweNVY#3&WZ2ah5gDUIGqj8nDOFZkGC5woVb{#nTZVB4%xP(0h`r^jWla$( z#P!9&nmsz~@z>s|nl?S=%{SDgJ^e%J(l$45%Jnz5 z=CJ)c;`mQL8pltGWYf?CGWe7T(kNHUDOxId=H_ynLV1g}tQP6;NXsc@Zo|XVT_bJH zmTApaW_);lm(bw|2~{`f>CHElN^zaF7cFXetAC9S+zy`N%Ty4y0>VhWe1fU*DArUx z_hGZ)^smLUoZYmkKCVfPeGFd{#N!h3i!XU(|CBnLQ{)1B-qGnX3NK)U;zy-}MJ1qP zUd3R_NS4v3TlltReY^b#Gl(Nz%jbp)^+)OOP_ld6yf4WN+}!G+x=M6vB`PuTl&5Q= z{E@<`lZ=wn5H-vxOKT>CqEJIkN2~DMzVnemx&QNt_5Ax@`YgRo-Rkn^hC7t1U+FWm zhI_CsBOCuZYW+LZ>o43BmN{rR8ea&PVSer5@Eb0k*To|bXVyf69LLx}`a+!+eTrkb0 zr^V~@5VlVDI&LNx4ers2`hLIjjXK%eIXyaT=MqG| z7Xy`UtC~zgON!mC03>vGD{3ZoutHZ((V%M4-q-EEenJ_5-6GqHK`x)M z`FPcq%MJWJ@y8f}rp`Zs5)%I+65At6LsUW|Xbl`{lm%ce9Vq&4w;OAn_&%Ltob%b} z965hBJ)6@LG7&}^OHZq6cmHJXW#{PRM|H6C|USi z$(}U<6&QnQ7lHwXY+*4cnNtb!6*8UNiblB?ep0VVvRYHs2A3eX z`j%8i?rdF2QI~&jEoAF@H6USjd(dL>KG(`O2E4VK#bz@#R3j3h*78C!x0>^IDJG?< znRAp37Jukoh9C$m7%-`|iS~?M0?Wf1FrD$;yLa8eC_sL{t?&Z=uic>j-bK83_EnemfB4Hqq0eMW%qG=eDFRRnJp8B{W zLEn?RF{8-vp0NK5!Ut=6TlVcSmY&$mT7oSaP>W)Ye+x}V{#a`|AYBKjcolVfdmIki zJtkZZ_Sl0RW;g=|tFqRpxk4RQ@?@=1jbiG|S^^l06gR}Cme9608nU5f6Q0BVR!Hhr zB<_ddD3_Knf6G&Q1Wto9L;+ekxLKO>Fr2_&=>875c|xt>!!rN_$$L=jcep4H12gJy>li9dW=D*pDNH;YkYRLK7Mw$g@9+8KxSm>DLiJ}I>)CEDj z8zXvcQ*~eyPjeHI=_<3inf_{MU4$1;h>4Y4!r-CF4wUl*X)&u)Am8}m(4Pq5x2M-_ zTo>Ad+|9@>ZhloXdN<9*O}u$N8kn1BgJlDm9A{_v)|;TY=}V0HeMcN_1e^7t6N_ByU{uqmEte4_`S;CA&635a#>IT zm-B*Jt#&{?gZ2xUMtayn{bfamT^sTF1`LJY(~#xaN%{#{3VxG9u!lBlIoEx3*(Io+ z<}3$|PrtkVWEi6?Sg+-a#Rti)YxM?`xH$9maOzL&db0WQy{3UQ1=TafW^;;iv$Kb4 zRy5ZRfaHvv$^w{}RN7~uCXi%^LdvlaK1VBnQ7sId;J6p4jp&Bj@>@y``V`PsH8~2_ zn(0?z_;8}H$&t|hItXWz1V5_BTlQ-f&ENx`y6FAyT6FX@|1m5;JDiEwlO;S@<=DrV z>|_SxA)N|qc+m$bgd8eHLMRd zui7$YLBR{l;9@!wFr;w%01ltQk6*!WqgC!qldAaT3*Um_Jjy6)IZ1~BL@(?2Y`*Zcwn zsdI7a8DL*?zI98iW_5rgY%ghfQz9K94eh8pVaY(^hTWBPRz-z%ZfUW&{c*;-jK74O zY#^9HuC8R_Uy%G{)lf(D6uQ5lDX+mS)*AEcrNB3IYljWELG>C-lx*}Zk}9bUEt0Sd zI~h`&rtvzFus3QE5GqOZ$efp(oKy0h%h;`a#TB`vA^J_X{P*qOs7JqlVGo&jcGic1 zhn7%i+L|c}@lRJ+91!uX%GoM5YbE8NsmN^$a*DIC)ak)eR9uBt;Y<`FCuqPDi)4^@ ziy8oFV{L6$4|02LjmdJs%yXK>Q)(B!l@>l{@=VF|6U-ZKy!UqGl2&ax_NdVXI}Vr$ zqGj7vau_Y#aq_bsqTv%Pw3rLU~;C)1sup`mc3mO1Cs_=}UH z?@#wmGWS9G1})RA%GE zP1Dweh-AVc0}IRcIYo-ne}0)Msmuy(ySBT3y7S^-Z`YbA9L4-K>WlR5kj%YAhHZ-a zsMwOVUQbKp1I^RcGRKCsx#B;cCSs+H?qklyRBVY_$!~rHXb_@8xpD9Qz+^uod@?<%#*%Y$zIR)ghsDyXQM$*Z~L>7 zr(roX@k*~J zHVmk5Loyo%bVDc@*=V^lA+d5A2Cxm2b76RnFmGry4M{k*swt5*yJjQAF@k>sQt)y_ zBTmW{I5=r7Rx(>Ea%r|`e%MFdZgZS(7X>Vsj%F7DY6;67+wuMhX0yrmOL`itVsT2Z zLUrX`YuOV`_tTz{k{N{LSk>Y|IK`W4dV`h|wFb5d%}6;tnw7F~2@wU$r~XBNS88;5 zZPly2ECapR9>yiNR|V=k&9?z@I#F%bF!Cju(u}WNHVSILzJ7^mp=pZ3gP!{lOiQCQ zt(~}Tg-Q5A?he8kj_M#BLF+ucQb&-NBt&7Lg3OU;*~X+dutad2Z)b60Y`2%5k&+t) z$J2Uljg1I%mY=eEd`WtQDcdh&ie7J?kE>=b=L$v;X16P&cuES7bO`jOoTe9cY`Wx9 zbm#Ul{y&>qWDINC)Qm-j-H%(=GSX-#bHeIAA|t`e;i#hxhWTXP7X z+poefojxK;FPfJJKDS?Zku~K@5@fc-byMOxB7Bq_>ux}5b|03bvsXt)HfiZ}w7?Ew z!_cyp<~1~F8va&Kx<9PiMCR}aOA&?JirsYHGcn?7T7#jO8Vpk{&o*#=sm&idKEbEw zZlALFUqk=h3Zs85jQ{m$^I0zb$L7;#8=vBT-OKa6KSK2{?o3Py|GOmYhvR4uWCIX7 zi*!r}%U`ppH~l!dCNG@#!kb6oMfhG$2SHetmE?yPySrpOfI+e@@QyKtlfV_8Agq)i z(hn{fQi#}^KN&!4$gdQ{#gW$!W!LNb$(5hh0()0e{cQ)W6rD*pX>l=lD1n;$c*OL9 zGZw98#H^HA}g1H$DIL6 zK0-4I*lHfaoN+T!(d@bW{IaLkxazg0xtLNS{_>#O>%~u`%%Z&eXc?0R{ zqymna0Q8p1Fm!$<`kRbx14@OR6tODWQoNYt;y#S+H+DkmIp@LXYsH{n7?@2TC5?FJ zNs(w{>_q{B4m?kPf7wf~Bls*!(cMxLF(~h4NZyR;Nu9R&Bpf7>@3SRJd+fa%`qSjH ztr#&-hXsS5dPeYfN@Mt!zIQO2JN|;P#(&O(cchrW-!KelI@ulm0z?+tZ_YswdP4;x ziX^U=ZW2r>Q`$%Ts~9&5-;&uXMsVYbr$Arg1Q`21j$VqWsZGws3!>MBlac5Xj3+rx zRY!Uo_qwY7P3QGNLkc+dQPw&3(3Z%@%)7gkK?-?}p|aZR>q(d-t+7wx)sWO-PH^MP z#*vE|cqo=ATJB{s27-qQ^;ol~RX5w_#euwZN)G5Xzk6I76ed}vOlW7eEYvLR!?+Hl z1d75Km-6v733htnPiUX-nKxq$0iJmi`(8A->`^~6j2uK}U_&5!c4Ktl9;{m*H{I#v zf{mz1rHQGKuY{8>oP6Mf{3b@(;*(tY2YHr{|Mv8b;=et5`eb9X82|0*C;9I_p6d8- zPgfuRZ8jcz(RCZyP=`Y{rci>02a?Q_gTFM_6Ksk`H=Iz2Tz8|6$sZ|SoBmKDOl>44 zI0aLTPCqpVH{TGd6nE3Cbz5DucN#dtPM#j8>H4F8tx>4aqnR4^HE+A}uB}eBq8UU) zZ|V=MMbQNc6c-NCwEjDr3Tui`>-c2C^xvc3NVEZlMg*3wADwb-V(0 zPUn(ZX;)JpT1T1N9_enji>^Ab2FO5azp{r^JM=q>H$w})1W;fIMsbT#}GCWw~rh|(p$dhzuH?}a9_aE2~9-WXTkn^;^& z$gdk3#h$m6I0$=8v<;b0ykTsKLrmOGmHyg&IrR@U_~9lZpC>V~2rEp`8tI0FwA*PM zuBHvkrms*M=rRNO+E_zs3m?%0xY9D$8xFhDlzOA*rXmMyF2T^%LMI3}q{j`;ula*V<4J;juK>cXLUgN>)NO=KG` zq#I(ojqDwo9H`O|19*h&^>pidJ>wfm>$um;Ph_u$MrZkeL;|JZXux0XKQ#t+6-){L zrdUPHo-o>{IwTMRu6*i8j>cVL_p5qFi(%nEX?&)p29Pj+qu&iW%j62?LvP}H4 zE^2}*nub|eB^i_1?P4A=r8P7}Hl7G{m5n1udZ4mZ$krtoa=Yy2!pE@YN?C9rjLoi5 z;TDqeiZPuls=2eUjaBt6gnG{J3(RdT7f>P_1IxAgU1JB@gl(fsNv)wgXGcTX1$w>Q zZiW`e;e}5+Fl?`*jaz6H2#B5S>b?S|x0SQ0wQPC_`zGTd#@5M}kS3H4X_}K@_k!^aEf(oaUFsJsSW9} zjO#z!c(JowVh)75S?`x`#nkG1aI;rBVh{FtO2a$`y>AgnY`kkMmRgY1}_GgIDL#VuA4$1~%}6R*>s z8;>>&m+y52FD^k<5i1uKXIgx-v<~CkUmp{w%KD=69J+I~OvLV%%#CvJh@$S7`gU|Pcmyb>=tHXa+7r|YNFo?j)mQn^%88E6p@kiBM5px zm@#@~p3g?c5I@R|3@#p{D~YG!8$Z>5$4(u+Q4Ah6^-nvS3 z-C^-MWDN(YIR5$H`G^OlR;kMyEwZH|R*J4Oz7+aE?TW^{&Lh#Vbo<0Rp@TkfJQjO( z8}i3}qnKpGMGIE;Dnk@_sxg-jq>$A~&4C|p$I(zP&>%HwgUlVna7LD(wl0oU=Z@|T z;r=YMJIK93uV>#JAl+7xz63Ylm^6Uie^GS0f`vQKiwli`+-@RqJuH| zr&9kMGOW`$Rc?jMU^u5-reMiko|T-~z;}`;I?$DvpoZ}=okfXd%DSO6u|$!u8ji%B z;br#z?iJtOotoP_E&APxd~FLvqy+K@4lsyV{nOpPwacs0NL#?@$!#av+u<`K4WUQ~W6T8j&zTYwT{j{H?_x6Q@q0OB0R>ZOE9^9 z0-GU_9;~q>7{m>eeHg@30&T-`>T!cbE&hhK*C+|=Pq;?VCl3*V)4K2ACZbvg((75h zW(ikE&%n41I}>YE1S(R-&%<>d&JsEn#?+@)Nw6dB>r4oOnWC;D+-guHVu1QyZ^3Zm z!4|D~b1@*kqGG$n9H=PARt^0@NJ14LdIzuA#@?USGvfK(ERYMt$u7+?!i zT_JvX-%o)$n~tSMGDG2F;HcbXwdO3j(GgZ?Q(Zu4mh72IBx%U_3DXfuiZW%r-a7oc z@&a_4eB)okniB2bXK``JH`go|H+h%jyKEW5SM^y(#!yFR zo#V4k`ZbN`dalTY)`IRab=tSm7WO-y7jHg|#bR|^D!P>ERyoK}X-o5}jdD)LtbTb; z#$wM7pY=dOCw~oO00g}54U!p4JQNuXs))jO!PraS)rR{BF9G2g6-#t)hJo72?mfKb#n(Xb}HscF;Ge`DDS`pn?+l5ye4c(6=nch3ew(6}PfdtWz@OANQ zl*CzfN;!FdZQ=e};K|y6h(;A-)*04Y2pMZH$eXRa98u|>W{7ps+M7e9h4NB9gFJ%` zq;B2#a<*aWyl>u7>};9F5&f4+gssdHa$)ssnbku}lNaDs$j3{m$=7Qq@!~gPF^$2s z;2<{SmAlV|xDg2MO^f(4BA_iY5n9J2R0Ohy;w-WN<^dCfpG-?wEJb@-cd8ZUMqS8v zj;tRI6-L-#g%R={g?uNYGS$j{yFW&tCcy{&o#RBz@yZ1i?oGN~-EuA1d!!zzY-p;R zk<^?mxV(7Id9wGnv;C93)3z-z0s8?73;o+2ZAHw-jhA9ey!z8rxo93$TPzz#IUxce z5xMio+JqKvCW8ryl^j*AE>_AJtzT1R-=>)oREexv5+-Rus=K&RTst$HK zdnau@8yoe;q7pZo3jW(FmRnxpW}Q+mDs_tkFKvrOU1LG1TlGxpMWsLDHtRajimoxI z^hfnVYGxl6fPyC9D-7rgr>ChOAy?A3A~qTGDU4L(W8f}BA?P8kd2>-x%#jw9TPis) z2WPGp-8B%J_Y@pz&OCH&8x0QPeW(c=-9J#YNt4#?v@Zo(hN1scT&G-Or)WmF^sMWLb_C=pajq zg>CYcc935A#;8k96^2I#3i`Eu2g5S3J_ewS+f0T!`gYvU^H9O0(HD|(kU{%G*)W13w5a=zpvxN3aVTQ z*{X$YELXW3U(S*tocMryIcM=)^0iM2+JSDnt5Bl6qsk>!2O?VDB;>$!T(ZkVpF%?$xBFWhXE zdI@F#wrsOG&XevDx~*m#$!{Y01h?Haa^?K10~r+k|GS9I4jo-x9q9M}AO!L_*9AXT{tJG`UP2hug@^T;()y&JUgiwL>^_q6p?SWdmE# z;z>pFbdEA@oi|0r>CI15nJOngA8C0JtnFx0D5QF>Rmt3@xn%8|{-PNzt67M@>4=DW zSc(e75*d0&t;w{l(Uo5?4n|(Y+?3^IPpi45+)>ci`j4?Ufx{9-ujG_HpgX)aks?8& z<}YNJ!i@J~2K=?xRlv}~v9ko~SMe}fyfc`nF`9KtkZ!DP7L&gmT4zdQXp@M7iwlip z%hodTl^rphg2e$FBkKWr8^KP{H3?@eM^#F^a!)+ZvevaJwtU`pn&XvpRfuFBZ{2M7rplQx7F zb+4CW&$>**avg0;VcoYZ1pA)`#-Q`s;cWZ{}|9SArMuCcmX9)tgr z7KwayPhk542_hJ1WP-8)$vb=-5t+2wOvad6rrQcjB++$hG1K=);nnIr0L(sCn4oU| z8V9zi+tfuG?V_jcIR1diYvv?4tK}zqU+U0qKLS6r5%Zm9Z263_naz!Y z^@%Q4x7WlQ(Lx4}z>QmL2Xm88;!~4PNze>b*kL%auC8H7GdY1_V1nFWdT3aE0K9%S zB@e!OO^1B4WYD(ybBsU+IAq8sW zG^d%aHiyZtUq>u$CkfEc+S;K<@jzdO6SNf5HwId+>rhNnxuceM0UoTRT7m**g=z_52qXqaRpzJ>p3p!BB*tAV0sd>=zhaE zVozt$G=wvdYx@obi4}Yeg$+K5icTzlv=PfXGN095)^gx6hP7Jt)i&G6aKtQWlWvi9 z&`k|xat1JbswAn{nJ+k|$7O>@s4HU8(5{BU$YwN=YL1q2-nS1`fQsptIv{aU>i|xv z#WW#?b?9%I>H1@Ig7md$giFul*e+{Dm-6*wVPrjXwmvro4|9+PYp+r`o}7LKh!96hKOQG-oQ}Jw|-cF)7V$ z0XTszXXUm7MK(@68s(XItV3oHGfQ7amJuWZAg4GPX(bq)+>74uO^WshUOZstT4$Ld z!zLGp;%1G1MUa;Axg|&fc>d>#2!<9zgozih_#8%zXCQ9KjT;SueA>oN`}f=urid=m z+Qh}~8^I+AV-)o@=z|SX7ok4*$-r%71*7GboTKTdT}436j4+`)sTD>UPi>Y!7zhX* zQ^*AZL;UeHlJ=>rFk3ch+BqE!Z0s4Bp$syQ(HU4K=*#OS7GD*9tb4*V9JiM6alE$( zJ&tiE>LBo2hc-S~o#3uB_T^-CbaZ^GReUX0BJQ1>9G$ej**n>5+~z`3+!3Pdb%`D1 zuJ(#D!B`0Po_m|CNGqR9qm~*kSB)hNRju5vxo};kBrbjTWN!yfgS(krd=Hwx6Eh=y zcy#i5=fDiO_Fv%ZF{?~isy+jCB%0S+#>zTyQ)!pe%eCxXTw9U9SjnWq>Kpmz$#Tlp zWiDDpIh}QCAx9+TBk-yFhq#ITcvq-;H1`fqZ7SH?IXU<--@MzBaQ1e#ie$3{QbIy} z_d55^HG>s0$?h&9CJ^J7O~~9R=%%GkZ+bVQqU0`MfOv4`N)s_=!_ka=qmar7Vhc7H zFTSSr5{@X;I(l>g0mVULgonF1*^fL5=q6-8LM6zxj(g`b7!S&ha3UDTDGm>8?hgA0 zze6vywSj4@-hkFzwV$Xl24U{|vVRT*F3l1%xI#w;&TNQC9dTB%K-kpO0Fhy6I>>3( z0G(keXeU7eOtDdG5{V!O43WF~mfpf7oXSk0l5XXe_mcSZ=->{jkF}KVkdT~XsA?Zw*Iw@(c6J!x=P*ocS4~AM zvWowC(S6j*mMb#e0v4VbZAryk?X->K(Xzx~ng9;Zm=dGSC4@oH-D8DdVQ6x5nH~dC z8$$v{c}f+mmS<9XX9&qSJ|@M0Z@ zdVOPaeRE@-46vjt+^s1W$iSQ+Hj%Q{7&s$x8%pd0Pi{b1^NJd3T;Q;t*VbzDLe$q( z9iz;ztr?UXRuPSw8OT^d(WB#4#HWLE4^6I!cjtFzOyF*FMo z5uw#y64}Jc0+n7{qf+YH&X`VX$Vblh5n0$Doj00l6uj|M9MIl0!g%!zCOS)!aMIJZ z+Zc--ak?hPU!Sfz2#b&%UEZN^?2m>fi!mLA0a;sv5n5Xl4;n+|GENO1D6vAY`gfH^ z3&lhHFr4_hTl&r>5tM&2&S=Q_notJD-W#8h>(l6I+NrF8H`~l-I3RiU6^;w&0GW9xxTse=rK!I&z?M9_ogN&I};i8Qh;@RiO#-s zdrheIo3w%4x%}AB)_1UXhO3{;HDI`tNvKW&M5gV%_TJ#!{fLVNMsg$=zGjPp{n@_RCp6;g31e8EK1MK3m2dkFe)o6RbvNj)^vYt{W zH?_H$1?+fyvUj|5vbW18`-%y~Pv{$S&OqJmHtTUEaB3Gtt}wO0`+(`zPj0H479H62 ztaSGEvl1#u+qi0KNK0NJRp>&EF`{D)h*Gb~H(-SJfUtGJZr6*aknSDf>jnK5Y+%W( zuRW~vQzw;GO+MCuUiysS8%AVV$Yr!(FZU-g-4OI=81XuLuZIA7*a3gs_X(w%s7);H zP-RZhZ{?Ok|4kxAFk-{GBK1~L?v3cyK_(gazjdgm?!pRfPZvo3`XU?ZmHIdsD0%`u|+iiQXQ;Ewj*2RU}YlsS8Os9(rwJC=Ry*Ujm zuEd@js-<-MO3Ud7Nq;tY<0l|MU%+3{8y{HpXt*w0mSjYgUl@*B&?*khbax8CZ~f#& zMDe*`r?~W@G3lpXjKT}x7yFaeu0MqdI2}Yj>?e4~4I?KC9^CYqt{=BHH^1Qh6ONJR zv7c;jwKqxlg2HygK@5fAc}A;-OrQ!ovZFMB){2Yk5rzs3kR5C zoinWWheM+gN|~lU3C&YoNzHR6d=|v?i*>?fdJK@r(Y+=g+>2-+p$pS{BTbMSU=< zxpB0IaDC(PdN64Xv8+~X%4)%OBg4AR?h>#J$2kS~%IUHU2kRmXFGha5r}sc!s~UDV zOD>$2`uLx}ZfA1*d22)G`O^6AmzSL?fNxN^$+W0+5jby9H0Maknb{R-7#D(eQHK6a zGoG}}(#cDs1zmA0m{^L6)|y@O-NfwfQF-&Q~U>~I168@3nJL2j!W@{pQN z*yVBR#)C_LjQ*(5>AxfQ;P)UX|CUWDe!#zB!+)nC;#%0iqgW2s`>xIED!h9Eew_>X zNg2OTztO+H69?8>eypBfEBKXMPyJ%`4jWE&_7LG%!W87;`Vs7&JxnO(H2GBp@6Z@t z$NC|YHM?1^5RkMSgMV&wNIEv3JjbxWvz~(8u*xTq;9n)Vcv-vADKwH$+25%Khlj(H1ii%Q&x%e3ljgd)&ALqVI6q` zA5vo&`EJg{8=rpUd)Xs=w)^_Q<1`R5?0$79yn#RtTk~q)Z2xT8aUrsFyKMba61slc zhPCL%vwl6Q{XPB*Hdob})&!yGTl={IV-N*XG4Ya&WN~b|`sY7m=0Dd8NpKmvz+6Uk zHlKR7(ZmR|3CJv6UVYm&$O>(U{anq zIKaQ?9p2_ZSv5C?lYCOo!OLURz!Hk9-dOnda3BMu360$QYy27qEe4@hM-xDoB1ylk zzgQN0!2NKfv6D4nBxw%lUY)aaG2UdYDSw(Tt4ur3 z-7Dy=U)Sx`L%O!cjfJ86*fRCM(o;PDz4qSt$U0Y7#{&D$t!Gc4KG}To>HK#e z&jY3Bn?&DJ($HqvjPn3_(T`$f6Z?s{CcX8d01a^@ZWh~0lE|k>#&AxLzu7XZr`clhOfkoe1oj3{INR^(NV-cU7@TX9cBzzW$O zjqHKF5vKj7^ZI}>eC#~B<5r$DA-Poy`M^#3c@zru4StX<$Qn6akS8x;Y@pR?xpp=g zWxIZPRcI>BM7De1o*o?*6Pnp7?GqVD^9xEOu4;AxGRqZ%!Uag0lH8g&=H=d%G$q-I zrn22cKYw^@r(&YZq&o0A{tsMB(^wQDucOrf%O6iJ{F_&Jp*$qt((+88TMVoK|BJ%e z#ifGel+7-Os6X2-vDM5?60VS3LII#e`;9nPCaPcTq#b!xC{`z|N?YC&OowUgl4OzE zB^@8BF~UGxU_hw^meob3ZoS~MGlw>PZv+2|-9JZ?YPe1j*Vl(W$eDch0FiKqS5u?hiF0>A(D1U+*%&<{& z9O9M0s#?)lwW9OPKClLi43->x)%=#eHB_t5Jn2vM%wE#SZnSCp3)~>mXr6>X zLTiXXxtEt__uyFMB?|)U$L{c6RoWTZ z#^!c~)7-QpwO=K~FK`osVNomZ%&(V&`Mu#Lumb^E`L$C<_du1^RFYjggJ5lG_D-mX zJtGy+SWqlxyLc~-0~DkZ)k-UR70|kvQwMS*-sa1>k%$2Exe+H?u-(gBb&|n#bxYj34|#X?5|vuc%4W_-SS`ZT zK^kkYIA*P^x^JB;2*rSjaB2n9imA&5i zD;$$sFN?*Y^wNUlrdXXdH`d3yuNIHAgR)&|??~vI+c`SBEkS;%;9J%b(&|D(#$Ne; zhXV54W?vt2Oy-=h8>2hocHI1a1| z0AjxWf8*KKqs=`2!?REE|L*6R2g&f#Py%D{91(CQ+HB8_4Crud6pma?S;TgS0nS4t zbOBO84-bDxPN2q*-c{fG4`GF(IeP_4nO&9lOyEj0OU$Zq~P1T3K zH*8>jgveAB)KP5v$a{Jkp@jyz$07Ozj>-w-wp0wXy~E7N{BdX^22=Df)Cn|WWY05F z24ePeqi3;idETducBBn`7%K)6K)SmK6UK%Om?xus{W(${)2auu29Ssu6rmS~jD2WS z5C9h#aWEz2{p4bX!ecYdA+$gjG84Xbg8~F~LZ?dYg9q{k@jx8MIRGM`4g7T49H%|K zo(ApSh`;o*vEPglqsV;$(y@o2!x4-VI?SOTjUv0n@SK(#xn1SLWdberblZAeEgaL0 z#<{rR$wiaY2dkf)EKd0rW9Sb;RxJ=HIbx0v{d2OgAZw9c?<;)S>$!rNtO1(!O&unI zsX)wvru1-1fP8dl9;(ZbZpBbfoS=8fEb$5EZXfZ7am|1zmO*9H(MO>!0-s+~-x&OB zXzhqfWj@M7vGSvMhj2?#Z05P2~iLxLfO zGe8Cd?LZIYdc(AR^E&>j+ zBHt%r4E%@rjKKB`VPK$J(kT^R!?sEa7Dm-zT3}$L>l7df zJLo8z1Mp0-Smb*^CnjEnRO_RiSd#KW#*XC-xG-R^Q$*kBdDgoa4UjkXdglrJpzTt@ zU-4joF&jE`ypMdc@q+eUjKV&m-e@L6z$$ueaiJJrZ;A?A_+t*g5pr3A-*g23Layj3=2ONI6R^Wku-_y=ZfYT7g7e>zm=J19S0R9M&uZ<=!Yp$ zU?SX%h_B>`qDT#BRyoDK(50&&A}Q|zz1tEIr*Y_YgM@(lK7Jq`rule``U3(u!kMD$ z25jBrAr_;woWYAUT?rb(hK5Gg05+YR<9M;fRhu^RAYxTA;529BkOowzrT|(jj!&>+ zX4#0sBoQwY?+uosg<<85f#Z>UOWu_*b{tWgaJVNF1&RnB$`V$g1KwI2N?;=losU4? zgSTd*Haj|_5>p|wN$~4T`qX4pR}oDS>*--+q#OqG$7_1n{wxH4G*6wdG_VtAHtVKY zMawgOsGyYfS22EIlxU9of+8jeoV1>U8HIMh5982=A>iuxb6r$tw+`_cbwZf-q! zT+shKefmlNb01G0|1+KawzF!8&sU~wVh<-i9WtW1%B0)Wqoq|rs?@NSvD&hDv4QnO z4i-^UkiTgqDuKf5P(E#TXiUe3{)|lfot?6HEe1D`*f6(Ym~QViQ(R3qhGpJf&kPjD z@MHHm)IAXXD&;0Ag9YuF_Q#3NtcMlju#rGa8{8m-vr)>5caHa63ZSdIuxiitEYPSK zDi#GexH76A^g**gY#$sD%sGTzP+8Az>YcLkx_&`KPphtDO>y6z;fEhyAGFB$LUiy> zJR6TO9#SE_r}QU0mTTleIvcLK&5pGm?|Aypt%ZNn`CmC9yhgptk_7SLl^a`Fek62^ zQm1f!iOHl;M~-3MptoMfGT6;zBwMTDY&_MW6OlS7wTo)h41RS% zn5LyeH4Kx4a!De?M>!mxKeWOQ>O@<&EeV)wTFRsHQV0dMv>f8iw1K2eihL6>GgH{! z7*z@8;7ymQc!A4OG{&&x18oW#>aYuh%dwQ<>=<2>x+!%M(>@ZUug)5#mMLF>9Z6C0 zm=d|C`ShyJN8AjsYTS@wT&S?Ln57%y&geW|EP)Vo^NlglbNkm4Ub>zSy9-St4QFK! zS^tSL30A>61A_0>g-Z#po|*Cz^fAn&Vr_1wq)I-%0*0Q8PNXk$@W?i1G;?pFuN-78 zixS+k_8H9jVwPBtzoaUl6EOL6W=mi&b#%!i#aOS$s!~+sQ&G4R)R5<*lrx%*Q7<|q zhtZgPO|7Cx)Pb=dvW~7V6C1GGxE}F(uh(kHA0XqDc$p)3uU=uO$3scyEcT<;F47H@ zc!wLG2HwW4FQ$QGf{jq_u=y2A_D2xk)=v65ht*|jnI zPddzudCx!-T*-FDXzD1EQE}At2{1t`)>~!`{x`#Wj_r7$W!yhO6FU~r9{30`Ix;H;tG-wq@gGkZ9 zMSj>;=vr>aY?Aqf={`Mb%liyD^F*|EmnfY`oC9Hed}*0n_g8;XN_UW)q!OAl^^BO!MxqdHS3c(TG&gN@SgF&&mQfVEX@D!Lf$sYt+*wHN7+OW&{*(DU_nvnN zG)aLs4Q<=4Z$XV2P!r1YhC{K~w_M8Uius!R!m%u|UUE-Ok>g`F0tnvvVh91HWrsfs z!$k0VxGdM}$5f{F%nee+J#i}op%TtD96wVx0k#-K5vy-B^93Q?RSiLI9+bySxV!U+Tb5I~0mC2wHiA)NuGe|*AbV}$|vsRx*4;cR2k@3sV^wDSqs)|!PcI&?tECw=8x@(D{TD-3T{_;2|7v%^PzZ`3Vm z9l|}v{oMPN!(magV8Fvm7Y@;+ zwQzN-^l38U;xm|wKlO(rr}f;{D!GKjnDlvWC& z-|B%WM^lSkdlg_hm!NUc3C?)i6eMn)6}`wb2ue8&30doR^rSL`-yOrO;8M26lPs;F z(1*HE0x-5l^wC2p4GXhR%5B6hx7Zh1$Pj`aS;mW@O38Y5FzzjdG_FH?8trt=eYbP6 zPfWLUe6)YqDTEB+gfHN%vD-o^Kmw!q!+Nb0TOJX>CPTSCYoSh0is&5e9<|j=^8TU4 zlBQ_FZWXF}YRif-2+%>iiH8}c-E6Z6RIijp;Ci!IDIIvGQx1F2C~pKl2CdH&NPuzn z3!n;r^0ubY-B!C9!Eo-syxTp`+Ldq{kHw}H{R&W9Cy;D*W$OZ7}Vb6!XF{z@bo$&Hv-H@(RSc}&zc%vk_*+tD{>H{&5-?A z>IS1-dGwgW{4^B>*Yi+rB@{=Jlp!A!_g>0+PfdCc1c#0;?;*=54)yJUF_mR8n#wRv zqhi?zWsy49R19?TK-1tQ9t3`Hf7C5^%g~{_UHRJWI=YA3nYUcp`D`>wML{-#BNg~) zdg%e*PrUVLAWj3)pIkXokg=l1AtW=t2|M5liUaG|S zR1q6(as#A0vN9Q z%M(|JpqJ}&iK=L8+`)_pFFT*n(dvW}VIlk550+YZAYWVl2AAmB(eED~ho@)1e+q@~ z6iIj{$kus5C;#o387TZ&auN!EL57gbIKDvs#KmDJy9okUWVT&KA{NuP`2}hWcxK}c zW&?Hq9pE382_IQvWY!6he92o4l+d%lk1yRK_S&Q6Ti`9HuZ%CT)Df)x529u;sNXEw zG49Zd*Jm$ZpM8kF7!PAc51)T=xle3@13hAxiayfK#SNfj@?<(%Z|s-cGF^ShwFBvf z4$7OnRr_X?WhLSTfj>hloR<@TzZZSQofL@XSI0+>&%Qr?{NmB6kzN=`8rP~70N9>u zimXs=U+)4yBc_#~Dt#L%19LQvF6PIcRFE*^T5bwambo+(M&hr@U->#pdwE99bz?RoWuDp5kG_m1>T48`jGl03be~g80Hn+%k;bzD4|@~4Gt9)b>Ri(;I7DeB!7z4Q3ps0^fgD3i_0%>AhAWO z96SqMrtc~Yl5PJYO6KB2VcfpBD&C8@NvkUSWb>)`tFP{R54-3;8(PsOhnGjhY^~y^VhS2Qs2(cfmX{{OH=-*N9mlmIMrvMwu<~R?8!c zICKoo?AQ%X;FSY`2F2ica0|T4mJb8EIjzdrQYtw-*c*lr;6_|(^(g#--a7afaTV#J zPk(nb>g(Xkw+CNBiF^0X+q-wDu_Zm9^Fp9x&1#w+y&b#u1nS_0-?eO&Fc-xvj?1DW z$CFyS;($6)TKno}63`I zMK5!?US{V+y=M~aOvQ6-NC+{zOjyv9(+>Zag8Nx=KaMGWq{l$6hg0};Ny1n<7f&@! zVB<|z0oB>)MV9&%+Lwra*;67(JgGhPIk^2?X1Wwe1@4p=+;oU(Hg*}=9tHyDWx76r zi!IBOX;x(}X?v|GZP#X!ajGZwVXVswuAM6yz~ai!TZA54m-C*$Ba+)oE|Q6ZBD0T< zfDzl)xsGk$^3=8iQNwEhG>eS}UkJC6QFYC)OBMb@Lwhd=QWkAA4Zig#kNKL&nU{yA z#WV2)B877%Rsyf9NBhq>LrA4NV-nl!s{N=FKC)UT0Dj%FAJ>boyxQo9==ci~Gf%}g z(i1U-7MUApgdWDHo|{d=uWWV`8XARPW9hzuawlZjSO6#xP2LwrSyq3@8vqO!>B;zQ zs+tN4q1UgTitnaiHn7q|@u6hi{NCpmeD3VALvjuE@?=E{zgZw+sx~py)o5Lc2&Ut&XlCe)Dy({NqQGxH!k!hv-QnpLs!ey)7r@kk8d-*SB!D1C-=~4~&rq z=FpEIeX?QkgNdJ#;UG3(4n~L(euonugh+fqJigE({;CD;qZQqge{}k4rNX~ZxOM1$ z>;_(Y(+pwK(%ixRlI4Yi1NtwwcW{UP>KG^8mYAosIVtUlMCL&$N;;gD`xF$-B~hvc zhkKi*^b54q>WYQzNuI5i=JmEu8=C}}D0_gMeXBhzSID?ZwcD!U<0Nie3c3^|AmG!~ z6|T6e%JHu4K)k(wB+67~djdcC6HQrm!E)_t;%=)EqH9iEzvO=zg?`nt*D}4))7g@y zVU=XAN7`3D*D!?d`6Shj?X#ojuaBOFFOQxahi$|ofogU>pc>^x3bRlNCXI0>EVSnh zw@>!Xdj!1o)Yep4*nzDmwVZ}{BW!HeRU7rAw)|5!Jm_GHKKy2L4w>D{3-yYp=QQdBwmuh9SJk=Qce|G%TxW?TXk8|rk<EsIyUFYXv8+x0P6(KqkJ+)w4`cU1coTAbyZ0I`hI}#>vuBr=B4T> z?+?9%d~=|L;`p$h*~^Jl-KO&YPGac<8U_-VQnu zxd-?(ZU%7R`Ye1+ydxHEk0mkiFb8}4FkqU~<7zx$*`smEbsqC9ZJ5WDaqqUVt7toUNBL;(l3R zQ6n->#xota;&kx(lub_zeMhxOSmgji4p)G{G%?tEERY~|XFq%-u8g<>z+t3|Im;n} zf}J8ufY7^J+7zfb6t2VXl3fPf7_YAlEvuLZVic0jq(ggoL@X~PZ7+*B{zF*SUw3n9W z;0rJ2cZR)7Lj&Pr?BT+Z7CJ!vRdiNA;wB$+ej+;Y^oS(P#>{QlG((j^`y^qa;7Ev? zyk?+7sw!Zq45-$69M7Y5JUQcn@VFZ#=PiZY);qvWm69q@md0L#>Q8pzPbJBq^=Wwg z@o=C0R zGAdQXEN#X-o(nE#5QN`J`9oF=i!bO@N6d<%Q^nLcl>BZ6&6lD1#r*z+jW&#Sc@aA( zW%X7zR(gK9FJlLZp@0hJ_cQ#im04xX0->Vkt%`pNf@iW^c;~k-*&gFtT)A)o>nt}G zZn?f@&BRY!v}X;@jl1&8w`{{|?`&I-9r3DWw{RNj0PE3KguzZdDu5e=UmUkrU%DGM zMJ<7a;Wve7It+LEh;Z{IH-E*-->w_|p+6Pm7wS+uLxL3zMOGk(&&@f*Kdv~3;b)=U z-ugK|JP33IR~%F`#H-r5YbSE`d9F6Yr)|$WLtZ=EPJGxfoXvK=vh7@VGp=suKo{u1 zGA=k;fJxX7WsmSz@g@Nzt(LS&M|RE6imn+Wd2PkZv~sZz`r)twelr|c#QV`&qPiZ!KnEH8 zD2?W88pK|Bx+La>mVA$7fDDFgECH)LxCRd)!Cw}J2!cr>Ca>U5AEt7lP99O>`a>Vz zxrP};V^h66y0cC9B@qFGZD`ohd~NVT1&n#&oIE7oi#mX#V1CkwF6yu!C<$aZWg(Z?#Z3RO^V2_sX>52U-d(u;l(H>`nL zV#oYzsnCpvc|1KFruZHiX+4jAIIw>`o<&QTua%?uW*CV2dL)=lrojwiC8uxjzU0f7 zBSCH<_w6D!+6^e*0?2)1c4}FboDhZaBN@e*(cpRv&D`cF8406!efC}NpCu5B&zDQ7 z!6)r1M$EkcN!3B;E zL{ecNz4Z{6m^eLW!IE{!I*QsLPwA4R=O1X8k7ld!oA5a@;1pMn6g&&-2ovOUpT{2i=9#!WFMN1*CJ=$3kEs_1!=Pel?y^g^8k|wS*af|I z3Wx+yv}nnYW%5D=%`a464x52OJ73XR0+{_S4}W(TT+r@P@zJGy(b+LtkHmWKDz-Mi zbO1PF005hbT55Hi#t%x-acN_GG#ZspW`p&{ZVva1Q-Kf-l1%=i&Jp&`^mJR!=@SFly zdfezaknBpx^8F_C){%+ISYbtW0%ooN!ML1QJ#2_d|2| z*q1k~&x;kZ<5?14X!hkR4@|xGVfb*)o{ze#a#&76kesji`Ta)d%}9!w&;gD(J5laL zJYuB)y>D8?MA_+bmU)yGOlH~i`nBd>;4b(mt2L=O438Ge8F3+z!MXa26tmLbUqY{P z_!m>?6|L(TY`fp(8GQ}UwwbL`>*5iu>}o-693y8mU7TcmyUvoAGgxzNp)z|*dv=Ks zURUTzG>_h{!{_naRk2wps2+FClIo=(LTsCL#cU&taVAnARru=yT34I$YD0q{S$TY@CRqOceBz=`HdpFGJV{N9kHJ>GDbQK<4zu zUgi;}YoX!MZEexb3?(m;jqo#lO#=58q3w#f>}nF|D41m}yyQK3HPO>?oD*;eLtH4@8O6_1dVle0FUH={{AAIg8n^$p}u4d zfuT11{lh3%+;{prCaU!aM&oLkm&Ci6GN%c2A3qRpS5(TJU1q(fs|E2;^)i*y$MU+c z0QPxY#@Ujc++|PQNVl9x1bDkTEw4AdfC%;Ej!Pao@A4M=Qc+f#XjI! z4&A_vtEi#Xk}!B|qi@Dzan2Cjt0w->*QOht`Ih5zLj^Pk)@PSkPNRh8!B&wk<)kC1 z8ErGR(*vsY;|>QH{?zsMTE2Jx-ubDcd0RO>B$h3fw2zn3T8zzOO~z@~iSJm?#=F&b zLI%Tj;UV%(Gys5?1`oj~l;Gy5XMmr?ld3d!b=KKaR@WNP2mhhgG})#xDWLs`Z@X4d z9cJK#Dj5`Q*i=+%fI^9L_Q7b(r+|*>Jj1J6i1!4H`W!U`@)&n!Z3@L+5t6;KF1*Nx`E?!)&6jUIdvRN~B^Tx43 zZ*zyfj+P1A^JHOp2|=UtIAM}qlUt^0!bjBfoERb;63cWsoqb13dtz$cda6(H9L(uQ=EqAF%aioy~ zCQ|UUz^T$TKt^2-F`ZeC{+f=L>b6VHP7EbviR8cL)v!;?jo5yY5}g+pXX0fNUgiBg zM=xB}IZ6MOazeyUgd*$xG$qVkQ>Ifg)|#7PCJvG>)(`dwswtI&wrqY8lSGja({&k- zCV6t9c@+5t6_y-v5k%xVH>8nQ&FqGR(on|{(YFGs)3_8!EF`%EX5%a?%EN!&-{0R8 zAHt4LV;A8Ac(s^lhjy(s_?MnP*g-+Bo?ih!iKF;~)}ly?N!sf43zEAAZ{l^)-ud$2 z-ogF*_Ydyey;tkGU#v!pq(lHUFNv5guinEOu89}Bf#=!Aa%@g7nLOA@vtD({xrv_# zZBwlq{zy;Bju{JVu2ZC;^NP=|TSs)H4Y0`M)y>`v+B0Td`=SuTm2bC>v^#GF4Wyd+ z?0l~#x6gCdp3YE9i6*zGM#*9%}fIYuu0 z9<;tI3K09;EpvvlGl?u0NdXc@jWua~MWJH6_Bk$|(=xW~Eo)iq9GfVT+VTNi)M90= zN;}FhTIsyjsTe;lGS)*0_2g2>EzY^KtOr6lEvmJ_6Q zFRi{yKe!7twAJ{H{hr$E=QUWuvOcXNA6Y31c1-O}gJQebV{eR zvNYUE(vYUz!k*X`uv@f`um;AHu3Ffw8xOc4gH#dQ)WxX<@T)QeQGRZa>0}-Xr|LH& zOFvp0BaPpIu74X0bp0*Vyn6#wpe5_DnQ=U|Cx+$pNl`l^UE}>z`+=L;I6(><3vIR@ zB0dVOM^R3UUWBB1;dfZJR@i>@UB|eU%cdQz%4`8(5`pVr7tg}5F793<^HWU(jI=+m)vK{pTDiyY4jB z*xjhHZ)@z=t8k6qpvFd(gRVVsoof$H8;b%JpB#Xk_FiwGz)BXPRcX5Jj6{;_EfPvD zP=~D8VfY8MWZ30ZVQ$Jf!XAmAZ2#uv*ZAfeAQHF4S%u${au$1L%;m~@8(R*Ui7sxB zDmJMuKl>ut)JT9#s5*0O^X@JPu?79y-PMCvyM>IZlk;2W96oCcsRW|XtW&iX+Er$k z9qKYwg|1a~WT>nxl=8y0OUuwSc#}k0%ZJV?<%1;ZuLcLv8fe9z!2h{eC1qe$vXwy> z;wBIRoJZAv$ZxkXgrSj7qN+|A0@ggz^cB`e1*~Bj8(}P4{S|$`ciL!d zB+GuHkb@K{kx3y(>|C>g+<*jlf!kEkAn>_M=o?woqj4tVSdtvJ^to<16}xKP^gv2( z`hIwV?;>J!SY;}hTM}pn!GhI%=Jkf2wJ2HCOXVq3!H6RgO^d+^i)Dp`qQRUjE?OM> z=@Cq#8pPsM96M-+KUBm*y0a-u{c06DOS10VNRelm}|Fu#8dU+pSQH zO@B80jdkdg3I8HAkEm20IMgau^V06Y(YBZywsO+7s`81+g_4Pe({`W^O@Ug-M9vU@ zK;#z9ma*}vMF}M_G6uZqLN~U0)C$s#YIh-w2e4#l9H3b&nWBBoHC}lVYo<@%s75@) zBff_P3APgpz-HH4n!04Q_%fzbkV^WqXgUR4RcUc@+%SU5FzSX$CMTskM>_LSTwcb? zY!?*?r^}oUu!%)@!a>zl!=IuKmBeE=)N6ugfI30W&t)<}>|9mF8(t()c>3b#*&0AbiAsNH&4Py}g4wU-kFte+Q!FEV5|1*K+E$I+sliNK5^rIVUcS+Y%a0oY52! zKM!^|@F$hnaG#sE;NiFN@<$k2Rk{(gj5xp#tSJP$M8u7!qUIVU-1Xk>`vpYea@cdFB)W z&Y?sE0frS=j5y@izN$#JO1r$QWm*jkPcP|B5rtgJ8WVdeY5OGayTQ4Zm?C^f4?%=3 zNKjAI1$Q`P@BD$@VrE|0i$gpi+Ef2(Mld&os!7&1+4_)*2JTd?5`9(m?&`Aax`!%Z z-4+{=cs*HRP?Qned9tasWHzhT@Jb$6XyqfNm0Qe{GK{KYyg{1t)CXSNLbwsPFeY9- zO45KAx-e;bnQ*IvE1y=W$M3rn*jc;Vm4=#r(xU~-W@F!iYbfW@b)nSSYfHazU2QLN zZI^7Iw~ucjnTc)Z=A77u^$Xke)&e)`xZ@%2h zIMg?P?uApxSfX<{Lc7V+<+1eG%-jF&x+#|%aW=w|8!NVq&7Bu9D{@x#(I44#U;`V} z`PgxbEJaKLD<@SadM3J8Hd{E480%G1@GVla3(umZkqa>S7)>MoHqPsSyQeDHBs1%Z zB*LR^JAuv4UppZxg-7PR;MxxRT-+>>R2)9OGxuJZ!;%>vKY{zc!RDFNDb~0SLT(4` z(Es3|-TGQIO5bSa9e%0Yg2~M2xf0-+;K(SF=_Tp0U7inTBS)$1(@0PT;!;$^MAHNI z>J}TaA@52LL9H#Z1J8P$LfYrTyws=L!;~7sUZ=@hIfxLN^dI%I_ZI7cg3t7|NMY(< z7U#)8X633`tGOv;jOWTH`Tap|G|(Ma+1s49x8hwVnPHtDfE(^KR@$<{wt-I53fCtDrI|!VSUh7#7(2xJ zWp6@uVuUKEzcIC~FP599I8;IL+V+m`gB=Z*zVRj4IJbM|+?uOUNnUptzGRu*9;MWa zNUz?bR@f#gO2nBZF5-71JVBjnu9s+zxKb^!T^OdNFE?^<^~-!HDmU}{nf(3(d%4l?S9v@> zsHr(x)SwqTS1|$$_j9D07Cx9oX)&=#FjQN=6@mF}o=avM7#}#pUUS=YRy}vO3iFJ4 z{*MR@{kEXx6GOxM4-vgKLiDUL&gv>EMU71u6s>VrO5Yc3)UeKyLQHga|61?q(EvhX6muRBZ zueV&?!&`I!&k55!yVsfaPyCqoipJhnwu`B#9o9Dul3z8JUrDtT$0&@%t0I$dbi2M} z<2iuwG+YT~0?D3+(KaE&iKZwhu_YMddfsM+{qk(hX|ja;naxid+ksYO40k*dp! z5#LLLyc(rW_;#>GH1L*M92gcALUG`PVs%C|Q|n%@@Nmz#dQ~~U5`H?j8$YaRP%bgB zLo(ASTa5z~CQ^+RRA`BcS07!4D!=U6Xan4Iqghf4VAP`WO`{gYMvK--UY9pPaW1TR zRId%lA#0#H;*O6=&hDp1qatU(?YpsF>JGWOtVm{V#%iMc%?Qk9I4H?YrA!dKihCDH zky!V0v!u+l^D6&q$f?7OW15}?yQ?)pF}kz0^!4&{ z5d6SoiWs_=N~ShBTQA(Uu-+PC*5C}|3~$2O4%fX^Dhb)?NuY*(^4AJ1VKcsvIDnDi zWG7%>GGIP3MuBA^sF- zDB7;H;81)W{y18)w0p<@O($)B{8we2@J5&X#Kkt>&@?$;AIlL$? z;dF@6FUlu+4ny1M|z{ zf?*Odd=GrjCBiKJ63+K>uD} zC>HxF)R|ND0|UR;3hwve_OL9hQ5^*c(fmpv{Mi)fVAxee&WdS?SxfO}77wELpfS;R%bYc zmMD8`YJ4aEe5lGuf1Iq4IArG-#qrJZo_&Z}oU3br3}w?!JPQxKfVAHa?(QRY?agJB zpBHtN?CJ5@O*NkY!L1CutsQu+e>k#8wJ>bPQT(mCN*Kd zfMs=C3-{2_k0LWy>_gT~wt|bM?a`fd!)FVrso>mI^UI^aDFXs5LuF>;3|} z>e>~l_l^mT`0)7qqu(A6_;nb(cs@9O z_3Fhd%k;F}9@UO@=N8R9SjWZtY>r+j+nl1$Z#2j4HBat=kC-Y3CweR7iVm`Lz%8`R z_IR{SQ#UlWY71@a)3k>G%~6)k+pWfut(zKw8V6lt73>^bn_HbCDgh47lQ2eUD96iH z!Fh_sS*KOytobk=KR-Ku6><|#j$a*y|B+=36o%t0R4HWlE9sZTZ9!05(5L6c7j8>qlfp;8C z%19LKfXI>;Vsg~GR=#LxWXZfAXR;}rwiA(8NQBP%kZ7@BMaN0WCY)h>k5J!2OqgWuINRe{96laLJrv(q|X z#O#4YtN$-hR6otq3G%qvO$dkQ(S<^7*)Vwzm5^9U>Vc-o{3|+R{W5W!)KX7{K~4=v zA{Rng{_8*gZ$ke<08WpMfL*Kn>=m#U&N%%NjF0YnI%{#4HB~(mk-)hEdBzf$oz1iJ zHSdce`f|A8cuf*ITx+L3o~9~TFJl^m(W8orq3CKbr>Ezg#Pft5HnS51j-2O&#~l)uQW9>pIQG z96N=85<>97Y(ce`D4Zk({Z$lN6L*phUbODUGNhPtcMnw3pm9 zpZ0OYK*QtQBYA`gw1E__pI38(jjhIWyb^8t6u2Q}A>T^599XaDWqCfEv)a%1^#4(c`&j{a3rcf2=qfYf$siJwl zk0ohD)0h~}^qbpQkL`lR|QQ#Wto?0m*AGVwoO?d^ZLcW`%)A7J`F;)CKIScE-A zY*wriYOpJ|*<})Qcnj}OSM-z>i1F7aU7Z(j(6BRXQS~W^IazXIn)lp9wuZ;lYhcow znleih8qa3Y2>f4ZHGQ~;+(=iRP>;)ZalX~l+I20~H`X+1q6*lkVpqX!xJKUKIN{)V zucixjR+Mw>%47HYSYF7~9t$>2)aesn9qVMqtuRzc5y)GPOHyFudA0=J3dx{2gL0Z= zvjn~gy9FGhaiU2aSbH2O!yt5!&KuIgfaUWh0`7^^54tr4WS{OPHXgN+6@pnu5N5k$ z?5n|gGUYHp8Vj+WM-#~yDYwp!4K4lt=*e?xmj+GiT|I#HrBA%KQap+DtqDqu-TN}!Pryd*rM7#_w^RWppZXbRxp-Ull=3GD&{qtnv7P?{URXklWr~?Nf zh=?)?k}_TtJ~%m0hf}eYk}NlV({I57PKOLpY<7Fl2+6B)N>XM_a+&m_Z;u4|`NN}S z;B21iP6|-2%T(f*Ee@`EHiee?yr$<~Q7~TNrSnR+D~7`$;0KeykBbDR8t^IUzkp;g z7)Mz)FRsMbbqiw~Q({t_KV<@(L%?%)2U5$ubf*y@GcK!&F;qSHnZJ$+sHx03(YUh-#Ni zs-ji0Y?n{_4Z~(K`QU}+SKq)gY2X?&zY^@3jd6lK5ntj0jd3He;MhZES`p8i3bmiE za_-nUAIKB!(U!ocEztjPV3mo6Wje*unB<8q1p-25&R|IXbq>I!IzDFe^ePF>V@5UH zpln1|EM*NC&E}@pf_SNvvx+mm)4JcfLX8FV-h!CeUWCBre66@|Slbn{wDId!*+|G9 z^fS}h3X|=RzN@_EoSvdWIDbwZi!-p0v~5#P0mnc*vcZ+vOZq$Z|H%T&c_{OO1uNv{ zch%JzS~C8_dT^{12ZoOUGtUO^F!0VOm`$@$u+Ius2zn`eA8H&Z_KgJOwTNZxYB|+h z!-iR5@=vEDDR`wMkRWt=FXPh!rbn_spTLhtoSQ0jH5-LuOe{0HVG0dy`ZsN*oFst# z(4n16`f>kINA~QukBkOo$ttWgm@!hHu8)WdQde)diN9bUtl*_p1NH35*XPo*Yfwxz zF%w()3ueWutea`ItBjpqXZp8Zd*;ZDc!$Vev%Rvjz9v|g#m*`k6{ShWW8jPJwCGM3 z0sQ?77gTD+E8U_h4XCP9&A=@M;{(x1KgDzR$^a1e2tEg}3ZDc95JPrmp9e_wXZMQm zlo2lL2m{yZSDJmwO{(<3!8Jlf7xofprEPs(nnVs0xRR?2^Y&4w|F;>*!%V~$UzZ_J zu*&dm=uPNK#8E1W%Gj-9;2_KSIYc!+2)_8Mn=N%snk&EGz{s5TO6&21+H?wdIQA#+ zE1%jla;7ywoQ|Vqu@bm3v7ZR|q3E}}VKXih|EQo1?0Zkmma(qD(m$|PdJB08n-|Yy zk2Kf`BfoQgqG3^+wSoN%X} z*8(3&&h&1+ksP+iKhyrV+2ev!pLfOk!*hw?9+ufs_SW`N=BpcYf^YhgYregMXWMf{ z-ZlUv@9prCyb$4zNf&F(^5VzKS@xTs3}*!dHckb~OZ;jz5(HDM{kp42?_TnHKD?4e z1~{xpc7RvJkzO0uWq&hdn2*+F<$~Ls@tMF&3s;h)Di%9)CG71PRC)8HNO|cfJjLxC{+4D06vHDy! zgku-QsBYBa-_rEHB#`JPvH0~7t4AzvQdZxAo1NMpl9c$QE$8-ANH^NY#$4B8BEj)wb5 z@!N!%k~XkOzt1jX4K1({3y1<|EL~+ZM9bwo zXCY!Uq9{+C1ws^kjInOgt#YjugSSmRBZRyI;3hoI+U=kc8*s#d>7A+&B~uwgm~89GljAFi4fakcf`_1J#a$a!t9 zjp}$3&*O9E3fN8fLPO6?bR-iBSTAx`bH4Oxy&%+E7Rv^JnZO5Yk*t~?oQkxf3g+Fk zI(Qa)n7T<`5{VvhXUsrri4o0DKE|dg84G-G3zPNQ&!#IoS39`8WX85>+-wu#y(LIa zK^Hv+-6%yBQPT=#CTfn|lvO_(D;_L|+9K3~H^h7=y+r{I9vcY_XD4D8oo|J%MFB*w z{%<`djW#HcWAate)+|JKeVRzvrpv%Z5|uFxR5nYFQ`bMS-id!jwZzdPI5Ar%_I;K` zRrQ>OZ(;_>j_vU*76=^G+{6WktY@pGKy3s^V~|4nhZux6A=LE&mjr9fY6w;_CzQ41 z_cD2tEa~t>QWS}OYA#ZN=OTr~>)?SG*~EFcDDq`he#UO{(e#21T`UylB#eJw0R^t` z%Nib9rAM6h?ST7Pe!ho)?U}j*sXOp}x;}Y#{?Get`hObKyZ7V!iO<#kpZE5^Jou{a z|G9tn-Y5UhkMXIwZVJC*^B~t9JJ0G+0<6IEgV$k#0HiL6`LI&dLb(%R6a!PhG~I@F z;6av`Ww;scAz|&m6#&m#G;u>|etQk1yu$t$&h;p09vSN%6}mPSG-N6E6vd8Av8_0d z29Cv~Yhtxu1)NSotQmuV)ug3hiIVJQrmlbwL2t&e5=8I?Xp_XP-nbj~dTG`JysCz@ zJ=TB^?+xXUMJ}R&i$%R1zX605G}N#R5lfV^fQGYK8GcEV3oE{d(NCHMgmr3TXAr0X zMxZ{V38ps5*F9q00|kFU*gOm3>Zi!>DKy#|m*}Mk-I(HIZjaB2E|kP2RfC*3V#&ZO z*P=v1aEWl`K^DMcgEWVxdT?*d9*hJ`O#!P-_6xs>A6rze^;3OpF~%0ZW!Ewt9D^M* z5Q-NWU$~S>o9Of5%cC=3bk!SA(75`oN#idx2=(3D#@YKLlr8?KHCp!HUeotIX!K~a zaU%1WL%28E@EUk=O;xdUa0M@pO)_$80CS`USo$ZOItx?)9zPdG9<*k%S}dKmTN;#3 z#41Tk5akoLASpZEqDvxC#VUQt#WP>Ye6~!kXVXWTJF5Tm+#k)k;kj>Ht10$U&c7n} zC}4i%ZiU)YQo;C>gRKzl=Gxk_{!Jy>3!+%dbilkdryu|{b!34k9Wsc!h#S-9D@dzT zM)T}khYDL4Q2_alTLOb_TiZ+|a(eXaI6OMlJEp^WAh+8zV`+pO#$rYEnbx)Ub8SR# zlu|0>i+^4@6PU$<5rFUZWEC5PkIv@o;PG5(>E&h{ADv?I^iqtVEE?vgzc6*9L+R;1 z8tG-Nsh2lvQ`IZH!wfXXPtu?I# zx3l#G+-xO;xHYdv%Bul2hokeFf=q07O7E>_r=OzLS7CWT!}9b_Mc~h@f=^1Ykjh$^ zj1`kaxtQQei_v)mod)i?F^_pIZ!Wl_r~WSLSBAc~1;<>lHsrZ5G@kbxT;O5>8JGR$ zIvbph-@~KZw>=gAH+Crz^Z^Oh= z(e1nVb*&yfAXgkXgA5WrHSi~u#?9Q+Q>=`}SR&tum39PcpY6hCHUA#Or>FDivCBZ6J+T>2YO6~UPhXQT%a+qnPM&}FBJ62N z1O4i-`L=f4#2AS?oU$rnX-Fh4L$IoeP`@rb1+gg^c@OevEspLHzz%C*Hub@Ct=8uP zE(0>xDGonx+dqix7125U-P$?}_}@$y&C|eddn_E@ctUc^%%pBGp{=W%%u9ota$3pL zBr${Hdz2M|w_SOGY(GK(R+55N z_;qf7AD!q9A^!E}cl`#xymi6H(){hyWb~Or(mp=VM zqMwW;S07k(30~Z+ltoCBAJhSbwGP7Hy0LYsG5Wth@tT09N)_>&;8bkHB)@fuK^956 zDnx9F&rLf$G-Tgn_@9V)IjKZ*saQDKy6GIA*E45Bi5Q3Majtng)hkbsFV)H%~iW52YS49pT87QqfdQ$KLlCFeHH84MW#(HdriIjA@FGn)E& zmBe~$kLF1vJaUC8*MD&WlzJ0I*Z*~si)Ho=gR$WIem(&&qSd5u;Tep~(xr`8J_iuZJj3O{K1XAvl)%;YzF3qyo zS%+4f2Z9ct4Y~YNJN+eHGU0L?q{lK-Z1GbV(+#YxWHP7#ewpXI)31Io-;kW^e{mpYCgRDYN`Fq zB4bNRqlOb&Y3gM|Ba)Ge!?Y0$GIb4lV3_>RnLg#lw`_7t!TjA>%?qrLK4qRR#N0U% zA??P^v#5b0U!sl6WLeYTZ9$O(h#WDO7B+UiKD5bQTZ~ND^7w)hKA@V(y(VpCj=by3 zEFd>@ZZ*-Gyj@qE*0-YET!Me)(#QO_bIzxR#dIJ-G$3%~3Ey~>qV(M9s5M_op%Dfy zro}yP$LTrZa~m7#u@5D;2FE(_>e4ofs*+1!bnJpV~UqjIc7v@Y_jz;fy1UqE9>p9GIr6Z2h)H0)XONO|rNEEg_09 zF%cJ$L6(hbDUbid^*jg{1ImA}<+QpbqcuHn_EZd0|1X-~n?^T(1R(t4xT zOZslbZk|D_{jKu4pakC%8!EYezWr0QY}H2({_<}qW51zN@NbSCoP^280HA%%Dre@A z!Y7Eml~EVCXTqOW);K_I2?>(gW-)1s8+%9Z_ab)x1k}}96PS8*`a2NZCVO4IpipKk zqjS8-E#R?w-L(4hTRv`e0|Q(~tP&DJF#uVAJUtgo>@s`Hzl3eZMitjo_+-i&M+WYT z<@z8q92g>@B)_-5=H6f{es(Kf#u+cIr2ICTmXvie zVl^o?j`K^C!JU&i7gq+(v z@CxrIY#!Q~uf0r~-cTKLw7U!9<2P$sj4W9aNXV-jlIogBt?E%*g6B9*>>8lpuQAkb z?9AcIHw9*^VH21^FdVn`kfj=al7jGiCr{o!k^9|aC2<7^C-+maZ#|+cw;=#EmC2$=3sRji^pXzphN^mpD$`cpS#HVIaO0MSVc^-)Usk+wd## z#<=l>l~Ebwaeb=p7n&p|O@BYW95)`Cs`DC#=61mN$iJT#(Jkj?U4xn?W~?0zGy8S858ZCEo*PiZY@I*Q=5&9BzCt&ix_A*)C(Jjj zncn_GxEkGp4uh2#Sl5j@A@+Z*?E62UKhbR#g&MtLQM_NbEy_QNo6wCH#Y;9+UlH%8 z#^w0$;{$Y?)nb*FdI)W-m;15th5rCvM7JJ#GcQ{GwQ=yjaz~_FFNAedYF-Kb`KqP( zXwFQx-(+=l+Oo;w;M6p;e+Yl5;jlK72hf*j23>y?SNKG+=7jAU8*Wi8_(gFuup+g@ zIjZ#zo>9%?HC|Gh%=ZdEDbZf~zEbd$YG}2`%h2dGB}##R9zVO5>~wv$#ZReeQn z2P)9A*d_X#$uT7w{V`fblSS{aNxnSF&6&v8kK`pCMXBY zb-F^UBw<&U#+qMM@`~MZWa?;E9T|UF*{2&jq1{sUQ{S;B$&Y_(5QKjH-etGog4y@1 z&iumhq@tbsNAXL$#l+#YR-bpatZJfeO|j4`Q<8{c%!s|sGDUB$ zIubdvh)zLRED+pZLLIE%UITg1-?q?)etez)NtcmcRAk%a$G~?XEbj~zXJiyiXzOWL!1?7Ge+tHL&Cg+xY_Dz&atcD4=WnSaZ~_!&CJD( zfZn4vo{%>xGG)Zfru5=~?`MyW4%L1rZq>RVIm_xY-QiF(#Y(S8(5~x0?5j-4xx{K5 zzOlWeg51q|?1?fb* zujvpEAO(Ii972DpjPl05RA%hf@|=2EjTmyaQlj>+(L5XNEr3s(@4Y%cdi?CTznFZc z$pY#2nC+^qHW2M(F&%W><>h5x8aKH(sdFy5NeWyoyk48t_TqH!p#RS%38f|n+vB7q zd!Hd!qEHU}fOn6(@%H8ywjWI{;EO-m`;2j&dNyrWPfPS1+BWfh&!QANcr~RBf+MId zCEFm;GwVR@h^mrpm(<<4|Bf<}H1g$KP>v_S#*~vb99A=<(;QI1#AtKQi4)zh)9G|cGw^~Vl2tbU~?ayoeS;_>UJ$E}}e@mqo#uVm4@T`h+y zKZ@yDj0g09H*BXjrFPRmO^uD_j972l>{>zp2CZYte%ryBgL^$nCpqy^{}JV@QIZ1G z7d~=J;wQq^@FB3FU#=g`qI?m4VX`v(zoB7hTNbGG>Vh&v^Snf~%<~wGBR?zXaPJO@ z!h8Go_73js8B}3S6WjChfAp5?F}mo<0W(Yv&FGX99i1ntVLGEn4{Yl;9v-~FVIEHp zhsmU`VD%Bqb;VHh7cQ&IJQ?M}>~d&MHK8bK1ercBoJKan|&Zp1DXH)*y3o(ew zGEYV;+PZhu0bD2le|4{h|9a=({=GY&bxBboCCq8hC(EkfR2>#(1 zt|QyW`|cq)GIU+R)5G>5BZVIh|7P%wg+0-+3_B3gU`-bb0a51N4M*y*&EHgsUD4sP z`bN)?*ONL!KpLce^XLt`Vf8zG^y&M4zi)qJg9n$#d!%xow@lZ>`c;)Eq4J+D+Adu! zMv}zUZLb$}=dD*@J=3f{WaAiw4S(I_bGy=;n`_r2d=5Km_%vG6r0_vdWO(DxW0%9? z*D^Kb}4&reP8{m?kGIb&V1fijDumllSgXAw<;_) z=XxLgp(`nmzHV;)EIJ>4Q*HQ|6T;X?c;rW@cI8;u?uON>AB44!DG@~6sEMI)KWv-$ ztL$=P(*DGAB!=a*UK_y_eo8zxqjfgNrG*1GjOuu|4a-1N)W>FqW$O0>-{1D?mc5dF z#r9LDT=a4>wYEyroC`JU2Q}~SrfyEz+yCT6-~7?EuqVbZDcshL?@#@X-N4tnu^Y*H z;vFAc9sX=Pz*N4WAH15-0&@d9dJMW^)Vxec9DknSwDN<}*qzLwVFHbxdUxzYr~vfn zqP-C!(Tzve-$7j{f#czt1Q8IO}IZeCH(HL1CiYPFlxtFgnC zdd+=Qi*74hQxHk%s|Q~#d)j89$u_jaG2sxz@wg^%Spymv9(yn=8fXNRbV zl{B=WB$I}j%OwpAcXyeOuo}qS-GF}0W5%1Ri|p_%Ocn`H4XTa^(PRRrNEd5DKNAzP z(0u2r!jQa6+z}}P8peQYJ4^c%eyc{wPQsqC4#*Fxsh=GUIz2XN3x-h zs!#5X7Zc*i@L?yIjkHHaml1bV^V1FEa@-HwR17mKvMeRB=!bX|9xazva;*7*476>v z+M;xX(rnjPjZ(YF<|}>`4w@RQdMVtl!8_7mH#~iI%6cd}LYjikT^lt0cEe-Zvbk1y z8RtcoMn*9vHxhUcA9lyQn~7bz+3iG0ucB_j;kEU&psPx2bEr$xQ1|>i`%^U8GbOoN zWseRUt6kw(5g1zWnq6FuP5SlsO)%J3+6wjs!%-^nH6U$6d(7C)N^f!G@)p)Il;L?-Q%PB#DoH$2`2h0dxWSn8mz%M1`_Bm^4Y zYBL-Iub9m*d9|>yt|7!_%KvNipM1v{xMt%jO5X$q)VQMhj-k z+v7YdiXNOv;0#VT{#7=j4TY$gvog<6(Pg$=u1yDMU#SqsCrIHa%(?PK5{1L%dYP5T z^#+Pl8SrvVd_gi9I8vtrb}h0{qvf`=F^)!29`(vqndM0|r)JQG`95rmW1Q`Seap<7 zJ{;VHw7u(2fn*eMjNEueTd*6RXW98Y?iF#Ak7tK=&g$=F?!ni-1C>-^>hhbPA4rAI z@9awz`a>(hEvrINdB+UZj%aQhXg)_nz(UiEy5sXe*${J!ceP{pR z-roMf-ogH!IG^cDh9&E1TYD-JZpwdo3>UG9Bu~(;567i*30>8|d6__$(X0q5q^AoU6c6GbxaNUMBF}!8%OcLHsFAe7%Xq}TGUAaNjms4?9{5h!7FXx8I8O$g zE1Y3Dr4LA(3Fo;6uuW7XbMdET9r_QaPfkMd9L4w^#u4$<#Lb*$t0f5rZx@n`8ZO57 ziK&q$qn!ORzdw8Sl zS6_X){~zP?Jig?E`rPjJdsp(Dh*^WNs>?i*=t85H7#@%3$&y&GlgG!yK{xQ76zC+9 zz=?~0?)=Q?S}I0`X!Rxhj&2%j{;ifM7{!e2H;Tq@&hu=A%3dPgXarLnfGjv^vGgHW zks3X_h~C(Yx(UJqS(aIH>|Qes4#CWe2i(eufjWeJ>(L<{o0*4gKFRB=# z!eurt^Ej43#KT4Oc0yE%*uFc=4sKr1!3E#ntA4zH)sOf7{&eWm=kN1ri2sD9D@zCQ zTbS_QyayY=b@czsJ9n!5A8~*8KI#8I%IBA9xqao^jTCP}0!j8nXofmtSHu}slI!oF zgK@eCMzkpRv@}O+Ni*MWw)0DxDPWcj&sR|{l9e}_IPG61Z$z--cJQygXR!M{`r?bh z$t1}Z#U9&r2T#y|v`D{&wN`(5i`?X+)tH|{f2qd$T|dc0j($o{-D)iRr_ahgkkq@MD<94=d}!U-bn=hq#FIxSz)5-ba3kH|f7|9w`v2w%~ZNckJUD`hWMU z{ks1*%73E&ALCPF)?c%Lxh_;|`=9i`ALUcC|GfWTzawq=y{naXciFL>__0GGDjRB3UvGL4RB`JJj9@*~Q7|~8 zyod**6+JykI^cIg;D9ALlE+~w>W=3x%U@^&emu^KbwMJO)@HlfuTIgrdH);c|Bj^K zI{)AOFYEYU2VZ{qN&fpNpSu0GVfTq9yv$=Gb3H~fHfFfMBMygLVK{v6*Si+Wx-z)% z`n`0ESd-P9W71%AVYxw37KW09r7xF$IOqhDf(32NNK)W{6mCT@9r?v&cj0>aB(eMu zXC`$N7F<#xGq01=Pb|Gkb3WWErz1jxu8;ohfk7DVcMqE};AGR7(?B_)fnX<6z)iY9RLhvAw##)82T2416>ce z%|S9?q9+vw+MI*skncTE4&r*zgBtt33HR+UY!+uUImB6XYu?Lx;Dmo44w(my=GcL? z3RlOHa`Zo z{?UYZsQ9j(hnHyZX)FmKS+c?TFUDEEB}SSSB?y1OU(d6&Hy8WqwH3J*`y>A_OXw|J zlDxisf|XjQrmxEz*5q2ee2+!06hri+MRjtZ{CW=JDRa(~S@h9$|_rrt!0r3F) z-SGL*a}tB+^N>N6h@*+qBEkB0f{?>CpTwyo^p=aO$vN7p6Pl2ahNXx*UN`K6`7lB1 z&TD7nHjG1tUyMuJ*EN--)?57bJ(0#qJWdu~-8Rt=bDZg|%Xxxk!^(teot(Z1|M|=P z12ZR=uVnLs-|$mq4gckgCS<-oakA z`J-pl!y)$&QL)#jVVhgtqdu-^ed`kKp^r)rFVVyP;azkwrgCG{X6dQuorAsS*#!(sSeC>6uMQ6m!Y}q^6L7!I zwv4suv#~thqV(=#P2TYh5YtnI5jxy3l@jN{X1P0i>U_Va6<{g-OltMyt6s4tiuU%` zCc}LC{PNFs{O9RBD&D*oCD3*Dzq?<4S-1b)JNShE^ie*|WF+_wn}1XEXSn!TOk~9r zL;m6M$TlWj4+-=ihMkn6}pC z8>k*D21?djUTQ((znaZ>SPr8h7Yic{3~2>1+FxZ@t$?p!krlG(Gy!&V&@le43Zw>F zR@Oa-m6Ii5x6_CiGA(kUzywzO0^zp-71LoY{xG ze)@3-2FZsh-!yaYFWx}o=p)jijtSd(z!sm4ruE=Iuw~8gTq}}KjeZ7{wAO2T zqvU;%iPr&DYu(r%d9NQmJwAH=`lV|qE2v!NKwoLz9skD_!d%|8n^$5JAXHD0TWI~l z8#<5U`;+HqhvBPuoX5Bq5u2TKb9H&7MafQMfGs$>k@NUW90rn)H(J^52Cz{!yiTHJ zX)fVO!6L%rSw`1&rwE4zJ`?+At~PA>+%P*uSaQ>J6>mmq^mgtgh{&4=IJeNTE4y!W z{!4fU6X`JTjV6;%K%~FkPgDHYhMnWX>i@sGcXtE-^Q(jXPyFA<_-w|1ZS4O0w+X(I zPCRF(_YW=NvN;*cov)bh;!FDXhFgfFg)&eh5qpDOB=i`Vc$J36h}{vvxX*-(z1oIq zhG;JCV{oabjWJu~u^Kg)wl^*F} z3@B_*va-{sO8=*^QtSWp`~6l|Qo#eN0M1RlY^q9%usx3QSQ_|W%?(if|K&A6C*Q9= zq0>Badb;Khd@p{av-s1-CTcdz+A=8M3{^Vn{YTXM(@*da zr45}l9RjoWV(+l+9ELyc_x|N4RC|0?wbYtQs>ijss*-2N@j9gOhJPskkp3b6!}Jdq zG-$MQdR^yDZK2}jRTZQ8au%f|vgXOSHUwHPS~Z&cKu7Sybt7nQ>_c3aBXQ$f!b#H{ zbp$OgA#l2Tn; znWgJRwkl-Rgfxofr`Dd?UxANAuF;%Cvs_nuv=*L0F4|$(qGk?;Lni6%-@N>qb0}3t zY1%VG(L9%&cmv7KoZUZcp|)x20sc{)EH_p2E4_>gePI~zvpQP8!NZ2NtBtLTMD5`u zlhbYCVcGv2f;PAFSwlN;f`Me#Lnz z)tv;MBkl~KemC80!PIA#M;f8SHXNqcv}RuT>LfQ9JKtrRpQ};Kni7whdjHo^PKn0k zHOV)J^{B^XJV_!K_4sN-#?+|8Z4%Q>jFuYO`I!h$y<7rStu*z^n)vUpDB9HjoX=u} z)_gSlpZoXje^vAUJoxI)y-)Z*ALY}0xiu|9XmIRK5zp03NJP^ju}}h|!7RlrjwYP` zop>OQiDEpB0*#_14qdua0)pp_#HT=gE~s)gI;=3dk)xL5|A74R((hy9`VSrpf(q4V$XoOUX`iPD&1tvi2~m~@59g<8kv%7LNt`^)yhg^ zTP9y`r&6qEim~#rh`oqYIyRDPScHIyq|k6XrxBDbvrer(BB6psk|vAQf}XygS5$Uk z%+QfrP}fFMNN|xgkote)h|!$c-$#Mb!@3{w<~P=bm?Tl=CB_*R>#f&oJ+x~35WrEb zmQCFQ%P(#EAsUafRay>=1kq4r!wP)uq%Px8k(6;`=~antFyTN*MEF}e!Fn(nBCRSB z&U|gAv^>cuVb+qp#v=ogBkWb^>><1t_ipRq&VJv2|_B@NY z!`xdetEgLzt~kPmNV_5!x0wWzV`-lp4cK_3iSeEB1lZGF&G7gVBWtWNkCF+J%t&~* z!GMZJ*+tB|fMpw*h~)q|qUBbAR!dMUUv_}A+EnFWrdzuZs&~x^Z1LR|s^@wSLc0n= zoB0-pt?C(-x?Q}D8us0_${k%Y#vKp6X$k7B$#%kFz#G)R4dmS2B;ECY_gm@kLRXit zab9l85l38jhr@tr@nK~Le2-SsY`tH&|H>q)XN*b4#u3pu+APKH!gB{F(@c$%+bp%DP^g1dZjE}I!HQ4Z}o%l9d@^J zXnyhT*7r7QUP)#tDz7T<@Tub8Ye2EhXwSEWlSuEtm0?12NTzGEB_6xMr$K2$<3Zxb zPZl?sZkd>FW@4B4sk=LyI)*CK?)0~~2n$r9Ll1hL`0~2)j zN{P{b&;7OOQ6%4Qf5Peo>MvRS_w5gwmb8yn<=>SjtMZF`utJ9Fle44@E7n3cwQE>$ zweRhf)asA_)=z_TM zoddijJ3MQ>2Rzf^uwzjba3E!X^nzw9#8#PhnT!`9bi#Dp%rt?x!DxOS^g=MnbRhc9 zDPAa(F8{6+RnUbt@ld0zh&xr3kb+ijJTuH|!>kU~;Y?V@N`W5V5=8=Jn#P`Jz{5JzDIZVfRS@PbZ9c<+IaHi(8#QivEaKx6|l>bTP9f=>`MX zZpwH(OIZ^(GC~>Dl61(IQCeETvM?C7CUdpj0@*MIcn!T#+N37Fkf*ZJ-*L0Qy56oSVD!Oi9W>C9z)Ow z=q=vsoMZ-gs?p+=iig>b&%5#*clzP61mv&*O~f(c3Y9Gi7#N3XYdW#hXk&C*K4QHY z)+Ng|#UC-3t}IjEMOKtSG{212)-Hg}fY(|iz(6X5+BZq&rxb^?ui&@@B)_l5;!h{r z!uE*pS;ka9H70&_LJZ%;Ym(O|VY{W91^gM4I1o4#PY{vV;*1s@!SDfdAT3F}AcBE_ z_PLg~O}ka*W)@?Sh`>vSs)r7EJ!E~l>M>%{uocAIFGERy_E|@n47vx=0tTNR*8dw#F6I0w*0@6dGTZa9mUY+DGvtoE7C;#h%={cjo^6nv~ z3g4^tc}6RPhyi{{&TheC>cX+;%#;-de53B^du}EXnrmj=e3`0<_oms&Ls>(c|H>%A zd3WVEqOpP|>-;Y0dn5={KG@L+J|P?P6xouD6{8<@tgH#&mc<;Yj9+apQKchV$s<3 z`ED!xgI!^1ljSuyv)*_U8pfbQy<#L%;$6oht=wQ#CJMQ-wdPU!qcZwB#Ry4oMt~MK zyNgGI*s0j6;Y=%|*n}0t6Lsfkf%Gh3i983rEtGpALOCT`qq3#-Pzx%qV}-N2G10+u z#X;(0V)((vLH=K6K*>l%zcpPIqCX7;s4^*vl_P-OT&3SyZ-$_c;xwKnIH197MJ!Um zG4M5M&LeslhAe$Fxk!lRzl`&gs zbL1=Hu}1F)fom}El{!a0siUPS5(Im&C5{#{5&bW}r#6KcY9W1}mtYhe3!t=QGkyQ|BG2R5$|Yx#K*9a2=KxHuNtn> zx#Zm=hF87;H)#~6xI3b$V{NB|UVtBFvWE0@{UH3#0fBXm#(^`@G7*Hf6?@N-WjsDX z{jrE@8jL|VHZbP{Gl;@jaz5+L0R=1Og<=IYNueC24Ecn(I=&vN-3POaE(7GdjdKV> z{~l9a7BDM|V$K0|nbRQ&f1j;rba||gkeM@21h>vC3C+w;{g%GGo#sBU^60_n?R z_D-htQ%n_^f2Ap;;XUPr=UGY;0|a^2G-nqy33(-@ev;=gtp-GFRb&V~s4Y|R8_qsF zggnVqMKpq}Jl1zzP8%)FGgtw)FU>`AkxXQ1{GAzR#H)dR$+q%?AZ|MhfEcm0W!_%FWV&b}a9;BuIv!!GFOExOIv{ zchK?_jFofXs6TJM6f>t&Q~e<2K)R;MZ|3iha>6QRYqpuM_vvFL?}u8pGwLTNem@&gQB&fUT0U)6S#`rdqiylKH5G)_H@V z&|-#`Lnei;1^hd61n$>TKttzQWl6dUwQi#cMbhSX{IQGj}Zj#6}B^4AZN#D~O zuKFHWWdkc%FhRH9^Yvmz0p;0j6ozIly4ey?TE+{7c8W|CGJ80%&B;96!f#JZ9$K>r zY2_$%4R;If2|WaxtBhH+%)N7wDx7^JVZL5AqUHL-6A)Pc#;!l6Rs@2JPz7QhO|uv} zhpkBaq6?KqyMYdXQ9Vm(bs$IZ7jE#Yn9T(fU4P%rlTLps zDl^{r+73q{NeLw#i<}tdH6yJ83iUk77d9Xjvr||ssQdf^iVCLfhRk$p(G+=yC)*0j z*20}+G{-}-QA}b+S%96HX^3G+i>enuE;HwEs4lnGb;t9haym_q+b1ANwwg!Y^@h&t zuw~$?-#mAWVi9{r7`w-O@0H*62rUjE5gp>4CjmWDbWY+5;WEbAs~J^W0l-re zW<0RK)6krRfGzu)8TW6*>18Cv^gPLupQsTCT3wDBYb_IFknV)({93pT>4LR2 zCKK*qc(ho~l2H;V0B86YDQ5LQe+j+H;a^OlSG2@uxGdl08GQ}eYG$j{x_Cqzgiw(1 z7-3C$mL}udb(XxGWohgRmD$^53DL%h|SR zbGoDSoCy9195mvoT3?I7=$n=va~5PJG%Rx7f+~5`&p6l-?gj_lsEot{QH>q!GC}7=xCe*flBf2 zQuA_hh)FJU2$5=(l~Je61RKUwSS&pGk!%rf9f*!+fr!Fgr5(FrFI0GZ^E@kmK+iP4 z&E47quR3qRyMkRkRr$zLBejTxXUwZUii+4SBC}G)(1vskoU>p)?=hGfL&Vu;)Mo_m zEnGbd>8fw$sFxbsVys(+#=~yH)cSRXs@ICMzZ6k#Vq%W=_xf{L!Ns^YATCg zZ2_A<{=+A5vt4Tm4vZyuxo-74EX>fqF&MqewPrN{$tY#|;qK9VzH5FCsspSzy^79P zpjJe&=(1CkVj|>-xd3uqcA;3WO@5+uDtWQH%zJgkKF~f&C*APjs_X=RyW-rX2w`$s@PLtf2twqf6Gz3tjiNgfDPf01ZoMgyY5%80X zp8%S%z?fOD$*UH$@R4W2)T9Y9Ju0+~-QDF%MJx8A5}p9PrlR!Q-8HI9+-=r*wOOl& z2pAA5uGW!lEyNxYiIU8wvCyX5CRYXRVqomwM;BQ_%NNb%7O5sA&Rt6qdM~5yhoPqP zn9+rWH#i+^?nlwk3em5yh{lc+BD^lKQ-)Wh^|Aay5cI-Ff+d3@*s(Sp@p#TufivZH z!abuTWo3j>qVw|fss0Hp>De15mFQ9Kf&iUn!g~4`MbbQ|Fe*RI#PdZaO=mkqx@*xZ z=+>rL&tD9C=pvCI&)Ct%xUIEj3=x6!FA{{e@?;OW0!)(w?YS*R9@;Sf+3kd)8&&lPP9_c(M{Lwj?uqtg z_7CPC&V1S)zKS`pkEEQv;TdQ${xHeqh*R42#tG-cm{C1-7~t3F{GMlWgvD|z7j~mp z&s^*7Ei9t6J50(^<*}q~Q^zI={tvM~YGms%%}S1hUxZAdP3A z(K>o6%dM?Ts;?1aM^(0DH)F_aFt*CdRZKwaFbmZ?%I!iG?-PC!O<0>=Js@3UP4B3t zqpUXx-@rHqQ#M-V2~(2-a4$5uwmlqa7FHLaQ@%cx-J@{3?yeTeR)Rev?o;8OxK^L-adMNFd zco)&Ay|?oPY(UYT!Mcm7jJeW`EwIYW3A4i2!oKiO5^F%XJpWx*Pnf8sRE+t;#IwuV z)qK0tP(H&u2f39uUGxL;5JG6<s3xXH9eK+}qOiF$~MSVM^Q=gXNS&4-Ja^-to3UOCznl1nE9+v{A z;mV}|>4MI)sF+X0FCLzxU~3KQ-_r}hQhI8+QX_i@qFj&IxEnFkR+@+aL;0kEi2c}w z5MYwVRZoP*V3927=2|(1uL_t>QMu0$o*)t-=jHhS*?SXsD8K%1yzEU%3o1$zl_4`| zp(bltBfGRS7)+LtnIYLJ?WnXDB73Dhm6BF%(jwAAQKGb43VE(`u4QJBy6@k8-_P^^ z{qK3bzTd`N=Q{iOoX`6HkOZU@M?$gBw~F8@2~5`m#cZIeKqN5+j5tDRmVZy}h=400 zq1MC{M1(628>%{c>pw_nQ}Cz$)hOit)F`ALY7{5rXY9H&#t1w*5RT?a}PxCYp@hz#AG=Lga!5N>*4 zG4b!#2>C&T#y}3wAK6-dz|;otZ~U1kh$b+I18WHxnchGahvk8uVh}eAlsKMz4?-r3 z$3Y|`cppKBXAhPq%M;8Kh!H{LLU2U6Xd6Ji=pBF@2S3(I9)m`9=7W_Y{Fgr&kVO!w ziCka-EQY@Zi0lJ*Iq+Ww6UPklU||~qk;fVS9&EG)7Kf-O0O>4f88*QRBm>(R0|xc6 zJ=y5UkfymbvI(e~0U|e8L6FIUlfdFTH6pxE5Yq>$&{3W&nC-_4gnWH4mo_XpitD;kZ2p{pFDZ|JU1v~iPc3zZr4x}?v;$9 zPoZIKpiUU_iRNv@Is%&pIyJ}-fwI7i$MFlLBJw*4^E)6pfyQz55N?+usB5ol2a_&g z1Mc{hM+S;Y)R2JeFO2GKbj13~*Q5I+oyUYOBDf9+lBLb1RLG_Qy#5k1&x8grYsz9-SJFOx*7CGPQ^Wa0o;~C6;v)@z!RydKF z4A2uC`I`XzhVcFX7(ajjCWj*v#4<;R!0_~R1+`MZ*40PeS)vNQsV>tH*cRyT{J$Xx zIrImDVNhU(nJA1HjFWxeRY*=vWWU5WQlC5we2ul(=IS>N5zqMH1%gPKZHV9Oo0wz~uoo7=71`8W8ZV zAe|t*4K)OvCx9w>J8@;?{sFtiW=!w)#H3~w4q$ThO%K0hWkh{ZGS&c?s zfUuyjeN4{4O5%x&jW|fH=(iA7Ao>M5dbtw%9<&Haz#01wLIbFYUojCp#Rv#MBquVe z%p=5gN0_Buz#9_v9Rn6Hk{-SM?;JE&!&BHw-=wSo`MKG8c^cX-tD1`pH zxq^j)YA|%hK|LPGwG1+&3&Q8{H!7HHlsRO0ntl&lA|5sJ2e1NgB0-GR6Tp^o_VYk(m^a1+e@i(-aA#Bp4m3eEP| zG$V5dGX;QIYT)w?4Ti&qXErSaM=1)}|gm<1N`GBJ_Jk%ekO zJd6cgIl>qeI92B2n^YakbE6JxQHQaB$R7d-CuE$9=aAqqfH{mnM#8v9WO4fFBH$v8 zaRLpfEJEw}H;pCkF!Xn%7rU%DLb_)D%s|yAVXg;15Yi7qgQ4`$*N{NkFjNL2@Mz%D z;$Q$|wmUGD;_?lbO@iuevMrcB=(hr&!$TB=3pa!qMW8%^jw|yWs(`7P!^Oib!Lh;O zlCYs^5T?B#EaP-2I7wb;B$iO9Ek_`cSr8NR#RKUhev8US2t4SC1>7^6@VNw%6$zKK zev9?R3J7KckHdgI6RTl!O9ICl?k%Jh?6|wRp&JbSr6(jH>;mC0+>^d(z(o*n5QPc> z?3@7F=Z{;A&}{-iIZ%xh*zKqn2C?oqe~+yY|6Ks^j3vDVaxBUp@fU-HF9sez*(359 zTMY*$HJHU=5rI+ol%jxWV3ubCV+Lg71S95%RV6e|3=-~W2;pj&?r4y95J9#vK^T>0 zm;fZ$2z$fLtzS|2AIWls%8Ojnt|vPrpwI4M{a?Xm_5B=cj|MOaL5E2=#1MyU3t0mv5Ce&; z&U*z@2*p)krEv2YGI9n$RUm+QcvxUQFo=PJB!o;R#O{!=oQwe1%nO3Q3RENDwTQAr z1l$wK5<{RkzD^tyUfw1{vc0NOtk zfdRva1>yggCpV_GDWM6Qdz%~Hwv1A-%il`IA ztqbskz9qmZ7k>g66QENe@x9!k&Xt%nfiPoWVq>5#P3YBw`p84?32+jjLF6}RpZ`yw zi}%L=Mt^ZdRufZi{Evaa`^W#*)}A^;yJ!A4ZEfBE;(z}qK0Wil^;~`A)XqVVtSSD} zzdThNBu{+v9vfkF`3IAO5(F$u2jDbtctRkVVp!N%Hepvn8 zaq6i~b~8r3(lJ;KmGldEm&^ti2F^8xg1jP`$boKDIIY8S0ET>)|W)XA&&y2y* zoHXAT~{jISq%qCwh2jbFq{5q-kFS%DS+?Gpr`>0{}T zo0LV+CqqAdLO)2dG%+RH`SHA2eW5r14+qp^xAv7b$x;jMDrUF+olqXYH zhsRCejQ4B|KY>DXg%;67=Fk|n02CW&g|Is89i%c-4?k8Qhe`Atho+$NA7B$tz~}T^ z-vSnJMs?)!JXvhyT{jP&FLQb@2d^J|1dEUZ(aKSowV#UrFRm_@o(0Y*9UlaKLPJ7A zXe*dp2(-e12Q@I%1I|5s4Vy)w*RZ#k=p()Zyx_dhdo&RYpK;(b*a`_ZGw?SWpW-9p zviEO#HC0P{x~A4F9IThh31oAjI-iO~rw37?Tt^ULAcUg!2!Ubs-X?_4K8{X8!)ORsHp z4AE3U=1Z_18&emg5}{i9pF>?uEgel>pmz|%lgT#(0aFgN1NAePnnJBG5J}&U3FaTY zpOHpE^*Wkb(>1lHYWBA#SZ^>x5!G`AB2ut5drt+=lj$Fd*6!&k+)eaV5I;dOg=Y`t zJkam|sXL{=qx-Kt(%2w{uaLg3l|Ni9|G^%+c>|&-NIel64S#bbcnRU(ksmOc3h3tw zo`0aAFO`tS8HjbLI)a45AY(Kb)`~1v?`a_e&vcwp3o?Rz@L))_0IfTa;W=drzn^Y4 zc2lO{21bGI6Ge%80A>}2*iDc^K`n~VW#hDfb9e!seoQsw zneh1VJ4U0I@7r%`#aKz`Yi9AjmJt1&SVB744qSu)t_T#z=_v9XX$DW3%;yaL?`>1`Qs6H(|0)VVf1`qQbMSxs z`wnhbx&X0a`Lbx<0U)Ftlratr$|8 z!#y@Vafe}>6aAS6G|&LY2fj#joDj2wZZ1CtdUN@EAg^c&7R07VaPJfCAyR-R54sW2 z{F#~LcdA+_-~jIlpMfg?}|@LzZ3y4gmS=maXzhr zKhZb{L+JsGTi#4s025&u|6kCR{%`#B*8gI#uM9s|E+VS@E7CyzN&l-eUAKq+S4&50 z`hWGm|A`N#|0Nb3tU0|O0#CBTOOlKY4e&M^`_BT-#ApCFFf5_@(|l1769yhy2ckqk z8SXl6gvT#JZGMVCRsYb>EpS*&Q38XRupr1(}uqY@Hh#w;qf_1~6h(LCb zxX43;46^T_w!%;%FN}jJ!n+vTS!zI7c`q*JVT57hdibzeaJEqS#}fs}MeZa34x@q2 zuxBs}_(Y*DqZss`y1I*nv6H%bFT4_15oXu*WD}A4>gpD@E=X}S{TGNTC6WRW$$lWR z0vc||!Te?Vnlud<+m3;9qDX}xQw#}Wn&I|Np(_>JJY0PJ1!htMOciu!L-EjX=+#~u z5l%bBpUHrZff(Wi5z^WNh)9iw9t|QV7c+nZ{YP-zpP-(1K16x-@CjfeD;Y{tc-{7rKs08wpw^T z8{CtCMuyRB7=#O-hI23<5lGrFC@dW80qkaP$Z@-elEB13bZSNrm&(Heq*$nPD)f;; zUZJSrZmUd25Eb~)2oyt|cCb>ko<>P*r$aas^elmYp)Z}_k%EK8)DnWUPH>k(Con#m z4Fz~sxc%)N0gL5i*JZ4B84g;zI zEsPhKQq3$EIypNa!xhN)XoS6joGTjk)t?c7oHu^deQ(D$tWyI1W1%djpJ&gK!kw6F zZE9@eY=`%PY-jA?ME_kQg!>sWQvMn3JxGB$rSzB*4ZLPG;ohKBxM!c>)dBrQv79OV zBM-BspjeqGu2vtHwGj6P!)e@lj0;>lsKYUrO~T^*h=W9seKHv*`vhV zd`+1EViw;BhyRF*xr{)TW?-l$p0xmwJcM2Yn)M$dd01=zOGzF!I)bcVZ(;5IhT!3E zxnghiK@576E3C@DCRhJ5TGX?*0>tRwLP+rK*(V{vA7X^W3*xI|6ayz27?`-a5V27I zUqmcmMg5Ws!D%9l55#5#9-Bx9A?O}LFa%)yNF>xZflzkzqzdR`JO-LYWMd`{KSbE{ z4nn3`hh!s6lK)4FK&(QzP7*VWc=4ZA}A*v_^B& zAUrb)K>^Z1AhIcmg(FJ_;Ao;6s0a)Ihy>oDpqYX|WFv5SR#tjR*1u2t z-CO?)Zp43q(pTWqzy5ccw$@Y~Vg0YR4)WK3^}qj#57^kqivLFCi#w14*a-*RYV{lC z0#sxPn6@}%pp)WaIR_y^3W1S^yG-pd_YbKs8NhS~o1?6E{VOqJLJS{{$l!2oJWy+Gt?WMgEF zvA0mAB!+U2Cf0_4JOIcZ17}6nz8?U3Je7Q(2=n~ZVaSL{82TL+F-goE25ye#{N(ct zLVLgOxqzUQUMvFmA2R@Zu!8_T8V4O{Ut5E$u1;V=qdH1;b;0!7U|KQ04W@hPpE>M< z+f&CV0h;>;{>CBTR{1^TC$J0^f|EhxXV7G-By5Sx8zh|&88H8e!?M&^c zGszTm?y)EyH7s!;gHWMT(EM!ZL!^f=)_~qCwFZ{baP;qs=z^W|hdqQtI-#)8 z{0ss82?7E#00iluoC_mMsxW>RW@cpMR!&RAFaO6X@Rtw zMgUNg`b>BT!NLFxTnLt`2f~D*xCHC~YL9oYjfh)?uq#MlBHaZ{yu`UB)(=CUAP{@m z0mu!2QDQ8;J6w7qEe4QV{ZPEPKco1O@RNyL`h4pkUKb2_#)My#R|U{xzz;MCIsDLa z3$xB*Y=#~2u&3@*07i~z1vPMz-2|&7(gVQ8ATS1gRpa=j2(Rwxht3+d`2^#~Q8WQG zY&VEZ!PKSjPd7CU5(_d+SYRMo*~1Gyfs5r1GUs^nfbE01DiBk(a7dVO8biIHgXQB- zCQ#_X9SScCW{?|B4+X}AkY6517tHWO6Wl_w$bU{kQ`{p(@SOon%Y9cbG>Zt;4*?#=tYvgM;OPUH#}e)!^r92@J&=?T@hhhOZPJ23}C;R|=ZuQ{Ru_ z@9v4vK0290;{^r+-LM+JZUG2Ml>Z5XOG!sxjv%sy!j)0wYn6Yak%TX+3F0-70pu++ zh>Jd=u{c;C_-l{yz5oRb*#N{wB4c|5V&U@K;i-o!kDY%U4-zfKq0Ps3EW82mi9msK zQK%+5K(gum9`*&d606Pv#TaEH8W?)~TKo+uEI{ft51U#1~8}KrOp!FwwR={DhJ$oH}p;9zddPK<#2lZS4Y6Sd}!XP_Q ziAn=a5BXcPMxhHH>gQDf-YDO12lWwQa4=E!FRyuzzPd``sj8|99UCl1D5Tt|?-|P* zW~oIkVJB56Ol=gYNyY0*4Lz{1Z<8|4=`A*`_qm zZGg6oGjamovAo}XCKc>?*+bx9HFO}jstbH~gh+A-XT}Q(A`sSb;!i>Eel;3N_-=DT z{-+O4wOY^W9I$d6Q~?T6;sDS$LL>eya|XTE2(L?_g!KV^@R&3hTq&RjH3PEX?^J)n zEjbATzab0+Cd~?7qfpBToH}^{y)nsfXjR~mhD^C9FNn~yadGnvNgapL1D)qz?cgsp z4a`lXk4F$85M^!qY#U-X5>WM+ctAjH_khwys`@RMHn^+YXoCI3$csRSuwVH7{e6)? z_FE`TG|=kvFt}Ob#~!0V>iaV!IIchu8p&@_vNZk#qxDy#5Yj)eIAq*w*b|ex(8owc zzgw2y4+leq6&ekf;mz+T@&_@BUJw4%djN2bWvfF`A_=Ae)r0`j!dEiG`3G!=CqMr) zK$HM8K+L~m20)B^rohegdrU$SS!lXYy(Z?GDuDWnUYr=n9*lJ2LlFzkB8mLBNb%lo zSS%BIVY9dpIvr<$K?WQ$&a2~|6P|2bPDH&*0apfPi~c1GDC`(JIy%p{v@xfnNP{@s z9?b*7xB)?u_zB>@0Id~pN7Bl`5m5yH=fT#Z>RoM92Lx7O6;FFLcZHhf39GE z^mjtF1Ex-7Yg==&wdn#=Yh2U<5N>FHsSs^h-_*gu)&V(xG=Z1dcnG*KbRBe+BP(NM zfEB<}ruC8)&}pGThcs8LC5nI;j~-=fCsPL-V<*c6!0#3Mu3<&-h9g!wnu_kHQzixbur3Ow%|K~ePKq3)r6qio0 zKQT!Y{|n!eeRD7Z+Y;u2@{4p$9a` z1mRshxJ15C7+3_^OdfzT1z{!XX{!>*6I=lWurCr@a0TcL_F9An6HV4^e#OqL@M)`AbaA^0xRLo*cPyw1PjU#^LquRgm4euto=ntZ5oIwc zXdcH#`${z#9Lv>fUgr4LQm(z;(yvF|L9)%oBi^KJtMF|`l{id**gGRm+42gMWOCVJ;;TC7_1=x z!H@ej;Q;wC-6W2HEaZBJZUGYCt3pVIbVAjn!O+?vkPQzepy1z`Pzi&XS<%D`WMxdi z1|kx!Iso6zG3OlMehl7%sbtYtoP?bT&=F8j_hfKI6S40juu>oenyF_&i=F({jUensPKaP@1JE`>>l`sCL4R{Uo_`<7yiFF z^?z;~i!tK-V|^v{YxBiPQ2&Ma1f&0Q_)7d;DQvy^FN_bm|58o@e1G3W z<0mB-a?`?F1UeK)lnePo+rT}r-y#kmiywgWfP3IK&Hq(fK!7Cib!eD&q^FF6UW&M! zj?35def?)TsX3CHs99J!E4j zr3;i+$4yhvG=|!yfF2uoJB9WdF5gQGh*+u|67XUR@I*Z$@hpNk7Q>&y2!1P5_Mz@U zPaKi$k?e}{Vy-YsJir$MKK&PL>;E^O-tk|qfPH0o;CUdBEyUKQ1qOKk^KJAW|D`*9 zs?Jn?{Fn9&kpE%Ef8)RYGoKB1Hs(V}3gE;Kv9vI8K>kfb{@WuZf&4$`ytc)F0b&zb zbLZMw&YcVL2LS3bV8G1bYn^M@&zxipHn1HI$s3Xvny=e0w`Vrb zlh16dQlD5)*WHk-DEX}MOrC96jIKoIK%=LkG8TFhhDf-FJ#D>w%F=P2dY+|4*t=^o z6DBu{JHNUR?5^r~ZE4HTJF{wLHOy{U{>((*m34aW80Ymn^N$|5KXJ$QZ29Dr`5Pae zd~7B9IKR<`y7kVz5wsGywzBuH#%+|k)4cWLFPm1C;?U3#? zVdd%XV?SFRb1gV$$%qnfPyG2XTx8XF`|r8iBDgOb%w1iN$i9?#DIWG9FnjR)jukxZ zu(6|$KWLfses`(L%u1g3h?9p#MSoh*eyYmj-PW8^M^-JPwq#yJ-X7PzD;K<7^Wx6Q z#e43Gs3dw8XWy%jmW(z$b)+aq{N6*l?zD9IuU0O;0Y`IwoWIwoT>Ymxl6HC?n zFYLIIJpRtm^T7wl+>xJm<3Z!(s3Tshy@yvxoTZysH zmOXZGKa+9U{GEx3ij6$gy&`ws>_c`bQRweY3q2i<q({4ULT;ZTwwa0#NAhZZ&{>7&Cqnq{NN`#x8+=(7UUJE z4GO6;{5&R=}pkYQ0TvDJ}&tfpgJqt)vd+_Mi>MYlQMS2dYE zURR;}sIJ0nSLJT`2h4AViw3M*<)=7hBtkX@1zIfP3>YwYB=~ROfW7-i4;WxHz|zFn zY1P0F5t93zOut6m`*8QIlm;V&Av(*d%<_c0ypz~T@3J4#4F|kuUTxgNF%g#=E@wP- z8^^|~iYa=*&z-aP^RJq`wx7-Wo-V3={4J!oyP@*fx0mnj4&>$M=jC7UR~Xxs+EFau zK7Pf(j&8e4-Q8Zko4t?ZMK|eQvRFJncX?&EV#C0W&ZsdWu?u~dcjl@V*Cie{d9Hca z@VViUHH!W!$A;`~df}%NRro}2*0xFei1q{4M6)MP0ROh0@Ok_zxycAO&psAX5Lv<#2bN z?c?jWcRc;DdY{j7Y3rjYM{;$3@=mwA#zxacd`>g#sn4xi+iCSS-3g~oNS~PTeqKV^ zsIB*gPo`c@zRB^M6uK#RWN1_A%RIwb)wU*g4(1t29LW-6HEdn5$Esc`Gi?n+HhH=j zBlv5I-kgtD4Tn|i+D@IgGuB~p(nZrzmrd{ZDy^ZCKW#W7wJ9U5Y*&*0d1~i5j}K|w zih2X7!s{JLS*lN$w8lnB#jni@{94&kK7P;b(H2`IhIGm)H;J~iDLNHv(z};zxo*LW zPf(Pw$w>-N$t$qi$$tB0|x%wda-3d(5LX&=aO$N zSATu%*meG9boeaUWWAk!ua1;1Ibmy_wz1Bs_~(KX;^vmSCDwe~>D}1)c}a1j=~vHi zE92%H16N+niF|Wf>i*VKo7WuW*=}oVS0~Lou*Tp@TUlk&?bhO6P)Hc3;c4_lhuFX6a{KlD1-pCtG*z z*j#TbZrGg^r?YM&D0R#^ybs#9Wc5DeO4xl|{Iy;~#k?|iPS>f2JXyU^?WBT9lp3vR zDQD}Yw!W||ds(?D)plWt61jy$I`CEhwV3E2^XQxT1Fm;$jFo(Dl~UwiPhD;`p+Tcu zO_f}Dz`p)vmkW1c(jN0inm1%?xNExo)*Jtres*7iUW-=6xLHPwixPI%PmC|+e0fv9 zeq&aX%DSBJF7>ANyT#mzod@Q9U*~AFHgLHNMf%t1;Yajt<~ChVUOV=IC;O#+;#5ltUI;LYrzMI_bc`sEuMsI!dD6vjBne?5QwzEaH&3WYTB zhczW4O>IbH8Rdw5OwDJzX4fJw@pGF7=XM+(ul6RzaJ$NcJsVOBOONW8E?Ye3C4Fwr z&jYtx*V!3)x$Rk3T76>6hgR~ucNGWZpMTR@d(Grg&bp78NjVnAb4=y-`B@!3MU_1! zo##$g{1&x0-)tLe$B+8z)~TybsGl%Dt;$x*s;XTzZeou8=knrhVV_3r4k!>+PMqjn zd?9A{F!?KWYOB6W*1v3_RZuStc+@eY{$1#dte;YLFIHPOo8LNJH_0QI|gPYpNqF;3s8Zlxz!$*j>m*279 zw|&0-Tr;b}{37X=*65b&Y2M!EV~i$5vD=Wr&A396QJOPb^1+iuoSe$dcXD2=KbU+m zB71rEv@!O2V=vBdJGVK0KGLy6m97^Bq`qE}w zRBTq#_381|aYj1i+?iPqKNR}yeU;tO{%fAz(ZqdAFBtmTRUR|EPpUAjH~2a2p_q}u z$s@zOE=~Cy)9JL((N;fk{m=tB+%MsF=N6L^wup+$T=_m&eW=T+cakKVfW$1*+4%z> z$`(dl?Upe%GJRT|IMz&YdE|EWZ(k{)ek6^Mc$>8wN zwTADdm|DiMI>T>$R`o8tES~y$-?rh)B+?ZdeOp3C4w}HJbZLydlxy=N^QUS+xfbb@ zest?{gP5tySMOcAXq{R|oNnXgWtH}`+DoqavWL&qc-pjSOh0$bY~B|6;g9ycW_2@j$}!;zeG)r%DJ=c140vMYq)w+QcY{_jr z?Z_USubwo~5#!d9IXlVQ!fF(E$7c_^oA$(eYxccaPQ|a~b6k&#pB^F}^ijmwPbN1+ zS^RXP`NvWlr?YQY264}cSVWACm2uS6yuCShaoT7@iI&fvMBHJ$+WV^o}D-Oozwal&Tq}&y~Jzdu_8wUe3*qu6Iw^ zCPo>t^0(dneY=*a6u78_C2dJK`pm+76z$;dQ?d#{k6O4>Ro9(~>YTM!mu(ZrJ{NQ4 zwfntzAL(@wN#iM-PgeTBtL5#U>=K>$-YOwrm*@lDrShj8lRvLInYMb5__fhCB`V8R zY+pqV^xovBqAqLuR-{oc?4(ltyESSGW%AqSRd1ly&-yy<()4%o?1|>DSuU-&;<5B`Xm#*(UqE^^mxAhJ&xAZV4~G?DTTr!!H^2YE{|alBA=Lmm3*m9n#n% zDHA$&j)QjS+0N}ANefbjL{7K-DmO4s-F9NY{RgQODXCI=Y1*}el$&j%P2z4TJs1(* zm@oVM^%%03j(AIi|%{#cb#t!ay$Lab8j>ML{d$6G9n^U#GOMOtC1r6{0sFDed{Zs%bw>?s+bWg==u+%A6##AyjT?Eu_t4>+z4B<{S9vG`NdrCmll+e?e}-O``*g9TsVGP$c5u6yCrhlF5kDh&b}5A z;;_tFj(K>wxm@Uv>77FlOg#{kyfUR+R7b0|eP__Z#kZ?p<=xz(S|^nsC#`3c9)DKC z)A5)Fr%4Taq2w;b&FW@{9cL_WV0646=QzP`7<-ZY0tv6}C!bkQ zcb~btE45^%Y228UH6`mGY%cSv&r_pjoL^x#U*m_CyV+?US!aWmQ|Qpa2CT;llj!YLmQ)i3!p zE5cCiviIlCW+|Ur*Er$RLOCvj=X@;<=AO43X6mfPzHdCFd;ZAM#H;#tc@oA2r-N?ITOIJ0Gu^N*j5KI)R%Q1u zdPT+K2NAY4sy_mkmfgI&OVVb5$&9PRD~p#(*PXJNFrxCl(bOAq@>Qdiir>Gy5uLnh z_0x$)fijGE!?UU5S{}W>f9`#wQ&^7o<)AT4#)Ly(?dY?v9KS8Ps#7(|ZnS1{dCAI^ zvMKu&hFvRY>1=U4c6)2?KE?BDrxw^<89-X`VwAX~^? zey=RkOYN4^vZZsFyCcU8>>8&#diKR>-*0>$UlBu3>2mU@eDe6={*Z?9?@O|_j|^9x zZPs~Ap0Qf8ZuX`5dgqqKyDQdgdpTN~bm_E)^xWGej_2G4)fvrQG^=y-{>=SGy3=kI zX;cN5)COw$7~T7i@2vS6-u#x&F;LybSR9vsG{x+zTD;qjx z=$%LMV+VIt3|%J0da-Wb{M(g!Gj^yC-juUw1?fn{z$x-M?U$bg_&EiyH5zLtrM^gf z`Elp>3uNU7>W}*R=Hu(^rU6rwkBy(56@20BhpYnEpBuB58_IPVeyte$~`=>+|kl?)e7I-qf)C)hF2-f@%ORXxv{xqf^7A+8KmOWjuxrX88IG{ z0zRj891OoF$EtcTa0Thz^;Pr*cN}l;JpAHvWP0q%^n)EQ!Ver`S7eS%@fpTdpIxE- ze0@RZ8@a__Z;aUZ=}9c9P5xnBje)VsjkzP%OqpqKBx7Bin$rDUe8qu7j^&%<#(dwk zBsHyVRHV^U^OKFYrld|Rcr;gLc?Wscgo=yP-%pa->|>pnP$bapR=KE(S zur>8NKA(Ji#9Vjrg;mryN~M|Knh9-5=qYYYJy|Eil)Z} z6t+ni%Q{EKzesjmsXlMYyZ181lSk1*y3a&>FaIXv=;=4HtNll!?C>Ewr0KtIbgti zIU+-qE}!9lg*%S39dNx@+qU(Xk5-gsw?gsynFDb#{_VqO9xOr$ukp zrtfEmwhd06*`@GtqVd8FpO-}0CDptw-}gb!v~h9Q(Zu=#QP0oqn^F0TUH_~u_|`O! ztCNrDX}Z4rq3ZEMqPc3P|JNaRMu*0_Y;TyYS(LGC^^-}9?IVX`cUC;*xgvX9 zb;!aiCli^z&1&;S({Jf^f2cX``hMQBQ`=sT__EKiVRmzDz$hQppuwkJUvdAkMr>pZ8|M+#YuDd*?uw_uFWXt2DhM(yEVnZq)wjJ73bN$(MU4H3!~FUUKT;HizbuA%>4Gg*RAj2+?aOY;E1d_8otzbL$z- zBbzT_O)raCqpwwae+tjL*X4P%UBB%zr@G{#dKceiN7SG;j?IZg7UHXZ*b*%5(6W=W&+dekUI=lC_!q3k!GVdx} zmuI{^a?DA*+gL^Nft;>Q_K%a7M#jY4sg&+M{HEUiZsZDu1plF?Gk;w_8-Kz@_1G4( zf=3&iHxG+g;kB^hO$E0rU)S#D$8niUMdOF09Zxu^W@wmN9pZ1BKdK<>P>esTn)h?+ zvS*JcuCBc(=~J?6uurFWU1n#t@3fRFPg_1b+HSC_QFL`zZe?x_g_8WLP>;3jVZFXK zbvW;f9gC&LR4P4mF10MvCW3Cczr1`{lSIC9@Pu+@zeQ*E%-PSFUiW0o>rwK9j76H| zC1PTKSOyQu9rR8{$@Z5`>b-^6M^sOKV3;)L;P_Kd*@t2a3^L!PxaA(|ls31mq?8oD zdKDMF)U7-B^If;bwJU>*9S+Z|ntog9(E{6ztSw>1&Sz6c=l-Lj3r{Uo18j?+0%BL$zC0LEnG@( zgzO9BGV-`tNoCcNOTB+NCS*6rQx#Vk>`aMUB5FKDtjsXQHgsRYqrr)Wn&Ix0RVQ38 z{Su$dEP3lRxw-Vm{u^JWE6ORFZr9vrt;SLtu}@sp%dkq@u+-G|Y2KuYGX92h&o{^KLeYarcaU`Q<^v zd9wS?N2~0OW@@)lmR%IRq`Ydv0NE(#wzWbCY@q0Rax>srUB2Sjk2 zs?-n4nVP-7-Fz+C#Bu!>mP|&JUWM}-H5b)6OU*LU?kYA!v>MEMz4%?}P2*qAp2e=O zti_U3=6HPUdhI*!fS%2;a?zGGr>D&v>S$4O<-KfK*jLJvH8PANavkc&mIAR)Uv^=_ z_S23RuOCUiv4&}EAg-%0xwfR;#r~kCX)a5pdzI2@mgF1C{scd}u4sFgqw-Ft_on4| zX~fobE*#9rN0>frIToOinR; zAiaq#XS?fek<+DuqBrv_3$k7u-+puNm$H3NjwKwaUN0*5CD&l5<+_4YlY}SD2i4pr zh%p;(#FqF6u2XvaF~wYb=SI!(W~(FHVpw*IXJq6R{<<$AHhqpn4M(y0*Xt<{y=+w1 z9i08mw%&0-hHfbDic;mk&Qt^S(3P(F^jF&-YmgIXl24qS?s(X^>bd3SQPD#-FVv&n zTeWKP#f}dbzE`^xY!KVWo4#pzRHO6Hl|wWZ)heqf=gM}sHdjj?@>9v%#5VXT@q*;3 z{rPgERMy z;p^oiF07xtY_qe{%q-7}9Tmw*cjMw1W44}4u_%>LJU!*@Wp3Uy@eoBniNrm6@e61R zP4_h3GT?dZ|$;cxT9H;r*OZmRCcxc znZ>NxIfkbjpU54^Dp=~{eC)ZtmigWNMc1D(Vo!-$G0R2eJLe?4Y}37Mr?laM|n*0PG^IYE@cNL%?*uGhl)79oEm@T*RefHUG?_oKj&={JJ`Ij zdd!wjYNhFWE00cScsfmN;27h=jOvh>u{E={EUmSV+ro3Hh*4)p=ILxLd#r!B#NddwCSrd_V$b$1eErN4!~^itbNE48hTQ=2Gz zq9gcY#@DYw^H%IKX(k)1jJVP=Rl8QDoyb=GUla7lJaqxlpqj98OuvifcAVN%WZ>sq_FY)%_yk&^dd zPt&+~*-sKht0>-%^h^=Un1y;;Eeh|8H~ZBpzJGEzj_PV26#U_i=P1VAg=tDs-ZulE zT1p1Z6x9wDU!%Q4=k+|%mEkQ^wJ%pAAFi_S8`2O`|73veq*~SNlDKCpDue0g!iQ%* z_xG8s@gQyQ!HmS3xyxR*TL;FxvRaZRJ!|2s#oy{VvQKrkN<0tJKeJ@r!zYPe_A@tc zb~GQFea+ya!sqKE+g<02o%)$?cIIc7!6ygDfp2V5Wv0AT)$*6gN?OS-vHc{qBQYT3 zZNoaFiyTFT`PUn~MY%7|4ws&*?834cb@cTQ!#(q7*0F3RtPy$bA~BNTRM`E<@M2V9 zUJI*k!ojGqb=)_GJgNz+ev&w*DA_nRb#Tbg%r!&@AhzW!9* zeMBpcd}Pk$&GYx&5+8KIzviUR&B_`F_ilr9FW+YuMl~-vwR`n4Zsc~UDy>mtZ9a$}-J;pn3zS;OQ zQQtf@Vv?qgdVHLEc*#6QMThqGh4Bg9r3H1ehmT#eTAsd3?7F8&6VpSoO6dgkz^Sl> zgHN3Pkf=}A%5RuSNwkwo*ev0m`}DwRrJZBnU*o>mGkw4h=WVk&lWerA2E9E`iXUF0 z^>xjlu%?-#@+9qS;roK zNm(<4<1R^>9Y$||uAcX+Q9o#6NOsb%y4=VbGe48XrUyL=4yDPLUl^pU<#|fRZ=CP0 z$f0Y=IiKIk|!CO<~h8|gxceBnYz-rC2 zG!^UBpIOERBP9!;2OjsYE^oc=YWJXot8Tb+?j*^fB~AK!^1co(9U~$CQMPQIi2BB) zVz%LtpYIKG-sLkbZZA_XIX+4{bE~bMwPnPR7HLt_SF73@E<=B1q5oW^|HA*8a?cefc*0L-YmPQPGE{*-Ll?7M{7d>4m@U z){IKUs{ICAnxf9RewDn@7&zK~TzSXZYuitDJ8ESONX(FsZx~+sMRvnb??X9}9FbY( zdUHx5CMV5qAXjJ>jd|M@=e8qamV}u%X^hsG4-%VcA4|5qsmi9f|MaMzS2Is8@q6~? zXT@pd+Ai;YtaKI0nmtPK^7wZq2X_^ly=thTopZS#wx=nwaM%91pTzH`)Z4h4e?0QZ zzUuTzHSS}k&txe}yVgpLPN^mH#!v9BQPjGuTRUq=SKPo$t+S+$w#tUqgkQaOn>)5St?)}VCvXjfZKKbqIh?&{qiczmSGH9iwC)#C~WQ_NR zZGPU-kfa+mTp@n`tCie%m8GAg%-VhI#DgVdoQhj!eD%5)AHkRsbZD7o!^ObeyV?Rh z8H$XLdOiJS$k*g+J5qm8)?N3jbCRz``A4jnd3Or)UbV=Ms|tI)r!-f=2jHU zkA6_9KvKvosI?f-9T+yoV)U~ptu>ns+_`S?9mNZWJyED%yD>*$u$1J2!(tb6vah|= zXO*TNeUw3-Pp+>s8aYtzSo29Q$4@Tf557A4;!sijp7lTWXQwo$Mp$l7?aF^Ss7mZ3 z_37q$Yc8v|%{jjL%w$rm^QkH^g}gD7Kefs)o3xR7c+#*FBT7e;4qeY-h@Ga#{R|D# zjs2<}dn5hiClL{w=^o;zKW@oAKS^U#Oq$Ug+m~VsN5$RpCS~onJ89?FJ}Y|a>|+gW z%N8n}bv~H3>SD>d;E9zB9^Vq*Sy!uTRDR*^=Np>Vc}73-)r~CAiYg_g6uZ@ahSd2>( z@!hVz^}VjUs6%z3MEyut#kKA$3S4hI=5E>$9cxiK+4FlvZ1_Uy8;7Hds@twi{yCF8 zdEqFPi(lNs(>r}sy%tqDM6<;`w>Fg5T-qq^4aymv=KlDlamZo6&`hM85PhghQgGYMJ1}WJ`Hj3F81Abm%@inA9Y&hG--Jql3BVo%^)Rm{A7`!kd=>g)+v3y+%`BzG|6ty z?PrUcVxG0Vka?VLPExUb{v7)kG@$W83Zmql!BTjA?Si>{dUgoJ|=qrs+*xBW=~YElzDCThDM6 zjmyd`T$8O%f9p0genFcc*Q>gb@eEdSLrE-$xw>@bonAXiS<$h0kAS>2%&#~Y}-e|kkItD(WB~J9#PFK(3V-8m-pTtI%Z9ClX&OB{_X>DdJ}$1yea4By9vn|WAAM`<9Yu2`uNW$_AlM&^FUMha(-bfe8P90d{e^0`gF1q7eU5yy&W?imRneU*-!!OAy+m-3a$C@;mExl76 zm{u5D?ZaglLk|^*?zquS zD_1!&Qhm_C^aioKuAgR~H@3acr>xF-Q^^k0nhJ93r=X7$ zcRw>$XHRvZjkGPfoV8ekx5LxRexK5dHwP+PS0##sNR8SP6PWSs;lhc2-%Zr~w?(XZ zZD@6(r2X4YYth$TYwWvJvhI%v@{i5E&|$i4wX@Xq&t=!NvrfiVJ6j}_C6W@=)=xh0 zRCYkdR;uVcg;ZUOm3y9kxmut(o$_ey**WI9xu&lrermhT9`Q))O+seV)AI3Wye|zg z8t#?2wydDR!ZmNL@geWK1BTmjHy9@sY8orvi>I?@AL?A9M!7^aH`>}F5-)v0iu7)g zQ_C-&tj>_;-H(U6m5(Z?KKZoN=AcUUqC;+nzU>$sa(bryGG#ud)x$jrW zG1b>=>k3p8vOCf&?p76Uh}^BW)qQ)I$CgnU+s4r~D70Ahq3q1#uJ?0d#iE82I6}2ApjNa z*E<<`c#HN@eaa+?xa9+LZ!Li9W$}aS>@ggN9^w3&yu}oL^#VQAP;_&f^3)r7>nBwG z&9hYf?s#;B(cDb%+l(d}JJSLY9c7F$i>Ll7!d6p(Mil1jnR3Iq%5Z7}rqa+h3G%1M z;9rJ;`Wpm@k#9GIR;GT*L(#{;iS$KFDKs{Q`dogg1y33vSliO*r+2U|3W7s0)CV}cc>e`hDxD`i)@}I%7VC^f}vT2b2LUiR-{-s(O7i zDAY<>inE1BQPksnxH))Cc3eiIoQ{O{6!p;0z%}rXY8p3?fCn@qAuF1rZhaH#kb7am zhJlFW_9z^p4q=5))l$e1GWZ+{?v)D)%zP-E0mmK@Ls5@zFjYk=Z#|O!E0QqcR~A7ImyVP z7!jEr8}rEhR99I^ku9-)41nqPnUTRPFk=Up)DDm?nIDq%;FmzDvh+9{&xp&%oym3pIVW1Lj}FlI zW&Xz*3nPe6_Iing~jPPBiN11IPM-v~mj)^OnjP<#Fv< zOIrRx7(jH;Ll`mDpNeaJnqhjKtwHk6Z7KsC$N&l~*2-Kyq+@|VS1=p(W>|ronMZ&? zBTdP=RTMR95+z(VlcIWH^@R0_Mp$U;HiA$dOu6DL*_2{`bnZ^Q4}X5_ue9*)hp7Ok z;WDD?Webp};U!Zrccdtrky)qFBPkgaFlXm3O8;pwExPmuoV6WJX)`Yo$%gmwDg#cf zJQob~Iar&$3G26=#QKHzgYbci-a=TdRA%5EX8N757|uF4ZZxBl?5+9|?L{qspzhso zKzKocah8l12Q)gMptUzkLu2D;+-4oXoIgbF9azULsm1~0cf$_~?@*{Eppa$WP^&x! z=^HkTBUiH~9aXcm4mX0Q4A~3?W$Oxteg*~Q-UO=C74dj2cqj7S0;Z<~Di54B*ilh5 zbZ8)FOu-?euB570M^eR`x8bPXDNy4;cUFUeaAX^~*8H7<$3ITNy+`Q~xXwns1A#nc zn3=$U!4K2VV2{-IZ_I;vK6UsIzccdbt6G?-pn?%K6E=sLj*%02R$%pvPdeNA&3BZH z1&rpY$&|fi8@24*(Tv*Eiv=2@02q@^KFPHGh+*>Q`Rk)}BK;5@U9p_8ae9~>N;T@8V?FdnTCo%MbbfqazT)4q%t;~ zLSTzXK&N)bvy}mg5u#!2D)^k1kGs|CflyEs+aV;_u{NvkEwLaG(y}cd-;|`4WdhGJ z6>vuaG5K^;d-D!JBwl|t@-dLewew>rv0n#rc7r+8+Y*Oi@NvCz(iRK@Y%oR$YSkMJ zj`7GHVj#XMW5B0RJfx9q{px3lb0+*ypg8`1{JjkZBYm&Dj7qYyY0EnwQQzxkP<+P@ zI^vy4*;R!Cl<(w5oCxvC-(e?Gia)IEU|rc;T1au1-Arw-$A&XrmJN`O>tBB21eDS^ z?iehaGb|Ly3O467t`P#V6vNgHM^~+(!{05S^5r|J`31wMl{fTz1BopzpztLB@==rjSm982BHi-<*0uFVNaoAu{5j+@>DOJ2iMEm=?sJa zM31M}Ss_u`@jM*Rv;q;VDj931EDW;ChH{rzpwfm6Mkj&_VLHrY zBM^XX2W#VEAYLm7jhjCGoT>_nsP|=;VC*`iZU z|8z}#i_qm?PJHuJXbd=od{xCIv<3$2eBR)CbL_W^I(nef2c3BuO z(Mbt3{?&g#uCvR%FGYusNZ9FqOde2SDI1$!pLvX$CASNhRwNr_toRiZ!2-rMIyg{A zaeP4>beLHwzs_s~(;AlpPZ!@0fZkq6)_@@YHVi+IXZp!T9W3a%AVqdIbY$T;@u1sz z=ZJ1~$&TGJrDm<)K#2x5Jow#@*wizOs)1k=?z&a7VgdkmRuH*ahcqBz2(`sh*uftc ziA6F~SQZ4>osRlQ92k<;7o3pzb;on5Z0$;FHgqJ|DXiS6=0*QVe{(-c+eviuCkDss zW#a()%7Q|zZ@ zl9MrlEJzqA2SzRn;>iNPI@=k%f!P14%BZ-0a8w@U1qHMm)PkvWOxq+HbN@Y9_VMLK z{F461KUL@E?%4o7K*7ID>;Ls8^3$jtSd@WR&+us*8L((qo?a)v@ORqz^*o_=Bk#XU zrY2ePL~5C8jai7-qWRd8(bxhZguxu3j1&0BeS$XQv$a_OVV68=7##%ltS&C5KHv|< zS<>kq)?XdFVnOAKXTM8(rccJA6Lfd5e&2^p@W_BO<7x@t=Pt^l*mEwUw%6TkgrOWP zq@c`9tU8}Fk@o+9TLi!^q(Y6yEQR!+%m&tcecw$4R1I2q=rDaV=sd{XUTmU)ZP%WB z3hkAEEqhSnBJG9XMHm6~0;(b63sfi@BNq%wd9#uye>0@lqfm8J=n-**FDrcQE&IS~ z2GS&3%mhM0X#|`B1FDhrI&^qcOf9EOmB#nW@f4pZ2QTM|vB4>#{hLA3xJbk6=*QlF zllzIH0-T+vI)T^M3!qJ4Wo_P8?41U3)L>fP_rpR8#q|^}Y;13lnu3M>zEoXQjHS>d znVJ*N>LnX{w$J{CViFUmP0wzaimRn_`L+RlwF(G0pg%3R<9+%3U; z?hl`a+XlznDI(HTIZOmp5q98Igv6Os=)9M}pFqUlixE5VsVAri)AIV4U&pZ&(C4vh zYIGTh#I}6(TVBAv4OY*9nRP%#5(E_oJ21K4A{Z=W2jN~0s6YDs84`1sz(|Pbyc8IM z6Qev;2^1`s+%$ps0^IKhcgATo>!7EL(+3R)Gq(I2Ap9Wud~yebV#AMC2di;Ne*R8n z!%LWqEcFmNMn0%_R7^@ciorQNHCXx__3*utwEOwzh#G_U=CtmLHh~*<_pNkf4K^YH zDV(s)>vhFcp+2oTccQpNeQAU#Y&7(52{_Z|j2-tOkWj7nMs@B+B^X4_h74~Sgh3S4 zz^cW0+gm>SLe_#4`}ak;Y?QHN1+^L2@7Ez9kG}4(aIitA#fFA#TEo{Wuyt$a3#ZVA zH{PKs|9npGOn)Sl!eM%Vx`gjw^PU7ln{XM_Dx;uYfnErdPaLka^76gDd26xN@_Q(U zAHY6__n^o|9HWB%Eudj-TEmGAvI^iIc#3b{78=wE(r;)i20*YLQ(?s^(w%7#7uQ>b zyHY@(xlu_(iA@Zw6w=h;T;EC?Ds;*RsY>I9FJ)fN23z>;f!-K{(NY*M4iUzsCdB zTzy3~rHma#X~Tv{EZtzmlECk^5e1Bdd3Da#?PA{_-KrH8uG=EZEL^dZpn~-fuf_Qz zpLpt|h4=k>i@t%P`Jcu{C1(14o%p1VgQZLlY{a<}Myx-;uJA@g(qZ_|O)1=5h>H@z8c#ZwkLp8oi+*Ys)l(iO+z?-!3}8Q~!ru?^(rbZUB4 zPi9dVfd<`ty}(t7%rMW$8ToKr&hJc|Dik4}lHeC5Vec1vDZ>dML6T zozBOq#P?WA+W-aBRiIL^|2rKL>Lrj^V!&X0%fr%`D4^MKD$E+y`p%uEI$8PaROHM$ zM5R&BK=8P|R0s1j2`fv1obYEHfHEnhRq^E8Xm>$I#EERtf_h#sMWU#1K|=O1;;Qrk zpPY{+K$X$rWxlHNaC~kV$%h9NkdLXlN-NJZ$lF9fRcU5=`A-4kjm0gycBazf$0@%3 z>(r(@uc0DyWa{gTBEj%dt1ZNIng&VNm~xFpf1mhz>4Ah;HHl2c%ET6oqIy&W2&ii3 zlR$mw2q6{c3I?boHAi@6S$4~#XqIrw@T;d?f_!4O6w}9R^%{D z`0^o3QP3aCjiV@!s)Mu#;@3bbXV~1np^=fgk%><^{XPJLHxboAFhm7`L^!SAxFcA_ zRC(}s1#UO3D1vPz+Kz7>;Kd1b`>8daN_)De4+5$VD@Z?#lMpt^Nm2|zc5$Im>Y<5m z4{I4dbf$4;Xfm!i%$)3T-Cz~+D%3AKAcR06sSwLr8ly91ZMPT`C6*obsSU_(|PL{itX2f&bn?Ub)GO*kW|&lnzhu)K)$+) zN~}11Lq}lMTd@bHU1h>5CK}ffbZA5I!v<2{YiGz|oswSa7ocqDIE{d~Vaz^YWdN%i z+drN~1* zB?KuaYyxAkM=OEajvGb&ubE+9^239Jk#G~*M!xwE>OKX=B5I&X=^B2N z|JE<((DrBl1tqeJ`ak&q4Y>MBeSjdUkO}mC{=NgW{gclrZ`FFLP0xmaS%d8Xu@v4l zmD0|egth6*&q)2#kh}h7BA_ZvHUyBlpm;4NUrZ5g6LqN*6=N-aP2LG=jiYIsb~;rH zN*)J`llLK9yol-eI#}*PJXd>&IWcVLv^s3MF4zSj?r{FZy0t&@WY)3>}@>CW;kSU>J=%5zN`GksIdy9tMezSCne|c41%RuoK z+;R^U{_rEBz=n~^p>u1G{T8KEvF#95Z_A*J*IuO2Uwuoxr(UFYhCeWTqw8S|gJa>K z3rk>DV2 zt9HXoj4CBh2f_Lo*I{@;rE0MEmKXbXE&q`+=Psa&=6*_X$*4aRz(MGvBq)G)-v2mq z51}KAmk9#u)27}xs`!HZKrGgB9R2ZUa%C4oJyuIe=zDP(Y?^`8dw*O=E6%$K<$>Oj z@}UpLcHHn-s?FI=bvegr>ypKEyYEEMw zgz3_+aR!xer+-iGov`7X=;43nsA(@L6* zhU*5QO2OgkD5}F#?l;q~qmt!YP_7_Kyy9HycIgEa6_1;fps&jUlJ9xxZCDuNT*N&a z==@*ShpSbmhsjrlyc+klssmHTR6P!>eO2#A=E? zyDv?h{jr$ysq%1}pUMdZl4opN*afXUEblAM)cl z{H+*#YDLSzH}Fab^Kns73@70DhpEJ;1MrRG;u>&I|F-_Z)H?`A_m=NF1pC7pI)B+5 zY75H{t4kR?km9hExNiEr6w#$WZG84+vEX4I#cU8`fNYudB`Duwazr+#F1QS4?4KXN z*k~vK>*wO3=v{inEfmtW2dxLJc37oggko4$r%^pQVxlPj$CVVC+J-Ke{UOCeZ)$ZZ zunbuWMfJfK-p4v_8l_|HmJv`f^;Rl46xW&co_V>PE^3Awz}ogZON7E7&YMADxH2K< ztDmUk?%QznSvx@*R(Q7^H=6b?c?G2^q}(051Ob~O-^Vs=Bu`1XP}`IVV|I^x3qKag*5QmnT?2v zHI4NhN+o^dD50Yd)-p4}f3Rbc&WcB2ikUIyKXj6R2Ur2>@7zH+Kpcn_Jp3sN9`imq zhrwcb@Mrj&rN848Dh|_;Pmj;k@l=k5i@KvbsP|L%3i9zC8gf`UcpM(F?D}Grp!HRg zAq07_u)dg%ZQi1TRD%q4sDc9cz=vOu6Q{05oYg_5YDNHF$7IUDu(*zVs(6;wILN70G?nb!BR7Y#ziLlz zUw&^1#Aj0``8Hr!%f&YsBwae0T>04cnwLvFZCl~+sif@e6fb-vzcVc5I1m2j>G#;u zRj_D}!BrG(DH#Kpohr{^=0TU>n2zic>VE%Cf_!Ek3bedlJrhGXIe_YJ`Ab-b*zsCs)%( zN0jmSr{5uN0%hY^xz6Lxma<8iF>SIHan)uR(SnO?fA7sA#YtM!ot=Wk29@owIqT?) zAHgqza<}h5CqTo`^|T-%wjsfGu7)Cd3?Zh%0s|c*k|{paYCsfLE+Tt%!bzlua0Cs` zRfKUz7`883ojJe__=?uDzY61LEGT_uA=ZRZ2Uoprkih=zSXCA?sUMYZ-%ojqS5f(W zCt#u6N)SupFl@vvIDD9jmuvt(?xI%H&%s)Bs-$Pa!!Bb5kTVPhzaATP;5LL~@7pC*z7AGBFbQM!L)yqFlOzuCBRTPQx+-i&3Wg;FYqZ5;&{ZOlfxn9a$|}!^HracsqF9z z0>ao5!l?vybgX7zyE$g6*_{C2!^cao;Lxh4E>x*T)gb|CP+xXz0Kk>8hsROrp`+p_ zh#+tJj|~jJ`$Q?VI%gy#!Df0KOSpPvqfsZOYOT&q-Y`%{3lgh1@-z^H^U+J(5UP+& z4v!a62mNdWOSz!(3W3gE!s@gCvxaGHVjFd8E_S}W9v5=({DMYF*{%=lez9} zqgV_H+!pGf$le{PS=%H@rrL!+R9P55q96$6LNew7QI?yhBcRIY6i*~TR(3QK_dH;&8yll`;|!dmzpRnzS2ZXD;X1NWXVr07 z1NBZJ*KtgDpfpltA>_7_kzrhqU*Gd3dCo`E!?t`Li?mp&30%u z43@(vif{S+zJP!ho(_$!rZkptN?}6Iw*B$#(;;aDXd`zQ}Doh5z<7l(V;w5I5E1_t~_fy zSV8g>5`=PlLBZMNoe`0pUTzH%bA`O~ZojN|Ux#vmTcNSzk}w?%foVW39izIF&}jyA zC>vOQClulA0wZa_gg%}M`B=HW`J+!M3qn%mmQ}=bh0DT@%gKKcSQ-c&p!W;=o6bOd zwxo$YcL1GSvz?AF`GqR)E|Oza6dO_qv;C5#8?XXZi$lrJZ!kbM8iEaH-MOXM=-w75 zqnxCD&pu^l;s3&AV{-~;Ob1*Ogq?u~OQ83qe{A1xnSxcv=%(aE8$bM%w%z>XI2WZT3fk{i~k)Cnb#-OkF3A*Lgr-zHE!E!$zT+!Dx7#rU`yXtHrSnm0@M*+p=sGDjEk1Wdt_)uKZvm2+;XMMdukkJa2`;uWXp-3J-no53HLzSC>guC}pr?W@vbw>hTXmI2D zSJpMA85Y`72ETS=E2Q9-&8Ww;$AuLG04bL>PkvXM)M|0Oi`o&_s6G7?;ad<;05J7K z=KHZHWcy<;(8U|)Qw5fQw!Zd`nJlJb8XaD^R1grPQv4m=uK*eEjN>49d!s&uI(y92 z^?JhJae+_eq?b_=UD(mbcYydnJ{uzq5P{DlR+d!(Vxo<}7KlM5C>Ty9ur>svt{rRB zws0raA5NzMUwzoH(h&&QAK_=rJUqiJec*ANR9cQzop?&ajhw^oxP_t=&ub}5&em;| zkyDDgIW4}vuPM;q?E;l|SGeie>UDyEJUgiA*M=}QNHx`2jC_J%Xe0EmJvNNoB^4CY zt1C_X8)iB1u>X!zv+1eQG=iAEU=fXY=Xq)c0|f8EgD}x%)r5{jY>uC^7FH|lWTXHo za6&0tHS10v9k$4pjYg&s;a5MHYT2kv*Ab(hY#J9>j3)>({ep*Svol+>OV=9e(^q~g5BkC`` z!0iC0pU-5mL9ilFs7B79Vy(J#rnvC~sp#7^bbRGns=mEM&VMWd4_vZ(3sz^UDG}6_ z*K^qk^)wKWZ!vWyG{cg9CDno#Wt&4jhC{Vsqdb45hfc;Ui5<}ARKvuY9a9RXbSy!# zV=a6b3L#Dk%H5A2^faro)}qQ!>LJD_rY2$?1Ga}<71oPwF*w>JK;~*1X8t`H(<@9AsAA=ADm;8d zV&`I?cYRI)-fJjr>}c^*ZKD$w$Y@v*ip2fMJi@Df*-yNsl${wbK+fDo4ecn=Py5pd z0efFQmDXbce&0_&(@E%ayjXWE$;hN_bH1VNciu{8VJ*|wN$W^K#UIkIYtuh)T<;^` z3$eZ^Q?-hN?D#w2AL5+Kp{4DxzOBPK(0Slz*m36w;`>$n*lO%w!E&Oz@(8uT?LF*- z${3WPZC_kPz^lkW&ZF~w#8O$MP!)#9IHnp>ozA z7Ye5MRJM@GU$GVx3P%@9gr*Y3eD5QP z!|550&mZc^>1xZ$g?BQ6{Rdvyv>jHt6cm#{g{TKR(YqOSl=FMwx8)NYSP30nkYRlz z5&eHS4IH1((){c}U^j>gfPfV+C@I;AlOd>tk|vGSPqae6`yh^i)tzxpq#b8nhxSUN zJ%NPUKO8JtF^(^T8qp%1GEA%NH_%nb_tUi- zm+4C}{)IJjGms6^fh{Tx?FiF-K0bq;Yy?NGkhaOc(~M>2LwV$}dZl2&H?-(sY?L~Z zAxdV3>BZf~yzaReCo?$`;;3r-8tVMln{Wa_s?{sW~cFa0*GMQ07w%%Fs{L8fSA*^-t1%Rk?Q%?F4b!GlH8GAIibmidv4#8lf zuCQ20LmCVn#QD`n5hLCQbk;u~q{?0Ep(cx>Mc3Racfqk%u*WCf_4_hB@aUUI)*=JPPUI=Wmz^|_yuYcH?; zK7?W1C>y_or~h=u!~ADw2K9U6FEAdRPV3MKc?(xk{K!ER(mal8(Wr%s*TNPNmN5r1 zC~nj_G~~9M8UdEZMaQs^HGawGw0QibxV|Bt(x3i-j=c9JMfL59OPj!ZLHMf8FQnRi zS!m=#&~vpR?QKh=8tuUC#mZWJPXu`8Q#mHqkR}8$xW0 z>PU6C^>hE{Ux_*^b_9-L>j@(RcBkmmAvaw|6+rxb&;FIdQhL$qX}8jrKAk8c71mAY zYgSLyWad)+p#my%XVAdEJgvh#!{30Iu>&SH8y|d%T$!0@BXkCIMZt+FH1Ng8<=E9G zVKZ+BB;9-|1H_%Hk$U|XFU;e0|tD$NoQ5ODWQ?kk< zFw|uj5Uj)j0T>=5;+Q|*FB`uy-})EwZb^CHeMvb6P!o=zyn69$i?q%%AbL8WeF4|s6Na#{py;&D*N@QCD#n)#}Dwi{cDMgH;d z?{?0_fE|lgl+oll_6zL8u-IR54ASOu^dk0sgkmkx5vlTRc(Se#_j}ly52WA$cf!A+ z8C9p$fXt^aUm?60pI;an9WCik95_f>8@50~%azUy!=1l;RcH!~GI@P65b`x-%wt72 zsF3L!f=wRQOe-Mm@%BR2gN5RBf@U33u|Kz~m^(>YqmHUbZCzIpd2m&$q%j)q5iZoPWoC)DC+(`G9GEw`=ZvI=px(UHr~#feUU-!S(B& z!G`lku|7N$nqVLu`+GsZ_=X>IjB@ee?0lf*Q5?8EgF;3<2ag5>lyGZDibn(D7@q+j zsxt!yT0GA*o}R?FY^rlD;N(@oELge-*3f0t=Az3`XrwhLl5c!Jn8u*+jpO^J;9Gs0 zDhtPHDy%7gD_oVH%dhxo|8VQ~nZi_Q8m3^QahPch#%30F!vA6V;tI2r6C4#m4yZ!J z1!_1>T zjdGY)zzDN8jQNguiYMeca(NX$reIq;Tf$WFI6nifO3U9$QswkDhYrAI4-+UOAUlL} zn@YRjli^uARl(u%$vzyehhiV#$IhCDn^U zB_6{-I*J5WgTiou~D7E%8juT^OS zJh^vJxyV-X7a+o~_EKWL0-%?dkpMp2s8+`fVsxBpFjYT}W_>q1Lv^$j4#)NP575|6 z#j)e2BYULIE~sK!5!5Fuz_r4WgCIEq=g0N)ucMTW5m68(yxB~ZOZy-2`+z(!+GLSl>64V^xhl)r1*2EiiL*@JWC-|AKcCT zAQhe38I_jSFdD^7z%AtO7^<`!kS356X@ntG$(of^x@HA0@KTFO=iv;yKIj-+igNfM zB(V%?arOkg6VV_g>sQNp$FY3}z*w{rSI#e^s(riVkR3jPwk3|BkQ*-%w`}J&)H?>Z zwU$uPB3zFe976HuUrG^a9Vma^9I867mqKtzW9tj2kuy%W_p8atqWYpj3W;w?C%*d% zmvNR*6za8P^_tgKU{Ej%T8RJ-I;EHze8=$IMgXxAlhdLLl_a~~oe zvQcLH%PyqUDHACHTM>uNeU(PfokyK#TuP}IOu}<2jhXj74gDP3{fq_;G$PGvs1d;e z1|yaE2Ylxd>+{Fq>=y|6xSw>SWkkq*;W3KpH;BSJcA<>BXP`6JOO{TYX_E8j89-1V zCtMYb3^H#VDJv)ZU0+l{6}SyNvR6N-Sq4zvKklde@4w+7aePbo;oGmkW}#K+^l{RW znUCK|N1wsP+CTUM+~QZfW~H|4qLCV? zop#{fKWRB%d@TMLFkl6J>zFtHYi<8s*PF1iK7Lo*efcB}7BspaVD7qftd{Zevu2!% z{d=Sgbw!2ZcXIm{Z7X!am4^w;t3v?I?vF5&LVN^RGLBek;K zJIwgS>weMpTro+9w{5ewW5QWx*ePF(`glrCRQIH78VO56d}eV)`T-=vB0QM+x^$cn z5B7kk&t}6$QTf($=-{2#kh67LYICu%X3fPh6ty*=C=An8f|USFvx-0RVoO5!S=a;w zsv*ojrg%qu0!4H;)=2?^uQ0_?0}_r;naYDZkHz`PZB01gDXHN3n#oyvA+1`AKesKr z>Z}YbCE`>ts91osl9v~Im|a=>slKF$qB?cKf#5Ca@LwOIMBLXF)-FZTsWR#xzP~mW z2-)@$SH@Cg4AuVl424X72u+K+!P%Q7Ay3wx{`Wdy1aJU63v*(>*|9VWsmpVGGr2b3 zjuwF8HY5>dQ7J$|Y_i6FU|V=HvVmmnE=A*E>cFMTj?PfJCO~Dw&Zi)ZJy_L)L4;OQ zN%Yy|h!`;hJRkB?uKBog=maiUPFn(m29k1TGtV~G()rX61X5Syvqqx9>hP|O8aUH2Hc4*a=K}o%jTzmcnB*o7Eg#H1Fp~K^S7C|x1sl(r1GO3?nDtEYn zBpUAO&HMCSY5@vTGMWPR zAm7k7iIn!xlT`6i zt0T>z;%bmI0q1|pyMcWC<`VFTMuYRQ8&%mrx=t8&ln-Qj%{J8HZjAA42q*(sDtg_}Z>>4EYBVNA*ff2MRYZ5uen2<6(h z0z^F5OjU#Oc`HgNjHhKz18ORgHr{!9W&wsJc812LWqKVz1N@LaJheTwzUe-y+PYrY zBPoZqT?9A^0zVt>ISCnrgU&}`O*;&0(tPhQsIEN**XmBW9fKXqlPbRc_Fwh;J5xZT zZhY%xXiFdqz_ZlM5-t!=^J4i1XTsPbz#rilH+bsi{0aAAx|oM+vZf#|_!^nE(BVKp zo(lQ4#+G+HNg4NDN3Cv#l`tq<4OA99B___ep2~M^r~JQPL!IZRO97H@yo2^#IEV`R z44{^i&!_OdgXzRauj2&JD7pE&X4fXUypJgsQ&106vT9iGSe&~6ci3TLj&jT!x-)Tv zoFSF-9*Cgiesuh!w#2)ao)4#tX0-B@&$OrzaG84QF&V`ZNi_lhl zb0(I;y@h+kSb^7vm1926%jd;l^xF8iS|)-9IHmYxp&|rR)X8NFMF3!)srkh71O(r0 zoBYm7ifG?agal_yETz8o71d;AN_bmz@bNDrr~p(ldhl>+|NPrj31LQcVBDy2U^ETW zCZkhZ-FT1a0R;eloY?Q%=E;v?DP!z>13wqip(nMu@;WM9IGk2MFkcX+`K4E3@LXWRYV=~X zQO)wtsqTB+S2y+<3T}nvQ%vbvMJevo`xvvzFSu*?9keL~sDMb^2m5yWu#VrXq$g3Y*4J%%ATI0)$LfRhyAyzVg3^+Z%-OZw)A17m1hF{5PcfP zp_M^t)5x{;W|(O`fN3~IMx|Dhi)r~V1*KjIY6%89;7HZUp-h=fp=4?X31A)wQxyBN zQv!)nEr}n;Wi|lO^(mc6hwen;mGFl2=q(|>JoO`m36t~UFv%0Vo#csW*^9ez?Kpf= zg$u>zGQ#=UDw!65WrHjd@93wIb)TcD1$rE?>AD zFj%?mWbg#XI>#HB*R8MpB(K`@{A(xpeBk-uNtPElh#%TTn2_yo1h$o}*v4{!>)1kK zKQBPF>3-KE*cWk{2{goXu5^bV!#v-&>2?VPs5obvkp zP?@f5+jn~&8rXM{eC}QbcUynDdRkTNpKzm1ykf73jK1C4d=tkGQUos-AAf6#=mvDM zD5;xH^TJ1%DhPmClsb+BTH=bMdBbn(KICH63i67WD4pmy)a}b)v;l%W_*>?u>ssh65%EDR41V$O-dYNkEa_Fp!em!=3Xv zo)0R!7Q*4UrN3bEUe%4zpbeO#n^&8Hans>`r?6FTgd3EnYNO36U*0e8J+#1d8#l=c z7=@^QtX%Zo^0NuJW?_^`u&s`6!TAbH2oB7TcHf#vYCCPlA`oZ|A=v(%E11%$0QP zmGC*BBZ?NK+Z~gRZ(|N}GCAC|>W(-hn;7PmPBMj)|BlNZv3vk2K=u#IpHi;u(Y=jQ9A; z6;7RH3S_1VJVf0ut`)%-FOL2$fs`o)b3XGynehC)0?r}KeqFK9M7o!l((A4_N0vTo zuS*|Tdecml%m+;6^NY-&d+tS2Ehc>J|C*r$LaN=plZaKz&EPx#%HSzux{Vrx{*#bv zNb-ZwDYiNJbZ)3Kb-($EiEUiW)MB0KI`1h{eEocs(nmS}L(^^c*Wmh?Bm@0ya~&5T zV{?{sz7_gJVIR20l@Bm4d54Y@bt)p|ZAubtRt*a2riLxdwE{yG8SF3%=Q_>WT!j)- zSc>i6`%k;jTmiCAu^2~j=n7dUJdovu|M%GA=C;L8n7yp}fBW%Yni&t?>s2GpDis8t zEX6bCvRJAT+v(-0Cg{3Ls#A`u`F%=F54=-~%LbdO*Iu%F=w3E!uIV{pl9!WwF@VxsYRgaK9Zp7fHBYacT|1!OG#>=zF1K- zOz-)ZhcW9NuywWvEOpO4%G`Fl>G9QPO#SPNAh&0|(bOVQxex2jyH-MOPnljPFU)ti z0Ce0dw&Qugw+4$xIl8FN@CFWp+N#Qpm%+a2foQlW^ehbiP~i`^L#9qKM>cP>OBJX6 z$HV5t`v&g>Equ*+J;nl15^3WaJ~x?bQc$bBT~}K zT6k=JzEZD+&a_Cby_#0Ucdx?Qv5@u9EQ9DJ6Q@7j!QR|&gmsu`ad%ezW&8^(L2M1D zxB(@OZ$<6VAJxEv=>7m;zi}-7zKYM7)*rTM?b2^7!oaX*4eO?HHGQac1|&s+`XnzJ$wZq!LVgLh=zamXBy{z*T@oG-5gu=T#eg24(RXMd+X z!UQE|h%1n2e+;dJD`G1E&HWSxSF7>ub_vYcG>pkz>&($AvtiLQ0Cl4oJ8!lv&zl2! zTqrVR40Ax{N!16j&%&KfRT6GuV6z7zwMxmPDQ3?Pzk};OL49y^)kEI*Cf6^3;{+L&Y?#aRwz7Rqu8{YT_I)Bs@-Sjx)jPz`P@|*-nM<9WRecTia z4-ghGTq#_L!h~o+x8jp%FWn>T^1h4xawp$D*Iu^~5yS;;k*RW{@2zF~usx_)Sb92{ zn91^;a|&Grz7((&<|2*)TEd66UQkrlMg)_>QgoLLv&rE)@G$kFwB)$W^LhOU++qc$ zy+3}$47(Szq*I1BzbBYG%`yE`2jyj5x8z?eltLRJ{6LoC8aEwm|J@GVe%-sAMa0geRl{4R2QS~K8ddF*XZ2_+}g;ZKR z9fdP)^-7kD>7lAz=2DVc73No*&?`&1vgk?L7l5s~P_P${xyA}1YGE+duY3+W`#3fg z9Oe3uMeTPD4VeRa4?SM776i({6R+WQ-@rex3^hm@0QBZiK_bZ)u!+1~J~F`+OuC0l zLP&E$`2vZ(4}kbr{qr^|KEtPye@;MBDje+HQ*b6s7%%vk6Ki7I$;8IQwrx8T+fF97 zZQHhOO>Dlwey8?o_hReRo~pA|Tkrq2yXxtSe!8B%`bj_f@UyR1lMb2E!Hs7faDE|c zy`4v$u&9u-WwNJ{%73SxMZFgz@dr~Qd;Si&%Xa%`C*6O2thDkkG*!00jN0-h(pFcf z6ZX|@9Aqwlvd5bGJixy3=NS|y0-R2}&T_+OX20&(z$mET_r1pcN?m~Wi=F1MF=(X)a!;_MHSrUGGP?V>0JX@xow9Xb>=5q(pK;Ey&eFUrMibC1*}| z4^EUJ3n{!n4)f9V_y&77KGa?B4M;V3;1mZh->x~P`WP7v5|FcSg^s{Mi#-tbzm2c4 zc3bC%kUsjg-0tTJJ^7L^@M^CER+GyH)v>W1p(_;yv@XO531 zmlywyT!aWh)cw59H<F3~MyWQy1u zVHm^OHYG3@tU6EH%Y4M)2BrBUc|`%tzj1ojGav7Uc9gdaRV{vNm@SHlz+(*Y>p8n-(<3We_AfOekozT$1ybvWY0=- zOjj6rd+KLFnb)v+gK!&2VxZ}M`(RR37r0T&h!@y#4Sig|>sfn)sG;B+KIJw>Jh5Dk zu#Q`;E1qDsK1I@&?pK?ZI4mIiJO>zJJwap>=)bk9Q1`#@1*YyJ_`Ifp;SDENu4O*qr zGiNd4ek5|a4R-8qTK;w!7AYA8|H?{sv(9eDtr#q4{!ki#%(K?_eqpis3oYCKcQoyG z_aHmwHgBDp_YKpEM0TNJpzGRUbg`58XQpxE3trJ8hVIwic(OjPF+t_X3hNZ<+W}hH zf8|BAS9J+gmFoYX2vJn7{YbEY;>?;*%=0~EU-UUZXSMj!J%Y)Xt)Pl7a=RcOXjpPx zS(VvNf}d-={`I?+AF>tK+FD_#YRH#F@NXx|DepM8SmRQoe>Pe+BGj}xj zBk#=01=@C(_NEVtf4r1%yBNmNRcFfdt18RR`f1HfPJ+?AvA;*~yLM(ekOhf*nK#4- zRT>h5%{}SZQxJ2(gdRBlEEkG*(WZ{PLLTS)BXih2endEPgoKsPXN@rwWmrujab%Tw z{**-Kkcyt79w`2pcA82_tug2*0;z^)Gd-R*{e`f8Yt2Q>h@HhZTfsUE(ZzqE!_Q!` zo+AvACxU=SUpuOh#CgvmO-y^sk8NZb?|u0dK>nAkmA(Xa^^?K0ar?INGM{*kb`ne$ zN&K8}GfPdsN4Mq3Sa~`}yvG!7GPGfH(N{Tgv%7C~VrjJ^ILc)pU~c8w;@mayizYtt zTS>p@B)f708B{{`fQk2LEFO2w^zM|CGRAqi`Y;G6c$rUY5Q;RP3k-4FP9RGZEX7bkk>)WI_S z>rtQYN=>266jb{ar=F_3l{XHO|JwB_ECX}1JsLmBAxPjYMFVC9a-d~67EDa%nUt>J zEFcqb%Oy(Nmb`^(@Jl8qTRGb=byETCN&<`#cVjV>!cU_y7)el(1cdDEoxH+*;Od$9 zY{dbEsDV~VZ``1Y@W=G9oD=-kgCV(D&GuEP;3&wPeOQwJXRoE7bDy+yiuAEbn{c>1 z+liOj!QV&fd=ldY2ij$r-k$hGX8UVl^CEvVS&{P$aBZ6#>yrKCUK2%BIT%b0L<8<; zfr`Yp{zh>?w(}b&(Tb)h>!)Z7Od#4M7kK0iy~>r(y0sO8Kd);dcsmL zPj_yqQ|`Yh|6?~JArTEXKXZQ4{>s8$+}&!YkVr#{b;Dgwa*iuI>)<2p_@^5xTri9v zG?mfEv1Mi`D}~^Tlv_LzI=W3?Pmwy$l|@mj&-3?j4-XdPf7f#k zqORzaHamRA9w{aMl-CMWO8yl@6UTG-DT`Fld(=K1yvDSRA~2AUeD^dqJ8GqUrzl@= z%<5;H>oL+GX4mPVw=b+aPjvQ+GF6V|K{%Keh;3xOqrNSEgp|KOk5N(x^W`gxRiC)nZ1-@&nVAhkb~w?u9F zISw1xIH7y?l-q-2d7%7B^1$mCAhbl-*7;XmxPz_0IVeEe1t?2xk^nyhZSXCVn z>Eh=WJlikQ%^g7HULX%x+6ZjV!S!5JEL+UI00AjMBY}{ZU(l6?W``fjx}85mSuF_q z?}ZPL*mM|q&pVySO{38C3@M0 zrABVR83EV)nA@c2xL>sS`&Knh$hQeLef~vc;KG-)z~eW7vK5QJln#?I6o4hWPw9JP zyPFJdNExho!eE+~W!ke}rM{)Z==g|Ff-+^`+-0ffHvJ@V2X2qbaqHN&{WD46IkUv! zz40H+O~0yNNW_)K!SU0Gm3tQ8>=GR&0lb4)Z3d>4xjK38YN{ldeH=BA3~#eNO_5zr zbe7R0D)^_BdDyg};*LDr^t=z#%H>Px+`BFvfXqdd?LzbSW1r(d$AM5M{^y7n z0lDZVcj)@K4dMflj{JiVEICdIicG8>MdW~Rmh7EFdnF8zg*!&awr$(CZQFLzv2Av2 z+a24sZQbxD^X+CkKVY`Ctfvs{<;6p{}=x+4SDZB4V?V3csB(5_fr6L^gy6MDEsODnE}MW zp9lWjLH}=Ke;l9sn~8y*;b;BS^*f{O5qbDKNtscbC0D9Ur6tV!*Pe!bnjSn|1-H6t zbj3Pb4Mt4H!9Ss%J`>!n_3(y)feH^`Z4Lp*M@gU8liV}2Rarj;jSAtN%l+nG2lQ{v z*Qn1}^HY7D=|GWj+v8lHu3biwUHvEjfZXW^iXcQDB}?ihUxPu=(pLljdzU+@%{xUW zdVeWVXo;+LV?@ucts4^xf|xb06A*uPj(QQ79wKqbdtb*+jQPGMgSvl_!`1Q+sj9?7 zgd6ez_>d1OMZ3?U*K}%)0ppVSnFil5SSdB*jc@IX^x9GlTTgQGu+r%v4c&yYW2bl@ zVpmv?d8&qGPTC-lXzLknX~nfBk%Z{<-Hg_gTph8=_6RDp0gyOc^ zyrn)yUzt2kr!G=LkU{+`>Tbdj7Z!o{Tq&m zU`YCxMO>)6gGgQx%__2Yrwm*3&Pw@9yRE|NX<5bXM}w(4rO**VdwWx-^vi;nPy223 zD`{Pzjw-ZH_uY`NMhL-i!h8zV%C#o!n2}&4m z9NVIwm-Ull?{-GMe=cJ*jY0l?_GqZYW~#(>2mFOUP(picmuReK_B)i zt|^x`^`j3fF*tK-1)e>JT_w3vqIKB3g7UYlS+fY0=2oo$00TW~sf;uKvSdE+OYeD? zEIz?@x}00NS_7vJ{o7qd`-jZnlB-Z&Sn5*z@v^z^k=13$H4w5rk+ZzgJMi_Q7nS56$ zLpyVlfT-}a#1O}|04kGRDCvBq(osDy(}2?sDvYZY`;>}o-1a)ZW%0jFZna}#mYN;B zz)5EGlY|d{k?HEOE<-jSO!*nASg_DQ4QIsPfC7$bBJvzFv^yj^8PB27nrXmA5OZ3g z%zu0uGE+$%Ma~=+lBupRV1F#fgV(ZV3${f2qt}6_69Ef^1Gkp3wO`wE<{bMnv59ko z$v}?GoB0iIYNDRdHI-JID5IF>_FlYxwHNI;ry(Kdk-MRt=&j!`R zzFbr|;`}~$SyXvjcEYXO4oyP1VK9uD#!_d5h1wrW&j*(t678N2neL|fC3Oqw{D zFW=kM`)5ivxc;GZPH7canO5+bS0og|81f9XQ=>a_)LNf9>h1frzLlpy?@$2%9>vYP zs%fCT$70_1xF2W1o1(xaHrL?XZ4Xi1bc@%l0Kmfkut=fpmKnVw0MfA~7?ui5#xf!s zn#F?#Si)tcQYAV%x^H*k)sZHL<)m%7@X%~O?XDIn4cMa#M^)r&v}M`dPV8)t?$miy zgMB$H<>tWKb%WUb~EV!seUXdm~6)d)K4p8V#i z*s5F=4@L%+?9g%-#XDskp$2F)m%7TNJK{OFwst6|n0`D!4r(i1e)0A_nrqIMuu1to!%{YJX*&KXHv{ZA{!jR1V)+Q5G`(+(WYGrb$tWFhbxcMeq zV`|}PP)`4jtt!)^eCViSek--u;5+T}>h#HA_40ZNZthc-ew%*Tcu)1;C!%CcT4A0D z!gvJ{&>LsoREkxl*qaw2ps)+I;V+oqt=1GgEp{6s_y(Fi8n{Zr!R%v3F6gl!gVX-A zUv0`T3FHm}bJv3<_VHxdvt4v4e~t4oi%{y;w*ocJ1DrV0L-8v=Kp5tgn1|x!+~S@J z`^1)0JJY(`a5e^@Z;|4Nf&Y-5dun6DDf9O&2R<%%PZZh(c9h>l#Km73X#qzp


      o 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%0DwYjT&Xllw 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 z z3q42QpEqE@t1bXpMBa$BgXh|?L?pbkj7MBoVdZv6m2~`7H7O#O8dqL>%J-tSFx25g z3s0?^4?|J&;h=cIzZ<@&y5UQ(<;$?~E9i!cVB1$=y-C`7uOV#MeAy)yud|BZAQip| z75)=~Z?TxqrR)8Mw~6*UpuK_IZ|Gdl;$4S^xdZWDx@!mG{dDX=NNVDPbhQH^&t#+^ zEj~`8nKg?|DAe44Z;@tN9__#C$S0=D_GlRb$^v?uYEu_y60DdZbCw|6n- zf2)A-9f*IAJ&BKvJqZ%^2el{hBRF0RHhw}h@HV1>pSgSYPOXr#a`6iz;8$YmH=~n% z?Ym3S&$&d=Sw|4RGuc0g?4L0H(pLT}2}FMroo*RSr$B-zsjG?Z8NRsbk>SG48X3Ti zBp}wzP`L5DqSZ6Q4VASr9H^vau;SA*7%CYVUZ_|ZfJ$ZtTQe(zZIqp{B&g(MI8e#W zpqqm%_AHXm7AQXhP$>ZM!VHFrur-sK!!PK!sW@Mnw=F;Nv5qaH=%jdR11 z1_Pt{mmvZ9;B-7F`evjG8~SA=hYcHLc*2JM8BW-+F<@Gn!C^xgU{ek-RAd-o!zLLr zY^co8VZ(q7M(1Qb@B|qw|6eULkdZxzU^>|76@d&hEEz)IhXTgG+REBCCYKSCgCAVB zO&xbQ$0eLln%*s_FyyQtu7d&Z$lVyj=Bp!@%3wkQ(cIP2*-hNXGmOx^!me8(*PG*N zzGDpjD)QN129H5? zswP@B5OGPBLZ+5zgRz$C*JU`zV_cm~)I%*{rIrS$r4edrf?6U_%PfytX0uu{Y4)rM zi)LoOg_@5Vs;JFyZ#P!cRfiSY)kTb%X(eX%hAvh{!y?HZapECi;F}zgXoDT*C_A*n z4s&6L4%lHI*kNCf9rj~8$m{erK{1a--k+K~z|eo(qyOH#X6Ww*#eq!bAR=?H(a};@ zIm9KijCK#D+J~X`x=ys~>t4m-4goXno$ro&7r5fyBXrzbh%@XSvf@Zj0DP1Y03QwA z9s^w;n-l;arvl*PVU`nMh7&spfM-wue3B6WFC*!&b_^HV|mGz7p$djsIp zRRDYjI6f0>oCP!-3N)OZq0icS^l%Pa^jzZPJOdaDeS=_?h3I@Le?f*j3lSUH2zD=| zVi%#<@jfdt=CaF3x#;3VNo7cwZTw}^%D`rofnmm9jG)RbnKfPhu4z;fHZ=kKT0T=; zoH7!<#3vHH)EkLjW<;Ww120z~61@`ky9!ph+Kfc6p-A*vClb95Q9wvX0oSwDR!Ozp zz__`Q41AM;n+siG;?4B^769N)PAVLzst+YXJiDz4G=-aO#X9Hj!l8IaY9E@Q6c*%X z=+J>h_cYrg&Gmt{)#|1H6B01M<%T1SZuaD0MQZ> zvqQDb9r7$-M4rpV>);~XDkOb+Z!;+pywyJvyiN7!+kuEXfRsDYZ|?#^?gj>CX$;(h zNN`Q4PTb3izmF7qe}?nU9({d)8MxW;whvOlhccW~Tc-BK!%hX$yFTLfu8%73Dyxde zw0B(-4n;ifai>oh?(|6r`4ohHI?0_rqulAU(9d(w$Mc=I(^=$BUohP1izMnxaHkK$ zoxZG;{|bmNf;)ZEaHk~KtID0e2993`8*jj!J_vXEW`^E~BI(~^o4if!zhiWU7c)|x zh5eUcFWzNd-y>e%&oIuy{#zV!29Bl-S`h%m5VVzRw-{GZ<^}pn%%UOLD z#PKE;a*#1U8(3!0R7ph!K&WBzDcNX@?k&Y5i8kjEPTPm_0Znqfkpyj6$-|O-UB@+t zHO_5VNxTJ(PzK9&9!C*~CuEl03jI89yaIm6GN_DaZ>0Z1Ti>#^gz*HE-AmNzQJK0m z0ai(fXv}td(MF6y$%9V2%7da_E|xc`+SLgclC?dggbj*dlC>!u8>p;32-Y49YY&07 zhr-&M!rF7SwKuak91C?@2}Tja7&4m^9<~4;R!-ByS#_0`IiOS#BU@U=1Dg(R#0ZOB z;z*_5t)Skmq26tv-ceBRwib^ivJt7=(UwjKqREQwSO;UM>9K~_sj@m*KHQ#bjiXxQ zE${N-4t~<@NQHN@IvFk}K*Whk#7PiwXNb59MBEi3PWFg6#Y#0?PGydFBPMn?UqwoQ^sK9%9BF0Ga%-Y8atrImC3+9ti=|~ zbCPUd;%Gl`6p?|cJb7)mR%XKm`-XJtT2c-)xwA&UHG^Iudx2<0z`K!U?xTb-Ap#YLyf)MiFj=pRz=Y&=} z-#Tq=4M*cu;z<9lbCl{jM?;gxK*PtP>l_Eo9uLhf(3(8~F;4H!_!cL!Do!F%7h29% zKvE=(#Br(qa6T}g5VBsmk3oCQhFh9u`;7+Qc~=v+&$(nyNp zJm&a(YVZQXc&DToVc96+Lauia)w|dnVNu``Ke;ZY;+L6nk#)u8kn0L1*Oid#D#&#; zS9eEo`ZA$;1BDxin(;Qc5YBD4RZPrjvO}SJrMo-z>3zv8en^^O;Y( znBM_TMR>U!!>9_BX@ZsZOnl#Y<<@8?9@n4sS8+#5FM6lX`omq`^@qES^@n?avU}la z?*sbo2ihJm*B>6F^@oR?^@oSyEsoOO;t@vUYRmas?osYOj}gotH#+BSt`Xx2`u-%k z!G*T%CfVbEYb+j*)JB>ki4HssUW<2lDEokX^tiRd6ItpD*_?1A61VE8CJ%I!8U%4h zTwSNEkC_1_`|5CWN5Hu_%CD*4mUK|eAMXctIR+^-M|;IId-W)DBvpXTmY7A>!cOosO2uEuELs^d-Mfe zIYm`>IBA`b?-n;k=Gbhu$rXJo*4i2q37K58BZW~YKMc)B>5WCnPP0Av5r*DvVWO17 z#!@lz_|g`;0U7#Mgm}TDLK|KaGa8AxXOjs@9pm@z6_pdA5zX9C83EaO0+`kRnzXRN#t#SV@Vy?d3mIfH& zJ;vSp1gZ}Js->*^Av3?o(p!Wd5t)zG80;L#FhL?daq5{ng`Zlkox;y7^Bl(Kmf9(l zi$w-G@rC8yF#OVTHVnUly1s_`zOlR;hTmG)F#Hah{vMkB!AiYhcs6Yq{%AQHhKot? zpU`hVL16Z?GUG2G{;S0shF@8p^B2Ea*f9JZ9RC3}{zS<35kj`VEPX1i(kx4|?Afjt#I`_(!T(xJW0Sy(%u0@2>GMyu1Zd{~ivf45- zp*Aa%)s~sb=F7@tygoSRcCBz@v+Rzb-ap0s2z&{S007 zO4h{%9GkD=9$jq2BK0ScHqJDb&sKfjOHFLhl4===QJ(3%#i55RQ2|hFqCimzPz(Sl zf&j%pfMSpb6oWH$_AL+-&v%&46EvnhXHN-^7F!9vn7&eTX zlq=klqL#U;Bd+S9nw8glm@U3zra8-KAZ8j<&N7-{q=+)oEEs7vjMNMxwZKSGkC9^j zvy4{O#opAsFf7!NY@xxf+0#-YU&OhE1hvqX>AX$Yby9QuG}lgq=VltO`036jI-s_F zl-l-%+V+Fm=0R=yLv06m)OKK|e#K8w6$i0I2UEj`7&>cD)>*D+*F<*tL%IH8RR8cy zCy|l2;CxeFJ3g(m2mZE1q&XgxF+tq2CkA0lEXX8196{uc1i34_r^t9Qg59HfHcTCRE>RlVLAZ;UcGn6erx3O7=vn^5Ti9NhNz zX-n{DDimKTKj!1Zy#8yMw@Ag!-kzvuuebQjUT^izUT-sIueZahcVPBK-HjJ!Am(#!TY`zI5;pQ;|o2u|>(Rg@;;O zMJ&V#Sk2V+aXYf0e4Vj|K+Oc2q{Qqg%Y;y4q>g`;L9J!SBoRAIE8_)GnnncmDu8-| z&o*w{e1fkzQY%8DV<44oO0+chbJg3brn=m{`WLjYpB0MggL9OcUw)-?&sE}4|2flR z%2zxN^gIDnJqcg&6wvfE@bZG5Gd+W0VCb@GO+3q1dX7x+e5P};XIY57z~VjZa+og? z>6bE%vqfYZ@iIK+D@yuBkp5Lj{~Dx!9n!x6Px&xB<(rxMY>}iW-eOtarUu_J5cguT zi6Sex`Fpk-mQ5C((yg_M=SWWVr)5@iD~uM2Yn&#QF?keGaj{fLLF8 z#QG{zpDfp8#n;T{H`MgEhHM`u%T~m9+>?+mzGEWa6OkV>om3mXrGIqEju$=`Q{A6X zcf6XGFOU8teun0L$#kCm{8c*NY)sH~Y4Ka8diryi^YmvIn-ssp5P!fhf5M0V1%v$! z19i)C8>oAh&a&zz*dvQ~GqY$nGt1Z_&GdN>v?mo?i;L|s+^+w#3&vJ zP0unP2+fe?l-!n-V+(p9G&2hqys~h?D+}A7^51NJAT&1%_!?rfx(v=QkF}FeVi!Q{ zWu#S@Wnj|?SBi*uu_C@yYryQkM%%yIu%`i2cRSB3l-0aKR82{sD+4QM85c{e@isdY zDKogNq=%o%gPJM7WnLE0Zo(8V#eIAVB`A{M-|HyiP@m+(nPr3VCDkfwc_-hA*z(8= zB@0&>am!#Cw~VSww1t|JzRlDeHN;}p2tx}2>0U;bsti}9fk^$xQoG&Ktwc#ys?CjF zS;^ty+F73Puy>Xd9`?z?WkK|>bVTDP?Tl)hUDd0h~6sDV>dxhuFT@Wa{zj95PkG3-A4yz zaY$a^t2i-;jWC#$JS59Wqv=z2C^NTlmKlC-N;NmjN(!ilWwDpqT=BjIcpnbltHAq~ z;C%!F8%bYsJ~GQ4P;bSoZcPntW8h`etkePZD6X_ERT`b;38=U8lV}W;9h>DJP;U>h z#woGJL#!Pj){YQsCx|t{Bi6($pMZK2v$-=hy^A5+m@NN`2wlOp*p;bIChAkNjEe|e zA~V%bTe}g_-9c1tUb(xH*aHfirWCd(6gC|Sn*oK*gu?dnD6E(ru-8?C2C!;pHpQE%|ma3i(Vlx3{(nNCAQpx{|b!Ly;@W+=D? z3XVd-F^_^#ye zvCYt~p$N^b!*lDxt$cuAKK!J*ejrp=7mmlpiEIkVshRlUB*of7uy!(7I|Zzr3MHS0 zG09=-bXId0csPSCa3;xc7RxXTj2-U^7tW?4=RnN)b`#T#ROD6EDXVIB7BM@{OLSme zE*5Bs*e;OpR~wekQp!GT_sLc+7YWC4AtDm3Yi_F#%aj30jMJszkjcH=As_+d&Ea#C z^hjg-c}kDxLys3gj~7CZ7eS8~LywEK9xusqo*gu$6qmBPE+buBp5@$Dca^$=89F;l zA7{UkDqMvM#qv12pTfk|PEGSb`!!jv1MSz!xrodhKs3a4S?WZ)uFrBGX}=-M zInsV3)Nm8ja&wmVNc$~WIMRMAGY_f*VXVPcPsPU z1LF5)@sW1P7j0;_b_`$v@5{oO_WQx|1K{I9xS1>AW*%}zG?yA4X0ts)j67=inLD%m z4z)Mn#{5da?qkf^@OG=$`~t4!$0>Xs{Ue6W&U1trT!$HEj%K7-{HUq3@HbZF59tuKhWwUGiwA=q5#f!9Tf@XTQgkDBAL+}5U2CQrX z(x0v&E0gq*m2C`J21G@6HoLtXg|=LvEe~kR2igjNw!&;4vi`)7Rg|rVEQhWrW@D64 z{@E(q56*rLp;AM$jb}xp zY>dIdLHuHKC|ci4hLZ0ahXo~n^V|rR$)fCXjq-HYsAz{}M7a@;P;^ao7FvdIl$3}b zjil2HVSZdWC^q#fah5vGxS7)9Fz9h}=y40^aX9o?mF+&wxTXBN9P&nxz#~^Jfwy9T zhh)2lmaUbv+d$e;kak;0I~vk%2h`+}tYa{&^j})x#8`&R_N1F}2I!Zr`gmr4M7HZ8 zYa+H|cB*rFJHew(P(n_Gkdq+f&Jc1J2)Qdfnrw#Nv(ENCr#FRVnM%#?X1KH+l3m)) z1QoM=&r}rn@y!`BVm;Q^&munX1ycH6g*=CUpiJ^dCuqVlt(2aj zmj}hnB=<}mZ7+qvYGAMi7z_b}wZLE2-I=jc37SZ{m__$|Ij(en&{udY zbs$>aA$Ihk-hn|9M$$M|E1>c!G0Pu!vlZ@|fx8yqE(+YmfV)=Uu9wE$-q}vxwUkN| zf=v-8JtwlAZHUxW+L+a*Y`sJ}hibQHcb@TMu2aukAnnL@Es*Y$ZD#z~H#=3vkNvXU z%cJwMo#oN}p_~JttOK*X%cBQnV|nyo==Bij@zCtl%cH$WuZLwj%cF;r;PZjtxfrk( zD5D(#;zwrl@~Gs?mGR@KY^;tR4UUfi8^>ZOn}eb3IRBySc(&dN#KwunP-{R;t zuB%bY)+fYC+~z`R^JLh3xllgE1eS^tPNjBEOBp4c4yB)=lzt|Zein>>HdK2KRC_K| z+XU5~=darHSg5UITfrg}m2!#u540$ih_TM>P9$xQeZuAyv^ww-+=XiNg zzs=OIv95VLHFpP^o6_C?Fn@*XU=@9(mg!`X=c_&{RjNkBQhf2drR|VGA>uwTMsZ$N zS{sYClrHO4fl}&ZU3=nDw_O#GZ5zaxTbr68n$Gd>_cpbvAnr_>q^YIZyRws)X7A4S zEY04N?JUjS3vAz)%}cZQ1M?36;}2#VOS2DU%ca?ev-Q&KBN!Xk(PQJI+y_>heg&ES zG49uoQ%8Hka3;6AqPr*Q`%~zM#~7LDZ9quT>>zkfs5w$kH_3FyK06d?jkPMhBSkf> z&ha}jDnYhomQXj-l(dyly&Q(TQzyD)mZ%a>`v+yuDA)TeVE7#1`8-_j3xMT|0A8gA z-b)O;RZrBH*nUCA8$K@f zO|Of6%W$!81HxY&H8Ok6W(3!lsJ<=&gv&$ULeO3XtAd*VSX#h79z~4CpfS-CyXIF7Tw%o zNlzscNH)cUtS46xT0$MQVKbUDE4I)(6SkL<%UnV6rN0yYN;%=L0n~2*;BVoCzXNc; z2Q)`%X#U_h;Z;l2AK7Ay$s#|&2}AzRvpugO{Y<5PNwwAStJ2SJ(9iGC&mYjwpYq>b zX{+Ne`D1_D>KLoF^tayX=$1nXC3Bo?5)-ksv$M<}6po7?ImF}7o=uH4a=^oyIm|=P z9OhxI9OfY{hi#Oe!!~kS&&VMg`88(ckd`uut1RYf7C4ZsI?&FhA~|6ET$|QZIu$}` zk7Sl3nHMCQ2+x&fiiR55?9oUa9=>t%`L?Kyl~!g#{+*tv3rFdJI@)Q8+Kj6FE^+x7 z2j6v%L@C=ZJ-Hxg$d{*w)z5g{Lqr;z>|r=JNs$EhJf+BdD6#;GEQBJ9pvYnI*lCu zsvBZ4x=!P{J>#1hYiulLCdP`z+;vjc+cqSOdbJ^uTrXwa$*rLlqjKE-)xWlJ+uUTB zJq)wE)b(tJbv>KirLHHL)fFYHdi0Fh=8Z%tADGD|Kl&0A}ZGP z_81)kt(TJ=0V zy)y24tFih26`SSk&??APZIa_eV0~P}R3&{M09W>r3`?ZSWy)FE;E?J-jeIdC+Scmq zXvEcXGl42QUa6|FU9LzBu>Uq7o`~7y+QW1-#f~!~VO%1hgtu6VP^T>9-{HC0Q-_f2 zlyk3yk?hpsAzAjh1x?S>6)-nJQJdr5zp7I;PjWzQHWwdU|{RlOQ3ZH@*=dG^l1Zj}IgakQC$ zrDwp>Z8}XquD2xIb~z5zSr@IXqTc!6==~8gx#7;JWm{% zT+xoSmQaxb$>fSM(po}I4kKN{bTwe?N|3n10z=UjUCNm7_>}XN6MW_?Cwk{ACmHjV zg>V5UBX~FkuHjU;g44|T%IP#;Im4N+oQdcuq@$;^*j23VEUP=qD$-fb=27Dua^~k6 zgVeD(p4HIvsL1&_DON)-P{Zei=pz@Q?_7-G^Ah>*L|P5KRQ|Xjt%mNS`^IHCYBlt7 zYUv7$Ed7v)fiIiYNBBh?(ZRE3Cz-*O-0jcHaj%eGrTDrUd|d;+t_5G$p)X&L-s*64 z1NYXYW#C3u&4>ZP)#a|~=q*&_RtR_mZpg}$gmhCuUT&28A!cKh0e#a!t|{8_ ztXwsx!}^tS+ao6GiNEG%i?5wYDiQh4aHKgduW!uZeaJvO!KYg3%wlsyzD;a26BM^4 zsgb6Pw<|T?0X5zUHQog^-VHV012yia)p#$fan%y@J~r0&Vbm#Ne?~aZ1t*)Ust+YXRWrn862~+2r$7@r4{GXH2r{#fwfg zb1M0gdn);Ij_aoQD>>>Uq&rK>BF{YX)g0#>rl`eNz=$T)im-g=<;po?wy>} z=O7Q@H|BDjbCBIOlIu z_BZjPKYSLu;qy}t&e2Lb;%AMXJd776P4SBdM86s!`VAKO9U%H62}FM?5d8%^{|)1H z%Uu$Py5~9|>X9pTutqL}=tqEP&0K(}XD$<8E0;m^TaI&>mSjxJ1%}ddnd6LHX2Z&5 z41Es_W#;;xfXvDz17{N(Ik^ssBxA`anueSHE5`TbGBbI^On$EO^!JKuvLM$$rOGEz zNDLH#fiF}NEIJ)uUELT?L=xea>gpPrt=oTzJAY9RYQ-A(of0z(nNId?l|^Hs#SR^l zL@DQ!o$jOdKCfuZ4tE5~Wb2VAz3xyKlJ^lBJj}>1d^jo*iLQPnVU|vU3^II7b4oQ|Uk6xW~qg`yx1hydpqjH@`a*|4J>nHbU zs<&OPf5Npfkb10=dV5Gc4pNVY)H^`x9X(R-lF{Ay&cpS$n(4n^2iqr zjK)YOGZWN?!%@D&z`3m!??iHGx{W`Op+=rzx>!my3zP`LN&xu-Jv2Obq4|1&_->{BleTBwwzH!4+y^a3wgt3T#{r;G7KLT$Ag(Hs{vEwQS<+h?DCL z^jz#aHyD6Ged#;x4cx$u)WA)-Mmo|ik-6D~k+B_i3(>t5bklJnsimV@QVEO<>{}Wt ztqKgT43yT|{|>SLt+W3fI!~X*M(kJSUD?MnJ19+;pJ(cIVZJ%zRIHTV*Qo8PWpiPF zO*(V!$(TgPo{dn{bHN6GH;cwo6vf}gZC-b&H)L+lP2P~XBiFMbb7!uzA#)dc!ri&N zA#)Fqc`xvGU#_tsbAPVfka-|iZ^%3dzk8(iyALrQSDVW)*TdXV9w9(KYV^cgay^+# z9-|_U1M_2hB)ynISDNX;8Dqe9t~w)uwhXH(TP=pv07vm9m`Wv=+?D zV_Sh5Y4sZQOnQx!v&NFSjp#?oa80>>96~>_?Tv)g_B}lzW)F;(;lSL=49y8en&pZ3 zB`Q#(O))Z35>2h06!1%BffNvY!t@vujpQ>=sv+qqbo{5`5T3!n^DG>}bGh#1GtcL$ zr}SPR(7p)Jwsu?jpcOB%c#q|})2=^LVhME%p4xwf?4B-SWIkJ>ByRndodx;mJM;yjO=&~Z~q zUUJ;jE6)=*t)1t@O}$~tK6xBBtpgLU3zM#wXT(kG=gGKfgFGEK1@hS6oJIa-LpJxn zrIo&H{(fYljSO@Z=9$~J{ptJ0FyVF5)BVSWW>K2wJ4}?Rep(JAR=~KMpr2O4r~_cO z3pj~g9uE^eNEKort8oyiX)x4;Z$r4@{(0JY45eb5qL@S(bSXB2_ZX(Q+8kVM0j`FF zt157{CA^2EF8Lb4aFVWzNQ#ln*;dr#)`o$HdfZ0=J*eTerPzk+kD~h9<~bY1K4nLn zk}B7~9n~C@=Re4eg}~b@fyY7M@ep_i2)rW%-pM2Iggl=?ZXz>1iJIQo5PG{j|J860 zOvNrtU{@kAInP)P_m-UEC-YRQx0^9KF!06h5O)tH?lg$IC&Zl&ac4l>nI3WXaz+P9 zQB*UdHPm3pkaTLYr0F!Can}>IT(OQS)`L@5iLjq!4OG6-l#DvDXo6%BCD|-UHXD*P zL$Ve~7WGILb0m`#MJqG7H#H~>$r|!}2Xb;FBF?oERIAMx$ocaeKbhL8@Z3D(*>vrV zLWX?~brWYC- zSdgrN%_J(9$>*QUt(-!woC*P#o!n`r_KX1MbfSL-=y!OA@>G+)6|>%OX38+xU%I-t#)h{HO}ufALUkIC zUaq7~L`oMGo@1no3e@Zv?!fa0xbK`09WnO9|F zmTOe6z81#44o1Hoz4`_i`$m}aD!tlw6GEVYUDuAdnJsY(srgo@d07bE#$sLRa%i^` z**nZZip(MIgfF{GNqsk@z6Vm@3#spe)c3=eT?t?IfHO!*isC_*;~{GBVFOXOC%ds- z^kYfO5fI`L=HOA{;4z52Vw!r~PuEXS!%v!nr^cvw3i^Ip>H8Vz`&sDwIq3U&==%ka zzF%|(PeoO{#1g+u4ZmXO{E1|p52VG3uJx2fO#fA)|C)i#t`d6P)R!?_yg`)T1m$}S zmpHvNR65fdY&pNz*}o4pey_KG??RpyrL?MmUDF^_TPhdCOB*8brcyU``R8zBW872P z@+)g`N%2-*sx67Pea4)3ykpM0#+dUSfbl-YoDTq)4*`&m%rWO<8go8z#+*;#q^{FW z>N5t=|A3M|XIOqg;Q7*k{Tr^C`d9S*Yk;do?`}sDp55IJJR{W-lCD9$AR5Q6o#P3x zf=TxW*?rL9t;3_J`O;vO_{M*n`Br&=?_kjHVdx*=0e*ym7sG`2YZLy&CS3WV{LC8v zg*5srYjhUm`zp_q-{Utb^*i+bmVq}{4CCIXwWd>sJ{yqbl>z>-&iS$4`LWjZ*O~r7 zk3a3&(n?^^AW;eYDN?*sW;y$Gv_FUaI<8$Q(Ordl^TZ!1`~06ief}?Rpa0wF^WE|p z3f=R$&-ch@h^&#%kXSR{=<_}EWuIRwU-$X6da zCH$7>xo(t2MY8i#TsO+eSC4Q&^?5K!em)-IkpB*$>qdq0$27Wb^sH8SQNFrvR7@?E za7%k^gk^dCvPoE9ZjT6~vx#2$1SiR-dEaPl#aM4J)(4EO1IE?`M%Dug9G2E+6f89d z8?Z71#Q%oO|17X2g>qbMUnL_Y%TQv7eH}_53PG5kxhv;fKL?hdu-_=$1UOU|(_ zBIxMsA$Bfijo?zw!{o-tpqG(yYiy`F9yW@Um3Ll#if9Xq(cb>02fXd_lLx#p`JMr9 zY`!z#Z4cm$!+L-c%F0m(VzwAUdgdd6``ovMX2VDWKX$tb_Z z6>D%Za?q>DSY0Re**|npDfPBtKxX8S?`#Ib(RiB($1Q439g;9w6*xK($4wUVvWmBu z`V_CRruUm!9Sls4VJa)%5>sxKB4a-8)qnijO?mCz(Mk3|=a~kty(c=&baaakbhns+@oSxKomyGUWa#Wg(5MD9 zmQ<;R*`4efgF-~2HhB!H!x&VrqzOZs21wHgX__ES1Y^)-j6t(JW6*5oxtSVlG2k9b z9)k|1wTpin#3ITp$B5{j4d7(|EEq6R>8RvgRCEvmMr)3u|`3n)`UH zxv$5X`>|@~QG@#%))e{v`<0$PE)HM<2NHpU@{RpUZ^?uGBt3-c9h&cKNW-~^!yxM6 zO4Rufbpb>@0-_!XQIGP7dUU?tkS3Di7-scYYVtTk)>Fz7j%T1);C@2z^byes$5IE3Rdx zucOAVH>AEeS!$Wd&9V#MK!tD2ck;Vgjx=ZYBx!D@IQu6Sw4>IqitG+F2L$ zWYKPwrDt8lUu{Wllfl#)k@`)=?e@<-e^>+fxR+dstG**btlD zdx@3%4B2kVcMi~>LV@@yIj-K%wt0Z~e-Nr%h53ERgtajhd6)!v1OnWk7I!!(lzC%R zlqrvUk1SPxF7=N(?Jr9ac?LOmra$Gf@-ES)DD}~llZeNBCJ~Q&ClOB=lZYqLW1j+; zp9Ywp0hpgPClSxlB;t8z67d3}rO$P=^djT^KdRW5809Y$NM12|>BFw@e-V9u6(Aa9 z>wa>~hIgbT9OpzC^1oeBbS_oHKHkzXpL7594Md03pU1L zjm_a;U94qb>p;osz(_pa7LE_J4QY3et!-%r587<2nrcbk>}VXN#4L3jArz>Y(jK8K zeWCi0e1Df)vKvb9-&;a<_nJ#h*{Gl+9`S*L2L}fQ2Mr9hMpUt2Ylq!wqq1D9&9q%8 z*pz5#wpj>T<2bJi$s1~IZH~wXtzu@!O~hh4Nqm4FF}4FHxy51k&)59p^w-sh@&<7D zCh++dMwGXK%Xfgh#Tt3x)&h<*&B zqvS~XPpvOL!SMTOzLR(LvwS2MQPjof`AECE$58vv%g~hg0y_T^HuwrY;%nIE8`$Do zjP8ptx__6iw_7zg-?NT?Aa(p`^sJBc*e=t_+8u0nTWgD{*iZS+E!JgImiSpJ;rcZ& z#uJ0JO?6UvzmW3Q65)n65fQ)2a!TIcV=%5dU{RVv@c% z!`^w<6x|9)72OM@j6Dii#-*&gMu88;)+9T*-IC@DyV;a&wMhS!$mlse@Kqc!!CF{w5^BBYH z7XZUs%aHCL`t}W2fdSIYhS1FNAl%nPzdB^qkDA#C%}nU7=GTF;NR-~Tk0j!OhUU;5 zJ3x$=2io`;3P+5;iZs_(^N}l?DeiU_A0z5(cgz8_UeK3TZaRriZOSL#4N?`M#z?Fhu?*wRMowU(GseuE_*X^e*KhU8mUyyOr`1QMay zG?%N5B!oPRGdtYT9uxKY=w>`nR#Q)ZlQVUk@noPh8Oj0EsFlz9kVK zQD7vl=n9pQtm}RS=45;;qPaC_=2PMd4_w7IP}V4=tZkvJ(NNZQP}UeIYph3E+dKZy zLtKnw(Z&-SI~aP~Dp_yO;O_SSPTvtbviLiZ_!D4-|3Nt?`eAPpNxgG{aV}5$60r+F zx2po(WPol8KsObj+YO-G-2=Kk3Ur{TsETQ;Z8YXnR?_WC`Lc4Ow5Tmewfa$4ki7a)U*K8&2p2f3 z9}NI%BSNGm05}4`&MGigKV}!m)sN-^z53CDk*)h0YGjKtpjVrFIhs4hy|tA()ZT_e zs3}l~=VaI*cUq`O9DVLQzDTX#1LbG8WR9b@=CJDGHUrTCa`dIONAlglz$nMr$_r`o ztu9?e9x{<9NovCsn{r;d4?{f>iAZFBii3z zIrRfT|3LJWgW%K;Mtg@8xNr3zTHspoK8)Hr+-PgR0&^{GK7C&Rqn)$L8%-R+CS#2` z@$ivKUq?Y-M?+u7Kwrl~U&p~~*tW5?bv$e9KOpxB+z(GAd!5AgngwOdFK|u@s>6Z{ zso=>4DGm#sqV#nt^mQ8abvpEQhWvL59Tq%O{#Z(gF4BlTt3VwVJeyiN2N2r8NDUsb zr_v%3Hy-l}(tXEsneBxI?sJ0YDW1*;PZxlv3&GPxu;In9p~KB3Y{#W({8CorWyJO6 zP$W1y+toL&pdwcmIBBlsA+31Co*ffN+Ue|D3)+*xWNp|spB>oAWX<$Z9)Kf*h62qo z+o<45?w!b6`5}ELhN8zfV@;CacM54BQSedw;1VQ!2HI|s6M@s~%zVe6a@y0V5^t3c zn(&+UoCJ*DI*GLnNs7yziTk+in4SHfoEXc2 zzQoP*6RR#F>e`w^!VXzl!}9H)x=1))NwX7s8AsJ8ei#K-YRxWeSJBynO1TgEaDNwYe>ZS{4{(1kaNkGc z{=Nd<_?X-6-!r+mpK_`LEbHVsYW8^}0(!W>oiw4ayF8e&y03Wq$_uQ( z7fFFH!EURS<*%%lO}wkc@mEN7i=ev0>7c4S7)Q5abzcc74N~3}y#OBKTeEy@PCgA! z2Q6&jpc896{Y%drhxv_U`(p(Ubrm$$Awf$=JjhbTYs?ov0uy5ijC_%VGc$`Vh^!T!vM}FdFkBTdREbIqK%JQYJh=KepQCQjm-g zU_f$D^lX#-qdj?d2+ON}z>3MU%1&%G#oBG$iJ*AZe;9a8xu4hJe%^rlc@ysEEx4bz zF$`>|hk;WS>H^ z&mh_7kn9Uc_9YzaD{!n|6}T@;f6bhKLk)gwc-0S+7YM6VD$!*^viOdh`ktEl0kZu= znm?M_qhV<=k^iZ{NuHwMFMfvdeo@N%70UY!%KIJ4`vc1R)1$nLGIcAY z*X;`(^)2=cN)|mPs`{|#QAqXHpn7W-It#)^nVy9{$XJVNq!pTZ%8i~T(hFI}j6%q0 z6|#((h1k+9WEryyS;m|~w~V=kPM&gyu*hSE^Qrj)Lr}?(2Pgfd982SvL?KfxBC5p@ zYU!(&6nd@SizuyK=wtof&`cktnRTFn`-+X2v;M@{#!$yf=c3dP!DYl#c}fIVz)qVeJ5|C?17N2h>@*N|8sxFl zV1EP;VU-M}<~KErRhEq48q(AX9<(-NhK3PCn?oNfrR6P5yQtu1IPp;hK6azvhIYe3 z(YU_NEr+ZsIeV|Fan@icys1cpC4(Ump@gAr%$K}igybNWH!27QMnyZEbsc`+jF#!} zh-+LPU63g|DQgCGe7$cJwDhwky0kp&(HypYMH%I`mKikYq>ox{kU1a{aZXY~%SiEr z{ax`s=`=ib9kZ7Cciz^9am^POqK)%G2W?W=8)f^(3L}e$3o-h5DIgM+ar)BE+Vv zB|hp5&$WA@U*h;R5mJeIt{0|y4Ta8uefrwyvacLGo2X#K@XW4GEoMRV*-G?gh~5Gd zL?K`d0=7cH;Sg|d$1@v*gmG5K1`6qlAO~ho?iB{X?nw!we;KBo9yL(M^F> z+k1+`S)lnO(1Jo|8*!EA{0Ki>97%ErxfX_1vJ^5=cqf(bc51*t=N9@@XD=Re|OKD|bU&Tcg)t%>@ zfj~^jpVc4vw_t5^td?KSwnli5Ht@F;ryI1)bQ~cXFqm=jvq%a-u7F!3)v;(@xLS&0 zrzb8W{K5LOzvp9gKcGjC@0(aVq7;LU}6Xrb2xx zvv-GUGDs3?_GAFnOMFDkB&dY4HMc|01#Ql3~rqlE;!wrK?{C6N#6(kyogZMUZouslDo_ z!`F!R>nS6(H=w~cl?LB}2H%DT-+>0-g$CdAXz+diNbLg_?L%t*BSU|$75ZMR4cdi2 zrox{TIu~n$S{^m(eM)6MLz&Ih)QomW+GD~VRj?KlsG&td%=%$m=?`jTiIytyxqpxN zLMh@)DB>$9;%g}48z|yi^oXr=kNB?8d4VGpSK@nC%nu~Tk46NZvc_U&^i!8zf1>(7 z7dr14r<7Ox0vrFTMEeb*{SMLofM|b0w7+2EPhsP~*~W4roT3rYt%z?J710f&BFEl8 zCEI%~TEZnGtijdRq-s5joTYqxU#rNF-8k!-MitUg;f3Wt%#fV?QOPO&zxqsLL2YxS zwX@*{1(NQBy1sWZqGS}M8sDv=~> z$MY?6&sBD2J>F6GCS|pT>Sl);m5A{wu}+b%J6g90eRe%qY<*aAgCg#;0a$QD*k}iB zqrPmTf5=xq*2P97Yk!t?7MSf_03wPaaIU$#xb;rh*oxC#sMyyj*2Efmm6}zFqFqw=2ATdlRE?R{{|O(6@s?%0M7v zklD8fQ{Nuq^zEU*%}yFOn=)=zTQ9ZsHsek)jNrbx;UG3H^5n1Ff{F|;N^vB$N_Foo zVYCr2=16q!t>nKu(vj4y<&W#rk<@A0Slbk-BdMdPrESsowvZ8p2=V#D7#$jnHPB)N z-wbM&S!L&hMQtq3CvT1Pvtl%ZQ}S+}RozZ8I|j^-1+&|O*>OPJcwow5a|g!MKjLaf zR{BmP=LC2nusX`+m?u(^Nl--@a-~(#ahEDw)#S4;b`!C7o{z}m&yqC?x+;jd3dx;u zUoLJ(;+DKLg?u2iohKJ^?7r2=%WqZk42^m^ma7tg;zoKi-hQ%F(rw})nFWt}YQu?k znKw8dZVkzmI~NO;YTL?u`qs^g{XfMBr2ub=gy)2v3{;%1J}7ohGCd7LyC~D|3e!)9 z>8HT-Q(^kuVEXCW^t%^vRJ6Udloq>?(}s!Gcd78@2Je6f-{SpDU8dK zVlStLxtUU3-UmHJ~K-de=_D3UMQ!Efytz=G{vgpCvd zmgC?fQN%&LRHtmUt;l^>bq<@Qofw#F__XFCzYUZP=rNK`JCW#MlKT+JeT$sK@=L0? zp9=(X+hrcn*uThld5XKJH~>02Q0eF(=;&bB>JTX6P$=RsC}JWMad?qV^hG4ad}ezA zHF<=giFrltt(GD5np9U^ggBDvA4T+!E^;mdE(5J&lDf;WMD{q4?IXKON}nW-_wPF= zxcknDMc9axgv3d@>*TA)tWBa~p{F06Z1kg3V2e{>o70l|(dnumodGkR3A3HG#C~+P z(T~m{Eu4#fbUZL}p2EoaAbtV*(J4jFek2Kbq3T8#f#Zw8#w9?{u|UtIMS4HdrG?Ab z$d?lzR~R5V$G1D}?Mjrkl12z|B{O*yF?ls0^Y5^7O%jl=C9bY3a+XL^jcDR}e;D83 zhVhLq7~iB}oU381Ns602Ail)_@vVTwZ2@J|^?j?fw9s|Vpk_PSr zh_45T?^hsx0K^{zh;Q|R_#p-2hr#h9VB=AM_*#JYu_B!u&(Oi+jE*OWizf{T-|GwE zb=4`wRI$ZVOz&x;_YCa1#9Ggqz);J8&k>F1L8Hj#Vq08=;jJY`CWBGlnU^JDMl=)*o`fP=Li<_lcOvs+c2zdrP z7PULpXvLoGHe|f3$?;Ag?HGpCmY{s;CR|@B_vERwRZ2nhgH0;5LsC(0rAoZuAI-g} z5cCod^fHkA3UIOrIC&M(T#b(AUPCk|^GtL_<>GZV{u^YtH;bHX6W?7x$LJl;p?7@Z+dDpGfj*KhXD+f=yv4!HVW;pzwA>PO&eF>v)0aP_kX zSHJk;>Q~nCZ`Anj2ClwI##JtYMzhcV!S(;7`hOKUn`hpFf15HJYwO*L>6~^k*9@p- zpinf_Xph-RPyALl#A5be@tv;v>rb^IVSKWGvs~4J`kW@ER7_3{U>5LOu#pV}>56eM zC7GlmCLzlZ%^3dq`4cY(`~pfc!I`2*vB%Hq)x0%|lUMWBEcUGC^(=N)^VTY6@T3*< zYF>IVgDRsKuWlC`t9hBlay2ijSg+<~7qi0-YlodvOdwlr#-%W0ZZSV8P8}e>*y(z* zOE}9*1@yfT9b_N5zRsSDy$v5JaGr1?R-~(`Yi`qz)xrPNcF?J+kdS|ui;Gs$kZ$-- zc2>%SvQU*MD)t@Xi;LluN`RkUz}4Et$kqlt^#Nky8Zqk>^AJC2`3ol2Weu-K8eG5F z$zZp<8`^-?Qc!F<^Z+%xVQ~tF-nW?hY(J&Dji9^!(A~z+T`6=|R?H4vwjwoGUhL=4 zD_G`DsPRezRe|CphrWSp?&WXs0ZcDQ^ad6it13&VILOqA;qV6&r6I-6^iOstdop9k z-(k#W?f&1j&Xl4{21btbQ06qaLsNRtO?^D*W?m0E%y5!g!k(DPF4aPlG#8?bSLv#x;A&>hm5|j?B?_Y#@GSns zIT57P&XGrs&AhWS6|*RXi821}ZmjCE+r!x70D|%8vOB=|JHovCY4h#`cee&BO-x{o zPb7^_f=1QHow@nZF1NA^72UPic!Yp8FDApIOi}Dj1$(=Jz1_jy9$;@8Jj!Tzls${} z+9Z(_)0w*&)Z|P954$8glX`Uobp;z=?8Qt~6H_(C&e67&(t60W39TH}5+ilR&f%Dp z_!RX{ZFA`;Tu^*#i9x<}N0aa1#w|pd1MlXZ65C?EG2U0T!!RE_K z>|nqCeF%|0G*#Ge7<7BM((Qccb^&aB1T=UgG}o#u_( zPB-GVGtgbmMBH{3y3yI_Hs_de+qo3Co#(`D=VM?$P!H@EaJO0w+tsj5g6)Ou8!sXU zcd_AI7rMggOX&NhaDXGbQxIsg+JP~I@^{g5&Ml$(Fdx>&t2C57B@(qqo-n0)r+eV` zG&K>SY(iE%ymwnTTBqItYr)i4u2$N0q9MB56^W}981iM=bmhUo_y)eKV={`9I`R;D)JlE6L|s0^ zL|z?c4~onDqxZ|z$aw|2{FQJ8S7GG58ZO`(bn+8*C%+ca`+nX2UE7H37*W>~Vr~Fp z{&lWyWQAYi#Kt!fgExc0^^;;_FRa8Z4hb_rzSSKd-{uOCZ`T2Gu?~xf-``}(p*rD<>44!9+o97I7^pJ0;TxCYLUGDDU zd2a0mYVE~hBgf3L(|jojXfG4_SB$9H^fO|SKdfGL!|F8!D_K>%UThxPl61ry9u&Q4 zpy(~w zEKWkkPekwM;-xs)@ryr7es!bdw_@{P$M40R9qjnS1DHPz!2AXE{|&%&EAaxRdkFy3 zql9g`MhRPL&5|Vnre}!*n6*kMK~V_<<`)1ay##>C0CB5?0rOX}=U_)>2>_E-f<#4N zBd3G`^AiA*TjDph%q!tMMZ`rxiIJzM#1A%o=!izjLA{Wv6%n=K66f4mCv{3n3{V&| z&R#@hZ4l|EHm!Vu_7)ZTaY$$Xe;?X5@(DlvN+!jh!B{kGe@wK?g0^Q5hf|UBE9oVt z)`lqn^(jx!QddjQs>DeeAj|0g<)U{Hu-nbD_um6$V%a{68Y zfFEufYRnw!B>G5aU6bvW!h8ZWP~$6bjmq^)`(V*#6L{ zBR47W4b3Z+PZ|KM1c9M}@H~TnoxwoI1sWYgN;ouMZ%IOmp{%=2NjIB8H%qQIj9D%( zF&FDLCn8&vIJtXL=uiwV;cir=MBEZ0j(~_GA>vjLacekN*&yA$VED@r*S85Visjmt zSQ>3$V)K%uCA?i}18=#TbvtHZ46!g4T3JDDZExB`ozxpgEssab@4KEj#A%?GPzTS8 z;__5zs2QxNwj&ANI*=O!q2zgzJk5h!BJ$`FZ5mg|owy2~D5hK=CU5!6T&(ur zXr26 zi7-*e?blQLVY9<7|F#-TJu3&=NG&&&7&&}As233^eU?)CY$&}MN^gPEqfmOxqx9Ai zox{gXTkOr^3t}Q}sJ}7UW$G+l39i&emFARqa(K1-NjaCwc9b}2+LHUR*avd%tK{4d za?XRC`$NtHAm@P|IS*nv^L%Fg;$UX_5Mty|L(;h=z8Mm#h`0x@ZLqe67%!s1r zQ?Ugoc5S!L!n48Um3CAk$E_iifuZz^?8wow&FSZch&{zBE8T2RX}MKq2TtX#xCuue zoHBgufr!#4MQUcJ(UbHLCJM^M5h;V-BYlG2qr5@y(MHgF3~Y5Qg5Kj`!{cGI6U?CZ zL<)LOa)RE4@WhvEPkb`l^uMUpQy6lm5=qr=0ViGH2QuE^_jq9z3U1W6Y` z-WNlnE-{ygL>Hm&O9jBonC8ndeFs5jd*b{nxX6`YYhT@TopWM=uQxP?Qn4m_*o~gw zq5YzUiPN`lFlV4+M1k9PMDen2IKg-K0}g@C3csBsN>m2ZIL|_tJ1Qyjzg5S*y&Mg3Ek!s#5gkRxt;H#79LGJD$%WiJV zbk+4V?EJ}6d|2ptgz0${?Ee)VKW0n8MEH+08Bc(W{pe}>&W;WWR5Uemri~Nwn)Ju= z1c$tHh?711>NG7Q@>2-Sq0Y8+Ku&eiQ@qJe9aU z`61#iQ6wkmYo`q372cvi%wtk~y>o368FYWculCgSG4CW=))R&>D|2QsQ z5rIBF$XQ8$l^J@?a-<7WXZ5<yU?xoplk1EtgL@vR@Og+T7CpI{CEK?>o@Ys`X|=P`lpP@XBe7a$3XD8(fKdX z_?K8&e|L~?L+>lIvi>zF{sv@xiy`7w3=!YS5V4#a+FMvu4pZNY%KgCf{Ai6CpJrWS zzX{&^pXq9T5@vs9W`BV?{7r5sqPWyeKD%Vi1xlI4-#lSm2{+ycjW1`-%{`v1Z>bn} zKZD0Iz@tC#7yvv50*_@&#e{!@2`^Xb-;=l9+492aASR}?)HPrt&lmI!l(Wu$0hUP< z<=n*JQg^K(OW74{B&@moid=amRNl_>%%ThN^;%zBhg8 ziyHko|7_HgPAcO*=WFGBlGlIh`3><2(-ZNCduObY2pClr96ikaEX&AX7o+Sy5qg6m zSlOOPrRnr7g{iC%nkQm}$Rk1~n(%b8QVCTXoQ&%cwK5xCufCp!nfm$~-Mq1VZQLX0 z>&oj73ruWEcVabi(Q2rbOMUj{EIO=Gnz`r@EcGoq3@LRN9fm>$S1pxAht;5(t3wsn zD76+HDoSb5p|aFjbQlK1z1uO|;i9VlivLd(|C(a0Rcvt8mcg%BYR~Lz`1=ts$f-0% zG&j&v^gf!&r%nS2U2SO4y_s}V?UaEp*p^7lv7RVti_M9!zpPawOS5|XQO3iKh8m55 zdX0sL8wa%-55;-XQJl5l@mF3booa32e;wwpw$xpaSxCKgh3J}6+lQ~mtxPDjrsjl$ zS|3h(1H;mWU}+*)+6XL70!tgiX;bsW(Bx8QYOWhpQ-tVExVud)p{EF>xY^CY#bVUo!p6k%=F_;r>1gnMtRa%kViEz9yf_UKz@Wbv(A`F-n5%eT&g zrfd!0S_ci<1{$-i?OV5F-@3i)TX%qoJnfjsj-pZjkA$(4X!mSZ#+@yrndb3y_56JU zlyz5rFFb6;(oVb`N;`RcvUrM=YZ&Y_V(C0fg@>#TC_m$uRDT|is1j-jKxG6t&H{@LAw>))|dJ+thRBfcF5$@UUob%O~_xQ zm;f4H#U$118rcE_6ruw%@>^yRQ(c!azxuk3B%MwdU>$Nrb8R;=kKM?8*Nt>Ro8EG?X&2F^|92wURn&JkR?Ke8nY4MF z$?p999;NQ_z!|s-%5yQXR`}yt;ZJZC{zO3fnFHxb0_mT`_{k!QQyAn^Ewwtt zqgJQ!_oqV$38Z>$00DgWJr<{hhjfgeJK_`T6t)^ea^hJ!q{7KJI9?Zn4bbwHuFI*Y zP$AS3q89mJMb?F!w1)sQAOw)u(Of%~D(0n0X9<~)V>#s(>x%#31G76-H=UGgcfjRmq&&8yrgIja*xop6Fv{%JnFlQD)>g<>f^8&hXwx79O^ zt)2xnI~(eE4s7*YsNH!`tgju#I=|GHG4=w{g$r5M7nS-l#$GH0oaUK-T*759Ep;DW zcSNEt!yM#tL*f-6@k)?*6-c}qBwm9#$Z42^TwCfqypBfIbwc9x-0cmPx?Ykw4;h1- z@r$XL>PG3~Chp_rQtPJk5;S&8Hq>tArfLKVs`_vdw|%zKE&?x z&f4x5P9EUy9<iv-opR9ZUBR@{Oqqj$NdXk6T$v%fpqG>rL}c(LxJ=DB{ z6ACuQ_&RHPUL-WfJQ3c+Ycza}o$r}sS?^{e;e*u~(Qr7XaiN!WIKz=j%#DTR!FU~B zbfzNBoo&J9P^_&}|Jfc%rRW_KwR&0Buz3yRHY%VSmC%`Ca2vy+D{DdqXP)j@l6;I=VVyH62{O zCZSsR?-6df^&9F9$*Eu})*fpMDM#!a22};*3D{5<1wr749yWBc@zT?8L}o0Va)Kul z(*!CTqUfpyWY*9jkrr8Otr73#gj^2Q@_bOrrrafZgxx|k-QKq9V)UUo9#*3^&Th_= zjdD(ba&7|U+!V?=70S68%sJ07=gncxHN6&BY-$Tpt!XU&=@9=Cw6mo!wUL8b0Z^vRhQu>Calv)}8YP+@iIwwgJA|0`KiG z;T+%gj3iEPGP4q=fbqr+H3)IXJ)n;}}xjzn?o%Nmz!mEF(phLAe(eqb-$o zOsCN@oj;Fw)d`K93$vRCb({}%?1DP(;xoHl#q1WBzuiQ+x>>5bTXvbqW|w<#u{|OD zh{rDfM1iWkdbH`iJvO}$l`{zLOFuVYo8Au~?hgC4Q2X6Ivbg&?E z2(x@BSjKmU*_IJ;FZ~?Og^wuf;nL5MW-L1jbQ}#K9|Mw)rJv*Z($8`9YYAWa>En!O z$CsH)KPPZcCxWcunyf86FTW+?&9RnF?4Q!3NY?W)>LekbsI@NuoovWE1>~Iy@=gPJ zrvtV#Fx0w)ohjP4m~@;a5TDJwoFlxng18erQ;~DI$a!UM!f;Noqocf7hxTW*cN__& zViC3A9;@W(=XsnIioTQw&}ss+@Qk+S@V99y;!VV>&d-34Bb5sbd=~<~ivZunfbSB( zcPZfO=fHOvB9$pijWKn(V0#4vcO`&ZitS$|Ae`%&bX?87T~p>>GR6yY*TNrPXE3@R z7~KGjZUja*0i&DY-p+-4yQR$g*4nMY-fi6B?UvuVI&*?Sp@=JDb%#{FldIkZT76~i zwz=br0{3w7d&}H6cNU~8>OQvt`;x%@Wu8j{50u%L1Rg9imjsqImjt}cs)x$F7X%(I zb1w)y0t6ogqK}pNF9mjdO@#P5)AEKT|7Xgw zT@EO+a&xISrS4l?_iaejQ{o+4{FZ-zm#e(jlYf8TVDJGj_z<%A2%LUQKi6mf{t5j$ zkp26zjvx5c@$a8;PoIOhRn1zzybaUkUaWL4|I-7XUkKgr`W*Y0hOVzb*Vmxy8_@MF zB=8+PlS|R}B7;RG;0J;BN2dNKs0gU~%;V92<|4mXlc25b1MhG*jh(SJ?gKaIYJy~< zNP|W<6>HS589cK${>||GJ9z#BJohRWo_m)I&pGA7^YRYQx#i-Ghc6aUDzBV*&o3v& z3d-G)c`@23EN5nZcKuEfH&@+V@7b*^&u*o(+;uBu%xJkV+RBVkhNg0e zaRoHKV!5~#qRW#4Zl!X#m6bv9Dj*|RE^dX8q)vyFd#edJ-Zi)00rj zfErzXbuPa~xtmC!#u1$5F)FxNWqA)CW0+xYIM`bgFjs+zYWleudyE?TbtU!~<&Lh7 zC^sHsB=TNjTU_&s%!@_#*i@RY$Y7Q|!-j_0iC}gk zFgpp%ZVYB8gV_}vW~VHfXV^qg*pykEx@4YVGht>zx#Jl&=jOIRbIV(=`g(9s)7+Z2 zkC^WD5nGmfUiY2hI0?!-X*a00@_CDymbaJ%2)72Lbs64b8{;ju1^U|o?d=!fEmmM} zv4iC;c4X#vf<{e)x0r22yE7WEhqoZQys!K=77@ zo;@I0bf5D0iaoi=ULbkB#q$-kMpi4&4^X$-Pwbt+BKwJb42%1M#r?qI{$TL{uy`O? z9OAHe(31Iyg9U*@n7u=n%ugI9%dBxc4BaSw41l3o^ zI4+{tB*$bq9_#ZD$65a2ctCdopgb|dKb&Oz!^uGX6rg^8j+rb#?OX-INpjTn7MO|dpH*qp9eC|hkH02?%@K_<`NqMJwLfnM0pXDak1qc zPG6vRxP;4J>hlhJ`n|(tT>XBj^!GZ) zJ6z8_-B9jk6r9En&CotGrODz8#qQ-_b)zWKWj=RtlcDHlP;?6@x)l`N26%6WExEMZ zApkGD>pKPVyO`p;A$ibqy~lst!$s}|Q|qx^;PMHvRbXsne%y zsg@Z`YNYk2Kh+`cHh`%aXj8MSp=PRlExH=ftP=5bBpwcILl?VK z0ac;DPpC?6cNmqe8|Wx09RMTjQfj!!aanmZt3Djj@j_T*MYH8KnZG`&xv8E~;M8}j zHdRGLtbk3nbRwa9jz!YVyuU^pX(LoMl_*Y|b7rbW|9xOxzm7;py(5T}8o_P%OKFGF zQQwqk=fqTMB!AjBooKR19K|ZDzgJyqH2vPUEfjC*)H2Z(!x1%xKFiUO-dOHAOb=0~ zwF;+jIi<4^ECIC^7Ysy0ZKl}TR4l))FX)rZJ!%~)7d>El-HH)9 zR#dN9Nzn79_3~#l6c4xQUu#*4#6U_{jOzaBVLY`i^AV0TcDAVXxX1pH_QnWlPnTBL zXe5$W6ZGc?)vcuCiH^>6PwlTSR;o#BN~;YRk(5@KcxQY4d~zLXLlNpS;m-DsddH)r z)I@<->r5=(oIv4?q;S7^Ar+^-bi0vIyPCvhmnX3`$J$u<_1YXXD_Zq8W>wVRRj)pB zY*CO~ToFXU|$a1;b#Fe>L?zyp4ES*qlQ|YLwEfJbiAJOAzTYV@T zRuM*gDl5-Qx<F_V=TmN|dd@); z54EM#H2!=bp_l4xOvloiQ9)%ow^<^tkUaDpwWW|x=3puE4C&D)F|`#7yEENfy|$W3 zzX#A18PP0hDHius*_zdtt5l~nTy^yKGWFqDD%99Uy3QbO!*z?b)9KJu#OAAQsTf&Y zsIh)tES!!iiiI{Ws_W-fQnfv|-yUkJRytgXs~za?!g_f79qF%CM$p+lE$$H%d5zGD zk{V&$X-#^5TJ6L%X{VHq%um9{Z`DM-F7QA zIf!j27RSznrjTSBR&&JoN>pf`^I4mG)|b(9+ER~2R_oz9W{FN{J*9|F7PZoersz0XW0>4}uZ|F-vs%9!KqnMh=~P8@ zb4k@Yz4gp~wBjqPmJ?g2Q7c=w9!qV`XuXAovzrDW7>aJfLtE?l6dh5B6s_d}FS@Rt z4sIpWkS$ve=%atkZ2h6H{;^@}In?v0)*Yzy7Oj_4>1nO=aw*rS9KD;=dO7_yHu`mR zDFM(XD-`!?j!UskJGsk5m1PT34h-*O$GQF|C6Fbb5jJ#XGf)cQ$H=pYCM% zC0a}}PHHe8-%u2oq)cFvMj+COz+|o+7|nA6qxpzax+pfND|QF{U0C$HaxGFZEtTE4 zw{GrX>TI<;RoyNW-DI}fV=xd5MQdlPJqH86P-kZ&o$>qk-~Yrv@~G9LYDU(Kl0d13 zyo`!OQX^W##;e(qb&!fLmY|Q3`rr7mWBKP=5H|B!!s=J=;? z^e2rafn@JtdnI$alev|3#pIf3Qk6>Pbtm&H`N<=nf+PzLY%gKdQvd{GGhMF(wa1URD4e5usyO zIVufm22AG_KDyOFpGM|W-eN}00VI_iIK8uOfM;9@>#1CF+3w_WdcG4a%P_~i1l zlY{E|nHj$fB*{`e=>U?tcCt)|qMn5Z7DBRI2Lpwq7J3v(4(?8_P#G9uRic5qa$gtK#JV&djF!~( zXJJ=cnlL2Vr*3(6b4CxUjUEh*_N^PrUuiACr`0Up>O@@kT@BnAAmGZ6+hkX%#Sc2#$>THCgc@*w#d9kCbC zEv|SvIU<^4LW|@`e=~aWs5;{@n&<|SqxislmKfbXg6L2^IeNdnl4H7)V;k!V)1em9 zpX9i@LXedlUl*{@S*ts_c4b{rxU+*JqvSfXleKk)Mr+ocom{W3h$r);-xFph*XKYp zxxwt@hS6ZCE?;U*oSoc=cJ^e6C^>2KT-_vmTyo=RPE_MGxzf)eN7{kp6b;iR-N{WW zqc!Y^Hi1>ovKR1-Nps_EM@ zs;QdM8P&u@LBdvk3bxjBnLu*pLb{!$@!YyQS*Hn%5(%5|@@57%ykrwdZll@RwmZ2U zu|pScYife^J}K2Ex3@SckebOIh?O0gm7R!{*~H4u#7cd1#Sn4R5G@E1L-~dwA|utI z?QMRIo;eF0v3NK#KagzHWHfar!z0%2!P+dVR&YF-si0Cac^s3IrDB+Xp zPNsc?MVb9hW`8cxF^|ZaPXu;F6U_cDp0;+)6aiL~0?FNUAKl%_-AM-Do1+9ldhdo` z4|a3-aHbtvjccmM05u^aO_??$I~tiS>EirM;W{BANZ%9CcM zz_6_K@BvqsU)^@_owuG<-dilWhb8wyfRo&laNf&z*)_R0FPqax+NpMSB=@N+p5NY9 z%gZdued~(!bXm_}=SGtIkwo?<*&INkI*>$l5J~4?bKNz0$n4~yb%n@=ojfd5SC|kt znmoKac?1cu*a-2+=*<7m0y;{2mZQ6q#~54amW>k{IF9X39_Kfa@g%zA*+fnt+)pGi zoJ0aSIl2;?$SKi6_7H;%z^7J5$-kb~ojje4A>cgFz@F_4-T1L+oIUB8-1u44_}SF> zIn?;M)be?rX3y7h^R;z>=H6>?(Q<`?sDqx3hM64 z=uqb6s%RhPrQCFSweWIHck)`|#k@xxoMB?mX^1(l)BRj*vvoc9a|88rBlU9=^>Z_I za*L;jTQyrfH+!4r@b>QH9mFAZaZT27K#%RA78UA<29kGbYVYb!-c8ife14KP!35`^ zlPq)Qm=qt6a$aqS#hcnX!;#wLJuVw{#ZI%ydx@j_n4|lNqX&qi2Z^JHh@*#zqZJHC zk5p=w`e*4o`KadRvF_yKL|oPaPw4LN$}+&vJ^?MU&DSwOAo--`@u}|Q)6`5~>*yEr zlzfKT01JKWipgh*i|5=O*yQu>p|9i%{4uRdCto~>_gOJUzT_OdPrhvJzb0S7xsK$k zgu`ou$m^ah*W?=q5nyi;U~dsjZ}akumR<6l%#iwB?eMyUljM8THTYe%u-Nyf3%nZI z5B!pE<0!fgqprCx0e+WiRoI z$UTy&+KruUZILuTq8Uj3s+s()JNdhz!)R)WRVw+1=3ddGqB??*&sA^z7jFR%*PN;x zO29B-w#ucS>&#Yp^mESAs&T!rq?EFN1t4U9b6X52zwJc2nG& z*4zSA82UZKH$zn=)WwMCZ^pu$MpPgAMibtbt81$IfvROdZGZZysUH9;2MU$b4Ux;z z=i2(!a!khZLPo3f*h;j)JCQA`L8hBhbW?_I%F)eWbhCm3hVElU`fz4;)>i7xdz~wD z@2hxwU(THNq5OA1E64?h040+OEwKRq29u_ZKMMsF+M%~ri>4`e2Nbyz5Rc(?Q*L{GM18E-2xrqQi+vU5g~Y6baCe4T*F&fc5ZiDgwh-5x$t$D_2J%Fnil)lyQJqLWZf$w(k9S7eD=3B@hwmU>yOZa%8 z)38bkkBYlbS<2EP%A(D086V9mEq6g@Zr9EUyZ%a5=oE72GP(1B)?ZJ?d|Sj>f=pWf z4yY~>?Ji90t|0aXP3+WokkeO*gHJ^a(UNV?JEJ1HollJQH<&$=0HuuNGYU=7P`o8V z>)$oOi7Auy)hUlxzBp-5Q>cT=At!V!&8+LDf~iP66{Bw`iC!$D zz#&bB)$zSOCz4O-?YReaB9(sepr|_oRwwoL9zs63w|l?g6rge{P&%!*{|xf!z3B|H z2J{R7dL{roi+;WneK-2v^r%dC8OpQiV?DD~=P-NcB8WN;Dtw-i&-rNX0{-ChR-(jv z$`f(A=6HLXEmN@Ut6zA&BgDng3N9rkQ^=WSP83=LFt3PY2Ln|VT z=eV)w(O8M3(REbe1pxP=0q!LL_cBEG3eb5K=)4AW_5(VvXG7-=;p0v2`Yj8c=L|Zn zPB1YU*+2ht@B6m&`VRN{E*M^V&A(@(8*u~b_qo3h(BCg6PIR*7Ixz%hf|Mw#mO>II z?FE0{U@iS?dQ%aaP6itIsr#BBzX%;`r!&ENCfe3zUKZ?3Wy!gcEwOq+1r|_-o;XH9 z%vn5BS%S%*{5R`dwnlxJC20T1DA&hOu1}y`pF+7lgK~Y2@o$WY5x&3}ICPOvRbPq* ze8m#^+FBA?gu35|c;9z@>9^d>cW8$8L$irZeeYJZz3C5LZ~9|zT>GOY)K88xEpf7x zaC7QspF91i#0sT|LLI`)hDB6=-IWp7gEE$!Z6~ay)i0Jjc$~vu2L5g9Sb5Tb1LriRv8JCTf8E z2uNaNj^8Fm<-jIJLug|lq_Np;Vw|yw@r=P*u!&0Oz}iL!)+%#mOvxCk65B@m~W_q63_7h1DZFpTEdL)TnxXCB%a%;|7@ z!br`BI(HdXcLA%rg4Nx?YByNj9ZDO8((WNjTPEo|vi73(6bAQV!uGawc5dbnNA&hA zIkk^8wJ$fdpT*+>>g=Blr31Ky19PmokgFByAi#34f#nduawuRq46qyySdQ?)a%7G( z7jl|aM+xyqbJxdMI2@3PgOxw6Rvjx9kK>BRgJw^O6Ko#op#*I6oXAy9LY4LLS}&g( z=J;1a0e4d(;Jy^+7iZQNl%l1zUbS(0{)K$e1X{7g={z%Sw?zd z4))F>avn@w%tbD7i+E0jsY{LTxD2Ab93sC0zT-;zxhfqJQ&-WiefgZ&7Dl93bNwm0 zqieXMYppkOH?-cWS|sJanU-2|#`h63IK6?5ph zRa9&dyT46fyq!tE1Hlt$x+cfog}jrC+y(A_mZfTP-1MA>GyLg!3Lnakgxw8y=UIZD zciweC60iai#35~6HNlD4XK!*2jOjuto*C*ENF}W{V{!di$h?gR~ZLC0v4jgLoAK6I8wWTK#!$s)Dzhi;Yp(iPeBo$h9W!zMR*p9@EjCj zmQjS~5t5d8SyC?uG%qsWFIn-BUFc<@<}ptQ^$J&c6;%dg2{aqjYY3!XH*~)Ny59ud zZ-MT&LH9cdq#i>c^{(jeGMVwEdQT{SpUL>Z^3<kKymERWWW;eJ_;$z@7eR@%d>c zpX05xyNjoP>L=;uXYS?~@b(|H_iHxfe&g1EN9%eE@ynrb#ePG6SqQM4H44|NWBuS*C*E{)fDKPYjI`; z+x@u4GN=*ryt}+e!IsdCSjmZ5{Bf5P%W&~ZdGxq{uFqdMq3M9!%+PdTt}irQHrEYJ zmjmF-=SpZg2!bdD@MXDHXj-02q3PgUCp29lR~*ka#__Bua`|iFSV?5KGD~C?OZNS8 zZEqjs?}tEQQBC5k1dUUK39n^Dg7HWs>|4 z&FbJ+HR`__P+uL=SOe-`0Vz}h=h@D|(_C@zqnC&aHCzx|lM$%`B1_m-weS|qwN1Z< zTON^{Y5F5`MN>x^-baJ?G2neHcpnGe$HVlg17dwGzv-_n%&fy*)>`7P$;~kR5!PbX zq6%+aX@5O#e*#!ql7`l|k+NLL2Hf(7mSQe+Zp70)TmZ7BJ}@Hs)_P`-Kds5S#5}P_ zPqI-KPcq5xNjA1T$z;fH3Ovaskn5(9<5b&|Y{s5sbJvq>0S#|38a_?L{FkCJT_n9F z%VUP6NgH?^$yWUROvsC_3Tzv}+nw_4TtffFncn9m)Eu@RJflXjY6TNeVI3qkM+<8L z6PubMsgzub=O;k;SykGut_jXcRMA7Brn(MU__5G7T_oJ)+1KPpRzprxv9x)!i0zsm zfR%>zS9*@#nO^8Na)2wzvw0!s`8VgXagCal-N9{bjJyuYunm-CTNwFvP>$^({uU$t z9pK>Z?Dfw_SM4ZzwG->jZ0ODZ1ZO*o+_%bg_LJ(F$%fp;*g*`rjo4dBjk%t!q^4YZ zD=D12C_9LeT<I5DU5qjR14tiP{g1ju8VsNU7(dP3*d^&mC_96-#8MO3mZoxaDq6Cogrs_vOz~t7O3qBB%r%&>3H~JI?Nsij z3CGmTQ{cM4;b!xS*J!Ab;Wa_t=xUFI;wkP_{0)~FDvQ`?ZD>HZ(3VI@f)#mf+|HU} z7LBM9#aYyRjXE(yhCC3RWMp_UWOxc>cq(Lg8f17nWY}S3cm@Wdi+cTofLCXVdY#3( zb2fD6pT)vCBFW=(v)!wRw0G!%ES3tWbLDBp^O)1~!6_vI&Z2zk0=VJ}jXGQeb+{Pn za0%4mQmDgaaJa|A;a)BlJpjj;Jk6^s1oSJJl&dUnd!F&Obw!47b#*SLB=vk&=g+l@ zYlO0EnX>Bu(qGZ>^|lbr#{UgW#*H9@?s{Ui+ALJdqMV+6a#$2{A8zJt+j{e71D1nb zO-%(GrX&&#eEUOIrtAxQ6b;crCpL_O4Xm^cMl(~cD5V)_YCtrVYRbn35_7&(cB2UZ zTPLU%tz?*GH1i5qn1F0ggk#NJc2V!yP(ikyk!`3^H)Z!~Hybs+1!{aN)c7{2@$FFK zJK)tijaR!9Uahj%qJyvQ5-qx$#diTyn0;ba55R06H2gjU zejf(EkAUAt!S7=*+Z$lEkBiy%#SXpGw0c5VdXh*@cokE`(^O`3iy5%e7^?1U-$9-hVV^U-gSfOO`-HH z?(S`i+vhX6r37S)Xh-TDY4=@j_dT$&I1Rj?4V4eLxex6%Br#a^5pem~;PMG@`4qT( z23$S|E?@X?`O;lO;wIHs!ok+Bj(;&6{|b(O1INFE<3GT0uRJfuz4JVpkdw!x=H_wo^*oo~A2a!-+a#H; zP~}S#1>8hoo_q5oOWC5lEW8$T%|M=?*OENpwND;+?VBgO_RAAqm&p@e`{xO-1AM#= z^zyo_5V{<9x4gwG5#Zx>Te(~KXZUwDNa!eKI?BNIpV?u#jXF=x2Xo&m7M36TxW{8XKc*59ky`xoRt-B3l+nHbOToly@#%R z+K^GG#=IeF719+eT$`w{Xk;6i;OEjQAPXW+Id3y+-8^4J;v$Wp{bdU7(|l>9F+xiQ&7B;uwZwE_@3yalJIYTXgFXGmS8k$- zd2zFXOqoITcouL5CkYI>*=VG#gW8=ZYX+u3M@J;2c+ZiSpUsk@Nm9$51x#n5wiK_H zcZ6Da0fCMhxwrqFT)ruLmRhTtGK9d>s<0741VU(r5LzIFD1;D$5Dqp%XcZy+kHa=c zw5g3%r5)M?EJH?{%J};Q&hp#Ca;$N`W8IUB?A4QF-P@ScJ^*K5fVLmZY5zQaMvs^9>DPYjSWk48@Eyl` z5O;L2HP_hM&cMwlQ`I3D*?pe%P(#IGpyF^)aRjJ15+XYaLUH;(T7=R=cgF}!$1-Wh z!5BcpK_1t7JQq0u)L%o_Q=8LRJ~er!IGeOwSWZVnbh|;4*g8|?kaIwb?AQ~%^An0Z z*|zT#%Uek)H${1X4|m4eJo!;9`wmu1I&yLiL{T&nQ$dqGx<;Lt0k15u8+cC!yr%%( zQvvU3fcJF3d$O~@o+nFD6PE@c>P!*GS&a4BzGnq0wNLG{TV&7Ei5^E}TDL}srLbyC*Ds_dKN?i$gT?P4E zoiUXy7wtKyx=@Ds`!UDs_{YO5F?^Z$ZbmVk&hmrc$?w z*#*qwpu+X-BHufhiaRZ@bZzEDY6tH%;H7N|cL^zXGb#5#3I60h@3nQ%ngrg*MBEP| zzUXQE80H@gDzhaSv%k(dkT|59VxvY@1?Nu~H>Ri7GAd+m*OhZ%NBZHEu43>O(C=*Z zfZs1UgZhJ62K9&hgZjhPp#BJ~=1~mlk3pv&ho(MZ59&|yp#GFQs6Pz{ce-(K&xj)b ze-z5IVj|D6c0O-e>wTV)@df_=MQAT2)tuVQu3D0G#oatzNYmBe8SBVi;$6Ycxb|+5 zCW>QC7BJp`u#UJm81t7j*)E&OWJKM?^7yJWr47At@Y= z5z!&IlUnss_VM^-R(*cceX~Go$l`$r5}LOETooolJ|r| z=}>J0HPB$+yh_CNfYhn~p!Cj?*_%%3^NFpTeAiGtrE>F`p6}g2IgcykTNP~HRe@W<4vq`+ zJ;8BNK7wPas*3aN*H@r1_!T{Hl=M6120Ltq#W5ug7)_uK|GC#PXNU0=UZX#2Kf~BZkX?cy%Y1riCk%%$VMW8zYK{XAiHpnzhZC$0{O7~u$~ev$;zn>PsJomS)AH;JMnb8s zTD5Zq>pYaz8`c}ZdI+pHg7qe_9tP_-8`dMj`hQMYvtZJ~3`cV>;O%|`k6Q+w0B9XB@Fc)g054@5c$y8o(>3t9 zfc91c?L2|@KjLn_pxVWF?P3{i%%f(z^7p&tyZ2PLY}VsUr%LgD3U7&o6LN=~wl$^|`w0a5Gm8g6u|Vgpe#JVF zOC1CtrYsox?3=J-vMe`@Q3v;^W`|@^vqSxAc9^ARhXcDKpk_w`)1!dl(YBf$!)kV{ zt7gXm;rk52#|y$sk=GLh@e>)#lPsk>(4%xG^Y^C!>#?{c?>X~ILgu+dV}w%-I_U@y z6(v-yIyJk>on}<-bii{4U^^2kcNX9}8-P4&069khSz?0D752|#_RfdGfy$Hp3U>jQ zx)2~#Wf6i6`GhgUy!L%jk7{*s7PY#>uU3~@YIPa#xg2VB1#r6(I9+9{)zz$4*SKnR zEl_;ipm?32xY!(BFX-LCxZG$d&jlXkxrx8O8MxKDOCo%smZapY5t}Dr6LEKMxGLD% znM#ubiKT1RE!kD*R-;0<0gBrJ(H&5sI|0pIVE$Rd{N2L*e@NCn0>!<|>U~fo(0Y?! zk?!YG4*-zr1zYocukFs)xIfsVCOwozlOFbK(j%58Jqnl}gC;!=_?`eDc zt|mPLFrPPIJ}Y1@K1!ccfOJSifj2q zUt7xle&*D>iEpO-`O5Z<(DW_S^c_I`t2+PQmakbb{DDdN5u_-&B5ZQ@de#d)i!U5y zMw}DFNQ^kNDH@8!(cw^5u>iBedZuSJ_PTs?I-=%g-P15H?$4Z$&G3uf6SHmw<1PJjmmT>Wm$mq{h@LiJSF~2$*y}7}8=RG%pTqRb zvHUy1Sz4=Fcs~`UpNd6Y+N&(+DfSyykQw_8FYv{FYZkb%UllC2x%KNiV^**6o0)^j1wO*o~?5&%U`WgU`Nku^Y`n(dOPG~ zF7DYl7eQ^-aI2JHPjQM3F6BvL$U{G!%SHCH2tPF*cUBi|2b8K&wFOzn({+tcUk^Gs z0lK+9Jog6B$qk`(UmLBPi1Bn_R&LZrg3Ki5eB%Q5v}BgDlZCdm3+yO!3fJ5OHTzMN z=|Mnk58m%>>i|fj_0EZEWPNgc#d$*V`5JusgB6fqVx*z9S&t36RgGpOw5ju`~TT zkas73G`dq?V0I@OxT8>k`_SRcP>eIbIB7dlvf(Y42pWZ8qR-xzXfgzaK~Mw)HG`lQ z=s*-|?2r-@C0KaRts;~;OmG`QBaqYJvG#T@5(iJGal!)}BJjKi;yI_8iiIQfk>+MC zN}1!*)Qw*ZiAr*WP(0uehU=T!r#m-doU;sWAwJ8{7?Ff1Vec9JfRj|QMkO*ZW!KPQ zFiiqe1x!=GG!0BUf$7f%)46aBgL-6L%@Z`|GgMuGY60bU5gOYIoB(`RuDTnlmiy1W z+IXsNx3(RP@9vGp_b9LrzV7KnCS3^ZiX^egLpN z5Lh0R5t;u?h#qVr^Fx^HL!o}%aDj&zQ5}xvjzDC-Pl4~`>yaihKMFJ+jgF6jbKDiq z@z?_A?M|ER<3w)9GZ`mXzVVRE06lIdv45Q^pD5&=#N?d}-S{uiaf+?3Rv3RO6LuO1 zOJ`ZFv%sD(+4Ngku~8z?KBQupXC0U>0z?|={CFilw5TFY+SALRKslF()dqq=x@70H zQyb)V)aibUcVgKyvc$4y`eWI%tXTGJ==eE^WzU5Mo(H`;-;QN3;8^xTH!E$i73#eET_vX{XVt8w}F2-7rCORA@WLNl2-wcs{zzCFuZH&=PEozUPr$c z(-1kWsJB7ldS{HhfqS|UO0z00@KHWCfx<~_AsguYYIS2HyEqLl+KQERC5}F7NpQf#Jt8q(Dl(TI1P}1SY8CV9 ztgc2vO;ISTjFgoR)pDnxK=YNHgK1ioKCb74_BSwCLWZk4Wq%>v;3gaDX3Q zpwCSGT6KSh^m$Bwz)1f=NdF;7|6xe~5lH`0NI&36|1qj+g7e2&VowxUPe*$O+$S+G zJ!SfP8vQ+k{+>mD&!NBPG5p+%;pc_y!_SMNQ!jD%FI(pMcxGt6A-`SupQ(;|MLK+y zJABP(=+bEUb&=4$o=MLe+|Qdm;`$bFecRyr4sd-JxV{Hm-v_QA_;CF&JFXuIn;&!c zpIErQk%{X;e9rc7Vnymxq5LzZ{Br>J_agC&Y?A(x3I3`_Nq-GVe`6&5EhPONB>g=k z{R1TZqfgR5Wta5Ng4ZwH{jZj!zwBvpyOcfCZ$iNDOu!$W$?a0^saK(eyA_1>F65KL zh0^uRp032$@y3p0tAgXIg5zgyp96M6th~a^5G%jX7h)9@x*=9! zp-8-_P(rNYLeYdkp-8@@&N@9%i>WeQm{{v^ix7qWZ@FvtT7 zT?Hf9-7$Yz{(d;chP&dS_E-}ih?^TyU0Dy(1;UYz zNIZ;F1M|$md}Hv|O9EBF%rK+T&J|V@Ah+%KbQAnrO}Iy^oQLMf@0bqB6NJ*F$n;Ub z%|QkoW}jr;957$hs^tr_j^Bd{&4F&{KpAwSyimNsVCcjOkopRa)K@H&NqMT*e+6o_ zlIX?CEcaC)_x~0#L4kMKLfa(|VbX>c_T-XREffP@%?M$22w@Efp#nmvgb;=mic6+$ zNCd+Rv%2Ip1(_=DzS^>wA%z((`A`#j{9P2aMu;E5#E%4ae>*Bi+48oAg3(O&7?6Dl zJfc>pl=g_b@*7>lYJ>VmCBM~G8ywvoa1!FUBCH&)=}lQVaa_$z?MPqEc9PvJ(A!$S zTmF`*2#j(+kY~?EtFb+fG2^m~G2{JX%v#nMvo=(C9gH!xQ0;Z0%In!<%mf}|)_2F4 z4d88pj|y#p#rTL#0OY0scq)9vX7say zr~jMNuLF4cU*iC{MWLDgPvf4Z7rGe@CsBr4&HxdVhtVkZ(bhJ3ek{eG<4LqFML&pC zdkJ8Mp=~SBHWReX0&QDE=yedQOVu_a*2N)WTY+>t=3;x{q7{@)^MnLDaFHFs=#9PU z>GTL?hSAYnyZDC$***;qiDniYr-)BEFLE_$^=y-4Ps+Ss%AsR`pOqqq5|Zgzvz-D* zh4=+APQbt)^Ft4mXSgOftFxmcf#cMYN;DuVh0>>KHifjXc;=LH3Tt2_`wh<&=)YN(C7q{@bnC-uemUGE;Lq%$IoPJ%p$ZUfD$*RHqqXe(nqw-JHl5KW ze&7>N1ltnv7EK5}Hsxt9SS_jdE$AfKeu6fSIwQ{eE86|inrEW3C2Hkk)|AH+^MZ{k zF((oqqISyAJPu!G8_nApnpY3aYk=m3pm~kZypfLPH6eVtwAVjNEmT~V-a0kL-=VA=rzQ_>2U+=i7BNK@Q> z+VaxT%z$Z%EdDPAYgC=m?Og75UZH#aVJWpg--9u7ig$5uyP!9Eq)ohn+7;mLX29(R zxVr<~Jpk^W0Cz7RxO*2mXRoM5wU4m3FL$_~g=&|Bs*^9At~9!SN$oFH58$c?f>vLd zgR*JR!Cd2z9yRDtFnO3^@^CPD1eiP$OdbU$kM=QnOm+=ARtP?hyFcFI_25hm+Q@7l z{YTDLogiJF$X%WUj+au~CuhU<6z=KN9J#LdCkOS#j_(CL}9k3peP17+Sx z%#+jD)`L3kGiLnqW2z(46l>PgTz2Bk&;Y*i5a>*qId20MYY5JXbj?esurp7p3A)ek zm>XUrJn4OSqmuI>ix$b7Kau%-UIasfmjvgHHH}iNy*(19^x=96jt5ra0e6c&qEtdT zd#p`*tZ9+6$2|;9o{r@Fa=?0TUT*O_4>vFcsWd&(N~sxmT(sz+!IKhtU=))D-GG(y z+{$>(cadnw3ax#T>scdiu)Mcu zgt`&Nca!PpW^{B5I=U4d-G+{Chw)tsaNeUx-EEleCg?= zx<@*{mpi`?+%ENA?iX2I>hW?9aGwv_2(yK#hk)?I2H{75@S{NZF(CXn5Prgk@RKgW z)S`Myn0%T$e8xifflP#H9{#V5E+rd%R)Bwwfqx#7{ukk;i0})xWm(H(FEZpW0rF$B z9m>!wOrZNl{HBz3Bsb9(u6M4xF4B1nK9J!g0GLcz)*AFF%86TfVS^QJ`xWYCzY}-X z!CuL-4)&^l9qcu09qe^Dhc~be_9mRhTW}I@+v{NO@H*JL?mF0e7!B5UMuYdoiTrJ$ z`#@~#Ll*Q$mQ#Dtvo!NDfB%U!dxetouBi6lX(i#PcHZrz-(DMHE$&bhS*26v#sn=A z1$5DnYK)~-NOjqUiY!ZJ^|!^`1LZqR?Q%5B+;G=+5@4rauUnOuaU!8Gm6f5OMtz!n zl>f{O4WC2GUqJd_VrcjZQvVuqo#M##8!Sg0@%Mv5eJe8kj%D^eWcGI?^al~k$DRTG zM<)9xYZB?oR{e}Y{TCy-Um>~QAi3Wmxj!JeUPUsfe~dxBcM;oT5e9W?Rpk`PJ0wN? z4oQ*q4oT*~-p4$Z0S#06Qn`RD7Z$nK!91mkin4H8%yj}q8KFx_5gs2YGLMfG;qj3o zT=go#<0D0Qe8k7)z#?zxvaArf9Cx_9#UYW9CFKyk{4j_Mmlk7kY&_w5QXYiA6 z8&ihUke)QB)T)9s(PXcAuV#o?9Ym}FA}T;cC7>KuB&P0mKU~1f+S{4}Y!%a0Ep)Yl zgds)d_IVfHqvld0K>h7>#gLZ$%nM+8THmg%DWWj^yD!>_Cr_C~3Y0!G)uD$49B84e zar|-}y^KcNryXwcy12G&-Z$0O9-=&Q+Suu;nLM4!i&ep7XG{+-EuA_t572|G!CDn* zu5Cc$2@tU!|6QF20&^Wnxu_eq`B(`OGw*$Rv&=rYAQdYIS+mwA@ zVuvEneTg0QpZvg;{y^}+bL(qUB(O=^HK&S$|@d&RdxMD7^Ca(CC=a=vFi~r%3Kf5FKm-ny6}GsjUci zCE7t@9Ni|M>)S%tJ4DwV#vN!?QWQrqB`HhkTZ+7E>fTqE(p!c~#HzsMdsl^+_JyaX+mJScxE{s%-W)cE;LtTt~I6Pn~(C(-Q4X z(S`_?tm$@y{hVu!o&-@jIW=w`d?kaB-TK&En$)(mB^pC*y!7pKmWT&9o}`J59Ng@T z>uG#M?oqpMg<}~>xaP^T*4Y$I^!chBZ_!}7EianTd^@VmjNd?yg<9e?L&grBo+QuD zh%DHFcNu-!1^Tor^msRDO*gb=cR28EoXBDi(VKq-_vZ?3Pcg#1*jo06JAgFj7TMF> zeYnWJCg|ub=|$X4EPBnI6Itm=QH-YHVJ8&CvSln)Yhsit{8A$$0p|!0;G=Miulbp1 zCLNj+Nx5%7Xt%F_sWKTmXnsZ&o92XCA~kp+ix&;tgq3`QKqhcqlG51G5|eM($e|`U zH67rS>xm9YAFSnND3Cke&QK<~V?51OCX{nmDliY{v4%mQp7)h&f)zFZ6{Zt+@i!iJ z#zynPkeBXxiO#mL90KH~C~I>^TW88cx~>JXjj3p@WdhWG*==@zW3vaqW)FnT9t4{` z7&dzdY<4HdW)DT+HMZB1DTg{twDE9OwIhn$#BNK}+L6NGKAy1dC~o`cEMeU-7zB?s z02~JZjt2lI0Duz#z)2YD_Q6nhvOlalMc6r&yFASr;f~4->*#u9RZyKSRnFilXM#$6 zcUCrj&gPQm6j@inJ(i`;1zYDCw$2Az7l5q`!PZ4!>tY{UmlQcy!R?mSr9$duOu*$9 zcV}mEmyi780dLD=oFqnD-Og-vj>M_4IJ}$&P!CgLS@pEq`KdbSbgN1uu^^`RFG&lN8k()?& zk!nAi4U^}%t>@8JP%v4be^)O6tQQSfF9EEV0oE%3>s5gDnh&hk1+0}BtOfO@-Vlc0 zWFp_PP<$>E#pQd;&5eJ@9{S5^lS=8qjCg4}g2)``qF-`n$T=@4QZ<_e`i+tO9e{iv0#Zv5K z2ezB-zL9uLZ78Z-D78Q$X78hHan}K55+$meRMFRrg;7`dcedzhZVI%M_E*_b+xG$seA%?*RUOAe=&@yIp7xNbV{@Wh~y* z*2&kc8tUt@woqT+FiiIOXiAPSFJN!T`n>nD#aX@ga>a0_%R@s4L32xs#hI2tW6PnF z^BkQVTrBgm%Ee$ntsoGs$Plaq2o|e_m4y)k(T(y};r4>X)(K1-DmA2740)(wcU7>v z8rWSO?5+WJD~e_8pl*oS%3|jPrq!?-ChQF7?$@*=zDjY%&_Q)AnW-wNTg`QAirsXW zcA*j3xE;w=Mipnq`J=(-7{ljS@Hq~Ajt8G>fzP#le6CaMi}P!R%5}NR^(+oY7H8eE zwRKQUkjm?GGx4de^0oKcn!FuW^vx4Q& zP1D(ltqKm+2AoielbGnwO?hE75+15%_Bi&=$};wD?H_yVtg&|+$bVamz1u-Awuc_< zV2`~!^4PnRJNC|opWDUpb32Qk{3|V2TJ>Tg4Xn-~%S2`r+XG!Af8PXk-xMzxz^C*4 z1~*qL!ijV`64s<*504MZ_$KNN!B{gd+DF2*Dx7^dix_9n457C`8KQ6oF(^SR#JrCq z<~bP7su!0`)h1}PGq>?#H|71}HIopQ8a-~XgBwj2yXP?cs3-+Tm@>Sl!Fwlop9|jS zf%o}vgpF{7UB%9(nzwDWi*U9p6S12m=Z@^dn=PSksk=MZ-NPE*>_U6mJX?-(FRryW zYCVKAeLX~k97#^s0RI`Wq0_iOHq6rNBE`XKpB`P^zFAz|etuWCzvb!5mGz}c6u_T zcM9ZlxFeraMLtV|xYGoc)0yitgzHvNd`z+LHIFm7)LFo0ON@lF;5DslYr?rR9!pba zqig8TNugB4lJ|c$8Kr+li|XnAQ<`Q6m70@gs}K4|A7L<@oYY8EW|?UA*iT>)XVzf2 z!b?uYuo@qIi!rMp~|?q8`deW_m|MtCKg*HxBlI@9BtuIBHrf%)C#J74T9@N#@9IRdKeY>YyZG!0dSQgK#SMD4RlEnGB4p~2N@=r)j0Zf@`+Glf=HNmNqO=f4+rRCAD^p0 zCMmh9Yx0MTfG?_5*JgK)*BR${J+$@)X!DJ5jyFMzZ-$xs}Ci=MG`&YEKAvC%1Z6mf8B@q|Q&sQKS~<*9%Br7jV(fbTMRw`x-5y8h z_p*%6@B2sR53JGoL+JBI7@a?co__+p{?s0wKjYE)b9Z$90$%S7$LoEGg~@*<=8@P} zVq;&kT7P4i{o9_A^;`b_JE;Boc-ox&xu#bh@oMjEOUIl8e)i!Yb75A;-U!2M)%V$l zwI7UI`w`;)32N{&+}bY?|F016MUH@f69F#;+I|;I{$QSa1tjDL!Qc8r{@wvj-55aj zxFuAtp68CEEX7(_+0l!lgftv;jnUTcqk0Y%=~a=+9;u@VmDS1;H8R@M$mk_e?` zjwdgWCAVe3pW8BE<+cnUw`BmiEd$7H89;8!fSubiz_~30Zf?tf=;bADZp#4c<-eNo z-_eZz0ZIPJW;!rnCI1X~l7I5|%fXDxwXmFwx%50;rsFXA08-eBLs(%F!gZ^T>AIDCn1%0I1c!HYX(t~a?vx9q16JSEBdQI<9gX%#D4q&B zDQ6oK>9qc}vxCn&$IPPv@`hrlF)=sdrlO?qsDW|IfWINge$nv8xnFA3@`0?rdr-h+ z0)@qt!IH`Y$OH-tS^+k4y_*R%AXAdvdi{5CS1XCOtjyZ53bf(BPE}9Q;b6Nze;mejZij%DH{nm{#p`7dE|qs+-N3f3p)($K6$Mx@}k#jviG6Z6O<+}QR`ds8y(1)-Yv(Q4_OR<18HPKZe$`j>#_7k zHY(=$+$65MG3uT!n?H)rjqs_$S~8GY`=BvHY+hZK#JX}hgubO?e5#9|Uk-#jl^ljh zH6=PCd_GWVFcQk7Yq2V%>8a+FyPic+cf@@>g+L5M;`IFCB|qeH%f+S>-aH|Xel^W4z(0AUA!vSYx1fo`V&o*SAC{B{Oj z^#R{=Lxh}0ts#K-hC<9~Bf|1oFr6kNk1*Pc1mq6g_5t_3A!evKfID<8ATo-cV=$_% zU{tLE-%1Iwts{y#BBVB^quny4P$1*Mq20+i{<{hs7jhF!ZU+?PZ$MYl)?sUfMKPhN zfP2lF0>0)%g0l5i%!zbW)CMb<+=_1hqO>kmqiO7_^dBS;+3ByVbQ|%=JT#+!LrYaU zFpq@P1PVtp&+>8a6MCrX1f|}>&f;~t$GJ&ombuAX|J-DrH8+_Ld+Ng6WEUv=u2A9K z?72xd&rNoB=O%l=72V;uqCG{${|7+cOSF7%R-SzqH!Vey0dO8|C9fO{ZMNh|}r{m%6_Jy}QA>dmgKT!}piMu@6LiF%J zPuHkUkt(NhmD2*AYgDHTGW&XBq%*kWnSmacyUzk!XB)Q80bA#St@FUv`C#h;A6pj& zvM+aEB&1%<1YBZqcSfMcYg9pXsnoiRYh51jUZV=CE3)x;B^SOb(8D#VtHI$lhQn*Y z;dS8fdT@9HIK0uv;Z1>T*Qjn5N^jxLZ?*WlGLyg6-N%C#qTaVjtG9EjcYviuuYRYE zkBJEH;>PZ_2BvMzqd1;TIeOxn7xYcWS}g0kTT3kwN+Lv2hKlfOc?mbQnwzw5Xec$* zNiakoumj_9igpre)jip5_+BHR`yinEA)p5!pa&tKhhW1GJ2w2V74dnQQ;!Iuk1`04 zS%%;%_qY&smq)dp;95^+aR*O9tDZJQKLetl1<}ue=;uN73(%^&pj9vW-N8#j=*!&Y zE0#h%k*QEI^CbCSBCl74ve%fh*X;@5Uq-?kwsfpm=1r#QEznfySpuA)^dybrCZ48M zies{dMOvrBHb9ome41`KgQ7JCW1qs;dR4H(Y*UbFS{n&&tM=}K@2uwZL_A`>d%$6U zpZ;N<0yUtV-ZkKt4D5553)sUj<<;9gMosTziJIQ^M@{cpQPca-`412^eF$6l2)h5V z9W{NzQPZbx)btt5`7y_wKNs8hSDcF>&M(ABzhr~>%5ooXdg8OM`TK8RFwfEXExz*? zYNM^05T$YmE>^_mjz`EN@2&*lQM698R7Wd8^Fm#eKnKr(%eyZrUM@0E{J2X=x>9&< zEG!4fwBwN1!2}CEspt3(h zDPM7v@|S@7_<1H~>Q}-4H^%pOYndQR**}E1uRUW;uM(=+yCie0$te-L%q;=&c_l)8 zehDsjl?d^LB|>~riHtR0W2`AI@r^Zs5+=5UyX;fqDhm;jJ@o7=Rr+z2WlB7uXaABc z{0!id150`gJ(mSr%Ne$o2U~-{Rw>vj16$=jwg#7E4?R~9QdeXGRTObOQsP};-L%9?Q8pDQZU$60FY&LiZc&02)@cyHbO63(iJPMA4PINF zQR1d3+lo1!DIB*>f{U1Cq`5U3t1FS^RieX_qHLQIEU#`03b#YI+rxPfq}1sSB~B8{ z4AyrPS?pZ5no9gD*<*|M2 z&Yw@6K4nX_2kQ$hQkEbA=Uz`N70~U|9AwJH5_;_%9f(!A9RJRBapG3y)fP1n5_Y|h% zRGW^|3>~Kf+%wSgnE>}JbaghsJsjYkBj8qN1y>Jjk@)~cK)S!xBeQ~fu7G+T({jEA z>M1@@TLr`jnIT<=(FS_~>wQryT+d=t7cyXVeQm2tsf*YKE+%aH8iNv3yM#Nvl+9Sv z7^7=_^+I$?UB=ZeXT!&qNlIPewWMZ63tsVXU>kY;Q(dXQPpGT7-K%*V80c6x9g&WD2kex(k=yP^8G<_M|Bt<|4s7ab|A%@* zW$tX*7|^n&EzTIQF&GSIgA6vLO`EhyNR#Fyp_GleF!wQccXxMpcXxN+?>x`>oO{o` zNs+xw-uL(A57IX0p6By?9yxN4&{2Q1j8@#F(q1~zY(Tu3{ZM`{I>jwaT`Ul9%}8f% zpqpsKt@O9NP+Z)`l7j*2h{#kfZU=t0QG;^iJ4j!dw4|nVD<4}x+{pz!VL1*#vAa}S zC4yA8#G8&613gDLH(*WU$Tagq<$p^zYSVr8-dIUpFnO1Qh zOI#z=))XR->6Fb*I21~Y`>EOV_e^Bc?U{5}^*^9OPePOZ-3OVGlysMPrmbNSkxkwxN7Dn=0(Xlm$)1k+*hmP)u4PA3&_bNy|BW}lEr*E~ zv0a+Gj%HTsq@$$jT+LB!dQn=u$I$4T(4sVjue3v2ywAoeZ4Jq!PooI&fzp$$VUzx$ z3QO`VE3JG)6>f&K($UdTs}}xnS_y_0*2%)DI`J`jIq`I0QA0S=8jjInz~U3;Iu({t zEVfL)7|2;{_H2K$c zci2?3^8-E9&7U6$ro@k&`hVhfY;!e2+A_L#f&ADcJS*H+-TvSW*MxgTFV2%c_KA*@ zBl_?b;fuqGa4K9CokjQPZl!dzot0^WgnhH-MsaG2LTy!a<8{rTckN02*tWA7YMdR;ww;6 z{rGue_%#*}Zz7WZsfwewDwJB9Z#qsbs;DWMS3p{&1a0x>LP};{SYV zRw7303C$bEa1=taXsH_Qw|6Fsm-5*^`U+N_?FmL@A1uMMf31lG9rhS#mtDtJ+2K!? zEallgu1)qUBLt;%DK8S$OU{#?rMzBHUH)mG46o9Dvd7Zd8|rVhj_MYcK+4-5Y)O`> z>bO9C?XYC|Ql1C2+vQ}%)Y)X%HrxyqqvMjR(%k85^+n=7C22eQyX?XSJ7Y0wY^sx$ zj+%!g*H}7xn2tTA^l&ftdzm%O39my^l+cShqDAr;ilvfkF7}`yawBCpI%puJ7JkJO-e8kg_JgD=(TI|C z2iX<{spQ5>c|uzKvdL6l^UCdVq**z(?0?9#kdQb#lRcO6%27U+g>DOw_M^@Yxj=H$ zrHT&Op3-vCM2GA&BsW_+d!R+faOtYVCts^(dN8>}d!i#GS~4-MSkkLV*E%cY$<3GY zF&j-OIwP_D8*0q=^Nt&|#k410{?J6QuC zraB2f&9^0es+jCNW!hDZwMJ@6P`YW4B^OvLFq#8&tzHu!G!towgo4Qd%7~^@4xBo>7t{x|Le|7va_GF|Fn@)frBfZQi>`C$hJd9I+%hvMOBUuR~+vKHS5<9)FMU zv(tKVOt{Ryp~~5&riG@*+usv7hz$!KQ_B7^IlPX)D&R9)3}4r!r-aw_uMPew1Nd}%F*UrNzk*u} zpVeAS3$O1lM_b`jZN>EP2L2%c#9GTtK$o4UhQb%{Sq+6R(c)7Lg%1tIPT>tL;)W)7 z4sYc5T7E?j5HT9DZX#xcH}==-20~UJPxyjOKD&V+Rl%*LaVj}8yotY1{pb((^lyO1 zK_NEdaF_6={&nDZR@1;%o)z9q>dp;=4-LcYu-88Tx?8P+&*7G2cHJsyU6Q+oH}_X) zCDA7A7T&_&L$(M$-6G5h_wsvP18`+GgYD$p@Rt4_+#2{)PM;UGcS*?K2XayR>RsM1vh^n?gxZ3Z9-TAND^U(tMxCLkm z_w!eoo}x`_=YM5!&eqN0t^8}scy;-IFkIvJ7`ZF!4~OghrFPDbg!}t@>Wq(Ql%?R}K(eKOno(!M6j zg2?s@!UO$1OdpGd2l=<)Oz)#i@8e9LBQ)DG{*vZ!Bo>spDH)%aOk}+~3GuQSPqJN( z0Fq0RLXH4LpaW?><(H#n=>w9xWICLu$J@z_yBcX+A=x0idy)(J{D>TLL28_tUX)ID z9I#Jv(UN3mlfPIRmYRs7dn`#Vsq&WuGwnP{klb@#axZ@|7)$Ow zFS(Dugr|zB3EOvGazCEGNbWx`c|dqZz+b4II&fa{pzub4jC!k(TskRVRtdjI9vsdK zOLh*)dbPw8IG*I8lAObqBoD6&r??+FMfF3c82!+hXk;fN$s7?*hm+w7>FLtiqY3!daxk*`&fb zq{6wRLa|oiysDhyJjwH=qzjfLFVvDw)jaX{$%{zH#Vq6!5^^aCxr~HdPC~A52)Q!1 z5S~!-B(IW^u3nP7h73n9Qb%WG?hwgqNy2q3;d+vA14+1%B-}(2Zq7(h7f|iDgqNAm z-6~1FZAtQWBK2BX=4yJMV==^Td`DL#Hzk6dp5&bp&|OQCcN3r;`TlYYo5oR7=ow+m zVJ=KaH>MeC8dlV17SyT4SJx40k~sjul%lDeQH>4Bdq|~wS*80(rTa;x2S}v{Nu`G@ zl^%A(qa5EV0_|Z>@)3#d(Iv^pRy(@KrS!XC6830+k@1bJWui? zsp-c{lAn-$Xj{{ zvk(oowMB1!rVpNR+g$Y30ILA78UXtN;8p-w1Ardw1wP9QYFR`b$fk{-W9bcJJ$UY~ zMGSz5feFRKuiEVW*Nks2r(x?%*haQ3S8z8xXh`xV_TJ;rf4{w#hw8JAFrI~*eu6B zlZ%}Nbd{E4C*t1eozo{szdjov&(R>y1<3ON@_c~203a`PfxJlj^~Egf5pD?Zme$!(|D*LmBT**5WS1hp*|{hwtXX z_jKjM_i94#1DN{(@&SN;5a1pHq2=0#AGUn>5fQ&&tXJ*zwe7(cIRFwbL(5mRmajs~*P!L=(DDsv`KC+Dw{#@D%{brri*UZH=y}l< zS?_7s?*sM+fc+t0e+1YcTaF+xf5J~uXno3{KZ6b41sR_kf%F9h61}d;Qbv5KqG`|y znue~_5?=x1*TDP@BJ5k}@*S{$56a&LDtM zPpMr%pIh+&P88Aa3b`*gFs5 z-G@c>1)@zAB9d>0W0e+D4Ke*7W-ExPff%2~x0F$vhlZ|>Wz-uo?1qly>xQm>o*kb9 zs2I z7rIy(%=HETPRoPqvg)AbWf$l^OY1%xy6+0zcZ2S8p!-~x?(=k<%x4`M{sA2t6|FN} zF&WS*H9@6js1$@sA*j@1IgQk(HBUE@VOA&t+ckoys1bq-CsO``*3B3eNH6Nx*DL4I7fYZvKGt9|CBdEi9?$)(~%PfK;3^H5SRj{k* z%(I%-`FVEJx;W2lT6d>ZsrlH0KF4#@x&)N$2}7r@fm+|k{RW90J zyVU`x`#_lCAi!7(SqHBbtGgR z1zAT!)-jNEEKI#GOnqFQ)dhFfe7v&b2@GHveEV<}K!;}Kr4zZ>Nx(UVVtRb`GBnG) z^v7ED#<{jR(N@>4rUfE|AjQU(;p!15L%UP7cBewS)1cky(C!Rqccx3bvvkfmoAI3k zeA}-UeBxZi#)+J8Wp@en5-Xit%2+Q0<>!Kf%Z+q$1*H>O z>X$7bFXlbI~<0@4i;`(2U>Z!Absay-=e+2j+ z1^&l?|8e^C1<1$N)w$&f)`M|B$+({a?$N+)^w3rcwX<*dbQkEK0eance3m}vF#6|! z{&}E(0q9?(&n+1JdK&#pHu{$t{VPWHbqIV_N8xLb_`2=}tHo)&%0j#$|HvTT%%iO& zk(B&Wyd{5LN=V)Yl6O>~PSq&hWfaY+_HZP=s5TG`s&{?-p3WoQ%i|rE?=!v+vhhhV zR8V|~$o`0nNQ56F_&xz4pMsFj0ONDQSWNrjXp`O-d9*F!OXc9S9x4_RU*%zjR;^l8 znpV5D_IFE*uSs!Jr*BxND8PTq;J?cTAJwS8*QkF0>K}pnC!qcrsDE*w{*_VxMh{0B zZ5c1;Ok2mm_=~YqQ~XX3N~nJjRDV$<&YMcR<#+3LF!{u08hQ78%O~>k33h&d7d}yt z56p%63Ug7u!d#rMFqh=xwPHSb18+7F9{F?hccf}dXb&Zn+LkgFTCRl7K3}s>r>5$) z&1#`N)_Fu|){mzXy%W-OdRd|)#V13h6Z$TCTFFbtS+;oO--TE01rBGV2Hd@}8btWK($0HHM0DSvi5#r++EU zXmxlz7!W~CK#e!BPgG+Njr&GJIUs7k}cpQz2GEUBHDVxJ+{=r)rX&4#+PdRXKaYR z$`Dn|ay3|94fXa@w(P0W0Cn58Vi7eEF`v4af2k>iFJEQi+I+ibSeK6mz)@P%=X0NM zlHDg<9Uw%17;*p%I}qt~5DY#T1|E{HdX2;uzoO5#1|7}{hbe1q%~TGz(|B~Ne0P6w z8!j^fbWb(=i>rlTF*4ukQTEKYdz7Q{%^u~pl&mxj+tFu$yAz|q#P(of444>8pH-?y zxr6eZWqiI%SAjK7F*2UD-4WU@?|})XV}_7qCi3Hx@HnkPVE32ZbXtB&*|eDssTs~o zGl%oLz(yP}Cqiwq5OzAzy|9ks4a134+9M+;mCiKLjt7y*w1z1&a&qN-n#x4dp<3_g z7TTB69ul;rRxN#``!HoPwU0%lBF|=B;0ik<>s9HjHv?I3-ELi&N6b{t;Ad;@0&8|%e3o*BiTOEut90H2 z?U7z2UD+dMt7CX}<*Ikfx91xiJ|X7VRiZOnX4WI-A}7tucbq>opVCsH-j^jBsCz|U z($NE=k$QBzj7}|K6M=l31Wz(WQ@-;&qUL=2!1o|H4T0m9eD`rgtyDRgBMfsyKz}qJ z`-x??5DU1!r@G~_d_Ll!Qz}Os<(P$rzr#9rN!yr=XoKwk~2lrbO zOl2QF!osg>!#-n5PT*GJ&OcVlM|)3Cdw^Ll$w=j!lGKzd^Y_Bt;RX5`nhN|j)z+3X%n6g z2^Y{GqTF5(KF0+l7wYEXA|SsQa4tb}aV(mPOY^OllLv3Zun1N4FSJ zv!RI6!FPXK+=(j{x~mx7)o_o$8N)TX9QIm9bR7__$-OC8ju6*(>9jXEo%Tkn4@Fgo zn_OO7!uy?7t>R{vo?Wv!lbRKBPVOVL*Qbcpio4UJK8CEZx~tx#nkJiK+Qv5KQ{5HIAL3qB6Ww-sNtrTp8B_#K1R=L|A8 z2N}z4(8Rl{s`t36_o4jCJ^DeesQZvB`l!n>%*S0u+$YY6`_wsV`OFn@R)6|)SG0X$ zMBA63{VUM^byl=}qoeIxSmHZa;`^10wjYdW`;k@u3DNd3)cRRR+b@vts~v4$W(_NT z)6w=jp#K3p-3nB+eTZo5Uf>*7_8 zhF-hCZRm9hVCZ!Vlo{45z@oQ;l``}O1-79#WD+(~Bt%(TsoTZ{F!Uyn(6hiYG~sg^ zdeZ_JdNV-x0?+0!G%-zrw@`+5a?wlKZA%8y+pso4%eJ;YGTbBjs0aJRFrTZI}9ss%q!qS7XEIn9TdI;<=6wD4= zIZJPCSb8|Cz6~s0151z4mL3TSqijnPK1a`QTW#p=fP6IIY!5^CgQ3S1WcB>UDr@b) zD8?CP9-h<8-RUJV%~x{y9bqv3t7TL@tee1PCZf#idQp5N<>f=iLxEJMPW044i_kge zsYq*F4kD?6rN49E%bI5Qj#%E3eQV4AsK$m`uNFlI5eB^pH4^QshRrhnRnuUr>9EyK1y%WJCC2i2tCzT~ruOD6o1ov$*Qn zsCuCJQe@?=C3c0^?^a-Ua^~oKrb~*s1^kku_X@UdST&1zpm;tgZzxb*qDGh^0P33% zCKC`Q%>`CB(-Iz3REAjJ79&n(6}aDAv~rm+IH7G*D@%ol6j<*h7!2M?L<`J!5(_AM zXx(D;xjny=XoGrjsF#3x?eytU??Y zz3dSS3pkZ_FpfpQLC1jQieu3UZ(FQGb9WH72mE9SxZM*3?&b22y_J7Z*Ce}sv5z8U zUk0X;v|QO{l(xwoQ(K8r6Bvlty2roDd*#y=$IdI8h6zewZ(?3L!nPE;P*Fl z0G5!3Is?9OCVb^AWWlrHL+8L}&Mh!*<2tW^RwmJ_Z#ZFK{kzd_w-7 z^|~0fdBl?n<5P_BX#?YZHpXI<7S90UvmDDM@l0EjY|?__xdJ+_T0X>YTUCplO2lKG z;&~c7`3qWOi6-#^kE0~g7h#;25WFu#(O00stJLLDOAB8kNmK0?w6Dvb4is<5|EC(` zyEpl-Z}DGgxDyV=BtDnJ^rGU4+)h6VHWT{fAay2vHV5hNH7?R ziw{|evPir+mXSfur-6UOIpt#>rxB(``5A~>3yGVxP5TvE3yHU4m^C?Jsxg;OW2^J&0uvE_4NSR4u<9Qpn>yj_sk^cZWgN*1#|vUb_t! z2(iQvffzww)Nq7{NP1MQwH;XqSW!}#*V>LM)N#KpGDb>21oirfR$i;pG*- zsZ47tEj^~O08NEN+UO;=x*)<^=M61NhvGa^py6#?jw47g-%u?_x>883n3}~S4|S$# z9;buHoxtPH;Bf|coCzLVHIM#6H7&G$*9?eV6sxnCve||9qQb5o*j1sNT!>+)ea6&o zs;W6$)m#{e50}bJ)#=iBaDT_({~zRip29t!aW{a1e+{}ulkZS=kFhBei-pqa^hXgW zMPMAf8&|je&k=R@V79sS_FO=h2JfJ-!0I7 z7c0zhzZ;2bh@?Yp9?_;y#u;S-gb$!Om^R}ml;zKa>6Opzik>E0zfwz*NJ2ZILnsC4 zX{eMz2rYyv9j>N*Q6V-Bb~4t*aB2vRyCQXWEoKjhSpqS8Ld;$ev$w?P!eN3S>h1pqXPhlQgXii}sM@^De?RY8{ z=3dze&~6#DI}zHQM4xqP3iD(gG}P;W*PX&pPX*K&me*xnF)@AYxIcda%V}=6jA~yz zT|3Dc0DdOSbrziDY$$S$%NNhpzIYyMaQ4}Fg1 zP`VfD-v{;Yhx!lDXPFA62XlndLk$06z@KdFq#i>%e|J<@NKCP=kl5KeJlwm2{k**8 z`;jhV=uz#2j{))HFys?Z?n!9ylq-gw)-m)9Lw~l=IDcvNK^M;{+rziP$KYYh5z#Ljad;|(Kr-lW*+Ywy5bkuu^f6-k?}aEG{f8yMdK z=6B&V??IRMf&Bx-%rl6Y4^_;p3aF1%1bxivequz>YgrNWDVO=I(0H%0BKwHX?O1un zh?OrKvGOIwiq`on`fTJ_`5J0}1GT?}+TYP%hn>vc|jlMLcCvlnbU} zs<24UmlR>Xq)1^cDZ)&N{EU)Fo>KA@DQ~uf^(Zp;7niZT@}lL^Qc(n2Dj{l(B20_` z!dgX`7%8$RMv5$2Xt_q%8vYLy>w=E;oOB3{aDAJO4H({r%b{Zu4YY*|}EN}}YaCSx_*DLG!_6AzCZ@hmB(kj(Ndz(2-YY~YyE@K9q z6=@#ZKhy?SD%p~t4YKqGkY2sWan5kjtH?1N#oWV|MfTR;-r5iPK+(P+pbCCaT?Ad( z5BfprlrihDl`at_o_W@xric^9Kc~2_h|^Ck+o4X`AqqA&FY03Az9}Y?OG7e~NQXS4 zzKA`$Ki4pzsEc8k{e&1;q}+UvW^^zZ9Rfy&g3)1crLBvc4cqV{G;G_j%n|S&IxDEL zF)WpfCE_7I!XYJ7Bky-qsgbiJrN?k<9k0D_Y!oAvt_0s~zD8+q+XCEn05=-owg!KC9Nep*qL`{I zJdNQ@H|(=RQPxT(W5RMLF2D2gGt~^84Q4_MKeE9t&~6sAnQdpPUF}Ro_wBVu+I6ZL zBz8lpn&V7Wo!atq?Nl|7@y%aOs%p?wHv&umAe%sSGlAMoM{E#=w1kBmnY)GMwJx8J zu;wEIQBm-*01#r}qs`_cUgS6vf>s?hU=~*sGgu@*OuLhq#TskUCPpyO)N+VPYhp4$ zwGe1KK+GaSm(av?f*4EKVh1t1v%Ec)Ps|cc%$^Xn7l_##5cUBv``X0pSLA5v?aOU6 zEknfqpydE3EqiFB2imk8#4wjGhn9mi#zTPdP+&X^7!L==Bdn%ve^6ryJkoC3j$(mF zBRP$w`CT=E#&c!T?Q6WYN;HQSq&X_yeqn86gCD4ULX^gbi(_)ORL2@E)p6Rq#{>5X z&}SLUdtwowvw2T~4oi%d>SSFadXR3ZPEq-1wdrxHN=v6POQ$1CLb;=K!xKg0at4<= zGq;cF_T((B_u0_<9O!*6^ga*vJKxowTu_v2`)WMYz^#@?T&O@?#2_xVKuD37Xpxsf z&CCs6pI^KR66 z59+)Zb>0WvuYvCOD^FU-mF%=a;sNCu537$iN*2%ZB;kAkGdoMdtgXx44S8!Q3ob-4Wx9%hQpC zH21GVSWm~;_vTu0ZuLfaCY$%q(iUA$Cf*)UEA2!kK3u$0l=GF(yPBf+K+*f4=mSvn zAt?F?iE3XRw;wBx{z}ZBD4suMl0JiRp~zeAEcH2;`eON6>PxNeS5WtBsQV4n{TAwe z=gLyw>t62YN*M1R+lhCNspT9S6tgi1k@@y`LoI$Ih~F6EH-Y$`AZ^oP zWeiL3X2sSnHB*jPF||2^*#ahl@b!w#@bAS%wgg_fO2>H^3Pnbaz1I4OD7}3@=GZ(+ z8(Q=(`+z!#D$v{EW>llD-K7_i%Rl4F1!%bFon=Ihs6N_=ePP5Z z7_k~g><1%m1tT7+jaWlZ>McJ$Hb`x8SG)M?l=NQ3SzCVUiyd2j`WHKPcnv7-Vi(`Q zV&|5hLB;l#pTU4W1gZ=zc5nF^R*Wq_TSM#N&~lsN6>a%Blyo0qWR#Jt`Y5<7D=O96 zR`a?YB#bV$w)_x2=jN{Mi?Qct44{t%o*j^Hh+jVUy4bmkZ@dbb9T~#}Be{$$Uf#Yg zub8MFoWu`KE_Uwg@`@?8z3hEmQ@QZ8;^pq;o8G0RcXC>KXQ!oS6fbWt-%OXe{f4=B z0cW#d?%7%9-c_4>HyC3M=$*TA=ALJmdp?uU0CP`=xf`{)1CY>Un|qfmb2n>q2LU|< zJS{NyRG7Q9ILBVTurghQfkX|P&(CS|U&*NdKWDxLimw>+)duhV|DKh&8R0n=t>8!@ zJ(^4uv-h_%iAj+7s3dXJs8Om*s56mzudut zNFmW&CzrsTP#NW?_O+dYuKZh=989C zCA^yznPE0Z`Q0{mk zBe}?M$J25)ySs5;>M!%Uixrwn7|o?{kH1*vWww{8x8`URE@u!|00dp7NI}m}kL2~4 zRR)hECxtq95F#O}`nDtzeXCU}p~5l+%@l#=5Zy6Or(vhkvPo>FmxlzvE3*`D#Hy{W z_2@c=d$|%1*MWv}q<8nefxg4N{cF5^o8;#J`PnQ#2QJ}Kw2RAtQxy=cvQ}9sZ{l*a z!E@wy^XMxJVy*Ec?eVgIv$c@It84IMll^0}%!XAGlY}#{x~mH34CYKYkc;)7XHZk) z`t($xXtlV~oq(dcmAWcND|NNImAWRYmAV!oeH~h<>k(ZyAYg7ZTdAA4mAcv8O5K92 zcB;;5x2mZ6KkxXPz2i2OC~oH%y~9XbmpfX~JNf&&5W{r+FfXhQ%Z@MYKK3SLCsNR< ze<^F8((cO2UMe5Tm7tU1WAfLO>}kplXC#pkwcc?F;lZ{Rb%Y*ucpI(L3hjDQ_Kc^@ zTxsghQdO#d9BEcJ?s4}f5Lb9q2fo%jI-L%+wetZ^@=5g4jXtyNOzWO}B5q0X@G)b- zM7(d>8(KtH=HN?`=Tl^nq08aow5zPs+ zZ-^(6z@E}XJ`EzD0g=yw$mc-h^Jv5GL>vBsJx@Y4iWil}FR{RvjVO5BYP_vo``2(Q z`d{ar;uWRitE}T|#r6^P|BcGLp37g}VAb9%Hg0%!g`{{3p7XZ$oOj?k@4|E5gXg>t z&-uXRIUg#|q2t_~b&HP_zaKM*PYfS=Bio1c$vU5M;m?YlC+plcgjElN|2(v`|Q@J~@Z>Z4!StUS}i_VDOwj)>~i@dkDK3WZuPiBn}b&h>l* zTcs(auVM(oI39IdiG*T0MzuGX5&D>1Uj4=Mh#{UK3925Y^;IYyObr)b=1!hpY0G^L z%Y6gOeGAKd2g`kr{mqDx+Pg>SFKmV##*0IY*1o{7vahtUp?zQG4y{YEH+d;Y{Wclta$j})pnB- zBM6N#WlvUrQ>Y*A-o@M&I}dk+w^M$Eqc)6_F=Wr0`tMzR-yh#o&!2ErQ6GrEmECdc z=K;njAghL|>Mp+-vlWYMPGJuNIq? zbTyvzmSm47H!pFGC$}hZk0*N}eQjBy#*@8~N%|l;^er*QlT{@&o~$l$jVJq+sH}CP zPWD@=4Dx@T@i%%#jY>^Ej?G#lMfWV}V$F4&7hBhra7@?pbNzKnla`xB8G+JGoH7F2 z!On7aAC+Hv@BuqAi_rPb3H}NtB~EI5c;-qU{w(#ENsqG|z5EEY%l1+}TV)+^YX66v)3F+)oU6IwC`J)S^QVqwVcWYfmt#w>$2 zlHF{zS|UPbVvlDQrC8nbi%^cIBh^ysRBU2P5oKg_R!i2%ThS=bs`pEs9?~L~NGy;7 zGVM@ut(5IZo_5AV|XJfPXNRS{@s^O z`1toxa!@?Loj?2qab7`Rf)(_-M==w! zlX7~J7^y5lap%}2pbfAs46q#xFd7Ef9tIeLr28=M5-3r<>pi;tvuukUR2CY?J}@3W z@Qvf0Ij#*$U&XjBz&* z^Y=oSW13LUIm~51^GfU&a5XhE0JLM7HYWm(mW7R5~~ zLkS!9n_H4K^FRxfb0&j`swB#lEGV&$)y!EsW^$otD%$wjIG(+oLhir2sY>KdknP%v zNmx<9iYZtz4J&4lAfF%;E<}PX)VzoeMfoD8t+T{lWTn1dtfaR&{B3tGyax(X$68N4 zEP;>hsnP8PbbABcK0voG(Cr5wYlDyNuYAm&dpJPhJCH>lWcbzY*?x5>d&*jG@joV$u6?Aly&Pe+zG=AMo!!8SFzkL+kY^|Vw? zJ<-gjvubgSYYysI{d_7N6vx4kTnUltb}f0mJWF$9P%VM;K`0jC@WA-p+BP` zJeA2f4U{ z^OZAQz+f&k0^w9E5N4HRpPPOWm%q5gIlJ4YbEZz4mvFI5QEVp7EYsCpwAzfWPqL?V zbRwlUElv7jFLgtpbGC;karhMPR9bdfXl{SFxU3}SeCp+z%PYX;l`!O0pzCVTbq$i) zGrGThZHaw2RTqfGb&9#`S;ZSl?42xKJ#eE!d5I(G-NcXIoFnPo0*|;=YjGR2xE)&D z0WI!?7I(qum%!+EyOZ8M3h})x@;<}XH)SV1I$ixwTH}5t<^dM-V2OQN`=6}uA(J;_ zqU>Q7@CXDvh(%yLOUL@ws-#!tTJKfk?W&v zM+v zPK{ix_|nxG_{w-8^)>kT2K;=R)ff0qzmWPKRQ>?!eq7-TsW*twpNtn$KQjrxpl|Rg zT7qA-v3`Su-|fD^*X|cmf9SqJw^D_?d#QqxSE`zckI_uzms%&R*<4gri-J9R(SY?}pk<}@ppxhF6A50cwII~l zceod8g4G%=OV&s#RVy)eV)e3-d)a*Q>l#@{Jk)_|!Z@G%q4 z(nogjsFhNkg*7ZuUfNZ&RZ*JVY*m)JnyocT-ObjTrP$V2s+z5}OO@lV17BXZ)M&QW zE2U;@{Zd!6wLz&0vUham+E6+C{{Y_`DTm*f{b&;-M9H)4#;PZOzbX9e2EE!Tm1(E< zMfUU{IeDT*Unil4W_*6QwXS6Z|LVi9qZ;|;sV5XjMQGl!BhX3DXLwny^T9~UKGi12 z_C)?mt#?A&<6OfVOsKX!<&8xagocaFN^`bi-clsS&EX$gz;AjX_iYJ(=?!1_RQp1o zQq_uWxss%azKZfHrnDNAuJqIW6#ky2W{bBK*HvTGwKCKTpIw)$4XiD7w1IV{#+bOi z)HxnhLj?uidHv5*lr{B7Dw`ivjIdO@Q7EJVE%?WcXF6G{?rp7G>&I1`;-WYHn$+ zz7*fJwX!)eqUw%v-3v;M+qzb^hM4I&M*pOZtBj+{eY-i=uUi|Wj8)qW4YC<;Xs9(u zcd{%kMsEs;roiI9TvisUqVm-q_cxAOa_pC?7KtwV80|Uw7)f^@LuB_Epl)qZ8lf0GB{$zd7&dTNse#<7s_ic8d3~$~?&}uOmygi;z$4b5-{Mk|I?!Ls!Gk z$Ok-`RH!8*ACL3q*G`#ot82wRxjP&C>b$WZ9A$qv&;iH{2f}dZpconk3E8;k!@ zX2rqE8xCP>9|~*#!Qxzu!4eRya>#oTq}Ke-hAXrUmu<|LF|x z48WU?^~d(HmNXR<*Kek~>g8BnoP-EQc<9Y4seX(&Gk27prM=>8c*QyJigV!==fNw^ zN0k0%oi3)_;x7Svp|aXVOv}aSkU)debuQM;?{dj7sqxk*{)uV&+BWvE-&1h*P#;1WlRc^iL!J52Oy_io+B$&d-fQ+hFQAZ@R-Fy6t+ zpi--kQ|fdAYpqS7Jwo%~6lJ=&T6iP$LS$KQjkPI>uC!Hy#Xu&V@X^v`D&QUA_*IV6 zJ)<4p<3&u64kb;8r3qS<({eSgO=|j8A>SK9z%U=Hl0<|3gl;5iy)I!~Fy$nH7qz%_ zcN{?BH4dOiTPw74(?RD|(6%kRnKCP=viJNp%kR=6(@g7Vs$JAm>*S% z$Mg;$aYyc4bEnQVcfrN)hU?#hTyrm6{yw;KvE|P9qe~#V{S&Su9#C%nAiMEHaN~an z%fpJ?+Z^N9M;O_oS#u-HcX#oaU6*S_`?zyN`-C|+@??&=5l7A9Dc6|xX>)Gm8Cd&S zSpT`KLGAN;ZsY|x%8PJ}m)vtBss=7box<57s zvMXJ~Ck_`vFY;5a@3T_-dN4c7iO)gf7n;T|LE~32;@4p68!+`Pn7R#2eOGGTv8`(r z-z!CaV8K5cBz>CQhuqk)OED|gil09OL806N~Wt>r;Htqthw0MEJ} zA2(`2$b(M!mYo?cJkp;PF+krrF& zj9L@hoDf1HiggYbUQf=x&*nN_wm`h}LiBElkm!w&=;Kj=SZVcr`l_J#+cl|Do>k3! z_Cx$by-hu?LD*JYss^klyV`T*ifZdb4ecpaff{d9jkno&0m!#zJJzUJtM5m;>#NdV zxfag!ZHc79oqemb>#&!>piFj=6)uL!QET50k)RjkXnRt9SN?30nX<*e;Uptsfwrb# zU{qB#Z@^E{pqgys9cb6=t?KV>jVuhstA)?g)zGxolRY%8^SFkl^&a=ov_E`wfJY5Y z2f}v;!B+=+jG^fe4-HL+dR#-(Vesd*EPviw`Sbtz$UosD!&Ojk!{Iu@XhgU2m;?5a z{QW3|^Yzpj%o@j1_mUSV>7|O2ZEPp5!FuTk9VpQr!C?}1GEcO4co^N#5Q#_94GoQG z9MoZjRFBk{Z|l^}%*xhB58CzBifwbJ3A$$d`TKeRWknOWA9r#~hl>W>LF(jG>9;Ibt`^J4e$y7xc~p zz4JkD1L$pZ(HrnsLla%AXi_>hv*4h?>+Eb^$C2u*#eYReiEUxAtD7PmXzP+II-cWKMk9C{Nz8=@TZ7tFe z^rlDO<}y_5=TW!0?C&vebD7e|N+}0;tm|A3WSj@(#Hp@xS*k5@FhCswu!q7DhY>iE z$;Y}Mjs#{)JHlgLb8{pMJZkyG9Ic5t2C|L?F~SbvvooQ*2c`(NB)o9-> zUA!%ON&LQuUQ!Gfw`VEJP5K>L(L15&T~PFHD0&YRy%&nsSc=}~vF-p`EeP*d6g|ND zKM0Bd`&Mh@gnPap;!+PAu5D`;)mM8z!olRc()&^9_ZS@gap?U7^n4O})>?W##kJt# z*QZ(TGqBDfl=dgI(cOByuy<<0J9c~T*hs25(oT1*P@^+88i=faMw$%l>un+9`Qn5%dl&X`YHr2Jso~#^yw8@c3ELAtKz9F7y2nN!D zra&rG+ZLqDSD#g6J>!}rh5#Qn3Yn-=j2bo>-Le+GyD99(<>-M>WF<5hG$zEWZRr*!&Sh442_+qXt= zzVC5gU;7=G`QBsSH1rp_hxox`U3&Yf$G-ITM~`{w?N8KrXv%)3&zXGb?Jr>MSFrXQ zSo@tmH&&P4{^7~KAi7%*Qm=atrCw0qRPIxX4EL)0(P#;TUdT&bO)xrb=P7FLk9Eq) zOR!mx`_&nhQXu5@=qdx`_t01I^uSd-J#hG04_w9516T3%aAttg9>@S5R;kC|tx}m% zi3l}gyIkv20evc=&l=EYP3W_h(q~FN$M)JibZoD~>a45OiLw+~?Rq`z*j``$JbM^! zJpVIliVb>jjQ7bM<2e)-8v^}C&}QQv%KtWjmOY`>rae^Dl2Q2TpB@~w{}Ebm4|Puv z6SGARJ9>#KXY}^sGF!qIs=JEbTqYI0dsy+v=n;>7dYJLpSN;~&WK_}T1dhjQ@X-%^ zYz01Q=yOdKkG>w+@mR}%>i~EMa^C5kV`LH=P~X45cNdvXBv~`fP6@~FSg3B$uwnfN_a8{!S>I*A_16wM08j_Qq=TT&<;D#~gt>K}NRO^a^ z;abc#5HkW|MncReh}jl#Fo5G=J1Y)Gvy|;kDYDuzMjVW#IOruQTM5R*4$9>>F!V!Q* z{9=^f^d*@@_dic@D#z3z)Nc-J)yd zgxV0|(bvJp6N&avoG;o4i4+H>ByB)legC@pAu2ZUurCt#sk3eB$hqfr>D=?R*EIlr zBg`0pqD|1I+2!0p?c5<&qvh{VqgAOf#}zqYtwRJlM4`h1=n#VrZHSzK9650-auTdU zJ0hnQk&`qcM^NOfrx(9wsU}h?SVkaN{;ZNB4a6B}un@l00nHXclTHLv2*I>i1=Dg6 z?yllz4_0-F5kHBn_}P=o>;;Q%Yqbe~+H_)XJHA3jeC^|iuYD=LGy(h3=NOK!{lUQj z;NU=Ta1ed=Q1P`iM|>U3Y8(PJPEaic0UGX|5GRb3V3@6GV2fJU>4}bzpmnQAL6+)G zu}r94MB;R?Nvpbyo5skt{=@2&zEX44?sE_#pYye&cHIGHw?4GX=sZk&_TkX|2>8X3 zpy?=ZakMKskI~V2ER%5Dzn_HT6$uBsV*3Qmz%np!A{aOc44e!GPC;xB=GZ>fitW>w zfYTA%$0N4SFk<^mitT~i46QOT;w%;T^X$O?YbX+DL*H|t|G9{Y^T5mb;Nb#fhGUT# zE>xM}&+2!PN*fn5ir1rw zRJ}e`F9+03U1pV=bxhp?&2NQI-3F3w2NQR=vdW!0tK7vD-2HE-;2uT64X&JWuh#!Q z=zl--e*pSF2>l;IP8rHM`>yPI;Vi%1|rjR+$#@gvu+k?7XtN z2@+32+oz!Y(};&>z{;~=;W=cKyO2?yR~h9$(e4G6RbFHsUox`FBUxGHWiInd5BmbA zzs_aEt9CxQ%g86MIr7QtlutByZ_wvXoKM~ae{X@mx53{#^tpk`C-3ISC-1R_??c1M zx&uwbVR-LQIFL?9+Y&-VQi-_kfXNKHbsgpfFg&jfr`uu_1Rr#n2R_ts@DUJy3{Ut3 z%6$qAK6B-P&vhR7f}wwjK!Bw8T;cYW7V|a4d;>AxLdOWxSZe>cF?qxVIrA&p%7YLL5GV3rk z7pj6Xb!18zADL2Sd;gDF-e1gRN>rKI+gL-{KjjRfw9InvFAVqgl$q|`L;e=kN|(_S zyRmzhmnpp~pm!zoUV}b2SMI%LS+;wx#VV`~6_%Oq9So!$FPHRb{JgZUIY4)zG|_f~ zV5B7y3fgfWiNzv;wrC<8Z<0Z6=smO!;Z9T8)+DnWiD259rW1Uc8Yx#D@29(<>y&jB zDeIQOh1Y}f>z65K*q}`Dv?0jYsLUBD8+=m(Hs~Cu~6j^OmnH|N|@@GB)?$0qJ`jv6C&oQF?FW^XQ z1%+!sfDeID3u5X(L_HD$nVzWVuM)z4px^+NI0iD4gN(${r_7x=26LGq@VEJnX7jIb z95K|+Evztd%P>c7*_v{T=5IKCF5uj<4JaG|3P*y%QS>=L<(6%8&0_+a(gK^MnJizbh z$^{d2E||!uCm|9bX**ZEP1a(jK+IH#nFcY_A!aAU+X#-govnDA!BS?LQe?G$Bi?qQ zcq`LWM&L}$Qc*P6j-pj#Ps|3uT>*GE7t|$neG`{yhCd85o6A*n0THzQd7|OZA%{P=kUwjETj_H&`*Rp7N1$>PDleeVQsvLF z9RA$K_~XF8pVdmFJJnkZ{?F%4CEDl=-i09^vs+v4)VbK66>B_Lbq~^=s*BA3QJp@j zlgHY;Jyyp;qRUul*G`&*q5?Kgfs-^8&$wb?p^k+P)_BpsOyf?aahoe97i)EQhq`+} z-6c?WPpG>WVsa$MTw8h zjGYTQj9hT6BNrS;xj=JuJbjMhTyO&DS_ZmK1YIZ5XOYSUC+Elor?6V5mf43QH;$3m zM4(ljILJA&ieHea=DFHZn}!9ccqHf;4y!Cjt#&i2;qKmPT?Y5*+S|_n@-yK8XFm(7+0W{xJJchogJGitDv|RXs-kM>)}r~K&u;}#Z3sm^ALVFtMFSH zbhoHryOs65%?P$DvV!e)E^`M=I=~FJl{T5U(~hU}jCi`s5l?qhJZa_cq0cDC)4kCD zKInfx^nZXp`>S|*Fh@K+#K<2mvzKG)IZHpSdz$H9$LJVnN8&O$#3SK=%n792w(TSP zZ#{^d?~yL!=TYr{j{)i9u;3F=>PaAf$`wCP>-c$wAwLTT)RJ6o{+t%`JjA>JF)u>Q zOAzxi+$}k6J)nLcZv710`UBx+XSN$ZW4Q6> z4mbXS+*m97C4Ek2H~tFxehq!Ufxh3;=i17Rzsupq-!s-9%Ix!)8pq?v+Eh9q()tEM zV`|op(9S?`VJJ>}B2u*1kv5^$b|gfwUH&0u3YxsE*#E7?OS8D%N5+Ol#x_R8hYv%OOL6)7(&${p)aS2qo! z5<0B`9oH;Z9=sNGUmLovQ?4SG49HiRmUG0eln(2at2<7amJQ17pe3T5LAxQB*{IyT z?sT=AUu;}%#X0MQINzk)jPsuIx2UFQQ~I3CalRQ?@`9z!!O|A=*-OQFuk!3T-;&kq z4fW{#a^s9P$(nb1fR^H=L&7^I98w#fu|~?$Kb>gm3?~dd2i6T3RF|U1eeL>jQc^zd zi>S3VeagEE<-Xdoz)CSEQd9p`vxD9j&XXsTc{^qoBsN zaJB8A-e{<^Jp!^80XfDF$Q8mIs{(Qd)_j~1ki)V9ay*yW5mp{<2IMLmQB1I7uGWaT ziH?|?L@}pXm`tDZIp(H-h^ZiA8i<%qpS@Mg?UWn@_Y2p)Zmbf`HT zk0djgy5*I*ma2i)NGybs?ty3h)-=azCK^4*YF9~pWosT{W|u+f*S@?9beshzm<>91 zh0eRVf^v=y%DJrUynm0f^OdqYyP~#1YuX4+1JJYynl?kzAfk30M{UT8+7?!{6;V4M zQ5!a*HbPNbW%npoNPvi{=$&py?`oq$EP!4y=-CEujzj+h^le92&qY`#Ramc*9zun8 ziYZDP;oXuI-We{l5dJd54DZ$F2BO1``?*HkFLK0vC&j&{X)%2^bKLI^ruG0+OTg5g z^x03v{a!iZes5N7AG3X;#SAkOJgm@f;b(^0+G*RHcV?i~4gu1FRIZJPM7%{LT3b7{ z=ELgx*XuVbe22L9^nJSw>;1H|?++CYfD;@DZ4ZJLyc45YNtZI)1c1j2+BhclxNs&?FwO@se~;e#&fvLxjEa~RW+hG z&yKl6jF>y$5px$%%xM-bq|YXfxr;!=#USDm5OFDeR;!r1EJw^;&Kg_+4LZqBN7JdY zDcNri@X;k*4(%;f+dJC>?O6$jwTy>4nj#@zJk#15N;}_YT5mBeAHK57c)Uux@zqf8 z8rc6@FmWB!z1|g%H|Ti0k@dXkU!mvCO3%w(v3iSE@>VE$8HDdKX-NLS{?&5wGvy<$YT^%fl2cXh}Q1KzS@55025vcko;`m0y z@nd%5y3#5W++0BwAx3@96gS9pbH# zxcyEK3;cWmUpy3}RZiJV7|WelZLC(HN#|Cs))#1R*FoU%h}XLe_cwGTya`R;f}6Yz zQr>~)@4CYMJss}vv&tWo+m|8y^D2uEmBO#O;{GG8?Z?pe6KMM>wEYa)evY`G%yIvP z7587VvR@(YKSbPrZN&XII__7N1o3V5EY|9zLwpC_zK5*d%daW{{Kho>ZX|#&vl74`T&7z^uGy^B>JFlNg_Q~3H!?w9g_#NRrP%JVnPLHl8KC9l0p!L+-)n&Q)eb~ktqQAs9sE!p=E`QmLGVH z-bJKVjm~QmqLqKIvx>>agI8zp4Tc?Y5B<@b%0$wkTJMB7U0x6pwB}!A;<8K)pU}-G z(NPTp8ojAz5oyPD5;9qZ)XbvC#?grN9@L8pczFUakxA<-CsK)wXy&6;6RAi#Av%YP zsaafeQ#MU=Jsn){1g>`m*E7KNOmMx6#kIdeovrS1P$hOzjL%{^XII!~4jE;3RbVEo zK%o|KH!eO0#RpOI|0g&Xb1PKn&#SPT()ktcU=|G(+*bB>^pTfSwP*wz0kG4AAZ-R~ zL9i66z-?6(s_|>7u z=~nufx=yZqafNXMxC%0{JDgt%P+mbNQ#&I zG>Y>T!c$y1`vNWdLdd=dvM+}0OCbAF`Z9kyDa#i z@5WRpooQF6x-2&rN(?xNoLb|643tnTCOwba`8A=c>*jwiI(Iku=h0BdIm0ZGhFD|3hU57L;iD$sOMSl z7Yz4#FsrG2k;}YPVIRn|(u9bY?Y8n}qpf_!(N?}n@uSsyjXqnst$ZCCz5xy2goba? zXRT^0-_~vA7JRkD3Vrb%rT4q6(|gcqC7*rYbQ>eDeZZA{xct2Kk@ohFq0J|-8d)ctk5d3Pbu~B@jkbdBbxNkIuZ-L=EVE7&wegK9a z5pfNi-+rnvE_i1UzaYPT4R8NdSNt0){v8$nfr`6Ts*1Z;D(CzX&Y4%q&bbcXO_8mN z$ggB`6;zVc!b;;V_lm45CUll7;=;wM@a!FB)zkEuBi@0v100w4G+NDeqt)@}^Ut|y zO9$e?fCzeHktPukowcH*GG`_$t%UlXN~L~}N~L~TrBc5f>Q_`MUISJptE^O+Y@_AE z6l*9R)@0Szf@&*xW^DzQ=#ah&`>n$@tXpYkMw0@uUZpbV`dXt6pwWiVXd`H}F*Mo) z1|=z^PtQv0bYWes*i?bvj7575Bd$~FG@=gU6&qr6Rpl03Wv@yjj92{ZmL@Mo829GN z`cy7AjQeV0sz6LNi0KDnwgNFVm9C{nm3rwBi>Wg(>o6t@`r5pjH@m;mDC!kvg6LR3 zq|pojnt?zw2xtZa%@81gRuIAd!*#{mpyCmzcqA$wg^IU@{cB0gq=BHY$V4hZK%}-5dm^K12i;80K(p3wkMT7&N!p?gMB3nK09bi1i> zbxb@#R~^Jc3j^_Vt#?}7gL($k4ni$FOw!{+o_3ajmJX@g4YI3s74byqAgG0bSS098 zb;i?yMKrjuh17~U&PmpII z7f-GQl>`5`^A}Rl)xu8Eis%NZyH@HGj}cR0E)`jROhvW7E&$Il_-h;ZkHcRRc1*R~ zF-1d|M2sdFWbmix4k9bE28bjgOE@E|&GPe<9a(7xn^{g|E!0RmfOHX%b^_^QAl==H ztR%d{mbgcyIrF=Oh3;9Id**kqN_*yaZ|#=*K-j(ju^-%We=abMMe@w=0rbUsJoB3{ zo%6s-0E?!za~@QwXMUG5po0ucNdT=4pFvVQt6xmK2*ay4Db#IydwbbNN{r$ z7)e-+99?ORMP0IvQO%Ab1^`Pd&AH&?xyT8X_E=(UqM7eRQLnBkxSU=>^9*f# zi1)HAjW`dSs5LqX8l4P{PJu?JLZj25QPR@rbfwX%!8k)HdnRjg7L*0H<11ZfiJ#4- z&M}oqGiSyyQ7eKiSq0B{4CS@seaiwvV_$4g&(n@aS)0b=RuK>I&0sAU&e>LD<tu`xC$ZeJSweamMkJ0a{ zM7ytP5_ebf2))L+cW8x#iF<(QUSPZr7Q7$W9{|<|(Q~>EJ*S84p0kDFVdZO&F#Jai zFS@!?zN_(vSWTiP)e~R*vR`LI__a5*~9ozOWxLYpR z5CVjRD1-z_k41qf4uiziUf%;O`Kz&(9&?~_AD!lU=sJsrmZ+HUrO&zFjG0?XWLa_9LCs5zf zX5NLF_h9CInE3!^K184KOI;-wD()L(~_*^d&HU z1s8q|?B4+Ew+Pg?5UAg!1?m{}y#(qH4F5+XP(Mx!)So!b&wn#eEk~|7x%b1H;oF8%B!ftpv59;o>hd^S>rz#eM^>gd0Me{}Uw z3RRyftjHFtMHL95VnFm&h=WQha0C({msPl9wY&nc+J&)J0PA-D5UZ*bsHA`y>|Hg^ zZos(#aCQgI4S}gS{8S+(=+X*oswb?+Pc_H?D98`)IXE1qXZeUkY|2 zqWS>UraA)lrWP^m{s9iv6r57w#k(%`>vd8PKEO*`ftU9 znhRZOjb>suY9=-SQEw(SPnwM0#{Rub$>u}P-J$Ous5c9s`$Fhk=h1o33VR7VW4ZOB z+9Kv3Fm&HFt*vO_G>y=xkJ(maltVQ+4Z{edVF9Z0#zU)Xkt=r(P(9eQ9$HRZ9fN{`ErbtwN-fL%X*R=*FmjdI|0#?fSID7Exd5E zlztt-)8mzP6<$`MC&J6wQhSB-Bz|sCwT7dyme}HUwL;=BR^grn@1^apg#8ZKUj_Sn zLyLXTcsQ0(0E6geI0i5JO06x}Tj?6r9{4w9yNZT>^BIh7Z zWQ#?E30>hDW6|amU87U&r$Q3Gmhcj~Uq02)5**}j4lJ?$rN|jXw`4WQWrc}0S)-yW zOxXf2EiDbGcG^MO8Vp3OpNVRAGME#5Su)J`ie#_0KXm6ZdPRrnJfu!|aRNnfg zy<3SvTMQpMiSCM}U*=e_6V^`)xb^Q&sn%BG6gXcE+o+MYb2|64;e zRCZgtE=evJw-kvjlQqqOZLvghaBEB@gRKMU(pn3BK&~t2Tdu=&r)41NpCY&4QfJpU zAXoYh9_N$OY^^`~`WI|oSMP^)-X((9@YFGxBkEWkQO6;ojz>hDfQUK~5p@zGYPB6v zC!;6N?ZggHr-%bjW$&B@@8~a27xPCsebO16?o6a>3Ir`7FFtYUV!Fc*tfjK0u9&zFYZ zS%FRFT!y-f*es&;^GF~UyEE-#)!o*&wZ&G}rdVqr998#F<{W-hr|yLW_aPkar?e$> zd+PGGmT+S@sUEOCSx1sQ2uU7-BoC9(CA5s*LjSZ{|ICO)>DO4UU1Ke|9;t91J3h)P zJcc&*c2tSSbyM&JOgu>+M3zxm_v*P|Tl-)k`&0$3pwr?Lus;Jp&mv@RMaVu^VQ;5% z#CTp}^aTd;q7kEyR-`?Dv@+AsT$)<-lH`1ubG~8>-SPdaX${S5ob+{L68M+fYxM>+ zdedk&-Xcw?eX~kaZ%YeNwZ0a@Q?7ak%DoG(zlW%QANqd)ML+a30w0N@+Vsbw$R|wm zQ$x$w((3zXoaS>#v6VT-{bL!_7n!T{m#!-P6~&om_BH+7o~!gXAonfEeFt*i)6YVw z(mzy~Qy_02seTlqKQW1)%_&e?(qGIdh)gNsu>X}a{)UWYwAycWyXtp1xl<)7Lgz{> zQ&ozCax3u$Or>DYuXH=6pwb?m8U?GuO2%DON#=_y9S8kt2m8DtFsJpRf71UepBO7) zW2KeOD%3wJwXD+6v(cIZrIO*6M0GUQ6ioPQsEf@8u zlrZZF*Y$#{Hmbza#?Vv_wcg??>LrF*a&62wH!*xe$aV8W)60y5sy-t2rkvXkmRVD8 zW{Rj+dirwS&5^e|4QBhd@-ysEY*}!rH2@D-18XUWeAbtqLx;&`xrdk&BwY&}O{zcR2#_6bkQfygEP#I_R(WlM)A=i0*FEvkj6XPu>B)OB<4Pmu^ zN)oexAWawoi-SJhXvn}m+}hR>bROo>44_Q~m-3@^+9Ab@H9Uv#^L6Zj7S~8`StuCg zZ7Qh*rvbTY)vq$+_;m|iSGR=2`=hQ_p{@=<01T{@-f)dQe%-24#;^2l;s1o@YLG<7 zVD@lzrE~1%|A@6AB2eE-yW<l?mom*9x5jCpPdw}#` zGp9zwlVjl7tx?6dfyZm$;cd|xlLEZbC{;Wi(OB`zIF@I7qs|Yl^mdp#aGLRz&I!_g zS2Q)D((XMOA$rdpE6v_>Cu*iN;feHfJ~wNVzJTPdSp72(os77nVU#r)3m(9mL04@4KIte~esmo>ccHHDjbn3I&c;5X`mMQxx8##3Px9O!q_xd|nz zea@`4Y5=cAXoHXt6Qamh@Kz zqR|+w)LEU;5UT>F5=j+E>c8ns8R@A8SdQRBO2WxRu%&r3wP)ritk+Sv2vHb76gD6V z8xe&~h{7Z7C=8;%ZtnD-@_}lWFj>qo5JC+62knPN#D$gSG$z7mmH-XStL<1(E$Ek9 zwaih-9D~elkU0*S6*|p@=rj{j)#-&o6snRULW<2UHM+}4W!m(Gt_NOUz^Y|Z*m5qc z9UT5J*9w;oczU-Nm$9g8HNzmCx#1o8g+U>=BR3EvB32mKYn~)iV?o*p*7gr5L5{rRQgy#Yarc9D^cy+ z`udJn%4#ly{=xq77D4M@UXbWptxoZJp|(iFQm3NUpGJTp&RW6g^!ZdCOrJr6Y*{g| zTy`d0b{1T8HZ3Z29>&i+PqN)~4i)Fsq9xD}Z1JgcMTqlQi1UpGfusqgW?1<0IjOn; z;4akhauJMQjCi>O@p37^TvqAcWpufF+2RT|d8J|UJlEjmD*pcJ|D$27T%~0V>i-Xr;I$=Ia~4fB z#}r)(e!G=uMs1n7jFnJ#aB+81P!(Ap&`dd@?&1&cCL7$nSRJiZuNSB2wuE~sY4iTQ z6r<1PS~1G+iAlYW`sp1{bswj=pHf`inNm;@4GDV7sxcU~*gU`q9;5_AawtKWE+S-! z)MgDd)I*%)VM?-s%1G5#B-&dWVlDL=enLIMX&xo$m9+BaCiWPA`#60biShzR`rfH5C2MR`h$&`@vN7M_bXK!1iaBkt5(2%DXA#{gpz@ z7WOwS?C*@DQ&$5==dQq!(^Z7c?JAb@x{9#*UBy&ER}uCr2wT{dg&mwxSb0%qXhuyuh}fm87O?_UD!UpYcI~P~>;`5VbhSn7 zPI((4;)Y#K5qornh&>rcFB8W`8b@!4xG^km0ulSb)TR)TxKN?~KNfLVMiDm?5&JTh z%?%L=-Figq#~HRT!EdR-_cuhWvPB#KDg#Xsx3WbX1ZIOB5vwV08$=x95^<;&aTwzm zZsHiBag2nBqhNV7L>vQCTSLTt5OJG77IAn+5o<)mZ5hjUhKR$~FXC9vFwO+Oy#~L7 zA>w#j#0j9XqbcG}wulqKY?345&XiX{#K|rZr)UwUGLC5`j$Jg4=@4-SEYF09vtVjA zL>vndcl~1#M`RRnj)*vyvD6wOPF=reV+$;1)VIGQ2iVptAA#4t=nAmVNiamgQxI5MM%Eh1toV~H9f zHm+a97-wiR!N)atWr&!tMNEQ9$`o;_E#fjTTkeS1PI*^A#1$?P_tGM+WE>qPj#V1R z-VkvgSY8bg_l2qbAYu$6?*GRkj>;(F0V3jojAe}>;>z`lxRx`lGr=FE!5?ghc!(|H zp`db@DdOR_h)00gk&cK*QQnmh@o1Nb$7m6cWgN$uIF8piPJoCf!tzNF@no1f1tPA6 zh^PLsh@&%#c$$cKI%7G*5b@aci+CnyILicowg!KWA>z5Vi06UI`KE{$*dksCW*0dk zUTpn3eap^J@e-GcmueL+V<4BCK(5e0u7rwL!SvNo@fz5=7Al?z6|eha6~|;$@p@75 z2F7xuq2guhSMes!aI*>i77hMZL&e){6>kTXJ4_Ytv{k$d%{m z;{6Qd0TalB8puOX@nM*L1S&oXTaQ7-o1o(3f2`ux8C85jRD6=LJY}eO|N2#Ynln6O zf`3+nf6h?xd0WL7K;=bK#g}XqUk0;R92H+B6=!J`UvsJWx>oTG2J)r}z6T~GZb_)&=+E2Cb+z_UFbQ2kS!d5TH zNMxwcjsAp;nI|s2MaGR8%qE761aCbu_Tdbhn&|x+{bq)YeQg;x2bX@Pj9b_;ZV77r z9T}@g##Sxk0GEsdwTxRakU=Jp!5T<4WE=w1Lm}fZ*cuKQ`#{DKe?rF0QLn_3-*K>%bCZ~mqiJ=u`Z#u@8(*AYF4pmG8k?0?G|WB1rt8C zgY|t(jpuSFP+DVqTSK6638|A%JFs@@5IbXRdb`2ArY)k zsTMVnK=ih6(TZ7?!@*=TAOA+XOopgQl%hDP0*yg3qjt9bURzt<7Ho5N)g{zqF1wtL zifgN<#ZlT~p{DSsWyx5h0dXqFqxHRNSJUYCGW`s*o=#y=yU=Gj!Kj+fmYV{!<{D^i zQ!{{{JykCOJ(Kw6)RtOIXlyXhp4&Cqbb;sTC8f>Vg;=gQ{1$-1o>`1wVU<% zy4p=*sbpI!nXUYJQUxt&jY&116-ij(5>2(%FQ?T?wYxaAOH-<~t=?Y5OsG9XUMps3 z+Yk~jki_N70*c;)vCybspj9p8wB5;V&EXbyetiBqAMeDo4TMQl9r1qpgD}&3! zNvZ?MR01m2i;4xb54>H|$pbT6W%cmoH| zCRUEt`t;42_5A9rYGl!JgVCj`i3=0rZHZv2$zs{sqJofnd0Whi<8YK#@B=Lg)y$uF zCG`@ihGaNt5fxPybD1U5&e5Xq5)~5oR2_^!4vR&P$5e!!ok}(j-dZi8-+d^GDp8A+ z6pp&Gv~u`zmca>2t|>B{cEE&}t2RnTH7?LlzbxF845>KD zUQ}D|4pODK{MJC@U=?c(L{)g4jIN--d- zMM?&jC#lj}>L=Awc2V)-pw;9D$f3)G9s9tMdbw0aiYL1NA;ob;!unAzogoW6;6b#x~*0+c(TxGzz$7_ET$ymB6Mkes6O&3{WUp4udRo6h|nbvp}CQ7eRy2S z&sjpdMd+=a(DVph5)+yd*_?`Pj@(BlMKwm~TDDMKq^!{Tu}7qkirqCrr#{Fr_HPr|e`55HqJQ?Me~zGk_9Mdw(m%ghg-1&Hl>U4wh5qS8Npk6*?)1-Q z^v~;*?j=GpKSEn4BPUR9x*UKnL5R?e3ZVs&Cn!ZAvMp`Lu9Xv{W=CEk9`hpf8g6LE z$SV44r^sz|EW^YIov#vF7@<2}LrWr~_}b(MUDF(zDetDw3B^O>BMtP)RC)H;6#2Qc z^JMQuA>3fA$mY{CGZ+LK6hyR28*2SG zdgMs{IcD@I{yA*;Q2se|`0x>9h7Rjw{XKH@&=EsN4IR^I=6^Zg$Cp%PF|0DnHljD7s+l2GLeDTf$R>yNX;<;6|#ZNmN?2Ob@c*%@ZZKbPOXtL%P@zRcXnKcLxD68w$ z53}Rtb@48><@(9Dv;*-9Yb4x6vjH9($1APzk?YYrcRBH{))c3Z1hE={c(;!D1|$dd zK%?T_Lj~6V6lUZIj&A3h>#8>MQC z8bje0Yj7Bi_pXa?oc0J_CQQEgCYICsbi_BcoMv^dAm-<{Evu{j^)53t@y%)rEMY7O z;(bFox;>0r%Z_;ehT6hpU@_?xuc|E& znDGI%zCaRZWhdeTJK|eaaUUKZR2LsyTg0;`@?CXZd`N9kQ>u*{`1sJe_^{eS3_jw+ z>*6D7^W~e7b@5TP`P?$cM~8Z)WFj6PV~xR!bVSFu4&{U_@wQ3dSVhBN%jLd!jV0f< z9r5j|LVjx&Y>5)uJhWwPFKhTrvr=c`T;I^nolbmgM|@n!7wVG;Rn-=vnE3V~i_#8N zAq(&LkOgx>$Re_1$Rf8>RcOOduVBc+JFzNM6!HaAp)u2nLKd{z9vQ7zgeG;wcMkO; z8y5P>>8__Sn=d}af8ChEsUiJ;YE#j&L&g)gY%L#8X z^2O)+a0X**pEc4=255~Z;iuCZQ&nT4EfkI}ueRojkS-YIVgGU~a(wZirCxJKd@-q4 z=2b5qvLNgM2&HDmc$iQ`oHwlFOPtrM<1PF#O_bxU>-bG-)Z{3?Sjdfg%y`2(-iFt! z<8k7lh*84zR&_kNjtHlS@KU0=j7L^hRK%ClTn%kWyxp2@w+n~(3Tygj{UN(;;(OUg z{KQv^M3y`qY5N4j0Fpp$zt%h~(Bg})vUJ(IBfbxXVTib{X2tg<0Q*(d=CKI-hvKeR zt>Xs-3HpIVVhy2Oo3aFKCQIu=wGQ`#tQbGIBYuc(H})3PKvl027QZ=Cl&<40KxkM4*cLxt?jTeAO^iV;7S)H)8Yn#GUL&`Y17 zU!sbi$Tuzh9ZT_(NaT}A?o-Gyr;=k%Bh61wanM?tpJ6GOZv9M4yt6vuXKV3~7V(R1 zY2xQt+EdSXZb$q)QfG|$GTC3#BYu9Zqj^*Of@z%@TvccQsdS= z{q^`mR$5E6hiSAqJpKsR%tuMp$4J%3Ny{ffqeDHpYCdVnh~3`tr#j+K>-Oay-IyO} zefi%JeDP;2jL&w&pCgt2i(oyU+0Vh&HVcu3FaCn%-4{FJFA;9)cy%p`zf696g(Ln| z^37}Hs@KVRZ;+SXOtH@`FTG_sg3ch3jPbWEA>QeTzpI_~qI3pD+GPAacHLyY`Q~4$ zsqb4hKj?^mNF@H%fte{(7-bDx;f?|p`&bazN2-Hq35XO&lfo%H&(Q2)Tz6t#NEz!JJuhTb4r zw21B!BJ<5*Wrc$^QsfC3H`dkhPrdEhXYA$A$;)4mm%k)0e??yYn%cDub-VTrwQKAC zo4CinwLJe_NBn#8%6}KKA1swWw&I2=*pD6Yp9mpU6LDAkXA=Gw7XDWf{x=f-cT0HH ziI#3h)~U{&=^3+Ch$X$sp$}!eOZio9XStrJGha{Cnbtt1y8X!2EhLqUj|SqvPz92q zkTVoX2J`!3G9ZXo(GA6%t_10d_^ucUEmcY>2X?43{&HxYDyI*I*QqY_v${@I&`*m< zC5Uu2iF9*_PB)uk0_gQ+*vMgPb#JOS zXWSSW?UPzIp;XeleQe>No=o-OMAD6^O*_jOEF+Yk-XkIMn^7K1l)eyUbBNH7evS@x zr;bf+AtF%UHk?lLW%KgsAg{ilM-l#2TMTitp?ORztE?xQSR zAIAFSolyIeYLsGqgWvco>$fWUdVtR^=g$?A<(q0jRlk&W8(7KgQva4Q63Ve=7Cn}} zs#;JtK+;pkilP_PslgIJdNHBQCAg|a6&XTO*Ot<*0P+j(Mj2{-#;+LDvOZl>HH?C& zczJ6}jXYBx-kG0pTMbfBEe)y>s7)hLyG9|vMkBz+Ai&6-wFQe+EY+4!+jQnVAM{b7 z<=;T6C8@Th5UnkYwaHsZ+i@_A<+?d$+D2&O)i?>w{|k31Jl?3*TiMmx z8cnDP{QZuojtlwTAAWh>-$(-yI?F4Gld9-u1!LPjf z7SVI!Mb5=NHEJhU$a2rGCh9hP5~68mMA>9S-4sOERK&>;9VgQ`XYKrH|1NB`i)c5U zwV45J{%s>OS&GPn&Y4d1l1K2yabB~e^_ftc94nLCkp&b3Vk} zT{=XzPg?Hb^odlWS|A!MWP^1^{LI#UVr>@>O0_3{WtCFGt5=TO>!q+oTv!0;y@?u3 zLFi^W^cants|mS&?Ievt*7`z|nQRq?s$73}YTC7vIq{@GOCl(V`EVSzX!*0%X@2B{ zHh-&stkiOM1LT0ImW1{4$}Df6sLB8%Q?ePcXmF6<`FDT{y6R9wxAV;z+WE!ac0Oc% z5TV9BqMP(E;v<44eF@^G1#!}9HtA7r(qojLTk?oB;BBaw!*#`sOECSPuapFSf@Mk? zwW!h63a9w{r3mq*mTdIcl-J+fbBLxGZ{7^FwFLu;8j>1%gjTa?6-iPpsTfjX(I9_A zijU!G_t7Llb~wuH!kx+b2U)7svJCC>a^0k~BQ#bZWcES`twgAFAPmOpFj$55x#}+v zQhSSJ`>-UdA<17VVP9!TQqmd)Eq(Xn!uCgDbaQBS-P8e2cE~_aMbv?vT}RKZp{hl# zB^9LBQsUNip(r1RnO3M;*V%pc>_MHKvu6*6jE6whLpyuVo;|EHojq%L;Ba{02q=DJ zXWq2Z9$GPjj+PhkE#Z%%&uI#EG!s8Yh(``UQ*o^J=y53Tc>ZAj$ice3XlozLyiVv$ zhs;`_P6Wu4VEJTpAN!&EI7MnazbbDMKUKVW8sj+Kr~pTsQ!ANd^yVe2tWm4Zkh0F? zvd)4t|0vVhX~A#~=RX(ud!_}0QypQ0QWZf?cG#$P)+`8-Z{M zG`|-GD&2#2W}V>Oi;& zAa91{TM!86AP{bqK=9$I9BAJruDhL4++l>lHR)lX=bCqN;=9~)O*k^cbW_emxm(5z z_i)~Ok@pzq3UqzxkXf@O-ABRWwOvy_r^Xd!Ks-m&XUF+z;nGpq=v| zobwRk;$gVp5xC${X?JJnX7@4roVu0AS%oM5+f{f{YS}$bE#rRYDb4?B@P7vUp9TNt z!2fylI}?cf3+QvYq_b5oN)*1tvb+pgG9`RP5IxSZ7Qxv2RnGRBIre7x)a!8A8yfJN z0Q?pJzYW0e0Pwr0GmoRryl1ROStY9X1?LBB@I#}vysB$U#2#wXezgCr1Jy?Y?_-Ad z3H111!0~A&FMY4ao-afjrhEG-XM`&s$>6#uFI# z5GkCfQNL#x*>%c+0G)G0fSeo=AU8(@$jcD{@^hqyP1H?HK@KbMmr)ev$VuEed=ht# z^hN?L@@wZTCtfvJr3dL~nncp4d~#`T371fs<19MsMzq98uF7)6)#W*S$g6y%y5!iG zjanotK)NzVWoki{I}|r!x|B7y?4mAs5S!2-rAoVgTf}D)(8IF z6qNiq?jB>a9P}7{8T00F42<^3aW~BUw3#hnW=ojq4>MITGr(5PvN4cz(O6_FHZlmp zlzN0wgTba+n;8N#Lt$nZ%nXN_5jj#l2|QUEDZxn(40N$-lmy;rHa#ZCSPsi^FY)K_ zcv5XG>9^tZHGqomwiQ|Wa!zKn9VZ)$WaVJwI9H7Wr|mVT9l&WkI86Yj9l>cQ52uMa z_OQw+SWOa?JG1%82CMBdvzj95r*isfZdSXbv6{}wW_bLhLsZQKr&*fQY;f8YoaTVj zTyU!OaN5oElN77w3BvhodUu1-bPuC^ezIcK619h9S-@Eq0ff#1P5rfs9CM#UIiRNPoCvE}C;Xv6G zR!(a{Z|DS)?)JiJK4ohxlWFxf8xh@BL^Zt_=(T}f9P||EB|L3KQnwW;2DlV$1uQM` zv=z&=ndLCk4l^rYW-pjoiMC=g+32v_idAf6Z;!8_g4zdUR%P_6@EQ=j)>FZ*(-rJ`#&!cL z7%W}tsbDv1GdID^%`kHd%-jkyx1oYfAse^b73>Z+awh~R^9rEu0-d|HoqJ&CUf8)0 zcJ7Cr2jH*k;jah9U&RuSQm%SPT=g&;f5dRr9hocHqmuqHPXD;Ol06~9T<-+plbq}+ z4=3A;>S=I#Mss==oSp-x=fUX(aC*_h=_QjB%2h85##h+*s|KehvsSU!B+KiZ<&Cr| z_GTKhw>ah7o-Wyr#&y`chKpSi~T#f zQt7Ai{+(P|8Y%OFSGl>elP8yV^5i=8#+|Gnm(l#_#A6}nD9Uwr&k#Zt=ZgBiT)-{K z6}a>!E5R+x6}aVq+a*`R@kfMXMXu33bE&FQpmt@$-Ey61EX>W=a%>>!yL0*tb6qV* zk2F3#Iax0x^MQ}}Qf&k}y)~VUL1z=t=>s~Of{x!qXEUKwz;vik)mPAM&Sv`=Y(69z<4va*mzGvue;Ttt4Y#Qk+JgR z{h%q>Vt>Fr65jYon0;5&`9t<4IbB&YL8o6k*%Rg`Slpru;e$=Cjt={vS=5!e+4}De zE%PeKyf?p29svcjB|cJ+?VoGcqoX+A(Yem!7LUy87*wWXHT>fM z|9HSZ0q{=*{F6|b$OCl89}eE1F!2fuN%PYM)0}`ylw`sTRgmOHF?=3tJ?(U?F`@!gV!~g z`=~o5{au{?Zg(GbPa3a#IoW-=#*-mW-BtI4*aMo_gCO=0h&>EqkAT>t9%7H>+S?$^ zqSfPq^a+OWq`~ao%pQA6(m&1VpK*Ka*)(R)akA$IIN`QImQJq+SN8S3v4j zkb2ES>UDDz&ZVk11mBx%_$`CabD8OPh<20C;QP8 zduCUlegdnXHLG91>Q}J(4Xl0#t4?`tR-N;V*mH_jIeBu{WFDV2nddP3A#<(Dm-Gdk zzA(>KtBUfx%!)agFVD@)?9x<8o-ixT1GBO`VOE|e%(~3eYco_Q{x^-5#55hv^IVPqE$aZx&=en(qOhxUbgXVf5}qCSq9{J$F~F1_-(~02j#ijd2^I881$+&y&<4C z6!eCH-f++x;h{G&&uHiElGP}II+_8DG1zUDmvyAOH7DK%Xoq0*VeG4x(Hk~#8p9^p zu4%EU$;&pn+*b434*bS~-#GBw9{hI5bB`{^=V5d?fzjHAPTI^wn3)7K zJHyOmn3*DGrp+W9Q}bkWR+)*inkG{2!uF>_oy!h}XYBv18 zs|G#?z~=&ZEr9O^;Pc>rvO(DA=NapyC|B(+koREY3k>hi%o^JZB}*M=*)uJ+>(iJm z;*^0rcMoERLIa33YGO?w76h?o5L*mlArG-|p3#Fyu__`Um$2y;gV&<$QQgXkqrf@A zDy}vfQ0@L`sx_#by%RN96I|>}5!zx2SD1&ROKCeY&rP!idYk4O2VVug3GhvVZ^{$s zOLd?xW5CN1=&;o43G{YtW(Cab1v4vQrUPbHA<$=$jlB`*J+iBy_7RO&Gm3rloR{pf zW!O&;E^|U-f6jYAo_nwaZPkH@j5V6VT2NRA3I~D0!Ju#mB4ZgMzyI$iLc!G_N?_#B(H0-q&W&gLxVq*dT^(^#FyDbLSyKPNSU`~ncWP!qcd#4ZN0 zOF-;W5WCDn?D9P0IjJsKT_HfPWb;=U+|J8hiLd6w*8uBJ*c0W6MSqpN5Ko)l6rJGd zr=vNUemFW<&e&KQP~ku{nHW&R>jHtMCSw&M)!_WmnrbnYBf?9awFG{^razIiu_jkq z*WWFPP`EkiWLM7L{JjOw`D3~HOjQ4_+n=`BGWN^0SsS10w5P6zr*43!ZiJ_9f~Riw zG(NZJ#^+WR`nLZQnuNYxgudF-_THgYz7s0n1(olH%J)F!d(rmJCW-Gu+dJW3(Nx_p zwdeu%*Mmmy_AiwEknq0MX)7LPGmm&$KsZ%BiiYAbEzIK(<_QS%B!qbi!aR+J;#M>i z&zLPBm#Ur>e$TPt=Z#k4;mj@i3zGgtPXCg-MSnSs&nuklRSzG;rFso~Ue|oy0G~I( z=PmGg8+_jJ@Ojtd!=3`<*zqtAQn#SihPWF4A zcTWw zPSL8DAl--|^fs6gs0^OkSkiC8>HFlnJhf>WGe0NWEZ-A((lD#OAho$B)eoe$0I4lO zsy|3oc}NW~J;kM}fr4)s}~yGKP%U!z8V(nw8d z6ex`br7@tiH7IT4p;VJ^jEZ!@YFk0M9h)C(uo{+`)i_DNJ*VHn&1!ras|lQJM-MBf z$5cCk)kMu|5?JjFR+GVM3Rq3`u$pGF(gmws1m$!#Kf_=(AwOfSnkngLar)WrTD5B$ zt2vx(u7{P=@2gs{+D)^X2UhdJYIm^O1FRN!SS>VJ>4H_Apxl$q*Bh+nWcJk}Ngv?! z4Q^jGrmO)k5>RUKP--=66ql-^f-lB~+YCNUnfb&e zz2fufwU{m|6xt%Qc^N@L2&qdx6hN@agdIS!MF!Qq|sqZyz?i+TfGQ z%x7OozaOXH-_7TMG(HD%vNiecht{C87IfBWItPKy!Ju;p=o|_J!}dXG0*mnmORIBo@4W!_o?vxacQiM=cFg(d*`?^5r~J>4YW@8&^jaEHOI9|Rc8vuv)J(22Cw7uv(5w0;l$?xWw;YvS|CH+#u&{n6LdC{ zYek37Pi_e=Hy#y7jX8nUO$Ll91K&j9-h~oVqb`Tq*9D})zGYtC}6)TFKgsjETi8j!jcq^=WE(`t#)_4zW(+4v7A zs2jxlH!|^?K>QDL-7Huy%eUk97B1k{eD@N&p^mx@v3t8FbO#9C2|{;)(A^+(4`P?B z5T|?djU{%wWObh~xSs($V8rh&nOm6$CH+I3{$Y13^GF)6M>*MJp85zUtH;6V3C-zA zaC!=yo(899!0A~Jr{~Q2$fc_11>Xy7_(g-yqnY`?d_$_Yy>mCVP<2P z*#u_#h?!~g$i}7x()MnUMFQm)bvI)OeIZ!Z)SC;o9tCz(^y7?M6u8?YsH(O^Nc7j> zs{nogzz+oYtpI)yLV_$1{=o%Co5ZE6YC$}N4G%TqpGe6|6f8t~Z`e6|Chu^v9-Og>zy+FtPOz=p>gd`1;ytGg2<%Z{97 zrvh)?otVaI5~tkRQ+JKIHp4?~rdfA&!D^NOoz3QVHMmX6 zUU%nk;<>=uVHG$l%(wC_uE8$7rj&cv9{+8QduT6OG)%|jC!7I~^K;Y6-Y;6 zxnJfpKJ@uiZPuETs z834@&&};KmaMU^RyM&Xsc;eSlN3|k; zqZ(@rSlfU#4y+1T6NukB#Bb7!UtO?D3EHJ>ewh)!OER}L%O!m~r(fZ2YxYWGwUU!{ z6gb-l(tNB|f!N-f*ghb(8pQSmvHd`7e-E((gjktLjK>TI3f46YVy(e#WoB;cB>h30 z{$Mw^L(;e%%E=BZaJH>x2v&7C*d3wS9SL?vf!)zycMRAa>tT1Cu8^L`4A47M(>n|F&IY}6K<`}8 zJI_P!`~u^xOS5owfuOyRVO(UeJ1w*KE|&C{aQaK#-n%S~-Q}F@ih}fwb9Q5KCAeLs zxm^uz*MQr#;C3CjUGL#`LxE@GoD{8Y6r?vXgqsa!muKw{Z;>pwa+cfD`or7P_}#%N z?<`2)K4q@Pmqgy#Ju zcs~W+PlNX};QcIG{e`-BdrpY|>nNWW;a*@ZUc_iwphq4pz$qpXoK*4>r+T>{?WB^3 zKAhwg`Yz%=l;l-#e62tZC3zj(-vHM)!F5l~^(`(0BbT??<~s$>$)yxkxV_7GC>@I$ zJBnhB#snnfS(1syqAP+b#sT@RFny^YZ5;BRcGdfU`vGWt2v>as_#b=5A)n}R$fu0_ zGiVA+Z+pf8pKCK;z|5C0^A*f|4Kv@^Dp@wZEzs{gf5%3?FK{o*81kqeQ0IQsmVSbz zpJC}2So#%~enXx66m{zIXj9kURxV-~teRTLV#-lSMnDG0l= z>23xi0+Z=|OiACJ({Jcz)FX{iPfpgW&^-x4q^gZTsJAAxF$iq}LVZAJQxNid2yIqq zOoF&n)mQLs&W8ILe0pZ)vxTJJlGFEh^QlVXGk}u~^zcDtQ(J-0AkAkm_*8?>5bzla zKEphGhMRo2R5e2Ijby{43_b%2vvp#lCCeDjvUQ=i6Wb<@RSl=yw$NRl%qC+yFdM6x zjRUjo!E6UG8xLj^Jj`}1H0qOGvf4?YPGkU+40bhzS*LY7bK=QByM=Q)KoC#6?M6=- zANtgk!fegnRLyD{SnUE<)4^&6Sj{YSH+!=R(d^A;OuGV8zdwmd%@Ih%$ZQ|yYCN^T zvm5Zt1D^T7v%BD#R?jCu7wYzL0i#*y@uz9H4*uLzTdIepMX(frr3P4Pgg=QW8EZ2A zX_u^m;?HIVu-NeDf~?URk}P4)5=o2JB_h%6LOWVpIAv?0XJ5ZbFA91wO|K2~;-IHM zF9CW<54}{Oxv$^hw^YC`V+hL)el3Mrhg|KPctzpg9deCW&tPVFjoPa)eaN*^^X>re zRp7lhc<%$=s}Vo}9nt$1{>>rRAE4Y%gxjCBI6$0wjhgFWg><8~m^_?K9swuyK~OcsVlAFy9hN7hH91nSA6S^y znjEFYKN)~aqc^!CNuX)`7UN?f*P2hDi zc-`XRb*srsidDA>$lKZU9R{y!(i;waV&t8i_%7gFleJ1pb))J>m2+S;mKh26}&OKVLdm-0-kn4WP^#J605YZOYasN=EEb#UFlML0vBIYBk&!a}C`=@e0 zCINA$1jGw;&Mp`9gb_L{qIwdM@RX+ZG^jlTYR`h&bD;J-BH>O%!V3}!xmJl*f$BxU z{Supd*$9Hi?I4glm-aMn5B(o<;VXjWRmSofsQ(A-zHX`?blUtk7|5IJY4hL8(B{7l zN4$eJ|6MrfJviij#9Bzl+6RTkH2Xug`4PyEa~7xQ$ZXfcJog8*Ht1=IWhcwWLhg<9 zPT>}e_O8DcK>da~@w>LvsYon!E)q*QMPezpNG#$b8e9i&a&EZ~&VgXfWzil&y>2O0o>%EQ5=@ zU37ICuOXarXp#3NFR5n3Kx??BH3GCog4QU|8Vy=wJhZkha=qk58^*Q~h&60@TZ7e* zqO3E~?KtsRpq#F^wW(m6)nb~>g z0nEpP`2;ZE5zKcgayKUvi_n}*V(dEu`_z9GyP7P(NguOynxaup1?p))y$euJ2kIGu zdRmwt2p8$rX%=Ii?Wx5EX0I!V7Lr>}R{;zc6Pq#`@o1Dvb@$-3LM*dx7a1iL29E(mtbV7D0TLSPs6 zu!{)0N>pc8`D%$^ZecL32FE~Vj!{V;CYNcTAU@)r;jw&<9y(RrVoPM>Na$8_;7>IenpwqBWOvY#sYc-r$5q3Z#525Pq*h8 ztVVb=5FP`B#{%JT^mC&CPh#oUk^t4#s6CP8{8MNq%Z5%Wa-Pml=QHK$S`~G&2zZ3k zN=)ZztG0eBte*z!r^EUg(C19F61Ls5itI=4hMBWPqjMO_xdJ5u+b0&8*EpTWNzN~F z9=pu7@BB?Ji}@FEsZ{79`<1pD*QY!noDqxCT}J_H#Or)jtu9ET%Z=iNn(jrQdok!< z0=k!i?q#6crs-Z@B=e^7G@$AV;d~_%x~j<8?chmwwO~50$h?B#8qRgC8O9C|bsfU^ zdX4)A;Jy*KZvyU{f%_JO@p%a2TZ`;{hjy{*HUWG)o4&&cAmSp zogvawlIv;C^-S6b>e)=}p5w&NBk_jBE@Nn_7eMqyP4p!YeHlbw0nt}M^feFB*M%tU z_RC~Jy&>q|WI%5joS!SodacIWocNt0_q7_rkgg9(w1vXa<<)_vCb__Ycd+`@yG6|X zJYd3A!H_$!ziy$nYs>e^x|yp$4N#6%HoU=S6gx-WNrD zGXXQr7<(ed-(G^euDx zE;FY*N~*pGr5_koVKgR8f3*HwS6hHPt9~kS?yUM5p8W;Xe+Bj5K>c@6?^I0GV+|3$ zF{`un7e^m+Q#tfy5dq+DbFDuk^qEO8ub3{~$i%Nc5ndb(BvUHrQ~AZrw4j*JE-H2+ z*VeOYAnjWjsaTStd-caf^N7!OU0;p7tfpde6N&>Cw>SuQK3zgP0( z(_-OXUW~h_i-mgyaum@uDbYY{P*oCtceUC5bw}z_?MT{OSM$cmBJsXKA)l0~eSRmiUQ-<0I?0XmMC#>MMNim+V7UKyk zxcbFy4%W?z?N^3iwr{aKVP#nTik)aApmG6BMrx#-Pi-Njw&dLXC3mE28k1r>i>d;L z0h+@=aM%hQ27$w1aH#fj7*d>}9Udw)hB1)g28}J(Ps5rKSg4XgCHL8k5I!Thm{CSC z2AQtu8P#a88lzcl4OZKLRSj5e3s&2CS&hveMYbtx4k`GyXM8&p8%vy2kJNa;n4n?o z2pBs7#zerF1Q?gr558fZj-1v7UzOoA^5 zj#_cBhk#$er7bi{Guoz7GmEMNp*=OBdJtL!LIDtJ0HH>21T=9@8o379Y%?^wk!K!G z2fv7}I1c#rWQZ<#s^Q;i7Rj)c?_9+l-~KSYgG9G~aTAj8S*crNay1m)mcJn#on7S4=%>dn1?{|L!t0t z#rkGU=_PPGW{O{DEynGbM=-}D(VOfGFCL}6cr?m9rdV#rBsjdL+15T-_#9h|>oJc5 z(&J(N1UPsfIQT@T5n9m(c=unmaE2?C zNai!y*jZVt&)E?E94-905dJ*){d}l<0o1+FQ++PVRDCWMrkAksOAU$7^i-d%HT%EQ z>RcvPE@vxOfZ{(Y@k&!ay&2>xF8^wjKMBt)tpcqfL8_77k+QqR1X&al3F{NfLLf>2 z0&-ows}@(QYcjW**J@W>2UlDVSKI(s+z40PgjTa%x0*K>%j&|`{{W-9MO3|&S>I-; z`nOBGU3gyQG;nut;df?j;O=sAm<`diIod?$apq88mPYq&0BQ>IUvPAblR@ zUqBVS16A-vPXqUoc<^Ng@QP9Uo+!?G^Y5#i__bp9)cq<~MR=Xlyn!^atasa5KIh-) zk=i2rV$y_ML^?1QZD}9qu7N(jeAM28O1i1yHM^u zDEB^U%wG1h<>KsD*M2B6e#ERlF3x^+?I(ij^b$%iADd~Q~SKKrqyE>#uz2Ev?pRYLQa~veQ08;CAEu=&_Zf_Nhe;RCRN-?RD50w=LA9%<+6`1U0M+iG zx*@3c@KEjPvmHn!s$PO}BR1IEph*zSJtm_G`QNKK8;gxi*hU|a`UmB0YU&l#{~y6p zo}bNZ=F7C~713*WeSKKo*&Mp{^T}e)7SMA`=-1z8uHjYrXbo=wWsdOLUB4_#m}$#+ zg|v(}(C1mk+lobwV8Lz>BOja@xn8QPX5+j<7cp1nhQRSdL1-8V4F{nSAT-kY8SyO0 zjiS$Z8E%x%y$m;+tznsM4CC7x4%{pYb@z(fHsULy1|oWetwy_GTl%gr5OG%4wgdLD zz&;Mxw?|4|Ps_S`yaTb3HMNMnn0BCjhBGt5TG<3P>)}<0amej~nK(-XfmI2vvAZzy^Tj6uBOYJ4VR@yHYJl7qAol~v{Q>d-ua^$=>9wXcY-lZX*pe<$_eW#V!Hozp zzdl*Vnqw|9AAqitC|~7s54aA}m<|S}LxAZ}U^)z#4hN>y8q*Oz8E|d1UJU9;5%eg= zeKc_YL7rm->l&XqXgQWkIL?>(apCa@gcCHM6T#;s@HrWLP63}&5eRD#2&efn%zjT7 z@Mo~;GY#(^>&yD+>?}@vw$DBO7A|`HeGaEN7iq5e`%^NXJ=?OS7$j>Dlp(mhG1!*W z(V&9Kl#13b4YZ_!{IJ}&C=qT7)(4xLgN@ekepx8o7!qsIm~F?(9B_Mzy5MScUgmf@ zU+aGX^uG}LUj+RxhW?izp7yg(%<}!?DX&jmCJwut^}WLPkEgsob*1n;$7fG@uj0b5 z_Bl&|=}u7BIN8j3@3lVHy!SevYvgdfPtSYZVR(bjJ^8)S=ZsWtg0441=UaT<$?vT` zOnz^JOKyh??(o@@U+x1j`Q4AaaiZ1)OSgvT*^SV?b z6=?A<3$)j$?|m7!IsKqL^&>p>6Fl`ZJoO7a^($KCHM&*)4XyHKe};?tT_o;Q!e@+? zI8&QH&YDvqn+aTzn9Bv_m1OSo^GhTS3rfJQuteAul?c1y5@F{n5q2dd5{KU+4ogci zv^ZrY%%Pl3cPVkAkidANZ~`y0{9~_Gh{;Me*|o$u@%>*YyPK&ijaUbYv>ULo?l5+S zWo+EIaU9|Pv3_UzIl!ksUNEB0`lf$#I1%b^e^_nYtXEA}$*W{NRhM8>J-M}N#31At zU}mu|8LT#2I4WHQ6RDP@Q~rYCbw2%}+OWhE+>z?e5&=DkMr~;_m`Kv&VeVUdTA%TD z&8Ao*eW7|;A4G;*IU*xEOI&P(IO$y?GvtjCKbs(4`dB|}3l^(bsx6^5Euqy4KNYgA zl|K;Kt}`!)?BD7v`>UO$e7EsR*-pv2soxg~$!AF(pq;yt0=e#q4t zh_>q|T5T$pj5WquT(w*UG#3VO=6g>uCcmmkmryMbf0`eJow}vOqNHv&=Sz0@1}X<^+vuRaKI) zzuml`T@KaAsgIO6*Mgi04`ghb_* zCH7+aNY-priLpjR!LLT6GajP@c54LeHVD`n1njm5*zM36Q`x+us>FU>lb#ri6BljI z=5{cerjaG?rS!4XPyVB-H(pFlU{gDS**`CKCsR8;LY&A(Cc#K=8hPl5u=;T;e^}`f z5;bb)%#Ffit??9SJQW&GgT}i+x+OY04*DUrm@7mnBP=_m$`xrq!}u~(t;AV%NA=h zA(#onOax|@z)Xuxn$}HA^yaB38;O;;kER#4stt87u8k-dNx(=FMp7`c6m>6%y0@&v zIGUacRm&v;+S%+1!?)2A_r4E$2A3xHUXpty=k6$Rp4O$MTqSY^btN%g@Y|bn@8fas z;>-?Soz=nnYEkxsDEmW{10c$Q5M_}Vwu6siBS(82ENs;=aPYC($Z;@oJdB(GBPYVhNpSEwIQV4K!BnU^MO<_$ zn?22N@KJxp!KX{^GdTB|>vQl~BG-os)1sUYQ7(We7ebVa zAj-ua2VbHcd?^FD3=W2+vpo*JT${N9X0C*pt6=78n7IZHK9y`-YdiQlHgdhU2Ft6H zH^9L+Y9lwn$jvZv3yj+{)~g~mfZJn?t9ng z;QK_bOEWn5e$M@Xw+3f+@Pk<${E!yqVTkewM0pgVJO)u7_c-_o?cgUF$Ww4IEZy&M z@YCANGcfZk%sdA(&%?|MaPVooWyf~#OKjw2Zw(d)zXAups*St`Bd^2A8!+-FjJyR0 zKM4oF?W)1#;CIAD@3PtV3jlD7+zw#y@61hZjlyZ);Qez7ceOq2CD?l0i*M)Oblsc>7av4B083;!c zaN?vuOCqQ$OS3t$tLEMf+&2LC?%=*5xc4Y^JF;gf9NCLuY$PxuuteBQNA}icHinr^ zV5SeuYzi}eF*EH9euJh|JF+hu*}T+!a+%3h^@BIJ(5AM8ss1ok1yciHY9PEx1b7EZ zsc~|dQ?wc+4jRl5stuPCDAT1y;xv(bh~yf|xrPC_E5&e;s#j^cYe#Udk)`gc*%FM} zRdZBUkB-*-$AJIV;J*#{*MR@F9*=IPJvx@HkAp{HX@tk4+iNpBz|44 z>I*@=4%GJq^?HvV7im8R7)1m82ut%ker(icnqVdfGtDrw7-mB7<5_$Qxb4RX8(C87 zIY&ibq}~EYwrVp`n2Etm8_dLEM!}H*I5JUco}(i7s3*lQDK@>-@MOf}$rACEt@bj> zxSTV#8?k35S|LIOGWc~b&bYGFxuV0oT-~nO9a){aO3Sb}WY`BXtcDExLWcc3PTgNS z^#F!&Ae;(IdwHC?Mw?j+GwWdHAecEAW)6W<&*lrfZKoc_Mh-8{a*6yAaO#oT%uz6N zG|U_WGsnWrad7GZaO&};>6gf#Aig<~O`l{q^|19dvnNZgQ#jYDnVQ+tM4|&Sxbt+* zb%w{C#wAr$&m-#0tnNHZ3vf0BI0pip3jxl90Oxz$d4YE4g$&^$xD%F6_qg+7ZRQe~ zxfEtDgPF@=<_fs;9I|nx?ar&%$knCUFXOrf9=%pux(=4Ehou`}=|)((2_C%=9=*9V z<7Hg8hC(n0Xpz zo`E;dB^%G$-h7UYJYSma%B~mS%NMnsmtf~**m(tZUWJ|4;LAth%hyXYT-o)8xaCbY z{+8j%=StJBJA~A4OP+T)&%340)>3@`o(S}424B9V;we_TP%;&9reewDO5iJFfxgV(%M#91T4tQ4;XWi=mr+)h&7I|C5THw$2vAWb z0#rhPt`MMGncJNkl);_d8N`MHA_7Z<%yefDZKfy8^n#g(ZW2TNPP(w6Wj;pcPZ$}%1YUM2n+zyJmsP9;d$oVt}{ z8pN3fXK-q@$ke?o-Kj%3)6g>a#W^^i-pb#9SbsGvt3QWp`XfMpB@Gvi=pdzje){=9(q#oPXzz(#f~%X|p`PVnVKZDkUy z>hnN-KB(^w>U)6t0*@aTYCqO7f<56!SeoPU zW4$)B2xbB>(*QG#Fw+D-UPv~AwjZ0>$l|ihmk)&C$FQ~%ft4k&(gG{3uo8tI>)^*& zS=!|TZQ_$S8&-xNo69neW<}_Pxr}oy_cXKm4h*XV`n77< z0M(w=oh!5gdqIJfP@n?}tbzi2d)&E?cIRpau`k>SOUpd&+)ta?A7&1KnFC>F4a}^C zJ1-&|>uh%(#6}J-%W~VtA@Jv++RR}vb2!W#0W(L!%u(>?YWVZ$vh>?NjuF=!%chSr z9D0z)p+0e!7W;U~cLL`-vCLUtHqx9VGOfB2LZf&(pL5r$d1= zpum|>;4CO`w#T36Xn&r|_RoVqVd-R#KhM`@E`XT}Vdf&3xfo_Hfj=+iJ>#}NFJmK@ zmu0)K^$IxjN^R#V*tr^Zu7RCvVdpwH^jtXf`mzicw%#C~xsi?EWO($lvMlRCH%pFN zILEDJp7o&HM4WRoc=2}5aR+i#>Gmg(2*HVZ;|P7kZ)@}G@wB7y&aBS8ORI4=)VK#~ z+zU1CgBtgHocn-w?t={LAvhP7ZudC%VQuCSn0XXt9)p?3Vde=q_Y$)4r0v|N*vQkK z%Bs1mXW-jswVCH&=6RTT0cKu=nU~<(2jSb7&B`jps#nBOud?aa4A(y8aqY(9yzKJ7 zE+xIeCB0eZ+=sp1TyKe#4`v93x4EQu%A9wA_%zR?@@6?hCqO&w>^RIxi<3!%zOzmU%|}RF!K!p;ZnYP$_|9@*vR*u zP8iJ94~T;wwUwV>e6X$4!=0c%bD6|_Cng@mE!xdNR5ZS%let7CKw1+TTz;G6# zO@Z}U<$5zBUTdi1RC@ySvh{Dm4@Z+#e4v1D82{Z8jN2E6p$~|u@G?aVaR%nEfP35v(G6;d2A?V_A<86gd zIlZkAF892x5P|4dYtfg8=>MBSwTORP*>h2&64aHOFCoPE`!;y?1-w*52Pp^RsX$9O z*^bTCgZ%WMDQ?wUIT4yJ8L<8sB(EINrtCnAze;xO(j{8Hq19umhY#Q#+U>M;+StYG zluZvL0xF!Kmjk2za8odvv_2l>PbK(mQ9r%N=93rMtPi6t!9+sd*s*s8hn0ITv9oPF z5hLVOPS6shM#VE%Ev2hg0-jGIB2uVYOA!gn;N?5DmzS5zy8yk`r_kz&t z&$3dG#>&mNwmP_gRprjwgLa78`~PF_JK&?Lwyz;=W^N{=0McOuF$qHGf)S7=iU=YS zK@pQlGB6X8Oy*sbf31k90mR6|dtd@d-{|6kFm%@H$EHIvKo90k2cR>oo8>-Now+otMm0 zoXH5!BBN((ypB)iwU+j={$t|%9Hw?IQ9BQM{=+z&uSbZsukHdObsr*#AH>jHJM!5PWguu*Q?h(!9ccp1cXn)Wqe(F(r>M^}3p|2lL#b`4n zexif6R@ic(coMXpQna21t!F^%Sgx@8#gx@13en3n3BVy$z z#KzBhOZW@5gul95!rxG3KCP1YhI==*H`e(p*> zVKZqH<$y?hfF4By`Q%3al}_GREHArEn4P$q5Fc15kM3!12pJKM%Xo8j+zd*yPEb#o z-*Zad+AfEfriD;Lli4klyvjvRe#&;ulaE5~&1c8?^4XzAK07!!pB?GXXD7X)oRpW( z?OLZaG(`s%EuTaw$hT{ql&K3DpOg?=ZHwr^j``Y|XQpzZQ$7c5XN7z#AnyX?U4gtC zkay4L>PcoTf%o9(k_QMy;-V*`>_x_UYpyNIcW$(e@#yHk?6y7(FF^3Nh8BMfl)k!$ zw7RYzVcQ1S7HWkyZRzBd!p=fg`g_ahe9=EYU2V2)esXPAobRg5O7h*cSt&wjKt9)I z+aa_DB9sQ@YqeQfzO2m#=eugNAt)%XtAa9=OFyva8~Cj~S&>6^^U#HiHu*JxD>>;PAl!-YGd78nE9jfGp@S8f@XZ%u!b4CC|D z9W6frHO@q3YZ7cthOM1pYYJ@bf*NNeYMfp3QyjE2m3_1u8K0*4Xs3MV zKbGx$W;`?Bx~pM-vQU|}KvkhY1(hh(5Typ9)IyXHL|K3WH4_DDVX6WZW_l4aUZ)kP z{qs}Z4J@6th##q^M;h|=X;Arfqs~mbFFZ==oATQ{@*$R=eB^@wzc|{L1b8=t=VCbj z6XpCR`Pz{WOUZ0YzVr2eO+ypCqdS1XN^GvTmIo@C4}!T?z&IE(9|H4-<~!e79+r={ zmdnWU;cU4MmX_u_Lwvb1a|FyB2{T8*%nF!UX|XhI9G#Do7LOqt$LcoZ3N)4J@yPT9 zWO^bpJqekfj1XCd5IH4ZTg*TjiBs9zr;(x4HSZmh?>tOVdzE|!B|a0H_qQ)4kJm?P zLXL~rd0+Al#%mYHfbHTfT4RM{c1Kn9yc7J^D}Hx@ z-v;oz8~pA8zk6N$?$i0%S&RD_>;nYhL5<(-`DyR_-bjfb%6Gn_uZe~P&_0|t;vP}> zHv#{n!2cNVKMwqxT@m+$inu4q_)~~DSlZ}{xTlqwXJF=8n0XFno`;zi5OJSL8!xKz z{}S1FS+^k%3{aWAicDWarmrK@H<0O@(Edqi|5m=X;y}qH-e%?BAzSZi%D3^QB7OcypY?F-ueUjXU5k&W)U4Y}W6 zW!e*&_Clt;k!c@f8i4c?DsA~M&~NIN8i~HFc|S6=ji$LYoksKilz7_$XMJP#(;Ki! zt~jmiB?@{epbr4_?Erlspbv7%UZ!LpOvZ;m5?Jc*l6|N$GYn>i!^{Yn83{AnL-sGF zjZsSW(PU!>-G;nKLS?!mG980V$0E~l$aE*jJ{Yo(FVN~6C6k!I%1Eu#U65IzIv#V#$Xr)p2Ys;*{IsvKG7nbvgO&NP zvOla;!cQ~crz*X8P_81#PO2uuHJX#=6gayZ8T5``)N=X|rC$J`_--MKGNZuiXoM+Q z#Ki|56m{UUNb#u$p9b)01fMAQG`aZ1bUu`;5R5NQh7%f}a6!86Q!_uZm>yYD;O;&x zO=8tTDGzW}4_X`^2x12*Vyz%{Fo+!jVuym*VJ>3J^a7+s&y2khDcm4mLLWz(w3x^iqp~HbPPBh3r@#@)A6p7bb=~LClaKS zP?BKjNLNWZS(!NnW=@5f(_rRwm^lL_>1%1@OsgcFMMlmpaCUKZ-r^j1>0D*%JeWEk zrY?Y~3t?&%ymTVGbWwrU#kI2*tJzN%6NELIpUz4fgO~6lm(nAbCB@+7EYgW~46db= zR}?r`K&|3$3*SY9jU!bjkwsICXFw`3fz)c#vwdteqW=ecZ zfjx!K-l%Qn4m{WF_?@@y@JI4+poGsJqU6eLGB?Gq;Dj% zhpmG22vOVQs_blP;!(ueW6IFuFtizlo`9hzVdyEu+1-eS9$!}JnMbGKc5UZ!NP6gW4=IUFQj1+mu@vDZQD4G?=1#NGn2w_U{E zVPbhYG1@!!E@ORQ?pw~v#!eL~4TEpYD2bw!%^4D3Ev?7jfI zFTw6Bu=^V9zHzbpmf7X2&V-%2_>S>@Pe6Xq_kMvNfm;_Bx2}b*xhKwA zbYrC52|^EznFN)(;p)kc^rA<47rGm+K1uunlyd9B2e%R6HnPxlkzgU(oKXa9G=LTV`@qBwj7l=oTZ(c8X-7aB14v^5X&fN!#E_V#WEkaBkF_Ip?X6sVJ|EtFSKZ3S5NiF3=>#3 zB^3t%)qyG^4ub7gM8v^}h(mzoP*>e{7>B-mWjNG~^kro7aLwe>LVXFxa{B&=|K9@R zNDhp8SM`0AQhfzfUkTNZhU&*a^^#v?U!bw}7zBoVb08Axk9LcyA_T+~9#G%Qi%^NZvvok%=dFK^8bED+HKUZ*2v zjF*Wu?uxojRnM2`)$^tD!_HJaUuOQZE+E&<$r5lmO2Aq~{1sF~50f?Y^!Dwo6YFJO zb*PN5BFYmxstl(6ei!mfwC8(g*Ujdm?O%#5v@$kxr8t*ach z@GbQHt$&^Vx3T`KUG?GZivJzpe<%2_2miake*^QETFcunQ6cX5$B2k~xMbc->f8r) z{%EH6Gu2z{F6jf5|ASgpt0WW~5eN?{As&Vhk3fh`5aLk?@ffPwTTsfUR7dM8)l+fta-m!T`-=Rs zFxZ@kI`ey#zI~0j+*jAbEKH$_POdySQMfLD@X5eGmLhX zhD|7o0&<2blnC^tHJO9ZAoZ2eC71Zgt8-12YeKbU;x~@Tc13ibWs!FJixuqi>92|o zPH9C(5hajuL@k;SnMKlH-bihw8Os74D_oR=z&rUul1v`OiM&MM)rTJ{UIb*PCL90P&~|RW~mb zTa(3tP(yV{Mo&w9C>{=l5~8p9`O1o3W)G~XIgu{^ennJ7O=vXqrpX$p@v|jzA{)_D?+4r83j)-^N9vW{mNlf8E=xp4kpnuLye2Y5Xy{+H^oEE zwI<7kdNCAoFKvpNaZESnH3sYBViE1WtYje?%{fIH9gpll;Y*JUikotk%ir@WYa?;FiLVkO z?nux2%u1)pL=jmk#>ix{#09G>mqcn4VKG+9?yczH3{o+U@^1*%3^Lo;V58Vc{_d$n zRX<+-78ooy+?(zmEcaauHUlL-nCev8;gMLH5EBTLSt}(%OA~aachC&NiR32V!cZgc z-Vu|SA^E|UdomYD8B*z{b#NDV4iPVZ|^sU@ZqXon6 z6bwDMG6?b3)i_<=YE=!>xoE*lRAk~}2G!ep$Sk*_LS*)PLV_y&P@{Bet(eKBFINPY zSfB05pXHHyR((H9T4=7W=ckKL9JU(U5?LeF+Fvo(#W<8l`CeYk{+M9BpWBzG2 zmZN23KDP*s`94KB;I)Vw^La&DXJWr1)tQ)I#BKZjvPrG**==Pd306fV=vG%2h z#WGrBnI#oISr}y3Hy+Dsjb)e68(CV@W0uxI!Gu{?m;*fX+ng1&LzH4?MznDfuAY}e zub5}W+|KGd+EQ*lXO0Lf#~C0d^*1m)yBGN z`ppzkbJUV(A&+)jL3ijS!3qcCAl!Y0+oalP#-w|!pmlOGv57j?a|WG5nv|h--*~K- zJB%zAvED1@Zr#S?a_=qY(PxDt-gS`zGny+39nD6qIlzf+-5Tp_jsk+hZ1>f;Hr8)` zY@3P>Y7orrM6AEr6|a@U5$c@BwlzCwj)6F}cd=r#7w?f}&}<}PC9Sbiv#G1-n5qB{ z2z$&QuleIMe+=^{*ZlFDKY8X)2lFStqJtU2gQ()?5Z*3a5H2v|RJNzXV*|s5=1-CN z)6x9tWd3wEf3~XVWrYhp8y^&m>xKuJ?P!;9SM#Tv`P1F}>0$o#tnesrm4$nmKfTSL zKITtA8XFcH++5+MqG@Up8!|sOH0ceF?5@i9eX(I?Z8W?!Ho~lp%>D!98)`;3ZekY!Sxm~v zt9;da4cc*9R8V6MnG+$c7Bm|UqcOAut;iC2lmT7YUQ;7aC^M}$1m^XdUs)EIK%el7 zmQWyW#=V^jA6^iwUlMGQrIn7Buu@UE1RkEe3526d$ciK;O$?N8V4_Q8=JI2cenW6k z$lyAiUIX#Fo+Wa3tVNP`Jl94WLzu2^D2pxC;>>5cBGw`!?Eoq;2g)!xNJdSojGu#L zz#JkY!LK6W(9{Lh9!eXr!%WXEYmFT)J)6@`c{a9OnmK~Z94XBlCC#jmW>!iwM>m`3 z7E2Syn8BuIwPVMcadlj4?06Md%jB%yn2LOt)z}I0eaGDE9b@U zon2CqC3_RGbIi162%Rfio}sbxf-mra@@zqVT|G8DOi;NWm(G z*u|}}H7d4F!)vp-mzZDvL(23eCWlK~W0y%W|3R=X=WvmSAIOGaZENfb$sogYOF1<% z<=VD1>doav~a1aM_Ew2{~1#4TReUl2k0+&ZP$p7U5XN}Ru zK~@o192AjYVAdloy*_0cKhikCN%l=Y*Y4MF+ zX;;)?s-3T*YV&Ft($~lczgEWlIvL#8$=bO{)y~(K)Wn<2j_lGhbI^w-*Q_q&6xvd= z3>dK+OtEiljol>0mTPm9#g5%<8efZ6!mmFayG25|wWPvh{zAQx+h{!=ceQV)kLB!h z?2eUYN7hV2uRUUSIuApLt*0+*qYc4GW9%+kYTMKj+aMX;ExFxOkt+-P(x&=IO(YS! zccr9$pQL`jB>VtPDVfzw?7@mG8ar(?yFD#TB=*n@vt?^3Z-~}5n_a<&seYkEkFZXr zMw^mWQqeg>^+xPbQ=G?IV~@)Y-p!KhW|I90Y5PgD!XXi!3U8nnxlJt?V>}&_sGpJe zpOpZglMUI8($e#0RpR9Sf>~N$Y>mC7YMjToHS+*M>}6F06eE zqHw=KxWnA&o-cv?t&3vpQxpGZt+CIg82#AKUF|a74lQs*G1Bv!g`(?d8iM%a5YF%z<4gdO*CM@^4ejUNWujQ_&IkH~MsNIkO2 zMt}xuuI}e@HToW62&EhfzsbmwRYTHIi^Sqc~qS_J~sPCHO=)w5#V+SwU6q>aAi;ym}nnfr0ntmc~lu0!GPW+ zlE+e+HH&uWlsuhvL5n;ZFIZ1+>JpK~YEhxxWug)0^}dK0uADjoP92GO+8&-81<#Ep&+Rs?3wkGF2YQm56*?QXoPD(;d0-4YV0}B5 zjMoj}BUfb+8%GIuLPEI)-{B@P-hM(aRTG@0YN8B2X+=IOCRv3_7BtF8Om>x`owZUl z1uS;~>s^yd(NtB6c7s6EAjs~?rKpS4Wx6UwGl<_FC`IE@ie@Uo_e6fPP>LiJnl?5| z5pmf|6{6VySpmy?qY#ZlA)3R5$fFpSl#03Ri+u>fzFN7Nkz7U2k#*poQzpbb#<3sa zm=9O~nFjZFgqhiG5|w1T3byUelL*2i)yg9^@JKC!Aq3qQK=*~veF$_9v+mZKy$F-7 zBZG@H(JL*{xsN5QyHpj0sOKCSD2GNsPMbQK#I=bYjNw5U5UMZB9oqLm*$m>xa^cvB@jG>PM3^vp6mlj}HL zx=I`lp34=_Bf#@W@H`4USAgeA7tf=ar}N0SV;JtSWcoOb>tQag!z6{@U7L&JIsX$V z{}Vy&Kg{c-B*jjqY)?rp0jEN&)09}JL##6()|n9NEQocsORRHTCE#4cp;wPux%FL8^Q_6b)jy|=}%N=s= znGCwy(-8Oa*}nJD)A!qU?Ds&FP&@#J4^k47$wn}HNd9dyei)1&0mDtQCHKe$igMND zqwVDymdB{;kRv0?bm8N&!Id$lz2~m*khwua#Af+?yM%Z`E?}w1i8Rvk+9zdiKsNQg zR5$3U_Ng}3@ob49o@RQ_5WQzp(97YJ;yLhpUU~2Z@OcqDUxEi;mg|8w(|!h%3==nD6zXLtrm3CRi_vABmB%dr7`a%Mw-%#;B z^!tF0EVgv(t$=>WKq1ga1oYz+K$S3`C}BPYu+ISaa|rW=1o*xZ=1T};+55^N%-3Y^ zn>K{`RtfVR?0gSlet`WSA#13`-H&NXS>nN|52AD1!y*nBfp4pa6Et&;{vC0JmyGkSSF{4Lf}yNI%%$27>gr1=-dqh-}T3AR|OE z1SxR}(pLd2bqF$m0B+ZYAOn>kg8--uKnFvRAre@z5@aX@vFr_V2r``Pjd0qVq3JPF z>9IY`jDjAcVSWebQJ$gK%{yjDVaC|PbV7F`P{O?$++$Z7_DONZO1LJ>84Be%LYdUS znE%%pVkbUXU_4=;kc7P=OC}Q&Gnm1o3>sTDM!C_MoFSK(=BROFhBj`5fV+U{u3$P9 zOm_p*X~fj*ywg~9_YB7j&~*8wR|24KXGmvEXCGMP_K=8Da;uC-7Mh*EW)U*POlG+! zv7E&$=^%Kz#zF?!*cs8r(7=G!)Zr7o_8vQV=P45^cAq^kKvfq~$U>_gH*=DUU-9dJ z0gLFMj#9B#26a}X%xKs;I5CRZkhnqx$=>n=xM=E*Ue9&;V&i@adW|M`xf9k5X!Z6=!gb56EZIlV<^PfwQa3HqHj}a}@G( zf&4rmKOe|10P+i6$X7A)l$l?|1XdG_i!}mgDgt#*z-uVwB^ma_Nvi5iTnf;aDbSY# z^jd(v0-&!1=&M|yugGc}O>(YR{i&AdTBG_sg#NEJnkHUB_Fy04@_XFbt z!1$mG<3>Az?OY#Xh!2zDM>L3crGdDKQa+kt52_tamUs*>A6GCp1LhNe`6OUI1(;8} zU_QezlXHHSp*}|dp4XsmN(1!;O8Fw7(!mXAPQ^<=`LaU!3Q)cZl&=Bh>p=O23+0=P z(vj&~4Df9-`;G?i1sA|j>H#~|6g9M;(X4gf#hKNV+xuE>S{J~tKO#N=sSg#Yk3i~U zkop9qJ_V`IlIq*f=~4Nb=L@p?CBzdZ&q-M46p(A1T<>D=Yl7yPN1Fdo zvo7YSUB19o6KrzIsX7!6E{@2RFSsvcy1jU-Tzth1=6e=nex>rYBKQpmehY%%f#CNb z_yhXe{T06-Gx(KCo|}*OiJkW|(f&mXZ)dV!8POLR)|}CA^hCSNq`ANLnHWW8s!?Pn zMv<8qMP_0YnaOB9nH*zZAjZ6z&gR^gNf3=pX)rg_j)>nfoHIr~eLh?G`LR5DtV5<< zx7bPYGu^BTD0N{nt0J)Ks91FZtIlAx6wq?;(W zaD??@>%GZ(AJF|%ECqCpQ=Dj3ZFadsiAwHrZJkMlzc0b+r-@=0g^FD539${_(m#_X z;P@-CZKic+iRqDIc&H?kd;g{I+yHoLyG$-EC91Rx%uIEVl4(xfdDUQuL5#ADP!3kH zVj`@PvQ(7^W``qjbv0usLI<@3>4Ga>dnx1&zd%&b{bWlcalY}47jBjW4a~TUfI2s! z6bnG)QjlPrSK^WWks2BZ&|JQ?D@R55)CGoIQ__Tiu4xM<=&H43JSJp1TcK87kApo6 zf!c`a)kcGFG-80Er8V`DJ?VX)rRt_N_(N9+^`>Mq+@3o z5Z~YyjKt}l%Bl$}<<4?zXH}VDOkEIQnQ2jzMXE$U5GRRTDUmkHrQz}_Ya>+^2B~rF zU>$YylWD?|lKe?a8sogW)ks8H*s4fedC6=Beq z?gV#^hdU=&wT;eP3!oXA**bN4zq2ZCyA#Ln# zH#{;&F`cXa8Dww|t&W}KYIx*&g#U%o77HaYlZD@tgr5aZ|4-yCEAn1kJa@>nx^%Ni z?}|)&uEAZX#oj1mb5t3di!!zk%GkarWAjkP_H&i7`CP{2dtztaVt;meC4s2YO55zr z)UP{(l(IV0`MQ(&sI_P{l%^JGR`HFrfA3aNgi_a=3zXywA$b^*M<96}BwvJjvy7%K zGkH9d$<##ytK3MsM4^lNvWYF%*dY<4bRxO3jUx~e3RN>uEe5J3K(!R8S`Y{|2!sP% zmF>x7Os<}Vra{q9(O#AowP8`ez4j}`Fg3*7P*8`L>W<6A zlDgyJwiDo{6EoG4I-ZQivO0>TlQOZa?quS63UjSnj!-yNg~Dmb^Ylz!Rwv=8Wp%{q zj7%)6I}oV;{F)G3JIy;*H(rdMaI1rQ?acb}* zak)bPAEV?;hsZ4oal=OPFGpG8Cif7gPK{e`Rvx+q9=a7Cx(yz>9Ui*FHEy|6elAeeQ=o51>ICCdGNs8VGD8bsoyJC+uxZ z;$b-95oKf(j64b>kHN^}FtQoNWIc+>6Pecht;$tA$?^Ua8Gc$TBpY3Yg!Y!Cagcb1 zb9t6>c@FT~eByZ)aJ^kgyg(1XnA|SE1l}(z-mif7tKj__c)t$bZ@75B>1vnXVzh6Q z!FM#yFSs~&qs@|O!cM%)*}O;Dybs)MKk|Xj+C9l+CJYDT@(A7!xjy-ba{f5e-c&-N zE1xlUxfzAI&=6?d)EtdPwNrCnY8TvJKA^Q#5w#$OH?Xy_hj4akRGmEv&%3^J^ zvz*%IWF;3ePZlxsW=X@oEL-4TGSe+;wg)u^Kb%Vs`?K7On(c&nS#G8s=$ZViHby@M zS~hRxZ9>veJ!yx-#%?1fsjfTEa>-`sqO_duBODKkHRX8?;;6 zUX-#oQoc^Jul8$RYDlaDdd+fI&AZplh>*MO^`oj z$_~S_Km~2zqrtRvfh^&C8$2JnEsWZh#$W@^1+FoB-V0?C?5C#px^X^cTR%xyp_JPW z)Shd@ntfNpc^UfyX~^8%STDENM-o=At-Lmv2$omjm2uTTdVs$)$SU{d+2@pHpBCe&T5H_=*C}#KA#oKlbW`1?s zJi?(pv2tG}O;gYj%QduRGiqnU#e^l0A2x=TCYYXm1hLA8s%|;yfIe@7JhoFZvQN2r)=9SHJMyY<*5YaX-@n9m8URh}*%=8t+r!Q%*clBwJD{4E zks(c$b2aZ;*e-VDI(`h9AFI{zLtSb-tSt(~iD3_2vro~#4~}S5JFLCRz+bk@?3(Vut+Nk#AvB13M~M70IVN~qELgP za8Q=D*H-av<&Zg;ARM9{iJ9SzqW1J@pl26~M2>v389s-i;@J#jqCeFDjFVwSzv z(3S2a#0VMHzM2qS3`7s8H+BE`QH)rVx{O?+0`5`- z++_&3%MoyE5pY+ajO;{{_gT)@c~`MJuO{)X$#TBVyOu4lwoAi0N_Sn_(r`UW!wm}D zjR1EOz}*aRw*cI&C=IJo8g5Hn8g6HpcaZrzwbHQ8RT^%x-^cya{Jfqy-bEZYK;nNe zpS$(wQKj@AVs|gtjgmF+e>O%J_oXft_p8Wz0Fn0~B5xxi?;%9q!zdP$WY|4|Vv#|B z#3pvdqXhObfW>!@v)y~_La~{WJ(0FhJc&Z_l!Ep&pgjX<&jQ+Wfc88J#XTq#FQhIM zFEYxP$o$J%q1fyy6kBW6b6Q=+E1cb{l-+A!^Y1& zkn%i9Lfwp!Y;AKU=aNpW(?H}*;5gfqEjNN#w;X`ZDta;A$1F(`IG z(1tXI_%iLR)mKXGuc7ugQ2Se`{T^TdI(qtsPe3fFN?RS#VD_40*HJkT07J z88DO!L;h?I?;jD~dD+%s6?)F1LpFtZJ^?7mw!>UP(!)I3j+eRp7o8yr8C(&8>j-uJ z3Lu@b$?ZSdqvy_qX{&5|J6WpG5nb#D^&xcEY{w9~Ted!})ID1bp_9DTBilKS?wM_m zqkAC&dLttGWV^@FfozPUw?^>vMX>bCPC1UIAl)V##yEOA038VHgAl4xQfaX)O{fm$Xc$5`hH9bOKRanKo$H*I5ySY|;q>f? zZ0!&kEzwBb%g%RI+tY)i@Sr>%po+H3nf24uM5rOva!lER$u!g-LTYux-3&S-SFYGn zt1hjnP3i*C8XQ`?!$()rq0XvDCbMdi@k(Zl5*A5iVg|G9s>S6oP;xFPvam5Kmxu+N zk!eP^^`;L2Z|HAjwH}{YSf=Z=3K-D#m3yTg;uZ)q9@t6pIrOi}GNo z|Hb0pDi*~=cE7AN^j^Xw<@?F-{m$_H6!?A@_q5p_5sYB?h62vX#uOl6Sv;%H8P45dFd+nx?G zzdKInre?X0r<5lk<A^5BUpNqg}HTYbNxH%qi zvnEYVbO|%KlmJ|&Ma{Xcs2MBk??2*2aXFh>OQx;>*FT=^l}Tz|MHa43ujVyS^IE0m zI;eRa)Vv;Q-T*akbg6k$8Z~cbinkDeTQxPWa;e!FtzmK?-^N+oPFdUm4(XHMsk3)Z z^sT2X?m`x)(;1|}205vf6rFUG7P}ylu;#&=c@`Y)YLnWZZ}1H+`kupPd))!uSS^WD5aG1Hs|ey@)?mG>{(3|Sun7V@3IQI20FOg}&8WZjqE-4qM z(hsQDJLjFhQS;6+6Y;Gz?<^Z^XO7}K*Ua8A<(fl8>Pg^ab$2;b@57*HTTDBo8vBVpFFMF`X7x%!U&)9OgNKn2iLpqLj?U_DrPI zCZZ1Z9HmOyXu#b8UMPoGb_Dz}EU%4XEElLW7RPaE*on}M*WzMC4o>;3!wH@fD9J=E zi3U@h);USRoD7&d1LhRK+yyXqb;F!WV&U+;-N@Fo9BsoM9g??u4(3>unHey%2h7Zb znLS}<7HSs>p5|C{tocOFaW?a>AcK2rRTK1aO?X&^(5(4&Ix6Ea&;)TQ*A*R01EhZ-aD=7c3dT9br3ENQkfn9v5i4Z+$F z9h+ikcgUCzm5V4BjoKV%m#9fmh=GCtg*YfAK%p5F_E!`Zv)F$g;w9|4r6f=bT29bt zP^Bx){fL#-^=7SOhy!xSn+H-J2SMahOvvNLjpOdiSeg?oDK*q5WlW@G=)l0Rfq~%z zX}|s0;w8}~#ihm=YBA^p&tg4sX>lM@JGQv2tgLvPJEs(NU&_oytJ_5tc@8?_U=)x; zBoXIj+v3n1^cYM* ztzsoyA5^YCnqB{Q)$te(oMXx9$7w|XoIqp0_&^mkAxB^2cuIIen|+ZJRYQ0Zq&yi? zo&qUPg_Nf``XZ;3mS@;~k>aFgB-&ULO5GvpBReE#x;rFiIXWa~6ZUi3?2w$BrbBWb ziun1UbO9(`2uiC!>7rB}lGRp+WVNe9aq69 zTz=O_@0F|thbzG0N^rOeDXCY|Gj*@T!XmCt(=};P9Iw&4Cf5?jb>P?~Jx6gJQ(BYU zKe=Aj!#4og!2w9R<3n-QtqTA>$N0nk~=AP zDXbfS^=@Fj2Uza~*8AL8@7Fsi50I?~lR7CIQOiA~%sdP;kHE|(n0XXt9z!?aPILnv zcXv`YGyf;Z;FB7;2hwy>o}!dbr|P6U19ZZ9!|FS7>RlCQ)xT{bmr-EW5q&i_d@y)!Mti%EU)pFkW}{PCi!HKLPenf&DXJ z{~XxA0QN-+`I<(k8WXk2d2tC77tdc|HJj3-LV zjX=O`zKsd$nss`wSRUAUsVOEVBklR9DD8Wh#J>y+Bq9wVQ{wO4(NL#)K0l=B`TXea z`TV5ye11m2{DOAjR|L{;2%L5vt>@F;BU|eXkJa5 z#xcM+78u95G4ABidRXJh)&!5chc(fI*(POXGR*7@GgDw@7ns@A!+jVDo+g_-t{&EI z%zqjg++8C#-jlkAHJwt<@TBNr?E!Q%6}mlvZWhq(1$484uEK?GZ%=X$YYqdPOJ?`c z08aO`)x+AC($CYE zI)vp7p;WyT?KO@Fas2P=aUFE3pe_W|FrY>NwGL1h0qQ~4j1`Oe$B{L#CmM-x)PpVU z47Wy=7Sg1NlEk3N)wpUK)@fNsJP>icSREh_*%+Y187Pkuh%B<+A12QtR8g-l<=0jV zT1EXwBid+o6!~o81@_v)h&sH$Zb!}bzf6eKPKYZfB;bT*IAJlIumnz63MU+_oY3Oo z*N}bxEiJ?WEcJn;<3Z5z-+Z=}u{UvBhlAh_rkoD(*b4zzZ*eHf>|u)9GEh4l)Ru$V z5ukP?%4`$L>`@+TA%M(LtYGLX$>7mi`8(Juuhs!@w5}zU$Hg(6%dwQpaUN|MOv>cP z>zwIjs27%LUND^IalW)X-D7tj z&VZURH2``EtX~T6p8)S)=CLlEO7)^nT+V)6OL(r(qTvEh(u>P%+7V+G zXmKS!brn5zwblyq*ViO@`&vr54k`Pj^R`_ni0e|j{CcO$Z*aK$M$6@G&Dq@K^83x2 z-*17Ox5DqYCHeh!<@Y<_qdTGe`ZoN2m-71t(&29S{W|#l9_9CYk>`Ez`z>z2->>}s z0DwLS>l@+sYvK2Y*zeuiniLfevl|~FP@6R8Z%B4NojLs<)YOl%jmOBw;~wn*>;E9L z&3a&k?8$&9DEB9k`?2kQ-x!joy3K}kY;htSXf@ml14FCN zpPZX`%H3L7qwc3Y$)oOPJg!mqvmSfY{Tu@Gd5j5OK*YR=ICx1Pb-zp_vsdg<_p503 zmZ@g%H4c-%ono(Z)Vx7{eN&6fCp;;Kw{KCxx7!@vzN1E1??S`(pyB(_@B?W0p<{Ua z5sCP*J-pQhdS-i06yiza+wO9F`-yve`>A7m`x$}$yv_0L7iq?~U!wef1ukEM%QxWi zEx3G_YJB^>HNO4cHNO2pAK(5+_qUj_160GyZpihrTl|2Y=j8%tVd&ts77-=c%lA^y7Z9>SuN@W= zt7E8JL`gboNq$To>UL5fI|Jla0NDi~y8>i4H^}Z@ZK&IWZ1wcojXb06I8F6V!?PXTwYKOqn5vHC6H%4%I5YVM4A;42NnKg=($Md7NI1 z=b|II>f^Hsiq=HXngm*tL2GBwngUwKDq6dEd3-kR57Q94vfrkXJi9@jEs*at<~+`8 zZFJb3OicG`mm+8yiWvybJ(Malp~{|6WfoM~3#!aUaE?Q8R(P#T5$t@$-pp?f8K0}g z+3sHFN^jW>|5uLOhcnxkGMneM`|tni!ToeK)Eemdl+FIg=13fuWfd&iJ4A&mP$IL! zxeR=LiJf_%q1iND9WvsfShLwoM}qaVx>kg&JC>FvL=cIqLng8i-L6FIY31Tsw*y6G z>UgbEo(aM;)$mLWJW~tLgb=SMsCZrAbsl-OkaY}`01>bA$g4WGKHrX03AHeIIY5$I zt%CA^J9YB1Ra9M_MIUM1#9MOD=ismC+(R?I3;V2@x!WGRc z+4@0tG#^drj!6^E$0C}KQ}B)lyb}QLM8G=<@J>cFAB1Q=B~>(^$`DT@)2D0Ee6%Z? zry_Q?h&RL;Z1zktdlndPSrcbF^p&$K=a98?z4i*;zqTm$ZHQxR>NHv!+mSK?m3i8yqH6|6rR2ep1s_gat`Gb>E*Rv%%NOC zY_DXtb>|^^u2Ru+HS)a1%X26aj^n7AYrU95SqGrk!TR-xt8)-nH>7M{Z)6YOL?~|7 z0_zHI(xizx{p%J=e5==a`qx2T*EGg$l@0e{x)(T{Qu^Vhd9z7rl@>Gi}c&P zDJNkzQNl;PsjhXlW?>%lV*LL&e6$%pdICOr5Is;aPg#}Ebjy72f+CuaDIf8 zG|7^$CRuEI;^Q>aD>p0XpXk#opAz)Xy!H(|T2`Mk@VC546Dwb+TKr4E`wH@Y4Y|Jo z+;34vE$iRem9=K+dk*0r2+fb0r$2R1sr*Dqe%6v`@YIybFACnTfcG2Vwe#U5KOd&7 zd@gvIK2_Ia8X(I@hx++!dzv5BG(e6I_B=ke=k>8YAM6>hm+Q9Y_o-=sJTlaQ4b7c` zca*k9YI^~FLKpto^YG4%i9!A7opO=yBQHuKdM~p;VJ-ybB4F+a%$gc|O;Q!tRu+2ZU<=ot1rYI8QAQRv$~7Qmfl2fjZAQ0G;LvQ+ zS4K&M&R{O3Z9)WDp6b8E^ir89OI@l5t5Q7#Av6@BH4LSCI6`U!f@Ylxnvp&pJ1%VZ zUvq=lp5tT`#ldLA!G9CL4y@uppEU+9CoDVqw7EbnSi~3~7xA%5=W)<^C+IvLI!}Pk z6MZ~bktU?flYFV#zsW4b&SZRwR$$6~$>$UY%#^!O%3Xc-NF`wLP-|7DQkvb6Mh?5J zP#4p{V|T@4I(WKeHkqx^NKEx5tyt+sM@OeAZ(?uG zX%6Ky*Joe-lm3x?9G;Y;?S1L#d3d^`J=%7hzrCORoIc#1?{f^d_xI_;?Mj~-Zo5z2 zuJSp@+d-e*6Rn1#HBh+L=N@l|d>C&pfHM|C{IDjb{+9ugw}IEIJjOp zxB+=K`gpuu?Q@N{qdttcn*cNh>jJLd7p{-{Ql2=TV5c<`jK!M!>wHNA?n9+7|LQ7q z2?JhAfLjnJe+y&>=)oLvkKYa?zz6x-9KW^tFtj)r;dTi67Kb7Z4uf}>`SkJI;ncZU z?z6^kz0|Bqu(q~R&Z#C1;qv4V?g*c22zR7UAHp3)kXQKH9Kx;ir5?f^jd(l;OpXPU zvM*_TccH2^RsrNi(0(<1aWO!zK{vtza0yoq$;K|_(smhPx?GEd^L(x$-daj> zg_cA^sD^k~Duh=7;nhHR4G>-ngzMZ0uk&ed&95h0H$WomUg8^3d)}n1+zczXz{;(# zavQANjyiHJ>c~5M&Wn!kWcKUH++7;A>wT%;nQx$!cl+$a*POv8?g7Mm6~y}h@qR#j z01zJp#EmY95BaPk5M5b6%wQiO2%9vp8+>iOF@KcOKc=PE3WgdgKd#_z2HYnA_esEg z3UHrx`|TNPsQfG$dJfv0DtEZm*2=sQ`<8}xeA z>^sVvwu zWXl%H|LY_@zadlKChPef^!#4w`2+O)5qkavJ%5Itzqs`L)urce%&nav4YoIIJ->13 zIZ(T|<==|r41;pcq@1%j=ii@8wxMaGUcly1o*u)#Yn*Q8Qn!H1*Kt*H{-KIr$VF4@ zPH_z^=3`~TYosiDJ_A}C25X&bU<;kWTIU(8bq9mX-g;H`@(t&!)dH5Jkl+^?&R44) z*}CM0DCk7#IvXi(I^W9RNa&)_bp^U^K-V4UdH`KdgCjv2pd*@$3m$Wf*5YoU$GPF26sUk-9obJ@)M>_fbZhJ@(NC zx{NzOrE-HiiaSERF;Hu)q4(Iw8M4Q|lVSDPd+;zdSQAeD%Ec@D>*Ebqe|>_X_tz&9 z;7LZC{q@O4>i+u9@a`1w*abXx1&^uVv73>izdp@S{q<>vv%kK(q4n3N6TlgUeN?bc z8JDOkx0Q-L*gcY#tD`ei*fntidik-D4ypyD#e z(7Ne!iOW8Qz3f8IYhQ*w-AL-B&r`)~KLDH$!S{y)Dgn3(m6>HeXjmh7-BdM~g&M+B zt2uwJ;p(D?D9HjXiH1*g(HAOwVc?4ZUmfr*0={}Tz6L|u=#~N9;VyK`4STVSmFp1<@kla!lm_uYqpgnl3QE6HORp6K)iFO>Aw332j|I}> zfb@7EJ;Cj*6Ac^^d=l9?8G>x!v(@EQgm~Q(bRG_G-CY}PlrwmtrutwF-y0X_GhBm> zwen0Xo>ZYX=QzWfgEmyF9dIx28w}OR*W&8@Sal5;S1f8lENyg5T6N>7;%!uA;uJ1@ zD-35p;#4KpX%Oplh;;_UIul}@1+nf`Vx5hCMC)IzjyQ*d>0EN!d2rfa59@qZ{3OGg z$i09NUT7rU(&g~1SYqXBFEQ*E?oxR9GI;%R z!#$O|*1%Nm6$p?k5fE1yDW`Jpm9cTPfvMbUi1D?|xNa5dl65NRu0x*J8$6XO;W(yp zZ!j>Gdn16}1nW1Wmbn16%q@m>0K0?ytsEP-5surnisKrijqQea@KblvQ|k@)cEh`p zJiCEX-fgtGAnu;je!bV}*ZUlPz28W)AnpN|S0B{8x)EYM1g}1v)5;MEt5R14x>WbeF0 zC|=flx;fdWT^*OIx$4AMIHOl7qu1cPHlKK1_q=u7w(1?fK^eW-cJKHt)lYjH-gyVT zvv(oedl2J&NALIp>K%V*_l|p~I2PE|LGB?t$RD{o$R9g8$e$4APuuPwf0m|${5kyh z1*m)pDqn%h*P!xEst)qERtNc8R|ok!y@UKc0sKMpj*GQ@*vXIVollZG$3H32f0p0% z&^yP!0Q0ZF{2MU0%jJ~RIqs-B$F6gz+vle4AAhQ-WaMi7%TFAaOc+$pw_8 zP)qWCaxb|^LF@>KodB^jAZ`VSUEC16N)^!;?M9}$=cYJKq(?3r>ZuI%f}!3p)CYzF zFtl|pS0@s_w9_{?`81J!EW$Qqw!g-(TduPw8g%qTx25#OTKZ3td!i)@XeodW0MP9K zbRd8Zaw}4ntEPwtlc6EdW26avuk;7FtDCWs4}%v&IkY5hz5h2%K^zWOf;%$7I=~#9t1qt^LrKQw+GoB_u&p)KH^&`sCHY;Ye4!iQ z7rJq6fOU`&v?RoBxu5`jV9zxGeNobg0g9DYzo#al4*j0+DMK3T%NX%J|32d z$!4isj7zQXPDhe-L3zu4}E^ zR7$lQT=;m}<7Q^%+JvVt3-Sk}7D!LiD_A0tP5Fs;jxoO%HkuwXC zvRAIQif(qU>=;z!TC3>xMjUOn=4d#M{x6C?mt$}rimrXN+IXs?0+~nO?}z9ckM*8$ zzPCjNI|__Btc!#e+ZVT(Y)scQ*Ce6>R}V&cIYhabpSrZ~uS$C*d{zZt22t9p;lmnu z>1E}mTK3Ww0T*If77*=)D4IY#&s{Xblq!6E(q?=Q`g>$rE_D zu&5`o?UTv&DY^Ec#9P?TsqDN1a#Oz5I*rVqp4;ZQ{ft};A}2Bf4Bx?hdZVNBeZW@!Gs0)3M{G{2cZ-;!%z+^q7sl_6i5 zn=~fBO_jyl0qhQ_dM8v~51@CU=v$^YLU%21XiKS3!Q0luFBMpn=)DUORHoBftB`1Rc1^v zyGT6#;ak(xA}E^Ji!|2MH`j*jZ9Zl@Z`zUPBHM#nL%$5XOgzs)@u;gYctNS~B2;(@ zD!dF8UV#d)LWM7^6;W1W@H(mRMy|FPfm9H0q6v6Q8F?E<-hq*KVdOm+c^^%{vuFZ7 z$hF=R${fXq9C9C#!H+fnzV52{d(%?lwwxe7;k-Vjygmc?f8)8&S;%K|t;HB$P!?b6 zjiJlK;wvcewNm06DDf?n_zp^Z4<&wZDeJu3*U!56{H%-Ncj}Vs zcP_;8`w4m;8SLP<)sPT$HFn^2CjVh+%4ahLWTp_j{#cepx@u~PR!1_>$!~Wv~h;;E%5GM>qJRJN(hZ&(*>=s#@sj=a;Nmz$$vNRK1BwAHThn zfW8f|{f>U?#njf6u&-ZxF_lDD^s^t+UrcS|cf6SD@5hTNnSt2WufLeGa}&jW=ZmQl zzuo;P1>XVSzn$OxVrrltFQx`TsxnA3*q`#n)HhP4A%47=8cJ-3G26O+C=SDw{3DR( zNI$=rl5o_EDI&GKA1|gx0qAI0-vI?h$|)_D`>hvK8ucC7Ib#ULSgp7W^(VcU8ZE>7 zKaI0-Y-lGkG#<|VLpe^+BPXeYJdq4d^0(PRp6o{tZfAIRil6&!yFm6`A?8%S-a+2Y zFFVN7{EpN7D;I_ml{9ae`puSKc9eJbyE@9#{dz}v27%tg-)2X7rayH@c~1nuEO6Ni zTxNqy1-R_(Ptj4H<5wN!IeuqHd9GjUDDOi6_x0On8M|rAw-lvf9{Xm7KdIBapOSpO z{LZg;n)e6bN&v0`;2=^u&+vB{7S;Zgo#*M9?G=+6zt(%MB_<)ieJ-9m!v)M?AAeFW zdZ8+vVIYk_@;bO+5s=rjmKufzzjaog+g>A=kSGCb(qf?2@9Iv+D2dRLXdqR0I<7z_ z0J0e%7X#!HfLxjcvc+$|+&X}49jH~?(!=5)R8+0X%E7R52&^0mD~G|#GE_$~R7Z!~ z?KWk&oY@~i=8n{;9pG>4rPfiDeub7^i#gTPU#UPI4UoqG2VT`< z?A2UdQ_qK{n|)EPV1g~yw%n*ZynRpaJEZ=ErxDVU4d98PUc`g z%J1w3oT8LF70R6k?x+sqQ`+rTRvpG!9pqE#~9n(M`Ee?u^#OSz_y+j0QZ$u&-Y&2+dB%uw&L9(<= zT#(v-7b^d)g8wdp|5n3)7sG#R5c%z_$iIXg_-6yZlm)$v)Vdskg3WpUlxOIyrLMyzz0Hku z@$Hguh>9W=W$gf0?6h*7<617>Vp*SeRVZ&O(C+~By8!(jK)(;r9{_ZY1^Pq3b#%=Z z!uS#UKi^ z*9*F@{PqjFuOaU@C|2J>_U|C`_kQgK-49fI{phz|(ES7_cr7RV%ue`I>HorR`IQ9! zO)CVSrmoN1<32$CrTXlMeywr7iejXQ-0?;S~jUv$K2pXO8QrGF7 z^HiNK|D|KxDo?A^yAZ^#dG?k!o3!YbN8u@Hxa#%pO64B%yH0w&-V;E30cdXk?Squg zGto3_fxOgpdmk$%x6ZTc_PzwX9|Nxg(k^*Pb^A7XsE7Ik&$bY>7y_37Un$F^nH!L2 zO@wGLx67lT9Z2>EX};~7mt4P>QL4dODospPzYkFmhXUd-KpYN;BLHz^62$HERQ*1R zERD|7>i5P#q%jd%D7#gm`g&P!($N^vC1w}Z>|)X7hyS|n+<~Pn%X8N6?fZhq9J6fQ}=h^l9mcclIeKL_Wn1q-B@KJfL`h7B`+8IjK{s$EtM}jdVRRvd) zI_)qq#jT@N*YA>-T-WcK=c?W}a2o?+J%= zwj45x9r9n3VlQ^rY;r_}RyZc-rL6b&ri63atoP@t8fhPhvoFM%2XXd;IP)F#{{Ey+ zWuD_G6`gc)&0ipE{wjCPA9U3G)r7dF&6>Y9P0b%d0a^ee3qd3dA`uX&OH=bNvTFWC zuA0AIulXAYVq>0u9;QuOL^)imlk5H_rF2YwSD@GZ0#M_CngG;hq@=pP&^`}Sv$r@+ z?LXd%(j{8$zm&kYpriw9LvrnZfU2bq1fqi=YAZxO7zhtRp|H&znrH30aR5DxgLfGr zI9&7a(iHXoa!PfCma00r{y$QIJPIIJ0OU%5JQ^U6NdkGSRsSDHmX6P}Z)TJ$m#tX~ zwJe6}QVwipWsX;?Tc{$Hm9MI4%f$(->2g=Kf1<*A60n{Otfv6$sla*~u=cgEo}Oo2 z&G^TloxvVBlNg_c7y#bm+_nALl+&^JTU}z;<(ER`Z7h{9W0kiM(aTxtwIt#d zS{R?5r%z#BN#9=ukt?vwQ_aaaj@2@q?l@PJrt@T*FIR%vu@Fg^9Rqo6yE?mTNwB3{ zT%9^7uTepHEyP;~QLjT#UJo&EfLz;Ia^1*s{dtgYVg+v|g>FHxg2$EaV7--6-3A>m z|Mz`ZW^er*8{koLsJ_fvS)ckLGqW+&xXCS{V~g4IC8foINbT6-va+(`ap{buy8Q6= zv}NLs6lLO0cbQnPm5ICHz6~f7cf+msz>W9nW#T?66ZhL?;sH3h%yROB?Bsuzo*OxE z9-@$VSSxzBI*Q&S^!+A;%rHI*)6Sa@Lo!F>|Bt=z0F1KO+NMcaV3XZVHWgX1B*7$f z&isU? z{Y1Q+Y6}eMb!2ZYI_;Ay)u+nh@|MUu2-}4)UPpvuM>bbGzOm? zYTx0pmbxV8_jr1fOMHt;d>bPD;oR>q%MTBAyj1Wm75Cmy>vo+UN8#hL*sQiiS?*Uh z-p|?~Kk#UfA37W4M_PmY7@GJ54f0cH=rd^KbG<=+K@IXtt3iGR>sZgUj;~o`t4!2y zSTElak>6>We%Cvo_?{B}&|^UHqZ;P^1mS;%@V`L#Um^T&wt%9SUrOKGZw3^l_8U0e z@kBtz6Mg)Sc%rXgk0<*1>4I~APw_;5zjr(_z|YNRpdY6y{Va#ikK2{}EXNSPcRVrF zui^>$n~u@%*W!sBf|%>KE=bYu9S!*TCS<=WoCx~Cb4Y#{(8Gy5Ak7ETFpw4?rTuOf zy}ClbcQkRZX@W(5E1D=K=p_uj1yFPRu4tmvuMTGd(CVOcI4F();2KPnR^14{=XI=W z`uT(=0a#m8Z?WGUOsqqx%CuA(o#werg|Pw{M*`!zz*q^4RW6Lxe)C`^)il~~-QI5A z^{m~#7HRHmr&Dxt7~c>xUv^V(@=&v;Z1jG$k1lMD#FjS3Iw)5;E$zuk{6xDvwbvM{ zKuJb4k(OKA$FM5a@jDK7DjCN?#_^DG0%V*B87D!;>86b9`ORC`|1%=3&l;~GhBtu8 zLC#Tr+sRN$G6hPQ+M8}IlfzDa;kR8!o3PeX_4oB?)!RIliluKK-xxv%B3ol=o?bIc zVmHelVmsX?GiFY$ox5#)M4qo~jb-=@tWTZGGI=2cbRidp&vLVtd?wwqhU&;HdZgIr zs@hp?#>PI?f(qz96B=y$Fj-^XW`{c}Y(tG|V?%F)+DIAH#xSUXr)my@O8-B~JJ@9{hfvXn`dt@V*`wFPyiMkCyU85k*DpRg(yw1=Ws6yla@ft$ zn%x`&Z5#``InHG_$1A%z0V+NbiaV(%yE$3e%_$`Esj!>FU^k~JyEz?&o&mc##_zcM z=uBldX94NisQw(-%^|RxbN${C`+2O@^9jcVn(>_C&-xtTg_QUrzx_EtR-`%{aWSR2 z#Ba?{PL-p!Xj?}s-IW$q7kbF&M&v*(?HJZc4<&+P>my%Wbc-}EEwi^rrfxZ_qQcm*_gC3w0DJY9|9#awfEagE=cpZseeU(1wVM+{vL)kBVp{f_y`8z|L{ ze(M#69_G{Zpm$1ShJsOEHZ7TKTcgajPWXq9Qk%upM5q|!CMV_QEXU1$_bkUPe#b1w zt$u5k<2GpJc7&aGKwEc0J9qiDS&q9Y&cDZR&T`xf-ECp&?mpJtKZ2(FS}&EQeh3?2iqkAv_h z&4B{cbdA4i?C4Iqfy|iF|W#&aV zyq6Ttmx1#Y;CvN0Ujxq9;np64TYJMh$bXZOzD3o)t#QA?Z=Z*Z;NV=3}j9H*rX{F<*uN;XgjE}N5){i|J>nF~} z`l;4fKZ8y_M`Qg0y805j`AToBUsGfK#%iqJ!oqemE$lni-CrsF_pG@ei0&UXJNUrX z27jXOe}+0X?#(Mx_7-S`b7@-`XKr=(4&}*q}={FbW?tgbqa>Q9hgG^ezKg=AWG=V$>xj(=WxRqk^_uGa~Pu^7;}Iz z7Z?LM?2LYbGYaN-I-?Nd%%ke_b1Wm2fOKc{6dk$yZ?iKa%<>nI{Dq+Zzf{&Dm(>-M z*dht;j=ZFOrg>uXc>>u6S2?65ky^kBvCWt^>? zvQ^|*w{BQTM%rYQf!n&2x-utwm|tb((POsi99zsbDn}3VN9TBj`D1eI;o8_7D_k1~ zs>Xx52|3PiZDJ0>wMk%kJ+Qidj%T=Aqw3nhr>0A z#}?*qoP%&}Dv(Y?_0yqL$)v1tlN?u=KZ7+hlOSxWDRhGzSEMGlQupAxjm@~MSya|+ z=`_>K%*haH}ZNY0TEMPmA1#GV@ zU_O+!15~hMPZqF~vVfgQo$3WM}u?D(n z7*8gL2fCe5>SCyBNsczqU78~Yx?MTuKzCP+To#%mm)%&E|47<)XQSvQ1@EDmQ(KNc zLf(_U-wOt?x3d@1uLyPT!>EpI7BgaHm@eV@6ncm@+SEihVXNtA?q=Pqez?8FJcTOy z+DwhHcaG-}b05_f_l4T_gF5#|i#q^nJP?XXnTlGLqqfj2CwULb+G`(-hJT2v>`+v8 z7%Dp)l^ub~jzsg`6V3Z5?_T?8R>v_^{jr)lmOFawjP}aZ-^%)NjPQ6ucmfFekD)n{ zZD7wFhr>FF;GLXft+z-s)s{5&FPR%*BsIrFsd`*kj{d!oekqUM|Vi)l0!Pra!BXH&NJ4IRW`o= z2rU<~{ai!}x>&RDlWY#>68ip9C~ze2V9t0>jMd9S67~E9GF!!E-k#xd)mX0pe^-Ln ztI$}l2A|h}v2JVADuT~}8W7_;7Ug<^dP9zN$GDl|Mh0?8ju{TzM2TR4`pW4Tpf zy$x7z2i7})^-f^D3y$RyIF`G;9m_q8^G&bAC3eNZfWqdKm+Bc;qdP$c|b15%Vu2+!j0<;}k&tgy2){!(a)Hc}Yy&8(T zm$WkCx$Eu^PB`l~oN`7-cQ0u&OB`psn$;D(=HZH7ceEVA3vpppXKy;-_hqe*p&AL z82%Cre+7oW2E*Uv=$jwEC5pexF*iRJtFx0d`{CO9xVqf>_*EhO`qsxE3GYui zJzjP6bB_1k$6wHxe}x#oL5yCxEJp8K7NbwD_uj|8xoYpD{7nbhFIU_9xLU5n*gw~b zVoafp0l8%EQVhq=$AP&Zd5}!9y1w(#m&-T@1LqLn9Ey~*^U-fRL`#+VbG`RHUTT_n zPOi1@F_&Nm7>EdE}0+QxA zV`7xtWG~z2df&ocg!Pm{MYU1JMpT+>AMBJX{Zv3dBcY#lp`S|VrwaNx%-WTj%Y&Vq zUM_tYqu7u}lj6qYS~Gsmgku@j+PUTcVI1WdpX(YROvq)Eny4U80_61od3`{x0ptyG zd4M1bmw+ed+6M?z803aj;YOMrkIS_W5K4u`{m;01Fs_Z6$*IKTG^p->to;sa({OjWa;wcE$w$iJ_%E*LDxdJnV4>(pv+G9&IQ_7Z%9-YzmT6k60b5>)f)AL#9`*S_c_vbp# z_vdQo`{8NkU=%PH9%yrToO!wW`Tkrw-=Axp?}rOL#ya269_fE7{{K|*Htc`4rG`_h zdGbwi_1S{$==<%_u*!PNCl6Fz^_7umYf@feB-=eVYP`c2i?q_S09ds!v((9t>nm68 zrBuV*y)Qp8uNklQZ5xlJWAr`wnRI0&O;cT6YQ~ITNfMq(1l9}b@hifXXm3g^PBe8! zTQwglYo{j++LDHxV3QMROCx-oQTU&9b!3}Z%vWQ?ni&VLoKn4!$@D>0G+o6XY*=4y z%=aEW?4Y{h9nlbWLIc?uUGV}mj9p;*=bNTqm#ZdG>q#roTr1Ajv|==%*Kbr+HKD2) zs%l163sF@Zz5aIS^%GtL-4-^OMO1aGW-#@Ru78AF?fPBIFxt4hb}BCkQT|}w4(4{d zTyw!JMa38>CTuO3IZV$;TUqrbvrMjS$*eP1Uou;qtCr0CIwe%1u_V{NXtp%h3fa0q z^sXR&w_N9<+3vYmH0y?r_JB_I%=KI}JD(QK_R7Vg+1@1fK8SkKQ2f41@%y3B{d0NI ztSi^CXm&s@7R?R>(q*WAIZPr2lQ<~XdX~g4|G})sLkP*CnqBOj>smJJLkpqCVVvb~ z%5nsBhVPDasrD#Jc69FVyvBQsw_=aAEA}{>Vvorqha z#kt{dwh=fT5rW(XIJd? zHpSkMo8>v)8y#xBNmJ|1AnO*W^;VZ!Z&PZ$9U8a;yx!T9TJKV7y_>|n2Wq_*YQ0yf z^*$7OKh%1&Q>_muwLS=>525;pq1LOR)<<%^-s63g)$<2i42K5tj&id=oe$_u7C`@sPjFFF+YlBUR)LC-5t z_KV@ZnM)iNLsqk&L3cIyeJ^mwOCF2W5`z4|MD%X1O{XYxqYnRD> zLkPbG!g6V{e{h^-`mak2WbI)X~#*k@grIDGGWa*(5qIY@sq=_e^y!3nI_{G z*vqf5?B86L-7CFI#^mnl60RdR_ zKomA8z!v?BvSZ1o(Lof)WT=#x23| zZRp?kRl$jMXeLPMLjn7tneB2tUr5NK#QA|9R}8`dOlB7ZnC8L&2d_n-p%}uI1oRby z(twO!hXrgeB-lqw?q!1lxoog{z_DyFJfJTdL8%c2KS89womk(AN$| z1MC=p9SgAIkkaw!x4p*k0q+Hb`^<=HLcm%;m`DOlLJI)ebpx&ig!NRLSRa^bKz+&>W%T)GMlGBFc4Thb!`%LBq?^wM zFehM+H+CRFcMN11BJX5n(8m-z2W(@C1p$4Cyi33}M6L_iM-ue`t5=A^$QodDjREIC zqA7qOat!v_40~J{@EjsvL1T(|07K*iiP!>nN)pMpdX>?)qR=)BC?p=+5V>6qD3Uw4ac>rTEBUnNRmO{yYO;ues(~?tz zyHc&Y1@t#+9aCVtLmAyl8GAq(d%_s@0_A&y@_j)098kV*)_!b17JYvLaezktt^xZb zp&Gm$NGX>&25&5nw!X8Rk{yI(MZH(*a$o%#U;9LS`N~YKlZ3vVcv+w_V$JL0_pD{{ zkvh?^gzkmLr$ly=`ORs6@#}77B6C?yL}f3N`Q_hSLU(1wf^2}~3W6${Z=yfg+25Fp zH-`k=i#LY`9E&%H1+2xJ!(k9dU>J5J4CN>o#?b+7@#YvB{vI1J7jKS3$90|AaUIWw z^FRIdq`wom4V_3Pf0EXQmIw5enUm@JQ_v*Nmt$aSuH4z?voE4VI09#v zcU$YVE4wmss`r5CH06#?hn1ZH>pK(f=qy;>*|4j-OuIS<1ERrp7L0S5%JYb-^8?m$ ziJs^JhI6vzLocNC7xm;rFNP1jM1j5(pf3aH%K`cdfW8tw^kn$ZtFrpgs~Pk)1mapv z{}(!Zs5J?99cQ_ovfL1G&e7dylTZ#oZlaVoXB&XrVr9?=Ah+5FAh+2DAh){*Aa^(h zAa`m5kh{Ro-QepU*8t>RH2}E})ZPy&AMhT4+(iSB2h{-NArkRn3_xyyz8+EfdK85| zh5^W3&H>2dY5?*CkUoj(pMoZDf+nAK3_zY?WjssuKd0&MA@=}eYke|ol{H1r0P)oysN1+>|;*8@GxroG`X!8ZfiY}#AU?Ax%x zcU(63u9{7I59abdjNk)pHjNGMLv1$gBVyoV*xoC!y-$?weTu?9gYCT)aLlHCu59lM zAp8>5eg)fm3AXoj_Sv*=*ap5ODBo#j_)(9uY2Q=&9~=X+lLMZ!X+KippL(86`&muz z`~sSP#c1L;(9kQ$!u1a7vuS;TayZd9XnV~-U!-!+r45#IY5jtZxwO@S`dnK7ARTHC z_BfX|Fz7v(HYmvI@C8|t!9kW}NRTBN3Q7Dy@42*`pqfjQzv&=zgW6nLfG`GwmUp%- z&V_>1NTei=nY6qhsLq$)4c2GU!hl);sD*%9gp~H@3~cok2fgRfUNrmPlAtw@R!ZQ9 zG58i>4Fp~DXsZX+Hdi2ufYdcW@(3VYld00GTPx_jYPoihOnx0gP^PK4H0Yj1E2mTy zS}KiDHH$V_!Agcj#lndnOpqfP+Lp6imemZ!hC?a8ujCiN1F~+e{%7gX+*mx!E z1PD73!cKy)>p|G{A?$;uur)y*fYtr=!WkQ|mM0UdQ^4xqQSpXM+ZgsIaP=DzjEw<9 zI&rXXObxOPO;fZ^2d$fc))}C6CTQI>$j)6>AW7Yf&0LP-s7PZLOFo;boTFLpMnStv z7r6>$Z=cNo=5j%sQ$h29y~i9|=(1~p`Ic0~Rw&|=o^PDt!ac5*H^1?`U%tagicUY% zg;dsk_Fg6Rkl3?u-GOj$XoBImu%{9i7+X7=k{N7o6LbgL+XfxMc5ToKwzq>>Y!6R8 zALg&gOtuW_0dxa>-w4w^ z*AYNFwkH0A!sjM$?;TTarWtm#5cU*@n@PZqT3{*9nU=CB=p8<{GLdaWRC~}nd`>c) zhM*ZfcToCNPbbgK^m?MG+osT3DkHQdcUuf%S zrLAL7=&?Z#UzP_Qq4RM;gfGVf=?SR*MCfsE=<%eWJ#;>qm2nEyf2yXxBZGfe=zJPO zIGrGz5&TO-=QCZ#brw~7cJNPx&gXa=-nn+eJ1?k(&gTbv3Y{--nBav$Ep)yJn!Ok{ zc!|pfFAXAez6|DaIgH?npcOi^;awTDLg%Z9fvaJA=fL)^QMPw23cC)rcTvz0I$y7B z?*<^e5!K!V+dB)kcXKdn=zI&?z^w%3Hq8vL3icE_-%jc82--vEhM;HYd?zKoE7)V` ze7B0{?g7pBVr+09Xt*E3Jzxu+AEd#-LqXdEu+~OEciw)tM!uUeadI473{`ev{kVoBN z^Gk~6m*sasJ#2mjKwkyW*8uc&q_n>PtJU^KmZ13?v)6r73!2{|;BUj~fpmpCXnsev zgLi@FJrMdn2>t;0K13&PRrgWQYftFMZ0es-{hw;eeaj+*%zseKQpHaO&^yRWEBCfu-g~TDskQcJXQluv%AJT=DbOn&E5YiPv zx?)II;*hSCrIUS-94!oEe5+G+!!@x&Ay+s&k?+y@6NX|$xSBPnnh_!GdiFn8-kM&V ztwp7;ZR1QBsId+>D^r}6gR=^7HWHkz3(hJXoK-{`^QJEH@m1Kx> zEwS){!cs|BmC;9abpl9Tow=r6ArNTG&04?jT56sYa=1Ek_F}z|d-h`ekYo0uCS=WC zYyf+l9O4dh3hZ=4*yTncZT4d0kQ|^)4VkkS)8I2-H+|-Gw%h-i#ecvoHsSU?gBs{e z%}GoM=@TfM()XL80iW%hK=~s_IR69FC$mDH-TQ3iVCTSa=fa>jhl8C5L*4?W`h{t# zTZX)+Pqtzjw~U*b$cjVS!A%leb%dN@Ybu1P69crSL1QN5Id$>{MX;SAOr0zy z5tp!tEpg~-snS&!3f(ot;cI)yF?F(A2;uAQK-!J!_kb3gp~XEz_NkM-SQ&d${rhP8 zTO9hkrcU-{2>TI){X>80)X4!Z<2sP4T^9NiQzy&44eubk;T;^(rcMqC^)z*IsKW#g z3u#j)heNYRzy^d#Bfgyys1>g(j|p6xTzF8z9Avkm9D0_q@r?AvJGu zbI3k#a!W{?H@TG{-lm0krp(6e+&HcZxu#9-P#oVWzw_zSCU*hn-N1PdaNdiQ_B+3< z%I*t!&zcPGW4?bKvSv*lAlMJW-~sg3kZacDA=LyP2AoGg=cAzaF~EBqeY;iN6Cv{| z1PkSpY~)W-^-pVxeIVqXGeFJ>SZ^y> ze@Ib&8=-G}@&(aYvjW)?Yqv;ysHMWLlLiSx$?%K=hj+`YjOsHi&))M1OA%^WMcU zZ>W=4<2|;A_lf@xLe>qW_GBM2q*tt=-ba+9xhPKV_N&`nAU!Ic3M}ObLeMdE3R%JQl#82LW;*KrRFbK!6|w2ss4E%k!{{e3l|i zRTpSdNHDq-)ATnh{&YJx3c0=_s;?NLuA;I_@|@OCO4SU@(}F6^(HN_P(&38I2q;|x zl#T$UYl70X9F(q|X9iVPxyCvyV;NOmu5nuG;B*7J{rAs%y9%yoBvrI7r2PLav{GkL zo4Bi@TB`G`nNZga)niZ*(^CNuKl`$&M;iJvzr_p)t>8CMyj_IeddDisP zIOu779uGVwKz|dVuSt2@^wWBIa+J4zo;m$glgG~f7t`5q!210E5N=0keRYKbvjX)PA3+&M;qj|?#W7_I?MRgyNNLSXuHqWdp5>n^lE4(p6tv> z6Cg#)x0FSWPI>JDHLn_DYMy6bIZZW&=^%3xkURs8VJ67k6!i5q2PK>3sTGe|B;V{T zu51q4-CR}G=BR2Os@eioZHcP3Lc5c+(RFZMu525oep{-#R-=BFquGtY8yzdfv9TQ& zzdaQ{ACmpKqIO{BH_9^|)s9r^PT3sQ&LC`oB5W5BRtLiBL0A-oH8==s^mJ5BEK-ar zZ`K&w(ZN^+t$X}Y!&=D2#;Mo@WLmi*T6BgqC$xylY(<%Kdfwz_MQ~H-K1uJkE5AYG zZOiJJ+C4l|(&?ExG|!ZRVhnhuG!&MBf;x52w3s~863a6!MbqkUHmxpJ;Hs8*S60<- zMC7p&k#zld6Imsvwd((V-e1MF`56p8!E|K#(KzR4gv%LJ6XARGx~%kIJ*h;Ya6bariL=?pPT0Y`4hV`N-pum60Vz zv?Gn*X*q#^l_~1du?+q+AGa}%W1E%)I0E_Om5xr3-wn_M`4b`JNf7d62zd%pn)@Fd zK#f!L5XskSVSLcE;?qd%D2shMiG4<%HB@KC8fP-(V=TxqKt4(MKw32yvh80)FfP_?|8!;hYR2IbN^&VDX*tyePt7=7rr=!;cvk@4m4J5@ z;9c#4cTJu-x#r~bTE=-Dfw*47d5MX055{=|CAm>cqJi8SAa7D2ZwAO)0PUt3U)eY#c9Q$$RNYm}@qMV(1L9+p^6@-tW02K)j3{af$=#9#^IX)E+M2G}cKR@*z@ z0{D#sAbL77b=a)FOr>4ZX)eyFmk!zQ9`-yr^)Yle^ zw&OK+&Rc1{H)=iQDZjP9YAcVK*q-U}@e_$udV4ZrmMhuA_|VD9^X12mWMv6)wI;Qqk+W`Kkn8Rf?}_@HGm2jRs$1z}Hv@U*jBnjb~XV zP=ymUzD7FuDx@2Wy^YX9$@hK`a|WZINdPw0IM^WHYfFGUBDWc5nMGM<=R0qJo#T>jE~VT& zKijKa^B~+7O1Lc{+*S~7YY4Xugxl63Ty4JRt6keM(Cw-E`I>BV9kNx6j4SDscHpvi zq_TH{Xn&%doprWiDh4BGzJSW!1!cFuYORS-`5pvE(LBWE2NhKGC)aDu)f@3uz3OUt zr;dc+v#rPI%P}=Z9pO@O6MNixrJpGD(*XT6LO)H=PYfP6WP03Yc-*mnN(y5kvmGZ! z5@6&{mesT?18J3l(06c6B{ecLS6&+*Hnu=n?usDB~ukiWo+Z^qE0zZbi@@g?2 z<|-bcDjtPQf4;cKY;4J$bB|NWPoU(r%$;*Rn}YGARgk`G?x}p+uDPf4wOw=1ad~MI%^H9qQsOg1#=bpJ2^RZ{{C1~_zXz-PMYtP(pGOt(jtvz$E zk?gOt>@82iJl;^|@g@p;E1&nwJ)iH`Gxv5r_RPHlgzuu-_h2}W!*JfuHzzi1yc!>{ zdOsu}A88i!TE5qgIr+3nmR9&Nm-Gph^l85J6iSx#pXrvMMwXvb?k|vgNN;Xqt?-Wbu+;^x1i2wbmw*_tXeQRgVW{i5F`pbu=xAvD z+r0ZiFR#Y<(!81db%Ir>56*wz_alqEA}T+&CgIx z&slz9-F|Mh@?RKVH!Z^+rb~fWdVQjzlg_+C2Vdic~SZ%+ar?y^?APR?uvGv*?mICI4xha!4 z0)K88$_b#rV3?b-#G(gsDvmbHuP7OmKaeTuoSu7&ZvYh+%Trj2Nbb*;SXBu6jc@$-hSE zjo3OiCVr=C<~=&BkNKz3_tU}uqiO)GAG(x1fSl-x;Eipe*T#6FwF#GA;p%A-ncxjj zns$vWiFQ@`I@8i7nvxlL@~l0Xfd`nHrhOSAXBkhSs1#9oS9(*z5Y@DH$>O5?`nO2! z<5}G#j8c4KJ>y9b`Rs?hG@Wa$A33tV#@Hn6?pcGeoz~N zvyPJ0BiToAAkrhGg%jDW40l-RbMIv}5#dP6$VXIb^VZ_?IkB!8hLJS7-E$7fwpg9z ziOOON7pBYP4iKtJ+Z<$1=;MSQSAvbRJ|iUb=xMYu)*$s&-j+;fsAg$c-`dqh zy4f{sZtW@+D%cVix_R#FDw6xUb_+Z9b?qM3_jPp>+CAK8)wZrZ!`|Dv_JWVt8$#>@ zA@+q3`$35P!|rWe2ZYtOt^>mMZCwY3wQXI?2-|WvfME`C%SX!n1Nu&_gV+H|ksLd< z4px*OBEKurcWNC9+=l`8;lO@o7Pzh-r0b64&a>&c;^A$`7U@Dgv~`$8=)66$cqTU#Tv*n!j3&!mr#;RwImus zwMXkRh46A9yaEWX1j4I;@M;&rYr@(dt!t^W>%#i|B68Qt_2@!xQ1#r1dTv5JH=~|g zP|vOCLN7rVdYcugaf!Dx0e4V^cWTmI8}{C)a~Gw&JM6Jh=N_QDSE0KP=-sS18pjyjwR8aiM2OzJgDA}p@mCz9cHCm`J=u;M3w1ABhev3#Y$da zrbblltJkfyUglgZ`m?k=#J4b(p|gQECox4gF|`X`;Ey7qt&Jm&9Z3 zcm=6BCSrCGiW)C+(|bH@-=Fi6qUmMO^a^Nt6*RpDnqCJ@(@mP*z?go{s-?wvlda+{ z;{NThwXJ+rR`L$hvBDbJzDxDJ7uI%n*c4>Ek0$VeqU=LZ_7N!i7?gbi%05LCSb-++ zSr$k2ISc#+0r*lg>vtWaUAa(f*@^KL=lh!SeG|48leIM8y5#(hl7Anz_BNUZXZ!#W ze^es=1QCCRh`&I@Um@ae4iS45m=kg+)aYG6DEk!9?z#d?y6?i-_OA5fEUQtL{sqpx zD+3CgG7Y4Zg9>aiakDXe1uWCx0?0I^09V8puuT2}mMN!zWy&qE%M{RMqC$-z0}N5M zd74ZTh%VEH`c2M%uHoi$U16%L03xn}atn19)tW;Q)l!UF_7%0vl<8@PD&lZh=8lbK zBiW`M7{y&&n8M=yRlfG5oB*ShuMEAXm2f7s_F*w*o=OvZR~sb-p1!M8X>=Ggx;ivE z92$*4qiYnf@7mP#T_Xyti()hhjWwCU}63JObhRjh zUdviir}nN*(G8_Sc9C?+kVt5iuRgKG*dlDE`>+z3t}6M{5{HsBt<1a}r~N0{0}w^2eUNa zxn6_;&PI?BOi|weE>$66tj$a9` zONtRjopf*I6~>|h&w1}wk1nIl*=4kAT}Beh??9K4f>9VSg0$XcWT?yNw7QJNXj2Vl zn_9v~@*m}9DO*PuX=_)_AQJ_SN$A}u$?gT&4;XhBU`lik5Va?W+6zSO4WjlDKU*H{ zEeYDUz?^&@$TtVbCm8E$2P8y@zqD$Cv7aQhSH{?1{EW6d)f*F|ttN{H5YU!q80CS4 za+wFp=Yev$YSRY+)xkh}2-@_a5}m9zDzP30wOJJ&&J}`|BdEe7d!XegMa$8s=orv) zEC3t_T8_79Il-c30Pc1ZeZOL5qH!WvImymSy9x4S8!M*}$Wwb@eXfiIR>aLKS z%j_+Zqcq(aM}=-K?~9`(R~J~@YNoRyjBD8INh#66ZY2R`1W+y9v zlB>{Bim!Y%vbU|N--E7(a~u~`{V8THBBJUp$62yCbdV+6G!kCxVx z?J*zMBfg2rK2BC&ZQSY7D-E3PQhL1`dc6mFy%&1D4|=^HdNoYFK7fJKj9#lqDaM0r z77vlmAJ#hbRa5*UOu_91=6=OTsiwyYtfQ6L4a0cc%C2u-e4@a%dGW~tY+jTF8BZ0c z&5P!pJYV44$he{a8yR1K@?M0pUMg^HWHk69zXEJz ze1#-`6;1DPj0#^<*6=zCe4~IjGCo^iZDb_D-YmdI#sX-w?Y+zeoEqh2Jv@AS0N(t zXj4p$(DhsU8e(`KLX?e-MOOUeYfUVQMQknEeEyo3p1i-~XSb`3&%Isc7pif5iN^62 z8s^t%0^gtsd<$2()O3~K!BtLO6@nSxv&sBGoc##SR!z}AvFM*#F7jupM59lk-8uFxw47tVLgsw6Le@e5LZ@>aPzdKZ zu#nX?s1Wa&6uO+_Qqt1kLO91Eg;M6Bh3p)Eg>&>5sssNhFt?DMqr_r!j)6ir#~@IK zP<37*JI9~l9PES&)(<2BXL=lzcs!JLg4>zyNxC~xIn$F!?vvq64?%lAMOnqEDDX5m)1#cu^mOG+ z&j89ZQT179=?9^upY7e!&tYw!OEAvUTKY+DXBy#=V$XJdJ{Nca6?h@^`G;~|q#K2{ zmU1x_bqR`^)7xvkKoe=oEICU|o6NDd-FlDf4{uYq%D{SpYbjNgiKnb|YZA!RHuv(f zY0>tDYpCN_k8#e|Mi9D3egR4aQj%-FR;n} zPvfgr<2P{&y_uTTEn1VmxKN)}zm>kf4b84!ZyE;IJHvu#M4nkz9kulM(M)VHjd!9M z>pOLozQ`d{_}nj6atfZtve#l3BIm2PFHyUmd^C$>og0o?JEQE^^W#G2#qz9|YjTTM z*$GpmsjEHOmXN=8RYn@3a=r^=kVJb&XQsxu-Mb&ZLwW2wVf1&QG29Kmd=DDIy)g5m zO*6mG5r*8)`gwr(f6x(zJjB)CYK;*ergV>F9V0%9KIJim@Npn~0tlZ3!l!`nY4jYo zqUU(VyXSb8VLnIIKd+h5!;UfH4(dkozrs|E6%6AAg7G3)_-m_t$)$srsrFa0>flxA z;5DU#*P(+qpo2G|gSViAw;eio$6E*QvheRw_3vvsc-f(Y!|3*ne^f*IfU$o_*gpbw z|3I7{>)O_aC7%%RPYbOrQPMBVEohpC%AK3gY&h19j4?N(W$)dz-_7o=!Z#Mbjy2EY zdGrXXFBmJ_{%2V``p-Q&`Y)Uv{g+xt{}rtEYjpJAz?#2>^?s*!^xsoQ|AW=h{|FCw zg6RQ&V(b3rbNDmc>@TGHU$yr3iLLAWjlSYO^n9DQUHb+KhOHe7E%-m$g%&E0=x2>-+dKY>2jD3pW^ZFLCmGmoO>shUceO~_} zwweJ&Y!~O6b}_Jsd&ZOg(F_`cipVN_MN;d7q4j?_<{_-C->g1tD8cswen>s{>R8~; zDZ+I&N~-~AH3+SSpw&ERHNS{^vft2?g^Q@I2k`2veW|;EnJgqIMMYNolHm0IY$){; znwc8KoVA3qmKIq(u|3%^m)xsUj^Rbw`tArMUPDPd0urwYiPwU}YeV9791@omdG_7q z47h@-AF0W@xbWg9<@QigiXC>vVDzaW^v8AfENh;@9Mp1^*$dF?_d#l>8F~-WH z&#a6svdyfFE7D)S9bcqoR%Ca9qKpYe_6e1VMb?DMBoMY92wcC&IiXThgb9@m!1ZKs zJEh1qp>i(Yic*9Lm5oTqjakT+F;L!ArMzhs7Nffhi^A2!i35Upqz=SH-%ay zi}bWmk-23_2|bGyGn*jH(Nwxok>_fSyt`p8CEmQqes{xf&e6s^O11@(4d|VH)16wuM2~7V)@dI~dFMFabF)X^v}lD3arv9gECy%}(gQE;ReEona#X)0U~N1>8h- zA#<+Nn#jB&eFRlc-$!BY^>X$(DJpJDE{@TS(Y7%OEncHDP1^d?hFCnhIFal$D%Apw z&px*x($~vp9mMdZ!F%}9s60m#j3EXiX@-AT2;+!D{WqEFPhj{m!~x%EVG`+~3iz}NoZ>j3a|po6bv z-h3@*kq)Bj57zkFv&iELZ6TU*22HVv%{VEWLMf5+ggADm+D#<%lBh%ZN^;l&3j5G{&xVXs1)M zGmz{;&r<-l?fw)0q{AGyavsVvrDVcPGSN6QYnOADN0)Q9v&%V0>vGP8TFyh4b3W8{ z0n~G$-sN0GUCzZ;mvaex&aI};xs=uS@8a_^wz12}B(BhG>~veFa3y_z6-?$@bIXAmgP(CT7r62I`Q{*0B!W^5~l6^Xa>TiK8^f4m260$|>(`7tx#jvqU-) zTN;mcrZc?3(I>j7Z8FJ@Su%l~$)c%pS|4qys4=eg?rE-3P4-&Yz;&>V>(OLyfKA*8 ztv_UH{iY(vMb$Smqqh)aw-z}rs=kc@Txt1}+bQ84Sv}>Qa4UByjCTX$J-~P`Fy04@ z_rtAR3Agfqx2JrNaXv)VKdfo~c87OaPWMdzLzHVg!muAD*pGp=e-^~YT{?b(&_1b! ze-0xxo`RO2R$6`rT7DKm9+Ia|ON zq{=Tf+j+y*JA6goe+^Y{$J1}J3AV-B8sq~{I81A{8aZ2LZb(S;Th!(zXfmt_p86J9 z&28#6#y8&X`&-p$zJmh3hhly}qxlgE`3aQ2Y*PL+Q~noX{)IXGl{oqhlOqu1D@CJf zG`))H>9}HM@)Q_?iD62leB8Lo$ad00(aLmXWFiI=*^NczwrpkG${B{V3#&?N@G#Nn zQ=F|W^(}U{rGCYZwzOKY)t34f<2k!xZc77;u`Rq9+ro>rwlug{wxuD(W?LFs%!+-@ zRII<46#I{-FsGQzBbO8(D7KoIGzGQ|oTUs>l2EbrgqRo|)-}aiWAcKMD(kR7jgjZl zi#l$ZUyS3HVenl5z6-&35%?~aKhKJfl&pSYvRYECpS3I{M8k?5XDwU!K;`PPg#IlO zc3K^*9A1o;8bNhy0LF-7ZmDZhf|2o2bgFVK`YRIeACoXXCm1b!esXP@VI)cy$kr)V zhbPMjRe7;Bo4yG+icB>*GAfuNDT02Ga-;&dE&x^nU=;vXgP&2bxX(>)Mzh6bt8fe} zdMu$E$LLysqO4eVr{gKfgkoz3#&*C?U81X9+}$o>i8e9%urI_47u7~jjSFWKYsa-^ zK2=PT-JNWi)y6~@8{}9gDK^#v8|#CO8nCee*q979zBJjG!fgC4=r?3)HzM9P2DK1r zyp7talw=yHeMNxVA=w#ei+1r!k?mFjivM{?SU*z?EMvGJqdp!@OZfHF#ChT$`!9X< zroySA*Yh?^zR-X_*RR5g?11YInv(oVd_xy*P!qP}vu-HT-)fWhw?}bPkv!o=+bI%h zc?CtZl~$h`lkJOR?Fr$7s*UO1dfi0nbq4f06MEegdfg0qodvyqW9oHwF~>V=|55IY zIjo(zME&NV{*Py$$0AHEHb>K2P)S=BYmW}FevGY(*~@LMVe8Z~I~% zMa$Bqbn}bNt1PKVV+RJmBUQPR=AO4GwvV3sn-^OcJ9C}|lxLS>YoZ9>*SRFBr=-zh z?HV~{WJUvIYE&{cL8cgFYKBY;AyeETQ=-^hEkU713nN@a)wXI<)jOmLabV>%bEAz5 zXr}^_nyd9n+~JZpMfnWmliPxw4aZ1B?2Hn-6Jjrh*h?VxQi$E<5PR2R^JI^`Y-2YD zzdM2G)}&84q?dO;uEG{?5e`Ba5vkHCM8nqjY}M z!G)u#)MHR;8=TXKhE`GN2)(ls)Thia802IT?QX2kY)+`01VhVp)t+Sudv%gQtVRzr5Bnn6RTQ zD?gI}oYj+0IUDwVj-vHk(0U$dJs-4Q09r4Ey&nyGzbLCuxtLkFgg{)XS^k;D?zwt- zRPZuNd3mw@sNm7Xj#-o|DA|?8*2JrR$Gl@j6Yd?43YN8%X)hBBesPz4wxrbI+0!;# z*UdNou{i{uMX-}o6KOWCavHc9DPHXnDPH4@6tC4H#p|G~>k+x!043fCrQM`QiZ@fF zc#9P&-ins;v)NK^W2OFkxxJlj?+!ARJ2l(8qS(4ljsmv3D9PQi`gRqCGrbmjc`|hXGm0q%4Z%%KIh~7$zjvi(E zxXTfaJ*E&n4n$7?(UU;*6qNon)M{aQhSmD}RX@x0Jx7S2NAv(Z58I-L6_n%!2=%0B zwA;&mTW&N{x4z-BxU{`9r)Y&QhNkb!WsjBCcE|d7qoq8;*br+>%BNJKkrDJ%%Ltx{ z5?vZ^wVkd{Uh`uva%xJuJHSUT^XX@}_`+V^TTfWAra^ zYIp#p99UvagJ$z(#-I{U{rXC5`W;-N>vu?r(r=EbU$aPKXo+3B{t`>OIVH?nZV78Q zP~y~Xumsu-m9R4MO0ZM6B#U;#CD3jGNnOZNw~$~$lA;o5w-^PMl(2Rs7MpfUOQ79h zK)E`q9$v!Qm9)wlBPFC=A2ta??lo9TBM8NsnrfJS7S9K z@=%Lan>^Q|Wpf^FsW$WQ372X!*8*c?iDLj_MoR0JxFe;?5=W#|RboX-)$l~4N;py) z4KFbUZGUWu7AcJ@k&)8)5;IboP{JdbusM>M$iCtKu5KoAt6q;xb$!hZmY3*pLJfVt z0ZjQ|?ETU1)xbQS{GaxQYn&$Vg8u$nXFPiiSS%hrl@}hRpkfZ4& zkJg%!asrIz*7+Lcc(kJ<)?RH)F7X`UPEmcyhOm;2U_Be7$CwJMnFhNUVcNxXwu^t7 zpqsF^W{@^!qU(h8H6@Of_f09)X3*KKJx>ORac*6-jvcc8trTfWnfSIUT1DTMX>a^l zL**%Y0UilNEtAbcBd$WrE6O5?rYU9B)zxJiYL5hJhP=R-mDP>R_HZL}oNi>U=0-M$ zA8VwI zj8*UEW%=@2dzu=M!*(@Z<`U{;3H3f6&(|0`dAo?6m5W#a3)lsgQ3n@M4~vLG=c7!W zHB_(Vu2+j;8HlW1Y&_MrJP++ z;BJTok|mB;?sr$QKsQkCfvWdJEU*xTmwfQM@a zcmz~?Bn}>Js_6zYCKA{ zjtFEgV{Ff5jCDTKL!)AyZmy~_QpUfORs5k0V^xN+jtm%ImkAVJ-;Cw!b1KZU4!<)_ z=W^_0buM9nadFl`&?O#&pi7;Dpv$yD(B)`IS6~oyC5-$knC{j3Am|zz1YK(lg04e{ zIL_=4uV>T#pB?=h?C1ve8aI*)xJh$27pj3?qp+FIOrkYiEzK$I%NWu2bV3F}KI7&R zav--*?pw7f&MNuOxXo##wOVfDc6ir2ly|)ohIbbX@^1Lhdtiw7!qldlrgk5JbRuj{ zCWYx|Vm{-3#`gf>dl2}}=*_`gvR!nb+P-JmyS7QYGhczEsUd4pt6Y3aT_(C!Uu!Jd z#LM|j5g}NDE-G(IcFNtjo$XCABi)!ZV(E%%TAdT$#AxdVHVTTaSCl4-_F22DwaY5& zos0bS);wARo^s+FWil~?wh|h=l_1%ikynPcnHQ-Wu~etLUXd$=aC{JQVJwr5j9eTu zx<=BB9KHOSN%|Jb*9*-1-Oby)aTh7S{~;q?ov-Q$uBK>@i9+ZbbUl%DXGcfU$VAdH zF-8|%bxpmU=*jeF75?0?zS?-mWjX_uT8)QcIFFD*PoC3T8p)&b!^)_%o5$p@r$%XU z6(;orOz27J%X*KY#oZaE89gNna#~Sqv?12&GoEG>dWKBsS*?LQK;xZx0@-Sm)OZfC zo>%s~0+qi2dwvo2{1U*tTw;G#{S|hca>v9Nc{+uvd`+wJ8C&r6I(`4f|E&7oW7Ti6 zRXj#KD&+hfFP`&XX_cb4p-F^(a{kMSs zgjM%C$4D|(_>|=M3~~hJwk(%%8=u1|e4$kQB~<(sRQxqm{0&t6Edqtt5h#3Dl5Jzw z_e|#x1mj1|O?;|H3W!$!s#a$F#3+6y6u)TE>R(pluev5$KI}{W`8TS+SE;oVl-s}2 zyOb5sr&Qe-Rf-#Ws2Zoq_u9!CkYQ7u z=qF;vWWpXa#i<1F}N6iO-!~;>)GLV=7iOYYV z#Ic?v9>gRbOjr)lNZh+;5)Y*ehw0!CSKyD(NIcRc@hFILv`*qNCW*&Fvg0fgkC%BP zAn^nni6<%&Pa+&A>o`tPI8FtLr=jN4LE;&x>P(P$C`df(_emV*N#fZ|;yHxnT#dw& zdM5Ea%5c68{sIO5LXE_WOcF1KD3|CYUTTtf86>;hBJm2DcLYeh(njJ{io~l4$2B^R zYZZ>`K;reN`38`9BdWRyB%TKnZ~lD}$9s}^3zK*&VYy8s@#>yQyqz-Kp@Y9ufxk;5 z@otmEdmzfaI*Iq0B;F6n9P4I*|7ikoUpj2dMf(u=o+``WP&(0E?geK8q7Q zS^Sh){EV=CuCe$|&n$jH8NSrPf2F{Gt+Dux$>O&VfEdC@}{6w+% zvyH`H6pOzSkl%D5y@mlu?_tbhpJ7~e-(k#RzhPY0YQvbtFTi5|VZ`G4o-BIYQsBwx zfMLYwz+n>CpkWrHzj`wolfz{hT8V+RZhW| zszb$pX@V(QJ5-H*c~tDDs&j_PLATI-!jNw`vlwY3mof+BmjlzWjFc#C1c%uMz0F3l zT^?BH`ySFhBP7008hKQ1zD!#iGza4H$d4pSL|+nZ@7fS=#jIZLOn>BAH@PMx87&ipAf{ zYW*Ft4(m#9^|))x`HAzF%GbKD0I3zOYk_ zKSjo-m@!;_)+g3(M5yMbs9Z#gwsjb506%G}j%|B{lvl(TLejM0k?)&XlM?#k(N>jg zEtzb!+M&QFpRN(0*OuwxTg|I2jmb%#Iw49@&T7^1pYdpWQ>*xO9nzu{AT2V+Mg6UU z45N(XXo@v-E;P!i#$0*li?o}r)>t|oi)D-o@%i%FVad)+M`tEm`6Gu>YZTBLGse2a zNLrXnduLnSQW+i@m8{g9rp~sGIx}iY8&yoNu$e@Aa}tTGIkA69)M%G=iE?AnHe(c} z&6jFxPPCHp>%`Dsh$4)BG?}9Ku4?Vk-bI8_`Bw52r~sC$%Lt{f!{B~8CoXO?D+%?OWhNSWBujBK-l{ERV+ zG&E>otXv@V`l7;hE-pE2eU!RfeY+Qt_0_fk8ZjyAKU^t{wo{L(SkS^RB9?jzA; zY)#+FMR?5)wjnzxVLu>x6Y^7aa<$s@0A@g$zY5!OtAc{4wWN(&a@pI-BE!^v67ATs zE)Yt6HW}M*9to+aW z@;@KR|NJ8V(@Q1~%Kzj`1nb7f#q(MUWQqAL!v}~Tp_aD>iXR0n>juP+!j?NFrlOW* zVezB5Aq~T{0Z`*GH2`YDpd=;-CAEXB?!KASzmRfC zGZUJLQ*8;VVdMg%MH-~MMkq?uE-)6!4^9!kM&p$WjMiZ^ht}EIAnzLZ-@pH+f6}8? zjj0}8J%)!&)zaq}u^9VW;rhj}q|=D0kN;F1qs7086D z_Zl;1(%4CpCQKSVVPdb*W5s9Vdqqb79RzerzZHq}YD+Z6qp{Yk>7q?-iT2+SQv5T2 z{!9Mt)yFwkE&r4~i!ar?V((O+?o{9M+CkDu$tWtF>eroGt$hBPFdfrCc+-^JIHcV- znojkfN0+X~mPX~vopK{-YQQ`?lj@b5JF(Qjd9=JCdMUZalo~XrxA|a)l_T1bNcrZ` zMM0tyPc%~5gXi($hMqDtWFD=#nw!_HZ-$DJ3-J{l4bv8o)3Mg(lz$%8yeQVSL_{Rk z%TKACdGm+6A>nH}z#+GfrE=$W)&^|ezDWdFsX%usD58+4AqF36`5+Zqkjks|tF;Dp z@2Pwd3N*=Zh=PMuSPT$tD;?D7rV2ziJwU2R`1Vv`cdDp7-oJKD8@MXTaFx)T`vWi(>v$J-fI<=QtYe8yl z*K$mZUik8*))5w7)}1OB7A{6U;JiYNVEgkU#gN8 zEwhYSEk7y-uc@m2_fA!Jr$#l@4#-3oO1-5<*A4)v)RZ3BYQ1OZ%gQ$L+-67{_)@b3 z)Y;vsITGpt=IXI*D^=1~MUc5rzSYpgN9Xy#&FJd&D*2thwxn#nO^fAIuuYN0F(WOH zZY7)feJT?X-y0#Xp=uys#>X()M+yiP42dv?K0IZ6So*vOBfaKTgQm5OR>I7%0Wuw!AUj5l^%)trl=0 zXsn%rrKLhDU#eEfx?Oi_dns#P7FkpCMcrGX?jd^q)DE)x9j!e8YWbf&kkbpPotDu` zKhJBWcIF-Sdhyyu0JR4oMPi7irZ4+1hm7klpz*a(UuqYp!>cm|uXpM<*47ahzB27g zMTN)>-Kj=t@AD=8CeW9PmDlzov6|xx^ripQ!k9+w$oO`$hIo92TbNWrG^UpB)FM%M zt%$?o4RQ`~bnQS@eX5mL_h-x>$FE{NLjp6J=zcqrAGR!7~x?Whl7fczPI;X*-Oge@-AOkGkO}zs@T}~(TSZgXe0H3C z*dAU!Y_M|IdzK4x*s|BES3qhnVJ>@jr}mK={wpdFa_%k+N&4A+yHoqAKHjGI)c!IR z*dUjBfaX%={(VXv-)VV#XWIBCbLoDQk7A_`?9pw;cZt{44(#aSs#DA6iGHN3rY+gj zDTWlw`7D?yH+2v*FIYd=wFjH7r*8G74iVxU+MPN~`q2F);KP*Tg2Pw!5hp)j39nBuL3<8`_X z^1r)}+jvbqeQsbqWF1DV#4mg~DFh)swnFSn!42sf(l@drBzk zJx8cr4tOr^PF>Q&fag*#-*JvabD8IW=W>DIitf~v%8OjgUWCUtSJ3e7-(@qYtAs>X zcc-qAB>fu&fUaflaBX+$Iw^)6>Z2`49bcbS$2SP2$*zRbrfw8W+|-@AS?Ts#y@%LF zp7dSy4J&nvsPxwE)NK;?UsQ+I8gB1S-63m|vx{1rmMqTiY7pKn?54FY0KYAMCwtY z$;Y}=k4qi=y;Tct9(0GmTJZaXFpnp@Q%^}~>q+bXlS-4sKV4qiPtFs@2hr3;r;$iK zGk;xqOa31(D)lT6?#c_4uHu0xxj&$JEdpR>;4ScAk1u zNc>iJ>TNURU-^deAUOrsWEt(r^QGPqti0QudQVYm&d1XCsrRMaACx;3R69U!U`oW& z3sN5nPGle{0|F(XRL9nb>}EH)L5mh$C?yFE!KEo)piqjFmI@@BWRu;n$!2FaK-#7*Pj?BGtWfSzhzTemPzV88hXU_Q_nKO1~Ci%4!oF6_XzX5FD%IRc%g1~;awlqM~ z#^m=radZKfih-$T@&}w(DSah>EX@I$`01zUkNSG*&jp_7%1j}Rl&Na)69QZP_S>$3#ceFMc8&J?=z$x_Wp@bD`l_Kn~)>2qZm{ z^#Mbi5&@I(aq!~{+7%W?go+|(03^a@wIvW5TA%a<%38i8Ju?xQxTP-wIo1 zMX`VoEJWgqG|)RaKu_goTsNx0h{eQi39>6?SvCo2yRvph2D|8X#kLB1TH1=9cD3vZ zb;NFjd3Pkaho+*P9V&vUzeiiy<%2HhL|-_#jHw>Sv@kd7gZ#E1o2ig-WDoI9OagQYp`0> zv*E@v7`U7bT1D=P4y|4Ish3R$cz^9dO9t|%19eYtCd}j5VjXPtk*ffYt^s;+&2Ta-FqU?J&=nad-xgIe#2EC!wOhqUsI3CHKz+}ta%?Q`) zyXv;c1K|ifhumu;3$`~qui)F3e^)gkrX#0 z>02~MxvnKgxs__&hP7_@c9hH8+OEq%cew*A+{qQL_K0OT+**|ovQyOe)>J0DOG{zq z2+Pj6ZAq#P(YvAQll(ijO-zfZqPM38;+`Vi!#dEKPSfneu%(3Jcm@C zXJ9SWFa=W0@CB^;B3FGxR-MK-)S*7(u{u6CuQqyduOAj@tUYYl3#?4U<1(bt;NRTz zG1OGaW3q!OM^JSLJ>NS7r;QO98;2SabT4i=Zm}_Bu&j(X;{V3zYpnLo$x&MT1 zs}WjD%QcdrI}bwDEHcn{X*Hm+GHPE9fSNSWb7Y~zKh$lZXk8i)8ukT)61(CszWtp+ zaTAo{;3PQ2w*l)St7w~rn#{@qHTkkgP3u%uV*AsIIDRCMoz-H*31oS<*gv_&2D36m zoE$=#i%g6xtKkA$*V4}>F__3Bp6!rl`z&qgXOqyk)K@Ci*8#b7WG=4kb_3kr*3_a9msE)WsaQywdh3#=#9+!Xh!d98r@7qWw}Uc{Z}!x{Bu6>%wrAwpTWJ39cG4P<5?^GgvjprZ#Bgo{EIMWM<<>)i$D z70l-jpbR`6;ZEo%w7wTpKBD$MIsL4^^B`%AvOX1zC<=`%3XLi>M!CtDFQU`0q=7Q} zSeAf`VqgGmk;qh3D>b@s-5y8Br_t4Gl>9XM47{foa@J+h64Zo6b!ufAGE`lkMmg0} zR+(t5Pa7k&pHs1_NLi%18Zyr&hGs(s53rYJOaJciAZx2!(8|Jc3~$Yl_@O`AE&k=^|VaG$L$H~bYwC^6MwQpe03f8Of0zr z!=dZI6<&BnjQjLiSZp>I8_!Q*Qp0tZ?#7?BIjlnJEl4|FnCgy9Zon?z33-J3w*3=@^R=l6Nuo?#JmaWT{ zx*><-UX!Io8Nx!PQo&*l3zIe)kyt{SC`CzkW=S`mu9Rwl)lPOn>PuU0C%a~7Ckwcp z?3SsW>`o%=flQWZ#@r>#oh5}j7t5(i8CEIJva+O2pn% zefnH)pFXRnI%)RY)qJJXPR(OBomkJ=G)mK;X46R&M(}L9jvYIt&8E{ln+86%w>KMI zlj#-Q##d&U%V!S!1%+Z2HQLq4xJhemN%zb;3(p^lJ*moGSY>ZkJbh!u@=8WCme_|& zY@NY0u7)J`^)}IdEt#l~!$eN19;VuVLrismGSz`7+(B%rec4n8Yor@Qz+Jw{trU{hifJ~FoVeqaRgO46001go6NAA>}V`;43`MCY%;Re zvEJ4?t|e>r@U~V4Lmj^%hB`qR>O>UjBsSEsY^akpL!H8gI^JohQ(cBSnhkXt8LF$x zP;8^qN#SQ8?=v+UotUv%okdm7#wzEu(5%kI66bM=ei>|Jbt~e0Zwp<}l7+fCEM$`N zu+N1XVxNnYeJ)0EE@Ate&-S@gv(II0p9`J#x!h%+bJ;#ukbSnW>|+Wbt#c)*`YPmn zwPu}*Gq#{>sLHii<+>JH(Dhj2hAb=TEkma+ZuBVOQ0WwPmWfqf;hdplI5PRIB z>~Sj!a2wm>Mz+W8nmz7dd)%zq10ae!UG})1?QvI@nbd9~7k86R??Hz5YG$}KVF6U#QBjSmn1C+QIKw;twv-%c*_aluZ2TZG*pBvO#BM1D%wICH~$J zOSJK^CEEHxj4U5n;!n1O&u3Y}?;}h6?X*O;&uNL@*%ARCTB02fM-+Gw^wAR{$TQbx z*`uv5Q)@7&N*-2e=ksn2u$IyuOLXvgEwFaVFy2l+`vPlcV!8#A?4sdp@3XI* zFvzY{z8jYB?#tX{dtiy4z6`-ro1=>@eV#7U%eOAU(<0>IFui>n;4poZ!}LWF`mw_x zN;t@?IZTKh2Kd+1EHS~CA(Yxyp~OUQYfSR3 zODNSzdDvs}hS+0@vd2^uV;b9IBHLqo%^uU)9+RCdV}{Ef+p#@n>h`d}iycV0vykU( z%^p+T_6X3Wr}b5a*paHu!D>5c!IHk)?J^fj&EryAI_;vb{)zeCW?9gZSvo1RXp}sx zvT#GJvPfBFF$%GStumjjQmR>HXST{hr&V@wS!FI;Whq$&hDjQBu`6kJH)OfHW|YNl zqo~cPJ+SaHpM7(xMy<1lt<1mWShCEQA@i@?*~y78pzMvAe--f8AZGqGm`6u_D)X-j zDMx(Pf#(_4#rUF{ObhJwoWB~M_u{TeKWZsSCl@0n)gsRoY!~KHWj^K$0>`mPou)?( z1Ik?Qk~sk-`lHMZ@Yg()Ii)ZqO_>D}Px-8yDW<9G`bC=1#2pehW{}vVzS3t-ku74Y zNZ!@RuZiVl4noPR_8|AfQhPC~GDqqL>?f)84ZI5@Qw|4iTTjFXvJ0%V1l+XsO6-6S zbd`*~aKU%i!Y>cHt@rW!O8mVPM7Yq;8#8yV??JS)c zB>AaCT_lA6%C}>qP0al2L?XY?$XG0Mf(X^Lnc3W`-P^aZTeZzT_f~DA@{@hYPyRLU zW;d_cms;O`*sk{1Ldl-0>8bE~02Vp0g=lk-E7}|kB?e-&IRyUN5u?qa%Fc(H(Pj-2 zU+c4StLHdVy~SY^6Ao}hox?Lk9h1uuK67)(P4q~T|0v{tG)Euiw8p1z>K}tej%A3) zOKS5H>4@|ELOP-CY`1Vw1TtzVPoERwjTm1bDtm$Ys)&d;nfFA?>MB(}6p=1N_s{9q zF>+o!W@>8s!A-{FGU#Wm($Dce$_gl2Pm#n4q`MPQF(NoQYqhPRVgC>rBv4^Y(MB0$224k|ou{6ZqySQFT=*oC(Dn zOUW(p;MAp#p5oRFnmkQu@;2@%+B>Bdx0C+vK;_)&vkrFHibr~w?{3A%@QJ>eb z+s9gw`Ej59*zFU9>q#W}lqTvU4p9@3srH|BGx0Qmdj`Qh%kusgfSBr6hlHO)M9(v# z_u&v2Tv$`tC}N4mRH!;!nNA3Go(WE>F2K8LLj@xXL#sr%A!SC9>PWgWs_w;Nn->|Y z=qZCCHIeiXN&>en)Tz>DR{)pASUy8{ZxfCDv;iMu>Eh5X5%a}^D!y$#9Tn!uHF})5 z%6(rB=qD1cD)DIbFJx%-XQ@{IBDea|&7~so68Xr>XpvXgBAbn!)WLH;^VIFD$n-Uz zmCK111I@gip&dTQ?eGn1hw#3KtRmhdDc(YYZ)?r)RiFL5Z8jeQ4vBZD%DY(QJq?4( zkblmK81G}D54aHQYTF$O5P#ST;*T<{mVQh)K0y|rYS7N{>HIa_ASZt9g_TBQ|*^Nk1HkJEmr(M1b##UKl!vP zB|V$>bIy_e&sgynu6P-*sZhtXI8hhb9{yH9XE?O+DvW8VITb)BQxwWDu62!VO`5zh z>l))a3lw@*qtyIN179=VPt;^6w0&Yan|u*xw7!TlLSMvja<-j&a(wg}o~t57Ayv~B zuFc8KuNytN`ORZ;bDoO#zmo_5>nZgB?$2%2 zF+>ld*b^yk$spIYwq4L(NTavErEyW8Rs`MMx98mqT!H9*2L60aSS) zR^CeUGIvAx+u3Ok!b)3nrGA?|6t8=fbOmY0ckdY1T6EsfK-h9eIoQ9k9c8}X-BI4C zqEP{P&A--Z%{roxn!*tD>TR@kG|2B*Y%IbeL;aZ-8;hN7SquX^^ufi(;qccSTx`7G zJPhqui;W|Z_$a@XNR#rFy`wY z+UgaI7+w_Gmdfy*H)hdT%3jtMCEXA_W}mprM)!$JJ^I8)R7lvB zeDGiE|F^9#cB3}DJGRO_w3c6L>t2@O_vPGb&(tn$w5~#H@xnNK8Qxr!6JdOBFCB#o zqz%3R4yIr6gd&LrD#H!oida0BhS(^hA(bo&#bYZXp{l0(a9ylYyIKPi2GqMXj&7mHg)~QJ?^ILaWQ?eJ*Ik1Ic_(85=_`x7zFG}`;zXos^{-&AiWe&sFAn~;f za;ppjWyiJR;xHNDgz%rV?#PRkVkPA8OSAd@pSA3b?JhwX+qi%6Y~q|RB#VY^`$_FSxdoUUsxhACQdTv6;AQ{P$|%i2=07z^Kfpam zzjC7o=~sCS(%(}-;cD`@e{KCA9+F=}?ekh}ao1_B`f_a4Y?Ax-u$mr~dDHN8fu#hTg~I zc_%sAy0Ey5baOXiyNCN-=6kEH-@O-$+{f@Q@OWgydEH>xb#XZGErHQ(Njb7F4<&@5 z|4>Ygpq$>ik)vMQLpW9@^DuM!Wtdvq!;@mpaYeCReb{;5pFw>;D)l|!SC4Bvh%!Ia za)F>+r2#JYNTiHdx)`P~G$X^*dDeBPjR8pO{p}MEpe6NxDf(ms(p?IBi{06dnQ#0I)e%FCI zKfPmah_|TH+gRxxzx4_-e6?%+T`cpSU%NuVqm797y_Nq#OUiGj#9%5OHu!KuZ19n? z!N-XG6Sl$oY=ciV8+^t#_|R#C&s{cnmu>Kc-@H>q2QN+WC2935weRM)ulR);@~_yke$zt8_x9mo7=A9zON(%QsyZR+B0~HwOUx^6U!6!u zFGxqqWVlR;KakL$ez-wh{!kyTi=@O~_~YO3W2aP8T}2{ZrfQ``8`&i;6K&=HmUa#| zrW1C0S@_ilU%NW0QUN~}$c6&BmHgIEN(AuNp!{EOs?v6qjY7yizAPTAkBFRX0KSDO zi_~E%6|Rw3aM`!+40EANPJFP z?oI-!M5CyT$c991!4FvG^eFX1^C|Vuo;P#8=qT$p;_WBde5q<@WUz(Kpi8#*kPEOt z-LBc#e1^&fIZKijlFte`R}eLkbZDS-3b;poAPk7$bsOm8q-H83(h<95qc3zvmOZj9 zUjPu)oh-sXN;}xqA$n2)FnL2lq@{Cgi8{`SRh3C66lu{*{(DZ_()PNAQ=&KOyAK$z zy)qt|wJ(C`2VXkH>M3!hjD$#u{#Y#pA9GTXbXv})QeprAw#-&767}hb>{)h(hLtkJ zK>0l(wnDmtplsBn_#bm_$1mWojp?D`kaLq^wcI zMLvM&9ZjbjN`?(fClZo#ERwD+PKcUe(R5vWm?%KkOslD$C?pOY8X^s4ruI`}2omp* zN{d)SS!JS*j*4!BzqU^&Dm9EnKrvf>7foU)>MkCxuW6KqkQJ*Uq8NV5iqwl?$hrz1 ze@}<&8pLoG0F6|J?kPq99N9vos41yPG=Uh21&wGpu8NImij37WtR*dqo6)_g&sESlH)`)S)u~Ve3A_6Yc6py5$ zkw{vMm%pzq?VD&!H#DX*(ccyb1pr!QT9lwhQqo`Q8|%teLjxDvk*1rT z#1xEXk=3y@xPQ7a#af(7S`1Vs>Z@ZlVwz=h>D?=1saQH8#P-CfGM)&pD2vF!X}m04 zRV5;*@#*s8n$o_qMx8AXk{gxL0~Rw-X}(DPN--0Ok>CxfNMn_hvMw%mV0B|EdRa`i z6j2|Jr^GA@ji9|$V?{camV%O2W+Tl!3StmPSBM=6KC}nTk>?OchsDHBXza#x_0aKR zF8tkKQqYR#5v5qYt;&3KU#v1z_Q7HS{JUdWRV)P~#WGgnLaduBBTa)u5nC-5K{04@ z;R@LiR;8n2F{nMKw1eGA#S(;6x@4w=R0@9&mJuegGyH4NFxd|Y9NotsF zI8dBkoff+wC>fU0k=1EvxY7b?u@udeTN9DpO&E;2D@llUu++U9HAwI&GotJc1p9MD zS+#0aaRZ(>!H7~7SvgD=P7M=#K&d`$WHLdyS`fBujBXTL1xs2KhU;lW6@E!;nu)tvMdl;%RK zfiZ0=>2FSE7nnE56{D9V18eXN6Z{7~+LEf2kwykdIvd>}604ikGC(po4;MaGMP>Ig zG@TeqG;-G99mE#Z;#4}(Am={G+%=f!S5+%VL}a zZw(&TuE$|e4XqGMaB>(30X&s#H_v=3u~?rsCflz;5xEV>o;=xM9^SA7!!8cF$&T~z zYAqMlPV;c(sbJ085Z62=W zYH}dv?rZRlq{jMK8gP$H_E>|p5z0^rWhg@Fxu&tSvn@!=@=NxY-9iu?Ne0Yhs5v>HAR3VW4VDg8 zelt|_8-#~`GgSG_z^Lr+9bU6lG*|xDDD6SsG1T-9u9X}V&6EFaSK5=Efa(p^%(b=b zM%qU^lp6d6G&eZfQBI6yjiGGo{Aj1rPOhp2(axoP=vTJ$P={^{qg#|_6VxHmE^=6a zg&Es6(XOCitgZ}P6zvB6;E3eVXm|PF9&)f`ny)z86GoOc2E!UlbENX(axht+9KI|$ z!Zpi{;4+<&94VXgsOIEo*_>sE&88b8M^yo7V`fk|@OvgG!qIXKS(x17E#IRi%u$(hTNJ46e@rP)+#*0SVm*sP*icyh-% zK1q^;S#nM^D=M|KQ-M=193>gaxl%dvnv?SjqGPa8FTln--7@up=-B9}=(uP}bV6x1 zR!T06O5lqMq7v@ns6@FWDzTMDC9IvJ63i}*QHdeSoR>NoFOg$QBe|l-U^E_O(agyLErIB1F(JyaKmI3%2?jM4Cuj9rZl$tvyH!eqpHvoKi= zo>c=r76q4!fy>o`qpeVDu*vwcWS#kPVY1$OwlJA!PBwr)<|uzmMtA+!RsIRCB4krf zH7C=u?UuHYZnKCFivv zbHJ&dT29o*n{a!I?*K_vCK@2!%CJ4Chi?rt%?P|(3-74Q0ZSctyBu-CL&PxO<_oh- zF2J%W(O6{QMOm@xP-Jywgc=w|edw z^?JN?(i57KCqhRHI$lGq55`I-H78F--z_z)74_sPbJ}XnZ6fIZRMh`zp#RfB|7U>y z&x{TUg9*-x%CWGt!XRaZvkRgy*f^&-c`i7*H3>LR(mjdk;?UxJqi~a7z@T$F0rD+x`i%+%9FgicN`4^bVBb zPLSd*km7ET;vSIVUNB_=h;X0x*wk8wHInyB86Rj)J_s@fEg6#!0gs1~$0NYwQQ+|y z@OT_}Jkcoe+zLFNw7JSt(p8>rPCla|^aHRHG@-PkgKzR#*&=pbTERItn^&93=On1- zo0BhqjQ=5)FM@j9ZA4T2OH%PKHz!{KP_Sa)vU&1V*eFXS;wxp0cnxF3tq`g$CB6csDie|g2Td zXf}RNeg#5(T>!Yh0o>mL?(YEi_kjC{(jaVU#pLYl$7RW%3gq-s8b(f?e#UhfPCp72 zNK4T;j&9G521?tclfQ)Z2L7uDMp!N|lD|oazc(lUa6V10rh|Gl;} zK>0zUjZ}k55^4(z$TOFTEckQ!GU0o(pPK!eI zkyR6?&zL#2bf+bdP8*>Vi6Xumbt1kTP9I=7o_}U)K!eHn7N~sqpoL*k&=&XT3lYQ+ z0s)>}3$VOfC*px&pqzq1Hb5$Eh;2xgA|x|ZBclnjg}b6CW{HL=iH5U8BUqx5EYT>I zXtYzJF`3nDvNFV2!Z!}_jc0#`(@*5dVq3;hqHt`-I3_TTiHu_sDhZm+3i9BI~cXA`EFj$djS>@g+VT5kh?O- z-5elyCy;ikdl1BB$auL1aZv_{WmvMDA;N069-u^+QC29Fm5j2AQAQYLHKVL?po|hq z7vUHItwr`LG@xY}fX1<89RqF8Qk$_;)HBkALfXJclZ;d_(i9_2JCHUKQa9z51a%bx zSgk>gXMoy-CHK^z+Tyy{i=pnVpf)qqeHiM#40S(-y1xVJ0Txs{TG4EJz`dj!KhlHnfZfO|B-^`?FdK|U6N9H&7(Bm?B* zvE&I189I5@CyEmp=}8Ld$&BWN&Z|32`n`JI|tK_T%mJ^5T4!=mI6tg)GrUEYZa*(IqU=rOr;^GOT$hoCHIj zSFqwf*5+biSW5`oP6V5i@gnE!9OvvI1h_hF)P?IIE3G&*yB?l`!2x_lqN+(#L-T z6^kor05} zx?2>NTbavk%;k3GatCv{lb!K$cE-D$1CqPR6YoKm_iCPaqw>TkO$qnL>m&brMiuuF z()$tV1FW3?I;scB4K7D*q4gd@fDdc2MERq5gw6M;GT&otzQ@^oPq6u(Wb-}cFyGUz zVb3$9m1mLZbDI4ga@Y^{%{>}~c%BHnfCOG-)R_vu9uR zKh`w~=l39*euBI{WnM5?pIyx%OIA(P!A?X~5#0?AR5>eHe&d`>WhtWsy}qP;Zn!2^ zi8l^N7niiGg)&?{#YST_4aitf>-dFR$FB<5Zw%~r2KEO7`;&qF#jWEL zZXJKyTSpsuVzn(kpqiCswT_=0tz$T^vaOFV2_I4SBlT>ezG0LCS(=7iqZ-K7hCImC zB2sOLARQXYL9V&X71D;>zAX%kt{U>_#6(^e>ARinby(3pigh+#xwI8qpqWi>nc zJTlAKKu2N8(OK@H))-d9Sfz$>tcLMy&uv-65*Bg0EPE53kmVR^O(bxWkmY1eyir;9 zM%ss)R;CawrVyp6NNE~_Z?)F;F6pNuff-rO@HCTU-$BVfi)Ek9vhT>U&tchja>zb6 z%NCyI5#IU8ZhO}S{qM^9 z-;MRZJL`WB*8ehx{+By_uZ*NFN0wpD0;LWMEOL3#Ch3?fh<_#WuVRrm6R(J_X*IN} zM$R?N85Y;ns63R4CK}^au%jG?-6v~12{xlwwStnHR2$a^W%3*-OD>WJ()ph3W4vv4|OrGAFe zu{t@9jb?d{xMIq4YuR&Gu;<3vbL-f1>$9k{8m~rNi7Yh@Za|YIvpgnJf*VLmu}L$V zMrN~;*{otVtGR(xbN|zn<(x?ENglcvGTmEiAq|ce5(2Mn#b-n_QQHTp?aLypQ_cNI zq19PtoY)_U9H52ymRwRC$htX5>E>Y8%^|FtLs>U#ST}1Ox;cz=11Ue5`G~_w!Xpse zk($2tcjzmC-7mBgaTL`#8tWXBWo--a_hVhMABRPc_ws=gSk4oboF}oIC$pTVu$-r| zoToYDJl*93XAr(Kk?C2QOvgE78qbkyLt48yo4A~VT+U_DHj3hTF1?+P#4m95>=&}q zE>cRnn3Z-3EA3KN+GVV?%NN&#lJYso4ANg%wzAx$)P~(x85XH-kVnrKD)hmbAUQX*U zYQw19b=3`J%JFcN-}=;M!$z#yT5qB&8zH@~KBAKEip4A5z4oih?ys@kUuV0&!FGR> z?fw?`+LKhT{dN|ullWN>@eV2bT@>>@7SsItKJkCaa>@^|;D=hDK)Mhgu}^-iuzkYV zK4om5F}BYc+ZXJUFR@R4Nj~Z4Jvi|dA^RE`exteM2M(9SN40R~^et8S4y$~x1y%a| zgG-tpvE)x&(ooW%ImOQ`(JxA(Us=v!wdbAr(G8xGo+gvgmmjACmMF$@Qq7?Q?1+fRuthYlmH5!^!cHT5^4?7Q;ts z$@7s~+WAN=?R}({4nDhDI{G};6grU*ossnxnqC4vyIuz3l6R{urwh^RiuAg%DC=0a zyRH!x2znr;o=oX*SW1)=%&IDSrWe9F5F-^`vq> zm7)_)lrAQ#@(`1U5ET*iCNNFB)Hq|9qNtX*#g;zLK+#Lts5jfF58J3O+o&JgsK1W_ z#Z(n2LOu!r2&vdt~vG!oy-7E!)e0H}2B}yTSGK59h zhD9l2QHHX+0SAzz*k{j`0J35j0UwU6M`-T0wZq-`@~n^;Ni{}cjnO_UP~z7yE~&<1 z!Es!$qaIpVvhgh0wo0-RmTWtgYywL*ktLhtkZiKgowb0{O(CpP5yCW0y0H%Fmf$VI zo53HqCj`?G!317J0R~_%=>g6TALXNviFY16RT3_o)Q3!-?{R zqG|Q|U_v6Esn8;bwOU~AK}~}!d^`iB4*_5;3szN%#cb~eyrc4s zIqVxdv2V;}-nv7FG9A)0bl$A5%#n2fuF6&)%N zM5WI;@2g@{M3gD2*%UQwiYS{R#-^xsm|}&`Ht&m*%yr1FUb8@j!vbCP4O7ioMS>_a zAcZ6Y&RANwBu!z(bcVr1Bg?x|$-9c>UCr_~vAlb-yn8w1-P>z0(M*{4LDu_fQl}hJ z=kj_owZZ+U+WuJW0H2k)XB9b6mrq5SgRsKETmkkMrpmAdBdx@$h^TIi(~=Q9g+TKL zIr1o1$y>DH3$6zd&HS1A2*cd0!&OyWNvN<^ym`AH%3HHcTl7?m5XA-@)UnR@s=Ns% z3*X?h4!x(!aaNU)(E&DGvvx6TFWF`ZtCRxD#e8>Uu9BNX-F zg*YgM$BiH_$h@Mr91bPn=_WOe)|XmV$$55-b-Q<0aJOg zIK;arI8?QeHQYkhatk?(Tgc(uLXO~`V3z6$j^v>nr1xiXOmP(X{?X{l$FM86SmRj2 zd63oAkHgBx`&@Iw6S$S1sAM>aWjL8-IE7_6m1Q`MTlqoU%1`&%=Z0qx+B1>iSy}@> z&TIGvn-OPIjdQTZx%%)8zMkij<$Nr7flr$mnpPASvOE_lc`jyoE@62tWqB@Rc`kRz zbA`{G87ivcN3oMw?bSZ13L4@Xs(LL}z0POlp4y9D?~?KctZ}10NVNwb zaTAMrvl8_d7WGyZ^)?pub{6#xhp2b@-1(|FNWF_d-;EIN(d50sAuk+W_%{$b0-?B< z)OR1M?|!!6zpC<5)dMcSe-O3ykUl7}Iu`LT`}`xy=O1OCe~f+parXHq*yo>g`217W zpu{9Ao+g7mgRGy`{QW_Pzn_Uw=^xy=iRVa^=TVdwSd0IB*e~jSP|JBsFQE`Gvk*P3 zd$65-w|K>>P91ZtN>_T-XG>Rl&Bv#!@W$!a;X!UpQmVzwq>kos2$QyW!)MP=dedj+ zC%wha_BK1;J3eQA(z`y+PkN92^nLcr4}dk~CDlSgQZ1$-)!K58W`VnY2*o(Z=p$6e z$E1$hSGXm7qFTbI%;7Wmfi55heD*80eVknM1tb5G;e4eQ0=b!d?K95?I22M)D83;d z`xfzhr!|+4RCB4-bBj9Q{(wHZ65kVrACSV2+Vs~^?k6v|_!(>cqRn@_Mr-(9ySGpL zX7>qrc^zkEkd^g^a)~wM5~_1F3FBMexs;AOb_|P}#6`uMAJ;U4Dc8`F^w9zBr z?QF0YJf00EfakLt=kUT03;h##a+M{q5>8OV{9fW-1*CSK%DaK0Um#mLCyGVQz+hcanTUntGTcI!eMn6_`e^zwJ zPi9}FW(NcOG&{(%ONnn=OLc99su<+AdP=>})`X^~-|SfjWBGi4<`E@6tt=rID#$|^ z@-_^)h#?PU$i?g%zy%Nw^Jf@Q4kySX5W+~!HwOFdJ!}W{Mx3=QJ&Nj%#=2wtTClK} z8|#vI999|6Rl3_G)|~*K0>;CXO7QJi@ChvVL>7D!3qIK)_!JVnt1h_40bkUGqm>9~ zdrkgv4*7Qkxi+0oPA9%Iknc=Z#3tskgRXbgPG=#<*~}46Cg{tooL7Z|gz9iCj!%~m zL48z<>vvTNc$z-4I+jYqoXG&At0ie338>v0mGEH=YO4~Flv%xqcb9;zp)CSh#d)8} z+OSrqH_UDccBXLfgxrj(NIW9z#iY_|!jRTjosQt83n|zPhdpr2&Ewg*9B0LFPYds_ zqAIDh;gnb+5O4`(RU`3)TjY3>fR7!C#(LZqhleI0eZ0CF68S2c45i-+el;^@K15L! zuCIxRM5BbY3k>??my{g+p={bd5a5d#pj{Wr(9{L9Z59bvrW^5=8r1Coe16#@{LN8K zYA0?|bGb>)<0dtqo74ghf2At?E!4uFzL4qhO!634p;AIK%L)cNWBFbD?wpOK-1>J_ zPHx}018EN=Z}en-wmIYA5~%L=Wz@9b#q)1WDCbThywQxCR3fI4PV z(XMuBvIf~i{nlcJtsUYMsi4nVrOy?t&p7L|j`dm3`b;?V+2A)1dTWI7*-|N`K=vt3 zt2GX-!hzj?qrrbQ8l=fqjcBWt>?;4-<-cy1ReEbyowfeN?wF-;xS6il)L${eMJicwEiW{UQ-UF&AgF1^h1(kRk$fsu5LbLAY`jzV^=n$xt$3&vf+*R>DWr? z&UlF~;N=_PJ>lTv#~vN-UMlMD%~7|RqwYQ&b@%0{yB~MB%T$NEKXjTka4)R+|GnpzJOej}d-NzwV_fWsKes8)JzEX_08Yn3aV<`@2DUM(%j$|p0;=W@w z_Z>(3&Gmal72gbo%M6h5aazZ5h@;~;8{eS)M|(EDEi8pO0fjk{wfMgP{3Mqr=nod# zhh(R+8=R)x;BwO!s1G2+2Q_JLbx7M&OQdpk2l$exr1CIQ zdBkt+zX9{V-DFTn{K|r9UZ>bDVe>3%wAT$+3xdA!j|D|(Yv`j%4Z+pN-eSf%f> zO5bCZzVA@!2Q9Ut4@umQ5X#4zZeMrkR;`hKf+at7tdXv^4d*_?GM}quugt?a$GN{E zZ9~X*3qx^e7G9hfjTq*2k>Q4hI6l=*xyo=`U_ESNR>WZs5=YpclxWu*a&|%k!>NJR znRhja=S3)$wpEd6tT!{FAwpWT4Ir>xXk|n+so{Ifb~S>TLmZ}^Q6_C>6Mx}7g8EXK z`YSf|*KF!<*wo*$slVe9RFxV*ea|DPFWUV7(mB3JD!ubZ^t_+g^Zwsy;b-!v&#V~p z3o7JSj}gvq99Mo<&h`g8+n?-gf3dUu&Cb>)o8ro699Q7INZSY}iyklZ;p0mFY%7-h z;)o?%ac)g(%_Ex#29RKo2(EKwcw*Ajg^EnMNXlSRLc8mVUvf8>qFv`B@NiKoVp_*M zDq+ys9n9G+fSi6?25n&or{;2MENGryj1O0OwEA}0YzTPE5)1*)Sb`zoNlGvTzDOwz zfp0;|Rv%NXp5CSeb9X`cx@No04KGUqm+p#759ZR7xopW?dNG&YZ0_7_GIt-Rx%-lJ z`XS5ynz_4V+s!=%m-{zPzxdRo7Vv=eYG90eya8S0#K_>7nd@WK|8HrU!WorkS z@bhSwG-I&j*zAls-s4!R@k**~S*jA2YCD!{0!uZ~A=RX8?;P*R1a%4mn5s!P#vvVC z3FFaFrcwRvvHtXI>-rdvvNLqKRdb(-HFw~eHP#3VUJWWJE-o%CFH&n8>Pa8^na=Oo z9w+ACMZ~b4v4?1*#(mhm46T&&{Zui&;^@)FXDb!&$SR)0D&C1zJeO5GkK1@$wek68 z8()AzEzGv=W^@UK4=@71#fsk&=2y!6c4mINFu$d2(wS`1UCE>!ZLew}aeOgRT4i^H zv4>{W1rDob;lu(TL6qf}WBD?M&ELvNO*1WT4P&v2Y-=*+X&-#d5G1Tp5=L0UYL>8u zC5*C!F^7b;Bw-iVqg^EB3PK%6ICYwo;p|LD4C|>%0;@D+JC7J9U9t)+naXxe0CbNN zX_mB6NxG6HUB!~FW=We^(mfrL?v?GB0BGdJ-UPZCq3ol{DI9Xw7IK}@ttzpgUneR-f7D3}R~YW*JHy5m*sSXvI`xJz)K5-t%3 zBO>#~2W-uUD2p7*7Fojem0^!hfy9YQCd&e7vz_fK^j(BS+V&lQ@-^;y<%NZpAdDDuo{%m zv-b3wtM+JpgOKpGPcYCm$(j$xn?&h7dEA>k*XEz4?QN2X^VpZp$5*#)uMLR{vN;nA z9uI}}mJ6XUy*DH-Vqd#Bo9=(VgnjT*_PNXOSyg&|NL-FDtzH42@DU<$CHuWlet#9Y z)9I~P;*QzLsji_YpJH@<+a)Yzac7JbqLN4 zVOnP*rcdb@`mb6Zhox^hC5-U0H_jhp)_f5Nl)x@wN%=m&p_npc%P>Q>+?JwkJD5ht zmu~O~a5t*Za}%5WW_E{LIP~1gZg3kLdT(Xu+p}pQVw?3-kGO+ua3|{cF4pn-61kgN z`E^!Ldk@mPH{1K9*?rtP?pNYIz~Vm0;y%RUKFs1i!jbkmj_Tj6``HSwEq< z(>>YlrL~YO`6QNnD%)CG3z<^Xa-!waSmv2*YxULgBJnKC@tl(5d6we^mg7a1<0Y2k zWrrNEWSgt6imG^(#CQ!Ezpjb#v=XD1aw$1^Y}5I&c!OBKiLBqswvxv-A&<9pUr`yp z?;yu_nIqhyl(}7r_bdvIJm2@TZF#;QWOME}&=MbJ+jGA=^PJE|U3`>nPxk#d+sgj_ zgsu50TlceUXRhz(*_`Y91v|o*Z1}ITTg(358?&&pt?ch_P$%D#PHNv{SNl%6+V{-i zhio&&_mgZZ`x{06F`H9-e`4f6Gn`-858q)w{MDLJ+O+W-ImGV>RkmTQN@pY-#CZIWv8l1Kb;O(seB6BNUDr*HOr=zMV2i`J6hm0%nYB9;e z9?Icn>#|67wMrT0!w+G23x*)lrYa_UOtp3*;!U{bh+7qrG#x&-cMEBJh%H>-l*aIi zc`XuPvG4`l9fCi==FSd~xdQ?6yy$6JJfS~ z*7HWv>_Ce+x50Q#dwLZp#elo=k@Q64dn zIcya$0|4N&1%N>T4ggy-^1%!zKR^Khv<`d=0%ii9u8cym{t!g6O~7jZ{R3X@e=_G8 zZ$x7eMZ|I_vMdg0`+*xtc$n^WI7k_eJVpexg*tmrGm>>aO6hzw>wFA5z*tu6I9BU; zR%=^U>$U;!xLQI&ZifISXnGwUun$$XWWl{7#zZ1B3CT>>noi~_Q*HI4ATq;~KN-numNKV-x%3)e?5F^8196Y6Fz>t_8( z%p+w_4d^4v`ABd~c#3=Fr$AD|RJW zc0<;?YyLJr;2KjFV_&>JrWAV+`DI9cIZL(ybjoynVG}J!lHtrvw1V|jsq|IF`iii= zs##w(tgom;U$G2Lw3cLAfdJx~%E|-o11t{rt)sg2ST~`8ca&?;<&}-Gme)U$SW$3A zc!Uk6(A3pBo}pH=aG1E0>#3)k)fb$j>r-)@wK*38co6_rgP=>qe_Aw@C-H04_|-OU zc9kq9Ft$SQ_HlJ0k#82}m!CfpD)yPx0a|=%Vqe;meP^$Lw)nDl02W`G1Loq(J{)%rRdHuua;<;u*P8wIqxP~t zy8QuKTT2G?g`flR`$60+4xvFP1QXcd=j&YbJKpq7rE=?S1zOY?g60@vy}@AE&Nr*G z^ZI?}?jz2aj#MlT_UNt-Q32^tcA_=xTx&TX9mY;|IJ?aW=2~??I|XP7D2^m89fevr zTI)abLdQ@@InWBB$71>80~;?JTNsHr6;N;JC=`T$e28VZrkQo_9oE!17$E*F| z>r$$r&jVQRK}}F@h2kL=^kF6FBP{5nEa+n_=;JKt6AnS2v;?JRHJ&1mg3<@ z8i)z`n|BAoPvpY#d?8jay9-q%B8o9rxq!ZV^(_2}Lw_u#$`q)-6q(=(bySjYqM@Kr zyzJebzv9uIzv}GHU(>qt*V%X8;O_iQ_Nlknhu+q^^LMa2f7j~H-{ZJ^vWm;^lZ*ZD z>-Pil(ht#XKGK@Ti?;6eWBmRJyVYarx@E`3jp`{6>qHejx~-<1*12OnVV4(@IoD2Q ze!E{O!c9kK3$cx&i$XCvzX;4A+t8#kFHyfe<0M)%DTdX=67i`=m;IRvKA*Fre8CR% zB?q6c*m1sQ*EmPH#y0`SRnFg%ioZh@ejjjL<@^IRiM$q;wR$kD))M($SY8SMxF}4p{Ym6O& zd>coQ?Aj^lTx0AUQ9S}9x4AUoNX z%%NA%Tw?@$_6Mwb2YHdP4@2+Ec=`p&1wqrmxPQ=N*DgdpFaUuJ)cg;ixtAD6;a z4+>%{;xh>OY|U2RU}}TCJSrb)7X+|KTIUE3<}Dq#-WS>83wt?gU+dusbu?U2xoiE$Hsa3SUYP4l{$;*RDTB6pBc2?=(d&G zLH7x5cs2{G&E{%9@$i8bW+!qQHFxQrQ+q5aM-I+6n{^R!;*U8PSh~bH|0ZrRy^L7| z|5bqbAI1_9u8dTKgSGp%4~Scd350aGOz816z(44H(Xx>!vV-(1lz zpQyJET2M~TVtm7C_WW{lcv~X&2)YMk%T%OT&K53X%a?O32(!g2*rr!2n^p#CKsI)R zL5eC;N(6ujo8(c+p&8Yl3)l4&B^qu#=V^b5sa-cfIFkEqw|jC%WMQEy+i`+gkt_Gf=M zfbD;v9`z2wsCTdx^$y_{a;<71hmw2z|Fg#$^5wPYmWOF=pve~O4#)3DsOf)}oXv1(9l`T#rTb+cqI5}u7rPAk9DC8V& zh165AB&SZFJF}$-G-Z>2KT#l!Qb38pS=vYcUpTJ#!EHBg?=~PEB z4Yc(>LHGaAVJ;$_U5q-rgw6D?eoXybs(ZB7iC%^ZyPOqv3J2}XtBq=CiaMH@FGYf- z$A}cTYGQtRRU)5;wbr0B!}6n5pcqLRNXq$%2pdRPT;bi{UFp%^UFGcWuGadyYq(ur z%l+MT++MHe_IZQe-`$A)-Az`1cQXf<`&Dqcg_`d_T6MQl>$nY#eY+M>F0*w_ci{Is z*%_wG)-yE~S`~pyz*DVwnD)6S6pyWFHHjUztTHCz6+ug?jK<SVu!z77RjH=>bht7dtHf)nB%fH7{_0RwOwMi6@=G{nxQ><Va z$$>!%8fA(uib!+zXk>MR6e3b(VCxK$7Wc6C-OFBi zANLmbvo}7#{`Q3Ow+Fd1gVeQ+G>>?Q{NiD>`y)XsCvIa2KT6@|j-bAb^%$~wJh)ED z*iTp#91B@b+845(3hJqtPY2f}8T%Q>O4hU5O4f61falpDFSu5+UQ{btFR|@jW?Q|| z>PprVV8K_lm8{oLC$IBL))PFIctd%|o6O-YYbEQspd%OaZMBf~4kLe;;k?HKjmLPP z@qW-dBk2S3f)5eOM_P1v&2tsY+HwAvDt>|$KMguJq(Ad=g3qz=7r}K&$Ne&+4}4|! zfv;^o@J(AM65O zvJ3pFT;MO}@VDgx-#cBPO%A(2+Z;lkl|yiRIphMLvkUlhJkxQrbLf7C9Nf9cu{_{+ zPY<{eH=h3oL$t^tL32@1g9QB_7AG%9YhgG~X@`=v&vDOFI^>XJbXbu{)j5Z} zd<*uSF6=v9*>~<>-|3d)n5T3nW%fXpJvFZZ5c)g?SG2WmQEW*ydtuGqIoi6nUaF5v zy1rPUUyily2|cXn&!UBtXaiWZfh^iqEZQIzZEJ^UgGn@K{zHa{d_q@%%nCKR`sTRL zdzC;MJC@ug$2#v-V&c}u+C^AwC>Q&U2aM!ga;&#kzDH_Yeo1IlQ79i52KD$Qf1eX+ z!u8l@W8KD`LxvEm^&e)cBq3C$L46G`EfZgnjfEIj^?+`p`iSn8eNr;C;UG*&UVxSCZNMk)LKAM z4)+3(;XhLP^du}Y*(`F(oVL=cqj;!05llKowaTe%nrUpZ?YUJ>hd;LogSBSBU%Q0C zB=0Db%*6V0;k8d>HcN{a`ZWk*HpL5o#QYcH^O}nP9Ol0h^PkK7=dr8IXJ;@uFUT%~p#s_e)FrAK5R*G8*>?>0ZG6<|L4p&vt zjR^ApE6d#pBtBn@&IaF8qWi%SsjF!4%Yl|wQ5tfeaRaR!6JuhuvtrMoUm&{Y?HML=wS@> za0Yq=13i*~9_0jjv;~y8978~lMHI(rKo2p2ZbLwi$08?aMKox|4DCb(?IebFGDACs zp`FUmPIE##9h=Bl;&le{I#W{$wF+?-+v;q^=N#s9F7r8$`JB&uF5ux2pa(V=S{h)I z7m)@oMwXXo;+>&}NVTwhBo)EnF2$0UvGKeAB*bs1n~xBe4_^O(hLx9!jd=VSo!Z-2obk1$XgZ2+Zg2S4Dt>Jc_)Ls%K`Fk zYwD%by@z1li_GuSVBVAg=KWam0Zo%;z!DEK$cGfjhZ*D}4DwM1`51$I+yU~59Q!-! zNcBmA_!KgJT7!6h28hpK$!E2GS`WJ7IY#-sLiqxte34PU#3)~8l&?5YzH0T$Ho~tF z(ASau8ye7OG5~!OOTLw3y+2{=55(Jy^c{utT}JvIBYmHde!xgSbRhjG$NhRcQvR5r zeu4l#)u6ta0qSR1@^cNUt*;VaFw`#<)UO!o*9`R=hWaf-{mudP`yBU+OGx<#g8Cx@ z_(_BMSq7*-W657~tb5H|{iyhr;r^!J{?2g!V7PxW+`ky^-wwEKa?QK2+|=9VBIK-G z0OHHFApe{JvL8!kQ%M}4sD54qatUcLmyzb=64KmULTcm^(!5+k+Ai0Qw0*9bFJThx zKma=;+fEul0HOn=`?6}!A()-9{1#eyZS-+IcPCvG(5?)$8w2gmKzlIIp1F?hWJ|0G zI|03rQE%4A0@X*G7noLs>LPU&az;~7Zbn?XA=AoFDJZATqP$S0s=z?h;1|V3pIq#! zK_q=)ystvvkJ0yM^dUw+fYA?R^dBhnTjg3$AZJ1=29e^oM)?NkS{aoYYvdEoUb*Hf zL;+SV%+>Cov6LW&u)l1h1Sw)chO!{VEXXhxWH|c^Z~!?*H@;962-ZDK_|?;^NR$^HE#K$cO7I@$_7gdWuZ_f@jc*w72B(AsWYN3Hzy@ zx=6Slx4Tog)y*q_#i5;Ge}?~6WH=;h_4ZYyrIteV3)~Eq{g+m+))b4Kyj%BN22icV@N+ zyXB7TmdkRz=l#pcv&s-ax#pZp9L_nHmNGY;i-<6>u0Yn6Ec>QsQ$=Rm(Q5t?*EXLj}Ml*}Ck3)=obM0qU_aj{UBf|qUIaYeh zaUhjH2+JRAm*WtZ9EW1DHF_}SXd%|JB!?+U4rfV@U`dW-NseMkj&?|Lj1`QDrZ|?c z9fwSh*JL@=Tb2{3{E1lpB)cppyJR^9i=CS5dFJ*smgaON%^57snJmp&EX~<0%{dNf z&dqh7xjm2YosWz!(BwJATb>K4{6$#)V!J$-xa7GMi(RJ6W4$YVIm>f}lIKd6=PH)x zYL@33mgicBJl9$Bm@i6SPxx*?#y4v6T$<~BhS(4{QI(sq$}PF}En7p}>XPaVpX2Ax*m59Mbi}3-(&-0mZ{a z>k*{&C=0U=^&WHS<8dVMM6P>-?MYU|Q%Vs}vm%~hMLf%jc#akEyh9N${O0Q`+Re{%CGQELi-}I2_EtctRCDS`B)4MFwdo0uY zEYk-LnLc#N^bx`P7+HRz$@GR-8#KhHRQ@w8|GC}<4e^Cbk}t8?SDD8KU$a2pD1p9Z zfxcsbzGs1cV1a&g2=r5ivBA%T^A`m0t0vc%xgN(IH|=2SH{$&}^8O=NJMOq?`TVKt zTMd=}Lau)^*E*F$tG&?S7=$>+ozX;nqEV#0UZyh;Tr`ou{a}9Bh_69PCqk=4xS?3I zF+4|_Z4EYXmO%#g8DwC;K?cq?$iM-EMw(x$k!H}Kd1U|AMG-j$Li z->|!GE(T1tm)Mf3^}=es4QoBpD$>U#WnV1a&uICnr2Z^wNQpXtMIFeZZpESwVo|qt zh&tG4;i;s20$zYn3N?BAI^-QBtFMy}4k3!$AjKjUZk=ln)wN{5BfS_Y4r7YK|~ya=1SdWlLG zg789Sf1)nNH%Jm+{7Pu(Y2&bg8Mf*G1KfY_xGA5mNQNFpy6|e*#anF5s|xt;e8ajs zf4+D7TcCV*A^Ywk_T9zoyGz)2OS%31U>dPp|=X)JOqfgo)G_!WGUbkSBbudk)X$>r;WV+CV71I}Cs-{v90^ushLvDd&R!5UC~cvFy`z%7p~}z_tRe=arBoYc zf>jOs$}h@SqU0<8BYKRHr_`bktkA;mZiaqvB97nd*hiw~@{+ZfYra)ZM|`aqC*9OJ zAl7H3hBhOWzcs-jBz;X+)O$DPglfzUY_24mQE+2UvH8+upt)_^Dho9lYNd50inYpc zubOdp*QB`Y$z1kgE_*YVX6CXFcXx5_?)Ehtt7fF<{gL4Tnx0o0-m7L*{va%Wuwh>{ zBaOtZ?)y+Iw#M*UHDgH*Q<5Cck{rR39LbU##gZKDkmMM{wQ5G#jzgx$YqA{bkfo2x zl+WN7;sl~}B2qeu;kR1rWS9J>Ac0de4_{7WEu5~ja0YAPOxD6#tc9~#3+FhraBha- z%XuWh`3T?wO&6y)bTQbq7L&>I#f3!kBBXgS3$-5gFLCMTQY3Ym;a>l^oE3A0Qp}aC zn5$SZSF>WSVZ~hQP|S6PWBucLLVp9YyiwE0rH1!Atv6xGn+^Lrt#QMeEMOw$Em-VU zi=aIT^EM^G?JU3@EWn*Cz+Ld?U`)ci8~)k>(gf!Q%&2gWp|UXVMNan_);g#4u$Z`? zlnZF|9Lxt4`v;l*L(KkRX8#E5?@3YvHsOPw=d!E6*z~Ejq^c2jOu&;aBpcKr$_6OEH5-__%0_H1*BLVYO z!%V<@4UxX?jT93w-!ME9FyCYqzQyR@X7ukc`ga-qdxmEM=KF?9zSOHE#_G%9&mz9AdSXE#>^()oLZw++S(6`=jb1ZcS(BeAGkgl)x;wHaKVzvr zXQ{qmslMdGm^JBelCKPR&g9pImNPjwWV+cmC@iN%ev86>XSmWLzbEt`TIf|Gv?3ZZ zl?K^fA?v`%Ix@0OjI1*w+rovcOP-bo*%g^}%d?_6yQk=$N1S>nPCc2^mdvRabL!2U z`s7hG2mHXNFKIxh*^iXaADMgQCZtYxJi*)+nU`oVi!;F74ognR^GMp7$QUOnjFTDT6vjA}F-~KQ+dD8$&vPej z%^-j?k?jr|!0qx{O4^!*Jv-Lw}MX;)(ojJoZyZWSC$eB-quQssC8FFM9!zCHMoD`qK*51g52~)9HOmPQ9 z)@LJ2lys#m-OeoCE-c+rmTp&;&M>9hjSTVM5N3C>_a3O#Wu(In9bHH z6>PFfHdz&$EW#$MW|OryO;(eqCXi9oOH7M(rd~uXH_;V}QJfjoF{65Blwd{;+(egi z6HU5+r0%Raat`{4fU?43<#KfrYM15v(%Je~bucJ@OQqeGd|8fLVX86C!q4rga? zVrM_X?d(UAdmM#qkJg<1K!>wOmCO7mG<*!9Iu=nKmuIbr{l^d-Pd09{Io}D0=S0S{ zCm4qYNErfjwR(An@7MW1_MQVgs$y#r3$SF<6T7Zhl3>^rnnpnpL{UKnV#nQ0_J-ZC z+0D-G5~9Z5d+)vX-h1!8_uhN&<)2gL-nnH%PG*@36A`7_+Sm5Q8%aT|iU_aK43SyI8Cn}KpLU{f$V zMu&1NlSYq^6;6HvjSGrry{GtdignL3>t0~iy~wP4iCOnDPx0lbzBY^%a8rnn6aaBX+lc zLpM(R7NMWWEHYjSyxWF}Z@hKvTP4TuSdQPb9DiUr{>XCtiFIs6Q^$TbmyutPo?nMq zPxy3t#BZ!KzbjaOFswfr)}SJSRZv8*3X4c*zG9tOs>th9cj+RO-!er2eAyyPaei?q zPOH^A({Czp^RQFa%!2z;E(WCR@ZmNAw3cqQBlA@lUn! z%s&MK1B=fiSRBgb^N7+43?#P6U*xHy#YL<)B}Jq+rA4GSWvn;ltTz=!q@$~tI$Bwz zbhHZDR9%!uN0%$&q5}%n3JhyShP4vITA5+3!a54<$C|00I=UJuNC1JauIVVCqw8qc z^L56em6aGy*sOurtjVnSk3e3FBs;9gTw>NnBx>@>qn71Sr{pn$<*^RSqn_n4lI0O} z$fLni9*x9-CIsHB$z$!J{Lza(F^am4#%^PZ+|i3ZG1f)lIBdOcQUB44>oK7%iqQ3$ z&<&W-@l5ChCUipwp&J$T6TLW*5Z@S4nWWJ>uE-s|IG{N?nMT|MN1Re*MK2Dh_oh0R z?9q#x;fPat#MAn-W021(s$N~<=&p0VjNIlWdIJf_c8Vu-zV=uoImd9cgo6qrnaR0M z{iu`}o(D#u=u6T(>hl@NsB{=NFLK^pqOICOiE&F7<1`lIbQa@QEXJ+bR;_N@s%=bL zH3L~OGvC~p#VXUPU~S8=wqsb^GprpL){d+)o3YC5#FV zKS3TL!aj`HN0@d0NKD&!l`C>&{Ax$kqm2571zJjUifp5F=qND^JL*WKAlX!(qc#NH zvdWM3f!%7PPbwXanw9|kM0u$C>Rk07aHR2hnww!xj>dgHstrbHr81sq)TA;&BRMZF zQpuVD;6u6Gtv)-c4zm#p)kjB1wZLK$(rL0f3&S}_&A_&fB6nchoFYeHTdc?mY>V^M z>MWw0<+(iN5fez1hM9jW*Jr%|RkspV>HWWP*W-6l6cokbS%2$#_?;ivl9?=1*Pt!Ihrt*00`Y zUiqPOM6YD{$}g1!--`XNSiGBV%>%PySW-bqhp9W2jH;rEzAg}|xqS$SLJ}AN4TT^~ zIs^~2^wr!WQ24BHC zI?>e8D@_OfDiqk&`RwR5Y)7wEu&!fR*E6ge7}kvp>n66N7qA_@+0%~RLfUjI0>4eu zrmGxw^c|;L{6DER;&$T49mtP6Ss4FMXupfJ`vPlizZ=pWy{we?DW$xh zmGS{r$_H5~A7Z6^*rAk<6q%7)+Q8yblEPyM{&7t!?=JF;)_;Q9KZ)(1DzZiEKkcIG z8Ep2fohr*Zi07E9=M_~iFjX%yRWC7BFEdrIIH-D6r^*~yyhd2Qj^N+WsCvemsyC_q zTiE_>J5}$vsCpNhy=SM&GIHX5rs@Ml)rU;gM@-enOw}h$)u#@sKGUf(2Ns_bmR}(F zFEy&(E%Hdxt(jW!74`fYdw!!CK3l7AU6g)@9lkHp@?e-&Tl~Oe{;0_OiOKw#$^3=M z{FTZ4%|YhxMP^{08ddy3nEr`?2l*`;zjM$Cp{pplB1Sst#T%v!8q{i|Xphb~22eE!8;o)uA~;8A(my8R8Ab%l<#97n?a#LfSoOY(iG>Tbqy- zc{;7+r%lMpJk3_&X|<|f+k~v>GapeCN=&%uefT}>QcvQKZ2*jI=s5n!@u?TifbhNSc$K=!lt?h{puB0 z143%lRy5*eS1yr_cP9+dM3WXU(qD2lD-=dC3Zof?F^s}ko{8glu35m>rMcz-YdvC6 z3*xjs;nc|pH2C$`TpM7M@fr^`1o1W31V29`+K>_3h)u;rMtEaJaFSnt%{3Wq#U_4w z&9%AevcPjTQDoPWD2G+1=E>=t(bzX z{hlwnw(+YMUEBEWFS=&T!-xfkBgi8(`u6dAKVv!)TOQ^2O6Yzx<9Ce0?^wp~IL7aI#_t5i??eZFC;2@R zx}Quao`Qf+)lfV#4~nN@%hUaN61tzkSe~h{Jd3eBo3T8Hu{@WtJkNpU`F`(&?iUcE z7b5tJG(=C!gXqQB@)Cc(gzlFzrk5#9FK0}zU`(%MOs`^0uXbR1jXzI9_iG8&>kxtK zHB>LogX#^~@eKI%aCF@HY^-5)2EpFl*O)KI=R56Vwr z%cuPwZv&rUOrKSlKF63o&zQczn7+uEzU094WxxAv;46gSs|fZr4Z)}U{k;u*9oxU5 zwbxce^)~QLh3H$1=-Z6wJB;YNjOcqVEBL-&y$$>TA$`aUxe=bz83I%BDC5o9lJM>< z5`d7O1O++<15>kkGA#Kx!&0D@PdX_T4>!RlN&L`5Hpdqm`VjiljXEEkDtYH8gf5I+ zON;o37PHs=_EY|k6_-9?E`7>e`i!~sIdka?=2Fz;(w8LA8~(LS5nqw|eT_o?hK2ku zrsrFd@dtiKGN$j4!0-K5{%dU;XgaQZ7N4mPOqn_ZBIhQ~nzWg!xIA-{Nn1^ytp0{| zm!bX{RzMR!ICaZBsrV6L@+rhmtXe;_H~I^!+^?)+zp;wNOcnc`RBX{>{0B+?Ph`xX zV(skHuirNo6vOvI`o8^-5{=f35on1Oa8 zRPCXvVtWnT>SAjTx*U_eJhNeiVrLE96^pqB?n=zDm6=1U6fd9#F7OWGtBb87xT_)k z0iwSXX_b_%u7on2L99`17QqDsRS{gIbj@Neg1Z)@zBc1iQ%vhO@EG9M7MpJ=6({OQ zVj~cXb+lQuTCrCF+!gT_B;RBa^)%W@94%OE)w}MePlK)%c<0cF-J6Q7Y8_5Z7tPG4 zQHoEanNMR_YGaudo(W3or+b^%g)IA+5M^HF07Iv1ux9-A`GvM;k7foD68ZQ zR!JkTN_LPM%|Rq$no92MP|0l;O&t`w5{Ni~??mu(nFospRDxtU!!ib42sK&kO1+q3 zes?Q=rf1|<-lThk&lB2zk?C*AsRh%}K@1RFWqXZl@s7Q#D$S z^rq!BYJWPmKf_MTnJ!w+!e(a|dloD?hp9PNQF9(sb3RjZ0aJ4!Q*)7nnv09w1xqd= z{4Pbnmud8zRh+M2$>r4L3hZ)av9n;wRW7Qo#+KI<=Pg)rEmL-#qU?I6>;|UnMyBj0 zrtD@1Ww#W27c9AzP`wQixLu>}>f(hiSaJuAbtjH>SMh)gmfY>)$2~a2y~Xb2miI9u z?pKU>fEn>1GvXm;#KX*pM;wfJwAhi{@-f2taRm8<#({er99RqMkqlrJ6i?ESPvMYH zGZh2x{*2C#&cRFLX5(2L>^V)DaIqE7Gecfb40(|m@)9%TWoF1L%#c?d40)~CtZ5|& z6t5HRZy>lgHFi8}?kcL5MnTcJr)#wrZ_x;E;|T8*TL-Z2rti8W{~q>wzrWS{1E%;x zMe#>W@yAT@Crt6DOz~$9ia*c0dVfKve~CzZr4j#Lv3KCo*Vyu#Vte4y44X6fEw=ft z*vfD=u*b}nulRS%jePIzZvCJb_#-p$CuZQ!%)nomfxoi5l{4L~---ubZ{&Ak>L194 zKZ^%mZ)8vjqW!I<9R($LB2?0kb}Usw+Oc$rIvXkBvyl=$8!6$lkrF-|DIx9nmbJrI zl21E^mCz9hBH=Hwv;)w}Uvs3Gx|LwJ(h{$lBV{g1%dvGuN&l~QE1B3TMQk+_yBrg{ zJQKSD6T6~=*p*89d9}MTA-)QtvZ_XJdC6a_IkFm!7{C!%FImW%Bg1tr*nYVnFBjO5s_EHh;B8}*=A ztHc@Pg0p#Tr2{pr1GTIJb*uv;SO?ZAq1im&oXzzmG@FYYd=n!{UP0t;Ly2{jYHQU< z2(3|KYHt&EXzp*Gj$+jvtH-)*x+U*CU7xVt0FfB4>1~rk zZ`ZLMuq;p)!~`06LmYS`rfy*enW%G19i?uJLryBmf0R1e>gG5~-K4~JlsctEKT6%S zB>z$BW+nEc)Tt%bQR?Q*{ViA;Tb4MFQm2*hQR;LS+*T~8txFbklsX@eQnx9wj#6hJ z{WFRF&dIDBvy^VMGKg(U%%fC5&~}u%T?rqhZqKOi!1(OQinB2*&Q2w+qtu;Au(J`1 zT{MlEQ8J*TRGTFbAsQ`=qeV*c9HrX(w7KR`J9dxuH-`-7Q-|Wy9OhGur50yabTTXE zI_6L!?;PqP8j^@aO5;eoV-D@WbS)lR*G*`o5e>n-SiB%Jx+JvV^DN?!V;p|x7l11K zlZ$~+>?c(?(EjMt%7&QtXEmV^OuJC1rk;iw&+1rD1E^o^bwonugFY2J3T@p{qj9;C zX0nlFyP+DIFBI$gX^W#d+nUuyEZ}uwo^u&8uN`|z+yT<_OB?~xy(LzF^scO~yOq$@ z7lxP9cdzL`Z<6b3Zfb`zHp6zbswjC)v zKvwNj2jxGmPD%jku^MrZH|Ew<%+v?ka@jz4E^BRbeLM%Pc@`LfnTtmRBFSErJQK)^ zMr@btYBrmv$l(@okhlMHurh*&u=X6vT6Gv3!NXabj$nN`$kdl3OVr`7NTzGy7D^}gW zth$j|brZAdW@gnb4p!Z2u?mM2w-GJ3Bgi{6R$Wu#I-nUrXO07$Vd732`Ys&$Zl-1- z$GFF(NB81z_j%~i{mh&P6muSA<~+pAd6=2=2s7tV2Xh{C>e1sw!4nAbNsT%8mbeda zTHuThTRvT49pJQ>*lUabGuZ4|ZdO*H7XqW_`o{ctmP>vu>O}-AfWi3Oo=0)7CpGxF z2I8cI(Jg49aIGXY*xPDFgSlEEL1rTphy07pb9o(t=RF*P7n}~ki<(3563hQ(b_iZ! zy?B-N;5FSLcpV*rH!O$XO*Zg{ng;$YKIT{=HxIeJO>^cQRPlGUIrEIoNq7&xzt2

      atF9LDfwyb$p|UR@ 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

      )9IxA%dV)~Y|_ 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%0A1A25-QruJDv?#NI|Mf;k=78e<#pQ{5o6WV_ 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傽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

      HDd;pS#DWOva(FeF_BETC%5_)Vi4C|0>e5dOPpA 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 z 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 FDga*nhCKiP diff --git a/gpMgmt/bin/pythonSrc/ext/parse-1.8.2.tar.gz b/gpMgmt/bin/pythonSrc/ext/parse-1.8.2.tar.gz deleted file mode 100644 index d24aa0d1afac00284d599e6fdff870ecbf5dc9d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27980 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

      BrxQtAz#xRt#OQy7+?wwym@&af?L~P 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 czf<3|)FA>gz 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

      G^Q|(K=YA-6^eO8w3*-QYhT`c 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 z

      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 %-d;HEt6f4+o71@<|!6-G2v#SdgU7 zR&GEPFQ1m}7)YA2ieC^MQ;VPzJ+aW|=-q*-Dk%|fD-;jTO~pZ8GcZ$9cv6TL*55UC zBbaLzPGZ|7Wb**jCA4*zfk)}wSARcmPAGg01S>_c=PcG&sv6})j zv2HYcQD#=+ZqBPC2@$!i&fO>*yP3*!+F9B(ZR4b9F-#zcG^l6+u^<6QG37kVs4J$$ zq|1?a-*3-0FIHtu%o?pbK?}XBblixiux|ve(gr~B(i7mA9^r3^`M+b7x^eo@M{9X$ zi9>i%+fCQ&2G)3oGdTbhd_r0l70YO-c$u(=Y*F?H*#!Xlg|d*b#>ktsSF%?hDHbLd zj*&t?g=5AT4DCVhk{)N;{HToe~n;Q{0u{`k^45+Z*fa>sF*r`Ay+E>ATyF z74=uT(#C#nZ|Fw@tA`dxx@;3>@gKwGR%Ck~aB)LTxX zN9C00pez#;bgI&Tq4=TJc@|aeg7^_~|M_+M4Z0AF=XQ%)x zdl?a61@7m}%0UT-J&% zvpaR(#31xya#ge$oZ9*LicL9Re*4X{wpsav>_Y}=i86%V#4Hkd(!(Zf*)2j5r^RP$ zfIh~__j&|E52CuPUxo(`|+2 z4_yEuz~|jzF_L%-*829du`F-E(2tC`DRdSTYtkstjRAl7qtkJEF!&ylP{B+rs^4rlMQ%s$ zgTuPSAj*T_&@}09)5$jZ-y+jU!U8O#42UMFdq({>$cRxA1sv0$*0CkgbV@ZFPYWGJfNm_{cT7h6<)_7RV`(n!&(lba zl&;8b7rx<8yImRbLfoK^*{{zbuaaWA=1AlgsOiOUDJDQnG7e;sZtM~MHR#G3N?qP& z;u+4^568~LUg(smWI?Iq>~uRRJ}xP`oE^Qr)RpgDY(S-qN90XizP~dz5QNQz>Q}~Z zcXocU<*wM~+=(G0kNW+xMU#-xB@6EGD+`m@{!)%1{y-`PKXI*=l?C^*3EGeEWZYzw zN%0iSH?q`Jd^>eRthH&$wOGdzlJR}{!-vOb#>CLha?MWJmqR&;KPHbxSwe}1*PNMl zgiz*fN-(5cgn*nhvD>Z&`9(6YQ)Mq%@XVLHV@yMxF(ljhwFz!jHf;xNWr#}YWb{pD ztYj94CRjlJ4oL{bg_Sza7j2p3%gXEJGAT+GbEBW*EE_6V4O8qq?uNFlHW4vLM39b^ zq)RP~1Z8nNk1JV)(}5I2{U;p;Pb%i7PjwY&aR2mEJ_xCqH1iFn{!S00s*qVw?x<2l z(|OI7c_@P+hl9ik1AxI=&=P+O`DmIb-GbkJH%;wn)piu1o~9FcF*{>0A_15qT8G=+ z=cqzN(O0{YjaoLyu%IsCqnxW<=(FJnpsPFLa7MrVzSKo8Yc!=J0Xk*`+=mBvbu$d| zsJlp?G!gx&c=SoXTM0>TpQEdEn2r;)vbsmRN~U)Vs~}e$MTQV@mpW;d){~xhXwir1 zZMC{ibt44iL7qP zXH_+1;aVI%?NUmLMNFiLYq`YHNz!c0*pFLWAt+d(WnNKGu)^8AwK1-oD6%NvcB1DLRr~2 z=7l`tS|8JU{RWUimtuQuL&eqTf-h%iO+CGUr|c3e@z@ajbpab|>e2H!LL(m(=5`m~ z6)T<_@b5tqok~)eVH9N2=+&@eT~~TFLE{iGV5oy)3Uee{7#*zvZw^G0p%A|$#KI#U z1*3$8jX>B*#Lfdn9!!+Xdzz)g#eJYD52G18M956W7DV&G&~F6$Q!`Y}cZlXXP*ZuY zc~4t)E1Xj`+a9N8|Ag;!gmFGYW}w^WR%;Vinylh(hB=)cPm^JNpj0G#9O~-4R)#r; zG(af=U`quzL^)-BLnYBg76RQT73FI5uc%KNTS0Zjj|m91%#ZBuof2iv#U5F3eyeL; z>o~w0AlT6lXE?V*03{B;O|_E~-YOW{Ap1yh9Fbhu)Da49>jMh19kfHB#qFh;vEAxn zj3g66_gQK}`qvc^wCGx<%&0E;x2rT;NZaWk_H@j#MK&fdOqL-*B-g9vaD~_~5d*H6 z>O^&D%+7eQgMG?}PSKAYie^cB|EL}30?5I#gHOqRHk3lkw7uE3irio7#okQ;V*XTsl-clu3| zSqK&&CpQKa+A|NRgmdA@XfiTX!;x#uuxm6dM)4FycU{cf2jG}`RN z&-G$ePq$A51o4M>Xq|SennAmwb-dv6t3UnEtfOyFB(4sD8uO;6EK+>Zm}m+zHEptZ zRSExQ%7#V$SFsn^u80o>IlFM?QPk682xpg3SpJCzf;>ZKQzcKLQ^5N{ZdT)!Di#k4 zJbiJh`om@9V6X@zA?isZgqdWKDk*I(J=j3xrocFNb6AA5A__fMpg*>hUaGY)fmUNp z^gBU_6(|!kfiN5|O_{tNJibKHKvR{nm3NG%?ng>!uUmRLR*faP1suQn9#2^}+v6ai zY}@FGr()xMt=E9r5{g=Eova!Ap`L$NG1j>N`r@NwFRXYDuXP66gM@VPV~H=#*OJy% zBk>_dSR(Ljc;;3E{@X`-yO)j@;99vr4g4JAI zGr5TqV-gM=MX6ryP4Igq^g{s$-^whM$c({(9a7G<1*CJ3+;!EiY)2dI^=OT<1~Fyh zqnoMlV#hP&=3r(ROHIINRfAF7vil99gnCE`LySfcb(nh&g0oULI7oGp`E!+yx<*7E zus(_Q5xM}AqSS_6r_4?Q{C>(Xp?8r-m&w=`80$4eku+yBxJe|OhDDzt;3dO*l|!#R z?*XdJbbX%rsfYn2Lcqsyi^T~HERU~+!B})(TJd56hDumkJ0w9}Mja=DtsFs788u1Z zD83JQVQ1*VlE-8o6FqA`S41xg_@q6{kAEEMR>y(h2yi-UAZO0IhMQn)Wv@}erpRw! zTb`a6BT@v|$C4K9Z_3Pt!`6ak67Bj!tmL5b__;tQXAz~)Ml03c6LG@%MF{rXZ02% zOqtN%BtrIc6|)9H6*6I{B)pbHrpE7B2Bj6Kyj4k6m_8vT-3^dyoC4Q$v0QlJ&awe& z4lrs)S`&9ot)*dk(3nv3Dpt<7)hO!^G#7(;SEDBSfyVlEPB@JNe3_@?Kk1lXlEqKI z!>ps`y?I=w7#f^&Is)mp*?!sH*wC-9F!rJMdh@yay36C!WuCP++v`Gea+Gu4&}!nM zP*4&=$teIiZVKb1A-ZP3v@Q{qCLdIYY2>8$Qx#{LXkpggN+mUUIGnDqzsYk92|) zJvg{thAfBD@rD=&a0nrVE%?4LVJh%E(hE;P1hvQ(=0^HeFtNXPc2a!Z5^**VGc*7!tri-1&Kg{^g#dg@X13)x>6I)DA&Cvm!={nmRsx{5;dYY@ zPsO5^nxn~Ju=efq^`%PWRP3@pN6oxn-Il8Q_L9kNMGd~O z8sq_sw{d?mHWFZU2NRScI_;y{A4otYqJ0uIjUamONJZpBE;eqPvjuPHUW86opqUkO zsFrjH=mrjskCA_fva%gIEmGG%GmF9R=fJK7teelDJL~O(n=G^DR0OoJxPvXRc$Xq} z7tL}5*uPDIFA0lKZs<67m@jZs{c1(3IBP!fp|oT2x>34vQo4BY^9q?sp_((;$7;z6 zg;#F2_)Uz|hI+W69$JUmq6G=5a+qE#`8wcoK(r|SMefo`}uaam{ zK~gRo(S}zW=y(L$D>zkv{ce-7?a}%qI-QJ1WAZt}0G;_wDj8iU?yF8!d!bB2p#5fI zn-%e}tZ?2qA|~TL$JqYax0?^E_;MB!uQl)A+_3MBvvGD44b!WHVq!mqNoMt9<@;EE1K0B$?>^w%b zd73y~k+u<v_7B?-ui3Y5))roRWa&sGi= zjt`_sbkwqs(NZOt@AR}sCgqXIJ>)l!f$gD{d7IWq!A>mu9y)5F5c@+-cZ=p(nl%jD z-O(gjQoZ`-*)I24edVx%&VgJoCDY>Rm_9odlTn>2Qr#uLlwzRJS4=Ivwq)lb^NKqZ zx_>bdW8swdSPfO7UWrQ;aGNm=jMd(n8H);v>*;Z4X@mm5NO-VoGB@sfQ&@Skvz~Y5|xD$WzDY01US6q!5~l_?UtOZ zgpz+ng8J&TN$uz~4fa2`bl{tf7gc3f-BM1MWO+O89vZJ|EPF2)(%ScsY}-viU9){c|?Lh}{}yoW`n-tU7h8kE7!{ zXSMSJ6$%)iwM^Az^(j#SS~UV!7o+x42eNP(HFdz)k;VXt4wB;8*J!M?)%UD1LVx}X za0qq2{~nLpEobc)T2UG*wmpR zISMUNAnH)u4SGhclN3w_i+8}qy^TQH+C^WP>rk2$mKNROp}-^H&~ky@lDF_iJwoy9 z_Ve~1Tcn)XUPpS0?;L)LGN$cs*V`{zqN<@HRsDQ6{*zQ@^^E*Lr3`;1@uBs#tNM%m z2oM%mL_QvhR9D7>#Y|rhXK&hbkY?S@8N`_s_{Sp8B#60nfy_&=J&;~|5;Y1KPufuF zZgXT4RR=X z@EXZuHd+=D>Rbr6>?Rx9+qUJo+G9B(Z|zDe++lrTCP~dBqDkEw^G2IwX#**_OtdIW zvRPuD4*7;6OUw~i-!s|}ku<8UcnvJx<ArXs*VRsPSRoT-ZEGcpBQCmAkuh4E8d`KB8F>A z?yUMwZp4G@KYQ^DeL1c2!4BTS_ojSX^VSB03SJoH@p%qTmQ!Kpr#&0Sh>+T!xLKfLY25;+-ph( zZEi!+Cw2G)yY5D9T`Ri83`<-97R(a{%ne!L;^>J0Q2zv?`~VBVM)xMNgF{p>!-`-v zPHQs#P`A<7gb>;Sur=OpS~U-oCp{Y~vpLHe`{?7~*ATYJ6(_B02dGpx*r>NDWN*XS zTVYIiW@=G*U@2;&q|N2qlH!4H z)s3jjn#pdoT?NDGzN)G+&T1{3a@e+r=YFOSSRq^vNJw-f9b1Lys86;b7oxJ;Mf$y~ z?gI<)y68D4`H8R;-9MVIcX9-Qf`_>l+nIL=ro3mC385tYfM< zi;cA}S?1||@=_M6bf_woV_R3#k4#mQ0+)n{Vn@!#$}H$Y2Tqg!Am#Y7lE_&#BXho@ z5JD7c1rz*g6nkbA*geV6O-5rkHyp#m%flzEsAUCC@~mMn23+ z(q!97f}Neo$o!3Tv%1~Oq_`$8aW*5ne(6_1-@t$7T%jUQSm9@%o+ zazfODOZzRm$-d=ITboAFNr8(F0#`#7kH#c_Mo^iIak)AJeeJ)4PbQ;5|u*CE3Pc2D^j5wSzCiIz7Qe7Ou z8$$zVHrx_i)<#I87Hl4y{E2Qk11$7F1R%nA1eEU$-Verc6uomM<<`8d;Wb{<9JRL$ zV-qmMc9$K~(Q)cnosr?49MO~Q(Y@qcZHyyLtF(QpTW5$mnJ4QB}k+Mz*V|YT*f9v5DaH-l0Pkb zwy?M*uP*w1*Vv2Rh&PHUT+MFU?5CeH)TvV85fGBV&s`Rr<1`^^CRN{)R1@Sp zHHlP6L@QZgN|b^Dd!HBc?Ss4E&R%3WyH!G4C_}_&ydf>X1-Ij56!xC=JBMXV;-66cO@ zH$fmqU_-`5YLduTp92Z!EJ?yJx?Uiwx(L}Z@ACy>%!~X}s;V%zX&q}mEM`tXlcUFW zuarBk|6dro#Q2FT+<~gqOE?WC`vo);H31o8^k)XC^;p{IM~xiN7IjXV^9DwQk)L+r ziBkK9!@zZi9A}6w+ly2=q;QB&-|M6$UOuIe$>Ic|@V<{aT(|Isk_b$+?+ZoJmV9JO zn%bB3I~odOqsasb$p(Zi_5=WP8Li$gGfF011V(mMoIA^)D7PHm(`1rO*zqYok{;`GBaXrEbL$ z_qX3goj{PTvt6002q(7Xi5>#J=*pfqb%QhyW@?1`&tIVjatOx~=z zg)Kn^j%b{ZOt*ebSo54DvTD#0w-G~BV$G2mKK?Xg@Ed|REDE00kpI_|J8d1w01^(- zbxF}DY@!2T?IARWf<2RSZDG2j+Qk3TAAcM4hr>MuuW=t~Ep~eY%st}e?TuyGzJZ6x zAlMf$JXrYtg*qR|C{!+b=rGG4eii%eEOIS-bA7a1xw?i^dRpX8RySNP9}ZK#Kbs$c z(A-|m;PLX*NJ2%9C@-?A2811#eb~?BCc_+OEaDizk%Xy@`GZ5pwlGYwE%zw2%PjO6E+nb8HBOS(rHt+GU}>91F$~b`H1IBNfek6bh&>t z8O+c>f1Fd;U4{N;N>M|2J+`@;%P!*JfEg(1lHrx4OetV_Gh(vPo(Ihn5BGMXW`#f$ z8fDy%=cP7*p2OhMOiPXpp@Z!UwK?pYNP#ngpUIF_NEWsUpa|9}w%Cq3SgOK$K@%@3 zoEG0%TZ$+XD<+1s_RgE`-eKpg<^6tX$DUHrjQIkG68n3HKedE_HO}}+bg;9lM&8zn zcK*GkoL6AiZ*aNfxn&Px^iaAo?8{A3eB9!z@nW1OeYiwRbyb!leN|f4fxy?5qbTcWHPj-f#sw z3gC$oBH+@)cF)~)Qgl=CZUPu@ix7}<$zfo>=CfAxJhsf%xU}Wo!RB%dNs6Q=Fb|OQ z`o!7=+nA@N31?_~klbAKljv?Mx_iIzf#PQ2J5&r=(_?KpV6cH;hBjb?WHKm8dWbE? z+J6ua3lVUwi0L(itd`l67J`jX>R8jyhw9I^Hs=I%K^bTGJn{a#p)oh%RWSRcaar36 zS$w|RJA8fgj@fEzeH&=PumvY~Zm+hS*MJo$wA>8aOG=$a>=-Bce}P_bXgJBb92#s4 z44af;5PnrDp^QzyA|`xZ;ra2-?oXYwc1<(ykO*ES^7vZ8J7?ukj{R=sz50}PB+r;7-DujxJPn$*Ib#DTvp=63|ZL2!Mg$1 zdW|Sl;HK!gC7YlD2cSV&$OK*TP;}-6k6JjK(>H&7>E$IR?QM?yVPmU-E5O+Ri2-k{ zy17s#COV9{&2fKq^*H)2dQk-+EQ)5-ji<%>I=XG@3O3vO9*_A4Wz%XHU_i)Fzd7Uh z$4*oxLL%q`;8Gej4kxw*i_HV3&=*Wwh)L;}p)V}rfPF%zies~40(YjJ=Est^VR|~G zNb`YKU6S9*oljK2V7jl*kM}#jbl;rs@3-s+Z+G_J1gHwD#QEV*hez)YwNcC{MdKbJ zdHAPmC~=csCD8@O1#BMt5Wgai;gVAwdEK~)k2nzY@*sy>8dkMjHknNf*S)TSHNhSH^2%=l|;RCT%x>F zH^^g(nwd5&OgOGoVw^g#Fl)Z^F$eM^KfsjKCl%Wh5rYGCE?KT5m)X^XlP*|UpLUQ- zvt}d_$t{rTK_}S+&f$>EwpPq)t(Y4}+i;--I_yV9K5Llm3COHrT*;F%oSw2kMYd-T zsUe2=`8HaMUSPtDXPbQGsc|vZA1-+=T(fDldQor?ZmcjxhRPFT^jTt8zJs`Mb+&`# zA|14}M_zQDU0t_GL`EhM+e!(52@%)hXO!hbEE;Z4O-O14y@K4EI@pZ9zOQd_&zsYCB#xJS0l0O8hdf@w znCbzj?h@{UAd15m%^)hnH+-i(BK~qw3g4I&Tyk=J5H%@M0Xcx81Jl^eA652USGj-4yrUIw;dyI~~w8bUZpC#raQ#DF4zX8bD)9D43um zQ$~TM*wD~9*a~DgN+Xs}M|tmB`@TOBaT2hE2vwXot9Q-bY*ywb<(_r%U*wIGJE1zXh;dML$*H7mYYs@%WFFcH@38zUkT0ZG#rv> zYQUw+@}8VIi*(Y@SMirGP*e3=l-6i?ubBqqE4UH-#{GpV6WXuTChfoCe%ws1v=Bsr zk+B8|BE^csh6e5BR|6EY*b~{VM?X%=#1NV%1M5dTKt@t#T@e5WUFl1*t%mN1n#}hy z*i)`=a{f`IT`RtaKPhvY%#H7=;|$N?Dh0|LfXSW4j}%tK8wLtXSFr4g8N~^O$a1m{ zvq^-mM37lbM7@AnQH!#8&@}W=9}$QcmjLD|VIw)?TXJ=iY~c)gsDxvAFPhD?g?v%UgO8pgU$hd z{(SoH_;GT2iXVr2yPZZWL}N5g&vwqvsStcSIm0hVSK#OF!R!6K!%ibMa(bNzRp&?c zlXP3jiRPyX+HXvYd!#BZF9#P(!;imI9O^6Dj{FV}ww|7bH#rKW zH*AxHjq0N1QJ~{Eo;rR#5SW2}gV2h(W2H3%ym(c+Qx%umF|n*9jGjY(quZZkeYgQD zp;#oJQCM5!fQ)neu(Wu#E&YK?PDew+dpJCDr@X=wA}tLAmf^q8dJ}PuCIq;FgOu@ zoXOn07rg)B{nm>Q_5js$Jqg`}bf9m73aGx{+F1Y43a&NYWZo;>LH7y3qWb`V#eIP5 z>pl@PyDFkXkJv}k5s`KrTb@3$&fKb?K{QAjxy0X%G}FI~)~-X$M@r082ZfF{X; z$G}U$(=G~$^FETMzDgb1j=qbYZ3&e}rr53Mj>y<<7dI2_9)XzXcF{Dq+ih$Kk%6?& z(m(z0-`~j}YfV>Qw7+SuD-~*&KfAX~vA27l*~dEky?p*0KR3R4v2K6Dw-*~PpTGR4 zjb|@6H^2F2{n-XQ-`x1-`T9Ra>wk>}m>@SBMgOD~$u;F>yKR*M zDIE8Tx|)?}H99Q+ZIX`fPf0+uXQaE%TkE;-yUyz)5^||WrxWzt?Ry1JQlMT_^Kflx zX>BcflidNM-y2}wN|iAOrjB+$n{8ISsFk>0dcr0zNCiII?Cy7V4!b*tue%5E1$bjI z-iyBDw8!o1@2zLL5&PkBk&H5U6h$x+i-u~(E%oyz8KL~f)Ilr4WZH>|*H&bLkQ1 zD#8o*0+_$ODvB1-H73h5{wg|6Dh$cgeVSy(WvYR;0bjI4kd`6j7`sHdxG2 z4wrF`V%M<2Xxv|4lAK%XUt>7H`nSWhoH}imGfgW3a5(M#?M;Snannd9L^wkQkHL`j z7z3Vs{d&={9Fu6}j1#VR?nW33=v8fjoeNkVpsJw=bU}DvT88kJipPZcxZA4edNuPl zv~!xKsD$rL*!&_Xx3tmH#pJ4JkN6Db<102)diHGN<;y2G#nrQo=P#da(D|JV#iSOf zza@b+B>z+xLyRgMT_*4ph_!S)j-%f=gOyb;8cMv-^;b+W!%7}xLoyH%L+2Y(5-D8w zjWV5V{+O0KG+$Zoe7s9O{D0Vv4$t@ZRc}Q9N+&f{nmhaZT{)>oC*2=Uj?Rxy<5xBx z(rgZOxY9WK>Z_<}O^gDO#&(CK6S@cPwtJeEZ^rqJ3?H5}*R7V>_4;@1d}K8t3))X% zKbnoYk;fbnRtE=*8ezFYgIz?R8H4DXal;ylTBD}DJ@N7B`Ptrn_w?7(v(7>bnQ5)hWd=sVcIez+JC<0#k;gK~jUN0Hxv0j$n^1z9kSZCrBkr zxkk+{DF17m!Kaou7m+mX>Nscb(PF!^f`B0Q_q>|s-B1wW ziFgU)sOE#`=0CV4?s61PsSnU-$by`{3Qc zf8Z*vtlu7tU09ZHhYcLeqP3*scy=>zymo=dIB80aS8_`zY)FB}c7fd*0|N?hnfKVJ z0nI*O#!D(po}NTe5hgV2TtS`gN2ovN;d%?4+kPif>eE*~K73UCrxyt!ZaZ496x*SYm#@=d zmiC*CWK!nH?6Uh2nuE%wM(YiA7Pa1YJ30awlV44tBD-gulY_m(owH6Wdb6{C+F^%g zGZIt1O05cUyPp&#CtxDwSm)#fXw$vJpLh26UgN}f4m!|_Pe}n_766wEcpz*(U#dE& zDZ0~|TeSLp-5??flF+DEYBeY}vZFG$NicTPvR*n}SBbR%!MqsF9fXnJZLm9IDR!wy zZoOx%=ydN#++c@{g@xzU+1Vusc-=YN>%1mAXwGk<58I)UO=VY(PT|Kee+Qidafs)j+3?rH-@eLf+N3po><;oGeM>CAUQC1C zPC94jCx_j`qr;AklimRr%_?nKH+0}sLlGZDb{zpc1=Lqba=dx474hevjjcM+b z&XWt#kA}bIJ8LjRgzpGB=7EEEFbb|dKz()ke(3zTci7$8-#>cSJ$rl7*?E1cD21QN zq#e)Un|ypqL2vntSQt?Oqdv`@!`EJGYFI4u)A_OTz78qVRGmR@J9}r{H#@+yI*4i} zk_wE{##2);P|bxO2JZb?Ge+1rwbW50Y;_8|LNpZSWIYJzR1`Y5; z&aV9eoz{MJyTJB@4dru~IDr$;{MG&k|VB-K1y`|+8wa@T5cJLmdH z46GOBc+x}HGu4PV@8?7G@WP@mpRZm3-euqJirii+(^UP9_4UQI z`Q{&=H-A2D|M5lKPKwc;YU3Hj9+B~zRM^jNt@8Uv-Lp82L4LQdDF24q z8TNmYHsrGUDB&hO#`!NtbDCU7YD}8Z)>Dy7@3(nqY{Pd)fBB2%!k<^~O;5A+{)1+> z&1%o7w6QCMIDYS{2sYWMZEtmB+MO?Zh6-eB>-FBp(LYBU(H5%tZ5g;xN+@WhC6~tj zs>dZAe#*xA@Zp*}`*3^_>GeZFs=zb#_X$;1I8ocgW2^-azU|0y7BjcBqj&lEW1(Em ztdxG^^eP$m2ORxtiSA4ZsMoGFjpIZ@Ii{#UZzqZ$U84WQfCH(vjE*0!?qbsGr77Ib zDQZ*D-q}*IC~mPyQG)Z5To_60Mj?Z-A<`(P{dg`QzDpklz=vn-U!?WVgw20Gf`M@U zv{%NoK%Sgte?|rV`W=u;{8p?)6kWgP5c6uvdwpEVz;yv*{}Rl|0y0q8;GWUoS%OcV zFiiFUMOwSvfA5?eHO(r-Hs8UI17{NH>%;s&Qa%|4tzMJ%vHFErlo`CZNlV^6K0Ar^ zX1TTYZj!6?5R;?rr^BoAnvJQZl{?@FJi2)E{PgY7$ysb>G`;>0YB>~Wxb_8g$HrLo z@T+6Hc`0M==&zjK&2#iA$S<2yVa*U`%qv=;phmeJF~C!`?tbU+$FsNHgS}H|VE3)3 z*EwNBw0<<;6+@HZG9OFcaC8uOrz0R@F-Ac^nroYUWq1Y7X2ROyJG$Vm&bzbI zcJ~20Z0&MIhj)0^Jv}G>Tp5|zTN~aZLKwC8qK8KU9C+PA*{pc#XAPGQh5rU@Oru2x zTm{6QtKDfD%~^Y2)v*BRza`aWp>g8#wr#-yD4WUqAh}U*+GuJ5pM=b2m!%HST)ncO=SH3L(WIRYlp+*YWJg!-n_$yeInLs8; z3W~;YtpvSBj`lFk%~avpTHP+IC|)Q&WA_OXot^Ied#8J*(q{~#m(MR$j5TO0qfny8 z5}1_MEG0*|9F%{yNf876f@m__R;@I;@AeK~K5t+t)irF*ZMux2Jh9zNxNCJ(h>#wQ zDfB*&!>TDA(HFA`vl+z-oBL6+5Ne`L`U2^w$$iJOg;7zX`SB<9X9=b7Y_yL7WxT=g zYGj|c7((2ALset9CKFATk%1a zptr+(_@KHEsE6gzs(0SvvKEU}8IuPpl@9BS>VRiY{mlfPxxfdH(ENa-O3z<%0bp^f zELePA0C8$9RAc52+e-Vw0AgO zq?IUhL7wv{YfJ|>LaN63z;PN#P6x|r{oB0cbXGDbT9~RCc12I2rJJI=org#D`ddUy zJEyjImot^Unv;{Q0FTewx`%$s`HjN^eVZmD42an@q(44FKiu_JR5^e_grw0d%Ee~j zJJ2$-WkSX$S{mSQYt6vx0ptA z9QE_mik`P-!gZT*wzXF(z^b~>wBbtj0fuxz4Ygs0cyr7&0|c4y8R&Y=q>i0jSA{18es!$bdnE&Ge-_UqZ%y~gDLT7@g z^9%N9Fu43c+Zv^c5=7(Hie0(hAiq#Vf)E#X&99`bg=KLycrd&_&3*cdr7~3K}^qFhE=!yzdgHn@7q;|>_7P!fSDIT<RR}o!}YOa)J%8FP223ipmuJ*^Yi&|NYe>7N6suA5o-y zJ-NBL4>=c9$8$PNM)d&@*sm+eAxE#76zSz;;OLoA2zV`-@2g^^8D5=rlllFTZWC)A78O5Lhcx?& zsYIr5L5>Zv&+=Ttwc+F9Ixm}NZ=Y@M0zN$4IpzZbw7iWD?N+uUc%n0j!?ur%tI&@^@NpVt%88mzC;s0%6+n7Sp+dOQax z)7a-ZLYa0x!y(Ev^7)QYrmfF+kTPw3zN3_BYe9!8OZZlUJZel2wA$@szaJ1tR8D)f z$iw}v7IVM~b-1u6)|@U`fm8kmwU+VRM|5TgDQ<862JK){T=$iW1sr~Xx2zhWP^rt+ zeR`PQg)iq<0Vc#0dq^NEHRw4)QK>tm5{asQjy{<+Pu1#7OgO9Q>{Jdr+C}Nr=V`e{ zN=1RAvN@=vCtSGVv|pbe3%NKgKuSHo^F>5O_ULCw40u9bv@xslY%zhuyIB$+Yb&TH zr{RDcJ@h^R$F;IRmFI+S&&KPcgPpy@wKYu6bGUQRX)GWHR82h|3^~N06e#nL=`is6 z`0VJX&S4h^u9BIUm%f`0KYh3RcISk1SvjTUc|XSt35Wh$ZVM}!miU>eVBVYpV}uKd z1EWfCJ%n9D$CYt7CAjf<1qJ_O$HUmPFKW=d@DZZvS#g)n5Hj3mS`kA9^^cc<0iMMe zHou!Wc(z%mGz{sARm0S4DhnV2Q9ER#rX9`X8g!I;atLlH5@WrA5Elz`H`9%TLRb6m zu4or|0$eUzUvKRJY!Ci8r%Z>O@379!EX>GQvoetKTZM9|kBfDB{^rfz?jErG-5=m< zH8PeC7&)nOOw*V-KmXQ4IVx}U7GtXd#$!Mze5?gi`*^&P40Tm(yQHOXMLzh%Vgi8B zi1-aeVmgs#6;NFiIU9%tCkhbjHdmCyhER3vfizcoe2{i71R0Vyq3Hv&8~8#eZa>dI zPDVRDlG~hS{deRj!l!HXd*V$_5i@f}^RLv3&OB^p=upd@v@`>4fAK>|c^_Ye-2qx;|LXg zdZ;a@Ij93ysqNye$M<#Y16>G}I1ck$yTYKdI=uQ~YBqQksfD#uC zZ+~2o%q#+=yim}?X&s0_BqG z;^-d^NBTZr)g*I9yb|!26YZ;BHY;>U=%FwwwAfyJ5c(06nO8A&(9GyTRzx*(Zp=i& zW_Gn`*n;;(VY~SJi+&2M2kq$o7Vz<79F)&O#>)n{PsNSSjKa~=X!{1K7+-jVTk+RKf%)8B@}(wB?5VdiQ_-Zf9- z|9R4(#>T%I38M06rqMo0lm5{t9TOC@qyJp>-oY_VA5sxJJR2v&0w8|T{vJ^82vf#B zWSmsd>2O-SKFrIPTwZ2FO`%<61D)0VWu4ZpMWR`MF`PTn;jaY z@v+i|SKW&(Z_{n|F<2Dxi!Z>Gd>&2a9uzqt)vZ{BYWvAhZM2@TwH=GJ^D)p4?aN#N ze*YTuAeKL!b>{w7&evQt8~TP&d{YyERa@|)abq^5lr=!Zt%(N-hQ@~jFjwrftmx`m z4?72J)u3`V`r!wwkxWAoSH4K#-#<9n8)>o_%SAecxSU^Rn zc20iooQOr4W5dJK>sAbc_K$(@J`pJGCjGwq`WRb31uzHbCPkKD1NQ9@SvNKJA4e~qRK$1&dz*pL$2W0mN z^)rX*kB?RuLIN3IL(4nWQ$j-%I<3fn$hqHzGB@5)H>{5%5IQ?W=Y26Zu!_gQhUlQo z-w+nJ?Rx7@qxH@?ic3z`7zQ*`0nd<$?QDSthlQ0DG05nhfe^inEgU#nMUdir?m((v zSu??l28R-kGBgi})s45Yu=xkC$#>h)rn@`F{J~yQfxd^YXx)PD4zhGu?r`&Suj*G8 z2z;?coo`L`S93s{0Yn{JBX-wJ>aBh+i|{77$p%`RNvpr}2C#PL%#HLs8fU}uvRgDQ zgkQISES<|Q?Xq!Q;l|TRTm4rn$?-@1e*MGTMK|Uzx;cN*XCM4%S~k)Q1X{M&BJBAf zCFXNgm>TrU9}DKb3_=m?_8`APAH~cDHuVtbfCc1sp#ZFXrAduiQ?S`*w|+quJiK!mF*%rAY?SAi<%`hIk{|7*C)xVFx_6M%u5O1HsU zRAcw(xTdSyUa(f@m(K2aT~Bw@s?acN>WybsoHD<=nhC1vGbVcH%(S0gVj%Ny(SL3z zs0;|uR8BTQRLeS9#!WIB0ZgdL{(jbQI@Gd05a3 z3%O&i9GJpvPBKqIdS7ZN8{ako3y?p)#i=i-g ztCyHmiND6%GyQz%hUw z(l&I0f{9NNdSoCm`~Jbh3eMj@%qC0Q^e`swyq53PG-Hi4FVV<1^(P9Yo17R;f#E$_ zWEObP`c{7}1Lw#AWRY{!@hfJ6g|SAkKV>X1L&A8jy(pTD^KdBOaOYl{Vmg=^CNQEq z@_9@w@xvsF6PMSl$jgL%%<*sCQ&$-EPgToikOO%-(CEgGnGtyX36!~?#nK{?y0iRT zK@jv5=>%GD?d}~0q2K4G=y(vjx%AOm)!E&{2%H0^E%t{moc2x_HJ#4Roew3~pFP`| zg;!y86RKAo+;D$1_AXwi&pS|~>1@IZybLZbn;;0?G@U^lP&7`p;7?ElwJ#Tek`N35 ztmB(75<{wW;uU*#0IfD{FAjr|f8xiOFogAS%Dxnpr5IZ5P>PPJxCtiyAQ8R+in$^U zsW`<`AaDvp=}{`cAWY}XHW2hEZvfP(IMV>B4+~!C2{B z$RvubIjaRfnFm^s78ZgZC6?7&n55Bg-ybcV5GmRB_#WUF)RTzR6V)dJK#kc_3H>Wh!ys?(aayLN6pA#uu{*j960p+*DEJ`QFj@RLyhFo;Ec!3Yz6*5x6t- zQqOGQ);EFQ`sIMV^wJ19s^ptDz+VO9u>l_+*&FyZprEE1SU9S}BpwA!M}%)K0?ZCTo`NLg!2qFSR(6RG@!$iN)xRx&w$ZFE+oCtUhciUb#5<-k?~ovEH1v$U>0P}XeoP9+CeIj zzjQKM5!ZZ18}dST-pI&%W*DBLo^W$vbDp!Ol?F)|9OrU13x-6~(r6aVl8rX;k-b5* zYNZ7vn}j{dk0(KhRu_j;bwNXexXn z^Yk3Z3}Ln=H1~Ve71L}&vD-J>P+pZ1QFs<$0xDx;mg^mtJW$o}EHIE!?#K;Xls9uZ zS(OWW`__gxT=u;U-^|%i=U%m8o2s1XjZWQZ)P^T-?c+6d)$`Qq*Uy$6eC zmShr)zMHGfGas?l*dKcsZaF8Z1{$Le${D=M!a-htW^Z)gXIqFb(w}F7Csq;(0fY!5-XcYmsfNsf)}f2`d2kHP z5XikMC$>J#c@<GypyQ^<&r4fcCgbBX~l!G?cm6WKE)H(pejnX5N&7F?!_|sDON4>p7 zm}~nc_5gu2wK=%-bUs|B=GB>i0Z=}=A2e7s|ImTqlTuhHSYn}>9}ZN>5+zO8WxSzx zeIX{asfyz5*oyL2Yz_CIc;JnL|MS^i;ZJ5vwm=Y$ckRch0|fp#z~@n{AO&(dZ>Ini zyrAYK=5JE6;gjQj@5Aaixbig|l!guMdq!j9MJcI;(tm=Pq6P_5{_DLHO4qCbS91YJ(*n5BvYZ%0VOB`X>u@%zn4ohtEr&x5=g# zvjI6Q(+tf&KWBo#FIYdbm<-Oz@9x{(|2aN&-*->Z57>FR<7_PbF!V=w>UiCyz+K(? zq~X--7Vs;LlRK8>1{0T)M>v!f;Tf!8p0Jt?al>Iln*EVcGfFTOP$(v(995hSZW<%o zP1O4)5WTO1BuMd~#6H1;C>YYsQ)aH=zVG#WXLSYb)t5v!{VKLi*FD7u4930}tF0?7 zusiF8THu5d1mE{ZoM>o0wj)8yx9%Iv9M(JPow3cyPNb?f%KE zT|j*6OCn4LfK5g|R}fzcnXTUZE-gX7j`#7Md+_dP54wq)zU%6M*$vi`G5bu2OElsn zV_2*6Nym-cEwgiljA_}8bn(p8mmLE@b{TxVFuR!g6FG)jkQr-D7dy?W*K4jhocj1= zF=xcZyZ~exc1ZfDraqEg&8GDRT4J@W6^!yI?6?<{sXJMq8gj+NhfVB!c2QQ1j|fKB zl?#VD#aB&|@>N9Cq8Ri3P4{--)0USbS&O2y*90#ms${q+!1583G6N0`0ZTWt+=dbn zo~jV<-lJLCy`7RZxE1BhqQS&nuWjoD&X*&?Q7Yfpa2$n zIc_r|;3wjJ_565SKW(gcI`!+F>qO6xSA?b{zQlL;)$x1u#yNevd+45=_Kr_`XTQUK zwA=4PA4=X@=w05@tM1|PZ-p(Dyj{4ZH@(+y@-0}NE)2Pc28TJwmZu9tE~3lhP~^0` zdx#k#^Y9DaDAP65gFJY~4hCCWf7@t3yU#>@+k54n?VXU7Sr?Ez?sxYAf7|1Q$&&}t zJ9=#e4$mI}de{AJw|8d8o?bn$jl*95tb3G$&mKPzb{GD<%7Lb*4}{$R{m4Z_;~a4D z;t}AV?!Di)!p9d6gn!UGqQUFr8jx=usfG2z7S~{~l2yQRG46;`Xx534Qz2hSmJ1>(U zSOzZUeGUuus7GD0JiRAm;hsXNM4L|j;XUCBqVFGf`@jy)-0lb1&t(ht*Y|7-gu(Z{ z!!G&hpSf?khZ%|TuNH3OH=suMG-Gh=`+dOdAOF@z_1xL61}%GhZ=lcf0H5C**iU(2 zKiwag+p&OiJNE|IY3Jc}C|F^+I*V)M7(6AW@poVBhp~^ERc{R* z+(sLIwl+8MZ|C{5w)z)-HaE65+TV3Hw$?Y=>z(zDXWzk}jpxt4bK2j1g`XK-wm8mr z7lAjKdeJy4C^zpt>r7kz{Wtkx&L?}(^ezrAE>ovIXgKTb_TQS$YtdonG#W-@Z@J~{ zq5&2bOVBhLV~7pWE5&)2aQna@agt~j(}mm6N8`YY=o+)ilZ~F|yz1|-Ch6VScg7%U zg$bJXc&Rh+Lg(B^NTX;L4u#d#Au!*gewXZ|u^lWRu8*OisXqut!GIEm0%CL}4DC*) z;{aV*reiNfn+)!z1uHKcjAww=&&)ohb@@_x=3@Xc{ZWz*;goGWyGzzEVJY@8|0cbg z`ib#4xPaX{Uo?pZSALp*9z=uGC?5LhS}?+A!joP2$h-ysUaasHJU&mbzS zHt~mnSM;{9Lo~n@ao3Tsf`b7s1eT4Xm<(bUfE6{t)lw6lYI~Rd;0iVP81bFiNw$QS zg8=LLU>U)nF6VdN*|21ZZu;VKrP3xGN|8S{ls8(Bx^U*| zh?`=F8F6jEbJS%gx}(Sm{R?J?o8j67&H(4T)eg1+jK>3Z!9q_bK3zIHY|RQNX%wlU z)%}EHDeO0*5aukjl{z=b%Wiz~q-$kYFu~CIS-o$`t{z1by9rwEIkgF(v+j^<6CvC# zM3Jm02~EIHfbp-D zoE@St;i3D()5{&pP<2=tBX%cNp>2bb5cf~_-k1Sq@lFb#(*;-LB(uS#Ah|8#Q@b!= zsNU2`_w=o;DSYnG)$bVHy@nVxhgodJ{&JEz|Bx%EAKsY&csQgqYT2;sR19Z|^La3c zVm41BeO7}=nFQys|Fd<^*ac=OFhSJ2biQk{UNr@MsV^`UeVn1mWi%TPVU1%b_X|HY zVPM&o(;Hz~n5Sbu1uC4AwK0evL5fQR)jTj=W45S*BuA5wq1q~rK1#7ifrE8#2QEb- zjm(&_oPw*Jd<6Z>0r(y8H*`{&p&2xD6pRwGmB!VYpsPJhAGY2EM9-P{9@@i?W@CiG zsG9N>jAB)anS#(}4%uTw-H|+&L7aG3J~CU7#z>e0W`q;92@sZn?a_*dnin%3579Xe zop(pQ4^5nvY*I32jWq;fgaW#a)CEPTY8R$UQ*0gjhJcm5g#7Kei8yxK8F?W5f%NDP zyjembBC#-lo}NzY=IhiK?HzN;K?Ucgk?mSPN`@1YHYxuPf+E@#AY1AnyKp}KSrVyl_*SnJGb z@7R@LUFwK*gT=qdcEd_lMJ3IYMVW#ovK4vXg2|56Ie;t5V|xQGlJLS`I1e(7ee(EY zujWDilBtRd=7P*DoXnpI8lko1TJu2UD{FHj%Tv7Cx$o>KPHJ=}H!RP=^9)7*bY-sKfF2apMA<^5Uj533xXJnq$+442s2RsCg0MX z6yG;6Iy=JSDIv1CAs=W2i38m-0RJ@=|~ZBj6g(HCT-EgoqJ5N?@wsuiDRA@)OChTr__?Q!I+CW-sYqP zp=f11=6P!BwzmyE9|)V`tjg-kWQ_4xC1;@UXuuH=mdYg>YWWP_=ldzpWM4T<&(%5& zMEO8UmGUL_IvjTrG80u8|Q@Zj8nZBdMK2T5j8Y-XC>1(C)6U{NeHxmKi6@Y$0|=Dk+v~S4U|}FFK8Bw}5OO0h9<=s! z$Jwwgzm?ThhRpIG?PXhci;~S#`-L-v+PiKynp-xnRK5i z*hx_qh07^%aA1+n+uc1Oe^_M;DO#u=j#4~badh!?#ZkpmAqFw^yR*VRH0eVoP_PNd zg@G>q~adyF01JV@2?6%6! zdLlqVF!AC$DPs>joc-sh_vN7!hR*-aV0eEOM|g|?Q?xy;`<>}&0J!z=MWdw zAzt)27%{Hr41=K}47JScIkH1CWzsx?L%oya=lTmR(6ugz>D0mM<(PQyqybiH5@{O@lIC8#@ ztx1^*VU|QBzjxj$<(*C%{hdh|BWAE9OL_QTkQbe|XYcT$n?j%t_$@d0)3~|0X$7mv zAojgUD~d1BKLZ87i`Y9~D_1dbIdGEBDk>@2$u0~Aw6-$2505#{j=W`(*WtxRBV3+@ zlVI%sgZ`+RLMd(HOa6`-3CvY|k`Vtypx7wO!^^Q|$H6*RZZw_#@!qfQ{_E4-xB49| zE3T^^wSBX+x8Y!VSI2&~@E7AvjzCi?ee?p2Y<{4$h4wjw1>o2_-h16UfN24p#qte< zeAFBQD``x9U9lNIQR^4Zmf$3_hl?&>K4vHFV3KIXW|Wx`)jD74kj>RFaR`*dqtD|hsD&2OG;P=3=TTd-YAH z{n|Y|g-U-=6DZ$jk8utt)$@5EpucaTi4U)xPOI(IJ8#d|EQyS**FbWF>;VInoFa$d#D1zd2on8@M3T5SBJ7^LfJzoooDUna^k=| z&G8Vb1@i%!$oD1#KItB57L^KZ#3ke=S!1xcODvhg(easc45wk@>Z>mu83jhRhIVzj z-SeDY;d~YBgNvo|-NA=Bl@CfPpUrDHt6DyP+S?Y&zIOYk+Qz1^X4~Vv51WExJDhEs zMa~*}AFzqCJ`f7_?jsuIRS%1+0;=V8u`flH&wlG2?S3e)&&tdJ;bLOkDsZS^F|aux zDo=v;w$g$&cI(d=pHQ3T&x#utm8vw4Wku`EF7?h?Z#{ecDgfC(osCAVR?D`I(IA`d zr|>e8*#n^AYmzH#O+{O5psedfm5h}t1oF zL4uJYX&2g@0GHf<^|x{;?N#92zR#f z+)W_bZs%B;Xd7M`gUxHq?|!>o+W&T25Fo#xv)1QRM>JDN9@Y@irxFJ!6LP=$N>f~~ z1aS`b_j~#EhEE^5-2TK4=K9m?cDp~d*E^j@;~^5Fd+?_7LI^-C!Y-VZD9pbD$E0ae z1;&1#!`P=xHBO&F@(Uo?eJo0GTra|Ly*iHTb{yB|;kdqC4gNDb{AcsvKdT78Q$*zX zRPI!4V!en)^NF;+{nyxyt7MvQ7h1`X%E$4}BTVAPf`ns;=U4r)%I@ZMuwC|~amBDn7Y|a`dCrkG3PZGfW z36X~a>+0sZ83h{|4r7J`ylEjXFT_GEF#i^%yWiVwI`sh=1*Q##l2s?H8gNpVcGP9Z zdY3)38mozVb|t68oNrV5?Q`zE^Dn-me;_NSTy<@EOZ3*a^QIU@px-P8x>I79ohQ#y zxlUTsc7F_lPiS;VK$?t#!RrQlqMtTw>>VR5@@ ziGsS3NX~j>XvT`GN64NNC0h$rOA}Es9m>L8Ijgyl;#NlFW~v+?YCyR-FO zdmY|)zQup~8b3c&i~Y2eFV}ev%La}Qq4T@v#Q~JChKKs$v7$r$P!=3&saC7O!k3Xs zOw$B-y|e_+qBvy<5u<3FhzA%?Uwn?_)7TfElG(Y4+996YB}-^)038{Rc}6RTzr!QQ zkjxmDSecf1!$awqPp1j7+x%l<#jq058)X2}YC#FAEy}nmEZ(4~uuJhh_WdyMhxQT} znA%MvH)Qx*%isY9$uUY?Oax~ygh`Fic@=#a*#QF6HrdO9IOFcWJ2~ura1U^oo>%D2 z?%~1QLhp`#Jv#pFsGyu0Y zy0#ZPL3@@2gWQ)DVhtTe(ba5PR_^x=koQ~{CPVDGt~VaLF6{IlYv|v7(05OE&)(EN zp-2eZ*(3Y_98Ar_lTthy)TO02yM6cU%_&HaeZc?HOT09V>p00_>(m7U_ss1b zyL-p)j$lu=)G-qfvT8_{@_MxDj`M(cY}+QvJ|e(#zUT0! z&w`&H_WEzS`xzLD+N`{38kIy)bEAfMY%7j2$}PoDyL<1=;vycn+c7H0P~?R*)(dK^ zn>A!SZKHyGZdPE?`Hj-_&|1<4J9}YP5dq4L3gU6DIK{#@3)4dzGBBkqnCKJI4A*T` zz(+KjWb$N8FO2@Y!GMQn#XQ10+;cxpk{v!s*OO#NP@fJ=lw);ggFOmC{Mgy#pJx-n zXLg=7};`bX?hpNJI@=B&QVE_;LfLy$X0*gYKN8xm&7w+Qz(SS(iFY|1v4q8 zzKoBSo6g5&ARzo*2I4J$Y7_z*&BkL14Zkpm2qj-frniN{34CFhYxVZ!b3y`>pduD5 z{2qP^hGU=pMmJuNYN#nmfdMsa<2v6zdPcA*n=OL!uDxLFoin&x3c!yToD2V=qYF0l z*kjJ{e8kbl1Exs?b_qm%Z93G`CVB2)!1cyYFAsWhy!lP@O-6wt(^dYxqh zUS&WVP0>b-@{ha2FC+M2n5bUYvEYC>0t~AL??rOsO^q&qRNsfEMkY=2-4=jxz(nto zAjGJJv$P>{6T_)MA%#&&^j|d0J5TZ1b{x@FtW-)AhCvx61W!w_B^%Mr z)>oih9`=L9JEeP>Zsv2qq`^rr2?hvA;#_aQasAS}4x%`B zqZx&Mu8Si1y6EFzg6pd`PKN%qv${7BR}fLmI)WQ~b|i0|L{mSkLnT-lm;QLXgH9Fj zIUT|}*-;DjPP!!_e4v6K$7Y2F-|-Pxlb6BG3{x>pW+8>xtV?|(oV{Ksu}O?dA8%Vj zA5|Y1Ry1`29S7++2+bKjh5^ayH85U@G4lMz&YaZO zUK~VlqQEuBZ4V5dAgA*ny>*$zkDoM|9YQ>tVt8N7l;vsp+Da=Bre|U2~b|`Oxws z<|=WqQ7}$fcvj+ZBIxV65C1SZw==+S)G$4gh}4A~LXbLmc}KBsV}FE7I%jz}TE+=A z!8p9|R|KOKlYqxY`N&pPhL}berGpI_`9nU$MVgg(q1;ih)W;K~=`;#(Gan@w@4V?m zFmI5hh-#_@0IP@h4$BzMbXm9G5pSL4WwjE65w@Kx?}1`MtN8v$K0Ry!j)4n-m(&JH8IPTB4K+9bt5WI$l!i3(rT-13=# zy9JD}$E7MX>%eG6EhD4=^(>or^^BU07S+t#ONlrj@y5mP*$;RHAl7HR|-7I&^~5??LL7ur86`97k1mQvY_akAR<> z&114P&?6ZEVKW|M@)u<}Wj0W9`Mmbi%uvLs2gz(|7*heGOJ@za>vHoGHp~B6JD82f zwHM~)jIEcoH{N)p7sV?YW(l@W@5(+K;b5axyR#%ht8f;hoy;t5uqy* z`Y8Qc8qa`Ltd0=!C>oEWo0bA>97R`&gOR(LjW1N8JuY-+;V>G|dIv1xMT<^Mr3a(Rha=ko>2VK96%IFPtS`T4x7sLbyl5{s=5O@~r-`>CO$Q+`gKgwWlPPI8W0$iN z>wfld+y1>b$Ftp!~r_cNsrtV6adPwG%<*aGxo3jvEt7Rg5+<$ zGa;Ln8zRH!$W3cp{W}B3WN}?aN{+~3_Y9Y!D(Isx{NxhiD zv}f)=E6kT>W##II{C~2=q$#`=dIGS5x|u5j>vBD3ztgms;WSJ|3nPkC4|&QbRCHk9 zhvY^U#di%9L=$!{q$sB(zBO7V9LgOf!SH3&AT0|@vRQq+p049$G$6=aU}$O=64$|m zL0LjBgPAGw7Ae%qCa*@ve9j$Nyh#C!Tg(whtBJ>(B3PO!l@*rwJk|IaA1A|p${2NO zL7jIc$nq(|rx+|7nDszEfmuYx)7hH&jg@m)DUWXV^zF)KhlrJ3HyKB1!cDUP7ZlYA z5&AF{Pn5+?-v{2{(ns?xu^L>LEX-X#rS%aL9Yvu$80wE*zR8egUVk%XRcvoEbXXDv zo%>{HVOG3L5N7a@!? ziZkwIuvzx7z#>u(qk)i#wJIgrimKCD8Ip&igx#Hsj4X5yG)RX5Q_*Y$SW-59Er&Eh zp@vuHumWp2!ExfjXKt=43Smv^L{fiCl}`hgvH1^&W10Lsk+^aalltnkOScH|a9OX5!vDJW`gnz27- znL1&k^v;uLJWCl(Z2Ob|7bH-$4$v&S)DKvAa5F?}PM$_;NJ;H5%gT)8!|@EHu~nw% znZTf&BdMbB;`=fq8(TVb5=)BF)4va4XL&|fWI zWgyh@OZkOW&Su1NoyVI|vdyHqdAy4ed@fM6Tot&Ak!1mF>$Y5PeAG-kKQ1ePmOp)( zx2{-rIs19fTqy7oq&v{JGgs2;kGzf%^_0Yy?ZrcGVeJMY#VRIw%M7U&OW~j=o zFaMaV{g^D{9b--&YD&SZ(Xhz`Qjb*55|pb%c6Py=$DL)&z`m@nRJ7MEzBJA+j(bco z1@_WoPq9auUXL@i%BNK}rA+y3v8iJ>k%s zEEj2MBZ;LEQEyILc-k&Fq_T5(#Z3xJjypZIft=?2kr1%`!9@x<)bD zW&d>K=oFY6O1YO1d^^B-B)YJm<_awAAioxBnUSx7pM0V1=z8(O<8l$AndPtqG!H=* zEZZBK_@(I`8rW8zUgYPZ&M&kEqjWrEP3CNEuAT=e+N8OZb8=%{`A%A6%x8(_1;~<^ ztyLbGdcDp+W0pDeq&|Qj?o{1wI4@tqslMU-%TbGAkwznb-9PbCIBmpO3{HD%@ON#R zCTlCq^o%#EojtH9a87h)Y~inZjcTo|tgV=54tA;~E(b*#@X4i?c6K=6La|?MR5Oe& zpJ+EZE}?7Va?_|x6VC6qp$8~h!9n7xUL#(;2JMh3@Io6t-86G8$@1EAPD7hhq`$Ck z7Yv26=1El`cOkq`*tcO+fu5?{Q+^LAUKd#@%BO}G;>JorH>ppboE4|jUeChlUQY^& zlRH(exHuxB<4KH{q)?16b<@uZz$%@Y(`{z0lw($83Q?66Fc>;7z(lqn2`vAz?2P@3 zApOOuGhGWMkey}5cf4Z(rAxf=?(z}JRIgYvOhD|K2wGL~!U4mjb(~kWk@>JNf=?}}2CMLlI0@Eg+7FfrF9-pzMrE5E*)&<@ zgf(_mC#Uu|^Bj&u&A9NYkrf3MY>gujnClJO4bLL?QQ0gY6CWI6I0w|@8d>tZaQbfV z;I#X?wem-@(ptf~FY2w8#vh@@pvQU&$DX3qpwMN>1`WLxbzuBA+Rrw>#sB*nKP=pFr5Jz|;@ukK51v0# zkUxM_66FsAqb~ix4ZoeAPwwDkAGR)EE-i_;rYmYpUG=^wE1*Y>UvbFtbNjzl+?l)n zN$_P1VDLrO|N66yO*8)IM(6qSZ|nct`p>O@o|}T--C}qac~Ls`t+d)yj2 zQRJU8fY%yOfD5C}q;Q1X{wP7U57PSv8 zw1BMGN=*b_e*(Z{5cY=iGyc+Z4^_;;VNC~;Pxk_S!5aW?JdOr+XxqpkL9cn-YAYT` z(OVu>YoTT^EOH_h*S|M*0gWe+8TRL!srW6BzB}Z2L_3usACz7sM?s4h*L?NsOT_G%j zfi>l(R@$O!J0q{?r=19vVb${T@E(@rDbLl|l2zs`FS=Lr6KyI`MsS!;O+I;mlMuM# z`>_g>2fJ=v+j0UXl)0Veajt)DJyT76;!g&XY27-j6@X2r6!)Tm1+ACY82N8@p^up^=4ATv}bC|-bMxN;j@G@X?Q{^(ucBI8ODaZZ6nV7ap2brVcO zZXF~j6qTy;&NZ;WQv|m95`MY*_KZL3E9a$=6N>}PS6R4GB<1``B=26PY6G0^4M{te z91Y7nNvF^TMnIcpuM)IKcmj{Gd6yAbO+q4Dcv82u(IANFG}l&1X-oShr8AVW6dzgY zG+?}ui;-TCAHXbJeR(yaD(vCE{*{l?0Civ@xtzC})rQf;gMFl=A{=7UXb_EaRmF>j z)w6tCN8Q$_eY2CP>5BNVmDS3$b2PN@%N;X5{Um$9n4Nv1{mkasM#l>MiA3LX$?v_< zFy@T4G@Q10ms@6CYo^wWc8^Vrkx7iv;}B!&`|&+#A*)s-#b;A?c@S;3if78!f8kWw zDxND_|CW7AR| zBc0qG!Uy-rzmWp0R#JHTWS!Gq(*iAi9hblMMlKKaSXhLjsm&`S&MRd=PKN|Us@CwK12?rFd4p7i#e+VL^wY(m-6u)1fvh zpqH&ptD;cBN0!WEw17&g01Y}j1Vkn$0Pc<~$O)c4)wGVln)t36vp;yYQur@%n{hDx z2yEmN6yl$Z0%Q@0?z8UO-4CC(HSj?QBbz<4vIPDj&kXnroeju0z!Omjr&0YFeA>1O zs%-76CzftOsc;D3cTsrZ;;7(3Ja=q!$pDliElY=|=Kw~*k;m@3UTMcuDiJK2}abvda`I8#1J*1?Ok!IUw z*H_P<8libg*4;ll?e4y{A;8&F#+nRm3IB_3lBSMaZ5ly*Z*F--y+OTO18S_kOkIP! zSfo6KROgte*`cM6mo>WT16rqQWf)n0A;>a8t5AV5uzD$O|I3_A*%u_TE>>XDM=c zy;e_x1{^++H?W!4ux~!!3lMhxZ;GU5bvA8`~D@XRF z#9gV_zDmySaFGA8wUQJpEfP`dfamH<_(iv5tMbAbN!Nhy;?_)*BDjr4!2-}qZ7-Fx z;CEqwhHUOWc|9KV_x+JK8>e+%*}7<)>Kynn7}Ig`Z^D>rush(IV~n0fOwpE^wU&A0 z`j6&axk6*b03^@gJ}de{GN2-bOCwXhiDRQ~z>xI@W}u&W!$Hd*?D*+#RHXDbvHnJR z!P?7d{Bmd2TsKs0oV~QQkK)$hn~&FH*?(Vt5&Q3Ud$axA^#53IZ+)}>{;S!4|Jyi! z6y7O*^Zs~%|JQxpKj!&=Y;10BnEoH_XY1eA|2O}SIsPAN8sQ@U59f^1I3*Oj7M<}& zl+|#B%2Egzoby3?r=tA=3tXn@GA;9))})b}sunKBD=-XxFhure(I^K~6r9>r(HFtcR_AiNZPOSTnzXX%Y7UM(#t zR?yREI>Rg)ykcFNyP7^JbQz{KqB(qE+#xyu8<;Q)V*Bm2&FMqLNl}duZZ5HhhNH(7 ztmhUs0p~fbMd9bsCMOR{YiByrFarUQ0e+N=yWye|9@0)Y9 z!%%-nJOg=VDEkm+nH*A?DF?IfZ97k%=rmh>c?-vC%y{~J(KzNt?;wgNUdpWw)YQ&R zr>0F!f;$NkvQMkc8EbvA0+|ryH9Jn)QL7{D{MAJvW;rH_z$Y$xZ;>cbXLkMg(X=yX zRc}X`b(ZFrbvw$gN5!Cp%!~q6WyWfAo<4=S`1I-R$ee_?Bcl4yOFbNJ!o)V5x1&;X zHZnq^oVo+pGT_@IZW#*qxbQGatBbsh93{voxM{WeGU=&Xzxz4scWyj?8yJTD+|uk8 zt*{reU(0(0R5#UEP4T(y037+5Q5|dsB40^niYNIbIho;C_JYkXX{nDi!zfpG*;mwH zZ7+RUlQ@PW#cZN*hH0cuLkiB@J2^Q$K09{L_D=MeKUsI}UUfS2;Wi?Qfr0-19QfVU zw!P_h`xTm=4XZT0|N69~Wo}5oycIJ7@_~bAKXv}LF4;Y9PtItEB+8-XmIgVfoI*ruWpC-g72Pz-WXKB@`NpqGdnfNVb8#7jc{MkmH7$&Vf<-#S8Qy@cgn2+S!=+*a#!^Tl z4N|N?GEDO_#wm?7ih8;=ucupc5Zuc9v$c|~d-irK?+um#EA8;of|h3YvoI^MEVC`3 zGE1`iS&-$}R8@sj_&@vQI(}!AUYq7H^niUJ%RoDOl(f1C!yQij^ zg7B}=W65M{sxN2kU~jU`6h(Pu4kmkERGBjq%A6Tf=FALb&WtN_X47i=6ZJizQKDhd zzAvC`DYSPhbWmDcDZ^u*SJt{HdXiGr2bsBHTz21^6sSK`vej70+I-zhrY)(^{_rBM z);txgJ+l7g%PU|Cbs0sf_UdYkZ^{~CHZ9(ttDcDjY;Kf&&*RZjB{OEx7Cusf#0V?pg$$A(*&5k2MOKA7zN=NXK+Y_W z^%P=-LsTf}3ZvqjRk0$_s`u==V9Sl)n}%;?Uclv&k718*6?EAcsl~>*)X-#HoO8X2 z&0?ndp*dgvZER=oR5|!h6n+)y)R+c^7RFyhG*%if6@aC|-O~NyGv}gyw<>R)lkAaPd?8Pa_LcZP#szwHfv`2IG2R+%t zL{Pvm6i`{MI#aF4xKm9FLIeeOptZHU1v_SUrBqYy^zyEP{dx|-Fi5Vnlvs;{K*|gz zm>blmXd@1ZLKbU#VC`92+r`_Fd2zkbCL z-{1?$f6q6bwYNn6ug?0$vv2a>H~FuMAJ7|r4D8Su%|agiQ%qINGRae;j;1_3(D6 zq9+k<&&Jc>BJ>Qfqd{nE>3T9jKYentSzB{L9|Y|oDZ8&HX_R{7ya&+Gzb0#TUWJ@^ zV2j6W<<_(^Ov9!o^x-!C$)y)VV^A`|pc_2uBVgoB8%+mfH3L`J>k{$@dZa`(Kd>EN zC=buxukRnfdv(~Yrww);k~UiDHEh-c=c&WL%<$Wq(_#Fe)oz$jUY)JK?RWR;=KutL zwXpmOl}8};`V5X1TbnMt?Z`ZdP=KCqtmE@Pq`m~}k794&ynN|wtT&tn`v89>23h<2 z-M!wg-NX02BX`~1>mKg)-u1C3_0(B))}L>5SS=KFLOe{lbUVA>eUBOu2}OJA)Yf3I z*TUI&T$7QI&?92!5q}WgJMOF}SN)?mqPb`(N4g4!xlBuW5RAtOa5<$2uf*LDLpjd@ zVoTnfPlEH0o1e7H_U!HwU$#FvJI>zOq5Et1^eB7W!N>TBk}+q`*R|(pqLRJaz;_fB zSvDs<$?^wbB^U$aMRhV?SZM&LrnAX1BsZNWSYN+6)qTLUt4|7;8b-eb>17{)Vh;8i zhpr*ru(&R*b~L>Z@mJL&_^`}p_RYyQ5*?IaDfUV#wk>TYFEcD%zUjOme zwz9MzruZ>0Byh3Q zIRgX5%ywAc(Os zp6g!+(JXNgrIuonl=(AX$UDUnTcNpb%(-5ugXLXds5TlhL@M-ecqht6MOp@Zfk9D+ z!IBBj+9ze=W*P0Wway%PaY3xj+trO-iH=tvK74S($U)67j4epB!)@e4Q0v?~hoPT% zS8(ui5_Wcr#6}jRbmn@c(7)62G81c~}5eyn><0USWIM;;en%qGCd z65@D%cpb!1h!4!G6LBag>|5xHam4*8WF`+k1;7yX=N$voNoEce7xr0xjJX0o zyJqL*HA9s}4+4m{ZNIV+o4;bBG;xoFlbQ2Gl+(oAV2qP5Jw9J`>jI9xBDFI)2muOa zg%@QYG{6vZ-wP%Wl5X9S_(r{6lZ-%@{AB%f9Vjv_y+b{ZDz3lg0K;ssoft#!pX7=epQru9wE76gT5T$oIXMFfEJ6X8c= zylBC%eBfz^|Dz3qkBTxl7$(lSpWgU>s6Y~1%n-I1Z*VE*jo|c_I!7(%ZOi%1OOq&+v8Z0Gt&MKu z)fXE4)9%q3i6#YkxYVob^88yy zN-gQhK}R?v-3&hpO2aUVOcM*2QBCQ!V0I>!n5j`FC_I7+4f=Mp`?gzAk0xj$vgaZh zvZICEPI;-^cB&mNBFpiD*pC0g7I{YASc!YRAW3F^vi7(3b4x^~9r9Oz`C&35PQ+q1 zRI3&HUs^%^QSJ{>O)1ESp^~_`${Zn~XM^coJ)1;wL^!{kJA}$C{al=-&t@A^HA`Qnm*NoU zM5$!zV;eX>Bmzr-V^nO--e)oGnr=TTr!cHn^*aEldNnOSl4vB?WUXF~@=)7Djh z6y@Y7r~G}W&SNCfA)|og3`r7@rSg)Dy`|cQU5$}6L@*pA0A4OSXzj)1YIdNnn8m|1To7nE{gONTk*`D;fBz7Bwz^vGo-Mr*ETP~ujhfK zJ6Xx|A#~#rk}i}TPjN}w&!)Myvx8|~!YHscuPWJjq4VMGp-`HT;{E0_7+k{Mune+? zOzy$dB|;1oK(NUG7OS&&^3EC1#eJY%mMSp@(r5~&nTtD{LaapdMc3X-R;Ou-xui!BUzr8Bnmt&!-)PYo9&G7%1ozB z9)e5-sXTOGfWm3_?A@sd6_r!1aJz4ZSxgIs7d|Q=B}D-Fw-1R3k^*W6^3@#lT7wheo)S# z+jEqp-oI@+@87y_yJy`~eoM|US28hO_`JyrKNa8Vjl#Hc&hz$qr`^e5u`AO=jUk38 zDUY)luQGB7zH;@h@~4f$WqNtjLPi0jh1s`>2>BVUALZHUtCD=cTUpLpS#H!CIY~gn z=z7v3hk+J+xOUk{GcJl4ijjXfin@!lj&Cszi{dZlYSx2n_F5Uo7wm_Q%c4EOwU+gQ zue`503>g9@>h}21g<875J+IVZ;wo8>1(PZ1GAoj8memN0Tq|n^zkOZ0X6;v)5~HMr zQBm*?6|v>~CHv$)HtSGZRPnQDgs&$hH{jQk{Eh1Oc|GL<7}nWl00(5T8#IcvgW7KY zEB{fB4|RPHBs~_}2q&AMJ5L?@662SK(hyVilO6mL55i^_=W|YURRwurnvZf6Ej*Z>FmB8E92Ggs4!^F3 zF^|Sb-P8T!qr=~uPE8ai3m|`3Qx99iV)X|s!af~;?D2>s z5)IONphi}QKTq6803f1?fdE{ZjI>RsLoDKFokL*x!8l6bAUL#HTofZ)cwDcUINYZ% z240o+9o8UnaWP}&TAV!k-osjMEH5UC@R==8r%7(d{R^WGEia1uHCv5{yI7ZBpX?lo zd*RLr&p-ZY*c+r@DnEBg&6X(fv$6HtS1|3^X1HSwbd|+v6$6&CM6)0Z^m>gs;s9g# z?N6<%{#a3!kaQy z=qeZ$Uf2fHsYOwjkK;*~XiaAjrVlp;DTz;%zu`soyLrc(Q+rGtIZEnCi0nd^;TiC1RL)VpAm>Gc$Rr3#25;EET0LUl{;Q|r`}i!0QGSajdQyhJvZ*_*LVjr#lFP81scaEQ z+3kcfbc>{LHf|xLgXkCGbY=vUg}5DZoQ&NR@xF4#_H~U>Y^*A8`1V)fRTk+ZH)Be) z5vkjSin(G4uS+9jXSN=S9mqY+KA(aqr|^|7`cH+y7*tn09%Im6N>j%A4N|)0H>Bxkmt%-@Yh`I_o%rO4NY(+7^WR ze&!DxjVdw&-pKm#Dl|_!p=D|ax|Pq3!IZ5%Qc3d~kLMgdf1no-i)byIa*?*|%F;m8 zhxlU#%B>Hh+4FP|h_}QlG zSTxU8&Dubjva*0pFip;ocUySQ0(5#J-3E2XTK>ABGDj88!|dni$n$@G9H~H?P9X|8 zqJu<+AM3)j1)&sj;j#$(Cct~pH)jBsb!qh_?6e5i#+LJw(Fn57adQT8$^xoOgL?ijtuqg4BcqnRYamk>e#SIR^3x#gI>av>M;>rdkX(15jLQ76z%y zB#(w3yj`V4=@y08c!x0U3}i$L5d{^*SUMl~yYEp1a?wEYQ84F-o!!b+bf^n!JB-W!mov1Q`;44%U1Q;*m~-R`i`aCycwaG2bH>rveqgh7J0muc*UiN}K{nY*!^Q&sn4+BiU9 z>!tpLE2XnNq3I|~M1#KI9-URpo5HEfb>dIlX&M`v2x}2V6{5ViS!`lY%C>(KIa2_@ z`UM+;U2{^1PnqCQ7(ceM9jD;}LL3^7K5^zR!Y_vryma+g7Ty=x_3(_x=(_aK+ZK*J zq&P?ap3w1cy~%X!w~BNxFf=#85S37-{#UYa%;WJ9gPMI(eGmP3l1SeU9`wKyaEg6~ zv^Ur22n-#Zr{I?5K)_(H1=>(&-C2>Q9xR2+_QENxG)?%|NM`Ugbn1_wQKyK1kFTa; zU@Le8R8gs0N0;3t`F349O=!|0EdSA7R?PZoPFr3iTmWJD{c1n{u=2mRtMnVr+hQs< zS)@QX8oOx&+FpHmg`vYzFHZB~MtLPTY^ljTeV0{!krf3HSXUKZMxXf&6jSe`=Pss4c%65NZVPt zw`$f3D&BLBC~B@dSrj9P+LDe@>N!G?E^*MH`i1on#ko)IV;F`0ru_gJLrIG#a z!S1`mvpMbX?7k0c>iyC2{=5#+o&3X^>HoHSGN%>1(|st}-uL#pbE$^shle$E^5*yc zoMzA@`k}qq-JjbRZ}`A*c|C7bE*{pvyQ5!^j($J*%GcY|ef6;tqNC%kVj#diT61x8zN` zSF)7stcT&=#Ayya?gW%pb{HJ_u^$e6(@URu85qi?!44VfW~@`?s|u9!M8` z7JFNS;4XBOejB zu=~Dy=>GPmxA&%rB>r`v8uS?*Y-qow<@NNNe^ z-7znIgKVCDu*d!GS-(D8k*4<+h>=%2-Gh!0(!?c-g4V6hWY>)1Sh9~9z> zL#`O+>hnYHjHsQ*xHBqGd^A`8)BnrxgdqEv`2TRFQH91YB$J?|J$`Dpm?(YokNibe zC3fM|j%$o%;BVPZX~Ze5(UZHr|Bo4x(mn8!w4T9$W4wPm1vF7phP|g!4uu${SU9RL z!uJ`_64u2@m~Ym7-92-0)z%d_na#t%8xJU@B@YamT+tg`&42Hn9@n3UZg1N!a`?!Z z93dNr0OQ5jv4Ye2TLmk|0MJV8EVx};gG1)j-1|dHLr4$E+#(<)0P5{oJ~{pHCxTJqrj&djFxLJC#Ivwp#opj z_c#X3a|b>os-ub)iG$}jG?J-Uqi+|vTYq;to?Tq{ z!xApZL6rub@CMVM#j$LSgAsX?^NJNis#JrGxAtU2%e(U^z`X%p#}djaO%{M%V1$jj zI7gBp!&z&lp>N#x2vpi>Ki^y`ic&hqC+;Xpdw9`|H?{sy*ewABPI0k1HL2FwZmV zFKcczqsN)e#OnI<4UAVsR|V0?8F}LX5N*xv74`#r)}ryK+A%6z(k*(QU7w4u_Iz*u z%hDZ`u5(085K~q#r18gEnCiOW6aULCQcQ%4M^A0LqMQKP3Z>B8y9qws_Xo~;yYrJ1 zh2uL~y=_c{ep0=GqI!7>%4-gVXypP+T>!`AU31iI8)1bAzUjx3ob_yl@r0Zr8Xk*xDwl zk`ULmxhoAzeHq4K%Wz^NWaD9-gL*xc!%%9PX5NP|k+~3Bm59Qz(`jR;i?v&paGhnm zBvE-u5uLsWZ<&SI5(`o54YTF|&;Q=uTHktx zz~2|}H_Q6XF8mr)6#ll71h46uLK_Apmqf-w;X(+lV^eS-Nj!Hr zn@Tr0@y5km%NTKYCGk3qrGIJ;h_ZI#t?S2#|I6i>HUSE8)LU1a?=pxid0sTAcbdun z@v;+tf>}_YN)wRDo-;oh(NnA6rbb=fMLhUrD126%KrTteMC%=#cK^Tr-*dB#AuA3n)OWT5>$?YT@2Gp$bo$48zqWWdXv2!S%FDjv9IhGQbS_5|>!T;!M0jWd}IE`@^)Kor@aWg^Rd?|AR^Veeq? z_~?M8j^sT?(qe<5JMt#M7~_vaFWw#XPr5v1hEiheT_}kIu|LG9pjS=V!qL087<&N9 zH|BH|@bAw;(s=An(R7n?ua1K&pVT5#kEL0sTZa+mvt${oFMU#tvNNrGnaFrKG38Xm zLoKizp01C&oaFn=AU@r3Hcj#uQ9~ABwh<<%m7=*~8C%JOG@y+#;^OdOc;(Sx9&us) zDOpNo1Aq)aw$ghn^;Bz~SLZnf@%_(O7L`PbJwvSURk3y(2u*Q`WlJr`JQU_@(25sP zy(SPy#;tNbG0JO?Vl4n9*l2*2#j7t7FTqvy%nyW_@bwYv3Sn)tH5H>H8|-;}x=7>a zsfi8M(Shg3Y8}3h7*6oWBr^%yOPBR5q6-I>;Dy1im?QXqA(ROwkmXH5uk| zf*VRXjS1Rqnk~@z-ub=m0cfp|Bd#y^Z(a7|8w)+$2ToxzuWm=Rz{ zVU^mm^EmQ`>?vXW#h$*Wv%DaNUchcX4oWnZkjw;UHIUIx_AMd`0=$rY&q}PZ8gQjWnLmoHvnHRP!SxmM6{mss=vRQq<3Q< zL5+ifA0|Evu{-cWG^`lGseCAM!X5VZx<~!4gKOw1v3G;H;gk9_p~w)a!vbtEof3~J5=Vnk!o5GanrVgmO%_9iMN}PV z4k|Kc0g|P`VVdj&u#LStt|C~WFA^zPn{jM3Be2k+`uZPysrA3Uv9+}+?*BUL8_#I{ zKU@E{{=cpNdFvl59n3-&%*w%>hruWqkj|86XKnHMTW<({A*9d#+3CBzvv;T6eM$}M zbW{Vw{4*F8Qs=y%WDSG}`7Y7e%Uy(*VPb49e5hr6e* zyI5jt)9oL>JKgKbh{l!fj2P3f+!>{wAvcc(A-juGE|KK6UR%m&0wn1jy>|QE-P64{ z?yGkP#R%rxnsq>(eB=$J$PmRgYMLb0yBW%Q<7?Wp#eq}gB-BMbk$ zg!hRq?<0$EQnY{oJ^-sOmy2$T-w3D7_){Y!+T21&3bh;YyB1BlKH? zvB~BFOMb=pfbS%z;Kj{}#)uE^2#4P`LHK(P7FYpVZBfE5{wN3~7Z8O}ALWTwZ|If* z@k!Cp8pd)qPL0wm4W-A7_yA3ue@9vBPf4yWQjy55PB-oSM`T8OWSHP9u^(V1|eS`XwwwSGf#A zCtLmUfP>K7WiX98KCB~ZNb#o}R8zFr6hkE57%@TOYIn@jOe-CN-O|Y+iH0wRnE3Tr^f3 z!?S71O2bBptdHv01MyR{Fh4)qH#IF#AY%@Br*N2o{#AV>XLQr)ce}r$6EB70suM1a zk`U(i@{A>ye3Zedm$H{?}9j&M?$czTca&&&X$7c zM9j5(2OZ0Qj+sMw?%IW!o#Q|UpBh$YXF`|6NNZ#xB(laKsOSqNWi!Q21#__0s1h?i=non}&X9hStb-33Ya|_L>e=u-tN02w{N$K0iJ}R-DHaN9+*v1dv5W6RIy0c4IRJ8`n7_xN zGcbZehUF*>Ymcv@gfU_SRE4+ZBwaFBK-)FoeyY4$#A_88teZht%&DhoY>Fh)h+1qp z$LM*oi5&MQvXEd|-YAxUh5@r;$b=IPAi;(Sg8~jODJSTp(0$0od2g5v41qb488Lij zbx+MOP|S=2uxP3N3p8<@5kIpb42DTUQ$v%6gfd0lITDxpP#_!eJwTAr(1q~Dz`+_k zUx^ya#z_nQ%Hh%*H<#OmK6@~41gvT)x{zl9a=CL`fy2&ugnvqL5 zR}4P!omLlP^c@SRqR)X}a(hypLac7AqmHj31_q$NC@8tLX_m}I3;kZAST0wKE+c#9 z;O@uZOSF+<6AIKgQ>-n0f3P87?hkvI#X;zU#$!L03Wfm%lTKrAK+%h)@QN`*#^8mv zm4s@#$6|h&l220nZBMXAGFRh}>5Wv^HnQscB&(j`I2W*P36jZX2f$#oSU0q$qykwY z)Wq$e%{&cng2XotlN5{_&y+!eAb^bR?;g6n!;_75HPnvizl^7o^TQP6XS?2D5XD0zBaTL{x3$y&+lA@LY}${Q1TbpKwdaMY0IHxbN9G_0cUr1bV!_=Aib3PswV0T169f) zUET2ybG)2<-1(*+wTw@EZ$nUaUAQB{#^bb=zAzww0_^TPS(X4CoUbE81d z5=P-F9XDlr6%~339j9DT&As*q&~r9c_M>QCn9!VT2_sW;qMbTLZV@5NWJ*I!;F7?5 zsQ*u=-L(C4KHpcU&`zwy=hfoPm>)2C7ma-|chZ!^G4`W5DxUnAbdGw5mHU1tHyTC$ zpt-Hon#M*Xo^x<*P$c8{cx z+9!^WCnqVu=j42l=mnQTZsf%m*K(DLJqTmH!vV{3;Q5lASmhwvH2{}57=NpFC!n8> z)NTLTivw~HHZ;Z=-%-vs3f98gno-np$YBBF;A_?bYLmk#bIBZ0`$PY%844OSbceC@la$nXJK5zm()NU&=38n@_hMjEQCDz3@>hc+FxsY;8K{ zK^E1LBtp;GSXZA`$%)RoR2Mrnt&Jy79Oe69(f*h$h@&`+`~0u(`_+rLp9C4UvN6}o6>euU2283K(O$_1SdyK1{5Kequ{*6u0&B7OYt#YS*lP( z_S#`FZ2uNbeSuN~Zhx1KT|<)m{CxZYF+b?#pTVMyUe(&dDPa4-gJnMWJuQ&&$Y zw1)Vs*c~U43MmQF84JP#(~XLvc>+!^>@tgV0v`s^WWr-9|74)2$ckHw7TsTYfCmV`JBVoUU z6HD3lq|6OlZN0Nqw$^ean^}X6{BBsf8Dh|(JZn?82CmHyEeueydfF^=3$AHyW{yoL zMK+3@g0W(8Gho}C24dq8?Q^TJDISwKgC-{M0E0eg#eey8?f=F23!};hH~`GC|6lL4J2d_s zoC42r{MWa>`G5Td?SBv9xD?+xuVQ}|j0=r_@%iHRzc%AvI%v(c|F_ueqRA{8*;?{` z%8%PDOolaGrLgtP*C$C4xUlwy3!{y+Fa`~S1e^^J|({=fNc|NplC&)xsAz{%K4F@*D~ zbpM$|!`T?sW*`p?SsrtATY;uZWQOb+yL8o`Q6Sp+k>lW5kSmrCIwu`+syX`LA=u*Q zL!o-}&u4(W-CHRClvKI!n2e5*PVW!;?uywE?89mqu`e6Nt|vfnYFd`Oo}^Lgjky@5 zmJcpM&%pianmUQ;F68zJHD{xd9s*!^t~PPhLvNWk$NjUaA@v5A{!oRmck-@(wtLp? zJ5S&<_Fj01{n|Y}>K@91`;-ROqz+9*Y=ygZu}VfE+>%9`T+qWuw8g43FP?g97*Y_+ z@>cPy8>W$0Z|L(;DRbk+VZ8zP!(%9>xOuf&Yw%Bqh)jEmK3_#8rcn~yYLNv``sgd_ z{(5q@zJL7g)nT`uHk^9u{P2V0CjP*A>afo<{IceB82f9r8#s~%khAwH4EWVbuQ?F@ zB@YD!Q)lN9e-Pd~=xdPPNo`Z|=#9u&ilmEz84XM?bzzRXI7X`KS*BlMU*RoNiIJA)cM=G^c~}_WBgsysnsK3#N67Mw75SeFW~=1t?9@nIB+E*Pa4C&I(rU4 zPGrJcXXu9k8bahl{Ok@;DZEeb1p-PeZ7bkoitUeZ@sfb@>Za+vz#AIz1B%{Xw_UDg zb$Lw0rF$LrvP_8w0mh*7)FQmnxrZ7^=$+7`1H_g+*XblU|5%z|BZr63>0-?`+70cU z9TK0}mXAC57$1=@YxaCydyZM*vUeN!PUc_4C!3!*7TKd`_^6XzsbT@zcdLXLUWQZfp>C!m;;p#Z|}vhWC}IO-;ulAkV+2Vv^uux*viW9fXAtG41?jkc># zVswkPO=5DWe)W6RX>2Yg#H3-&?RFN+67R+2>;dWZ1|`uOev_PCcJMHDSsIDDSOjd| zKf$oNat)Y%IEznu^{P!YT)!G=jz^6~77wwCEqnoJNflh&4Fn9EaUmsh`7|UUu1537 zKvx=9BQ1&dLkPnntPbe*Z4u--D4d<2zl^N0d(!JazIdVRW)IUNW}M|zZ~=!BLgVc) zobHgv$UAo2;b?_00}{tM!vkI%%`gzQfFn#M$Yg=RLMAhvp`{3UpGt%{f07q_WM06a zgqdqmh*k`VthmRVik#o0895mN=bwT+h1cdJ4O0j!?k|a1>kvi4qK+00HGExT5>lVK z0iV5ze-p)54Vm)z7>*t@l0%xzqL~Ydl2x|VqCS&1tOe##&7!o0-fkZhR5&>N-4}06uam`>YO~JJ85ny+p%oc8RTV(OOWw9Wox396Z2O979~ag0ns4%34GsYx(>irY4%H zDS26|c_hDpDXz$Xh?@bW6;iF9u^2NVxEd`RWQvv)FPLbIJxr`0IMJChZ`z?D$a0p~ zr9)2I58|ww-s7;l%TRa}d5L5Sf2L^~+Bvgb)!nT1XJi5u561!(P7;k!u7G7yoWoxZ zp4{Y8AlNEpgPmZ&UE(N}habNv>>D-2`P#At*-bKr0qX{V{K*)B*fddZ!Em(F0=7B?C!#3*WCIk8G-^d!l=$ojthVq zzxsh|T%tvZzsfpM2n)t! zvzW4K9kq{^0rN1%jB{1uIArI`bc)-F9H;OaVud7z<$MR}mkinP%$mz32*MwPBC~j+ zYr92EQ@nhYmjLgC5gsj(*)P9U6ffSiY(Zi>7PNe1G;>QEkVzlkNhZo*+D2wS9*l}k zQvpK~G-}rhRpX>&CXR1UXFf{l9bi4+#eI?d8oVS>3UU;eM^mqvAi~d@@y5+7wGzI#c{zG~+3Y&D9WAV(|G|PYo!g zy!pF3n+AXX-H+EpI3_($$$3NlqsV+HTIdFI?=|Cg6BaQFf;qZX5+BQCb8}{GjR(Fp zk8Wi~Ip9UD^^teIel;Z%af&a_kxgUm6zsv1XvSIf8rsh3T;uk}4~e)S%lux2OOTNE zP}jSuZrFyBbIdiFwXv1k&{4*Sq`3(!9oR0%t&@HmWoVdD8SyY5{R|vw;@&3$bUl~} zt=c9wG{@)rD%6?Kls{7V0vMn5FX?yxr{0+}`01qG+V3kbKCp+3u}EVsF~$xS6xmj> zBh)d5`q_UkF?2>&tgyE7@vVrB@6IJx?E*fzFscB_mn@{3(0es*FaJEF&d>n0=Ym5sBi91x~7crz$a3(YP;; z&3r_rt&n$ilsbl}UAugP%HhE(=Y-TTTt4n}V9AXa99gs{Mp-1u@4o1CyMy6YYA{W4 zDoEk$gqOE5)J;!@#r4$t9ICgJk4H5N?&PN*kJ_J(zocc)hol$P3Ln4?2DQ`g+uim_ zXOI1Ox7XVHsg3GesXp&qt^d8sWSJlD7c8+DaJvW3>WCe$0&%%gyzO_#R}UK^%-FV+O%@asE`L7 z@xJ)~*)WJABvE+FLs> ze=*jVuSOjZu^bh*v%!k8=&EsXS+@D>bLV;*Uq;r8^g%=qNHz`^6yB$ucNmtnL*@vT zglwXEv{h>CJMIBBdj~wFT!--u+_tz)N)|FV09ZD%ys zkAT+HH9?oAyW`LaMxWl=kD!1|shK=PJly*@fzV5h&5ZpZQ-b`cn**Xeu+P!AY!Pxr zO|pu7@@W~<;4c|QAIliId>R7sxUt7Gnyp&>vjeByZ2|wQv+rqFFW#tiXXlfv*jlsX zXK+D?J&k3SAb;`3%CwNfuaaVxt?6z7Wv?C{9(Fo*r9k8=_5a-3Z+~>&Vc^w*3RS7b zS~>xC$?EBhl`D_vk2vL%o*2Ici#c=ns+QWK|V1;?Yo-02L6-VfM z$y~Bt!gNP8S$IKR>{HN_+V7b28jsc{#ff<-IglOpT$ zO9&YgGyiDFO%Q(HL)z8qHVDo#D>TraM0Wp>f_Az8s#r z>*xM#Jwzj8*ckQUcZZE18m4Vy*b1Q>DIbI6AGJPV4E)1(SG6s|mrQ}k4jy{&$h&Ci zCMvUq=m2-89=l6gCVkxA8Izh>UotE_)}-473q`QXhb{5$&)z(?K~b_H^W^{BU!SXT zVvh_!)-eDB{o`;`^dV_>#|ii1YIZ=WwY6&- zRJ8&sEY_qBP;8lW$sSqH!<5uThZF=$8mA_*!K>Yg5< z30n^#w{amAJZev2XE_d5Qgq(;Vc*G;{EjA&KEATllTT%|(Kh8w!mZ91L4 zgBkwNQsl#7Z?AQT3Fuc>(|`%p1vEErG%3RAs@h&XW}j&Pr*HbSWIO~C=AaZ*IX7Vq zFXL+2_9Yz2hv7}$yRF|+c2Htt;q*XkrVtf|6!v_rlu1vyl}kC2JN~c}5>OMHAxp+8 z{*2;6S5&J5tS<+BAe)6G0%_{3$YMHkJyIHN25~}mX|&M{OnB5-gGnGg&fQ4HEYD9rkS;V098ag6o z{IuKo#M8O+m@s*VX?ZWrd@jg0*goa)LuyRvY@sWEEGw<&!;ovgO6aKXq8`hM?si?a(vtO z{;{CAKNRPV+qER z+OnZ3hzeb>fR5}ck0y9cQy)d@Bf=)!!s-!gy|6ZaQ!Dy2m<>67jC!sUnlyJ;3>r4o zD#(aZ{6%EWmkziO4_9g8;Fhi_`~30R+c8IhH{21e-`o3ufn8Ox0bV4-5YUKikXTm< zCP)S(BbZ${$TZ@YYL$d$)KeVrV!93vr-!Phn=$}O56_jYTT45#3)E)jJ}|*J>nCH- zWY&g~29r~V;z41dyA4S~wVGwBpAN{_dg;OFYuGuy-nQtY$dAh{!!oOy-Nl?Vn@oI4u!=4$8l>Rea6*Xwqj zZm-+cri(+5NS}q9$OE*&_(1~1pM?%RwzIHA=Hg>s+|)1UPgu~i8m(O6>=~BppT^-! zRAh+)Ke2EGe!oa0XS!3VVAZU2im>m6o!?sC9Lh#w)QFwiM4ozGHLWbj5LCDhO=D4U z6=c*rGvI{jX7BBs0VcWo_`#CiDA{kD68Ke$EmAGxb#k@1=iF_5mLZaP74Jm<3dUqt?9#ZqWH3d8C~t1Y@XYu9 zZZ{X#7{@zu#-oDwDLNIFL3X89NJ?vkb6U%1P7E_Erjglg-FX`CZK<}b;X;eG?0&-_ z38^5ZuD|>A>CVeOyBT_jvw;zQI@7`;{B-7Y_l{3@rL?4+Z^HS=@x(_HKzyBX#(!M<8O7>J zEb%W%T&3T3b4=oKA$2JqUgW)K4PL1h6FFfcvY{jPjt8Bi_NMxpv^V~);-rwypa9u6 zI^ZSdo}yURoYI(7mx3}?n8N@bT^L;gwWal8h^=f^GNPnACE?9+N0dd4>E zxum;HG#N%@(zFhjH}!Oi$TIqV5mwAZK3S{6AS(#~Nt#lzR8qVeIRqKK%<78dv9X%j z!IaDMnlr(|dOtJ6mH`Y31B6!*N*5&0^P^3%@sv#FJabfPTepzLqY=JN;t6=P2pz>v z^m&Xb4jy=g#u(=ozEKO`ME=~%FCCrV&e0{5@j#S9x~TXKy{6LCuvXkaj+03!OOS~g zz#4Vt-jwS~Q%tWZ&@gi>rIS0->a=1u1+VOAqL6O{q=t|5R%*PvGC?fXR z$k4@9eyP*c-F(E1{zPSbiN2W+Oj4`TVSf@9F0SkG&3t&t{U7F^t@y^Dqsy3F1m-5< z_(O?oqD44I`|nSmJ_!lRMvYn8sMavozROa(Djf#nId2WWN=+)In7^wi$bV^_$`$63 z8}ichRencCg#0D@uDlJRt5^hCy^2#`jHlq--!lHU>wjKE|MGG>UH``B7VMMFMsuU_6#xC(#eZ+StXVBM0%z9Gt{eG(j!ZA>&!1WE zM4VmfgQX`%Ygz8tfEU-e9=p?Xw;n_nw3C5#UZ*E(b8mP#^Wh|0#|Zap2i|$KaHHGx zjpo+I%OC2O^XX*enHnG76usRP_ho=57lnKuUv$~^Pw`79fm+z*C#hzg&^HD+Crlt2BXb5TwC&UmK4Ztc z0)^a2VFC z=iX5D`0~fYU^d1N?Q!J&1E((19`inj@J&c!Fe>kG5k=%AyKXEVYQ@9IyY_=cEXp$% z3ck-e2Pf^n_5U~H+dwec=~ZOxPWfGfW$9PO4Rvk(OkSz8)y}kFHgS}q&fRI2AMojdhiYr8=0I6BQ z8W44I+?d;|Z0&3{%1j0#Sh70&=R{;1SydNK#y;L$I$Wh@QIImZ8zu-7+bVB7VlXg< z;j#h1hD5;G?zAPKco=zljfGyQ-QHZHA$}F#{D`ISf+z_OBI9g`ZO_W6ms2Q(C>SxE zhwg~fCQl{ACFFFcG!fEUq{U1tyt|@^F{o@}356D)>XW9fkKlNf!EuF}YFI%O}2O;_$xf6W{ zn>R@^B6{$6E3)4opnINaMRM%S@<;gYWZ%$Mk%gvdua{jz^I9hD6s_eSWRdsK(cN=o zG>>9BmG@P1!phB7%}`EXdwu~>^a2GmZHY3mGwSwNj_oAXuARK7~< zQD%f08>>K4g{n_N#wGF}bo@k<1#jXomLR@Y7T{&_pO;(Pn*3+GvH2wbd6NI=@*naw zW*ZXQ=X!|dwsr2$$;6cTA>+G6ya2BD7VStwvcRD@(_5QZ6g%TC$aU+?`<`-0xFbxQ zFi$&3Z($-Y44?yMiI6>}DaCypU?B9F=dlz+998fc={uP{EEBbiSZW;(awQB%{SsGb zDt|(kYs_fDlG;ae9~cCx=Tm1qLx$YJBK9cb58R+AqXk8(d2U@ozg|R>7uQ&q82ZX0 z&n=|ju?Q{8Y?Gjx9|@?q9R~uy#z#)t7+`3`TZtAkyp@jXJe%T}GT%AP?RTAl7p}6mR}q>;HlVXOq{DEUtz{V z@&m>Z$MPfGt?c*0K}Syf&%qZwS|;g(CFvl|3zs-vq7xE)GJEOWtOE?DdzyKXKP056 zv8X0orkco_(pCg`nN|qxxb-!u==NC8FPVp4Wg5O@f;QCV5h!L0Ix#y)D{I!(c+Lsu6siPhe!ZEnw;0 zoE9#Dj7->-U0%3!MPkqGakYtt z7DTc9$>G+#*{bZmW*PzPk#sTS`4H&(&+KT>-wI_KHT;5d&fVosQUX+d(BS?GFt&#U zy?h@VCkI+?x%2ocf;A@IjAJ80sv ztM2U(j(L1#O$&&?xf!~_P9T>+QEauAxKFJw4^V7*6_QW`B#hkmWvycR-@d`UYNDx*z#vfrSjnSx;^7$;JrxM;zffGhIw zHoj|yf<%-Cay-TyGs#>A6!S)i?q_oziXb%83+brp9IxZqhaq!0U57@HdT?OHscs-1 zv3KDR_1MjMml6~~z~(t;3=uFoTLj}TWo%XfS}4>k)A2%EdIOnJm)+RH^$ac?yXl0F zF+o!>^eGiCF~2On&bk!r1NZ{k$y7T-*~h?9Thy#Z+l~F>=y%h~>QRX<9&C01m=c4D zym2fwCNhN}55Q{!e{hA7ZqfIos3lx%sJ<)k8LA;CE;?D>0Pa@_lykbDiA@aSN=GBD z_|&-^Ma}IM!xo%gvJI$BHi_w3L|=rDohv5%?+{9MEm&?DU~v2or_@sDuN&~sTl{8P$* z(Fq%;>JjWe3-G_O^Rh|!zxlGcy~FJPb{d;c`2U3eIrz_g(OaEQfNn=ey{<+9%0tu-csCLxt7*M=FT zWI1wqeDGmZ6U>BKfq3YV7Y`#poTu^@?3%~a&G1xe1A=oDhFN5sLvdCz6*)Hu>_0Ga z9y*)}UP|>1v@@JLJiGvgpK7|q0Ipm*_-VVAUPHtiO+Wd*Of$yGrKJ|cD*22ec;&0cJ(3{;nwTxzxrMHzj5@-ZvJ z|3A?EXBqw9-rCvG>Hl_f>xuq9(SMEq&tBopEPbJ`PDR{mEB9fTSCsMzuPC_YT;}%< z-1B`H=ezLC)<28bWig`jNHWEr#GZH6+^*sJ&JWH@o&i%oX2}O{F1=Y| zcBJhUCBd)>z|@@b%bo8x$<;=4(Vxb@?}{u3q>ZH1!oon^)Jb~tN!<#R0(K_dfm%N` z_UMKz;)NpDH(arVLk!W0?~~`>%R6^gvMt*2P$9@`$Tw)>3K~j0l~}$Dt_))?XXM~k zWixG86IsG@Rp`K1efhldKq^zk`|Vj$@7^i+@LyUA1uPB~JWhJpmEC11T!~1Q4OAkm zCDM|bm63JuZ9$1lRzp)dX>C%NiSHW?D0z%CvQ0L?ET#quynO>B)6LQI*QMG;=O7Ib z)!t(HGQq~6brOz9NsXG7E}a_A#I%IVm$EP@Sk~CPTQpy3(J*&l*%85H;VeH-R^C?Q zouGzoG}2<J2#?M;Hvi_mO4rY#M(fe2+j?qUsVGNBLDUb9BNJAsYPij9zN)Q7JxTr`$r`Jz}n zN-PSEtcTG!gaU%MA|qWxJ1EzXiiunv`5mS%7w!QyQO|-m5l1Hs3XIP_R%+MEr|ApcVP=?R` z;3Uo1OQoV^r8EoC#Y|2GyqNi)owOs&2#k5#SW4XukvBIj8Wj~47myQ@?BSJ_^}UEZ z`F4@P^>HYXxinG9*hu8`YcyTw#&z!LLh%{uJcZk{{1k4YF>&lBs%8ii)9~sr5r6l6Wy@HJhOe^*s(l*ZUTt5)+Gq1;c?<(cu zq?b74EdiN~Q$Wd+iG}aE=Xh>hcIvP$xfS6wc8-rvdV`)b*gMW7bbM}g`1J~1UM(oX zM_c1klX;v!!)X@6ur9nLGQ0}#5Z1GtNsud+$jOxMzj-oEbK8)!L!5B)dL}R6m!d#7 znXopwr{AgoT~FJY>^wO`^=Y?%+}`UPblUsXq~@6Ck}}BRqNUxA4c*Eq28jh`c?Odz zhI~_BayD&o$d8h{3ljqeR;NqT)aw3>*slPbo9j)?(XvVUDswc+Z(^cn za}-(ML!8wbo4i`e=cw7u@QH0}(U>AJPkIn@L-Q=DRLUSF%|~+c2AZO0_VRrnGnV0h zJ|!+g4i~#vj;F~XuMBg-7`_y;Fw zjUqDP5{7yzWl-+{%T_R%P`Q$Arr*moB{@Su@sVjLd8;qi({{j0?f}AjLw%>2jqWqE z(PPeRJ{gGPlmy6JsR2|8_q7e94>NP4Hnf%!0Y&&A-F?28BIDoDcZAQ}J@Zm!^Nw@L z#;zoGw9qVKS5CGv3zur+v+7#-Dv8o`J+5jq5MdVWcJGQ4iUeq2??Xct7Gq!kE4Z&pR4{+iWu zPWF4;hFt9wWh&;jhwjryt&}>jp7`^l`2trtb zC|F!vN*(cQ2qiR8jR#P3`xZ?!X5rcza1B~s6S6xA*WQMHx{Fe>CQUvI0fzUN%wt>{ zHDqEYaXf7e>V;oMfQ?1wR(sa}-`>%?ytdS z_j7=?GD&l&3K=%g=?uVA`NepI8DGX>cIwCBlKh~G^qC~jV(ZqB=8nUh7?f!f_X$0j zX$3DIJ%dQ`(Nb)d37S|c)#jHHi8Wa?zYlUWziLX3B+1k$FR=|`%)=9K7A4aJ%B|R= zXfV_2B-GFh_(`aeJ{ptodly`;(lNM*5*JgT;e1|=3p^n zH!c8V;_`roV{bmZM9XS%E5I!rP06BAz)64zV-ncz)-)I`0G_EgzYIn(w>ny4d*cG} zjx_f!4_S8g(ZrwnXp8bzB)YOX-2tj8RWqLRAebz-?SW^$);@|?T|@E^mJdyb<(!O- z?rK}3mI#B`|Ev~J$OUt+z^Oi=vkG+=bOnRmfl(h}{iVA?z?K=noqN-|Wesruz=Z;B zgeU|hxBHHng($XzQ7OX(>^~p%?Cc78C|+V-g+GPGk8V-q1p_76wSiC>_HSqy95DCBy%qHl91Qm6UZ5qQc-jr-oW>IhPe6_lZ6 z(@OO?5%6Qt0Q{JFh)OQBeeMn2Ma)9wGPnp*H0hwgvoPDSm~PPk&AJ-qiD4Kn5vF!E z6hMGQeU=0E(!IvmjovJ&EQYu)J4L{LUR$I4fpiz+$w4-ZiN={{j*W;&3CDT<-!i$z z6^Ri^hM3H#&k{FQE4&K@hwU7JzR?7YaGTqMp{+lCzI|(L*$ju#xF7LY9T-(&c4s=s zghwJHFcmb2JtSny-bphpXbqs!$tYpx!`LjTsVeG6GbE6}HLg&epvE-wWwuC&BJEN; z1gI|zf{qZiYjzEto05fK9Uz_zz4E0`58Za=3CNRC85T%72`uI8vy%fzDJqCR?S&+J zbz0H15tC{^<|w<_TpSRSX;!Jh;eFiMj~QcopGi9v_Xs~Qy&?8y)Af24LpZ)1#3LMkLVv1gGG@HmTC0w1(pg>WmRh798_Gnk; zLVhvwAgz=4z%3itj?_k#wPj1@%UZtgRaU}?F&mkLaWZIk+UN{ayOK$LkxU_*Qv?yE z)fD29qJp~C@4@ukPjwlz*@3f=Cen``R;UVfnOa4&W|c7DD$E*llZQc4q)KAS)vM6f z^OU7<%V{&N!unN6HR~bC$Wsxy_1`e2*J7Y6l7i_P@t<)!c;LKVimMH#X|s1W`dW^*&?tohm6sRc@^t^cTa+V+OAv zmhuUhVb$*7z@M|C9Es6!LQM28Y??XYz>Mnw3|@6f6&rx)G0_z{XXxsTEm*pA{OqCU ziB%YJF?uOx1sPzVbuMz2wPDNF+fi_r&C+dfnXw&>saT$s<+qhHwjFi(Dmog{Zsa95C=o2Zi|o zdx?5ESszB6Ia#*eSPC82Y$GXCGXu{lnJEH>YUFvM|bv7qB4BI9jAU zBX1aaL}tI^IHzV0$XnLL@f&Nbt?iomUeo@+lL{~$i~2mP0Zh<4U%QtDLMZJ_ERr|7 z_M>1%b0c#~EDv=Kuf!|enO9oM8!^TI^}V?!sOyk0&B!*H7^6R$DPntj8qRN@n4l*n z=!pq>L?%e^5#DESxL`(k=+}8C1}QCveP2f62(Hn2T1&>aW~JPdiAy3h`PaWJ1LIUk z3jQ*T&|`5Z`NwPu$vHApfIP}!b?rtztueVEF?VV~{pDjkHAbX!B~3kTT1v%=2Fqt< zt9K@He5Ujjz=_Jtp4<^5#BpXTB5S^MJ0`@>EY0QsU_hV03!XgVh$e>pB3;`gHUna<}#nH*{BaFSzS>A9?h@!#+KoN3bv7nze_E;X4hgF6vh*oP9!j|AI3mx7aH`OuaFcc zm!rj{xG&c#BjEkmTultD3Lk}sepYz-{3_HL+3nxVQohpciN=|viV0vV(|215*CJ>h zaguZZAbd<$$vGKYzRD}n5)_SsXlWMQ@U)sW&S+$C}APf#gej?aV{>iprD=dfN+Uxjf~8IX>o;Ona~a=1@QWJFA8ebrHgmY zm<2u*Y}=)ac0s_jC;DRwH;I#}=~;~IlT@@)1f)R@Po^m?>n1|5kfA4YBeJ1@mB*E< zG7}DAzOsQvDniFx#d+n~X4A>OK&7)g!R5V04YZxH(@@%%c0a|1n7G%dmRZ0LjH8KU zww72@_^gnuO69z$5Ybb}1|sQtFSVp?YLXh06q&@>Voj#o0zRpldTe5n0h?YXKJ#;5 z_52b31i1Sg;D)ek)@?|--?h_6F%hLZFe>Mtk;>Yj-xrhJ9%dMR!|BpY#`U@U_1!KBbE}&)kAGfy~ z+WEh|`IP_h>HL34Itadf&1oL-v_ijZa@mZl`)9qAeRg90)avdZwk>hb{P#b>mg4`& zkFOq>0cMH+SMz0q<$r155%3b}|K`R{;|c%2E&l(tkv@GmN6CFjXD2DiWb5Rl^)vdj zrxBEsM^)EOQaQTzy7-2{S8b75N`xupn)HUwz+2HO@nLH z`Iu{;c0Y7`XI*pM#q4Sp+|0~1yFKTm*Bdzdos+!UHNLf_@)c*qSvD=I(@qv?xhuCLdg^NRH@i+h@%_ zu(Gp=-3zZ|oSApM-XQ{a?M@hAr-!YR_id-s9kk!KPb{a#V5t!xiV+BaD`{2pLZd7& zGztaoRn>FOyY~A|7Y+Y=XU^cKlXh#rFAD(yAnT3w-ka~kkPe{lJ{ldgKc7{rhsS$o z{lSTitwQ4f;wp!66@iq5iO@~EyPwkuX>i!OIJ(q2n2G7$M7Jh)5(kND3gfSbaFLy0 zTwi8@6I%hsgBP`dc+D)XJwwW29slecwf?7f;(TnM^gF#SN>n!`3-Y~*=SEfTG6RSg zGM6J^ZxO<*qQ6-xoiCd4_>pJ4`W5C`5W|dKXoVL{Rbc`$v(d7opg3bx9-b&+aW-m} z6gOHirpO60g}x|!+t>fLa7Qr3bGHAJpZ0DRe-jKH`9tPmimMWn9RMM9XT7KR8#70? zDJnRgQ=}Rny-XLg8Lo8&tAt)Ow$^Sd79K@J4baS>5c&OpMHcp=vZ1DswmHY`lY`#L zQLDSxCSZ@DX9RRM@`57 zTfGdPfFtj^yO>IGs$@X?U^tH^DKLVLna#&&MNp-^4__#H*7D$4T9_!-gs$hz1T_Qv zZH0iZfVLAdpNTx6=`*Arx1`thFHlc}$$~F~8(91qJocv^S}KtX;YwRby4Ban}3hG@)&4_wY6D8iw0mCV251-YlgLvDs47vno-Zho8x9l z>`54p!+mMIOu?(g3MVpach< z!?x4^sda+fKx^Onm;B`Hq%&wQiFn8Kti9uQ*J*$1^aq{pdumv6G#2|Nfd-?berz3f z_8o>Y4*WQ6FAsIJZm||R!5)j_TeX?(!n3p=&1*Elid5;WVY37zH+jkU1o~)Q-pF_& zLX$c?nYp?YbKU8o%3UWdiJlsc5Dl*Eyr+Y~(l`CYH_Kr3jNm;}P6*Y8hGw((;aR34 z9CwFqJSTN_m9*#WlM^_oJKg^2!9i!Q)9wzOcks1+V)E`|Zd=hU)BL;Exqop1XvLkM zt1p=QI$;Zdh~Wk7x-ndnkC@Zg*xb$y(UdOjb6_6KVV1JN%$CJgN?a$4CxdO@gVXNb z0N9tDnV{oLsPo|*1VZ@HyA7h(rozI4XXw|V#x<5BGoCOCkRWHxdC0tM-P9EQHMW}D z>wgc<*WGv+j{MD+jq{D>-zVOdsYZ)YNm!Yw=gwl`?C!bb*3YasF!+G?Il#LbZdFq= zcp_f}Rxr!1sW_6o^TkEAqT!9T_BLl`cdbe>{i*mDvjAXKsiAM8h6?|cCU(B(9_Yfw ztABcY+&dYx_j5Kt>w;p)MS%z)Puuzzcpwfv%$C&ylw04RR6JnEdrZn6bx;?kK#ob1~H4} z6Xg=#6$74@0syU2BNIRmqY4VDP|r8IPOlnC7}g@M7|Cfr z%j<9sSYdfeY*C4uQtvMcG?i+nb9ngS16*j7=i1?0NB3>gA{Q4si(prlDEICbHZQhW zq8PS0_hvPH(cmnD)u0>qG|okn5(c1+jmD-@T{U82mP{GcubQT40GxVy2ej7V#AbiB zN9ceiH@63kxqOy{BwV`tn5=+qKCpc|b8pH6e5V(inw8m&IYA#y9l-wEJ8ZX3aV zNHx<{+rtouKar|X@WrZkp<)kBi5Dd*8~%uu~5y2DC>?T-}31uA0q8w!NpuT zfEB;-1CtIkDaKk=Ce~$_teU0%Vxg%k6}#v{pY~PuK2H~9xZpYGh+opBoAu5`R=;fS z?8rCr=Q3=V@kK5ym79hRP+8-p9$rzhF~eovolMdnIBvx@QOib!PlL(GnWC~Fx!_P2 zK{yAvS!56j%CT19957 z>cua{@+d*Ni^5TtNY8`E8(HlDUS9h#Fbov=368KB#lY5i@R@Q@Q}CkzW7y%LcM+h( zAqp^j8Mo8*yt@$9&E_`Ml$HsI3vrD{@Uz-)A2|oD&fy;1sXKeELpu5UvKvl*H0>S< zFlnCceCJyXLiHw@Sf>*YA~^kcwIujLuFx~V4<_?G3@(xbmyyS~y1BEhVr)usveM3E zTvEet3gUO?unM z(5=vxAj25UCb!5r-@qj@67nq;#B8(%Qx+>n8m+$}=nh#eGa%onDkn5yHeM05;*y@J zY!#+jDqWf>l#FQ-%3e9flOPOl={S1L{L%cmJfAKPfCx9H(PD`6Xkf5nf8<5vo)u4m z8`zK9P1Z1%iSiF!9LMH+> zx+0|fwh9cBLP?5SWdp0s94pI%uCa5WhV4?b9Ep^+_%qwqBh=50`xRE=%(JGXWk)|% z@>%v%hgMfCb&3>doT;~w-lI}S4ix@YHybedBgO@xzY}>OR5USEB0mlROmtO)y)*JD z1{4$M;C>=S7;|DsB-OI_EIO_rcoynin1=~&o$B|AM)-TJTihw`94_A^-@?NAw4yIgiKK2ezkJ_d@WW|t0L8Vk!xn<4VR7_FD z6kr*Mn2~I+cXWKx?)TgKcL%rzr#UQc443DM>jZ|~9@UXh%V#W|!~F^|6ryXczG zjJds!M(emwS=wvu%09$qV(twK=#1KY91<4?!2Np00wv15*h?mWi+K95Y{#vWe%m?j zb-IJTiH0C22!!DP4%Y*OfsuzJ?Cco(sv0SlN*ox2o8HHB!t_&D&vIn@IYL~1jB^GR zOXZ5Jm?8;LalC+&j?Wix*G%HU5RHMH+Xn6lU<%?YXUwH-!JpVh1}CpA+FwO&v8mIy zS5AI}0N!9l;U8X;W43@EqvJcdD) zJS|PkV2=oWv7-@=B%CSscG^WT+7QyS1 z;|{pu88G?q&0_q%HSw=JtMV(8-~IX%aL9NeVrbX+wX#AS3-1N_(_s*?FzzE#EJ%l_ zRrTr@b*r*R*A!q=J7YB4pbUq|M>7jl5d(C_B7$)9ulkBne0Sr|wls{C7cUI%(Rtw??&UGP)c*fw>Oa8sx19e^V_Wn8X}sKc^8fj! z_Wyq&pWlpok3aM0&LnV0?)8N*lC0)=t@3i!|4?VurTC9Yfa8ZzfTj4qsr&zJZfOS^_{mQ{n(S$c!Ov#<+ zeyA>*`3K@VaxP>4;xSr6Z{$V%7%fpA?uRu*Hn|UNA_$+Dxj!)e%L8%%7t{Zpt*uQK z|6%jx%gwFEOQ8Q-&Bhb|_r(8wrTo7l`7bu&q@)G6yEzAN`A{==$)~HQ%gw&Qs<9TA z;;hqcZYOc>x`Y0pH8|~C)$X8m+_9cJPIpecqGT#1g4tAMTU!2*Sw`0+lUV*js=qgJ z;Sgjxo{znbsYr1Hhm_uwx4;T9D{J-w2(|DN=Qh~yeKa6(nf4c5HD;6@jnB*XF;B%% z%edJthL>2M;_9-k#DeXTbF0ris(EA%L;75t^vJsakR9}@tZLzaYN)TF8Hl4{%|a_M zXMm@Z6qNO-ebhVo*?HIMclMl4mpmfT#r7RTBZ2$~^u^&|Iof~_t(I{eUQ8vmh zGDC8tLY!Y*8;qGa;-mS{>FzswNBf7JE_cdhPtNwGU+wP4&PlIZTlun^ZW3=U1yDvR zktBm)iElmYg7#79k0_fgkGG7OrFrI7Y=%>qklw*Y3K!@XL|)Tm^FLcmEZBone@4WG zX#%+!-V{y`L9QYX-Udm&XD$7+wITNl;E0sZ)H&}KE}6i9(uR*&LfT+~2~29()>=bu zf#noN&nqd7a3&xz5@D~@uE)_!fv|FoCW==S|H-d=M!LV}&uOajiy6^s{W)_xO>$$y z_kS$>IUX<5aN>QIGXh5*CGw8Z&5P%bp;Q*8trX~Ia~pqRX6BhV z0J&u+BXOd+iF=Dgj^#7w!9{`c#Y}MxpNmi=tHG(c@g|dcGO{xaxqZVXg>@*P)xm_S z96%^O^Vng!NDUr`u;BsOco~@9m`>gdSmwTYwfw$0aD{#IGQ4j?*A_4*7{*0u1U3U= z*F0(MEVzM|Qsx1QAuuAuyWka)akPM^xUnu7&%t_QtIDE7!OWine*-*En&TRGCh#i} zokZ-;nT*Aq3>UzyASp@g6)2j>7&BK(-Ht{ic7kn;eG5<1sh3i{aWI(#Hzmu_aKO%kHJGF|=yi=p zDp|wWuxr71Ey?=2o@oy#&+rPFzcIi`Ah_#|?TyCf4~-wPo!{KlN6{!aKaZ&>P~ylP z!synT+iS4!YvN+kc(n~}{LpMF*|$0INE2;qj1#klB1%}mDp}n*?T?(-uyJJ93(+30 zgbsxK^krE|pm@P6(Gq8Y{5zO^a!D$JSb zHNXQ6H@77(s~fKsc?7-m5O%RO5S}uB0Fu? zdcx2$fdyxnq?zDn4?`yhksu8>p9p9YufU{UPCyrAf(&y7rwu1FNREM`FtcfYEYmH_ zSRzQ8pkX4a4=@#H!5ME24sSG|s*63!hK5U!xBpU$x`ZuEIY0J*rar@gh>vSlC4Y1|Ls0Sq0+PUp9}DVsJD$g1bAWs$iTj^Tr1_ z2c6cTv)4QRxrT0l5An5r^>XKHc+HDB604Ok#Bu28jaF z+gR0?d1(!?Zd$$NU9lBTO8wicvwAnpIRy5k z{*KN@!(?+dp|CQOQS9af9LfXyZ2w+BFCvU6w(lb|2-_M>76tUX<)JsVa<5_VYxjMI z!g63O>5b=YWj<9YD*|Mk6X_+#FEYcdWJ0)!K6KdGBF>xl-ki^gcmlL@HDzov{+xOP zDM4P9IiI^pWYjiGo^>gZn4#{O(!25CD?Z%}$DueW<%5qOZ5bgJlnu{)!3pv+5+8c! z^235N5(_I^1?wrqeL3r$J@<)HE@#<)%?m&T8wAU7Q5G)Xp?_}n9I4FaBe+|`e-+|! ziaRxV{oQwf*)XD+*DYdz_r00#jj9#6c78v%NNZ=Y%abGyhmAtlDcBvfH!68ykqo{- zCR=4`WX4-g;i8%EMPF^X4BZth)E$QN=Uk!{l{Ke}NAVUk1pLe8ulS31ZtM?@_mPxq zLegPAgpoJGw}vy?5OHzIMdc2c746bu-a<=fD`yI9HBi|-Sz+%ycl``I^DZk#GhRRT z&LuIvY1xpt=Pw(+{R5Uwx>lCO;fG%~9(%%ZuCf;n)0}H(Wd8JP1^>(lWSYI~?du^( z^YB{*9X$G^8ZHwhxpA%TquwQQK+V5G)XKyBhuk2{1AvReUGEKv^bxg083tEq2vBGa z$LWmJF|oCX6Q1{<%Q;^pmI~MFAU2m`c^z$xyT$`~sU$F;w3Ir5@$^-nr01?75{jO= z`f({nc^P5$Of5$d3eVAp%8+2nmL8jiQ?#^{$UFbf6%73WB0!kmGKX;SnS4Ky-;==a zK>|N@GVgyZe^mjW-c|mATpHRxN}#9pdxxVql~|D>2;7h5{&2w!ir6~}xgPoYY~HX+ zm?w#~NR&^-7Gt^@7qel>hOEyK`6XIh6d49XN-|}=ur_N}LsDysQduDcL)LDx3m3iY>lA)~kBsMV<*D2bsHeP!4M;8>VWoXEw|$vQ;@f>~-JcqQY5~1|`jyc%-3; zEzOEWvTwmxXH-gld3@UK?Dh8BPJeLHfxhO`P&LhA*|Xy$e-MTo=AcSEfV4tTy}2Rh zJL{hgI)_LiKekV-AFcHFe($XBymA^wB@hq2t#eYJhtA1jhKYbEzz#+RG%Z&Nq_n8${aTd4fw?)5QT#DlCdX(A zNgJx9R*?_vSu!w|`NrwN9zQtjo#Da%tHG)#TVv4cIsK#7;bDm?xa*w5cK7|@C+DaG zwFY}XeN_XaLg7Kq^kAHAWWCUyS~9`a88f!Wz6x8W;TI>-e;i`zEEgZDj$bR1c=lUZ zkC}&2a)~L)kT4wfd31DkcvQ7B#g>^8&XU{=V+_p)71rKz^Nck9nsiWA`Qc?t?0jOx zMel5N|L}?r+d&k>YZ$YTprTR1KguxgX1FgZYT&=%{8gZ4MY23n0kf6QyOn3b?#<~L zc{e?uBZcITJdB>}%@WgWk)4wzc$C~sunA(g6E72rJqRG78wiatFM}iA9ywmi{1!4N zi`a8e0La%qt;<4TXZRw%cIk7;0=h7Jfy6|~1r{uwsb+JGd04II@$aqZB2yiqp0y~_ zoS!~H%X)`WK5)rAec)wBOf2%ZlGVN7o-wx)bJn28=UzM)3^KnqVS0n}fTB~!)*Q}p z^y5gKeo~2{<&M#rW{61wMX!AESbXXOjGa9LnuCeySUE5CGea#wyofR4BRbrK6e5rt z_EVP5gf9Ct%ZCkuBf{s48E)O*G4WX4>ddW#$D_ceVdP)?6Ym0jQh;Y;JaMiiIt+Yq zfjObk(jTbExjVeF8Sbo=Vr;_2WU}7a`r(yU=X?@e)IW!_*c(#C%iv~h9<1SZ_tx;H zu{I3O;YzZG6!OYrni9##if>dTRt*Vf`Ld^MX~xTlwz}f=Wv#Lc29uT;61ZktHC$Y% zT|-L&>rrXBd^kY8`jjj+78XI+q3kJib1w za+nB7B%q{Pc?7?}oGjZ<=IEo5X}k^Zkp?#+54R|CZ&6969(y%(Wf8fVJQsIN&%VMvRTGaAZC$}(bFK3vJDCHVT{g_b2FrDeyr zJWaF1Bo`xZ4-UF?1%B~=Q>97#gqI8Gf&S$Vbbzx!OA(&??STW=up=dmtY4ELR`Y+E zNOBSp5>Y}5Xq9@rD$cx~8tnKSedINu2-g-#1eYea{Q`JBdA#t^aUkkog^D6w>C z;3=JRZr+U2GxL#-$&~`>u1>Sg_BATAl%@zQx*_I{;T!ogb3793E3u+%6gj(=b4!W?oLql9fKF1hz( zlz2bia?yqR@tnd-1GH1?(8#)ZXNf3?gOz(3>##lh{WrXJfQu_ zBvzd<*|Ov22o|v^76awHo>3mnIkusTPT{nJ^SC2BWLjkE%shR4o|jE9M%E2_n~vRh zt^|fiW#i04j6wu(aj6i*VqzRjEXloyF{cho%N<+jx=4<-iH{?Jx|mb;l)#Ho2_^En zW1{bb!^7-F=!zOdEawK!>V~bmhVvC^)L2rJ4F+n)nOo#!Nj$m@uG|z%LcUTItsbIH zvCf>i3}QKP%l)V9@yO)67;e>fC#(d|NxkuTdt;+W-pg8+uhxmMn76{q6~NDzV^>z4 z^+gZ^4W?aHiZe~5IQ;$B5##Vs+L)g%M|Ec2<*H1Cz0M1|QKTtL$EO(sWd@!r^32Hj z44Eu4m5h?U9GiyhEnkJcV6|kx^H**8>fOiQ-H?B1nP&W%^;JY<+1-=3VahsKN~rWB z;_@aXCQbK=0pVr5WlU(Ip5PjjgU(5RAn;gS@KGSm0_7qjV&EJPPHf)J+FLjg;j$+N zMJ5IkFChLTn#S!Jh(hQ^-ifVsZZO0U^f;@)<@j9946fV$l#Y$RwUgu--Jri13W-!T zcipV&ETAKTLLViIr6^zSEjm*Jv!u$)qQm(wavIlDVIIbNpcExMmQt)mNRUVQn#Yk^ zqa2a*OFUiUs?8n^=bs&Bvg9StuozRa!6U1hNMm@7aN(e0&-jicOZ3|CRt`^^ean;( z>|od4nmFc^3%E-bS-_+_oVP^>xG(>ZXE9X(kAekW6<}c_niA#d6~+jgWS>h@m@n2W zlXldBD=1Gd*1@YB5)nH;{VHqA$YwEtQ<%60a(pYwt)Yu966)4nV8o%`c)+$HlV&6h zDf9T^OgjgwxepxZ_IBH3b5{GDS-+`@n0ox(K$;2h8 zCd;%(mGGIG2wW2jD(R%YgVFP_I#p(zmZC!C>S{C^`5)-70zW^9ze-JVAvPB6h(9W- znD!;`GX2pW(&L&rWf?}m;>UmyL2Cupy}UXUw?y%zjRaR~#TLRSSO^zXoOV^xfP{3l z5)H88Y7^2DFKvQpOO)zW*lBhiO{-<5fuFhZhVJw%aTaFR2DL}M5cvR%N{Geke_OaC z#Qhqp?gv&x^|O`FB48o%YqQEXIhC>J0U{L;_-x0bXG#a1({p}p-g8dn9@3CyU%I121TLg0#d&U8bj)P!wihU>mf744tzQ!pvl) z@LD6YfM1@%K7XzF&zD~z{_{p-r=iFH-)e5`JjH*0ivN7){2$*jw$UteIu-&0xJL6^ zMz!F+YfBYuy=6t+%^N7JUp*!pth8JC&UEj- zZR<4`BB5fz`nrk*qjDi9L)#KVsk~Z>nmDIWR<&p-SX!d;SIjq1D*xl~VSOy2|IO{K z&20Y1C;I=C|HTmW|G*UO9}5fji6eIgJS7<=bY`fC#;;7A-8$~vHK2d`FdSXd39|yM zDVKO-cHqxpFhgTe3Ko6i;p6~J)8LvUL>PY>dE>uhoN&rvOwy*9Q8~H8^zYD+C4+D4PR56tB0&N)W@2~|niIlt2NkRz+GiVJP99+WUP>Acfi*~ED zQYf0AQwa2FNO{&>bR}gv{>V!L5_3aJY^GtY`5jI=Q zDj|JgC$LaX{dqn)qwl$`a;6|?UKzztB0VqWQd z5}dDZZSOQ+HavG@{KMwXtMPVY!#m&Dd3pZB&>O*j?U+dDtJ+I|IHzxtsG6<)pk zVFzk&{jkl~oQW7si*)YIZ#)l>%Ec?Qg~MgC0(3FNuo$p64skvb82YWFboB4F4iDe8_C8p+$6MDIdt9|qWt_p~ z9uov5=05vBIR{4rXRmk4fjVtlBR>u&?kx!pReb^TnZ~Aflj__M!Ha|+6MRGQA#zo^0*^#Qr91zOt+6DnE> ze~hupnJcp}hQ7v{!a!ua0OFEJg%RXuZ@8By*CxwSVRj>y#kkT`z+h$A>TI(3>``HL zb>&~r4cPEPY5cj&hc@aP)>^g-pAL1i$iJQ&Q0K1Q>}0xWsQold9X0OJQ-iuPTPqs# z5SP=+aRavacfQTg;~(HZto-^bQ^NlGD`&8QhW~Bh!DeCc04kZy9!p`n$>@u`Hpw5* zx+JwOf5f+Tf_J;Jf2Vg1bD})Cas4?HmP=ZL&`A&v0 zL(SG`)SjUwssQY)%38xr>eBr1js(?^?5yw7DGe0OxJkU-#$RF_2d%??JNY=Q;1)SW zbY{gWQkT4yC1%}{2Q|>2LpPq26JOQNW^0ixf91*93nmlTJuE$>J9jaY44<3~4X?4m z-FIe~X(DEZL52PqEI&}pK9I7B$F^`vD_7IakzN3)^Ymx+tknSwLXFgkI0`=E7tIFN&#(`e9s^J^^5@vU>x9-N+Z zoo=t&R?Rk+`OqtEDz+Mof%B%EPit6HIJ4)#UheR3#LYF5Uv#=~9+a#sgjNn{#y^N= zOj!P<#IuPpro_|#KNI!(eKh0-k!qOLykSQ^xK` zz?MY7mJob&(#1vgzam3>Im*eWPt_<^s-w}!uGHl7tR|m2HRWiq|8s=MOYi@~aPf8T z|C>!<-81+9##8?Hr~Ch1^S>G|?#IDR1iaF?WPU!)ITYcTkscdII0-I%pnRBVgraop z9iPT^QFH^(6#(C3*~0kT^gRz*?%{%*^euP(I`zO?T*P%|y+QYV3PG^7)o3=qo5mMg zaKGGY$Z;h_bM*ojuA@-BKDrTx6bUS`ajt&6$6T4>l;p%J$&{&RqocjYByw;HN501}gozp| zIjg|WYZ`&(oJ}pnoGGD}02n5SN^MlhkP4kq(Ziie)+`_RPO_dPThKcCTDZWuOy+*d z0Ex26Z9C1aM*=auP!*yaZN3`<oj~ zZmLtW$%QFeAqOqS=@i4ea>e;CYq^ZATWOwaPu4w3wn^hTllxDVU zpJ}gZWvyR9$v>nfU8w~$O}JvO< zi=42t*31;ERgmeFOG=61ihR(SI2Jj4j&$G`2A&e(d16X`D!kWA&$DPI%@|oD7evhK zm_W|Wdhn*00JMjL#{U&t{{pKI@qPD@wp`h<2W!%y_<_}&JDi4Ke z8kANHu&{lU3&nmoEZM)_v#2TcDcdGr6|y@RT!2di{9G?WLh@DMTh?CR!mz zN>YNFB<(D32qt9ju-!VTCUq35NS432E%NPtRUx|^W<+ie-sHs}5htzYMw#tZm(3ex zMNC9g6EdShE)_Xcx+OcjbV*Lt#1t;&xi&I9mm0^y%&d2SQK!Z0TVuW=G>gK|;W-Kzz0ZXABYXMWV&ix6iWDi9 zg{|XZ?|o;lC5x^k#>8oVGKH@#T{oPo6&VOjLzAA;>?unVu0NGTdy;2ojL2~zEsKjbzq(~6Mad3`@r&Mw2m*OSSRQo3C@ae!r~1nfg~BMyUWVL> z=(DmUK}oJETshlWbIuGl_oGMBV02P;Jm-kPiQM0c<2&*NlD>4IS!C%FAQO|8?2L*$96kJcy1jW%&kzsdy>4&&G z#cxTC5qbJ%We3NLH)_ZWc`D8@l7l#P-tZZ&0WbaiHL}w#no%-~HaDJYViZB!0d783 zLczxtF`YQx0Xn$jSkkyX%ylgHAk#{J$#WLdIG&8r+%lf0oZe^|uF*+g-MF!}Q9$_% zcql$b3CZpg5JW#|GMpK*V5E7B=l-yeb;VL;IjdqJX})Mwm5e?_s+ua-25?@T9uL&= z$!%9n3Xs;%lf=r>S_*#w90**pB#unP%iCRpy8&O9!RjKi*@zBL`D55^!yTjCg0mM9QQV zC&t|VBS^vTye~|UNS23%Z?$bwI0=82Jz^Tsk{wcBgiJIM&UjNNTrQ?G}kVb0o)=EBLD@N7dR} zEhbdWFb>JYI$>-k!R*3DG}W48la0pNaT1n63rH6m#HaoenyytSn39J|XpyBIqnVpG z8{QUiv{qKrfE1le)sdBZH4c$GDIFsjX9>skEZVD z-C{v7lkI6zRxXNuAVX=i2WW}hIXJMooHIouI0e(j`%Pz}iZk=vrr6}vLG|!>aKa)X zD+DNfml4K1#8e4o0E|1XOCAuo|GV>J3{Yq!%chGT%iBjDDjdcP^htJtf^=eKtnw0q zV1`rh``lQs9NTw7>E`&J;b(5)zPCd;!zpZ2++#>Wj@-{jm%s1Iere(r&vKf)PD9a$ zNq~R?Ya*n6qRAR|X`oJGOBIB@58oNW%LsDvA87v{doZW|{Pv!)UrPA@Z|v;s{2#Ra zZ#Lk6JB|OdvAOy3<@S^P|5N;z!cYKxzB7|Z08)rqVCIB&DukCv{j6%Aa&;!jcjCqH z(sE>An`-gq!JO#LI;zw{=d9Kkl@iy-+O$gxvmI89@ZO9qh|{T1k9|KB~4{?6u9yG3o3F&oNhpo|zHr|Nx4PHATcL)|+$OYA;{ z+5C^X{|&zu{eRhLY-sd<^X1MH{eR;B{mt`=be7Zb=afu}TvRfNR8 zQ;t(p!^dumXvR|2(WGeK4Q)#1u+?75}pFTm29Q zfsv$=SjK<@rOOt{E@5gprDInD zeQrb2O8*ND{@UrpJMC`k-C=v*WG!E&z5n}0wFxw}ZLOAR%Kmyg(7ct>ouob|f{=Og zN9{H>{}m_6jPS~_H1Ob}fWLEWzbdGeLZKDi9DhS8QQmuVuEY?zzSPOb$Y}fxHKfiv z`r9+~ZSDWhDaEZ$DD}Vi8w%ToQO>A-X6}ltvb#Np+Q`ep$3X00HuX5bFb93$`m5rQ zO`oGSHb1>y!MbTpR}99(xpvTB44@Xz=7VR|JWHiUszY|qp%$7*KNtuj0ACC!!)8Un zo9n5F90Pftdz)3M5&Z8&?VaW3a$%ZdOQZ1pE!Q(S{2Du zrxH#)I1z{eM89ux*s$CS*Pq2g;BK8SE->}c@XCvL97M%97a)@Kts0&rf$&;nz~bz; zyPdWaaE{IQnH!-IucC*=XK*gnENH)GH4^h$EWZa(M^!bP0jcACIpdx-6LG+J;TzAo zbgw;fZNW*M4Ke-Q7#pFq_fkSTd~w5hYs%z8?t*cRyG3HjDQ2b>g|Lm*XzI`W7$!^v z0wygeH!C7;UbxGQf?-^r`WWvd7|$sPFK3L`V68_tZse_xfEGiS>onIFUc|nvB_}$z zC(`?QpMk8*+4;_QhCd}Y9s~o%JqmD>3?nzb)N({iv5!>!iiuLoktq|}T|n(^lL;5_ zDV5|%si4yia+I!=npZb*l29UZDs5!4Z5pox;w}K^KJ5&r+d66kC8JETx|zTuK*-@a z@i1Z9ARyY$U+qnT*ki#QIar32l24M9e^>cWFuaN%76GtW{F)_b_>|R?!I#bU+xu5 z@Fw1z4?{mJDf>xFh%`!AAZB7A0UH{(_0L+z&T0Rr-pQc)*+v(zD*I*Q&mVuZUfIB{ zDi7bjg@-oW0XII6;V;cl!*g(-cDXI?!RaBC+2hK#l@(?>c;O6&;Q(*E{lptsyg41| zZ)oPb0fv}84;FL0>9jx3z1hec{Q~X$3u^pERT6iS*Vbr3{<(}DN%$0O=-i|12rPzT zz!rPz4leFWLXztqL7POf#$5({Kg-$@JD19 zSY-*D?Rv`Yvv~ZDBefwm56jeTjoqm~xmCUADawAD=!X`~Z2CIbJ9Y*r(s1?;Tm3#E zHww?v=e@IT`vepAI<3Uol-rf68(Fdwrq>#$WEuezRIbL9Mvw>hX5*MjtOYAnVp9{wG^o>IfL?4vaKo@IrE=ECJ=40O&e^2^i*_nKojr6M1R zkOk}Cwz^Kn&>^GCte(|t3prq2^x)$vq5 zR?6dP0{u6`Q|&nX6X9txH~)@!Dh78KJk4@0MR=M_-(%pZXlxmt3N|fa7H2aUJe=rb zCpiB*MhE#-3smH^4q%Gg1A903Rny+hyz2M%J~;isNxOBF_jdpN3BJ_bWL%3PKmxZl z1GXxNt}vO@%;U<{0C*t5&~vsf$CC!l-=vx)9cnlsLnkC_2Fw!~??ETOZ2tyJ`cL$s z;QzP2D3NZ2MvhEy{gESQ!jb5j8lLB<^UeW2LnB=laQWMVlnPQYAaQ!J#VA`0T5B4b zYZ{ts8rqY~affj(hryIEd@h)i0?F%sY3}@%SKtIl%iLonio${B#0#apxg@5jJ9glH zHrJybDN#vpLvLvzgq!u{Oh^n_res9p%PA^wgM~YV-Q=LC9KTenzz2JjI58cJo)Dn4U5RGGgm zq@&p~8U@YtZob#3l+(=VE{*t@9I?=ibm1^LV<$z|-cmLMOk3=GS@-Nh)KoxC8>Ft$ zi+gm_yFuhQW|a|5bAo!o3e5f4!do7zYo%Pr%(E3%g;YC05{=y!)ICPsnHt8?th-JE zFwrI;Zee#NQwkr~`_5tp|4_L%))K(8Q*kn%bi(WH7UM?-0i(sO>MAx^GcYm+CAoP& z7sO6YW2nZyofFF}+q1cxE|*<0{dzF8a)H`%21w_(LJAA^l(7*L78=6E=6WkWsk9F}{Xx6S6x#6f=F%TtT0>Of-*_w^ zu75GZJGn1KPD`k;d9E2ddrv%Jl~Y8~>2^ZD&DAklg@-jci%;nl+YTG1{Rg96IuQ@U zJJ!xp#7ho|$HY9=_d`%GUD4&Zw`6^C$NK<86s_DD6ZJEG$*fnZzVCOte#bQJYmMwP zetKtLNK8qs45_M>n#XLZ0t_o#I611dRT1H<(+Mn|c)f06ENiLJ@~z5&t)&Kxkrp$e zHZvobVPKp0;a{7N%)n;aVU(z;Q=%mL!e5Z%Z9bUgZI)+wo4G7+feB|B*0=dhSl_8P z9Zo}I|BGS5NY)gYU(ISXZ6hF@0kF)&xhGTHEIgiZ0O74TNSBVI(X{hU=jOi^SKNH! zivJj{xDbOcMFG7h!jj&XH7RNaaP_sm50({*WGUE^B&%%r<{VY>RQ=mW-~Nll{~bQ8 zk0t)Un_Ep5|7~kyv$46ggYiF`&6iL9zfb*I{D1zD*dQfGojad<(ymVZqAZX(?tW2r6LYdU7$yc!_UcBHei%7g$2K3cctD0=8 zAFVB0c3nv7Ka*V23euqH%Wm|`$}XX;L32GC`9o&)zYkyNGGQAEA`zs_vAIoQ37l`00HvM-tRJ1%%q+Ju%zP>=`6Xlt zQm#8pW?JO!BDiiNH!>u+n>8KsxDPI`F@_aVEcE0jc2D7>8a zzg{G&SIJS&W?j~-V&GV*wYQWpZ0usrw~SF1e{2=nZ*=Tax09!z$zlA1LU~h);#G6%%D%hE9 z;xasC<byt(ZWUxC+mbDq`dY|Xn zoZ=atOA*W9P*t&vDl^fb&%Wfao8&0iw)qG$3sW+XO5{AJhCD~b$rQVtz1T{Q#(EJ8 zQ!)VyC#p&^Ltnp|FkgK>KP*r-lsge=75O9RcIw7g9qA1VOBv21=_lTt2)17u8=Kp| z>2Id)F#jd*LVj6%sTu||jIQU6L{%woIDg`t`*R+QTT|A0P|1JM5arZISepl zI)BX{OY~Dgr#$|%h&TO~=i0rGH93~dQEN{SJGDWr^W)3g*yp-Bcm((S3%LG0Gr4uo z(X>XUGb&T}oE7-~*NyMh7rH993iQvmN&#Y2?~0*N0_&0kT0^_F99?cq(M88jT!j(T zEOvbbE?yq04VU!)s&9V!byg|njA?L7VEV=X&0eNBE>H{J73Q@+5Mm$(@C)(vL5t@K0ROUKAkHEPfA!JkQs zDl?}h6)RBz5^>-7lZkcirRTYY`A10p+B$F!JKYba#-%wl=~QW8tP^npr0r5QkP9MT91Xz zaL#R~0Mbr&@e5Zq-5F{BHRWzryes6bAm+r*hmv-L0;*lu{IbpQr7Xu{MBiq4{B3ds zZkjQ;`A4B}Gr{2|A#syqaaq(&k^PUu;yW>saC+Q$R(y#`E?`q*tX>Snj{${OiY8Yf z4XMoOE;f=Y-@#Cie|C;q|I<5hKDJN#onF^^3!Gz~k(XcxN#yYgKodV--1 zRxiJa*~lLoPbImXJifA!w-gPjBt$xX%g>8o0{=gI@BW^~kt__qKl4{i@RJA>gaAp% zmex5hmQc(w297{cvRXg$j9`#v1q_)1U9!jT-~LrqU#5GeX8>7F_MFe&jV(>ztE=nQ z)m73IkPe%Of||i&=qd$7YEMQeea=F-Rg!VaT&SuMi=H#UI(60;(N~G-D@FB4WJ+zE zDu(N@Dy6~vIa2o*NZwrfHsXDj2)>H8JzErC)$uBkJYFX$k{j*%@~GsVNk~npl~!CV ze3dJLr01q?3tVNz&v38QuM@J}J0p;9azmjBk1004h_1e-6P_iTO(Y;FAu-|7^_<>4Ua z>Ao5+Y`~<;Nh&m+>vR(Rjplsk&ZU^Ilz^0+!k|qA5|Km;36nEiES-sHiCIEW%ztoZ zJVpn-ii>-ctN?6rU0=5}_ck#?+^H>}i5dW& zttTgI+geT5h&jzB4F?;Dk$Pjgm(#{KYzXFN!WH77Vzs8O0|;zB5+mOYF}os4jqz^i zegn>736LC)Ms#LN)Fq}IBIyf9f;CSj=+&=U!FfMY&g17byz}OXm_|u^hHi<+yhii? z&_E%*!A1|=xf@{MlO?fd?jhLif%wA{PT&Ky=EYK|lC&W6Et$Lo}yJ}#Cy!}XQ$&J)0Ralba%@r(Mk$zBcWrY?BBfR~y;9z)4E z?xL2dI%fK>34tKh7i|zrJF~gR+qXA_U-te_Ph2>B`S*X->Rz=P%m2A|c=+x8-(URx z?>~Wzw?U+v{X0Gd#0u}-$vny|X^odNmS%`Q6@13)zFz3eJ@`Z%r#V|rdopX~mnQpU zR-tY6ec#+0g$4c{#=3Tc?wGmOx}#p}G*n*vU3#;?8NDv|UOl7q|9s%AG z98M58Pon*U!z4Z@xN$9a<}YtWU{mV^(R@fZ{x0OfKTWj2jQ#_wz^wGs4Jk;)`~1YxmK z+mG2md^Ml8h_ zS+agmVO})9l{5fLGr2J3l?VfTNdyDQ%4Z{#cYWtGL0^pUZUFejNC0A+J8>~TZAeEn zaWZ!$R=N(HK3y7F;OjU7H>NtdlXjC4B)>s+O1PerPlb^95l}jR+!&h=eERzA5Y_3bUL^s zG-Cmu{c*f?9+YQT`>oilylyUuCH7LFmfwuDYV@w#hhJv?C2U-u8In`G&Ps+xG0hmP z#SEj(`9W-hMwem5zyA8GwFBJd=^E3Px7uyHaWZKA(i9eAG!p^!yVZj?)xG`N?kg14fK=`uzTT@GzOLC+aQH^s zeKAv(xHOtke6u+$#2V8$n1K`$j<?Zkh<1!x>%^BeuumOSS>_d6)!Zr%9&*+QRi=l zDndI;L5|*emp1gjE}G}R+3nWH)}VO`(!g2w{3BfpnD7Sa0wI+(A|&M(GQvt89Yr{< zP~(XoAo#WXLU?BY#Iun`6PpZA8&=&gC$sHFRT91c1(f-6I z-Rp^ey*mYZ?*?!b?a}B?iE76$sF4@h?Plla!F&5-s}Ef1*C z<$<~e-L4G{K^Qc&tL-J*#l&_)qgt|2r#rCEx)&W&gIet%b#@|*nBMF)TNE}!Xukcz zKRIsm4_~CS+$+Fd*mf?phoX9GMFX1%&Rw$6a3}<^Auj`c(91v_7Jf4f zd>NRAz6@f6Uk0Y(??HR+IbI+>{MXW5%CXz?;ki3>mD$mkxp-u98T{e}Xz63;PMvah zDaSa+N&Io|FGKO=gZt!;XlU^zfgXXt;938{nTwAn^W`~I!t4owKapSY-e$SzqctoV z0+{Y3ngZj>vh!tl+xDZ{AD1BSMIZn+imsq?E~j2N$4kFfG~pg>({!%P_cza-j1qfr z20Tpb{O6?;z?Nv=;M4#+mu(soH(0!TV#wW!CczH{A6YvHcrxIygg^)294LrQ$3Xf0 z_{Eq;pUEEOm*E@G$#A~pPZEkHG!4kF=ENEMO6zm#Nw%a4mO@dR z&;aQb8uyMjLGw5gn@}w|@uyR70Vgx1r0v09>gS&8+_54wC2A$m!d>9h zA`)d0H%m5ihPQ4;`Kdbvo{51W6Gb=|1ZrwQ%Qp{aY(yo77N`a}hGt)E<-V)Y3##{J@2*g*7ghIV|+aE+}75hlJIQAO({ zy^moadM(F*(YOf0pO(*^phh&W#)*sPo|$YV*S1WE~L1sWOkP&5`93L9}wosDP}jv=WvI+#@j3Z0z3P-0E=0BsObxvQ!*Rm~`@$ zyTrS>s(wl?QJ+b2b$YpBVJB^ROWHcE=@)|9-W#xjse?G7s0SQA`V9sXMj-i7sT|pv zqEe-G>K1S#in6epQ44v#jzyU2#o`0_0KCwj$&nEpEb)-qvRX#j-a5#%J{ram7$X38Pn($FyoD<16!KpPVlKdR0Q2ot4m}K`9A1pK+^r-31`OXUF+{a=19xs z);fHVt(7IdGp_}c`m6L7nb{K^W)%I`5;PoaE|rFhP-+BPomJ(~hpG*wRLib{MR>br zDB)8~DP`AbSRvI&l4b(YYo!`O^lGW*kmQ&vtvBo0c+xC9=@f>abe(USNQgoUO~pxK zXsDIde}WvE+Gou`3ajJ5{XHqGs&>5YW%FF?m&l_^0*`Zw0p#)H?H|gA6Bgb@{|LWD zMk?75t$Yy^(wZwppRJ6!A>1>HkLhBVZklYn)qCIWiM!v}`ekZY5xE|3mmu2UA_J!(kU%*(ydON;9o9(vzAftuh?(~}PEZC#z zXaXCJCgb752>)?s_g>)7(i99#xGDw0YBWD4Ux?3AUB2&1WmNY=mL#Q>5Zj7;Srg`-JdAUyFjx zQt`pxodLSzJyz!#Wbm`-Tk?B(r7DG$fzGBtDQI7 zRHy&G)q~Yfh?j)7-dyGS5y!S0oo?s1kKKztW<%(9jE6m?cP`PWkG?w>9~*WDaagMf zL=u?vNO{?R(l~h^t3>9{=wc9 z_10{l(WEI|gWAi`bZ$O2KXyUM1Q>sS18n!31N&XOd-5Tn%>w8aEYl-Iun z*_YTclW=)avMo4nMpvBSKM$Rjv2eSYTx@}J^+l^fU0oNHB0LTdZY$PLiU z%)e#{5@IKNP5}Fbxg3v$pEw*1e8=HVMq#;JMx1NDigEUw}>8i zlc5tImpIm5jfx7F{$+i?sJb>mYkX~oe&$Q^v2;ac1{r+TJ#n7=<)WNohi0Ox8l;?m z0!du`%6R5GN=1tZsUz!NEolMFmP1*8tK?8vOu8h>x>#Qlh0Zc$Q7Bz0jpB6T@~C(c zzDgQh8$=u8ZPf_SJ=qQW-WKt^xy556eBBf5k!pPR6%S$6sHH@U;b&7U=Bpn{{p1-B zr+#j8EJ%3#Q1VLgLrDU#V}<-hjEHf8oj_wWGFX^efHBzU1Pd=&tI$EOWoz5+EXbP@ ztsJA{LqlrP$MTZShEvfiewL{N|6p(9q~!RSsv_1tS^DrTj1UqgqOX)%T@Iuc2z;YPFrr^~bhs>12x zOL-vT#ia#+VA9sqA1yKO^aN)P)MJ4U`q6#xg*+7Bb-QgKc&!ejEchPHzrn|sQqxsj zt(%WUtFVp|9wnK2`-24#n{O!Dpu50leJbZhpoTa=tLlZ?POv9pu&GG z-QY=Sa4DA0>1!YHEKtd7%r3;8T%|z;*Lu=!^!rvch|>Sb#L>y|+*nN=%2 zJPn8$tIY&OE@$FP@oM5NptXuGX@W`?NRm~uJJ4W}jZdl5x6)UZ0S4wtqBIduP#sOO zmYS$h%4%-d^c4$DbYZ1V-MmcwDayagUh6A0&e2Mnd@k2RYqMCRWuGr5n4F2rCj*}a za&Cx4#`3yuH)QrI>Zh;HC8ev>F;eDIUpbe$c{07^Wa?>?sV67HfUeL<3cA2vI1Pq# z7Tl3fg;Ou_Sv!4m9y^;cY-B&z-C(2%oz`;F81pwYCq3@W!ssUTryz>%yA$IM@#z`o zoV~J(k#S|>^B1h_;`9YpCgx$Bvs@W4-1fW1$p^;Z8$*1UBN-wYUB&XKKG~d^h#wo) z)YMArGnbLJybjjM9s>xt*_8Bmk0OQkAS`jq9 z>UAq?gKHJ-Ox-ap9l@u_h!R5pN2`^@Jlf_pk8<|F0^IQbq(cm z@lYtY9PA}@=MJ9|*?U<~iyId<;m)J{S>9L;$~*L@^N9=fF{~GKQms^`3;-hhq65&M zdQ3?d(QSqA1(I}Jwq#zzJ2ybMg)9pS%m*_~0L+JXN2UlC@|*~2GG9(6y9aL$dDP~U z^X6%5&_A+#z$9_&R}2=)nOn1o&5j)B=+16v39SW{FVF@bxJtD+ zwpvqX_GCS|P7t!}+ze4+LKurc#)_t$xZy$CSU|OjD=`TH!Lq|VxB;Ttjzj4*Mue&u z02rHKMxBjEf^|yM?}w^?!^GNpIIg8=Hcgwe+?k_88U{< zN8;LDJh(2y=Nd;dz?fd_y7`9Mo&kV5YT~b44!OEFw3N_ac#Z_eC}h41u(o+M5l@PD z#)J%yMOa`4K9OeakrG23ntbff-?2)v6ExX~du&&j96Js4Kb)X!hqjXQ~zcqAf%2$wcO@M4kMquq|@_zIE;0h?m4FNxSa6>qjR0X4Gv&tnapN7RMP|V0r$ufgT_^Nx3j~H1Yr>`-L{6B$N3)UGu~P7a}Qy(YFgc9PxHh*36(zNm>+r zb%32s=aeh{wTVVm9&3W~C8+UA`V?>RWqAf=oWqX4aE~l!68bXmF{QK(*#$QWJS7YG zHHbnFw@;M3&FAtBMnf#CL1uAsc$rlo*iw!>^g^`8KQVn* zPskSGfr3&L&2{4Yb3>47Bu1^>F0AdEB`O6W>dp<-{Bs#qtsC>>&+0Q^x3odoYUu{a1OGT3*NybXLqDC5tUo$!Rbd2(c5}aOFV9k zYO!8fa?z!bTzNg1CV%BezZNtRu4Gk87Vxkr_SgBqJ_ntk)oB(D?5Tt@|>FtfB*#i=gf!0I=h*; zoP_czmtqQ$5}~)nRA1gVY33!;sgXTVB*}^E%$D4P%eJ8Jy{c|nu^eLj6C6W!Xu%j3+@FegkmqVXD z{VM#xpV^$8w+7@0*l(U7{-^@2$?o`rf>xwTDxv>XncJA*Nol+DQ#`6lJkwKzgFk5P zMEDf%lg@Vv@{LxJH{JOu=A(@BrGr&mkusTy^QX)C#KXjT{ER24oeb-rED*+sn0A@$Rv})dK{L(ptz$zQtwLNMfciw4${CwvQb3<+lt@eCrSWvasi;Ysdc zX3h=Ff*B;)-_f`V-NQD|FfMANtVo(hj4_%pHD$lS=rAn}M2QJTEuTA0);?id;omu1 z42P>1k=0Bjc;m$~!5d4p=|1Ac9G9j$?0_kE%{Y+vuCUNUG&wqi#Y&R|jU1o?rGTBO^On&)ea|fr*kAQetT}(kjb0(?n zTYWSloSNH?ybxvi5wu3S7)gI4iq{-6?Y0n-U)KXuhB0LfhjqxWNghG7MdvHE2QdMP zep570?p?P#$XeR9?=N-;#A(ap_L7V~*xjY<1!$_MF>=Qk;m+J_Il~yzw2S0+}vSdd<#h>evKc8?}~I zGsy0TCbFuZlWu3w>RhboN~pW5dg~9my;Y0z=j-&+O9L-ue%$D_UW^?x zS*j_0NFA~ra4~}9m!w4%L>9q!r1NPZsusGFamk8)cY+&fS#5SM;HXDPiFf1tjqIhh zJ(n!spcI<8hci)(>eDUka4#EI2X)kHaul+^I+i#q^jU|Nlzo98xeS@WFiTWsI{ zTmdMubRHk8gZOu_023p-)D4LsC27CI$_NS7z>%>UD%&e5Ilo=$c;YrMBVgRyCBpDni9qn!XBEfwBIUkZY$!nWzyCXt zuk|~Tuk~a19ORM4pb;}-#r!$2C%GuS<~VR&rA#5G^0+B0jEYs#P{^Vp+r=p+lo}Rz zhs7i!DJFAC6yoM_^gDJJ7%z{sLOOCFQ?U~$+~p$!=FDXFioT~9HZ{n|6<&Ft%JLWT zgA&He^eV;JKFXovlpxh+n?_&K%b&5RQ`SS)qLeCzMd?#mdvTa78pSz!IgDyL9*W6A z+d@H_dr$Ver8gPTr9vTJ=yr?wlGw{q91h7T@_ts$ZEc$|^;cZok!B4{nW9!FtBegA z_j1AHIS4v3mxSe&dY$pG8;pN3tFCd1y0zD^KD~mv0If^iPRyB@+31_HDvi1&n`SMV z9Vrq9N$x@t!$m37H^$x#a24s6CK8#4M_6~qQWwp>TzfOL`?6m!1z|D6YOa7Y!*mvT>1w8-EP<{h1r-K#2J9>| zQu>`VQVGmT!=8jeA@jIo?N125F4-me%td3B6FiYSvb#`Sk(pgL^#0&n){G&Bp2bW{ zkvE|#F)3?G6LDId{>9l@>x2?hFt^=}WLv|m@|jNQ_&3AqLJH0ci6*%a5`weg@H?6b zRiQBrAlO&TN9pAkn={B(NuetJtgezdV6{6xndOXRQBhfa>X7STyt*177Z%cs#7ZJM zvgRV*c{7IvJTt9BFHKpB9COoE2wIj{g+k=kTn0xEO8#P6NW45{Dbc{|tR<56n51VB zYmlok%X+d$6#BX$h<&PjXhIKT1rBs$nOH?sXfRh3U`7uF5qw#~B8~G(Ipu9bw!~?q z%?1fh6OT-*G>K8M#b#9zYgUEA-=#EVkhE^o1V&nDmJ>ks?0;Qj`oFH6f4ZEhvC4Hs z%Gg4&{qH7eGzPLYgh~DYB}16xVJ+zAxi?x@L}bnWJw!ya1;Bz4!}+>G;{Q|`jjj1B z$Y{!a(1t>qv6n~?fz|07#WOJoK`q^#Yds0>tu#_yv}}5T*Xa)Iv+hObG-lXoF#joT zDhi|+1-gV}bls7_iSbzvK0EHM!y`ssasxpqff8i@nvCTt_07OV$ zHcQJJV5zXx!u(b_9{w4^_Ilg3wzw1Cslra;vJ)1K0tt7frCdddCoM0PZopq4p{zbU zh(IXB6pT0pQ`uZ-cxe`nD4b}z;k>hW`^XK4fj8&goa?b|YV&8^(PgphY|bCKO!QCA zTRn6$gdxM>NUN15R>be*0DJ%cZi^v@@bLijgEZOyN^k-VX)&dy2a~P2^Dk9}3sYfMa zt8pXt&R%c4`l>EDrILI#kt{1F(DFMuVAhi*WP#AzGn9YUck&Vam$K^@y2>GIjUXfB zVa%KcW)x~fL>XajXCv!+xuB;%=(Dv36DQlx7b@K;ZZu|Z*ndAx*=V=<+p3c8)wZU) zt67;LDnwf+ylNxrlZ+_v93r81z6NoCV}9NoT%31+U3Ho-i|whH>(9R);`;MH32&1Y zAr!0shv9R#_iRzG6YUqiO~B9)bQB{ZPQc{YEp55o|~OhL%+{GIQmr9I6A8jz@K=yzD4Q%H;DhsBTc^i`!6V~AI9VV zR%(@R@4vpi|4O|7B6G;L$}Q&JNCcwTp7D43>~_W-^;)Osv&gv|Z^YP&jp19dF>gD^ z5EjB&8Dw)Wa7PXC1PJ4^^VU$$_ClLKE{GcIwVV*3Lvyp;M=xB2>L`pk1G!9X146-y zc3=Pe&)mgzINE)QG4MPb9vq~ee>^UD{`V@iy;>dUM6GgAtNkDA;M@8C>*zn<|Ii=a zJ(KLOP5%$7d;bS%f4vI-JE-FO-%73ijsE|;(SK9T>OsjmfAXy^rZYcpP@TV?O(@oD zPPRdcL6^)Kdx)=Ix~n=AP}W3KI0);t{NE-2iSv({N5|gqOGv6g*k)0(a?6{!Na$F_eBRG3Xuo?hp;ADL;eGs)%3F_X3Jw3np_#Ux6OL z-*C*eJ}F(mHva|0QT$zP4+Csl!`VU?^+;|-iiFq)pEi@LI@Tuwhxkt>YXM z0hL~c(~*sq7j;b05WlnNwYlBhBwgdpDKWcjZ6bg)Q=S!ImHo-k{GMeGvZwC!8Lh(y zXa3BlG;a(DHh$K;Gg!vjUATcgoG)z*@wq{Jso#ve@Xq#pn8gwUqeWd{RuHv|Z7Zz{ zT7~=QKDQ~tFTVHdcY%vX?}rWA#^C=jS`D{vR-8Y9{|~_%QSJPvHWX@O9#wm#9YG5Zbpfh!&GrwWn~Ga!DmWV;-q# z@-zH5H1&c6*iai7GJK_L5`?T^&}udBX6D2?yt}87p;5$AK|EWI$4VujIiqW}^G?hD z*!cB*w?Bx_!XMtb3&ZS&w}6344=23~dNJO&et@6t?Oe3G&GSyPEi0ZR9lAs7M~nTu#9wx;Dx+%UN-^HU;1{(6_^Z6Q=RNRW zl3lz|{0=>mM=PG{2PvnzWiwbI5f!%AJ zMrC_g1~ZJl?0@3pN1qPxQ}tLTZNLgdW(oyViHcCCWYtTwV!ZmqOeDfxO}VwDmT#?{ zYU*t#-E|gNswTSm^bLuFcC=X7ctU9|0Dm92mQ|7NX$VTnLxl`zYk|oIMpPnpMtuYl zIUvyv#O`D}et$U>QFjY@J|eFRRr9N+8P8Od&^mLgway6pK6+DcxE0c)CE#>wM|eeC zvKG!A=GJns2TFbbKP@Qn7I)2qP7ni~5G8i1!DfhQ^59e8JW-h{7{5pxNks?F z^!yMTW6dksA2Y#SFUQdWop27K`C?qa^jQFKlAL$HAMFA<0PG3N5dLOFUh|Cc_d=3l z!j7O-X5!863N$POD@S8`h-vLuRrR4LR8xI5-C2^iZVGZS1&kv^mA~R1kRvW05tun5 z7tnK&K5h>!|I!A?RBk!-S7uL@ocx0S(gw7PFuJDaF(%l+Z`_`Jst~S5Aq3y z*DIr!VG8L{ZG7pZ2UTC&X4L_;h@c(E*|mrvN3V#z ztvC~$+J4UIx9qu9R|eU_5S&xyvSl$3E@nEU9vC&gev%p(>K_&}zae39Zz$8YCQ;#U zik5vhKYmF%V^aU2>D{~-M~}2v{W0L;$OW8z@orw8+q22TJS=8OnVSJOM#=?oK2V6W zSF&i-V@=2iO%yw!ra?Pv`)-mRBjC9KJvR@=`K(P&xPPxj>)V&Tl~mrOQ2?}xF;!Ej zkl`XmOAl7k_VCNBBj#ruFJjS1aVyvKYenfI4CBoSm$-Tw>KTl&=mp-hn;?BR`QHR* zI?YnSjR8B3k3vO=h4W+-As)*!J-DMc8s*o>BUJd|ZgS;)D(?I=u_xYWjTT8$wc1C3 zm+QqB>gL}x0;L{7QtESeleNP@J};UhoHz43zWB(>GpLt0>^FL?{>$6)V>#cS;f@m* zUQjS0E(OvHz7Iz;E0Ewu=V0VstV(^Moprukggj%q zoDetBl4l4Lmt-%I34{_)y+$0^b* z3Yh62kHvWl9p^2U_8EQ#`4Lm}7R#bhcV>l4o>T-^A+BSj5>`>G5|*Y^q|0H8StIU| z#+2id-8KtIb}aK0y2FWsx1=n_ut-G!J^sG*(9*x8VAG&VFA$y&w=Tw)19=Bp!0!t` zc0Zuzeun`UK3=R^Bi{}2azNa$VJRDD>Vt6X34xT9W|;oqa>0^YF3#eyS{z}-TT`*zcBM5N4PTn$keHB>Fc{LDKkj)X9EiCjXk zli0;YtaFjH89C2%in0Lu@iODcoEb-$C_>tGIm*>D^+O>qQ0Dniz^SP4UC z2o@3Agw|Kr`LfWX~)ilYS=$}|+3IPMGjoiEC zJrr-W&I@-sYfJ`Y7t;)P#uI0;aA$Jo*_Hl3@Yy?hk1hNlgdJZzxb95pX^Hn4(0nwq zTxWPI+VYgq1fT`VS|BsdQP6yFf{`elxsMAec8Ni>CE@qT@mVcl>WwjCd=W zD%;<53+N9FVpq`5CsWp1*2N3vti|3oN?99eXV_FPX84YO|0wL-+JfM7HJ&&2vl2Rn z)qRc%8O>#d0?9GbtVEi|kH^#ag*_fXp#exg1zHWsR|T*M6%h)+YPg{b5sib%)9xS6 z^|kl7Lk)MYC;s*B6r_JQ*bRf>?!>zecmKG41QLki(JppI<`d@o%mytFQ$llW@UTH- zHA}IiF7K!AzU~S<{R`!4>Xl{=sE1Nr@tKO${z{*y3;mxu-5v41;dBCUY=02!sH6(zRGI0Kg zzq*g^ko~$X@rrdfbkMt2&yh|k{{jr82#0ElF4fFHzyt+28hEhK0Kq+`vu9Ib16@-h z@o+_5#xg)CaAlZGBpk_uy6zhyj^j%>c=dfer`V3Lsl}z!D;_}j2Txo7veC0U_%~^ys?f=+CNHwdUNm)`8HrkfyG1SwR2!J)!qXFy zn-5sQ!#|jUr=tE}zc-|%p!&$fbiNc$JJ>=s_bpa^Mdq^SkqOqn0yA{w?w8mUOAM^V z7dFkyXpgw>D7(%;P+HE*95wOs13P77qo@Kf`sI%8P#%WBg0`VhY-&oZ5D~J((1{#vm0qc! zV9`#58O2roVx_EZB_o;NV0|<;#~24ki}m{e{82h79!I?(W~qXyhKfc(GQ&$@y!Iu! z?pz?vwq~zoYa3@Ze;MaY?rDP_d6LRt?`Y(V`+p}4n7pPT8YY88;CM)X{D30iP!D;% z*WwyEwP_D%sF*D-enSXrW%Enfmrb6_Mz=5I#`kc`v;%MW9~zC=Q%ra>=sd;oJT91% zSA@YR06pOB{xqurrUr2F66c=XGembgFq1H8YkYqhvoyZHv^yug3)N=G$sIx?gWzFt z!V~-DZ^5OoB{u#_zS#P7Y|b-D+i1u!3Fxx}Mf65PeowK)Catk2J$uml*wl;39_vNl zbcP|O9J@7EA-RV~l2=PIkOVl%w&4V`LZ00dh+xrZH7gJ2*h?*6JbtcIZK}W8XDxSS zgybnf?pdJw5&ns@rNYQxUQgVjvYj@*q5Nd+S|{!9$%nq(Yo6Qv=E>@Ioz_Y7Iqmwt z^`FzMb=rQ`aIMb3u)G*jd>6s>1-uAEPaFCXh-N0CV?E1{-b04k9;&X?! z(Vab`Y{4as&Zj&nf?>E2xlN{^%*4uWe*u;!F4jbcGQpx zWto96%E_-w8tK#lY+DO=+GlxHqBB>DhE~%I^AR>r{>vL4Ck*H`jLCkEv&f>N@lNA( z6x%0|*=$5N%pr^BCIhm(w8fg2Wb5Z^YTr>`f4OlwO7PQSf0QExYHRqg7~XO#>EaPo zRS$kwkeKcVT3a{T5^Ae}4SW;TMgO z9sj3xcvwls|J>XA7XRm4{LhyR3b-l;kGD=(o{VrgX(4G0!FbZ5z?ee(U>C!YI}S4f z#^|+wU%E>-`FS}@eiNZ>ULxWQIVL%yQGlsF^Z zD9NApqaW++$H7TY{;)59;)NHdJ^91F{7DpcTEDWN(AP8fnF1iH_F3j|7)C)g#(Ylw zcB?yQQ3*QpAWASbH{In$;0O&6`H1xZMLy6Hhrc4ff+52xT!SzSsl6@nTj;9eAdka!e{w$hF81VQkuAr;^W z;hXzpeaF%8V{h=A96fI1<%m6}8@r>%p_A1ip9G4mvTn4lHm zY!T%YkU~JBO3UsY7etq&!bDXMJ z#0-Btw$TN39J-55+@)6q_rZT+e$$mNjOw#)oSqjAQ6+#B(#v$Tg?%q3PN0iVc18Fa z)!QHTKr@(GKk|W|83QObX#==$L@~%}u*IU3ya*%-JS(@}$ld9UMY5n+P*+t{Z>j#t ztabmi{ziwx`loKEQ{)X49`tvv>g>kqOGNl}=O z3g^kk8k{~6ZQ=|yjToi!Tb(rFCrO?JL3;fuO%@_iD4Vj0w=1ya47;NzMEIbfm>?NA zg@q4gJn|7W`hidEYtW4N@muo=$XA+40Rj60amMtZczgq(Z`uH6^q2Iot`K?LQ-xF> zCP*c(urBCm$h8PqH1O9ZV9`h>@jgMm=zEcHePfa(Rfbfeg_BXK7W@t*fVBWwWhLFx zq#0eN*^GASQ%1^&oVXd7D@D~S8#N6nZDY;4Gi)+3B3{$zq?c`3Nj z%U>lfeHx|I6b(Tg$u4ablusm~IiX9c_fg_G08c=$zk`AF=F#dvriaCFUgjcho`-Ks z_;|&TdhNcKqp#L?9VcG@dcDKcpWXX);5v85$(`B%-?24m%c~##uinAIN$=lh|Go@( zDa-p4@iS!xe<})@=5TSk=_Y?w8u!vTjF#4;zm!m*h4<*MhC-+H>-uxRa2}H~2qdmE z{Te&X`*(kzJ7mH6YD0`}g6FTm1jk0Z{Y}{TtB?6N)ZGAeKN|&fx<2L4@mXx2od<8^ zsscJbUzS*FeKcdb2OL^ud++o^k)liwshlG z0y(w$YOS4O5=A4AN6x~*vG3-J_Kh?Gu`5XgqA6%ac;(c)-?#h#|E(uRENI>Ht8YNM z#+i+}P0{-A|295-TG6gfw?K)Ow8j+!{>wNXUx%?wJZR;xvGEmG=*{df7+P<0=}*cG z&5A$h;0}hz8x1+aBl|@|jzq8?0|dC^36U2Ht_B3oSQpu=JzMzm0tYMk9uh=$e!?HH zixQ)?tHKX*QyJAQ7R_@b>I(!7hP(|6+DKSZOkGjnPW{D~tO&rRt|-`GMM2hzg2amC zNGU7&ocKbKl(W#ez9w$f3AyTsFj|bdF;3SvLTZw9o`V5(h5~hoYxS>=*6LVa z3$f+01j5z7I&Q0DrDAu^M36|HT21CD_8<`Xe)r^q-5&r`{8&uELhR6ralHk8c8`q* zEV~;XIQ694>DZlar+I8##x?p%v%Mn8FHuL4`Qi_pLyAc-;h2{KJtm@wUd&5Ri=-n1 z`q8eLH2^-xAajlZN28QErUEmg<6=H*vBBnx)rqJKMV~G+piRRhGhk9RC=yq)xmDzD zi41(1B{LLEP1d2VX+x#c)pdq4l2jg8pJO9m4;*axfu|2iX%R#%7%9kVk$Sc=k4;)2 zD|RGa{>*4-n>Ki`YVeoA;eTa_>lsuQol@xyB_m7tqLy46W6LxLwN4C4Aym3u3ZjxI z)HDx6aqCMEy z7C-y)Yv78Xn6xB+BPm4w_9PoD0%z!6JHtEi0iRoAuqn0*{HZ(h+>yBkbL&Yd zLbNiMiTM5FkmN0MB`-u|vhj(HfM2`{#(MV5{mLYPtQlM`hR+B z74}NjevwHNf>O?^&qdJD)fgX5pGVH1GL*tRp706BbXU9sfm^!FBq6F=)y z0=g|G7rwGQA060ymd(JKag{IM>h{iCUHhcn==VuW!E9jK$MZqr)4L{@koC_PWF;@g z(^A2cMid*F^rB{e(0JEw_1`y7aTNO2{|)|Yb_Uvq^XADf^21rHV_!B}gQ}Q@_O&MK zVbCA?B)^=ryZxsA8?T^r1dAEijgt?u9^O?nJ6f|==V$o+6J}k1ndBwV&(6*caUcg6 z(o6N4%k{dK7`5i2*K7YqC;`}#-=(LA6DJIJ=l+8m*mz(kPx;*YM&Is#Z1nn2%MZ(V z-pf2~-WJb&8t#TuXC7`@-(w97z2}VzAn{|<-g&$Au{D6kw+_bX4GPFP@R|*|4N&rl zH}w{IQMr3!1NI;aowo+RC0kK6H_u1J#mg|>?xc5NH_p!RRZm(QjD_Hg$9Ng{#9M-r zaMrkJpw0Zwp)4e5BY953d2jh~ws4>DN?OKdEHTJO5u z0Uan#gz${xGZv8A+<*y-BbIdq6WHO)qx`jZlV|UdO3Z2hiHDB;7hue1hDBujWnb~t z>^91sT@g_h14ArBmb#q9jb$;*k((8Y1m+M}BY*QWb)LklEr7cN9ffn)z9mLDb={-2 zlD$%n*Kqf+@;djf^)q{Yba8gpJcsjcvCI825^`p?cwK!{%e7mB0aR;tPFsx*%S}+m zs3?9gaw%Z@*2G&ZChivQS$+yKvF9U2%oAOt==#7TV9O`~JI33^j5hbq1d)xFOZ=EY z3ghuZH;&9ieo(Dh6oaK~ox0)NTdljb`2iiPmckeZ*mes>I zyL*TAgV%>zebmx{IxWhGRz!Vv*^%9?)%L5EdPS?f22ND>DhFw808#+(QOF0PSmaO_ z|Ll+Jht;uL8^1ZI?KxG~sa5LZ`rg>BSDeG);q{(#P#+x(4|n++Y|#ZiS%1}j^G09P z-E>m+gB$u`7hmY_zTT}K?$-A9bGUyPoNUlNxA}2~eISX0WCuVBJhzO*G|n(x(Fa6V z_C63k^nm3x2a3qiU=O~}xILM=DYs^eCj492(n`11NYeJNEk5ej5xNN!;v*M77h`kN zhA8vzc#JqpP>42xh_)S#8zax9eTUPwTicBoh#43O83>i{p^Go%DjA=Bl!Y@ znqBmp$N`y^Ie(r%5*l-vmD=YQoeofVE(G?I75eRFvlrDkP1az?53BJy14A!^Zm-uo zJ+5u=307+HIzsyp z74}ROP#X~y_Tv?#b|PvVq}8a28ufS$skw+6hw&PuyNJ@)#!{_=H}NV$%MleCi3+6k zh~jsqApj4^Rq|zZATo5ZE1j2AgkEtQe_2WHLGKcC;XV9_7yi=1#%_nUs9>vPU2Rcl zZTM-+xp%yYa}Dww{KBml_#+B5_%A*aOmM?3mhS<}MeYaundd^lA6fnd{E1~fpr2rz ztxv^h;)$r5Fm?Rq`Nqk!BAPzR*rSWmK8}no=1>%BU{;Ev4$z z4Q|}TT=cKWrq|2xiS?_(L*&sdmdU=w{VQ{Gk#W!j6Uv0u{A>vP!e4bkjCderNFDNU#N>8(L$dTH*t*hG+$c$ej(@p>byZ>}l#R zqqTlod#z_60?EbV9;Gf63TZIBKL;WJTe}6I-m{kOM%TZ8wm_H989L856zNe3Sg#mcnh5IOLHe&{Y$c?kvk@n3CKHl1@b9jdO$v(zYI`|4lF023p770%Zf$1 z7o&7?lui>g8js}Xp-Y{V6caeUaL2n7y5@!-n4w1>lUr@0{;et98;YB6s6!Uqh2zaA z3GWhPSt2e0f%(T{rLq-ufrbJ~yE_9Z_-W44rXE?-Ww=0F0321Ity&g3)c?`lo_E0_ z&XO4pD&?8mK*+31l#7tHlx3CXvP*tcb-mg?cBIl;ei=e$QHvo*s=;EcjCf;Ma0vY z`>@5m8bi#${KRG#7MUfAH`>G=RXtR9kF2uceBvzx?5`@Hc&{gb46sLh$8e6??6|`W zP$lak1R)6KM)o2v6tMSimLXpGQQl^HlRjLqip&mNwwm{_51>hV3z;wZK|o^UvU^e90h+8_9$rK4lxXsCXCG{x8mVR}#Q|0Sb(32k}x(OtvZ7+Nqxp;woi%!*v zKfA{hLqb3(jfs?~$D08vIdlwA#*;ZRDfC>(?z;u$Q)P~_=$r+mfKfwaEvSqD+I8*o z({88z+Yt~~zz_OzdCtE)h%e`-m*@EVk6WK*FBp+Qbao|j2^Ewst^ZcL6Te|s#ZO`b zL^~>KfCkz*jo_+`0wiHRae#o(oVFbJt6I#ZSNf5-?~n52b8L5+@i9EIf|B)6vYe6? z{0RU2sO}hc#dplZE%yVw4IH`m9&}A6Zn(fCf-Mqd{JFIE=9+fSJpYA+)~ksuwLIkxUSU?Yp*Mn`WyH4-gR~OdNi!K)#2eTSMr9h+O^7S z-a+4=x_o)e1Wbg*u|P!$Z@FiO$1gqD@`pp9UAx1|s1i|HDrTZVghsoFMc;8Gl5xvK z21clk&=RPeC{GZGykgV-KFnL+({MTAYPh2QE?cA4jBgs89*4XfIDduT&+P686fpj; z@Gd}f4)Lj?5P0kv6M+;Lh6u6y7`IIkl+d1k?*txE9xlI+TqM`Xj(o=ZPI?zCxi4e> zLK|hpfQ`(I&QtO7Yi0~cH@u~NyXFumpiBiU78YCLj~h#tH=4k2Omu>OgWpROfSP`| zf-0CS@9GAQ_JT`Z>=zq*`Sj^iQ6rOzU?{n;j`YmvXh~qvM|r`+{TT{dc;N^LjrWZz z81WR3qwQog2R3vpBpVmVGGmg(tLhP>h8(JI6?qdUugjeX2KtxDkoZ&ZJ5^!8*kXO% zvqTJ-o0Sb-6j(|nKfSeHN7H-7HwM1e%Jp(Jve>dIiQBy`0`pd)t2e1#)%Mf6qRmNm zRjnBN+AG(}mCUYapLu^_il`q(qCW4V$jSWBSro=BT-F%G33QKoEAC`LTBXfq+Gd>c zlN5roCx~bagG2{MbR^hamrQmH)QFy;O92Lj6p}JXz_54o`V zl#7xZ37B&(eNvw=2&;p)UZl?xbJXyA0X;++H{y6bW}(esV|Yh&r6?VBM7fUT3O!ELsc zM-*?XSg4dSS0?}KZ>Hb;4MP+U%Diclg%5@4k_<*_sU!?~q9xLT#U zzgu~;Tia*S2qiluKhnUJuAWTYa3(i+<#ap6RDcsokbu+E`v;My%oag6p+opxzu(0V z`Yl2kKSePrK)!+B|HB)--P?Ef_o~+w$K8ALdOSSXcb)p1@%Z(DJ3OpZ4r{gHn~`&P z$S=t#8J&*~4ruh1kR-M%wgI{A$Ro2ZGQs~>EgyW3H~cdr5aDnGgNa(BRy;wy8?-If z3u&bWD8q`N6B7Jz@8;po?1uj&l*av9yoC@I+3qmd?7*%|DPo5)SkVK&)I{R~XhN91 z;sHbmKw_elc*E`uX>ouuD54ZtHd3BUxM-nbe{&m`bTxEDb=&eMBUmobF_5XymDCSL zEXRCO+I{}kzk2rOv(_NSQl?1f#<%hWu{?l7+dKFz1_EJWxOBNaB_h2u=DUKdDijnj z-=MpJ0!1&)(;1X|bHup)Yirj!b%*H8Erj!Yi{B}1+OB`@4kwN`<=ALwR(%7_I{rO2 ztMg`zSp4D7T%s1HR(sH@vAn@n2QsG)Dv&^zuCBM>6r90_BQ8iun7p+(^spX!mKCn^ zCj`hN%xhdsa@9$&WDdKo%?2sc+Iv(yF*9+JtF{<`}4qQ_wxU(nzgY+{X zaYYe4@T?+5M!b#5BlP(#{iDeuion6kq`TYo7K{~lcS}y@$G7At!deSSo~s#p&F#0A zaAPwrO8Y$*sZIjrc49S{f_UT7F~-Hk@a)GVBE{P50FK~Ifc&tF-fY?^MP(j8zKz=I zpA*QpLmekRL;oni7)IcDfS{yag+v~|2UX;5lDLEl&dOQlt#ZV}^>-SeT~b;kD~|xp zlVvY|KP4;14(Q>-Dd}V^F(~j7Z}B8_HnNloCbqLz2En8zEFVZ=@oE)mt7FNl9;U;B zXi?v(yxFO~F0RiVBfALxsqK$PwR+`Xcu*Y=hr_+Y1LwL@dwn=`hkJXDb67tdSL%n= z*No_aActqM%+fWT!I_XVD#e#jL9R*a30J~3UH#&E31TsIQ>~XP`(=id9eNahjrQ=o zte@vQaAYm#7W(f^_$7?BU*1D2EC7kQ7ip|0FECv2B!1l-ai@G427Jg6@2mnR7$_?i znPp0s6+O8I9vuW6@f5-1`0BjPN0O<-x@pr{$FN>nGltl8vFFEHpGqM6UAt0e+DTKT8_W zIHEvVS@|9Nu#(qqbiGooR4axdD@wj#73-u`MEGwQ1QT|`O2TF8ETsZ**t(fR1Y-(wkgzXSokYBm&;T4}g!x9`pkC>KzV8pFZ&s zgwk0nM`pj&-n9-ZI*l@86?Z-=8rIE3od~0uguN1@WwVtS&HbWGV+%nm8eItME5}bj zSn2B@3Hej)oq3qR0KhO;)FkJWwQ5eB@|Bi%s&XPM3y{*+>y1Az&avzhP(z_%M# z`{Y;QZGewH$Vi3kN9l>PFPT&`aHu=FsYYW0NU$(Gz8F9|gm}vATJZBCB2|VJ3BJ5z zk;a1aBEe_BykD*$|06kus&1KtnX)uDymQAW3dx3wd%P_vMUKArjwZ!N$0xcm)1vIb^nZMWQqi87{I$)GrcBSFwE2Hr*mB z<3X~j8fuExtI3pf04)kkX^9?@=>;xoV9YGW&mktW%M0EIK+U4iw=HUL$`WYI-v4(sDAw`wTtdFCJH@ zDtgC@=2#Z*l9gvpg!+I*-PtV!dvBRBpbg<$cFM1Z7G94^uB$ z=j=t;B`Yavk#NcXxxnE_U@Zyomxy$hXkQF|c#I2`B>yT28du^ZuEZsi60sOzl0b(| zlRbjX1_}j``G!d^xc`azpEM26$%+tD?dX&W4Xh{Qo)ILE|Sb%VIfldflIkwQ{V?J;5;|JIwHEdi-4J1W@D(Nnuqd-f$P%WpDQ>@wx6|imC{GiLGU*gMHwogzzzvvb z&2PNf?)(PmQ@Gkj41{Nwnc4E|T8I(X-9S^8VZ%4_N37N2^luA*%A6jzLYVoMc3NX3 zF`tl<^GPcC;3`zuDtsRnae?6?D8Sq|qG(a<#~D3%TrMP^*A?fu(L2$IqAzH~Ae~NV z9GRZ=KH?K{ek}K`J8$9(PuB;RuDuQInTsvguuWmulBV@}_%MgPFj&{4^~B8T*IU+B zk&~uRwWVe2F8r?orDdE@jp}Vi`w` zixlDwS%{MtqJ<(#MDhjnQKBwh-XY_pck$A07?HPITx@aF2W9XU(w(b%K zsBUK>4y8Eo$EuHL0)KReP@D(7VW96Z_fVIk&DYv7sGwZQJa_+?5EOVLp`DJsAY3pu z%k;Cz=bL+0QCbdMFj2usR#FgP9ns#%-(XQD-X^guRSkF^rWsprgmoIvn}P6%lsJik ziHNJPdBVs+%@PSQu!chJ=>3_^edm+di#s=yA!>w+J#11aA^~z_G`dShPSIJJp%|JG0A-5{&KAecr zywO@}lAH; z>>(ygYFjk9@oK6I|ArCf;^%pO3+nM22U^qvkuz}9j`S<*qr15EN7gIm?~ZkCk4PG( z`YlS9Ma&2Kz$XD^{3~V@qemM2{mCvH1P>nmcU9SW^J#l`;m-jdZ=QDf82Ms`@3o2T zsPij3qfvp3Hr&a&C_HH>ycBc#7nP-hJum%E+a(TaR+fuFg=x`Kpt{J-rTJ>O4AAkD zMF-3_YHdP&HuK>U6e!LiQ8vVSCOv27K2Rhp49RK=84eUopp7@$B2RsFsi2Fb9tvW_ z4A~M5Q_d2H>y=vdN}mE*=l+p8Xsl&4gXB3k@7XHd)1Tdt=WG_x3@W#>f@1PLgTAc^ zX@)PMm;$vs_o>96RA>b5dg~vHqv%OsCa9nfVfLh+q*a+8pKv)X@ZBjh$*54&eAReO zKv)rL&PeAX;zfdAl4jv^Dj$SWDH}58qbOvOR%ME-E6>(&@o2LQ%p??Q)YilI{lRj+ zNR*(eW~Uc#EUGRZjdqyWAO-NeQqgE#jZfgxlU7 z#wK-U^bqCT9lduJFJa29Rt~F1Il;6nF37FBthJUV-{zrTaZ9*syDZ{$AysO~4;?fi zk3IAtWo%tJw&?4gFPgRrsWSeER*Gt+67yGb9&J%4ZA-BZTYJ&mhc{c@2h_>x1I~i5 za;QX@2o_GhM5B~wzR8@R@J}vB94tX4RSUuz@Edyd*Ss`*Q@d z5?NYAqUIhDc*vmc4mYXggp8*qdZs7eTDIrGNw0*t>Pr?&tQLY+GI0VDQh1aQcfsDg zIJ3O+sN+aJONUvhnb)ibcPl{qJaQoJlP$035KX8HmIM-TcMc?PvCC*49(cqfL@D-+ zluebqv>6tuk0~vXlIgVw-Vstna}lovUj@+ncqha_yKL52n>ztgN|=B$lyL9A{p#VH z{kptHkmtds{KvLkz&zH)Bh4dR#%+>U80>uv2CAaSApBUsjG=h$Q`ifohiEVV1wSo( z8ykJ*d1Rz3$8f%nPhRryL%yU$H)c6e`R~R&iH4KGyURX~QA`GD{nt`FhzN}#=tn)%c*9a&qgntu-m}@j045r%A0;!^@ zO0>*)FQ4_DvGt2Mmgz&&RVW+64C6r+Se|&y>!y0iV-Yk}vI!ON3Q@oO8Z*DJu#82R zo&a5l;Q!+hc_Sv~!iI@4GY`d+(m6=F@r>ajkVPUQ1B1(IKvJcH4!4dh`Vs|VFLb4Aa zx&ZMZ$lv{*RiKb*Ta4%-D@adLZUP05L+-!AzX|&CP)GH=3 zq6~Fsw&|Is69xQOZQ!JcO&AwNO?APD)X`O%eD{g~#Q8FNV8~KH@a$X08y1dv^zYT{ zqfZzk?o)cz@QVKVBqYKDVIf)kN5!P%$J*$p(V>{E@-Ujtp<)CkgMvpV5B>=YYagdj zL}Vw_i<1F5na@8srFe!T<4ICTMUkJNnZp%J44y_V3M@7jK!;L*B|CA2I2Wpt&~k?1 zTw$vCMhyL1j)f=u*qgbAZX6Pr;OPAmqe)`w&*hx&5!|f4gy~bH6uS39`6cw}d>eXL&L+&pz(Yrl@U8WbynG{k_z{}-3y4X1PsC9#_2VI$!j!uf;>}X6B8(Ax1*N_BaNfK;>YOPYeoth*C42r6@qp zA0GLN`F(Sdnt72fdf(3M`!4BAT_Og5 z7-~zoY-MSNVs}0$xO?+53!q!ra>AkKZ58#%ULyCmu13VY1~yHIRI60uR#h$Uk%4*5 zqvSFu2HSAR=LMb`ndj*&Usvml=oGwp@#+Y9c5xlCV&lGxdh{}SwAH(>$Do4dUlFZg z2hJk$p*z=|Tj*O!w3xH5a=9F9D)xpCxdo>p=9%(Jx&y{19@qF{&7z>zJi53yzw(Z} zANM~oh>>jJ;nW_PIlqFqjrjy)q5;j(1fA8Q$d_ZxdRUXbyQ$XdOz7!(vN2t2dF~AF z3R^$zx3)^wHva}<2z~tCX@#3 zAC_3Oq`dcA)e*X#Ht9uP_y#u}Lb;B5FfvV&1BkR^^zkJ<*iy)SiOXJq4?K;i&?N;k>XEf8txbw5vGF_A;dGKG!6H{)+7yg|)Tluae zi$_LJqS+289FcW?RXI9*Hphblx&{A3azM)PEaMPuE@B?m>(4{Lufm8o;=*6VeJ>Fa zW7onm$qc3Yo!v}0OHAoPunr1mf!0M9``itOfj7t8!e%}>cf25svy)AD32%Q@5WJ-L z$@ro|FdfQG18q{#>&yAhN^Hrd{akQhhlQePygtfA0)Au1PgmN-!|H*RzVi9hTAV*d zKBRy#^ljnWC|uLS1^Q4dW*kk5W-UAo#ACw1oniz^;b=gH{fs^oj74)a^UUO%CcFz$ zJn51ib#X6)-|?j?vbf#aLG7@%x4V)pW&mwNexA+K*u`ZkOJfzed2iHRS zgX-~PFv2RHaLLn}oTG9LSd979MNgb04U~Q>F`Uw1e1-e*$>@NK7wRa_WL&4qArj!? zDi3-!r}(D`o0LH-pU72fmXll>4O_>YlGsx-c}xyXV&NJ?uQMidiC9x^y{2$2{33S} z8gIO_)S;O|f#&%8N|AYWUUi+sZDP2LO(^^-6HQh^1S}P*NFQeo{k-Y>QEur0dwbI)5v9wydU4jZ_ zP6(C9`l158?if2fz%^xboJ`nVZ}hy9UBIDt55YzZ^q!?8FUcquSw1Yq%{|q{WH&cEe z1^!(7F!shiMlhl4e++P<6a}!FlrntY%)$hvR3P)x&;blGmy-o9`jxE-Z*C21ihV}C zXt{_jO8(-tf>q0&khS z82x6tSVl=*S(!*7Nx{obFM93fulCtRyM2V6*~$mgQq)H88|^c#5q?u(XLRdt;aprx)O1^c{!q1%r44AT?H}!DHL^^eIy}6GeDpwYWkJE5nHtUm zElPVV(c~hE-^51|N_?%nZ@JF!mN9k=<;$b|R}VNb2J%?GDQi*Z_vnWT{P)_r9Xar~ z;eUDaaP=RR@wT}m&Nhu)-Iqh65eNk#T%787!&9-+>nQeC6t^9h$6Uw=bji8mRM(nl zxm;e(Cg}E6kP|L4k1d?9>Ms-}k&Q>~dqw6Hnmei{+$CA&DwL3>akwy3I4mZoU1ig* znr6CRuDgQ*6sprMLa<9INXuQpJwVuaadN$uluSkT_`rn!J7t-9Y+~O zO;MUCl{40O3#ZWhkd+_ZL>U*Kc?{aUPX&QYUslX*xA!rpQJU62uWk0%w9WJT zG)BCTZQdfXL1aZ_-PsP+RDQ!)qlQE7F7c^0FFsZq5)IpA8)c{x%nFdKPL)k*0)#`q z!zQ4^_yPr3XJH3Q@U5~$OFW2aP(d*@6))m1lrEtMwc(=bC8)EGcTXtycV4NV17>$X-7 zE-vShi{_;*y=l_i+zVDQ#ASBUN0G8@{4-Yo)AUCRrfi`$AD4LtVo{8Z#%9(ob37yOqIjt zz;)-V*ci(ZLDF1>Oz9r$j^2?vd|qCsLQyFHj4eB#nqs>}FSLx9qG=@YVc z*b*Kt0tA~$sRV@w!=#78@C;2W(h12;DipwmwGaej;&s2Bxx4fBqAjc{$-~;452wr2 z75WphiRLq$z-Lj?Qj)4QTGkITXqYwt=akVif=NHd1Zo3;B5@vwhr1a z4tMuomJ7aT9qhi?GY9XdZ-2|_M;6QJbf=w0!_H#K@JL5+{c_g)%|@%WKZ5R;1rP&JNJHEqi4Vk0o0J00(E zxb#SiXA=$j7}`de5<=UXo?A+`Dl%!J&Qa1hQjo-M36Y&*lhsU9bV?I>H!-*DNy;0G zc-Xo%1cj;T-7DW(wOV@1g^`%S0#p*K(J`2Zj+DE3j2x}^6=h^^RauOUgypZVtEYB- zi%lkRAHT)EzorVagwu_yf;oTxq6!vQyeKx{Y7$3hfes`{ciNQrTZBi&ezUNNAVeEOW-AE`ugk6uIs_v?cKkNW ztOTI5b8`p1YfXLsQz#XrAcy&c$xN&@@lCWuwy|QHCZUI(kA10-&9XrUAgDuSaoR|o z9tmJ|^sz%KvcMNSWiWLIAT6)Z{hMSXq&l0>iqH_{p3b&K7bMilOq;CaldfF0&e$6> zXDUB!q*mV|eY(&YqnROM;lwP)qU6Y==M52%RKi(ndV9X&!rRZpCffwSArFzbBqTt` zwRFMx->n_&+%0>nCaHl=p>cbC*2T}ce_%8BP)ZiKf>2QCy~vkWX&c={y%b<|#z=Dy zs^$is^Tjf%Wl;2( zFN)#F2;vU+B8g+y+BGGqX+-1?7zm`U!2B9`f`K0?e^lbK5^4^a6$qsS`6fin^sQ%I z5J)xU{by6rpJmQ?ClVThCNy0`Sra(N1wO8JZovLT>}5;NwbF7vmCoIbKXv)^*|Pem zpW_t*CN8NkA$n$ELs?>>{Pb+H>ps_BTJj1Z{fZN;M-IouD-A?()ZWw#- zA$jjTJ9t3s{k?VPvKw!5BSuy{=wT15<)T{3jV&DspXbM-Z89B&9;$I_we-kVg(@m) zu34(l)k4&cCo2BPnWH6~DnwE`V)Qs^j?D_Dw4zu=#Dn`6P)Rbuq>{!3@hXx)>7*qW ztY9-vrIE0v&S8IKX@M{>=DrlPn2-u>(+SMZ%Wm#F6-6L6tiS8GTB9(aERi{TMEtm+ zjG;A~L2hT6R&b0D3pVapwMHJweCa)6T`nNK8*>(f(g-TEL0T~gL0c`ErPV@*lqsa3UcOjJ!CXAny0FOo4)u)>-= zJCiivpeid}%efKK_k$7zhbdESl(J7=1FTG!40>U)7jg=!>~xP-$W#GMjaj^Fm2yli zyNhk;B3LwPOYd%_DzNEpcaMtX?tTS3AWnug+g~8f%7(FtyQ*mzJM$t91HPsMxK+nx zK+`wi-HNw>FE9;h(PalNx=%7_8(4sH6sT{q{rgj!V9+M~!3Tcm)#SXNFWcNl6L4>B zz&)xVPW5qZ9^uG+pA&Z?DoMQf)Zx3a{(Nf|T68{CRd7LJg=Cc?e$`%3GO^5KNHa5jB;-0zu|& z#5tI*c78ay-rW%^qL?BAXbCk7NPciIuG}J_G6m8Yp{x-xE}%0K z(Auz8uv>48QX*T0K&vg?gIu0%ozU74@Z-VAMwEmOzdMZY;r4JmE_dk42mLSD$>azE~b7lA6 zUS6L6VqczI|3rCw)^KfMWYvW4d%Sq7l6abk?}>$OAqi4MVmBfNeam_)@Cc>hcNIr( zwJFvskqX%p1k5llF;?%P|84K>zu>9r`%(I&kg0!DuHslnT)E?8Jy}QyZXX^O?%WL~ zD|_zWq3u#UXp@G)3_&>FNdi`z*|$TGStc&M6_?aBuh%CVhcl)sc*~MxMJdKS?Mjpv zLlzX6UdNld(inob1@G&Us$|GqG9&c~g7%_RMHBPRWs82b)P$eRVbBdiLRH5%8cz_d zcZnEW5%FeSvv>8@-!;a#Egw~+jbti8e>iRHfM@xTBYJXO%DS0NtZHWx6BC%tu3MUGhyD%A2Ru}2=QF0YcZy?ek?yxu&XbN5iij%tz zmTqFcft1DQ4Kfy#Fg$FC_S&6}k8tXvyaGkgEaq^Z7x`M9>k|}VVE`BG2(Y_2)3FC} zc1C_g@&H;k4t6Su!Pjnk|KE+5q9ld$ zTw7d{6?V(oKiu7IY`Da%D<=6xR*W2fQn(e%NHb2Wskcev(aj-PAs}p1$ICgNRv+0q z0%6+?$_lZug7lKm(ooR#7HJvVoxr&h56Eyw;ilSB1y79w^ zEh`YmeYR-QOIsjH5H<@A8%Rk5bjD>GXB5fz(-qFC)3_z2(Pv1vlf=U{P@S)z$fh5V zp?a{K!)(44>J~N*X;}zxIP)eq5m~>gh}1qQF-YPTd==v*o>E$Aiy*ZoN5yANR2+(y zpe3qy1Un|$xE}4M9RlKT$5xF%u<=1nF%?qHgs=$pxVa^9tEt&F9EgmmP{V8`gyRew zk?bYS)YM8-TjU1feiqK;46eefX$W1$YoxpIhd1$%LzRXzwSMUJu4zVB6rFh?5v-Xz zc0-d#BO~enYhfbE;DZw@JT=DVJT_GPi)%(U@loCpN;@O1!BneKZA3X~AdV5~1MA25 zG{PM3kry>F(A~#g$5dX9cxb6h6(Mvc%Nk5)I{y1c>T`)Egd35Hq@)}w2lcG|zc^RM zC)bZj;cUtK8I%4%UZ*!MdLR(Ck;?~jgb!s;Q$jt2Qn!S!*ELo^PzADgvc!J0>Oue& z#TH_criT!VP3%%_ERs_7L^jg5?I*F>2F!X#G$t`=VDhNVg;rg9;Z2NTMGcQ@CRRX6 zrykvqY6G4&R6o?1*oe(m8v;N!M87UX#)D+6Iw_DbjYb@PP{S=E%L}$`QSKeO_JTJ)H=015Gx<_`Q|X1hB(i7TLSMa}c%!3gBmWL6ny_%Pj`dn^o9>t+k}A_CPFew zq8=qC4@R1SZgBG-?3(e zK}MDfNx{?_-gwgyEPeIV8mpnDlySl+;FZcu*UVs6<^;`%Ea_X$NFOHt zZE`WWqs9{ym68!tuuD-<;|@p!0X-e(lf$|Zg?0%kqXx^_g2{$Dmz}FOO_dYQAGK1e zhJp}iz*T{b3yJoi9R#G+pw>tkl8i#?ObqjZ!aue45R1y-ak^N<6C7h@CN^HXKoImy zTF4otL9*aTM)p%XQ32QCl#-0;Gmw7+Ct}!JsB{!K^KeQG>H}ODVn7?1cj6XIQ6~#i zb)w4ZFNZgxGb!{5bzirlA$a-LXcW|mELfkFdt*+Ghsjtg+LH^ zRz!oVh=TGIjDcDeGX#T*0zde1Vos36_atoTPsBzQOowCI(eaB3iKW$4RdYPk`-mKX>l43FZo((&_ zK&#cS5wCcB^e+Xe08T)$zeC($St>g9?(d29n$9E$MXM-G?rwbKaljEA$b_2`DtMI; z`Dp-sL1+Ju_{2JXlF)5CV!diI`PQV7~tQM2wg?0 zJmHgvN7R@%;s|NRVLev@#Nb4VmYuPYtP6SX5H1HHYza`5eY$Jl9Vrg?Ood6T$)sx} z;K?v;IXxRXgPf=-6SjMJVF43kl#oEqU6hsZxDa_;pYGVA4S@g|3fhUEItdOIkc*6!QDB;YdeMS6=4{h{PAYLeRClmsQtNOm3dLKor zd7uV(mI|;WC6<~(I*Bk7VlNd!3iWn2vHiTD*;Lad8^TbGTssr)WjfqqY0sB4HO&5D zD$HQ|$@3wp;U}#%_g{XLa&v9uPMsBuzQ|SsS1JZQ;R6;>M&+Px&09gQP_wgk0ri+@ z5v^MOHI|)ac&~*=3bk_Kd2rjpk=ER_xrN6VYs+3>xx687N~*@OtAAV((M2{9gr;jD z%Bb(dE$ZaBO*l>}N_ym#j}y13IZC$NpJCbCpx7h#J_RooD_!(Vr2OGVsJ3W$n5v1` z9E=sJH{^0&$Y(0|7v`bV4;jQyVQr)28sc^K952X;W?h=*v6(MY-x6(>gQk3{{mgzOO$fR|!Fh~VJ7TMOCGH3ZE(^{h)-1D3p25UHb=@#x z+c7>NlF~$6ktGT%jlWjt&iy;mBw2O3%d~d4_jWVJc=Gf)efaT{8#~3^k;^7ekVDD6 zL!5FEJKv^f+hWXoPV>L$+*_1pQ#qpjK^lqTNjsb|DOK+BAEUOw|3%ucWX*A zMCOiyG8)aGq(C<*LUD^K$Ruvdx!Y)+a<8gdC8hdzIBy5$Dw|gn% zCGv;h^N7HuZCOA1{$%Q^js-V?QWJ(ofHCXfk-L=#?^?=NSwXpme!)xiUqA2e)(E=< zj}{3FDm@n#yERKgKhZ-%It}AUqyxy2O2Z`EUmSM$M1t{E@Y>keP8$tM_tVHBYi~SU z$#JF*19il4V>ioFps6~Kq}iU(cQmsAIcWRfVDIINX9v$-YL;u*pmB@Rcy{M?QD@?> zV#-V8ZG-8Sosh=nfzTO74iRw8%H#6IOu3au1b)<&M_%`kR3b9439GM;QP!=TOo`=8 zGm=8Ivgd)&)8`64;;5OFCSnx-_}(0qaWV_Od0H!r5GxR8|1rIn{Oqnwn@H9!^^LP) ztMn8^A^K1;zH->ggKp$=7<8BCqh<|WLoJ|NG|Wb0gUUu#q1IFFO4J|JQ|Kb*1D2u3J54xD#4q8UKJ_++X44n4zWi)e)db)1zVjXe|JL;Ljt zoZ1hA8c6CxSVWp^9^s5obVp0?aDB8p5slCWOU9#9B1uPTp7fwNB4wh*_SDx zf((w~-q*_XizO)nGfOCq?J)m5o>;^Rglx7R6TPNS&yjBVx_kO_U$L_{MGA`} z>Dtgt?6k6UZ8BkTGHXiX`FD;NWuj{e(Y&~F)^skwCW}sRR;DK8sQMOd`UQey=TWQj}!S`xQg| z4Kd-+GiOK`&@_ZJBgFUeerDv67pcdFD@t&g`WzWLtmT3VV7da$FA8>R@H#EoQn)pI8qv z;8oK3hxNMKIX|=D%UP#?deyzW?)ENnSK@zICqJLy$93-#KK_sb1u#n~tH2GR{}EWh zjR^7CSRnCn)#>X6`iFHp6A3Y}G^_xVz?tQw^bdai59?j`>N=HBcte-<@t1`&!2vvm zGrxQU=Zpoqwl|Uz^?$lbmk7^qTq68Zuc7`Hj_i4D9R(qNoc7K-sf4E9fP=u70Nt+Z zObLerTjAM}2~9a6{-q^ECqYYod5RMnW?62DMx4;u$@NJ(AuotlR{TXYQBJ8KRAd=T z^f<$)=$>hIuM;zjr6!Kdrs(h{bs_S944Tw-O;Pb<>(`7xBW>BYtjm)hJBXj1n6)R2 zIEo*_(esZVGrK6P2X!g|m8G~Cu~RXhKcQB9O_i97vnx8BV#Nv8`VKp%#bhwvSVCv^ zE?#$kwBNjWE5eb@wKqW@ShQX67wpa>(wyTuIf@U%Kb`dL{+pA_{!yjeSywE1=<&zv zUZyE&Yc+sP|A^NemjPYP*r!w1nK$E~XV@ai&!3iX1fLGFmbfq+I7Hwc2QHq(7PvPK zg6gkx5xKQ>^lSLE{_E&z!vsbIn|f%B9frRaM-1Py&Y*K<% zHx0Ap8Jm*tqw%==+09s*OJ8O-lbEKjNaz5LwiVvoP2)cjF*=Nf%T;s(AN!QXUYrpM z@%y{qSRwh4a&9S(oF_8w9$G*xCpRtYH4ZixsX48?n^h{yRODa$Wpdj?AP%gIPJBGy z_WPt_Tn@-+Cu^TiBc- z&BY?^0$LG4=aYhg#YQ(ElcM;NAzi&|g7+99@jG7OkwGRdX2ZZC^GO_rByiFjHlD+Z z?&=9GLpnvmK_n)bQPvZ(0D?BICv`-Zr7f$yyQiyk7N&G)RVkkaE+&~o#0pbB6}j)= zYK(i&RbX634*TNdabby2uvY5hfVwonnNPERTM||(IT#TG3l~ny?5m?Y)L|>jrp% z$#)y5`1AeNWV$n+xdUHENfSmqm)*19@3Vc&zXxpMCLsSK6QUs~TzAzn(3vTfW(j`0a%0PM zvG;{G&s;+Vv*m%jzzOyH(n0OldFn!C8YU11$=naZ$W|_ZLTZPUjg8h&m`D=sV+IBG z1{w$*@2S;@A8gYV?IvE4IIVSSQtljeMk7S(bpt%x`QvfuB7M4hi>fLRPMXpiQ)F1V z=iDrt&9C|Rq@u=8tq--@$6Qk*NXA?O2@UYUnfvpPwG9l2OqOtll!aBC?)qp5N7uA# z?hxyImm8Z{SoM*MJ`|&d;6_vJNb>R$Hdi+0HI%5+Ypa1DXp6C%ZR2Se1Ev~N5iNjy zjjM!c5A5>>cd*$Om8Rqbp}K2VAuP^KYqzmBWZ(O{TQcZn`9$d)!pHc{qR>&lY`*$>&PCn2btBIDwh5n)%Dp%>@ED2hHB+HB2J?G+cL^a5uWIwI@XVV%DCUU_-t* ztlZlq@_y!!MeMnonnA8HGhWW@Vf5L?Rcd%6E;$Pf&M|O!mr*y>;Bgcua`bCNI;Wbt zSQ+FC#TP;0q`(Xa=0@ZcA3Jq{Sabu0GP{AU;TI)Ys&?y7mvfLXSGHCKw&_Bau)F|S z$*sx~3K1!!F0K<#g;%5i5r-+ybcbDy4Xyp@NNT(AgtoU&)5F*~CFe}msanU)T2OP= z39%2qA;@IYN`AIKHp+}B#t0FE$+DG4*^zV2FN|YG3Yw~BP~cfud}dblk6whlTm%mT z2W4FanNmMmy?LT9^g;pTg1&hEg1qZo2F8w)RGrB%afiiTwP0w*s_7@=99kPs0_9>k z)q47DNI*dIE$fuNP#0x-YPHs{9Hs zyqVaS>tl$VaUnL4<0zd&=!m7x$uVnZ;w2f~`O-?Jj&9sm-Tmw~QbZTjHevK3j9Q65 zB)c){*J!c1O%$L0($;iFvzK-|*UBW<(5Agt7$-y7xZw7tg)}$;eYC!bW9x zOZp*=iiqP_b0KdSTm>1$t$3;ShOUi*V8%uuWj9<)cCgx}SD;S{U3|5rPC3~(KD1wa zR5TP%5ZA>zO+f}^Y^9;Fc5Lyx2s}UVqE#ZFm1&RAl~y=xym(ZQNodGK#*^2mF?B6n z1_>I0L+zsT^zyBJ^7?i6qI>;ISw%LQ6*=QE;v1|?eV8h63p>j;Mp9ZP_Gd(OhCB5p z-eBrttT5*~)yiHxooix!O_lBy9FX2{;^xYg zqF*Rru4)SFRS(eHgr+)7>M1oE0^@A%lFFRf1Z;@!#l zQI5V_8NBh}$PR0>{su;cj7aNpac>x}8&CzhSdyz1B$ThS@u;69Yp~3?Sizi8F0WN0 zSG_r`O0WZ?O(O`D1CUa`30_&l8z0d^B(Q?;CoH9thGI7LW^Ob})>4c0=vCFK7++0^ zEaNJ#SG-qKtx~GOjEp0eeu6vH*MD*FqYJlvbq~0_>Ydu%9(;CtR~zgD@E~UwXA@k) z<4L>`l1c6PxOJs=fmENl(2m7)Q6d9Kx!b#xTcLQ^C_HI$!RvYn8=KWSS=3U=Wbm6} zOagN?Wb^Er8#8P(y_gg05@v#T)~E z-Z)VUt%wC0-W**|@otCj=%qzR+FItaduGL~0tvpWG}+1Ad?muv+5yN)Argu=&%0t2J@WHx%mdm|_L(h0=jMIAkYo;^vL_wNb857VN!T z>;`hu?B#D8n{63YHuOf%9CT3bj4-T7EFeo&x^n55k>;_Wt3Ez32OX0A4^zJc2c6Nj`$4_vERIv;;*M z9ujw{5XB=-hQGALMO_-o1De0~ml_0uL)BlbIzi7SYg8y1XauMa!ZhDGtBfvzB$NL2 z$@SZQr%(4roNE&kUw5P?9Re8}rkld37-V8BlR|R5$=%Qz{o;7U4ky#Ju@Gt0VwK`} zR03e538^(o(+VWr1+=LfgzZ8?p|&IJ z5xfxd)=UlZdImYvsGum@0@tr=e(1vqo-C=X1Nmt5}EvvZ4Sy-UAk7utR zN|QH}&qWa?I8`58rZ|D7^`cQkn_J>yAn6}i-%NAi*UI&S^rUiJ_0YTC5i@fdsW7G+de^zn!w zbI;rWSMpRWRCFfjbf#j|#|ewyl=|8xo+ynlF*d@FU#Jl#n>NB^gGTu3!GC;4**<7J zZ|%wh3p!ye=Lqkz`sy+McH!^v*)#lXKR?)2Kk-fb+2P?=a6H;;?;kwhZ6AKMySIDr zy#1B6`_&itTcT`XSzpD+ww!S5-g9MktNh-n7o13&&2`omAKSIA$>fdrS6PgY@tbm0n_yCvQw%yb-t(~@sbUfbP^&UJ;~ zwd7+l)zeP}N<#KAPD;MOMbR(0&dmu)b618GVMLa3!4%-YoDf{}L-X5_J6KN4uTn7b z=0KY4ZVr-zU~3GknJb!uV8@J|8H#IoNsu2XS}ok-P|MJnxV9i_GzZaCIZ6;{5gBA) zew>k;&B0ROkU4=e$MBqRzwB2k6&v=^C~$1N3l~fVr@e~{x-LMr0{Zbo@9o7I{z4_o z>poGqB7wmp)3-6x-eZ!tp*Ols?&zefLC7P2KCajLr*{0R)~LX+Kkr`rEH0je)r5Fh z>GtizXZ8=>Ym^99VQc1mCLo3Ht-YR>No9d{7!yMTKr+l~{4w z@1J)%mq)QYz@cn<+P(O(sf4_GdyxqT&n{BI{;T)qhfFwp*zKsn`qw=}w(#(>bEbxa zdS!yqm68&scY!s`EgT)%&>GG`@X5In@%>5nIui{aQk{OURIX1ia~clb^z9D3`{BIX z|EY79Btw0mylJK)^?$jr`<;vHR1Epp6#VM+-I*cyRp<0wI{54E1=YZAry|G~?c5l9 zIWhLqF^FGQZ##+*KTk(EJ@551O+*ikAx&u~FVa!YPx{yP$?4Cj2=Z|zc(;Guxkv}5 zho-{7NHCN{AM=;}x7Xcso8IExW-0$Mf9rE*B&S!(%ZJZfD`K?BN8c=y;zW;XU&4Gx0sKv^_rH zM|?avKIC77GkN@+f57SL_yvD;@%u~u4(E;IwkU;5KiZGa$4PRMa58?xRsD&@GEYmf zaH)h6gG=y4uzXgp#m{R^>q8BBXpz&F@viZkH=4TiNmyKX&^9EG+x}vCjOwFCWs#H9 zBFQOFMPn*J0um-(B`9GWMlI5<7a){@&2HXU?OVpi(5j5jsJes;glWbYPxwO!G58h1 zYw&X%xUQCwq@&Z}HWt~;7BVjw%a{_3V@yao)uZkUK5`Q#7xzivFBk4ew(krc+TvLz zH|1TeS)@$+P(w)+izG_sNUtOOf$om(sHn>)YVk|TY%~hk4biGu zPZ40Z^*7&}*R=|?>;&EKk*6M4;*oi9)1yye#3hkZyq6#ZGgRme6ZR*vV;GXj0$mY| zQ2R?~NK$!!!d0wED9YV8KlNgoP^93q+&SJA@bX4rS6PAXr(gOc)%9xRYTjRQ>>0B2fs8CHSCXDCkn2V&XBp8gm9wOk3obCxd#JfWr8exDXQxY04 zx~)w*l7Q5eiyyQ!1k^oai@Ub2Ga3y97Q7u~c zveT#}@6h&t4EgZ5q$m-1IajI|Jtzb;API>ZK&>r=8GC5u$S$b{BW7ErPLC{G@LV?4cl`^dYZ zB88?X;sveB_8p>p5>6|LjReZ0$i_OwFWWQf_S@Qa5QEKbeLw&tl|ugSFygl$T;pR* zVyq`*E+B^5PL)ps4H7c^W(EDAlvFJwy#A;(9YKHDQ-1<0&NN#>T&#tiG?YdJ!^RAy z+L-GQZ)4isx+sdWg;!wLGDKw73%)`;Y(=y`guKzn|^hlf@W2bi4cj}fdSf+DbA_s)8-TL`Sgh)CRc z5-L>O1Ge*n4kO$?V(fJyk%9+OVIYj1LAt}M6stBG*Ko+q&_5JD1??G_?fDOlpEe3V6DN;ox*~TAyf+3RQvfH%w%%+;B^Tlh)*#(HjGyz%!P4XT0Qz>wN#wd$C5^y;qzjc-qgrYlz1ej;9O;AbkV5}!i+-Om9 zN98T#N*e5KMlNyqJPZ9rcUtu-TD>8>vGq-GB!T$VAp*G@?4vV9&v@L1*d92b>gxtx z#uwdW#*;S1d2D^18{PTAr$=1cAVt&4mU_&=#x^QVLj4v-eIu4Pe59HgvAGZ;%pY&J zvr8P`&8mh*mUPR2*}UD3<*GzhtBB5(F|0ZaKtDO^s;}^n$G6?6&5)*R=u;&y-+Sm@ zg}17rC=9d6nc~6b?M3&m^a!Sph!StUf*(i>Cd}4G!XNmySS4pOJFbg@iI2e$KCA{u zxz7o94g|;clD;(#C&8ls`r{WygwhsB$qLro8DNy z&1*<2T|#sc6IcGt`0hXJl|~iMF23|w=^6Z4-=e1(SFpgGL|{xJ(39YnM(a)G7VrZ< zRc!Jdf{4~H{Oj;tIb2iw9%nB6>-0l2lr&8#Uf|Wm9hgvIZdAn&{X=OdnyhCbuU~ln$`%%3?ex%Ts+gyqGh9HI05QO#?y*D zS8!g0;?UQkA9ZDX<>ezLRH&J*I-wIqL0vQwEF>4+@Qk9SQ8qb2r9tD6b$+EaTg(I% zckA36a&2@}ELQTTRrUP8<3 zTLSJpYE9PfSh6KZ%PAXIj}`|xrb{;tQmdF3RLs3z*wWfMnvs;hh?E>-#Xj9LrvA(G4-v6!V8w-4$mvpocgz;6BA^5EbyLCy5Xq;S%&GI6Pd zyiW1ZFW|6T2JPl6wJ{VNMNf>GE>x_#NTn+BN||@pVU8#n!hxDRrir8yYUkr=HCXM4 zBja%D;7}(5rNEho#EQT^XRI*loSdF^*jco5*|~ayjiQ+nqC=EwDrqG}(Z%!sh|Nn| zSY$3}LX;KYundGf`WBMH!pGL9JN#AxcM=lIiTg<4lEM+Mo(t5~V2*XcDo!}+?!4Ye z^9ywPSEoNE$%yIEARPo=3MTOxS1FC&{zRoNlO93R8>sc~3~HI`r^n&;HmgXEHuTx zwZo|&g~HqwYJ;Y&R2BNNkWZAAk$w|#8rr?a08}=D4cWGsr}{8VIsjj!oS4LpNcRLO zPeP7jdXp3f0%VqMrC6GaRF*dIiYG?@k`A2;bzlZ{PooihV!fti-Y1B&Sa7+!A^H`Z zmw`;UDOI{FBWoSVI)W+%C9XNKle>{CxJQyHkJmQPc>>sNJ*HdI1kifnjgQW5kywJ$ zJws_wKiIGp*toE^sDop(bB<<;#XKQs6ID9O5P4^efwN`)>_r~;95eoSfMzR_;~AHLyJSPF>yR=a9$v7drP8HJud5Ow-2f+_=E-J9!bOP5t{=&z z_l8EwqcUl*R4sB_D@GHeMS~n5QDK1fBP21^kaa_M%W}<)V{C2r$ARwA>!kQ_vb>@4 zP&RWuV^y)n?Spg?@@8J0-1*kf-G6q=qKx}tD@I+&Vl9io1NGc-T5v4f9Dv*?CM+Cg zqI?n`?r1iuR3pNfExC4$L?WoYC@6HwAMLtmsc|#A* zFxsAQ>wk*V7i>e&E&+i{vw0Z^l$sAy5<6~uxuxMD5_Lv`@rMwRkgW=2+=}KnvtT2ra+B%UU+x@s9 z827z%RT3(ZYc8%V!g*Uy+DDcO&${0rawW{a0X(G*O@EMYJ%my-PEFua4su z*Aa$9cB5hIVaK%l!0~Q`A)p-_N)86b6!@4kl<>Gx5^bP(XES-nH!Yk0ua}ng_sp)P zwsSV|^7UQn)ukL{xyq;F8j_J7|Jr%Yh;U$Tj?$0@MJ;X1M$H8z_+l+Rd7PG>eEF76 ztQgldw{-r|p@);WYenr6)-5?uRK0hdtJmkf_wm6a_D(e!$KZ8qIStA`QYno1RQSz^bP72zWSEcqiLsZmr?;SZH$@TNdm@{?I7r-Y6`Ut1@^o$^%s{mf&SjEk=y6 z0uTx2!;L$g5^72_$H{-4k0g2hn~?!ZqXXo@|7Rk9_`DV=pa7jZK3nVQHZ%@`0+<02 z0?}`T6&8#!RCm_MteFyP5i@E%*O+WWTPVyfb&0V-W}8~BnQ#=o3CL3r#Tgf${5qF3 zQ8a$I1r<7@G=_qLouHx-kfn4p1~@<`3S^*l>l8m#BNgvpYGM^7suu)9Q1ISyB4ZVg z&@Tn2cCC?1SD+v%)X>Ff4+@(ll}9%U5jgzdS=-j$M|bAXPTtha zYo+m)*0LWt~J~xkfKd z;Z0kMh+07sDQM|fcv4xhnYQG$MZsQBY-{d<{$XNJ8^Q3QV?@(nGs8)d~i(I2ZXEUoj&Pm;*)q;_8AujGU z=raN)L$AdwQD_SezbKP@(0!%0@Lx7^$8V6*8omajU_r(Gm@jhABf9{a3||qt8ZJr! z(Rlgf74a!XijfIq0L0?R3T#+TI;9j}gk6@B{z-@8lZPEGv`tvHM`kKk=-F-2vp4Q% z4o(|@STJknwZ_<&%VYwC?L@O%Pp)Bdpun^> zaqB~ElLN4@UN3)3B`y}knv!!%MG|f9A$lDY#Qk(g!nMwyxjYJSbYp#T?vM)7$lfmH z-YFHNVz_OB<>7Bg_7}uhK?U)b^SHEB4N`Lyguf;Pe;1u}9r8i+L-ycW@d87)YdD9! zsS^~W6ZyqgRXHPQ!@==~lKdE4Q*=Fum{^6gv+;%LcK%spHkhvp)Ra?zL`sW3hj;oS zv8CAdn^Ma&FIZPJgz*)J4xH1d6iHFDro9j`hAl1YXyVpK=_WV!&moM?RvsJOS9>f6y(I1Hf22v_ufw8uB zDwQWvi~8Lq3%WPoS1LO@kK%oe>7ZBlk3>F!(0HM>gQrLsA#*sSK2|mrJh?L0mnDGe zuRDEYICy1vb=LXeExdrt9oT&*b7zV^72YCT{Gb&B}`$Nie~IU3KP<3W4%bf zs#^C$@J&qncb_pZ;uF}!@Mv_odOP=ULfL1eG=JScbH~nd8YNrk<*HAmwO_-bj=z>m z;$%MRBea__3GuS>1cV-M%q`0aj_P6{z3*O}_1^az*0uG9fw(g zIB)me2=jgK%|{>{!;|;WPAx`#;`S( zWq1`ggBarW<;uQ1x$1Xp)V$$S#HsBec+&Mh&U+U>;+T~iPoW-{a9&1Su)n|w zAc+R4*w?8zqH+`qhwL6j=+1eqm8SxB(}F_=b5OxpUbGggmeq}FeD~De-TlTIET>bK z6bb&gNy#8Ife#toxiwhX;l;o~N8Jgbq!CkI074Y`?1q%_>-XLFSS(bhk^)ciaD`U4 zhU!TK07IXAqljqhm*+Zs? z*dfN4)Kf2tqEg2g<8qgYsh~ZhB?2AQP+2i^hJnwJIovhsP|}7GHk(+S_6a(UQScdJ zhbVi|bq#?mX3i%>T@Uy%?GH@BiwHfgXudh!ooeHhY5|qhN((3Cq#Y9_t*ESC!m1}A zLFo!3CmC$ib?HpibPT=4U52YhK_;bgI*)Tw&UH^{nYOB0*dqeE^v87?#0_5cJ;q?- z7YJh6v@&|Js(6hG_Xb)lD!)k!-;ibCVV3lNycaf9GA^QE{C#y+gq z^Lw#j{o@~2y`bfk1FCVy{QlU|+3J(ML@kW^6Tc|!J58OUa}(&!BU5~8qCaYg6xSjy ziFwTEk^c#U<}pRJQxJe)+fWYBk0y%AEqhD9FIV^1SvY~MH3_KSbr*%yqySP1&V3XC z`V9B1#T5|HjaPrvX#oYeKcwL#siPa&ksC&^71t9%h?N`3Zvq8+Rk`(HM2moCS{gMuR4k41ka)+L;we$c;k0d{RkEZ( zLiyd9GxV_(^(6os30X6Lv=o5Ual%z67~brN)OY3)9NV0Q*SZl-;@MLi6c5(bSL)mT zFa7Jz8(6Ae_Y^r^h!V*=Ezapx_quy}0s%Uw*SJV4ankQzRrC{p)=u`jZvXnkI@~P^ z^V~XY7rlRB9qtvrx7*g?eo=__E{di_Auc-atv4rsr6pVo_vYmMymyL#WA{-n!^NbxtlRp#7%vrg!y=A+^_6osLZAb>O-M zh0x-i_h6%HyW7vTr$2S!>9f6;t!FO}pYOdqtjN8d#DJKTHNBb17uMdsx?wQRZ!*EB zzB94~w`RS;BkS^A4@4vpK$QJtG(woi`uXK)|N6?BdIMH+i{Ge&6-S~qDbRN64epbW zSl2JE`=rT$)x8ei$zQo>jgSVfyXPHbN3_O~ zG0HhCr7p-N?!*n0Xy+$aKXy>O>ipQj`Xr~q|6TfDKm7by?BDD3zt7tHyL)N=?>+eV zQ~&!X|98y)4M*r+zZC5^nnlBQ32RMhBJdLI-j6}y4U;NG%Uz!2dt(Cc7#+RnwZsGe zS7GTUQZzAuZmi7flyg#WNUm^-JP?z_&PB+UQj zB+S1TlcAR(8!t(NUY=LIEE9Smu{u=j6Zz7z{b3RHGmd^wYZ)uPn5{*+8Yu;Blfc&7=4E6YE5Fq%{=*j=LN+K$(xZvV}W>-u$458kfP*cANaaPC#~fp9z%+lrQ}n#o?3ONGG_E| zPp#Z%*#8u@a>CcA)AdP~U;%t2yR&IgXG&sDB&uJ6P|cW3w5%!l$8^8ff`IwPzq9_! z84N&3g~K+*bOk%IAe2>G;4{n#>}{3s z7i8xhu5rxrdxCd{c*nlc<@(-p*0@McXW1|?Qeq}l!H^oipe9Q-#YOMh*c>6Vui^;B zn>!C#hsl)9s^W{PnOL}$&`ob2tG!al%vzTmu2h-EqmV}%?#pw=P%+JPAGvY`Q-wNI zP4uua-*m$=4q{{29B%3_z+$VE_kRN^t&xvb?*}I0m=kRsM}pBXnz}00XCXmtUILqu z)0QR96;}IXC54HSo0Ng0HqGf`t{{d_Yb2c$8GP2L+vdkvYHqTwH39J$SoozTAviN3+mh_Sa&=T4#H`s=l$$R#V5kNXY zMAnt?hZ|j!+BoJ4Ornrc8tTC36Ae*T?ukwS-7>sEKW*9=hu*Ch?%aCrUF0vkVQX=- z_{;dX{qo!B_}SsX?(Uw>JGcyBbkDrG-9&I~Tb=M+VU1!&ZC!euj^FtB@4>-aM6Fwz zq<2#eULpjA&P|c<-h=t-e;HA(c%FcDID=5osFK-)`ck0mi?>Jr>zP_ZcOLq|V>3{R zRP6y_EU&Wbns{NMoQ~!MQVXB)7K?=@SOmhUJC2YM(mAR`>=%C2 zl^TC{lwo9_`<$k{f!Nlu^@c+~Aj90q=Vg8D3|%8pI~6!py43Gut1anMwKpmZ^N=d4 z45`cB`_2_B0^eSoci(icJ8X$ZhE1|%(lnFn68ia~_x_@i^=DGz#Yu0;yZ-b(DBC*` zZbj@=KQ;d37>*$cbohe!Xikj5vRWF?a6+SgK|B+_6anbojGXSttCq~;HO8^!d@8+u zpJ)s{5YN98w`+m#3kdX#{44O;)8tMWht47I71HhsUB6oCYG-_;wHuu^9D!MvJCD#I z!t4@Fay!ZF#@CcQ;dg`)URgf1K0t9l=Ao#j!HYtH6VS*J#2j#NFXl$g4qbR&H^9$8X^p|hQ)dzyB4`ye#^ew-1*jMCks1AT zpKPeJd71Bj|Fz=Xo5A7Dx^o)G;Rckl8`8@DNiF+-jav5p+_7c?ae}f2G5P$Ml&sSP@}HhoVj4xk*gg$a>9mIf zHHgr!j5mEau!nRus1Pz{z4aVYPDIms z!^A8T1r8klw})QK4<^|K_iz3n+}YoKdDwpW@>x57_mN`4E(i$^-$E|C&UyS)&&d58WoXbbloCDa}RA-X}Nl`w+Kg=t%z~u`z3juQO-vOyDJH z1M$Mg{yXJFC>Gk*2crc?3?hxd2@A%|Dfz!9w&zTUiG-O{VkXr^11mmU>oZ>knWv4X zhI<+3-NYvZL83wdQYv*O?_|bKTzSw}jl`%%E4l4UGp`Yzh^}5N=g;~~8|2#XB=9-) ztX~&%si~E^kr5*a%hV(1?4esnPtQ~Yth@mO2AlI}J=XRUiJ{)mw6enEcj__tf6`fq zWHgKn$#7qwb)-Oop>7RDzfy-q!P3oQvvB^Xfq?FA$h>n+-F`4=C zju6mjIUO+>9;1=LnnWD+5|}`NTIE%tmCIJj*$E0<1G{MsJE?AL_1N^J#Ic;%N|k8{ zJO@x4#A+I1qC}_Or1I2S+J2Er+0;U+(bmT8l(P8BZ>W;w$@&N>!-AY@%Lj8I8%wZ; z(%4*v4Tz2Nm}JF_G?lF0_@EEc4>b&JVBcdU&{%x(?nA0*-6tE>eWTFfq*UGWXx^e|WzU21 zgI+SRB?+*_a(twpkdHKHhEbFj%sUZd5+ArAAJeDGpWT(|82KpFQ>Lz0<%@=qA zsU2N1Q#DJ5W@4(cp{3#O1~H_4uM(pqcyVI)n`%F%tzs)+YCzo%InlO;CKTYMa`MkM zv@j&DZzY*Lwdza6cWm67Idt<5&+<2xY;S3{zd;vC%l=H1C)V)Bn~nl^&cf@C)Y}Uy zJVE>=aMno!Sw~F*oRCw@l?k8a!`Z(n5C5o2#fvoSMd>SK_g#0)|@sWjaW?mHyJ-nRQV?Y#7l`2bT z#6YS{YGed^&XDosun%PnloI+KnMYQWLM1bqBdO|O4D(3*4HCIu+`@r*#ns=Eq&mRXtyrzx3 zp^NMALr-~jELkrC&kww4Rl4d_gwU1Mr>*nhB?%2Bk%>Q?6Lqar@$bfoYFdiape@st zeRk#HD0Z6aFn2M^ZdsBo(VS4D2yH!Q_mUO_U;X*_2jPDY!clAZN8`V=cb`2!koe!v z_u2=9|Gm5S>`(lce=+>;rgiSjM{o-IA#j)8)T;MjdJ4kwt$#K)I0m>B=rG&pKk1FV zp}=mlW^Q!jkC<``F}ffty1f+@XjL$__yMICl07(dW7euFcotZ?vN0keGHxC%(9Q!&WfKapux7yoo(BV z6dEB$LNy9Sk#NIWMtFaf$%lq`Hg{&~)1Jcs*$F^W%ng3)VCDh}5oZIOJeR}B`pmCW zahCIJI?MTDNZlY3`0U{Wk&a#zJRl|wnc2tH%(`ZT_R?{>iRl_?L z`Vm)Chx@B5}o6KshKTWa^{XaM}mzeZ%6Je z_Bb^gwAv)qA$nj~>eP^+gW^_kL!_bi!H?#=BCzn)=Lsi z6xe5(=`xxvWR60^OD4@G2xKkN=eV{Kq8J^TL?`twI~O^f6z`QvCsmAPGOVGubJ&7q zadC>gyXyRy+Jrh+7oGDsz}fXLmmT{ZItUojlM5`pSu$oiCtwI14sSrRQ8GWhe2Yi6 zPT%?#zS~=R8}JrsY62KDC5EXCl{4`4J}BEt8&*h#AWgTV+Um+X;Ut#=uEtFR7KmH4 zOL0i8aZ6Msw4fpmuK?k!q`+XW-|e0C-u`gjsYeZ~4*#^GTRU`zcrn92miTK2!DR7| zt{L(d46PIck8B2&Qp~(594y%b!30hF!}Z>qe&@74z`_jBb8!eF6lRU(sn?f~;^8v{ z0vE->H(QE-y5Wx^?eEzl$#LKet?$3L_V*fAgTKIMT)##UBZruEg#RuX7>Wco@#^Qx zYqgOh>&X*Kv@w6rHgVFeB<)^F4i$lDFC8k-7)yc0_}}A`ur-z zNwQekiTdPnbq-%Z5WK7JHVh$!aUNwTy$9-Q3j8vo^GL_w_M!V0+@8oI?ps;!ruD5> zg9g!{CuvT680-XSuOz9(u)c@zqGbt$M{h8h(JR_EoS2>%k8A{GgPN{!gd`%Q4;!gw zin!9$p&cQe-B;M4us`Vyjt`$c#r*T9a_li6+f+y9ugfBCfB(tD5QNt|Ej4LObEbTD zi#WHK#XwP1*T3czviCM>r=%l^QFX#4@Q@p*ik^ve?9A*UUgpUdBgMMv4|;NVcoT%_jP&zR6wi0 zdgK*Jn>N4au2kcxk9eQZQ$r^rNAYzYYM4r%lUng&mbj~xThVY+cBA2qaO<(EpWI+h zPH&hrmCAvL9FP|3^UxN)0D5=A zQ2Al$O-FQ(Sg)d0b)5x=hRjz82o1H@PZ{9Xg84`qo`}E;EN4K>X^B(C9Bod~ls6(J z5od}C5H~#e3JyHUUM2vm)@)#OVJr+;=}Np@-!qdE{L9rRT96)A$k)R1oOq>;>WL_ywr>+y!m0e4%rHwbNa!ZoEwX(Yxa(5Aw1M=NzjASSP z1`GN$Ai;+Td$=><2~Lcyc#gc1h^VQ6$vZJkQ|}{VI${E+!jAI7($r38oC%zq=u`Ds z*tfI18tILqp6x|DzI)SevYuZcMJ~dG-<{~`psR&S{78*htV?H*NHskE9lUrkem;IN zJbd~5#o=DNJ>DC&4__P}3=aGba>FO*2fGJ}J(bc) zby|+Z1x%8NtE|frmGc`OeJdWCXINVfa$TXXas{3%G`{owQmea?S`>`XMJqW}GWs zrH}OZoSd%=xWjuU1Zv}Bia&ovy>ka!Jt2WIf1&%?!Mm9Zqi1+KzjFsIp(iB2>VXrw zJ2$Q~+F6D{3r8TfxoGaz@GljmM-Ykac;*D3mWyxkS|V_7kN2MMzt}&Jq0qiy8;uFv zBRVxzVI&7tauSyVYP;Qvmv1rYK^7q%w5zul$dATPX{#skxd-)4b~t{1tcH3O0}JJZ zn!-?{aLH=I!JRJ`0rhF$hpCF;VMT9qwGf9~2;%$C(b zA69anWIjtYLX-KkPdwgjkvDgohL0Oi;8FzW$`z&<&o^|Zg`Td4Q`cReqPd#6iauy8NfWqG{W*yuFqyhdV?+!i znVpsAZ@Xv7Z%sB?8j6AmG2vj~B5|Es2qms5suI_QGZe!k=Oqx{8j?s7Kz-3jiwy66 z%&o~}eN84g1(^i?auI&m{n%VnlgUGBGSO-he-*Ob$h~dm4+uJi1y(})NPsKz#9uq3 z2aiWefW(rViZ}ub6M8z-t8F`sK3metJykq5RBr`Kdwx3%@67F_#<%LRO?)FiEiaW= zURuk!AvNSD?(rpAZVuj@Jo1|65iyEy*>V%W7RyQCF7TicGb!MCL81^J#n%W#95eHf zA)B~HGcJnkQgXh~I&^JPVNOzTe%~M^dw8RjOB-jgYskjwg@x&b z>7grd_Tw!GeQ^r^lyRUS$$(H>Iv#{g%e2ih@z7le1Ek!({Sxno57-VN8Ph&^ukBEz<(U(EjO~zf z$n1mVw?j@Kvk!jB?J(1g#@!}&3p9)ZL-fqHhi6rBNJT9_>r?QQa*H6Yy4&MZ-R&`4 z&StJQHzR-I5}INi4x6Z3@fb}}QCxD_$SYA?tE*4am+P6WF}2A)G_^ms*niP2R#T=) zt#)x*ixukc2`q$SO4YV@qpH&Es?Qh64XokfHgjbvPw`YNn&!%t5nYXmYcX_boKMQ! zi;;%^UiV>!+p6>x)W6o%(ZBj#QGCBzd{LA;DkQ0qIuN84Q2b6fc!p)hhD3b1*YL=( z%}LqNJl4R_@=y$OWEGNmwvnw*{1lP|Hl}>HVwtVH+R*^xnRJ3W}?1 z)p7xoG*~S_Otx6yWxLo~0eax7bN%*;$tz#+#_55egX|M={UvpQs#`R7p$Ar3+ZY5-|YVP^LiZ&iLrx6|k&>i2(Y~d>w zBpD2^@{OD25GI?Ol*!HMB^uoP{wh;|Wat%Usp;b>{^MKF)KS$vLM3;;fvON5m9DhW z%jYA=nWyKy)1UkHW#`K7cTP7<w4PLn%+79|XH8E#lX`v))mBD>w-JPp||!A+r#oaRu|C&lYf=W*;c4hRNe% zQNsiT9U%hZ^9F%(9)y5;&IGsA)+X4m2QLq3HNrVtzsH5n3$}O0d9Ba8f|-+O-JMrwGxvKjz#1Y8l zM2+^2<6U)rRBW}zBWiArB4-H0zSEeLuXwuTZn~yICuKfMm6+e(#_w~>G#+VXitR5H zlLacLCyfpm-a!b|%4Fr~+e+82T76Y1vK7kogJ+M6D+M8L*H#OY`Qxjl4PF*lL~V|( zwmLfHeE>(!KX4KxQq~gwYZ((?p4hhJJAp`<8MoIV)CF$ZO4oPV;#qtMTIF4t;2)_2m11_Dc2?syy zkyb1BSSCaUEch){duyEdH6=$fB~T_zJb~}&*aUr$FI6y&V*YzwWVxqblyI=sbsx%* z2<4Fdq4Q(+!ag}a@4dILf4b_Nob~e?7LtO3p_lDA#D=SjBU;mXb8&57^xmIzuQfBP zIKrCnN`u>-i?dXD6t65H*C=af$s=EZ9HA*lU?8AXYdk_}T+Cp$fP4i3)d?M{QjlJp z3;&H^0$-c^gZp3%(j)0>O7=ls_Cs_aDB%MubeuA2B-;xCHg6pPxsB+bLiTWA3AGNp26t>L3!N`(mpvoU$Zti!)drl3!k39 z?O%7UuGTd$h_L9l5!@r~_a)QbpzkhT_n)nAi}^TwW^Rw7<88JcXPtNJssK`D`O-iB ztcJGkU3JdhzPVi6)_&lQmb3hoi8jT~Ijx-eyQTI}=S= z1Ig&6GHEx|Gh(S6{drz~oKC4MbJaq zx`WBq7(YNNK-T@yD0pSCG4d6(Srx(}h0L1Q$oEo#nG#ZUTR5W3Z$#glU#f~Lc?2U( zRCpgXSW*c6xmJYxYtHhZF2)-ITxi_JQgcRz9SFgR8ZpUQ-`(kvi&iirH|=6QSen|r zoF0rX!v@Q-IL)&+yu9jN_w3J~1ur>9+|P|DK~@NxeicV}h7q7j z_7zAFug|-Es+{W59|t`U3JIgF&7m}JNSWGvr$Y@rT(QCf%&5SkSC62%AwRoynMv*3I&d%5H?v+K~zr)b4tdu&*INrHRm~=fm0UOEeB;6XO{qz{aZ+{Q} zV7R0xvT@?K@_y>-`VEYp?#1g~`ZmZk<@fT+60ZiS*a(w{9d9aOEVqZt0HJSo(n;Xo z-fp|S-5W;!zzueG_g*|d*lXQHvuQeP4Jv{JHWO>xsm0voA)y-FxUiB#so}A8mm;;L z>4FV7TPO`!rRsqwdO&ygyV;8{$y1-|3w;=;rMFM~=arJ+;sWl8@rs?<^2VO+4_1*I zJ}3$A;Ys)l2l06ySdK?YgjS;m*5(n?@cw%g_zOrwoDgwUv3vjT*;Vhd|DdvQx+%^0 zy1!i$&Rfx+=}uc2&zs&ZlWYS!N*5%GK3U!?f=km%CYzea{cfD&=q6}5;wRPD^ zD=9GF^DY*%kOa{=7p~DN|K*JzMr)$4F)@1>$YlwW!FoQ(al>FUs2(j4I2ZomV!!U5 zcdV`P;#J|rB#jqTO^nfoux?+TT>oUhy?%3vH&NAO5awSYju-i2rz#J=hm+ZBZ|Vxy z7)3Tjb2*vqdO7j#1}%2b$if-bza<7CR`)E?OS0XB>NGN@IatuGWzW41O>(qX3 z>e}BoR);-GX6oJ@&#oNR7|aOsn|J`1*QqIm&6pk$YPkiAj6hL_E`{$dy3V{(7cQ7q zpV@*#zHY=@cxuIh0NdZ=xWj`cghAf~8~L<4{r=-EU7QC7{sM~^XZD4bFV5`#3s~{g zR`8ND4p4|YrNVwC6FW7p^FWtn;f;XHiM41NZ8>8YzUlhgTeJR_Tzc29x@#9)G4yW* z>TPD-OhW?e*k~xk|5P(r%xLFV!IH9u_fR6abp3({9z?NiAKpW;-C;%TWwHBaqa7wuHGf;cjjt$120 zTbaV|%?-UcHMbhs3JKLvx+Rh~g~d|BW&Q1_kjdPXncj`knca=bH92b!EO`Yq@&d>k z@rKjQv9W*LM(%Oyuw*vd^vL9=g_Y9HtI08Bx9z3?fVhUhq#o{Fj0rD~0C^D1g_GEGMaqKvW%DrlLn>%8k&*401)QD4&Ju zj5onSnndi~B*+Q)HyAdQIpYSlp#<9FGNnKPE>#kJ)kw08=~R;J;zw(DutJKLTz;1% z^OPT0QiRlt%~r(q9&J^Tf-vkV@79(SJ!QI+6g~B#u;^qKlN1~cjM&5_OxqEq8_k$? z`pueV6ShsMLSS29Lg^AD1)!^!Bv<-bEGBMp@1xH}o}SuVq(_DM;U=N46%UbAQmnyx zPnVUH#g=e~*my)msYGmTB%_4xJOmNZ9yk&7@k&|u^cRK25n*yhm`sV*9Ct?cNz1^^ zW|az1yj~>X)NFa~SrZQ->apX{1YB%5sSSQi3`z6hN*@pSxLD4W@rX<>$tq{}R`BSs zDPSpd5sz@9RzH3yGQQ|#1QtH3qyIOD#3MI}gPbxOH^p9!_~rM?@8a6-@)!Hf$$$2) z?0223ez$jlCzXATbg+BTMZXADXHZe8tc0Q%j{Kwt5J!IahDyd`?eZ)RVgJ-QIkPe4 zL@ifUxa<{e9hJM1TskD*6~#hc@O8gf(-Yq%${W$kRTrc_TPaZe)<>lzX*r?$wzBQE zwNub)oB^gm$`ezv@aNN4y zLu&hH;g2YO`qo%9igL#sm+NFS>dvE6Sfe6m9%1yRRTZaa$V)6xqMnULl2l4F%CN$? z=21dn5thdK0`$9Q=a4&or1LBh`RXkKzv0I{BKOZbolA^PU+$B@b&uo2=RKnTSMSXa z7#%BQnRM?lM>R&-gw9~y#)R}MS=VEjuTK$?J+h`rfOpoglWs=@|=-4>vqc`@?@#ql0ADAqE99j8@PXie?xp5-YqIEB!G2C+o(DSThZsJ(i%F$8+WJD@QkEQXz?TLIT!fe{Y+_+5o0J)ap%if z3pUISeDZ_OLw6Bb-5D07lbAcmjGV}od!tRZGq#QUW6QQ@jyJdM)=~WW zefQ$5_r4!LP!0r`H$q&Zjp0%HA>v+YFH&lq8z;0eY#0YP?_Rw9Yx3jz`n-eI|J{>| zIEVs&0>4tag*PXsz1TYdnKoeWpse;civ^o5jo7N30VepCwz3BU?B!Fsz20v*q`Ox@uK=bL-rjFFzw+>aFKkcM~@{IuhdC*>G4uOi~deJXLauaa!Q+Hh0IkugbjQ?xPT-^G(So152m%3Gi{GNpnm&}lfV?9aWJCmj9QfnbNz^V z%Jt#5zoN%TGIA+fg#Ktb3lJ8F1VWDSaOW>5p&e5c9KpDX%yFz3J5Lr>OqNPK`jDT` zax6LU!y9+XbT?{B+zi(CjAm9k&1*D2zx;(Iaohh zjy!*B%c{SDS#!6)R}pe&%rW0+aha{(22+1xEqqva<3`6vuvE<5>1@~v{GGks_OqS# z-p*cohl>J>q$kB9END7;0FGZN!f9L5QKw|_ny$R(-pbo zEEm?he#^q804oF4dDl-CYnbTJ6I=1nY8^J=pXW!`Z}0lsd%L?Yxb#r?ySuv4NY46>(X1 zjiizQu>(|f_9R6@5;D0pK`B$!Rz?MYAP`~zfr^C`()#5-&d+GGdAZNm>^{v~{;@fm zd$`8}N~x@xwwX%nRuK^%zWedBey0xNh4VUs!$#mu&}V0S-OM)3SI>F7*&bkz@uHo2 z>Nt6H(?>Uod!72kO+N1IBMR_GAljau9ZHUf^29w{71Z9}Qgk1IfgUxRjee^O zTNUd+kOp9g$UC6C$bLn+<9_H&XL57!8Pi_#RfIsvo(^f3%3sN_c6P+0J|j80wugB} zOXPE)x+X`!6sJhWB&%q#PRywQGT8M`ZzzWQdzrKQWL@{tI*wk$wxp9IspjZoN-o*8 z=;IOMcerye*3Xt7k5q5(+}X^jJ*v*xeXS&qVlI2Gr@Pq4m6w?PgEr%6n)QjRGP`E< z{3Hl=3q5_9`z!U(Up+J3l|vYZfgAb8tpT+Bgf^g~v^awhs?#Qye^M!*@x2$=C?3A-)s+Bnq zk!gUjl3$RH2^IT{y*5*AZa)~e;`AjC7~gAqhs+^zqofkr**Wtboi{05I6KByW6uNX zir|uSe3g-`ZAqoz{+k>vU4*j*5;l#G&W7*byc?YjQDSAX^-qcZoAkea6s2(;4#huG z|J!SHS^jT#`|ykOzpeH^<^O-ge}W5k*KFN2@7A04UE;Eh@+*5c`+v zWv$t&H8D=ab7QaOE@!>Y4k~ybx$x=e=H}h_rPJJT6d}3e7%_fdvq)uaW0HROyWL08 z6-ws5DJP{O0um`p!Z3)X_|km<85VlDG9M^HXFNh`mH%B^dQ159K~*MJ-P_^#c69mX z`)1aepIzx@d_+KPE4Uvh@9v#DMIXYunYZ%2nNphn&Z^e_9f&Ag%}#FVTK@%>PFAk9 zZRL=?eQxa>f309Bm!YKF{{Qe&{#T*@7blma*D#8@zxv0~|7NqyE zZug(`{~z+7viccU|4#Nyn}f4w+C@Y^I=va5jc&*K_uJ9<_Uh&X@?`p%VOh}6&PS)i z%kfbEHg;e34300x`RWGM3x7g*TU1a5n9yg^KAZ*KR+%qRkEJgH)T@@i3ge0w>oBfrCr(#k zT>grDt+0dBs+ZWw%9k=B&%Iw%z2|{eevX5!e8~fT=5=MuJSUZ3i*~TIfO=P)P&b+` zj$k&As^%qMU{P7XzsKu7-cp4sQC&waoNY^8`I6h~JGL%h9sK!0v6bMJq~e5nuKU~93tw?YsB59q+kzlU|-TDn5(^j!JX zDoj^X?@NlBTBv8rB0viI@oq1gMsx4Zv>I(K4x9c?*`n{B7M>Tx&y^=hwyaE;gzK^w z4?grH2+CdoQKIX%Om5IuESmVPjlUWDf^#j^8V;Hw(EaeomQ`_ z{eL?>jQ{90I{km@fB!N5zeyBoXFumDOoN#d_zx6K9eLAmzCuXWI9z&+QV6_@7a}Sc zPylD)K6=i?^VoYMBGgcqQDYX~j`#@TL;P0z3-2wR7-4kqkNXfVjD&m*u#HJL+c^98 za1oH93OnIp{vrplr-8+B$lVBi`Y_*6lo0q5x*#KJAn;h|+~M9Q=$;2XWlv$*)r?a4 zL=|A~?tL$qu>%`ntUCLb2ZxSVqvrO9@b{B9iTwm#{0u(`lq!PGox%@=b%}ng`)3D- zJNu&pajJ#R;QupMF&=Z*Ss zXXhkMU>3Ch&gIMOrE?R`!ob}*eF?MU2AiGXOJ`n>=;04@93=K)=jWFyd(@oY)zQf? zUWe>1wzD(*4A(wkdohwXU8o5w~_(!Qa0+7d}&E(KI zr$3xmk(c@bloJ;(Rc;=56F-d)oj34@GhX`9D!jjU_W#suG}{MK2>AYWh;WYAVeNF0 zx+~{x?0XAmAB~%Up<6z;y+Bh;L!O=f`MV|uiyxzarlT$P~jT; znyU^yE&L<^!S&Ph(D@Pe=5piwERUe5IQ*%?%jlDLe-Aa!u`u-e7XDNfeQLK3ou6UG zfAn40`l&p>2hR8bgcKj9@O1=x3c4f@pn-9^GWz1r=l-hMJ#}PX!u(NX;t_g&nWES8`c8Welu#tasH_kaM z_6m3K<&THXyYUI`;ZFfRGR|Rqk-B_t-m_9*n=@h$`ZV57EO8P8A*% z4I_OYg@__Cdg*kV{X?hMz<-)>Dw@r96aQ_s>2G?{?cl#X`nS*j_A$bo%D0;Mq|+D> zE>*MLI>v|n9zHzASKZd2&SMI^&(4LrO5+FE4dp{|m-HS-B4^1_ux0x|3a`e$nAm7= zvc#8}kkOa|TRbL?u-O`5KiZux{@ZQPzb))vpZ*;*>EAy0GTZ6pJ#dXqunXlO9F zB&|k|TCxdJ`3Qu1VQWIyayy0^=)r!XzNhG%=e+k|U8v*qyZ(s3?XHV+q*@Z{<$&tQ zliKor31!Brm}KX=>!nA@fxcpB=c9hxmVN;2;s;3BwjCoo$;l3u|bJ72kn+3mVW4e zRch`UXI~L1h3JjW;G&qyI(k5jpCPMt<^tof2)GAA5NGbAKdaBwo6@_T%IG4hYsA!P zN=)A96y8-qIM+cMmrzchk6pI~C%4l)tNt zMHCCkeiil2t~{);kN0A~-KJVE!e3Dz;JgNQZpLn{I1?`JK8HeF?kRML8+tb$3xqFI zqTzHJ-Y&e?s1S;iaOG8WpjZwE*6t06=)noB!GD^zA(G`!s9K@J%n#}h_`sMms-VF< z9&ED+xK|j=iquKO+wrrdJj#99;dQxQ_<_F$)^I{R9elQ?C%_ldliXK5rWF}stR$06 z{;2dAX<6vphOv*uWBOT7;HO=_)o37*WO950g}f){G=x#(S1$dAqVPNSS%*7yvJByb zP+9uxhj|#zIS`48^)L{n2bUt;2fXrb0&M>i&fbb66W-`|0@PQ0Si9(%R0;{{uR#z@@0ih3l|_lxxws- z>B6VQxU$y?8myOkSN$C>-B~M31rvk-?@Ga8p8Yo zzYDi?{q-$fy5{fvi~#4^Y4C2C0qZ>THhfLfpZV%}N={}#yI0O@OjgcBrPUE}K8Abg zy}R<3MC9>j{SklK6?K|CUqH~-o2Y?h<1Pc#)(k^~j<_@*%y&TqvyaT>ia6_(e#4apzki6QKEhhpXLKocgq;5f_k+7| zPTdGd1TQr`sZaSyu3KFY5IWr!A31jelMe1;&SvZ$bg4{XQ`TVDpMJEgbWn7g=c!Vg2N-uy|dPq;aMTqtN zKs}n>akyoIf%DT4?(Q(+GZm#V+#%5e?Vs#dZYuh4jduD#1n`W4Jom#g3O~8HCj6Q= z#v5R!-K8^z30g3_fWPZ8{?1j{>rq|7V)er!UEh1bEb){2?18K6VQa^lLz{*mUYsu6 zDB@MSmuK}UKdU$M-Q^8<3G6Ho|C=zK#i(Q$;*#MbU`6;*?z>h~ORTUQUIYXW;REO} zs%Le6mizLU3FP=!AGm!VW?}*y-lgx~)3wG=>vMcsU%}Jd*TOk1W8klV(;%89f9Kn2 ziIf16!D{ZjO;I4lMe%_La943DXRcn>g?scvI!Rq&^-geDIKh!W2QK`#|Glh|(y3r= zDg{-SxbyMaoqA7Hq~de4#L)U6`1P|r&Tg-X+6lfT#+%^L1zGeWO#ha8#8$=psJ`S! z`Hz{NJh)M^@E?GN@>3=PucCAnIUmz7)W~fs%=T7o>U?HUY0(7=(Re>RiE)oD$eI<>4v|~(AaUes&aCp^HX&rd+n7D<(! zRlUYm`aL;@(E|75LgW$n-(Pc7eIQKkj~E?v1tVWo?D$VOEvp9Yr2(oF`y%a${_rh` z13{G*;M0QN;3NN+H@K)X%8ObNdRM>acR#=)0*@D}-E-V+hz`}qMR|oL%-A`Z z%vNbtPbOjDrt&fO|I!CW(T#y?U9C_HRsP+IN=0)zM#p_ka#LWh$3C!+Rqaucm`c!e zw?v7!@*bSC^brH*DoEO5#;-{g*J$OquD5O+d%+@I(3X1Rfqb>9+Qlw?1#%u%@fL25 zRlG>ia0ExPYN8fWY|`v;4@9H*0gfS18W4z9s9dP{dNY^T^r`5gElXd;hhi2abw5Zn zhPGcpL{N<#v`#eo$Mi36f`UD)YA(=xCi+b@)ijRV^e$RJT0;Ut#QB%K)Du2QfwF#A=FIzmVCl6r^;!#|+7B1RD zVXd(QeJ7^|WnCAA&w14V-Pzim%Qwel=OUYzs2Y?W4|70Qp8F(nH(W!Hd;5vDFR<;E zcez=DzdTlF2Cmr^3}*|$hHKfKk|BvSp`yczlbBgXzp|@V5&E{nR#`2lNp$ngL_(yH#g>k;aP}{=+S|Wx(DFWV)YFBQg2y|6Wvn95F}NY{^xP z%Cg#dIt3PJ9#&o0pO*NtmUxQ~JRopvMHe3yegNGEL3rU+l0_^eYUlpI5=G8{ z@Og2iYF@;XnJPt9$ef+KPmzbPG#{$IJ|CXE9^QOrZM=x2bf*J-3aifkhThR9?UtN6 zT$|Tv5V+xL7FO|35iIWHLD`T^8%evxbN*8ZO!QA-=vP$n0Pi30HQOJ=ez5T40H^94 z_J>z_XU+Y&k48*r9#NagFruteYXo>p;{5}zSQG-UywxXniE99o+Z;dC;n#>U1#%jk zd`j|uescK+y#kZ!lQEf5C2YOmY5T=@LjqBH<%Ya)!pEI@Kvbr%e#;OJ5?tO@>o*OI zB2=}IaX96~5qp))#B2iZn(~ow)b0|l#0%0J#+7$?jHME>!zg{?667f7BnCN{O&IX= z2m05=XL%)o^@0=xy$0F%2fT6J`3ktJszIN~Tez@Uo~51~^B8`D1q+;;O#t@n1~g1TgX*ug$0nK*tzj1o*z~1YZuGZA}K?444A7PMnDX4TVA{Cs?m5@ zrWSa$HI|{TWetD(KT%7+0`bd>;EY#YOpmczNAj^~_S${fz0vBo|4f`Wzy0SVtUMH` zCz_yXmJgy*Xk5DJujRZAQ;eROBADdAZMa-| zn@Tndc8#Bkby247WCa}M5-yz7ujVD_C4F_={ioOP-^u@1BJ%&S{=bcOqe=e1%|4Xs zxBBG&+v@$(|Mws9AG+SOYp3W2g#NNq4-O+b+N?LES8?{I2WY7WHe5U89p-#d4hv4F zdpjpV;7|pz6L}aB;32Z;jc3Lxkzod##az2&?4~CZxS^sAavRI|kYzAnJn(VGPeO2*M}i7%-Kuq{hXMmR^FeWiK4NOXSQdeIaL% zC2SAOr{c0pvjf!s5nrk4S%nE@=*2Ym=xnEQ!J5sjX1TsVi@=8f2N=~$`v7ejlc4$l zqXVYZ+tv;20ruo;yCDwSh#iq?TNYLZA026&W{|2tOmTxan`l}c`qGR+qd{E?pf4pK zcMb1x#&KldF2v=_iqP!)No;$EVp2}ndJ_-#%8We1fn|{?3GE6*&CnrJos>pxD zq~(aDM{|MDmruCnvW2ih75xq0`M9|v+(0V>ofyV&`*t*T##gUze?GYxI`H@P&DHzS z+3?JH^})G)J9JL3u0Pz2-n_ka-d>%b4R6NI$>kY5y}Z2{y?S?h1rK&l#_;7XzSudr z{NN0KxxN{W$IjJ_GrG7wA3p|?OY6RPT#`MlUJkj(d`H7$m`MVCARe%8ar{WPi}5Ur|-^BZk+3P zH`iC=p##I(IU9{n&re1d!?QZH4lO#v_ruFuXZ-f${5&_xtDi52H`sM+h_8mw$CFp* zLu`l!c{aKkp5EeUvcFDY;-GuyhtBwVcsjyAhQAD9EGIV~4yDfV@Za7+A$aMWom`x} z8IE`MpP3QN2lwt~c!6DpX&AqIHNG9)zPlYdZ?3M+Xr9NzoA+?7jsLuJel@1adN&>d z2|Kwxp@yLfn5prf@$Xmf#v_`u(Iw_tdUt(`c|l=$e}-9sKAym*XEeE2mo!wEpsSk? zSSii{&HbVC^V=ajzrp#WnL5EK7{iR6-kQarJ($2-V~oz_@Xh(?&G7Pch;Og3mY+xC z;Q=hw2(!6imDudhC(!0Q8Zs^s^osu+jd#?BJ*0(nMz5Wdv-czHwiJe?ACF|4(3G9N zmFfN`c;f%x`9A}>=^w`bb$h*Dv!U?6nyohFf9N;=iU0Kv`R~Q6bgpBSzA8}Z#m)}x z8WlX&YP1@JDhR^hix^9Uf2W9(zdDElymljUH8vv#!eGWh zDNeWEY&h>I^^eoQd%s<$YB~d~h9V38>ZnxiW{AQ5ffIz`L(IU@APqxX#05c9h-`!4 z^}sG6c5((MO?lk2a?q+Vkg8%!LxcgQaRfd zxCZq_1#j%164DzKJCG{+);P42^=EXFfARxdpXn66b!d(dwpfZ>kIrIrVyDajz`X5n z4k2VNPbg^pjAGVRJI7W#tAgu2PLWbD=H3AN)@=ND=blt;T-|`C|9W%1p<#P8@FN;J zF1$C7*d>e9mQac^d)!9uqaRBJJ*z)lhq-$6Rpz?SUmdrtuh2c7LgO(OMt7dzrRA{_ zb0QeX9T zd!-_o-d% z#zn#`9-KnzCvQV}qvX7{jAQ?|)QdK_K_+et{5K^Ypt&BM!6Apkn+BvSc3%5|cNr$+ zr*Br)v-Ue$A60i8$s12&o0355!UWAZ84b*uIswfVP%Sw7oHE$W{QCTr;n_D`py3$1 z;yR~JvRUKb2@7FZl&axQb?u#$n;uLgL9jkBM>IdNbvhh!gt=!q2)Z>*Bl2n{NK^_| zi|cbQS^KbT++43w+8nxl++mO_Ek=lri9k6c52YK=`OYEK3tV2#ydrhAwj6%iB($PX zfEK}#5%;>rb|8QeKfI$5S=#3yNqUUAo-jl!&hwPsL)CEII2?To!{uYg!NxdjhFgm* z+G{8lne_It*SNrVELa4VC8Chindg$3fD;f2k)mug=$Utb$t-{X-n$rKx=)YjM7hBd z(`~rHleAkuJ0`p)s2f^V=q8XYoMM8hAcz@+%TP4Z+#OR2DaXB_(xpIMvdYfCe2-}_>dm&C zMyOcObl;x5AKs0wu5U(H^zp$<)c*RMtg-uyJd|w`5v@MDQ3OEfFGECyc6)$#P+dS`tih* zNteyw;rRhtfhM;(9RG|;Fh8Y8<*GLR!VLG88R*xD+>}R38c*Z`Sz8}_jS_XrDCqw(6 zK6>?~pF|$zm6*=`8YNYD#6fv=_|2Jw?9U~Eh`9#}W)!9q&136O^2!QZfO$_U*3+z+ z4Li`7GVRC~>*iOxQNG2RcorhK3E-ArZ(tQZ0Xe8A;WEIaS$;y42XCu3PPWDYly@F(#aNivqh-r*fJK_>_NF*>?Z zDUk4)|zqF&_;$4GUedn2U>&ws1Nd>a*6wWxU$NL$s?MM-aj_BWJCO zZL2#dnfXD#TXswCWhd=0izCFVA>)g(7{_2k`vf{eSIO|^=IZ8-RB0!e+xz;1%o?6q zxT9l~q*if2aZNBe<~2_f)NJ)k$_T6B-rr-u6pk^5H)6A`4et2~x=uav3P0J zkyf9cW~pvqOT)J~Kz&!zM}7OI`*@lB96t3rFFxY64&4Z1+UdlI(X6q+!Hft^8QMdr zssSCWt1<2-PE&}9XkwgvV6&W4ilJVIaZGIV%A3RZ9z8zFz+vcf3?svBWI7Bm)o%0* zwx&q4;g3u~U{M9K>3US&psX?-==dJ&fpS{ zmKcQYut6?ePB7&rh#regjGb{#uiueq4!5Hxj6c*)BD|LO#5BmJH-fgKVRn&bsdrQ8 zM;amJL|sjoChIh*J0}<$9AgGTJm#p!!}>_*6>MCqDoV5f)EhW=!jy>J#z z>C8F%a&@djpWVz|UD^#)7tunEy~UvUGE&|SKejZc@ZBZ8uJnC$fITA zPUs}TJ%PmfGhv$<<1V^6au-<%EElG_APkffgXp4;ju&oBG{UC2d?g#ckWzoEd@1#* zmnu;=Ohh6?pp<43)T%hR6$!_h*a%9&W|rN8v253#eihLe+i z-cxjfE3$cerQUc#geko4pl(_z4_60oU7gXClwg?85+zrkz_Wb4cloYlO#@v_GjoF$ zxcN>_b1wQJXnqpoEz5nO%UFp|KocHO;=a5c-=5sQ8*8i?$2qwk0dI6B>~=( zbLhx6JW)%)lPXYf@Qpi7GTod#Mp}%=FnCmazrgttw?J_2JlS;SD&xmGDYYHr6crycp`J)8mP#{+XXY{)a{(#8 zLyl7L_=ZZVT8sh2z6y&0nZ`RrQ`40NaO(NK&26rT7Fx5N!Go>w#CVI>eY?vBJ z#)P5Xr>m)Wt6>|k$^7|>6iTZE6Idg-HFgHRo@vsmK4PypAwDv+oGAz0kVbzQQbB_y z=IKTUHrcXzKVsKWbH-hkO7ZlWQ;)>xkQHq}4?Wb5K{sO3GGJ}l+@}&BSDy0kez<*&y-q5D{jb9lMK`(HgJPv z-cyXW%m%pxGWG=%eGndTE7QS7gN|h1DrG#|-S(Zv`nvPsJ0$0-V!D}P_a06G@anL6 zJf-NFIk%fNUpKt@+sB>K<85$8nVrkh8!y4L~ zWyzw6<(cQuk{9L*$6bkDt30JmBB>-dBb1JJ(zuEm(u0Z6E>m-8Svo%9S8|0&aL_YEIkj<1hS&dgb(9j7YRhVG0jOg^J}98(k$DH)jte7KIph_6LjW*p7E zmh)jSROfm!{ndi54cH$n=b^x_c$ouQ*o{Z}VqibIdFHNFYgV!!Ij+nQqW|@KXHakA ztm?(kXTr2xL08x)adLV(9FKuUT%uDkCJX_7Q&wM?tj$_~mN<_&3ANXpX`o2h_XI7NHRTM}G_atAoGC{aJc1g=#Z&YzK7B- zo8-6N>vZYz6&r<5Y{8Z**1qHOy=QMM*h{3BBq%vxy560iJL2)jdJO79^8B^{0@A4u z3<5H!H5)Yy$}J@z&EtN#N>7fWpRs`_7aJ=F_QdM$bV3l+n#T`H;*);Z=Qd zqEl>Cro=(ryq*KY(}T$*&33~wH>p$ly!%(3ZJ8OTp3S3px6Tw-x-V<^$TzYie%n7F zvKskQlJtp_PVg9}=zzr4=NN|qy)3e$2pvmPd975<&H+WNR@h6!aWuMB(QMDeGILtO3-l%HOHQx@SV=*SiL@5-78p zqG>Y^9jHk~oL-H2F&oDPH!3N_s(bVU`U!Y#-HhoifX`>Z2TqJ&a4gA z7Bb|bG&1rYt3t{DjgokgFR@b4@5UgW?DAaG-}wEm988mqNGPQiInX;XD&9!z0&}lb z7jVjEP`BFgPpF(jqFcdJ%e;2&dF{v*P?%SewN!?|y_f?G?!?O!7aqohjG8=&9o$rL z!k;8z80a`F44|I?bs+~=D2%SrApcP)z3G~(de|xSuu5QWwawGTlBAMXcVnQ?yNZ7z zD{(msW#7dXz*iX+?;V@r0eQ!(3ECdg72k&fm(c9O{zl(NcZw5+Tr7E*yE7I;cw^92 z14Mi!p&Z`*J)KqzyaDlXvMGF#DWqLCEi#-gbT-QI12*az?%{slwl8K@?E`0j5<-W? zx=lx2`6?Y~mjt%TlgbYFrWYM(J5CnTz^uB`D$S!XT?6s@SM-5JZz(pWmGy)dMb6kYH(Yb-&yME) z%vgWSb$YapSq{7x8i1B2c3oMav%G<)!20j(%W0Gg;wUaWBH0ytf+`d7IpVFwT>#>P zF;e1jCA>QKMag6ceOjZNHWSRhst2$A&sLZNuwHynDVg*gt_kd{oRW=dMfP@ky=dkm zZ(WCjJVGQ_+K(Llj;2Y?4Sbi@Fv9#3Vs(CU$x-pyv9v5f8#^oR%*dDln-sA8$lD3? zwZYRAcugP;AU6JY#o5vKx!aeoYtj}Wggs0&a&ktcASplL{X%}m^}L?~)RuWFv?v0F zeWX~E?+55ZM_2D!d06)>S4&-;4b{l?wOZAIi>7k|-e2aR;&e%d`rYx9yMDPVK`r#_ zI*woN*2xiueP-zaGePox7wulaey=uYx#vr>RjwGv=!#0))-6n5m?p!|Yd;c$S*u+Z z|13GeZGs>!b}S)C36TtT7^{Ze5O-gl+%|UE)@*7|)*;ZaJ3K(ahTHBmDoEe~CeeVs zf{Mpj1pDcRqbCUtA2Zu$4z>1GW`bbys&%?w%a)C<*rKqz3ej+|AR$TEm2THkYC~gd zeW^MuFOejk+ti3$v=VXgr&o5D^B|dg0p}A$(B2g#PUSt8^UktdDQQztxHqpGE*t5i z4fQkosANu+!klOa_!rEbG~xeVl(Q#&@~0~*JdCa=`HEuE$iFr&HQw{}A?F!m(#4k9#Xf=uH2N>9G?t=w))BZ8C&-puu@RGVyH=>Oa|8+$6G}m?t?nqAhN4LW zZX3uzUNu5aCr~nS_N9Q~zOi!SWFt|ua%qxktlA2bolZRi+uXI9gSKHOG1zC=1Fg@> zF9<$)cRBin*1uKnn9t8ST!^YdYGJ58#JEvqVkTJ}@01ujrr4F&DIU6?`KmG1nP*Zl zY#4c4zAN%r2^CSN!m}xL5$8>*5f-l<^Fp8OF2XoLiDg&seQQtNP%`ejF@WsQR0PmXJiSA z$;}ZN$I+YH;mw8ZDQ}HZ;c)YgCU;C>lxj=Mx0+)asZi&OOxfsG+SpF1di?^ZM|Q4Z zpRCa%ks#etiaUCea2b!C457AKin@guIT9&s$Nn2|-=Z6CrduB>C)1Yf&Oc-`$Bi=h_n9%U@ykA;n^LFp9w#=7h zw^1nfBvScnuC#6XgDcrV+2l$Eq{2RKx3?exAOa7G^NOC~d;(WS9w$jU^FvHz*>{?_ zJM&7KEK7y7WU}vtc2p2=y+Mn9Sj1l2ygx4iHPh1bLYu#4=&*Z@d0sv5LM5rK$QNg>c z^JF&)lU>PK56Jzfgxw*3VvAUkg_|@}#!UmK-d*F$V=5lZv_wje2HbO_j1zXr-xmZQ zEWC?%f67UzYtAvb9?NQ$BQDuCikyXFHz2LAl71ukCBE9MEhb&E*q6ytZOd0=-0=dR zxoT!=;H7vFWG?cXScM6&nFvWr$WX3$FESS|F1BcN`=nfuu!EI7h`I13pMjj{?x;X}%!Yh}JP++9iG>W=fviKu|y{w4Y9itmwAe^Kzd`rK~amdkhBL!*c&uPP;@YG zIl}DWxJgrBx{;u=1?}0y;m9S-MTupxf)EVmEYDT*+%cyspW_y1jXtUDDaMj)RWX^e z)dhfbQ=HQIL&8xiLwSKF&9H^JM=6ylSFPTVL?eWkVH}pgdn7ZkuTKNZ3z{|-&L7w6Q$`KirmK0x_9h6!#r(rbH+c1}F#YdTIusxVPpUS3;^En>{sj9E6i@&QT_!1>7 z3f+l>S*5TRp`51IM1k=v>Pl@gWgGt=e2TwvTsod2Y7=71%p-SWd=!u)@=7=eiF~2k zL-i>0ia2!i;+Nf=dqC(u@7aVbGfC)p1BoqER1tlRB_>G=;_vv~nTP)x0t7Rx`M$^< z2VD6B(T~zA-?&lickKDeW5(Gc^->(N1hdjYF9(7{N&2s>PwO zflANNcbP&wCw z1TK^F^=x!{Md_|ev#LCDS$VaG=%5Kr4mz<*b^X#frp$BTrM2)%RcQdo#p0hT_1T^X z88{^>)R=iuJ{ZVA$Wn~1mHAfg-Nv?{71Ss>nhC^y#X3xrzV1p`y)x$dCfm!@`_DSa zQIxQTB~>;RIx`U$M^3zKZxvnsOMbe*|TggO5 zL@yStR}+HWvl%dRk;znR-p{RWmt()Yh|)cM&JDB-PaI~b zD(To3se+wA?of$sv#bxHGUZ8C-J%B02#3e)$#<(HTx)+!#pQ^A&VUF~SHCi_USd+` zZZyFl1EB<79*${eJ40F8h`lu}y?Y+)$yDZ7)cy?54eKz&`+;_U5Hg1^C5T^?Q}7In zJ;;-<;@m!Iun9csu(hVFVqvT7Ju#I$?WABYr$F-*?TPN(#p7PmAjNluD+Rj9prtWz ztEMAm!}95{RsOuJ3|%3RZ+dOz<5HhSkaO=C;XsoUk3oD6EsSUh3J*3aIM9sSFhj?) z8ADpGbBCZ|0ZBGRFXBzic4X<=;HymPyhL#bPYCePTd5`(dw{k6aM?WyZ9gs#mNnG( z#<4Gg`m$q;;qK!Gs8K`1mI4H9G`~!btgSNSY6^1MwYXfETCfIrndxwCgyJIv+Bk&! zn}iue7^>-6KPm%;e5vsI{?w+8`=<`;o6%Tmh@oWer`q`bJyLAeOQ(bphF;;WQU`;r z8_w>o&89oFm8nv>J1Qz8trQ!+`7cpOZLe3ethhg8!nP16cwsV?#S_Rb#*ENoz1QeV zJA;k|d|)5|iq1q2Y@>Y6ub7b9e(I}G11L)SQoicMAQNsiT7iiQ|v=~OAa9ji~ z%c#Fbs0pj#oiS!arf6(!UbKCHbc*AHZ;p9sG~bI&X)(si9qK zbzYQeiki<(ogEm0ALZcn%gxlLRIPgsQ(P`9A0PL=Y}P2Mb3yngfn&bsTKX1aQ96a> zj+6`jMRj%(7=FkkZ3htt&MJlQQ_EPK~HA0eB7Ma)6|}_@r>=f;|Ek80Oe=(QpDeuZCPWE zBGUu#+0;b-;@$Wh=ng~B5Ho!|uz6|p%v1nbz=3}(T0uW%Tm-VK#Is=65vm1F&_@Zq zznUQG^G68<3mL}jcu+PoMtX*=S}hyamNrq-@cAm7#{L&D8p0YY##?NWeO^WdgO~B9 zSttMEMd6wMNXaR((1>Q?>S)2fE~OQ{-Zr1cIy)k+gLFRkW>tKh&|yQNL>;%_a;x>8 znaGX!0%ipkpkJYHDu{w$*WHO1DE7%DQpjY`k+6MsfHRPZYF15D$?1P?t^}nRnPzdy zB!ybcAX1z}q!fAQxYv0uLd7r`Dg&57&L{3HK*?<8G2>*!5}58b)KvHRBm^e932NUH z^r*wABldVyw<)4?llYS1GqE2Op$RD0iG=YPpP9X!Q>o=l$_kF%`tRDWC>`-qH;PML zWj$v60xR~gsKVGM05A+RwOovVv|~@(bndMxDh~fXlSi~`(U-@a!k5M+zHi|`@CV&) zRa4pg?n`K$2IS4!BfwA#-~8YIdZ6jJGXA<0PD-xu3Yk@vS7I_@hzE`r_;Uh+L8V~X ze(w#;cwbAP%~XEMN`%23q;7I!>V}?cP4Gu&JZ(sCpx4Mvh>lKcrpZ$M;r8v-<<<4= z=wkGj;rA^bd$}$(r;Vgc0UBq_)KB9sN7jYBfe@hMe@IolVRfX0+t zg!nyh0wg)Hy$lUr-w<5UaS6JL6Vi1T8>v5F_16CML2Nt6WO=>DYgEbVP_gMw$jK~N zF{v$y&)oDH^={#|x`utbh-uy(Mbm-a9tPd`5TerG{pRntL zW;36khai+)Cgw}eMY#%9;|$=TK;%&Kz+jMLg?dJiJe_eezAM#?9Nj! zPQ;Ib{=UNyqg`RuNb_Mrgi%!U17n%$&SA3-zxZ;r3_}l{QCq!I7MGk9

      #uEAzbdn4-UxV1}`LnywAYFb!c@;c`TV7HC)Cp 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 GSReqh5MTZP diff --git a/gpMgmt/bin/pythonSrc/ext/setuptools-36.6.0.tar.gz b/gpMgmt/bin/pythonSrc/ext/setuptools-36.6.0.tar.gz deleted file mode 100644 index bdfc240ce1baf3734184b21a444763af20b0185d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 669121 zcmV(pK=8jGiwFS3X!2PA1MI!&avNEeCRo4m6y8#|k<20>>;P32Wu}lA5v#98%cgCIWi@*C1|I_VuC!G-`|092@#`@2TVqfjcbl2HE{>Qw7 z=3_h@KDqvbes_fRA5SK<@Vzdr|D-=0{aw=ik9qy~|NJk${?DF0YhA4pzYUVSO18y5 zN!MkTE+3P8OCw*evnBnM?C-K9+urA8vE5|b{dtn_Pvq;nqN?)wI&19<`r>`@H4EB2 zNs5PUvM4s2bi1rN$>%$INm(5B`8G=)^7T4#n~q*VpRJ2Ux^4w;O6HHrf;vP`+$L$V z$+!6?T_@S?Z9Cttie#CW*#VvwKS;>AGsQ^n;?ZpQ=aq<39Vgf1u&H zj}G%)SuC>3eIqYgt(J~!MxB{)XMS)`c9z+aCgK!*O6boYmwC0P8C+K#o7g|`2f?#` z1?)Q=`}C##(5kn_56!-2j}Jv@ZRXp>`apx-rHilWZ8lq``!sGJ&%aEoDl7LhTFkXR z#(QU0X8(SmS*?ydvbf6@U+oK6=}HFijW$DNzkl*M`IwKg2fJ@~~|T zb+K8}!v2vY1 zQ+n4~*g~h%fh0_C(|p_c{U>D*8~U3`$l3fv6ED*1T% zu|4Wdl2uVA*M5_c3?Zd&nW!dFb&k9d7dDFzdW-36Xoe)y^00usbKjtMp*zq=s3i<$ zR3FTw`!e|r3L)t;tPirpf0vbuLz&a9!g7wZ!0J3XR9W&{zFig%ReMFZ@OHU=q&HNL zG_r5ph3c@|(S=;09eQSW*z*9cw$+aA-6hmi8q8pLp6s%c9@x&A{<|w4(0fcNtMu|5ee)mh_WND+^2H0; z0yGnJ&+YGuZKo)2UsStnk+1Rvw^O}%z6`pw&@Sz%OaF8;(;1pRK3^oH>t>~H#*6XGfix>2{=ByZyfNo+kC7IFN!<(O9e1 zBU>TbesGTL$(tKHD*cO>c!S%|bU?kniXq=o&(^%tG4?Xsty4ZVG=HmgzJSJn@zcP| ze171GPENDVZATtB@b1=w?{s%`7h5c?HA4#cw#xT8O_o=h&uKBfabJgL*6jhE@T(1- z;d?q0u8TCnPnWOWyt~xpBaNQa3hojsClCqrmUn6SbqOPqwiM=RO`XTHRhE`?fS20H zwR_pfz06Kxx?N;=Bsy&4`#Z69z^4&Ge)yPTbq7Hr)+{qy+l7~x6ub! zIWm~_qzxJ(bhLkew5M)v@XwdjtZZeP-4@I#FYMOE_I4H= zj)b2QwQ;e!<=ujg^gENVBf2czk!+!G8A97ZmO8M%A!lg`NUF#lS!RoMT8dL3dTnxA zk+Mg-f^2m*+}S*Xn4+UP?VY)9jidP)j{7f@H^ue@4^$*cXrFnTKF4Oj*~L0x`Du9c zubZ1z;x|l^(wt-@)HY8RpY2E%_9u z;pWr5#UjwXzSrEu-RU^^c|t$qa>ilS7wA(cZ^M7FZNrhYw6>Cj#VUMM>QbV=ii zvi)Cgn>QvM4_-&Lr|7%vcf!HI&s74eh|W9~Io^8wxZdadK2oyQ>*7J3S$XMi<9r)C z2}nH7Au1L{iNmvgOw>xumMR*%BRUA5)7x9>gsfcUx>{0yQuNgJH#Tzn^;Js^_=JW@ zI@>wDKi%RR`aq?kANT$)73~P;tV;M6!-c79Lv4TL%RW&Jg>Ig=`S$SbjAsWj_|J5x zM8>CRgPxC{&^^(M_XHM;2KHLU&9~;DN8=;qsIwulOTwfQeacS_HOiU*<{t`W@s++o zdy>{=kAve{eYLJcld+Z(X*r)mGlNJf;g5hTG0>K+pN&n07VnFk&T2|m5{ZvxZd#L< zdE)J4!G1(dRMXpiU9|(zT9#N2`apHD6;G|4N>)eZl&o~@huykJmork}s+zt{*E%h2 zL2FUc5J>`meEfI?{pQ1#X77P^4Go!Qg@oO*EOtA-&ZPBo+Ax@m@;=8cyUxF2SKchM z`&}*?ASrD2I`l5@)(6rfs}30&{2Ep` zF%q0vr*F>l{rs@_n(bN9yxV;p_FwSpU$CZDy%Y|17UDGD6m*Bndf+S4L7LKAyRf>A?L6$ug=PL> zI$DqYiEKPIzOX7Z%lmx2<~w0UswQbUw8r$D?2R?)Vs!l766#hJmp5IV3mu)mK0FULGUUngA#J?mGp&9~mUlts7|rYw(HGS%^!0QJV(Zf^FH%*k zVc^)cZ#!#~^X-I_3Vqv+Ki=5%PBI_1&aFx}$TnZm63lP`lo)mb1)MsKAenAYv?zuN zhm82x>vR0sc_J1g+X*~Okt?+RSkVk)<6m^}ZWa*_DVtJjR##ZGqvzIoWGl;-!UYP2 zo_eO?I_m=D_N$6jt?IDepYy?xrs*pOnxjXtw#>w`2U!=vIm@gM=q;QYJm-5KaDw%u zhCAN&zJTuYXA(lBi`}uQJI|t*VVR^0@=mrgbjC1O`jk!?-@xx)y}$bD^7?Zphklz} zzka7{nZR=b-3%_1f-Xr3T2*=l%4-^P($bw=J9gbEum8L2Utjwh4X;nvv?P_PC)7*x zv!wTQHsQPHGp9bJ zGw#llUy)eRXBMvfb(@llZ}cT3gp%kk+RBRz|etl)~)O_4mxo- zl(#{_=65AJ8q3O$L)aLQpAqNBk*XYa4wR8u-ipMe`-cg$gnXf4e< zJ0a3aek)>&eKg|OIqZws;*N$+zst&!=1d&{x@o2|D3MEgqa|6jNOwRr$W0UK*lOpv zzK&gQYsX;NdnvL#vnf)2`y6pt{x#{$FbuIE^L4uYdd{xORZ7!>-rU^WW_#FJa0uYb zr)TCFyqNU70p#NOEEl0C$;D4ccfoe&rJ?Co7}3msn-U}cKIb!t8{SFF0S=1aDxW~L@bc_mdRmI|xEe-7KGN+>(T)H%n=acT(y{0zDgD%`eazZpR z0)rhc${jS(hk{-B&UnQ{&?0NJAmjO3kaAq`ztAt|5~rj1nskPFnYu^;iSN328j|#U zTaeJ$vL#u<|0^ad8ngL=N0x+v3c#f(bLI^?a&bhWs-&6Y4q;KyOb?MM?mBG4(seBs zLDOj;P8z<}%(X;6vT;un8~gv|-U~eEY~^3{REmkqK8Jsk*0I>(RNCJ0ruiNFG*h^~ zbM~HAqzl}+?$vh4KvnqLbuqV4620NJOjmpNOuXEqDa#4bdT36?g3|ueli~_eA9yQ? z?Hk_RfvMpfUQmnhipwpHWQy2;)wUQ#&G|IE5HKHy*HQ%=|b?(xmwmZ zKs3i~ZNRp6@MyFuEG%fK@*-N3tl9zg6Tk-PA$2<81&0bpR+JhRLgKDjsuxzZ9p{wf zk<)V0=}WrlsZQ+tmMDl7)A z@G5yM4kQIxd4tWyjwl)KGqRu5FN14qDMIlXCZPV2*9D)EhR>H4t`_!3nd3NxU6>`$ zJ{`7Om3@pb^5&bwl1&5l+k)C;KqYmxv9hT^Wrk>Cbbh9upyvWKuX&A|h z7Hm#$;F+CgrZ1-)+$0I1CZ%gWxG=6lNdjYs=Hnd7Zxp5Au$k&}A8os|aN23jem>+h zitk6}{ZWOF_Pmvg8Cp!0^8|SVJH_;rWTNPzO})* zHs9(ZC)p=4Uz(B+yg=EKV;N}mAxpo~F~S6Ius-V2h>R58EG-ze^HiMJbUCt*YN@ka zzm~_niHW5yA53D)Ds*(ICZhj zS&woaHuIXWzez9iRALZCbZF5N%v|j^&-*;Ke#4NOLW`%}An=>ckB|EdQ-kPtV1y05 zHfF|D2()F9Z8mPdVg5{~G=D$R-r`}pV+zLyTjF_@&es+Gb%Bw1B_IRErM+L({W3Z=`aTb_l16gw8a9y-`FX67Tdu8%X+2v5WCC|=|f$v zPA|GHO7MI-yy(EoLDo{bZfD=b)7DuP1tXBu$IadgjVRsR{6Rl91lS|r6CJ(h$of6d zT9q0eg4Ypf61`r;y}ewd<lbfcfl_yGW|A5v3;Q?VHp$5lZD zrh5^lnd@u3HvLgoOi`${C+%%TJ?!kLCpy`I(pdRiA;T{?9J?9RCw%MDPC^^DUJwZM zL}M61gV^*?^Vnf4ra51Di=qvO%{tShA`LQ`1AD!%;t-09;sei_7);5=wrX zJ$riL9t5OwdKUSj@>^VMGtqTs>|TXEdCQuYE|cB?B&O1xc(65Uiq^fWP@}lm;+dGd zzyPw}l-fdKkb@B?myBP`*ynefs@<@Gq)*{n%5U#9F86c3|K%_TEV59~2JJ0t*IP!5 z)on*c?3N3j)R!KS$D?)@K48ts{=m8fzb6$5xNy3rI;C|c7yyMWh*oI|anZ;Ws{Yw+ z=ud--p#(FgK+6eQI#gwD{?=GVD?sB0dK?ykCJ=awPLBK+!)65Ex!Z5n&utq38Nr{m z+2Gfo=`C$O;iL`ei28L&DAFYY<(*qj56$HsA9Ro(z%`VkhC_ajG%O^w( zE5+fvoxqC%?6~ZhFxmD#Ept3UzdpIX{QTwP=MNv=UeB)HUw?k}_U-JqtM_j{{B}LN z{&@NN>ZhyMv!AZsUS6N5hXt+-8ZXC?*=d|S&NR zPT;JhhkQHelh{a>2j?AUg~^;1P9`Wa%-N0^5U^8jm?lNCeW_bhk^wcFA87lJnb`Pn z4<1-w1Ikq-KIA&>agD=bldD}%uah}o7_LW#k&ws5nQ;Qb!nEZG@aWM5<|AMsQ^9x6 z_e(GzqI1#&WAf=FUDzp^VEc)aUE)xD3((Rg&#pf_i;prioMOu!Lxp#1ZiG%MkZdM# zbfPBp{obb+e%UQCGT;Q0vM4OVZfOCDAx|rdTgS;o4k^ZX z1$D?Xwu3KxIL|BB$=W6x^kF{2ieh(?PJBaWbHI2=j>yeI%3;CxC_-)f%-paN^K3I3 zQu+ZLKOW~3@O(18=&0~QAdiJmfVPYy29Sb!6F5;OVSCNMSp(-pucI#AZe2=~EEK@v z&IWT{6BQ0*`&jnU^ZrD$&;4qEl{3(_zp00?F|U1&lgT@xUkt=eUR9T$8%6C~isU-{lLAzuqz; zyV{?#@Dg++2gSeT8;{uBF(}PR89A!{pyIH5c(UB8wW*|q|IBV4LtBTQ3F`Paca=M% ziM1cL!iE>JR>P5AeiPiyf+BWPi;mHd*PMQl*;x)_pC0)n`pk+!4k>TGHj>o%i}S;+ zJj@C<>mQW>-2?O$Efs)xViVOEJ9(Qb12N7go6B#4WAIll;^_-+b zEb$ReNX#3%tGf7(d|Jz%w48lA{A}*9$k-GX$!+>|4aO^iQIaDg+6QZ|l?1+MI_NXi z3o6OpLv9F<5%IEpc8i?1d+g|C#%MkETuf+tu_#NW1Cj+Z8M{r_XB5C!{*s0+U=XXW zqI>50%k?F-$hiJw|G3kGrZH8-a69U1)+Rdq9FQ!S6h?()IvLWiu3^KW+`VA)0qIiP zrLj{~Xvoq~VrQ@H5OcB8x|c z`QY!J-xW!*!+y7Zr_d2xk_Jtq?kMiaxg&Js4U?ohP;15lNPC9KjXM{e{#YNXt5_3U zxo--UF-V-VBNL}gM(PDe_VOz9ilhl5Rivgb@oV!t(`-11@39pLpgHwVwHH79@q`ZU z$)C=^6!6DCVG;dWz#ndMozo&&M4)>g5pXFE6`<~aRm=FfL*n5CuP~P`)?RV(x-aw< zet&@QLFY@ozJN7`t6M&12AqkWNQUEW<`N8Y4?>{}SS~<4nWp&|8rd2= zso2RaAH&Vvu}sYB3H0cZ@al&BHLBp*@`^dk5zzqNrmwA%)4W6H=lx;x@$t;fRP6*@ z43GF5;1TwoMotl?)8vCSwlJPii0^UR%|23-8L%Ih6?a~2s|d^BbOt-?H@N!;gKp@J z31Uq2DF>M7|1MEw&=sGG?LobbeELRoCtc`l)LkN@epfX>;Gf)v{S{WrrEFH@H|O6D zyO~pw-Py8PS<`)R*hwsjyYxO^03&aq+KQG6$BCmAt8}3P2KeOKX4P)igH4l(Vt6Nj zML`{1||%OpXF)CdcaD{c9HI? z!`k0fepALTi$JvW)|y^5CI@|Um0lL7&b;0NKhD+P8D=B9(AMo=^4$)LmX;a~(7=5le>ksxozT(Wm z4{Q()b~t@F5A@-2atdSPqa~)1Siew~h~daYJug8b`FG=Y;4=*O?JPCTMh?8|bchNzR@a<%CVV*~Q?I{r8zlnMv zp$Qhv@rf0~=F+GN(D7W|;`7X5FR%}kch3jRu*{>n^$OUBYwa|C*AJh|1M(Qf?UJzv z7+B@Q{_au4;yF)Fx(~P$=oH}XKB^F81+cAGI6&#g$JyJfcUPY;-^^Y~I`D788o~%Z z%dOrAVZPM7_}D8s>sao^)Hxro#7+~Q#RzTr+9!dC1h0uhn=5u<3RacFi9wj8lYDlW z@y=WkIl}oS>-dfKLPkC&uYG@8Nuc3bP!f~eeiP5j51mejx6Yh3Wh4;MTpR=gjqERO?4q{x=BNaQM|6ELa3{-8up>fu^k^g1ds&-!P{Pm+amMp#b=w9}U?)N%c1I6`B7wQfjrU(GTlv4-h zB?Cjn;zXy5t!51Y08oLPW25OoDY$4PEzB@+wo$tm*pR*Mxq8)s{&M}P*)He?MySJA zJJNyPQ^v~)crHv!l0;vQSqj3NWt9V>!P8Qv3ncmk;9$XjK*p76br3bRO1DCpN zwFN13$kp?4GhUT3!ri=n@v^pMG3zTSx8&whO_tI&1`Jlji=*U&JI)oPLk!&1lwJYHMS?!eanoQI(>i_ zFMC#|56@%*E|g(w|F|nSXCAhy`Vn1sYGMYi$a;dm#Frl<;7S@pf}xz7u7W6=V~27N ztPNAA8G-^-cOR?WtzJ3-A|a^&I2Z<~a0=U_zvnmxCm^>v%dPO%AWlS`m+x8XH)!OL zc26P+9xF|t@|~nF^NLw2gF364oCf2mTIH_{d8Sfu>*F5Y+mcB{B$y@55D00S^*z!4 zc#XYHTiX&`(5&c>e2x6XcU7FU$|ryW?~k5u#~yAadO3*8K~E&y#n2hC*Ib&Az|L9` zGvOZ;w95D1Li(oSWIUOifQPT$w>oN)7^h15|krIPB2VupMY#*5Tw-l!$=q z4tqquiSDcZ?0L~!iN!F^&J8(n)MkAto{s=Jas98?Gq@6GpD$nk^8V_7`*Qh%3Za%A zU9&6isEg_a<-b?-*1K4q9MtzGGL*?kV2)G@-FelwGMaG`Rcy36MDy?~p} zUvLl-29&wW(xvjz;biUDvnX_Q5u38{Eb{7!cTXrw_5Ny$(TgMPUd>Ijl@?(^>6-6) zbJ6k^p7*9x(M`wW0UzS-%ka3Hnrq{(IbjiF_u(Yw6yy|km~9;2y@Q#JUyAQthKNgq ziLGYgbprn&KNM(Of|*dDmO89u&0WKlqM?kgNOcc=3U3r8+35+8A_Z_PmLt#~Hn4r; zu?K{_Q%Tr1pA-!a=7iqI$Cwl74d^G>2;2*5Vi2Z9J@NclQ)*LdGc`rx$U>=H9>X3P zk69KEd+zC4Cq@@91NouOBNlHA(O#v>Wn%H=Y`t3@Ac@3s+Ti5gW+H7w3$VlNN!}{+ zc6Gkn;SpfxB%u0w-9cZd(gU??3L@NGBXdv3sY9@}^0;na00QW&mQtc(8r-;-v~zTK=rOAPf) zC%()?FMwyb${6CPJR#IVL=y6l&FM;U;;0Va8}~;#SN*Y(LHKm#=)HiauFdu3Od>qY z5pef{XybfD2J$E5N6`Lw-kT_S(H4LdyHgh^%JZ>2b$_n@W;XnfTbd$iYYSrmj7LNI!_dmibgeqEJ*lcuz${(7AwwFckv&K z;D~;2n33IKzRoLSe&+9~@@txqy)^cdjF92@MVMV2H>O~Oa_Xy3$=5DmfHYVKS3JW0s!))mD86ld(!k!?s^Ya-DkQ$L)B)pT3@L^BwQRI2 zW2_Zp@4nxI!Y1*)Kf~q1R7*K3@i3;zF{Y+fE2Y`|Gxc_U*z828jG)ujcsAA?jv=`N zMhLOx^*kY9*nV{@Y|9unuBcM32%z9HAn}5XerAk7;x-cdRpj4%`ssBt=?{7#m_UwA zp6yq{e7WDOUzDo_zV=)bRNAA?s58(+4H|Tf@b_K5 zUn(rG!OAXiF$@K;zFOXdQTlVMHI;dA;b@d1R(8bl5TAvkkO@e(?3-Q-aOAGi><7`H z>3azN;s3V3^mger#Q10;>7B~*{%wCQDNmBRsRUg&H?!9t-v4y<^X%7GpRNUvSHtYl zh7HL$^-*;c>I2NCobJX9oEXhZy-I5R2$-g*lK=tDG@)1$v#X6t6 zan^1Zli=B3X3ikyJ_dVOEDz3|PXhi8jm_B+gia)WOy*t|S{6J|rduRWdUC(Hqdi$a z3dbN^P3VO>eem!i-4XYcmkj5c4HA-)qgw))6Evuwih8l_*P(b#&JDJs7a8c`9M(&#P5OxkOZ;%4W z!G8ziFrbj*&gGsVMc~w^SAz@sOelEx$jb9>B1H8tkV@ewE)^G|>wHl^yNHPElt>K9 zfgK!ZlEmFqzKcYpbcMVL_5G80%?wTt|2zEk3=u=dQLz{Fk3n&z2h&&zUP-uYG#rKw zYfm{JxsYU*#aChJVf3co#Nm34QV#-7u}UJ$qDn8FNE#QvzI*ibgD4-#&})ihw_h)d ztlFMnUodPtS^kgz^Uwd||48l+(&42~py4y@(>S*`85lAaLgC%qNIxNiH07qUX8q+rU^7*Is zR404fnI78&V&ycMz>iEm!z*yA`5MJOJmGaZIrd%m*2z0*76`uFH{teNb12S@z(oSh)$ThOHl?MK= z$vn0sJx)8Og=vr55O;mE`mi`Z{#f^_OyLR}PP$Du;Zqwgu7Yx;Y{YpI^VKny1`4{X zRSAP514N`Us8p(=NRd%?i?_5ChA&CsXzOHX!&Ysh5Bn~C4Q8WkTrBa=yt$sBsM)2# z6e~?VE1o|ZA^uYw`ORmsNv;Hi$N1(sa3v%cS>ZW15IuBp#p*Hfr1%Xu2@Mlufj_ab z=52YN)8wxUT>o%EaPyp_q0TCfT~(Yp7C7Rs^8kOBGG$=P&T{IIc_3$qb`n!QsIry0*%%h z_9~F9z7LRuqRvxLnb`q`erMU6f~BN?_2fEZeLs3whE7e2-7#z~)mq}EWMfJyhkf$L z2KQZ*vZ=%Q&N-c2G;x`6i^W`c#DxTrg%B2+%im~~EXP?E9^tr|bHSJ?AzmC%bJqeV zQJ3rFRDy12uBJ-5TIK6Jwb-w6i@4^W9GTrr2XRjZJ^BdtDh_|MEU;a%Y8(GI_TeARbA98WHrta#l8!=;};q_c|qwdu5Ky(^={l4Yn z@kM*2|8%W2e>ed(R?_jUPc;e3Se$pF>)@|isRT-j>yTa_fj60+P%up%{9aQE4+K5 zbViRBHj;;xG6V?p=uze9Jr^D2=4SIqf~no>bpL+yNS9)#$KDe-6rw|*qVuWb0`}@4 zD~NqkYO%JgfTJ3^zIK6RgpZ(}F3*{8g#Zv02=yKDVVvcO1F zS{kP<^1DrMYZql3ncETLY}wqTHzKprkSLzljq(tbIR5!Y@KCiwh0-Izek8yt~638`mU zu|9?8=jn^%moOc-pj;Bg|va z3#l}%fQ~GHRNRW+P4K$8)4{3`pceQMroYoR|?BYU{H+9@0ma@wnw^ z+2KO+Wq4{+Qp=31aa1V8PLY3(rN|{-riS6eC{~BH3Xu7M8C2PG>T5a0INReRb7Y@E z7scbkJjYy*(vh)5jboHbtCxM_;)a|8D1@zXf_I0HZ}u(4%Dq%@*nifvvZTF98Y}HF zi^_Hvo>~J?vg%?1Xs3y|v=FHcDOO;Kv)Pu;Xpg@)kZg^C$olYdJP6Ajpn#-FTkpZMMcAWjr2GTLR$)maqk`S-}Z5@;j zC&@Cdv}g5c9}ENGof(9d@z3GdUG;*H28(;v45CK9#sGi)hln?6&>x(;1w*!m{@m|Q zzN3KB6u#PuufL%^H%--!cl7!qI?)&2M5s6O&^k6gU-X!%K2d%<;(1VsOWQB937K&$ z^6%7YD-?JIDGS*$xbj*7<%~;zle<(FZ%|*nK6r7iY#z8P9*gekr!cmj^b{IWYDJsF z-nhzku!F5)MHzFMaNR$6g;xv38EP>fV{L zqNO||G))mp^YKRd3VG6l@NkE6ldMz#UJ~5rXg28lu~pPJbsEpKyjk5-d>-iYF_i+4<{3jCwwd(=%sh?{TVJE zAwuXrj?3ItKx#3clXR_$OEmh@7_^I-5LldCP)6s%`>T0&r1Ltm|FDy1Iz^3bhkP5j zwHk5To0}kD>R6aGfmiukL{eF1rN)hpYR)#-9OV1w>ksdd&UU7Ql(V{J^l4kEF+x9| zqA~2njDmp0JA9aT=`;uhMm_2JoEWlL*l7qB{6j$YmL}IiCH-q&_`E?^vufgyqq;uD&3`RtSw};$> zhFTjT1gA4gmw;W(1VS(C{VruvE@m^sU$eBl<>Gi8Q0HY3N6h~5ACQ573TS)A*SCB= zxj5)0@jy0av(tbz`)LKbgUO*xw1J?>2|jU!lX%v&ET!{4?lG?d*pk(6Hj^K>?T)qyqj6`X})8qU|~S6>2hZ*S`8^|_1E@6aV{zHf^Fh$A#Vk^ z6A?>kZ^Zd#;>>E^YUAS@d-#+$x=s~O15sc8765`a1JL0*uwRDu^E9xZ?Nx&dmxb?) zKDMW4Qp49YelcX#s>0MU-o~6taV*n-@47hWaqJ+t`6S$8`lT4L@DxdB1B+=3TWY7p z?ZtSl70#|v?4EmiC`mvPmjzdE7i~StZ_F#7pB5q=`?xvOPu21iy#eXRACjATj8t(z zW{Avcdizn-%HQDI>Q6bINH1n%Rtm~--oruPppaWu`}6|*TiU-6I3ukL0+2& zWHcGQ{&YHGs5V?*_PS%I4$0@oPhIns+Rk@$eWcshAgoI3;On)x)c7d>P*0C#1h$fp zrZ<2$89hfW;ZSriWcn>hhc7truCFhnl=@US80})=SN(CK9Lp)qKYtXB|c|)3-CSEY))_dsYZgaNgs_|PrOVq zl~X|S+)AQOF~}d2cl0r_D10b;{%FWTooF|?2%OtobwZ0`Gk=H>JGbw zGh4*h-_pc_FhgCY(4#vM9+RE#c~w1T?8r`L??+9zlD32rw|S-19b8~b=1P%Ty#4zP z@zCpQ24BY2t)hHmqfTtH9CBc&Hx2BrFB&EYDd&Sg;E3xm^riteKI}zT>CP0xW@Nh} zeDp!Dg=>&Fl;G^*QSzLRk0mL~QnW{$dnUfL0-j$}I2hls&S&4WicdiXpdMhlpjM*u z9;xIQ^WJeD1~VZog|<;^gU^KodhYsVsq4Ho#Sh{N=ZWv;d+$2#ZUvO?hj80?`ka%^ z<2s+8oF{)gsmjF*>BRN^uv(Ep_l!zl70tP5@%e+*};|CCfZk#_D8}0 zM(M#~E;^?M8yj#!M{va__VvIAN1~V_qZUE3t)cRkt4ZrFsqBe1;k|w(@z$^my0cW4 z#-AvdWst{i{Nl9e-fLXB1AubaeNmZ1Tf%Bbf&()pj6o92CM6M4&I0Nf&Vdgc`VunD zv@8zSoYkizHB}mlOGBfly_yqcS;Gp`H`sry)8Rj%d$c1=Bk{ajg}50qH=*M)@3r31 zYOnR=-QU|PeW49-()E3@|A}M3mQn7L%|f^Y&qvI)>xyN8mm6i2?9NP*r(-VmI`Jo; zEQ)nerknJieqi9@NlbF1705J5t$dm8wa_{@ILKtzvi3`D>pk8)T|16k)1WLIvH~yo+6r zp|y*T20-Xm;%Ze04(CVv-t+#jUxUK*hR2P&L3iShv!SQ_u`2}=EdT$MP>Q5#_=xUbomIMOGg-Mbu^7w1nM!d$HoO+KuuME=nDxp%9Kfq z{AHVelQ0VVStp~BUcLUokW$k}b9i_7Dum9DV%DmEgjW2vEDk$nzhQ1>?sP*+^#-2P z;^robanT;RTWsKCw9J|}krJgzsEBy0cf~o7N*C-ki;Q(XoDBv&RkgNQDOg!`7C;Z2 zn_TzK(csu%-1U10ey}Pp*|_t?q4+A`bf5!jb?+obA@-nAW>tI7VeSk!gxQ2FB&u+y zz4@LP8;SA&%J8jJ#iX_ZRHC>5u{nRG+Z2fqmieT6JaRwt`vS39k8_2E>VN~=7j4=F z@=}*snN+}@``y7Z)6?3j51x^bnvWOcm&buH=U~$UM9m54$XYV;7N2e`OC(4VrR&v@@YQw>sn<03y*ow$nUPD{#cBT`k*6|VH#N@3X>1WEVd;T>_# zvlwu~x!fTM;OsVL5Uh%tV}19?YM!U{k?(QLQuTsI<-!jNI$Afp42cOg_(KVeTCN>E zzvZfkQqO|3GqmoDz~uSimdlwcgdIoRJRh$Vj#>qKTTW>ZEaA6G&l<`jvR+|sv9WdJ zj9n=IqeFEB9?f1C5|}+4*gREa2b&Mj0H2*8OWFW58l(^#(Q=NHR|_Ca727_&=&y!@ zi)Ftz&dyCciOq-y$rn;aSv95ft=c&FyaFVS$rktvkf|nwHJl`edFlsl?_*QqvHC{& z#%QL7V+CLgA8tJL&mM3&R{Pmvb*rUELjAhm8FP30ok^(lj07a#-~}v#8cGp5I4&p8 zgKgS1$SD5eVvH`HC~>GbdLz3{VycG5pd&Q%FU4TOE_W`gC$mM^F?OOAG@*!J#)hyX)P=@Zq!od4@AFc9()`^259d(1{?o< z*+7lYB33}w!sihBk&9K_$3o66NqkCtAqgeW5ccH(VZB5PZCsPBC@^5Hw4)tuSP#=C z9gHuLs`RYTxA%GG5Z11cMawbYMC68Av|Io=K*qmvY_?%J1Sm=`4psSLo^M}}MwDzG z+Y-}#2GbPrkjy21nc*8$vW~p7ssCp94ymxGwQAW+c07z?XEVdP(A)>5I}pN4SR9ynBAb0V^3{#AmIPa$jt&vh1S0I;VXRivDVi3H(H0XOuy6l`87`aiMxFq)KmOf03q)74mk~sraMDw`1~jp<-ZIar zBrA#)u4oHos1CGY11{!TXFJ6iD)+Q^+machv_74gFi$_QQVhNZeuXel2NPig+ ztEm9|Ec$b*4gByEs?45oZU>)Kt6jCU5*{AIL&gsBfmJ*6-U4@rVmxw#m@|xa8wBKO zwmU~ClzaIMWqCLAW%@EX-kG!0GhR`z7JNiuxBj5d7dP*dV-8fDzI_US-+i`D#6qNl zfGneBp5AWB*sNr)G%=nil61|^szB5rvFQp;79>gj_GQGN*lUr>=fJw z(e^v=ml_LE4POK0r#TY1qP9h|F~`I~efmlwd)r|e2%tm68=|Njl4yJ5UlRAB5t5+j zm8@29CE$aC_QK$07$uGz%iVu4hEL6BP2lY__tHQ0Iup)9;rCnF!Yt_lWyr2cPEiSe zE#HxXJ&tBz zCrPOdRCfs~wNz|a(@}0~rBdgn&{7*Jz;<4MnG$_{n1fK0spo4xC6<70flcu-zB?vG zMGs-7a>9eUgiuJ89Tcnl8}@?HAMpMWE7sUu))E?mjeaO0BSJH^AwZ*<%N97kQSG9fpmFGNUxtm-%74KQIJ%*h<0@ z=(O7NJoVIqXEK;0QRI}!?6h?-oX(qL0VP6&xPGET`@e!ou zRre9B?Pxu<`0I+AbCcl8|3!36D31*`A*EhRG+b`xr!zGpFD`ceHY&$xC42>Y#PgAD zrC@#dF1X87h=J1!@p=B&nRydE{iJos;Z50>T+g<5RNXOpZqUrqa~QP#Uir-R;VG#L)l)p+t;zHcG&i(dC) zI21Hv>%#B)Xsh-E-X+0Ih~5@^0A78(QV;v-vRL3Jrk{{A&5gI}4G*87RyyLzaZ~Pe z9zKB%b{LkgNa3O|=$EZ63I;a_?WkXhusm**cgIp^S>gxZ=@vIMXbccZ0<@-w9ml1k z>GCc&>2=}q#5+g9-0E^lqpW2uZ<_k}^wi&oQRrQ(x-V=vVAHHAX>zFI8}=Zd?}%A<`kejo;Tu^JXc*&X=b zva}4!#-EytR(j_Ir%Nj}i$V5Xs|M$&5jaLSeb_4$I^NV%BdWmbMEmfuUeIOkfxQAs zwrV-v&wq3C!w)~uLZ~n3j_K(=K}mp<}^uZFS+!!bud6#9#<$t zX6yX8Unbdp(ed?0#VN-riDY)Y=zu$wIqzNI*$H))rdmJJNCO+yo@|>IxhPN$GH#wr zNlh~LmHaAfj9wfdBEdEJhp?<1(*0zMLf{|~3R&{Z<+ju=7<2R(`Yw*esnq6x7qm|aD#~CfHa#}ml7RqWL z{X+jC5!1!$Hv0GOk-ZO$-%z+0z2Hp0!`x-~>klaBhseTK%cp8xFosYzFnd8qg#=oc zmSJ~u5;=U)#A~zGoq=KVXVE9B$d^)SSz0n)7LllVNQfS~4Ix8P4O1So5|OO_o3DRo zC(IPjnLl1Lcf8IuI>L@(KD$ii5z#CLiKNh@caIFtWIY-V;rt1p_+)%MgBh59D_TK9 zX*c6I2eymp4J{?XXIw+TyDu4XF*_WthK5*sG-KZ%b{&l)B*riWov!3?p&2!5hH7_u zY`udrF0iByMYD={8yY)DTLs|KS7k7fsIi^LfTT%05neB>RR{oZMJjm>m<@C!WDKE9 z9!wgHs+x_*fj!4Z5~cP#j+1-F;rSxi+6~F64oVP;In1tCpg=q$uuRoboDpBMps@tC zVI>)Goqx^3yzY?@7KFn9QO1u<+{ji_x^6!dC6dpwl07YOQ;^Nb1yhcdbk0nco*)mdu>0*y&Q0upwCmA(qeI1t!++GdZyN(o8Gci%B%yN65v^oU ztKmyu3vAXEr<_Z1**)!0X{T|DE*e6>iA2Y17f?m9?7`h!)R9G=zFARQsFqHv zYHbx1&Kx|-@&TCcnp@Nn8@UZ`xx;pwtqq~|%jeG@ujOTR^$uwQO-bg;D@&Gu?N5K+ z141Q<&jktRj<}E~z!)*UdJGOciNSH!TSPCbTPWtq5Ra^YstY&x8-eOm5O%bWVnb!WDkoX>fcTHH;oXDjuVi)JPf z9Ux}{Rd}8WZD+n0Aa5m%+b&}2ga!C-M4s`w^D5T8_&vC<-@&6uLVyk&(=~Fgl^LS2 zA*Jf%^{?-PkN`~I6pYS`^e?1tZT}Mof(~2Qc9JW`4%V_*NA;ynv(9bOp_iS>`m(=V zSqK7xei~3ac#Qk*eDD@^y?JAP&*W#6+iLxde7VkT+U9CqOqvVNjEb>>Q_RzK6Hxkx zP=%mxw2}glrh34LG}BpN1~q{WvNND z9<(T}&eJ0Y4EQhv`wTjrENN%Zg7MroENbwTJBMYa^)Jg}4q+%qTj`y>bV4`(E#F-U z&k0xQb(WuQCf-=V1v#E}l4~V~+{<>N$^Yj=`L#%XE~;Iz+-4~1B*FZT|9r`vJ!)$A zyPHb|*v_7QE5+iSKh>+PaCNkd8r4rS9r6CY7?@+Y z+8rc2Mz0gi71dSX33}m^WJV1$x(`h{hWQV`UdG`^#D3Q5(Aj$i#3~tfgnw)6OX8h3 z$NB&*(a?W<;}$L#9m_?xB<+AULjfUV;Sd%`$$+seqUlccr>ItI^G`IUfoLO2J%7!a zf>$4cgr`P+z2dUxWv4bbfgT`zanqn(I@jKP6Ht`+7+V1qwI`Bw2xOlfLxUY2S(I*A zT-X9Is>v(GV?bRz&xJsT1x7^U!~iDzzE-l#&4gybI-srx=<+f+1A}Q3mhNO-O!%;A zEr?)Up!7KeqD+u*b5Yyh z9M_3Rxufijj`G3~@X#g5TFgOPORpFm5fMFj3Eu^BEF6JDsoJ%!@d29hOavaAUUH_L zloOC1ljJL!O`^_eaxzbi`Cc&6C)%&3M%)X^GX#k2PLNsFJPuN&%n?VuKWsim;nYDx zY3^MBo6bl}l0}<&L58LlWuVE7_)_4BHwz<3ofi&1e0$Ito`u%_#U!j4I>4DD)vJB= z{-+OS?jva-y@PL0`F`Mz5}KiTr?R=P_|qWb`)2ntTWWu?(rLhqtJK;a=!oa zd&HVK!$_bRL=O$0c<2F;?Q$Cz>nu5NR$8mqT?~7E~X7}%03=`?_IX|>Z$NN954-E5LN^WdPC>G!5iwVFh~Em zPXCgxIb05{y%O_oBNMgEfIs$_&m$%tXQ(g_gGB0-r!GuCZzbj#$oE#c!QRgI$WZ{E zeWer7d}uKd^~ zzkKF`TZq8jB=4uqDWz+WnS=*i_gir$eK_x&$!U2vw3P!p5+@pks~D4k${V_Lb`Q>CJaYCQIWSd8f%8_E?b-NHk*C?*IzH+|2lj7>dX7r zzg&Kr&72n)<*U5L;mczLCYLd~I&!M-SDJvKLhD!NVX2AuOX}T`wGXd|X`Esq1^~+z z!6cN`K2$$op0V&!GJEkTr!^8MZp8V>Ymcj!C!oXacY4Q^`XN&bvDLc0oh>uD!|?)% zSz`w*svy*p288Z$hzNJE<*0J!-oASO^AE4}-AD8biwVWLe~BH(ZXebIf4!EAH#x<| z+N6&pUw_WEKBspdpUG<)y23>O5~sfIe0UWgsE50?6JmTv3Yn`Wx#e37{kuTrz zSi6WhX8q9;3Zi%^YYC%cBihsu?ItWQ?#%<*%@xwi^XiUsSiIjcswl)-zXEAg`ILX5 z(!KW4Qk{FGvml%5=D2^1ztd-CX;tT>nAex<*{kc^faZ)$j#4fh=Y!KSdHjc) z*JvZpeTE%jjk-se7bkhPq8$u<;h76ex`p9C3*IG+Gh-eosN?WxIPZHHx}^?&xIXvq zP#P0!>#z-Zim~$2tzaOWpDf>D%W5n65^O-|sU<~9aH&pex)+2^$t#9nW|rTxnaP=W zD(66`vgOQUxg5{AKx(-c7A2V$*Yv4)J?Z^#(vmjRd7^8wMa!jfpJ$wM%g>Dbn}flf zY|=%WrY_x{gl%Eo8gBU|hPm#Bei18B=R8&AA~RhDg> z3Fff{`Eb#78&^_kikgyZL`)?4=YDkr)y*H`@Lfs=jJSVg;6`c8GoKs zCOzgE{jKv6(mf$U&n-FnRt-#YY&*@@lC;RF#ZvLSS$slFdSNc(wkGX4&62DpM}K+N zz%e<8m%8Hp!1H7?VE9wV2r1>cq`9CZGkRs~BNGzbY536GgG#7qEMC5@USg}qdp)@= z#OzJ0s40$i^QNFiD>Xun1dbj!WH=4r8#DOd&_l; zms+y*0T-g?(EAb+!Gv6>-fD(XcvJ;I#b?1LTic1k&`NB5pq-V5T$s^=?o=5v#EO_i zPFYrMkJ_u8wsC#^R>CJUz<;>A?Cz4v&aQlqH^NXQ{eqdeG{g7C48y7ed{Nw3>-Vyy zzxOa;7sj@zd=m9^?UgTg={=csrPZUJT#2CMlzv}uE)t9Fn;Xu8Z`g$WantvV83!xF z5s<>iJDS)Xdy%a1Gdb54~_K!ovbfPUo0% zS#Bt#)Ri9Kl@@fSw;(PQ5J#(r%mUvJ+#439B~!$oV~Vvr9JLk%DnfM_kEZhQxn`L( zB!Z78X$HoR)UB`2j;zwK+*z;FJvX}n?KcgLdlAOv%oO+}k#A=^t$p6HJS&q!n?IqE=dk=Nwfgm#klE2o5OA@ z90*UYNu9c}pStK>!wZHxsJ&$nMIE0cq_E=3VH&yG9O?mRU&c4=?+)t75WW7#5AQ6D zFE~0ek{N|vpr~`dO$$Vw3%i+7STFLZfCJ--F4f$ zr`}|=Mg~t==V2s;0oM9J^S&4dTy>!bXxJSZFi5I#KylafzAvBNI+Eg5nchlZP$q8U zbJm|{x3@o7SDU8L#L@Y-IU#~B39MhSv#4a~F4bhR4XslC(KByw+K@SSqV7A#)OY#B0>r$KLm602WKVj@X|zuVgEKO_NE%(K=wkdE%FC~D zH_~poORL;yzD#&e%8D#-~;6ybk#z0yjgA5oTML3_PB? z4+K2WA6%AElpo~^=q}mpGlDE71u@Zd&f-uu#IJPvNQF%QobM2m**!Y>^}Q@z|24^` zJ$1<$F*;yy=F5}2@(ozGpTAuBOGsn(o^;o-o>*TzWt}BDN5%6Rflfy_W*J?Ek)_K^ zZ=;~vl=*|dlNLZrB0gPr6LH`uq8W^Mk43Rx0062+au^}fnmhTPJ>47jzArVS8(zf# zsGBb3^qDzxwBNW2;5RpJ>}P($p0S+?c03JP)rv@=z_tZHZNAy1R}YS ze*0R|@>klsE08xaa{e`mMI>@bm=ZFR(e>D`r+~WUbVZ32Qt3%z;YZ6Fz6!I3UkgsS z^~3l6v|15Cn@foRK^16PxCp}0q-2F5%T8wK3K?viup*R$rDkZt84OK~;lstQ&0cy& z&TY)F>vk?e$JnR~Sd8O%1(6O2+8Z?rosA^A_DWL9&RO#nk0lqK)&h_?P|oOLrSzKN zwU=^p)D=Z`UB zgT;r2QaQvLvTp_%-0Evpwxwt`qmg=CIOsLMJ3^=y91C!ZA+;Kcs%qDaEoNJ%%N<3# zBA+oS51awswlwIfo$lM4$99=lUtLA`c6&)%aPPlm?#V)@r^d$4ryLPf{n+QL1))r- z^U>{$(;iS{*k;p)nln;lnp4iiGcdbfRI_SFhZekRGi-<%iHaL-XVPeAc#Kq7R26nT ze|&Um5I9j#B;}V^*S}~sQON$sV<8=)gROewxqL&aFi=HB%+`{azEVP$2CgRGTJC|l z%lMeMR5h?f7sXesdq?qF441SV-bA-LcCl<<23oj-6y7(DR%{tZQVVaEiyP1I1&!;+Uj4zsAcFPbFiFnlCuCM7mVHr;0HDO4b($ir> z3M3S=fOZ)B*BtdI`$DS@F6qFJ6UNUYq~0d4+Hnr1Trc#u>CUm&PfSvu$cL?mb@28s zHYBxUcC`e_xk-nme~rV%nMr&Q58JA?v)h3p?3}Rn`Mwy)o$l!&x}8ZVtfCo&W%jR` zFGg!Wy{;Iy)*b6X0$nBqgkmP#w>KKegBEIhS z@?QTNfjv0Cu)5MC&!qFLzC7y6V+o*!g**-7hPZy2oa~ALXlsu+lX`0m6k5A#5y7zN zI4pYomqL(?0Q{FvZ^er(Rwv7KO%}EU&B&1dp2Ck4W{Nk|V#`2o|qrd`n5Xkhs*9H^BK@G;{g@xp}a+!oEh|QJ7EVq*{ z1Uy)a&(!W68^kmi#1qB^59E_taPI{C-f0XhQV3g#URLfZm$yy+?|qxSW*oexao@@^ zr$L23p0kht`uUd+?`M}k|13HA5bLbyJmk!(;R?PjgMx!DW6L=EDh5Kjj3_!lCt5AA zt==e5lC*=$f!yKIlO5(DhY!oug+DB?s=*_dRM9xfNG%L|r_rj_& zPxVGXv|tkod6rdb&c{$a5!iPjY?GVqyL}iI zpt)3paDK()GU@w0T?YnDy=BC$Js6@${aUFn}YVdF&2zWLBoTT%a69s!*ng z9NDLt#)KG>caq;@@PZ0SZf5l5ncL}dIB&erPFZzw4yIaV7B0q;Z)fHKcF=7FsAyR! zesx|h+aZH`?&->W@l;En@YjfXCF~70QQaqZ7TJt*F21)HA1+<~2rBZedwYFp=y_)1h-k$-1uT!*+$Z=0Lw*{$v&WXw-R-;uD?_%{Vy^7|uBOxud>_FD>=`f<@G4 zyq8%qQD`)*S%Z8J?K$c&7!>+5z-q<1xD|*S2gSphuU}rhPMDpFzb!EQxgq~=*em=l zhtsxLfs}2ZFV+rv^YXR$&c?pO?6cXneW+e2GRfoNxn)^7HAq=ag|@*nmeox~&)H@{LjjChY##|n z#qQBTO=6BafBiEU6}#q~bKgR8@N?w&q*|s3Q99QxtHj13W49kTTm5TJcRkZ{2IMuY z9eTbZARCOiUwd!!=ar0>;&{Ti%v02`tko}LCq#eH<`#!gzV2`w_F}PDM>xIfH_|i+ zP9Nb9sK2UTqn=h}&lgy~%W5SUT}D3Rn-}Y%LJFBw9P-G?R^pJ3%zmpxILyKynwU0w z!>0rW@csOafr47#9cOVG?K8m($QR@4dP(1D`sm|7`$Pc!ycaWh`!9rrDb4Q@Fl<0@ z>z8dK(~ocS?crPK=!n%Ax(B@#8nK^NUp=KbnH+oZ_ltGHG+Ox3`s^;Mm_}SLDmw65 z^+3Ct9$`=wyd5JABd72kNCDZ$p}pZ@y~|2C;nTG^9CimK>xFa}^jk^nb2zewOdjBF zGFK}=maJb}GIm2k*{HjN#x?;=y!FPH>-x=AH=yCx-g0CaMpB~|b~{P4I-9oe$&mFE zWZ*Dso2!Ifu|PqhcAy9=$8{>OOa?UZ=$=v^2OvRt=dkLW6zp#u03GhL(vo;81vlrR zpRU#(5}rON15gWzI?(MDSxk#>eh!^&IArNo2FxGj6;Y%4X;OCo z#TNqFeL-Ib9u>@ug@Eyl5Rg@=5RR{)e(?=oeTY8ubs3%J8Yl~N6?U?YWp=1ZeD&e- z{p$~JuHOIr!(qRgMm*6xbUPEwO&Vd18%`P437wV_RG<9bo*7s)r*R6x{jO{od@6z* zNH&4}x2$L{pH7%4M}tAGRC^@691@GAk9EX2=e3Haw49$?a4thnnQ^h)Mfj_3n5yZtVEY#B)3 zhrQ{GJYY_^xxJNN7D4Gw(L`c#&oE(0A$7U@Ds-MS#gLHtnp4WaP?+H{5LJar4`O9a zFNBHSRSNGe5=)-?9`~Ss@jZnSPJ7{hlB@{iKUG!=*qh4D?K*KGo#+mF-XF5_k8hbE zun0fu8s-|V5jtBP?^CZmKd|Tj2C2~%K9N;&y}Qe|-=rLX9u3(YH$f7lhe^8_qZE;y zRs8skY+7N!&J-QV2e?5-7|#imis(H%k-kWo1?M!KzXJ_F%+!dL^k$P5He$n(o$hjn z2ny}#4HDmPE<-(V2+CoEd=-TQfnYH+1*Q@dfoU{|0#qMS!_{ly`PN;Go*W(_E>(D% zof>G;b8LC?2C30h{mvwHdnP(jg2yO{@bacSlH)5@3UdWE8XJ0I6V=PsMX_UzSv_90 z?ljuy3)7Pog##*Av*mBVv%a`VUdT_yjStU#r#Ym$d}f#-|U(t4q*lqJk81lXH$N(ZPPm)C9@5ZK?WO zvqc(BO?2OCQ4~lXFVw+}`odi!l?DZyn|~nb?5;Q>WB#kdT-T)v5bTq)#?!RFIA+cn z0fL-3J=68z;*xYDe7H{jrTJcl^KIK{wa9Z{IJuI{c)!&Hau6e<5yPvovB2TzNCji- zve-swR)_S!S-(+IP~)MRMIRzUBZR$HkA>lJ@$<&aqX=i&Qla9_86C%5@aj%mL$yj1 z;N3J7%=O=HoQ6}w!XmWqhptXLuO_-uEqZ4@}J zmd4jUHK^uSb4eMT90%+3cu25=-Z!e09F;t5;jwtA{ssXQ5P)QB8&oHb6I!vRbg^+J zr~XzV3#1$BFObvwTWtQ&M2#AA2l|LN1tjV!UoPz`Qp-a!>P)g4Cf_{sK`4pzgS*Bu<$sSFidA@g0y~9eL?L z@Z%&hskiHm-tMuf(n?}37LooAz!UUFdr=3Y>a;x-C*%qg!BVEihs-5AYu`mi#}NS{ z@uphdJ?t(ua{V2H zu#beLTF_Wbr>#djOA+zPF*dw2>B-Szq@5v{6+$9EI=@2fuIziQr^W`+G{dw+4G4^d ze70qkkD=tYburt%uu9v?jOop-hUJPQ`5&)7x|*xQ;YG7+2q;KWb}iZ!#VA4tRsY4H zhGOVH<=5;FFAQ@RBBWL5u)2Y6mX)^iRLr(NbWAL%uvgYUAAJAw!Nu=9-~FA>d%x5E z2?w~KKG}m~-F=5)63YJ*Rkrq2q zoLq54agF9ie&#*cCPcN4P`+lUJM76IH@9;o?F8OVjN{Qi{*=F=C!r(R*N2j6{-S!Q zK`{u|H!HNiY^- zsrfQF0V3+1&`z9Kp1>V%Gmn5zPHwZk@I_ZA`j#iPz+P||BLs$n>yXYH_iN~YS5P57ixYYgzEI7X@#j99C)`-u?vy zgEE(R;7jZ z&F7-J%Zo-AC+^NJaTt6?G;*@Fxk_w!IvnW|iP4gO?&5OIVF!A~nw3ox&_Y`uYTHTB z#W!T@OSbI4(NjnI>hv4-BQ0~OouILgeHBVTNvGI{5(>G~j| z`}EnBe>ZHmd44o9WShBps3bFfQIkM~|Mf$_YdMIM^P3NQkB!1{LZqy7Jtf3zsd0L$ zVoC_^8uSWSKrqvt8-phj0O)yIa-kpGlSN{MpkS-idg2wwz!vf9J!pJtPxReMYPavQ zwGZ7nlKJw{689YknH_^#ThMD1-nT`<6#SbcN>TG$oaUeDlKOgre_K8p>|ER!jkX2@ zYl}A_P?v4lQZ>`pL-#|WB(`Z|dfb*bkFeUXTDc7aJ?Wfqh?--YA76d`MJ8R-TpQh_ z!)>{~u4>K~YSKmSlaGuwA+_e$bo-WuG0)1nrrU!JK}Tml1MoMS?TeYxl4RbTtP#AL zMc6n3lb3wMTlr}CbLgm9)5eRNtk&tRo`g{I{lsi=fZiy7HsgTR5Ah~Ai|>oQoEmRa zE14c0;lC_84tuG&3|a6+Wim5ZCMOYbe9dLp^@W;}s7e(J%iMMU z7klsj+gNtxiB*ri9uLPJ8#4~F6L^!?tZtK3k<_=6s!P>uw_2sD(ppuLB~`b3sx;IS z`6#_El8=6ml!|Tl!ke*yv3ncX1RDg&{*ndq2jqwOVG#raV`kvR1iJ|q`Drl-u)n1N zZ;}bJ$Yu~AoqN9BFYi54QdPMe&xq(Qk?-B__uO;OJ@=f?QHxw$Bpg3Kxkymre5MSw zQ+J%58quA>9wB2{!`Zd@ZP(0;0M;7-KQVx_hy}@woL|4mP)PXPo=WGweCwAGw--Lmis#uMDpB*eni`s>l zXAb|+H$_YX6tfNxH*~b%BD50})@Tioq^ZjaGQYtv5EKDVKtQ0E`T`L&{Rin-jo{?N z`gWr@M@W(~C#?!2t9rq(m6d(<1z(5(d=*bt>H8x@yaJ~c+ThaTvtSD>#XiRQPKs;~ z5SUHnzTes=ucETPtnB$M&{mWybc)SL9dLPxaBqp%l6jp#&-xOs*Z;kstgBpb;9bKpCiV7f}9%zY9$Fc4vDIIn2u+U z-GK{1UZb>tWa$Wpgm6}{qh#w-6xyR5Mr@^Gh&!N0HzQ_9R7(j8D(X9l8Juy5u-tTM zeHZcCTSqa`_uX}Ma1vJNxLqu_=I1NsOaZ)p>%m@A?SE_cn#N5O!@i1aKf#|DRL!z; zr$+GdAP+B87 z>A!Jf=^Jt5#{5mzKnt8N8$pwrQ3q;32LUC@SQEv@Yj}m;2{~k>D(oRu@9lE))p_^k zx3fBWZFsOvB)Vbl06-K5!2nKnaL+u}NHoBgMIG<+7$Azp-rn}Q7A_dT84_WL6g~-o z^C!j+_uIP|yLc1ht{I>Zp3)jaKq_X-aKB-ajbAS|U9O6itY3fzg*yEf1!@PNRh{U55)CxJ)f-EU}J!U9RzhQuuwoaMra1aZ4D6=4EX0vwzN|deuSk(Dv-^I zpqXq3oyp7)iTZxV(OCKECK;H?Q?-(gL>@4uJNx)`*qWOiG%3|?pnLHMqtNn2XJ+$P z`xSXG_y%@lU>O;v&+lICA#pGZ4&Y&*R6RpGKp%UfL}H_XN43KU46()#r3ENK?L|*C zoC4!0lm{aH-HW;~M&DBBo}kN@n@jn86JVV3oQmZB(V*t2^~v@iYMQJ1?$AR1k?k1u zA?R$Bs!QK#C;}!GQW;!y7vGqlrN8J4m%5LZ8BdOVa)!6m6&NF+B2dZ1=u36H4i0or zB&J%0$1^bI#=}6=5dlEr1(1JQdZQnjFuM{MB7Ht-EQ>ldClrDme@+z>Di*>xh>E2!l#uIhfw#ij8%o?UV7tHt0Gd#pD5ChNZZ(9Lt<#!i zXI#w!Wpr=`NVd3?5xg{Dkvds+Irh0(qdW?{g( zpyAVDngX`E4pPI_#hVrt7~D-*ad^Y)kA_iC%`)PiWfrm1dbgtN6fe$OQ_Lt}CiuH$ zqg}^4(JGA`TACScPW!A5UB7PClDZYgt%_CfTJ1i)I9ep%3dT;z6hMPTk39%)%fU_0 zXx99B3CPe09FF9$XKkjqb3WymCgt}&Y{GCpS?a;aj!G(bR%`n zQ38DHc+~ySoNPfkTrXJivTUeg9Y;J8;w-JNMxbwgjDiT8&@sa6 zl&%36P;v^pQ7O7>QaD>c?@_yq#HnR3(aD9~z_LWj8H`O(YY~u?bQ)L|?pkgV>;Qyi z!}8%Mo~?mIhmD?E@S&nX?O2A!eo!nOFO$h_T(ma99FJ5h$mTqFo-&>(dxoXPP8H=k z4P^*?m5(x_|QL)$t8d<YPn8O(@S>IB5O!t%_$RS?&_(#$Wp%8P^C6hL&SsO9s&nW|~H;sH!taz_vB) zKu>6+9Mr(|X94J3D2h(DaO%JbLnH;&TJi7R9>>8`TgQkhDZYAuR|o@&6L_o$2cbSx z_WNNUL+2udu621}{h(oA4*oVFLl8NIILZn7U+oh1j8oJM#rc}%}K2F2P>dSXNVH2PP z=!M|zY1qmuMolzCI3Eo;hV;Qf9}(J`su8$D)9nw+Gqi+t9Au)ix+(!(CIAPV?Nme` zhj&-#w?Vox*p7j;FoyE_-Mh7o2Y0q)=GHCu)g~}zG*J@>d*G{pj!xPYXq;^?LMJB% zfF?gac9u06=zv)FyfT5C>EkusH(OYKlm|*;M3I!4Rz=3q7y*v@1M;xPg=2Zx(r8+E zL$d$y9k8vtrVFdPsG;{(2Lm-EM{p1+(=`&TMhZSCz`26GL^@M%4ZU;POixu?yDb68 zV1l)IEJX?e)_x5Z)BiZV=R_{#IyUPe9rMdG_F4KY^Kxt18fW5E&=gofj74YkCJ{_4$ zhP$hZnHUU(B5}MaAda`QeLu4WL)s!N4jr7KXkxpV4WNY4GawMSFb~8QQ+tgs05Z@# zMd!yg3s?ptHCW_waB%fiU~3G@qRA#SMx2^6O7I1?Wv}WxU0R>uynA{a4w=M4M441W z^4$@d&udROQ1MFaz_tKRaXUmjDNizFCRDlB^@`mE*jcT0!?;~zy@1f9fbsS;ux*DC z)=;^MLlwv_4cZppUKQxhfdrN`hQiid(yd)-uJFS`}mpk$PW^H2epog=~tDm~8p{1ZiXS<`d%!wU? zR~-Wv!|5QLHe%;Ytl30PomRUIND7q~{rfNmY+SHAiHnJ`j4_J&BoNC86S`Y0{L8sZF$4z2sfPR1w+*(@1~=J0Y~_db38 zWD_Rw&_ymsOeE?G-mSIWu;@z{fe>{iY=M19T12}=2tQAKjB6CiZi&PI8wm;DxM$@Z z-_+IKHX)Ua3Ud!_uIE8(F(dvSs(p;ux!kvnQxgyNSiz}R zlxr10@dLZJxaSY4)CH?lihyNpiG1c$>s%4YI1#u?i6&$77;A-;S+EWbS0;+xJljmLs%d< zZ(HXQ6!K)TiX^S*jwfb5=UkErA42k)KK*KgSU*P#f})H8%;CXuOm?~u)fzLKgiSox z0L!Fv6zhdRi*a!9VK}HIekai3fz;5}tcPGdEzo4NIy7hVz{DDi#F#|EB&dtHwXg{@ zj*qkCM41#pAWtai5NQ9yAdYGj-WN(@G$E^vIkRaSeuJdZj{q(&(T9+#-~TeHz&=8fpaza~mFM6E!*%5;5(%yXfB09-($zb0i!FPN29 zfK~?upsbFd%8hp3saAt!q{ZgZm!a?7`t7ZZ*n0fh_xOrW+u&62$CjR)Y%=znz4n9kZda*1)!@2 z=Fk(Em+ZkYSX_XMKL^vsW*CP^Y_7?O;Mmj!X3M~+qo*dW@E%{~tKk6SJEEcq)e#M( zAI6Lsj#x?%6@CrC1}Nqao&QNsMu#CGZSX3Tmd(f{?|dCk~=8#-Oe!+d^&T{er6N zE1pJT2J{K`aZj)*`iTF@{zX-;J)YWXauleiSt1($0Tb6$bS z$jQRpxLwvMSQE7jHagw1lLtCr`d+c41jHgb!;sd?k(yF6vU?RGrH5A6-KLX%n&YrA zL`WQ93=}>xX(_VKdm^6q>4eK&)Brb(%z(QTh2n-qf>+t%RVCXG*u6ntMOT&BSJ9*a zcI9q_z(qG@JR_=Yx1U%jQP_=$V!i_>%iRCqv6ITRG_>hUqO^LJj6r1cIK}90OdK*H zeb0(T1=}{LEDdT03_ck$K!!2^`d67rGCUG)T;S;q$F>?B+xT=U4!L|kmtihIG7v-_ zNer4H>OTh2NZ&p|$PKfnBig*(NYK`SNjL~YZ)DWQE}=-iSkxtoP~ z(igfRIuNRB){gZ+{BQTYjl0f4BrDMoJSI|^0nKOK6N)VEcvWSn#f~>Spj2=v#j8bU zjirjL<+M#Wm6yBYcA$kgFNoPlHs9JgjFO=lC#fl!g15gV)?FSO^|HLBEjpN9vvMUl zw81+DzXiCJK=1PA8b&CbBtYhLjub@}{Xj@<97Fh)L|XMzZ;#2=jtypD8Ng!4Hrf}C zc#9A8UX|mj7|-O{%Q=!y~`mYY&0ceB zCPbNfG)#%gMp8mUWm;Fb?(KvQE=7l9lxT)>i~|1HNHG#S16mE*2rc<*`0+_XH6yPm zqNs{kZ-W^mHgGrJM;7n1m{#I|l`AE_=;jp(1{1zoz7DLa-RTET8KG3j-58^-~ zL5=$QWMBjE+p#i_|;&BJ1CpiBtqlPgyba>?Ds6?9A`=U7H(2b@K zqI_M*>1-zPIXi51RxZp@#mtHrIpqg{&^**g8Kjc&w)F5+CD0^_NxV8STxQ=`)M)`A z(y}3aljJarW@0$wE7yvAKZE@Q(!dNz^h$D%6w zBZ`4b%3uwFgOG7xoCsq{4ZSf^4k@sPtz(Brxn&s(w0>}k+Qb3c?7>NhBw)NVpkub& zM7l-TBamYbrLjVWLm&AYT|mSrw5y|*ToP-eDHd7jtO?%X6vL2a7oG4qZDNQ!4qHzG zF>%S5Ul4iCvK0mfdKXI!<2%6HmSvvc>`oQ}0LpWO9*__KvVaX5gKC&RQw(=CZ>X~-{?LTrijMrK+0 zxRxRyUm-Xicz}ZYOt!j|fZ<-b1fWPa-fm=Vq1c(2*iO}LI`I!IOP!)b*JTla1COvm zN{2odbsLIx=yIPI4}etDX7UdxP)4A-*4E~0JrZ>yR4|}SC16HkP_OktX0I?_PS%m6 zOzNWXf?}&x_^a4zh0kfD!&VnSw=L6Y%VvNh-h$L$wF5BowIZ6KnJS}xkh(O(J*A0z zN}{FZj7O0J(QWCwZcXq&;(#J-yYA{c(ZrHa)YyE-R+DMToJ@#dhB&@h1b2zL_oJD9s!m2LPj8z@G6>aH_;*_tJg1N)e!WbfR#Il^Mt=UXE zS(C8Hi?iJhI6}2&hp5&@&=`aAU`;Hm&AhEUd|d|sv{YoEg;&)9ltVp?W`q7Lu>m^` zfQ4Rdap^T(dd(2xTL(?nKoD{3$d|GpPav+)5#8O9dNQ#VXIjNVAa{Tajv*h_xQEFx z`P;x5pM5Fe4m}_Ce&jU3c>7QX7WW}J4OUtI zWGNZ6?;yilsokJQ8Xw4`U49bj%Y5o$N!v3DH!re2qG)uJ5~<7>JmNhV-#qi79JV1c zw5pBzv{h>*VZJ(on`GZl2|&JDT_^n&Q9ve^DwE^#%=wL6pa* zMn$0|c47~ZZLf|(u)|*+Wj|Tz<>+S;9do5P>a!BMXuDzRr3NRiqlhnC4}-}bEJjU1 z=WV0TV-YS6@CFxyu}FVO-WACK)lHmR!cBr21n)X1Bn;`~w7e()kMMppM6FB2?MsGg zw~B!SptGrMJArBvB|ngUZ>-i9X{$4(_USOm)_!no@P`svDz+&c*99ExQ1+2KeYKPo zsRhh=^d=;(!ww@Y+cyb71|&t*EDL2#1Qjy6MNL6g@wGQe=Yz!1Zj+_$Fd8(wz>!#k zCYB#~0c@$7ty>)Ed>6q~3HxAB!vZuM|-sz$hHPkTQD zV0_;uA=(&5Amf5Rn;*C7HrD4b-n0`U1)|fuwi7nTndH>ReM`|++gM{BTIQE{q;dHQ z>?3ca>>P?hT1A(#$QT%nd(%U1q%}1tMd));E?5$C+Og839UhddPsk$5Imu`#f_P4P zJ`0794Y?JA)lN={+^2x_oulgYO0|-w11qyFpyo~$itbb;Zqy6>K9|8}prYRtXnQ_B z+WG|Ss~Ns32h_8-TDt>m`$M{rqr_^O9u*)KRP>}n4m*3Ut(0j89XdtoOObAfsGY15 zBsn+7o~cS#-W+1sD?Z|k`$a&?XH1$%7(AQ}N5s{6A(MVgYGX?mxr&j-FfE|A4#vL< zfUK|>D5H_#2R_R1s0)nxq*x!2qzMJp(4-oI7cv%*_dct|u>TZ1TG}F<*DKIRMk4;-K%xaZO}ldUHx|G2fbFa0|~&;f{z z0j(TV51C=orUb+riOsTyp=B#o6`PL`QP5ayXPBI1(gj<2?cH4<3!`(YSiCWF4Wv!a zPRUA6SS%4+2+Y%1p`rGijbD+TvLkMBT@*D?xf0N=_%LEnANCqx8zQoh;y|E9CApo7 z6$k7iMLOe0ogsR``$lp?0xId861kS-vUZj2F2(#$^n+*%iPn=G=vJ!$!F0KWCsJz? z(t<+vpelaGfawDj7~4^!xmKOQ@zM)G?SH5)B}46YJg&u~z8qF|yCATDSt+07&_EO~ z$z%^OJE3->kWuMw+E^iV5(Zh#wl2}=QH;}WuFh?HB}S(} zeHgPpqyzz!$#}ME{aOm6frbwb??H<&S3wV9yslg=XbQ51553&tE^tqn2so~x3XwaH zsy?}wFDDg-7OPVvYvSXikr7s&j(LLzExbF7z?#oI#84eoAsn*2OFQTRAb#K2$yHpX zMXqVt1t$o325}cWKoU$jZO}#5qvAE4SQ`}WiLpjN->lKC8T5Dqj11gEl_koHb-O6U zEP}J7orF7Wd?@lv8!a<2F)p`9THn_lj)p>&pdw&cbP##hY?ZsjIIlXx;n>^R`raxX zVJ*_LPNp@P zjep$3t_c>M){$%W#gU-Zh;w{_{9`j~Y|=V3Q46}M>)wNC7-&^L@6>qbNXi#P42oG_ zPSsaw&jKJ6b$W*}z?B5fM;aTvN|D2&`^Q268pR^as^#d zK#6q5ZV9+jBF^UCMcbEzuG-lEW2aatAKElBurbu;cHyM3VcW_|0n(GASUMtpm@f1o zrc0wCTDfhU1j?^z+PjL5Uv-?1>$x^T=|Nl-rNy8p(&hM`?;3zjMmVqzb_9o0H2Il#*Ii3mRgU2g1~ zyxSIF2fOA`RXFwN)bGxW$a!{S=~}oIp>8#oZE5pR?AD>c5<3I5Mrq_Ix2I#lWyey0 zqm>NSG}rp8+Z#lsClDRLHw%x~Ov>Vu3t?`Qt;BUo;rY^b&Fw25w4ahG(-)O}QnQKKA2h0{IzOZ%=qGisWP3|sB z!J22`BtO(XT&$QrI573d0yMh-22}Js&9}L>CRi7$!jq=11SAn1J{%b=L3PZ{%`IQQ?!n(1%S-roZh?N| zXL0d{H@`T)eB;La_2v0FZ*Km^-16KNZ|()vKlP)|Eq<(;G6+v1wYDdwQ^`7=DdkXC zJpK1qD(sFV8bVpWuyjYs=coekDcqll+9@XD}CKx=#0lVICM5OT&( zNQ#ub@}gGBU*Au5{bRtP7g`6b`=zDH>mSyOTK_k$UthkyuzX#u|E1;m#Vg*@3vI=O z&)@L%pPm1dX66Odan}6L-&jub{~HU-m;C=_e2T>)$Sxr6*a9vKWa@395O%yK^4n$; zgRwT7fF0UwmR9mk&bgXJ1B*mTHT+V(WY53+Pj>xFY_)ppMb$BV{V!afpI=I?|K;Vy z`OEeHGCs32p6&EVSkvC79bZr2o^j!dsUBQVj1Fx)XDcZwaYFRjR&_!Kt5O>>C{+fE$bdzO3!jcWPy6=ADu2PRKa`|4e10L+|Xsl6`Ga4 z>T}d;d9~YjA8s_}JoBmb`cbVlJ~~xp)waA^;?*Lnz*z~~Yq(vuym?j1DO2=W|Wt*0<~MY@VQ9JA*>mGUOHVE6X7xDBc@hU<817>|NCXQ!noiWUa02q^Fe z7*lRznC#*BF1X3Rb(RqSA~wrCV+-w$BN@2l*J7BcFt&?c7kYa=!rzPHLyD))U(>AqAEnJMvF0q z@WH;Hlq>976w-AV7lt?);gJ1Du{2OYhW!zhw^A<5%oYk)y=nNKcpaX~y zKpTRh;UuU5T8S`aMd;=#D@a=YARr69Aw^u}PEtD+^90Md2AUE_t#Y?Nvv6$@{JB01 zq7HVZ!d<2e1D%7ua0lf1wQHakE0!n=P*}Nt*qBp1T+N#odT**>P=Bvot8jC_rG9)IMZfgaSb5hP-ux~72#iBAnTk%H?^)luHMgLkx4b#{TdP%^1nF+5 z7ThYF`}Ido%iNYXRE34yQn>N*_M?IsxKvXmyP}obIQ?+tMR9eKE`{vosm*QZlxcFF z&N&1wldRgMKST&{n+8m7?&`s5VO^SB5{SG@-hH#e)^=GN-%=6f4^_nNDld+R&vx0}1`t2=A= zn%k>;_n4r8c3$Q3D$-%dehZo)748HY^2t9`yc;fcV1Gu@8soJgW0h8?7u5aL?_iy| zOGLn?J0ZC^-Rumsl~Pr_yTR~2UeeuB&4AEot7Yy*)svE}0^7x#^-C%fQsOFf^FrBOk8X*C+9*;0k`J*v&`y9=y|_n^>nLybI*xjp!If=$Z3&+!fjvD3@vUae)wCZcOJ9a}TB@*`NvJ(}oKE7c1~%!@ z>AnE6Nnfq05WBdkGoeWV;{9IJJ9QXWyxP2(EWKs&7RC8$HHUO0)vJ`s`^Gmo-CGST zaYk|(j@yI-DK?kp&u*;4-CPmGp$N!Xu~+a6-Z8=5^a(HGRu7PXFxKMGn^7-Xm4cC# zAhjicvKtUtn6hkrf7e@6l5dyx8;ezEgb5x(uCd~1u=2)7=U{$q&8hv=Wnw(kx`i3 zj!5%r3zoI6u2lhAcs2ZPrIHd)xLy52^@4}PY~LsX+_Gd0?6H+<&XrWS^VhE7sHBI$ zZC@q50pzsmjM17rSefc{38`9%g<*7Xie#l4j=r8Ee|P=C-ikBT`7<_GaTh;gaM%OI zOLlMP;W`cnp3G7I)dX88P%AXmw%<%fhdepR>}NFC-bDz2^@GWIW}Bvfn%6`_Bf}Fn zw|Dn;qy@O6HRKm1P)C%Vy@%U?ySVBl=%+$2ws*GH)^~TC@Mh=!>fXlI18-ox|GglN z?gu?Uef|bL*LxiOls(Q)n79cOCn5c+w_xpa0;_d$9GC@lYHc*ol#@#{VKgL~*$svk zW#40}EpOjjeQAN6)^D`+U{276 z;p_L*yE{?5i@vH`hoD*Kxvd{_NmWnH&BlX`J!h!YDQ#U9vKF;vyt4VeVH50m2Le=t zsH{We0=%&~*PysZJyWk%Va<3SL}9;aPU5(x!7$OB|MWEqi+u2wL`heYJje2OXbE*& zaE%3az#gd$#p2OY4WMnU?HTQQEkLnJ1e#Bc63NFycKx9vL@Y{f01wiLsb=R;y-{*& z6@`N!Hj?O!E1cp#Dq(}=T+`0VwFOH7#^p5BF3w-ygu&9k;B0ATUX^rBN`#g^;#B*U zYx6Rb)S{j+GvcuoQQ-mfMV_*ONlG68imxZdsx`WtF26_5+@Dmn*RXj-59@aOck4o9 zU{SN472c8JQNJuCX;bP6QEHepk47Q1(b6^0DRN%0f?{k znbit0?aT;U zoDAFW^A?KU0v6}Tu|MWur$Nir#tnvw7tI7}JE3KXdu*O>*gr_n7$b%l^iT{@TkK(Mr*cm)Mm6JiFQCXWKwG}IRZR! zLn_c(0ZwBbD9e!YEl#IScrZwK`mbB34|s@2{?g+)(Yi5b z=%(;Ornu(!F@Pcj6M8*SJCY1=#a_8ItlX+=h#Ds4SNX9KrAXcrbpZrYlC;uqMVGob zQP$A3T)PJE-oy%FTHqJ|eYH_~+%MU`VmRF0`bc!;!`PY`GYp`#?G4J(%Hq{mRUa3e z?OV-*fDULC71ASM)J9-m!N}j%2@a-xFt&>|`HB^X^_!&&y*3&i%5ZG~ge$$AEZTUO z@Zp?p0>QHZ5z4{ks(%!in2hL-uVaX>;a$EoR8-Bl(U!Vha?nEjUb#QTf(0HEy^PfU zD+EV#rB%zOFOTN-Q?!DDluCaVv0+^qTMr>Wrv`T*fzQ+SRLo>w(fL&aoGXDXMTbwAn%El;GIoo zLUAzXXcqDNyq;0cjRYs(=l88i2EsF9g0-qaZw@4a*Xsn!BBG`~MZl5)o=xa$VRGy! zmsIAHGVY^rb_YNMoIj6#%v8$Uph{MfXPW1DszchJQIH}MB^8r4umHXf#!jyq?f==* z`3h@!-IJaj0Grr{BQYCMbm9pDd#ojq3`M&-?Xy%0tU=TQ-+LPmz$s3#pZj1eYu!3- zRGmA>Dk}rJgSB3pq{05~adaxPEXN}yKsKASZt<^@9Mz1P3ehIl6)|T}ggVJ7iPEG> z`DGh3UVbk8$=d&JZmg|8*j;~tb)4b!ZM*iCW*&5u18AXLcnM+L_{## zV-VCSPB#QlRA(tTLmrA7DBQ^n#^CTzW^_?!c#4s;LCQ*!s1+jClMC;_FuI73v&%V( zm8!NNQbHZPlUEw81N=?nutgvS1|Cgbcf(%DHK2DYj0r*#juOxesdiS`s1c0Yuv>%C zVOQ;hRcp(sf>UWXYz2MD#X+f(06i)oenWxPKhiqw**|~*9r6&N;B|V;svX@EHAEf7 ze-Wme&|VAR;;U*z+gLWq)0hmf`x0t&vQjAQ;XN~iMQ!ORSNkp6WT8l`N*|b6aBlgduM%j*W21DY~0`8 z+*rR2D$2FZhqpH#-1Xj3`5tWTd7B&eH}+Jads`k<$VF|e??Pes*LT+Lsh_LwY;11q zyarfSycW-O+_PTob&bn&Z>N}h3RF&$~ z+UDxU{i=6+_5SMJbz zX6jFS-9k1sg~o-1IWH~$2uTNFE^<`bMo;ngi=Y4O`k&Ce=cwb1^}jg3H0Q4Wg?V)*xLp4)Y8dA zYb%ep0eH&qd2k(*JiafDP8D{uKKJKeb7|Ga`V3WQnZ+!H@mgq&4Txorv!_&dm9hdS5&3m z?C!&NcHiIKTfe`e#M0d@B^l4EQ`m~@p;ud609s4cJpZC^&}(H2tEg9x=0Z7#K;ixKKM(XF6U0sw|lsOa_O}vTp^lU;wGGH|PfXxSLc2h6v-d z08WYrWkE48w_Jzx+k|ShqD!jIh&Pwq#^Ox}9=-t`R~HwP^?yG)RjUSvur0?bHFP6UDny1mX)cid3O_P?QZ_UVF7uJg`>6g9FU4HUES^00^pCJ2rY4~6B z%X1n0m${{dOZo3*d>EJ|4hjXbx>K_sBX)~mwhaB`NtHZPAndF9Ti`c?aKMmY1k>A8 z{1&}662<~US2)P1b{~9h>~-O1J?;(TASk035oYhWYGCFf`-hd?%5xeAT9;NZo3T2OUsL);-Lo|cW0Y&5Dws_ilLlg z@N|f_7Tur@-^-Qst2n49qr-As^2&M~zpqBUqB@`+I&@K|xQF$}^Xet!H>F_>7)i8= z^_aJl=3)lXq!FP0tZAFkQ1+1Wm$&}2{D1pfcWYpm{o?94gZ~5Ao8kY9%W(g9hrnEMqHJZebOp-mOR}+nUGFi*PvRB(*@X zrS6IeoKs7}qqo@xEsBo{n{-#V;yrxutp{80Jt*8}6I6&{x)$|^N)oE=jRz_PtpC}k zwKy5x!kbOip2owyJGD3LJS$$ku69o7i0Mh#JE|wgVbE=3{9o0ZaQ4Iw{+pZ}X||(2 zD`enk3VPrgr@$!etk~;yN9{em$i+FBdO}7 zN@^`0%@kQZL#x&HdlHPJc(xVJ(hd34#`DoB)BIH~W-1k^R!eoXDwr6u^&ZB)Iwo@U z&(bX<(ZN`BcavyUf7zAL3L7?hJ^YAA1Old$>Hyhhqc`hu*2L(Xee0kpYK!zb*M&Vy zg1D4;cSm8HR2QLDr5D*TKdUCFLW&vL1sW{0dbXE)7%+>FsKUfM0Fei58Bl5I-3^EL zMu(<vbl3}rXuBcK`qE|qxkgxf zi!jeIWV2|?H(})T7jR4h9j#*AZAAq7dCmP~Gp+-cOoV>nYQ^{%Om;F1St&t3C4j;Q zMH03i|%lQ9HyCbSt_rHI7bN-lZYM z*6xOX=MGSG-lpF_8o?N> zXbD4oTexWY`tpTy+_+$l#fzq|Up&Y43+Gt6a1M8*_M$=9f*0EI$)>RtAO`?_0sA9U z4!OZ36AIEKu!`Xxpe>M9?XY#$tW0K7)Vf`R_t~=9hB_%+dcjYLgdH$65H#a~b^a8%vAJm-yc=vd1gsy z-SBW>7%et~r%npA{Fx;kYLf$tq~B5u3OM9u-zCSYV9e;5wt*6@;c_Z}5H=}b1sD*S z2GWJ-ECoHTMcsCd`;pZAr1oJraO$*fKXNZedcM6aJjEn-% z$~Hi_;#;#Bilc0bBF&?#j+BRLJLq)%C&3%iga-LFn%o>&Qitc{@yY{qL-=-oC#MhE6Yv#?Dy(3y%Je*8k$={m;w!JcqXGLRzZA3)f0rKpT}; z`7cuYbTO^dIa>D%&@#O+?b11#e}*=xa1QO!3(*?AFl~{oB`Um7tx(~4wLs6W{kgE# z=bYM}3u<`^g|s#&t;H$4NUhDYYHMDcmgbkj|Fio)1+i;&j$T+DXUYG|^EXoWf6Ghr zm-fFe<@4xp)Eh8k-Y>AJVN=2)Hsrn!_)rLU>k##^F!Yb)YvGZSY7qizA09VJ)@^wB z1FSRvvP`A&yCJMQRfUqh`%TFNAhq(fcKgsPl?oEyx#6XfCL~M~`08;GbPF7}7H<5H zLfDKXP1uKUs`N*_HsKiQ6rdz~#ZOPwK_D4Kpg1f%q8IxGV0=onjxe7rVtQHE@=Z55 z@>}Csl@06LFA$hI*js!EHZhN^M(!8X&H>};cL5y$UYZeK0ULuA2^+cpOYoqcwEkb1 z@z<5J*8lwS{K7&;{=czwx&B|q=jyAoqa>bHOGRx@CyeS+fVf|`^}PT^)FumD2{*3| zN8Hp+Jo4-Ygd`rgqD_p9d#{NL3w*_M~NN%W%b+iRj(goNqmzzy! zOS4(g)@P_^ZT8rfLF~bb+cBX}s-iKbhqT(5NB08&UjQy4nd^9$d3AZ|CPf1g_R|Ce zWz!bGgeXJ%s!qgAW7H#%8;BdknS!SvOqA^+EyJc>0$kO^%fv1)7!0vhOQw+ym}VE< zj2MwthaQKReJGt9F=?^&uEAg&>w;l_0?wF7$gJ30Ovx z^hHfH_;ccj&T@{~W)or?H=AJ5#l~vtCuhhR*;J|2YK#zpuueL61uPTs7xGgFm!zzp z$|t5#NUU8CRYdlt{&z_OdhYweKmp zA|9$i`smywAVt?nh$u@54G5vd!~JMwalZnK5=gigOj$A|qrOu-2-iv&)p5C4d8>*9 z)EPvbZyKf1uv2@ZgiDB1m_-D@mCd%XZbDH@r{M)vC`eFVU_^*D-x`)v+Q`PE6645~ z+rdetKI{#;CE%Te_ojc^TFugawV+B@oc9w^QiD|L0A3u3k<7205`K%~-c0uhUg{is-hMzLq6ZkF2`m^xW_ zh_H=uxJn)y_^8GrtRKAjz(4Uzc;Zw~oBDBos8dhtKQ^V~<+euRF`K!mtNCCEx3axq zSG`C36|{uyx66-8=n84vPxbj)WrbR zGG!P_#2_k2_D3a7iQB7HGFpv4+Sg&K2VoQZW6Gdm7sn?N4T`kz?uHO?%Jqyg*dV?3 zlGlm-BVd$O0l&n!w3nZH!{k!=Oz%88(HS zrBe-UknF1!3@{1`6k~Trt^Rn32p{EAtt9gm<3R*!tzv#c1jB;t%=Xq-nk^9%!Q8-T zaCQ~1i2YvTENRHvD4NOVP}`!QEz&81pIWS=QG8ZYQNtpODXUSg#Ya=mMscz=sFSdX zHldB;B%4r9oaTLv^n?6l2tW>JXaFy7lqMRD@;>#1Epi&g3s~fE3rDf)#o0Y&_A z{7%pSH3B_SJ&VUpL|si92BFSOlrWm4xMDdrV4BwfK&_JG@4EbQh5r`4*U^8so0Q!k z3b1}v3gG=I$yX<{0@GXVqSYdEnQdJF(Ge}20sc6Rh0<0aJU~2b64-1LbdSZVTNFwp z5Q#!h(uAT~$3g3f5@rYK5)?(oe$wPqlQ+3BR01VW7b1=xTuO3AA)E|#+3BK?t}@Me zrlM#bQf+#+qKF@4%9>OZZ_5zJHZ|H7QCrU^j<%INZ=jmVNQp@HJ|}MBhWsWO2^^AU;!e)eCXT- zLZ&dg5>mV0If{!EVNj92mdA8)*&XnCOB_anW*1CM&)rj%12d3Uw6v9N(hzlVy&ZrFcUjI@@VST~y5u>_2wl>h(*RwPpTqcElAg!#`~qp~%NI(0 z;{vG{FOs%?vDDWulzQnxsm+KymtlFfkh6@+r{tJmP@c(QjLG%tD;6tt*mDMD^%tT+ z0&KKep>pnW#MVY>s?9kcLfsRAee_C_?n*LFnxf2VG+33TxCI24Z>b$H8Ad8oW3IkX zw7CnsfmHBCt=>ihz-8+<>kG?8XL+Z&Tf^*)Mup>WmJ%0P(|{*YeDattfyMF2a@iIQs=3n1tKPMqv zc>WjWmTp}7|Gbn>cK*r3;YHSQ@%6tvx3F|M|1aZ{GyjA&`vU8jI|KiDX(8kPHGkt0 z|M{hSu6hrmVXy)gK%(>ZY^$N7cNlcg`D@h2m<@Z;(<(*mr0~MV0;zDda8kmK5MN7C;|dlNJVj%$y{+%8KX|uM8jKgdw_LsP zQFSn0{N7^qdUdI~3_rk*sPG7_()%a-1$C528nu`>n62GHL}!e>+&^ioZg1aS-CG5$ z`;L-FTx$I${YTqiu4MJyi#IPB2Dc5%cS3OH8JaRJaHI1xj*Y0iq}%JUfsJo@C+Djhy} zy+U@PGA#AplQw*}u8^Z{+ZdA`1;f^9+kPttaw*J$w~NQFid90WsfK1+r4x3-KKSmq zIdv`E8228WW?0}EO+##x5g86OXuA-QWxe^%!;Q_`5OJgdN~*_T=uR-l`(PnPRwZ0%d&05roNw(9g9P8@{-T0JyGGZpmFX^f1D-`U#Q+uhq)-4=tIm01k~p46p6 zw5OS$wfC`7Vf+1e*LOgHVa)1Ce^#zMn%f5pyF#G}SixY`S^_Vj(h5X6wUqH{9}?Gy zCYtG~6jg+kIg4#0McOt-?$L>n-)QYwx5;nSwt|2pAQ)wG8@>zfJIX6Gb~hl*VX5CKygIGKlJGizCdu-2RlwJZt!!vy}8WyO`b zX_Y#L`3coh4$3n#I8Kak=&ZMrsT2&mYPEh;W1Bv@s)45xJ=V>MEXXz#aV)DF4Yk8+ z@XjuHVR~W;M`|>_8l%p@O$LxR_pst5sV8dcc*!wSu&v?1{6mr|${;#)je8x#ORhsT z7gE(YRedl#E~PD&?PAd4vSXW;!UE}tQRS4zsg$`?&>5+5%$@&h2zPo-1CI*<{37SB z_T9-dc%Ix3pD#Q7t2#X~2fV9Vps12Z@gfF57P%>i5_S(YxJ?m}G zvch=lN4&o-+Hc_Lqxt~RN-OSHN#0L?CdvOcBFFRAafbZAw0u1s|7Gs_{AK*d zm-5L<_eOq~M~3!U{x5Q( z*k`XKZ7`0rgs=wSixdq~9&f3SG2=t}gW0VY#jj0`0GRL?J73LbOBHEaUNj6Pmh4(ej=PyWeYAp=Yfm#VU1Z6mEWgQuf7lzqS&WRh$%?sY z2}z)SGTqpV$F{GguT9C}=9im+0fL@}YT@I&*NM#bjxpG1A8Fi*lEkdQ_8`*+{I+`{ z#oLAe0l05tfYCtXYfyw$($BS}QFU*llj#ruFQ9?A7Yl_-~8q~6tnOD9V z%v`@OE2ZjylHY(KsKiCx=*bPXbs=c+i9+Bbsj8~&yrIl`ao;9jz_5VhbV{9)pV=Nv zrxdF&t$qQ?K0~EX&i#(oP)K~@xv}eZicbI90w#88y+j7I}8+siVuPoX;|Y5>JsFjI%pqUSk%2OFbq0XTQ7|?3P6%V z2^eumuKsGXbm-aMg0%&%L&p$e%bwmMXf0&y>YebZT3YCXW>F~_PJ~@3m2^R zbk?@RoPB1a%wJ_q%`fJ2zV)B>2Dw-rXX=0K_}{et=jSi&KVHh`QOeU}zwit=CQhE( zVtx6%`3jG+zP}waU7I~r)1+K zE6%S1>e4}3ayTKce!pVAa;{*Kn~#3IqQ7yL!FXDZ!FWZ!6xd)TKRLf#;lBm!663Yy zC70JL`rAdx$o^5V(BY;zImws8)M}&#DO^04r&p3rwUU0I%b7T}R)Q7lyUr+~dZ%XQ zL@TM^1&w%@n_J$l$d^K_nA>oI7Z$x+p+AMhKMA6V?UJ`E@}-bu9RqY?^pnJY0Z>9E zpO6mUti` zo|o}opQY88@n7+C8UOV%{_AD@*UR{?m+@aOHCE&OcSUuCc!`L7c$^amv`&Gil6hX|J|*JJ8SE^&$j%}SpW0$ zOPTc#20)kV|7CpE?yWw!t7bMxKKP4>sMZa0Aw1 zZ~*737k+pBkve^?~*T z2bw14y#=e+u*JXXtt4pn2-egktV*RKS4XE2f7LoCRKa=!)P?M!FJ-aI%lOlYox5C zqy`zq!L(7)$$Nebhu8BYbtv~7>Ggf)xl+@8`#BPd3x6glxtC2DS8{MX>pl5*LNEj; zD$~^D6GzeZsdQMzw3O#drOxwD;FeNx3P@*ZOza+7k9|A=1xN>Zkg&Fp4SGswoE+@lXUmA?{DfkgoaN)8s#+~o@Se`o~9qs z&Xp?DiFR+l=tcb}!8rX;?SrXD`ie8%S7Y|y&J;cvFDx4-;J&yq;f2j$-4~0KUgX!2 z`2F@_lx|WctW)-7_OTu2$$61)TK7}m57KK-Ub7%L>8)5UPI#Xda`Tdi=|}$S>6z2^g=Zw2JW44`!3n8E z8V5aZ*a7+bX|J1?a3VL51Y%-1=`~svPIxIsgp*$9uzmdwjRhyXl#@x$D;>*s@=LV; z%h_#GQib(4D^g@$VpyoBnXb}H%kwk$y|_u_y?LsIyv)m9)NX=1BEtC({RxFn+=%G) z#4U$j6PeYZn%ZHMUjLkiyz28_p$s!cB(YLW;z4$jNh~CjCd)-KNpj?%OqvX{u~Otp zJ=XgP0+5>`M;3Atx!kU#TUv#n)OrI%htDl%Ahv`{wr^!!tvWXnfN@TgNPfR1y z7ewnA@S!Lt<-}#kaX#{1;#l)3h{UeuAP&*&hxxSMC2h!svL>ODQiIt}6dn38YkIJh zJVeaGi-*birF_n(|8?Zf3)gYh{mwEx$l`dsRNU&hDryK$5Z*5bLm+WBkyIp6x1 zQ{}VOapwA;o43~g0^I*BEL{43zm(7A(*B$MnYRAz1MTzFan}9s@=_ZAdwyYI?sEOV zj8CyxT-P9)Vx(EpHi0EHs_lXyvIoJDBM_0Fdd`&y0yAfD1QFo|g$I6MdwRz~_9^H% z(A6ph8xH>pM4-2k|MwSHpv*jlmEZo}8CIAnrn$?S{*8>+Dfk8CcSi78C z9FCimqX#mR6kTLF)op9+s@|Od?^m-q=;$w**p!Tt)#WK&H53ZXCY+g@fNF!bo`j?d z@U3=b@SCfHuWO|9g0H&a@Pn&j2-T8va90ljC0m1FH(mE7(ZgE_3dU?eAMUXe4G$pf z3WckHYIKV6B|P-}Q{$=ljfX0)s#rg(1b#P(gaAA^pQ3kO@=aC3?V#h2y2BN393-~@ z>S@$tB(Ku|<4UxHA=qqdPh9|P_7A(`f~u8#0aaTqKVFRDa23p1`)xng5OoL@l;Dy; z-$CQPBDX>K*!DGjRN_|vd!z;sVE!!^qe;UQIgXv3NS#b%3;G&=5 zFbTSyiro{Yh4b`;lftxgR8b}4{-Ht2s%oWo$GQh?Lp3tfTu9rL0`1Ey322XKZCW9w z12DFrkOvGBLo@+kSOOiGAy#t=dq(1YpyUKa=T8DNp>=yLm|;Oeu&jL~U5L>`B8Z+V*_{=6>e7HrF_m6il&YRvH!uod zDOKPps^z$~K-E!FKlQs$%G?$5!Jr_d7LclZu6k>c+L)jWB=I5fX7D;zKdOXq8uSK3 zN>g_-!@h?(8~F0k%D(fOpTUN)UvS<);{ibwSUZ>DHVYGt)T=yjP~GiHCXd}sz!EQ~U~+++OV*LLRGHpXms!eAFoD0_4Pn@foF>Vu z(l#H#JqgnqB~#v?hKkY9P8fD{X)yL-f1ozx9y{3i5KO^`vilm1TI$H>da@7sy~DPT zTkMLW!g1L;B9#gHQkBzC|5sR|8WI8~ch|_P>)Y2C=3J@O`Nbpi%oEQIM%h~(-t28h z@foM8I=n5Ah8j7leY7OB9(7FN6Al1$l1&x>gpT^;vk0{6*gPvG$;>T5oz72aq>Z%>2Wk z$qnXm_*a$FG!+xmG4|#%!_exr?IC}*a#PJ#Wjd`+Q6d~9jBgwy zZsv3@6Rk>n1v(!_0^pkgtQn$+jbaCid&*F#bfq-%ys%5ypfNR`Ac!6x_EqMDgr5W> zahZT;c50$*NH&Pc9Ix%d5mPG~*;&+bk=pJMvmHet>XMfC1~Oi#+=AJXS@C+Ht+KY+c93AG70zH|qFYHpEXBc)J2j5`#= z3?BO8JsQDB)Ib)sflJLKiG;p`QQlcuzGG0}I zm_<8rF{;!$EUg##eb!4I9JqUd$_^`4KjsZVJvJwMBqG$(^LVLamnbQ7LG7ad#BWb)IccF}nwEA4OXURpp>onn@x@@AxfT;kffrlM`Yp zJJ9iD%IdZDrjS-q-rXJU9TXeIoXjvhHRrCJW2}p>CpmT4Ln=Y0fGa}aI_L00%A<0r zV5}@v?;|L{=*4kmu!1*9$6kTtIj81!1$5}DVDFmBd(Bgu zYt=nnw?R+RP92Q(so1TC0NBzxbu6J%$xoT0urf8JQ{@zHE}mD$dCSqu!sd#5k2$j2 zpUk?1Pg?XX=hfUvcZ!t`xpBZ-(O`@U)d}6Ol7a5ePUb96=A6&FI9aq)rA-s>o?{Vm zJH4`6*I+pi_W^0A`4iV=uF|RJl%o;n`9J@|Nm! zaYXMi1U$UTF2MX-p?t33kn&8b=yNg)4uy7cPLaz9WCXyDNcTUF%eb44{W%ve$qEBh zEUE&YsYLiN1p9{+Qq-Z9Y+@5un~H;Q+J~8V+V)3cYeO||d82;#wCNAYYzp;uSh+Zs z;4AN~x4ik~^k}DYW-A8e;;|A+bt_XjQv8xd$``~hRcW&nq6z;Tez@=pVxQdXiR_c# z*Kxjn@r)DxI`XorKRWzC&8yQ8m$+CkmK1w_jH;Fki?ueV1>;F*D;`bN99zFtJ$X#n zl5;hc8(mqw)r~+REmMcAr7i4J9hTt2r*#~i_Eo}HQ$tY47iu8*ju68ouaI4yUMH%l zy`XnU#}mqz%grfK-4W02wmc^*S0k9q&fyG({2Wr8ho=v~_OI6@vGXDvJcq-9+Oc~Q z;2={l4~%ph>CVy>NB;>k?gSW8ALyhzfnR22JargVYe}YnXbENrt19!The@~pq>P)J zev*uP-+KV?q5$`F|`eUE=?}l#h~-R>8E#TbjRN zX|zDGZ`?l%+i`FbMx&%Vu2L{;A5^7icIP`$hCRsOmAe6AWP|cI1ktD1i7}KyyI3jo zgP=`%e^@f8^!qL#pSyvv@tTC*1I(xo=8t>%m~m{5gP>c?i?Uo-W5t81#PP7tc5IzafQEEr z6h%#>p@xQ|>|?o6D6t!C@e0FZFjMB3QcNs^Ro-;Vm5|;CI5#>a9s@BYl>+uOzB;YgC$1UIXX(FHG)pj6MARmnBbrAwtX0;uN1Z*)~!MFDR5Yr zU{Se4R_pq=F+IujQ7(BE@nA!oGct125dqQ=%|J40Q@(j+6o*Gy+f}>5oJM8Rs1jOM z3{O58zR zj5^}6@+fGPLAwK|J}9TE+g1gam7sM2Zk>WL!1?|qb) z7A&DzD_AboYP8eVq5*q@KH7K84^x??fxvlbH49fgcSEOjj%zlH9-So(kAVTkO{T;S zF^b35{rKnvrkB4yTAAPXuBmJyt(D;CV@=(uIv*8NV^G}BY6o$V+iQRX~K-8*v^AnBF+trGM#-J4>1= z>lfBZdrG6H5u`>|12V4F07wPo8TBh$2@#<~PzB-3SOzYQj=8Chk~*ApK!cPmEl=$M zdLHW<2)8x_b}3bOaZwCYuN(BsrrHV^M9v0c!2JoEE27ZXP93EmC-yh#Ggbd?M#$~*}`~QCMcNYHPP5FQ2 z-~RmOe~91zlbd(c-~Z~PFWmfH_4jiJU%Pn||NgC;U%|h>bF+tkU%B~p^>-(19Yg+f z8@Jc5T-ki(b65WF|K{Uwn|6QhmEU~jH?Cay@70e7^z46mUH$V_?iBPMzW>^lD}Rgg z$loh(ze0nhK5E>4fC(Y3{;U7sr}|e{u9VL)mS=tb@ZYB9O8eD~U)y!Y{^pWLo}?t@phKLzN|KlrmRE`GN77eBuJ z+E;&erTEFe)QSj`|5ii zJbw4nzmIvp^tpex_}S0C@c7Qpe{J!zkM|(;@BHBx*6!T;pTGa7D(P=w(sw1PYRy-h zKl?)QXLnw?^85Rb-v86T|8KsesP>=y;I~(=EdJS#fB4!L)vtFy{-f9aw)*?t$NwGv z{mHL?{6GHir^Da*r2X2J)i-BHpa0qFXODmK$`5}!`aeGT;cH(~#Jc^-KX~n{YBhiR zlfBozw)4sD*S@y>-lzZhm!Zs(`UAY1eNB{c=SKc#asnWl$xX8|@f29WCgIA6}ud4j?voES){Y(6=nqO7#x8MEr zkA4FhTmJdqkyQUmrNVC?|K)q{e)^x`>#u#Rx~T@F`SH(wfAODx`fIA4fB(;5{QmTx z%jXaN%@@@izxVO?U;FyU|IBXv2cO^m^hZ#0_q8%k_Sb*Bf91z-eC3aSef#5o_v6Q} zef`t_636RHKlsRjl`1*gW+H~V9fBf(7eEP4xByCb1xckc8?N9&Nmvjey@J&So%b$Jr znIgfjH5KhCvj0={_v1goZ+iT`|JvuTjDGu{T=7<~sDgguga41X_m7XF$QH$CGM%Io zCg}kt5FkK+plDFhA(~+l7)T}rB{*?pLWCsv7TIx@-HXr-xDp6<2Gc12K492Ub8lYtEBcTROrexUdJz3;CFpY)IFQ&p!< zopb7(s#7%vx0+>WcN+GiGHwC-F0+OFrEX}88QTMYR`|loH)fxID}U?bDgV%9ta# z$e{BF0S3rF^d`2^@o{i%(w19-FR>vUu+1i1Q*e_}(+ABKXX9z$r^tNAv7ne@-25q) z<~Mrjj1-hu>N^ZIE~Sr+fV`3GB2O2&#wOpr1bGZ>S#z@wT&w=6@ zGvTUOR+Fq*_)yL@XWRh~-qnhm$Nu#j?rSPfr>U=_97F%f{i-w@%FA~9vH_0HHR=63 zE{SnWu*_5oLXNEf0iTkF0*(!AsnS}rBQF=VmY4qOcc3SOZ*enGSL|ulREZJGu#`I; zk@c2l9^@ju;Yzxg+;AmBiu#j48DVCh6)L_DnnmwVPYC=SyExVw9j<(a%ZxHUEA&Cm$TqkfxeMEw@%1HqaFRL+IQ<$*rSy9x<0z(xU`8&IVYUSB(O zbLU>5p$E9lyp+6}HxpVGR%0pr1%KO}Odt6oB zG=xOj!CDQ3sY4Y$Z!nL>&#ZcoW6%bbbn-P-g_>IYW?xq~pzxc?P*IN}b=X3rhIf1_ zJR5SfO1abl=@G*iK*x*!Xv-uvTF8gh&c8w;Xkp3BV8!>98s0;H15K$`q*(q)G z(3>a1yBt%+339Ao979fquO^ej@@JF7pQV`0&%Su`d_y$(&F4VIdgkYCm2N`NaR_Q9 zhr?Hr<@U+p_7oEr)ByK0KxbZqm_v6>8jjgbI%X9es$J@krg`XM7)VGg=(4!Is$}-i zKV|}_xjH;m^gTAj?gXi+7eF2+{0>^E5E8(MaS9P!xn&UkP<@98ccMXG9NMD(QL9N!yl~(M_q2rpv9lUNtKllw56%RseDFa?DykMh;or z^v`)nK=Zb84IV&TW;vAW*0K!dU@doq*G(>F6=rW+X;!zYYJM0R$_o1BG?rbSD z1utK*LaFtm^*jto-+u#MDL)hk9p;L=q2pPH=4o2e9O#jkXUx|tEU^P%ZDI$e>ka_esI z{aF6YB%1S2HKocCqugnfdVr7Hc~cl~7PuXiKR1Otlf;zEzk`C)HMp-44l1Z?fh(7g zR~Uw?0!M_#r;*1!rM~r zD@Qo2^EZE1`}?<$6w^t$OSK&$V?YhQVlW!FiRT(mi!&R0#7Vt}fD;X(8Se&FdPf-> z&EEDoP94BgCOjF~6K6ZkN(F-i$~D_UN~%_e)B}wW0vk0;i($=rTa~g^$*M{g=xo1= z-JLrf&9&FekmiEm*h0?2Nn%QQnWJT6Ps7|fQi0=`I9{%|n1si_g+}<3 z013ZZNvGey^l_OY@zJrE`%uIc!vUld{bb0L)HDvuQ5$2)-PkvxWoRv46H3)R&wKax-v*}Wf6 zIIFbZ$Zg zqH8fPxzt)_MveXhT5t#OY#C3=*C?5!+@~zzNTwrW?S%OTaTLkeF&-3u`C2KJp1c*{ zQb-x+NZvUPK8_)fY2Z6gOK-$-I7sbru1%7xa{1aMsKgjeCp?tw*?f943%$kT=NW)=N8Wp^-k1Lnk`G)$qK};nT zG5Nu@*L0G}#WWA}nKTL-NHSJJ0|0nF0N1pD?*OF*pq}b#U8Lj-xgb;a8nZN!W{(BC z3;$`OF@14N!bFHxKw;23=e&xGDz0`Miam(7tKA)ObwGhzBd!YzFw+?3)>zbv4$`$L zmAKlQvZD;nLs!nmK@=LF=v}7WJ*37GI4h;vLY@B`3aFC%xOGzSv3Nk;@Dq@5sJPi8 zhd4RRf%>^`PGwxGXm($N=b|~4*QC3e-Tm-gQ#?9Dt1T)tTc8x{oRN~nIbU_f?KSar z7l0`NYvB!p@J3pGIQmb9f7RO*v}%=_l?NjhkXFsgg@og{MumHh@R%Bbvm)> zkMA_FF8K3o9Lk%3C+Q=%fVqtdQ#}b?tONQ=!KBtogZx>(+3*Sj;|%RR8LK*3lhBzw zJ&Zld>YoV^$NfD0XAT+&@F3(2u@t(ZBS;DqkOXysZ7cEXx)N4^mubVO0J2~qnSmn! zbBe*3*Ih`!$i=Vc<48Hqhj*G)sHwMfRx>75(|hlN)~p0m*jJAB@Giz`Q04;PrfPWq zE3|*V6TU>ayix@C0RYIw`?1(+ae@yY=z+Vma?RlHCZW5FskRWXZ?@0!Eo6Gj3YwXx znbM)NVTOOehg^&N`TE??x}+0nbMibmj*Jw^NnyxgtcNyGVQi_$;jqZ&{@(hL0^ zOVtbebv_eUdwqwLYU?f?UZzCH)9_l(5ruh?@VyRIq3Yw}%q zy$C(+`+6EQC+lXUM&54Z_Sys^l|oaJz@}Yc(*)v`+jS|RH(t}Uli%u_g`It36tGOi z0|vutdooThONG0N;I?f)zTnKhbmN;NjQF`J8$XYe_lt1P++eXCu{Tk86rK$$6&+Dd zey9UlPQCLOd%@_FLw|z&N#$G6fP@4KtzikpsBeL>=w})DrJnasppH1oSk^2Mu-z{* z8@$+H*j)tepreX)D4u2^6jkQv32BtW1gP~dc*mJAH@yTdUiGeQ$hkWQE^f8Jg3~hv zW-KfBpN#6jD{_5@K>{n{4(JD34VUPx#C3u2Bu%L}2aeyb3s9T3kcTL7of`t5jqrtV z(OC#oFg*c%)k1g71$*TsNE?uNFZBopgPZb56GU$_J&6c}avfa~hx&kq*t-+nSAw;q zCUbygZ3! zR%aXJ8w~Pl-cSvBdghy*Vv77IWXe+)ahpbvkxfaeQFtR1H46trm2UdwE!aSCxFl0r zN{gB@s1Zkl8PV+G)e1A+i^^!O3MGNg*m^#JOwU5I(*vO7WAP4oD{qiy!YE-(iRL$( z)C!)Qp!JZi1Tspa=?6egx$tI5ASYg%M^|Bi(3Gto)GpTx+je2oz+BY3iYpGIpIOtr zRiqwG-(c`1kN{=x>v%nI4zGdz?Apby$Jv##>q&MEvFl;D(rLY_3XV|$tq>AEwJqev zfAmbIHq(9JH2^e-=_K$fT1P9_Uc)JX!|4V?PZ@anwO;B3rmy}pI_N{(ef0E6SGYf! zx%+#W7oS9qGGG5^Lw$X8^sgij@%59)A$0VGzz=~Mwj+*@g+`RJ=Fv*94KWY4v+G-M zZF=?_xHg^^8YcrjCGr6TFeop)128ugGf0b?@mT!M!LO>q~YJP8&|nvF8T# z74il?C3R-QbHmk}rJ3LoY5h#L#vT320mMcKUf~By?0o@~I?v<8JnQ}+h0=wCM}wvO zNsS#kkHaTrFSe{R%xlHoaDB0q75iIOETci^FIa)}x&m1#kFin~iAx)<`oz+Pt82vU zhN~Nezz_IDdkpZ@c|U?V)<|PY^hA(Ut+zVu1Nd7yZy9*b?VN%W^`@dbrHKuX8D~pl zOA=Wd2D0{p1zBWc0CzBemk|J`3Uq+KA;2o3@dLa+EHwTV@BadWKi(yw@c`a835|R4 zzD#KReJYX%xgi)p;c^Ra9CB-&OkXNuqd{{3Ij>rrN`feO!M$zlBWUVoQ;Ak>V@POx z3AFeyh{pk?_wU|sec;q6+2(1^F<3V&ocPq%gcqp(=ePh z9LkLZkQLFD)VNMo~S5ztaO{6h!jRt5zmP+uCascZV8vnq7uiGz;*!2u32PJ@s zgk2*{{V;!cD~D|bs(%7FL0ccq4-1VqLfP2nU*pH`Rw2$3_AQLNeb~-m0GsR%22d@y z>G?U#oq(Zfa)fC*tRy5EY?R*a>Kin)d7P+uQ11<#k6cRb8o-%;bQf9? zLgQ^$RaMKDE1Fl605aZcB_+yhk4nlQVLJbfONg3Ns{#Y52utV|a$zbDjVb}>A@d=4Z zNw%{x>uW>3c?dgudzqj!o!2R>XzHSdLW7u$u-|I1T1D~! zlqI0}3KSED#U7`4$16xJF-_~LTcX)}jER^0=!iW@;z;c!SL;5c8eyY${tNBwim4hK zn5D5QGwy;+dOiMJy7pUU^Q+7RAqNIO27_2A-SBN9GY?L(_QXk}syzN#8XUbv^}D5Rt9iT8x>X8x!Zp~0<4JT@tCKUxyxQtaPFFVZtpq*8RI~@p%-B|paxx;68{Ek-x_Jmj@=D&&urjY9fs(wk(2&4sr0GM) zp>?NKSG&C!^KX73nnKu<{7}0gpl;%y(U+EVsn@u1A_w3=N5tV9Ikv1(= zM5K1oiVHwrO%8vRVw$b3cR@yjk^-Gs#`#_ZwPKDQC03p>Ltj3NgYV zCIkPL1XOWe)c|g@mATWAuyQO(!cv^kG&yFHIC$g-vHJQZouqdGM$vSHi=^~3@2<}z z>_7)bWgV_&&4zNpKOPA_F}mP7qkt<#e~^@ze!&@LTaTkvnn({A_0>&%YSm>Nm|8Uv zr)9`m+-^6x(*w@p4AW3&QGU4%MjC_1zc?5;2Ty)*-6wy^q%@8~K7&c@tZUj7LSW{A zR#Sq^k$jff3opEXZNT4Q-p1-3&&Jp-c!AwsILvN=ci8Ra5WD>zMf3Tmm_QR37p&kS ztR^F9M%^C`q5(!0#Wkxc!jKxv8A1_;EV3@BV0coqmI3wr2GXWx-H+iG3~}f_w-%9N zhR)^vNwo8J=nfy2pk^&@XEUJX*ufQXlCadOH0S<$ZWIzfxfF#yv)XZZLTFl8 z4)HZD^!agYk|<@r(>mYK0%ii6u{cVn17(TUgKA3b4#7lG5r@L8WywYxyw?N>m0}!kJFk z%!TyhuK?#IW>Us$??>?6#rHV5)k0tls;3G|a4A(hakAWus{j=j)`i3sBW+Nt^jQyG(oJ&l4z_li>%%*hrzC>A1hSO(8}C!IFkOC! zClzKInZ?$&?aR#KD4#}=GvqKmswI<(m{M-O9;KEqhokhTFWDLmDd(YeHIVbq*fDmG zS!lcu9`s_5Q3*bE=BSCOwklf>&T_tsRmG|Us&u10`F>#84U@gv;z4jbt{FJAL=&h5 z(uI>%M@gh^V1^zF!RcJKvgJy~l5iRPe_U3}b!F)#^=UXEQZwx?v-m$OE&QF*EP8?O z-Z6+8lxX>%mUuub(Qo#x#nJd9bhRZu&?8E6aU=AiNhwZ(7o?L=%A#c`@#sp;?==`XM#r6%q-)hYGuj$#ZDsjniv;jfZdB#5cio-LLV zLyyxei-Mc_i}lDElj`b_RqN&%42*CoTDU_gRLfG-*(vlIPX22FB{?YzqrbjBvL%^e zWu$i{4Xo>UaQ={#naSaX&rG(n4OfyR=PNwgt9Fp)Dl#`e1|#^)Dz}$DbOlOx(JmaUh$FbG1&W*6OA47`n=RP)~JlTlIvHKDq0+`d&kFUImvHO|1^4{v0%>6dMDE z7sf5MJ6Obx5R{=3Mu;Hyn!Ql0)d}i_W|aO7*9dH<7br{PIxSx#<>sESEZ$~c%1a~N z^lroqi9QL49vx?|=Ot@TI0^gXHvN-iN^_lqS}FQ-Wzj|(@LRjy5wCe^1*@bb(E+0v zL-9uF1kprX=jdZswVwFBfi1Ne>0~SymrFn#-d={2;zi#shLOQ2O$u_~mcx@$$ZQRD zmK@2Z^;2|X!(1l!=WRX>mPB1`i=4+G(YClmR1cYm+~GZlY0#5k)Qpz5a7HnsN@e~h@v88)7N3B^G~8l*@c@rgiaUE z!vn9I0Ryz=s#_p?27?n*G#CQ*4z#g_*%2IINa}G24R@xl7QP8Zc|Fi|=W1aqq-~{ZJeK3B%LHs5)9>9*aH^p;(tYAwyXJ9 zKi{e>?RFd$N97-_bkp@{T*EN#;>ptPz-iHCa#`{ZfuUgwk@^^^=)U|PxO9JO@89JJ z6x@Z$fN>WlcR|0Br54lS{FC?j4V82YD+{|qM+bNyy9an+RS$fCp=Gr&BOGycFkfpL zuDKbAp%@0-keFUP5pO12s6{vYaZzz#p{;|ih9VMy71_3s2aI;b)eU%ho?k`|7vO#y z_Y2QIkbg>?T={}6B>Wb?)=*{X1*M{kg^xqhQpgiq-s_6PD<@{s6)KxpONJ^@k1jvb zLVpEGyD@GJFwsIO*eGB-TjjVcCfjSw8*}L*aFYFFs#!z_@F!1CGSAyeT3N&=bU1K( zi#V>?FsDTv?N6$+*PDgyxKiGfQr4O>r;JosN!W2rbQX>ii@;9-YArQ`Vu(Agu79-I z(ln;bS(q(RcO~5cYQGtTxac;~QnW%eFLczK*L&HH50=f94Hb=wYUy*E`KC;kwMz>p zy0Mv`b4;AlaOGApn?dBXrrcVlLt6%+@qNQc=(nb9x(3?fpV~PI=+HE2Xv7eUr{OW4 zX3RNN72ZJ0uDf}uwef!AL}?ORD<1`nK@^On!N{0tE(=mMz`E7>eGxT&jxD2ueZ%N3 zzhkKx_Q7wU+lHqb2Ey1_z|B17>zO?JTw<9gLyaeqRr^=KQ$I3KAG?z1h+Rx!8mHngG6=#E5 z_K)P4EA6c!T|T1`XJ>+CIaO|&{~>6wkg)GC2`gJTTuDvN-RRdV||1!s|f;OXDGJiPT$Ho9LLFH=i1QXL>Z6o9R$FrW_@P##ikhYPFe2^+=ChQ%opEzLWUvDoNHw2!hd zDHoHVpr#!uNUkW~+Q=RZ*wlkjuSUg4paaVJ4O`W{i9M5N@fvK*#LuRa!3T2XzHuAP z4U03OmQxLfa-)KLb=<~GOvr_VuXCF$QB$kIFyC=v-65Q}L&yH!HgxPkDHozrKG6k( z;dANeQ|w|^v6XmUI4B}X_(FgV@@6V;b{sc{qR(ie*&4CPhxfe}5P~`xkNF9y> z7OHnAI1}T+30bQd{(@!`iK$-t#AUR)5lC6+BMcg{0qB~+NkEF*Kci0)sRJt5-!ouu zfWq-W_n^jk=_7C*CLYfN?(6TDCPk9*5$UF8ZGwUdYvQ6yS1r*Zx&N9pYAA>ZAknjO ze;h;ix`>k-{1|-)^QM9W&89h92bEp!cS8xPSlj^&t366R@938@VKm=|{!6Iy1>B;6 zTLbL-pBsnqQa{6*!7B;PD#neR>&|ae=`~!SSZl-(wodlE3YWO{ML>WzGs=Oli<>)K z6c~`n1t!^W+X%{9up|e(v8K~d;pqi95A_(QtT)@2Qek@xs%WUc2t}U2DG2GC=FG+; zLL){I3vZNxupH_9H^Z=E=ATBhtOJVq(UDo;90dQcN9&vD&CO*P`#eKH-zpzJNUSTGwG zJxV6M*^dq6dFLYO3Mt{}D0C%D%!-GPnw0gtuCg>u^%!cZ=pK6k_OTFH*3V`S2j;Ht z{(uRA)wc|V;OIZ#Yel}@-%}72PRx}sRpC79gRh_Hi&di-QXLLkddU!SFFj1oBp5+ zjn!J8hZLh!s2}x|txXaFU*iH-GD@aV2>cCWrZcG6oe;kgZudE8A1UE?x3jx>cSjyt zEnw-&vE+KoYO=V*vRW~_PC~LXO4*lUWPtjN=Ed1LO-)T>@k6Kf0i~fHG*&ihn5L$k z+4$`%l}YRX+M}5y4_7gAq8y!$9%1gbJ}sArikOQg zUqG`Nr))8PtlfaYRF6Yii(LF#K8v#TU!z_Yu$PPpMm8`E^~<-vg-KwSwTS;xTs{#B z_mS>v8_ z`p}oq;7hP>0IkO~w9<%4|0X{c$5o^fF7e*N@PGoa!O2)8qzlvcBi;lrb+N!ULp2V0&yClHylRwv5~&48 z2FKb>sAhi934$?`ZLrhE+OoA^r)`0;Hiu?m^4c}}fP2dsZNS~oi36^gKHjBEe6VZ{ zDaNRI`Y@ZZ?ieO-VF0aXdP(ZgCzaHKMt~*-4X9H-gf>js)i6N|Jsa!RKB^z8C*cE6 z8gR=+^u~kY7fypW5gsj#@Y0{0*5;wIeXG708Y#`QNNLcG;54AKZ=g>MP89s#RUQ9t zs=jC;fT9!B0?TwD*+bf5!2m!L0<_k)44^dz(8@+g z2aEVVDQDmpu+#PLnNa@@w8Jx40iAyaL4wYG4m)@Ic~!j*ePDyxh(2@^sH#ZWik+QK z1J3u`ZACG5B__Oz2|%v)3yCp#ix0HL_^Kgxu&NDuRdg#ILh~xEm;U{Nmd1h_wyc4? z)2irYu=A@OOwdK^HkBzAvpmlrK_O~vNFkF97$;ZRS=Iuh6WJT;kIf^7>##Q$^!7)cDmRA$y-MY*PjW~*G0_;XD zA~gO5nf2Y1xLAzY>F7RuL;!{crY6@6U;4#WHsG?#=&PM<^5-GnvPxua zRzPtdW7XXWwNRem?lWHwaQE!t+@0Q+;O+^?-RJwR=Wd)_N~KTtp`VcOh;a=OLy{{f zJ#rLEuHl0vMrMO;6o`vzyOD%_+_I>o)bQbYo=2wu6dqe^chiNV^(pRA%`V=b)Z~ga z)m&+HUB!*4wj)h7u~yd=!+a>oZ&cS>)wLXM^sEfJV(uWOfw^!edab#*DW%ZWjSf&3 zIzYBi)GF+A#izN<4fWk@zNQPEs)2n)7&-2x8{2UNGLtfM^`6J2v9$1WH0E&Xm@RW0 zRy%KlrtEQw8FV81G!@6FFTk7IV-&|IwcH+y(D($h{Ssbo?^iOFGAvAP|3*HX1kV7W z)Wlz5q3|>5FI)7$dC^QsOCo4K180q15wtA_z|IFT(!RIMj9y2T78!~g$mRyijY=k2 zlARx0gL@aPkPqiVt+>?kD5)@GFvbK7#u!7wa{FX*DtuK7 zyMA`q7Hck7wEB}go=SQ%sNHFYfU%HerbDgG6?_vP9RnJ*D(K=_bw3`c&R!oE({wsT z`9z=AEw4?`xDxzL9@jcp%#0)FS`#XRG@Kul)v@a?!bOlbLNom)`co%c0y7GYv$ceW zof<_z`gV*$*P(F&I-Gszgb0oEaiCcX3hXadusS?%=K=>;(OHFwqX;szjpA*eviVGQ z0?I-Abllu+XiYA@VLp1(R!xK4;9Cae`1+FArj)x9B?yVI_-C{-y!44ogTV z(w}0m{6&YU)o*%p_Kf)k-~CWX{^3eD?O_~=!{bO>kA_C2Rzx((*5h*noTrLf?z|4w zTQnHrimS8V-2sFGplHE$K)l`_ORmx2n*k+N(Y9i3=ieRvZauoC&GD(2C-YW}n>p2{pa7q+N-9J~Oy_f|rm*#48pRChe8skHf)0;q9YYRJ* z*|;|_sa&ORa5~z9ItsTpq5B!9f9}yVjiXn191UUeY5w1XC7c}N)@`h!AIxPN_Di^G zM{Irheip(MTc1QCridf5P5@Sm)AgU}d&9;A7g`|I$x>_dRPpw3UlKI#Ir_o3kg^+* zU|TxB#noB4mGjcK*awD^i?7BxTzwYU>*v5kjkF_%Uiz#S8^=mu&@fCV`?HtTw#YXa zaGO0CNECMd};dX?>GadA9J(A#$i@$oBZ-iDffVUSv8f?3-`( zc!hnBq}WbZ1xxwtK+lE=q~1)*&5kSU(#SI2^s%FFUHSq!G{f=XI?AX%tT?Saf4`6K z1<7NvF1v8G$c^U?4FtHvZ11`UqFEFcL4{8~+}1^JX4C2D`78yzZed%!v@dRLAqc)W zh%+xtC-*+SpV0Y=*lz?)W`gC5UCE_ZH% z+Qu-ZI2lbH9`HqfSp+h(7GPU^8OtHtjX0CI8+ArYLQi_>%5OFEP@9P%-W9vVocYY1 zB}YAWyO>GZestC>hs~x>9LLsO{87kkI^;OKp10d2j)e8qiF6=63^)2#S)75E`;sLy zhV=nXonNyAP^6!-0c)jF5raWOS+bIpbMh5l2%tksGJH@mDPDuuQ>H79kLvS&bi_=y ztdLjPdHBFSPsGm)On(Q29A`FvPHN%=EWcI7PXY<0v`E=16!>Uu@y^8iHhf=F{IkS+ zBfifq{(0h^9c^%HaWL`zIKEFRek$?49p5vHpT_r8cyC6FYQri&ub!z^wycV#Vk0Zn zGsG3ER?1ewh_t*eF%DtKTp^HqcM)EkcqyGRf5=f4Bm;@U^=95Opv z*Ij_7n=1HPM|gcQeojKMQ46pP`pG5cUF7=8ks0p(WFTIl4Msh=Z^YKcVisxfCspT% z#i{Ve!{4g>uvALdU&hH-w!Kth$E!Su!xN&o3op@?>c$o14BKf)y5v@#q(mPeEix6v zBAKR$`Q_kjKlyQD+9@$kSwGeWng2Y9=$u5s@h#0=pnSWqfZmU_`*J3Oozsa$#NejO(6FI7rn16 zTnXutlia&XsW=%~xM~OEG+w$@<0hrz9LZn|m4&aSqxOn(_2WpzIb^J=6-wzyUUi*| zo~2v5*k*+x9vzl4S>3qGqb_Z)j*bJ$lKM7`+7WS0?f$=G7qD-`5gSQd39M3x>!h-9 zl`TXsv?bIra>U|cEUU{c6z0A*h9R?Zuy(ZoU+Cs?D-;eL{YJ5T8?5c4#`5R9HN=kXK11 z|0GMz5u82-PUpom6jm3{DWieA8|F@xEVhu{75~#z;h9hw+SEmAYT&fUH>WfuEl`%4 znQ%J6{SfjWzow^qF=BNILpfRxTfLhJBXk~HQLUW*p5V# z%H}uBT_IjUY;WiZ8^Kh=C24c8%-B#k6~=?EXof9hI}6Rg8TI1Bz!Inld=olTu z1RvnjQgd0S7lRQ_i>a+i2Ba8fuykfJzUOO~BdnZjP>ll%RAzQ$i+v(8A@JZk6bwyf zu=_v|yq>0sYgil$n(Mo8U$s&&13DLv6@j)DW=keTij$>rG<7|mV0|}D$9P^B1{fAY zt@GC3O)9#<7h1o7#KPy3f}G$8ue;MtbNZ4q-QtvS9!63Bi9lIl<&qp*9zNz z4L&8tA`S);>{<(mA^spTuj3T2?JUMiNVlpVVsMjajwB<57A2z1Jjt<5Qo28B*>3z0 zP1Z^PuP1;5B*sH&S=j)NXR(sVYWrj{)9GAo&z7!ew||m?*Ptkm$CDrNoQgT!RUVJx z>Q+BgTrr@^ZEpI?2h1$RBVeX@z(0?H;oJ>SIQf7oEKc`-h!8Mr*Tk#TtXI)(Xo;?n zV@V`v5sEaQ6fC)aJYxb&HFF_6#IRy22 ztLQ7*5eNDQjND9+4FwFeH}Iwpw=TKWto=A!g3(HN%oXZ5=WYy(8aRN&!Yo4hp%@b! zPu1H?zH=ZRCgmA8Io2$##<>-}C58ewUM@IxMOR1za+-@1srLfTG-Vc=mtf01T`Jh#Sfyx5q zPABFJP&c!1{>{9DZL(OGL%%u&8dVGHM-cjxQ+i-nbbMkbG|_fufM+foEH!d+yR){Y zMQib4qwR=2c@t1Z8(0SH=f!zkZgd~G(N2U(QnG=WnFq+;O){@yFpRo&!vq>Ri4jNxX92lS>hVWWFK*JS z=%VZQvv6wrGOG}H9?DovT-GcrYd+~VF5g};?bg~7HAH-ls(uU`N!M%&L^sa*R!=x4Orc=>{@Vo+2@EA3K zIn{aU?5VF$wT(C;b@yH-T>xbTh|)Yu?^mW%>oOexw~=2bH~@A-+LCO#z{cq-%4``ne4zTAfg_Dm#B z@`U16Dbtw*l;+I>_Xwb8+QyN!X1Tu~{KNb6X3JOmLFfH*!>z&D8-gqTWFaGza40FdE%jD; z$k#Zm+fL(zntEzEi?08gTq0q=k=D&Z{R3Z*z;{*siYg zvL=teuTmBBtn_vLfR{tO!Eg38p{={^uW0Lb;2gZ8fW@Is^>g%{_w}^_V8{`}!%!1* z9>KrjLLW!pJ~Oy}28GD|?ZOl2-FvD?@hTPphMFEjhPUC`(PXA-sMSj!LojMPJ{XZ)%bb8cNEqL7Hopy}XW~5Q1Vp3r zIC6-DM-7@i^am#}X&-Lf(!zR$z|W1^j=>H_hGv}FR`m!#F!NVHhW4jB|mPo=?*#4};!~q$FMr4r&r<#bdTQ=p4}V9{Lrox4GIOw>gP1 zC!R1=4g*_?t*12Z#oZ-gAnvMSVv=6#{Rg^{quC&-7C6GV2{7a2gM$dHpE(o%QX~ zn!ybhbw`n4DbYI2iz5krN&^yoT1Q16VVHau0r0TBIwQ>X(trJ@#s-t2H#Yp$O9{Ty zlB0wDO(REf=57{TJ8|m*`-4QHr}b$yG+-UaHq7w1+fFaTpm59j z9QqFc(~nBSqN#KwG4Rh9{;R?Q3hWXdQ8NRG)9(o!|>K~$S8^7tK8l4)p;9C{&^3OdpO5EytDw9w;JTDx$DP~qi3SQ#YtT6 znJFvwm-eSg(*S`fM2?!!zpU>D56kh1zL-*{$DSE=OZS(iWk+vfKo%hD5U6Sn-v7+r zzYaDsywkuciz_Kg>8v=IRVpt8F5`H)nHk^O1Q5yCjGJl;-oj;6+^!S;OfZ$3|AMxI zrxF|#_MK(X%T9Ci?3Fkz+DG}Nrgsd9av`<9yhM8}w=_IjVvy40m0UkdkvH+G^bpD| z438hOBp4-!Z^6>p9KQjZlPu)-{KLV;BQI12%dM4e`j32OT;dLS2I@#g*bSWgW8TW7 zW4Flm8S}d_T`5Ks+5F(HP4EQX8)m8k->plUEr%>W3R&H10p_b3s!bdbcHq?}IT>?V zv|PKH@by?t4Bq$7d^~t=m~Jh@T@w*M=QHH8$!iN92iV5G;Qp#n>IO^I(AGx(RbIlY z%3Ng&rzT?+q|5>)Gign%xmH#(A?Cs2e#8PkXVhd0l>|cdS4hjlAtuF*vrvkG|6Q>M z6eq7ZIXT4NEp_`j(#L$R@Oi=XsM&`-sw0E36*$*}!TrHs8rFgmSQ>X+-B?17=AQ_6 znu7~1^X2lGDmPug{Yk-{akwcKxPJrM(;4r=S2q`Fpzwe%$ym=K=@_`yU?V4EWJvH{ zvr^6}^ZDT2@W3ncIeFEuOIbL{TfatrX)Y^iKHMK}3}FQSk`l?3wuxgb1|s=&@98OS zp0o^&<2P&C3|$XP6|O*hlwS!NZEW~!fgHU~qji&e<1kDua$E{-w#Uh2rNRRKukhqj z_}bF~Y7RGCn?42;{3!?9%Nh?~;Xnt*3Bd$z4All&0VVN4E0HqhP38^4~L7#Bn}Gc=BZw#QHdH zsZqImgNtvE%PLcMb)=>{nA4}!SU^Ey{u+x?%`5kCs8R0W;p(X7rK;w|sh~whqZUc! zWHonvPDA}@)FLN_YLQ^+&QfwBn#;afg7;phJQ^9&kerZn3!B=C2TSjWE4;GU7zh2f z6epgP1#zYHj#y_A+B>1nLW~Cv;@Uar@|&RKB}V0*cyNU+4m}m_=a#_e0SR(HYf^2G zD-IpNl%o{K&xsE}9LK!_14=&*DDQ#F6H^lO&Kw+2maqXO<$H+@0}9Z4BU82;c_u+gM&<|J%{lJor4=Acj2r83ASX~z;=#>@z;jB?g=s6AN)`C) z7bF|0xBvtHlo8RHAUzt`4mKoe&{M|s3y?z^feRWH7pC09>4riK>fy;xIpt9fDkMKe z#UL~Wnc0xw%)5C704fncspNIMYBkOr(H{n`MCPoY)=)pfAdO(G2U7D*nqvr)#?v-8 zm7>uAAQ^)Un)VplT*0@RbOvQc(V2^BcYz`c91%w->B{1fDDpCSF%|rj9J=?QsZH|pop)F(qpz|3ViFzlwg z>3d=H9k%2sTg+_mV4L|4qeJ&gEV-fs*Ld+TaP%b zM$LExqG-m#z~%kl0NCQCzj#se=e%rHdZ=&AHiUe@j?wIRalkF!-!UE9~Ce~nwRAzojuv7?41F{H@$EpTpRk5aDl=o&4NLw_Y|%v+(73+iGa~8 zI_ z-kob~N9^U+U?2xD5S|IUNs2lnB<6&l^RVJYhz+J!GL zYOw-rAtg|R^m18*?F*9eAd%89@dPbwUnBUIKg11PBM57?E!1!&9oI$zSS$ge$eRic zVpg+zcGJ@CriyRzrUE(~mA_p5q)6#5(hjnJO%xs~v}h?JuLLl@ts( zzr^#$XweMqr$%D>X?P_nLnJ!EZ}ezD;Mxy?33A#Ju0J_g(Ou~`27?Gw=~nk*v-I5B zETR@5umUpp4MEmgw-<3F0c;d80Qt1Q9wgjNc)lIWOoGTrrm%f)5hE8em#`xX&w)FD z?KcRGxZ87}Ou%7Cp{=g&j9~?z#PjP8Af!>)aROe{0G6+^a@jm@kx}G|lB6lZKAY{x zYPlas9WE)688S)AUTmM%%{t(HDodl&@ihF^4n`y);KO=Yp-DQP;!XaHWp0Iir?I@D zzz&8-A;V)9JAuPuXY~n>Ujc`@^G1wK&ukv8!8F}3%qE#isZiLNX+r)&764WT{(Kvm zRg*&25x{W)T!_)Rs{*(y*Mz?dqHz)lVzT@)R%OU%yb%nP!_`q?S#KxL7BP(Q+B|B0 z!_{=jqT$zS$Z%?1+hoxnwjE$SJ=$PccZjrUrR29^ugt_=@n|WUlnnO90){U_7+KRC zEy9jDEDbBoXDxAnOgxS|$vbh|k0ux(@p-&QLYr*j+QnSN~F-v4>~{+IE)?R&tOVC^C8 zn}_Yg-#TOs+KeFIZ3xO~`4v^I#kLe_ZGlD@_u_-;J=T;=tqrDDBa;{H3N0|TYAx6U zYH!`!7~1Dsia+rd?23ZC27_2`ewdvT=_X;f*N0oJBy* zVCL@=V9{*ai-3+#w;qd{wYeva^C4x$(AH}L&1jI0$F0qSI)a!Lf9^otiy-Q(fnu{X zV#+ULQ3fsV@bcvYm}ZdH$OjmVc#A)|*3KkUveGg8602Qw(mouCqVsg=or;sU(c5(< zV*1`G3Ysi66pm-Ua~}Qh4a}c|`9Fn6IhQTcn+ZcCpD|J0a&~@GE%p7H?QpaBC=S>3 z4Yq=ei*6I>Z?(Mii8lrUc6H|!2J*a4X!~FBcRzCIhp!Jzi!x)P_VvWHs2?XK9har?^pDrU z%+X+?$##ifhio*Lg`9U$@AHUMcd$&gSMy>{x!uKYOc&m;^pvJg%&$rpZ-(g z^n?)VA;`-$O^P02OQLQ=9ttxuqt&-3zH1W=bbB>9V@0Kn{#}B;ncZ!G#0S`oKP@%5kM56;B*fOFnr(5jXm zz~6g{88^%cZcgb}>a9@56s-&^E91h!!7{9N$qHq-%;ZFVg%$Ucb4`<@T+@mawXi0J z!TQ~}cmH++(=?gh4`q_W{+pL6Ml5$M28ZBw>&&6G4Eu!{7Y37#k}1Ef@Na)J7;rn{CSdcy zA4std*<$U*HSkOJiH+z16?!}vJMUZdwNv{cL64f%rSJYyiV-B5H6$=3l8i~X4-R^6 z%TzpF!(~}im@V>7$1$l#J_4*^%@3D5T-JJ{Q*l{$HM01TB%$$DWXu+!@g-yt3@E{s zDfTl+xe`xO@KCZffqp?LIAHTEu`fl0&@W>PG$1ZLjGT z8t39>236|Tmag&FC33Z$FkhhFDClDGEE)g{vHOr51_#`6Oxyb1>oQ~2;!XCN9HEhI zjjhNLp89u;RgiK(a)##Y+=<_hZE@+#F^IlBSemAzKZc$Fbw|2Eiv5ukL|<;@qvPH5 z?k}!y0qMeseE^)#LRtpvNc7=Uj|YD}it~7)DHlAiz=$_ ztY%%)t<-d(PGr4fRb2eAu3|rJmCM%qF5tdn^Z}<}AG>me#XHx@!86I6L~3Q#5P=o9}INo7=tFsjV{ z{5w>M;cxT;;Oo#>PZbS4t({FP#j05Eb`P(Sv-L!$195^bXhpWW3W+0Kpux$whg6Ze z0PEgQC-h8%>@*nF>H^Hnc2_nAseZ|lT7wU@ zW1Kcx5cI}h3>*MCc<9TNUtoyR40u$fJciA%+UN{CGV7h(?~9VCtQ-{dT}>c*nzUbm zX3oL5BU?|Im&v+U&59+&yZ`~Cv#*Q)YSQArniBGh#~q;jMhv?AQiCqP*}xR3j484Q z|LBMjjP=(VhFw#ExzQ@!-7|6;q9gAZL8=>8ec zd{6gJeFnQfk9Gfd`hESby@8_}{tFLc;ptD<-Aq@ryM@-WyOny` zJ)17U`<-+ld(EZu*gcQl#qKlcZR|di-pKB==wx=EO~=BhRUBDin z!NPIg%IaDaTmK2HsKNo~UhYe-l%#D`X2PGdq&+*Yo^RE5+hSUZ$r6v=pl&d4-;` zUQ5Y#B(Ky{9@J8D9LcNnlzX+5Tt~7`Pbt>0$#WE}(Xq)NiVavBEFKo)TS>jy(YJ8| z-SrAH8)EGBhWp;|YO>jKc4@yyzti7GQRK1f*3N6Au);|zN|#mru` zdDFqjT>$Nx1nr8B8+hgK9b)q)HDyDS3A0xPFhBinG&z@bZo)vmN%X!wgLHU2u{BB~ z`msU$W)8=1@4qMTo0TB?I3W5d78qVOr)7}Pp->p#8C_a0&)n?)pP zj#0W5hbA^J=b?ij)4AS5Xh@1LttRjR%YP42Te19iq5K1KI4Rnczz5H)K=%s| z)~n}9n4B`TI{HCkV#4ESQEt1!ehGDQ;+IgzRC(p|g8Y@>=&!Al_}aRf&Y9x}enK=W z+?gbQZj!I?>u$dMvYPko{XcUWc9O`S@vGd)tuxE*CevXxFW}qhG^lyORrnq56kd03 zg3C+rcNqSrA$e1q%ZyD6jm>3AP;S%0B)QcjM_B2{2TBLN9Drp|M!7XfjwB(}zYXG` z!2shTh7luvZ5mp}J#Z_8zgh4%1O9U1FB|?W@W=lQe|7!I4yE*|4!BdeQ@CG%`vtgn z!MzLa-Ei-QdkpR|xX0lh4|3?=7))KJm|huCvC(VbZxj6Oz!VqI@kq-~#Bk`d)_Oe! z<#H%RfE)?fpm=*6m$vmz$Q$g0jBA%)jzhg&Ph-8k9|NUde44d4(I;25KFP;E>HZn( z69nGL!DR;gx#6$5%rxy((?XMckx}m(M!i1{DH?IpVFvr^B0#cUXc_{!a|j#&4ffeZ zll%>$EIf{z2!@ya65L*ezt`dKE%T~GUB06r0@QjqfBLgx}Ng22fi~N4?gEpa5+h343w%o#3*FK_jZ7N+@g6K20EiSsTH4O>2m7tw-hy1*}Q6`p!k7JB_o>lb=S@8FTs zHo~aaamlx8+(winM7qoonnq&`26>0VhuUL|f*|lhjLjQ0u52~sRs=|+GBSmAd!;*Q zu9Tf*BejLD`Z0wEiaPKn*NgILN4oOPJ{1@pSBVM?WV53bc-`;KJy0ig>?QPn4YLtH z21-ZrY$l#h%bt%)o_{2s&&i$}_u$Rdm&s8vHY)!`DSMl+ocO;8{;%L4pj_@x9*5D` zMK<9Nd+=H~e(~+Xul5kFQ{6yrO|25yIKoAY@>si<6h?TgmzNYOY~mU43hp#@D7erH zs}}X4dXryyTFN)UCgkjqcH$YN^MjD6)fDR8(=SSSYqd(cC|#o1U*VY=+E4d5Rj zLcoo1i3q^k8^^YdcU@C%k8oX6aZ#_}GnC#qV!0#9#~5MQ%l$V*UwFy4_bMG1W^h&{ zzf5iqXW`EBr@o!#mY4ePEU)#a^rrh%0Vfrzh2_8Yoe+*97j^K2FdNR7^|<~PimL5Y zJm=qI#^ddHURIm#KSrj$h|DtIAY6Ni=)=KN2HYjcchaxOomHjqgxkLxJ@5&M&Y+z@ zmnt$?O<|ajh@vzh>>$xFqA469M1XUp6a~0eX=m&|mO}wF} z&?Y_ABRy+@k6g@q)b~Xmw&;83qL7lFnTVz+gZodH$SWB5?8WyyEK#TuZq$gPgr8x~ zEhoq4HP4fmdxebKC@RZ$X?);$|C!_}0@IUtNcepfIq$FKZE;I^TkKLH3Rl4VNAGRz04MN>#fzL@ZxoTd^{0<%9dxl-TUYS12pfpfvkW zm1HXxZwBF2Eu}j_-^EQ8PQ2LvjK|6s$uw}5cT)ip*tQmwqL)X(0$3iU+|~qtV|Uc^ z*30QNQ@cw>BV5(e~b-|c)LgZxN2IS3yn=R)$gjDZ2CunE7t zAzyAf+W+@2;8(Uq4$iNre=!KZ67zFH8%O;@;#Z!7&z*7bXBn6+KmURJ3g-Tg`4s}g zp!|xQ$9GVs0Hzg83z%jwhrrZ=+4J*%6~BUo@gi1wESNYj^MCPwgI{_1B|pDndudR9 z<@H~XKEcR4{|N3DFw{%`fM0p}r60<#kbM6`{ED3SGO$*G$pupch6S??OeL6~zVxr+ zSEM$28~*MAa|q0Zm;OckieEUEnIU|jmR~5by+SyGUZBo8ohbEFaN(|AB{#OykfvZq z0BP|Qo=;Nn-GW;!J%+}P%@E4f(iXGkBH3aNlQ<4(DGsLVmMYd0GW>Z1R^qp zgU{mqGa!=)#U^QHKq~9hvjK+!JkLrjhvV764fG%1%yHyCOBjZGpY6{uoP6d79}0+7 z_va;sAcb&5)&}IIg>Rm@)h7A6XJvkYG)rGY^9v*1aIxdx(6FOXv^@NIQLM;|=pt$x zR=R`nne2t?)dQ|Y6QT_W*W}r6qdf6`R|-4cNcD0-!e_8ly@DTP0}0k0Se!~TJl1wR zW@gnaf&Pe+`eVH-1rsZ|bA8(s$K52ujEuq{JP(Ga!ZfxFF~pz&_V@yx? z$`1zwtba>9c=`I!nA)!9Nr(6Ylc{!5)E{z$@pUVo<|(&2wtgCNmsOOv&Hv&_W>xLB zmC_U_TS7)S8QQ+%A~cL~*L)bqvt`9!s4Sct?-D3hi|-M0!_x~pyqfgFzk5~bg`Hw_ z3^ExZ?y_wjBrv4&bvWa%c;-t7R72!P z0UJ6EFrjAS+3*CP4zh9aM_8?y)tCo?!W9t=?dy#eHupiX1Dx&{Nnt~uY#lL0jF9t` zgejP(0x*T|^8RgdBYn>WeN`O-$HfY_Jw;C8YM$zUyMO1Cetu5L%a6xYBc6(fh`tlK zd{@8c4`pRMiRY77Yq&YUbFFw@(#?S1qx+s7EZHk-L&HNk;zErNsU(o&0+-lvBy;JM zuZ%}MX-N?_=^-0LJKiUe8$1tiKq)cLi2?87++0;pngY|xFaN~kzk$`reNsL$E#k9G z;lfuxmG0t_t3!BH5B#2gPU2nNBeX3UTC+$^~G7JgXzp zrHW&w?3i?^Cawm9_ffvQh38tKfM|rio+S990iwBvi18Ajb-lsRnyo>qcHp*M<(EWm z>!P-JQF`Z7c;YG1rxcyd_C$Qp?_EuPXvKa~sr_Xm2fVH6sx?3&?_cV^404xWlE%Vu z*To5S7kwSpkfu>9GKGd4QnRYRZ}FJC6Yp7v3z^S~eGd#o^eqL_%dPopEgp{0pe{`@ zx<@+MMIPY_!(d@8K2auZlPWd`Y?ICkJdzIBFUDU^h zsYOiJB24*!C}dfv@7n%gMK9UAPWPnEk@v1=2;_~y13*wD$$Qt+GJ(;&07-F6S|gs~ zQHKZcv~75>)h2AgqyG>+@JtGxX)C{!Tz-jd@u=tEafC}k??Xgtkbz2z1G58Qcko$9 z^`Eliu%NN&7z0maNvj_OuXSg&0*^HgKaLrm&ycXpqf3IpEY`xG3?2Mg zoghErbU!}gl!=cxtpTr+JOlhGw!xoGYvIrKQV3X&4?C6M!%my=VW%CX9ifAJE`sevW_yp(S_`^^WwE92&#GeR1!`;inqI}GCafjO~=&!KD zQurKKzXOwKV8`lhl>6!B2dbm4b=|3i?od7p9;KV^ZE zgdJ_qBVNEgOZEui?UOm}rZ}N^K=RI-o09Vl-nB9IIsnuC+ZK$8Mk1E{78dM@iPN(E#q7L@t z**frG(}e~V5eeNZ#i;6J4MbJfJOnIz579>Lz1=2c>>>DP(rWWhS|~n^c4p zx^d|W5ng;EVCjlMv>JgLq<>UOG;EN!m-L^MErXfrlki313WDn69{VK{-2#gDBKZoR zc4=3uf@t@sI7;Mw>X-s6D#<>z8-%1Ar6W+vHkufZf*lqm71G{v{!%qpjR1?D99#+dvay2Mi zjf#0+I)dkYzFDdKVqPP->cQ18uNC<6HU)Pgv1wi_8;Y8JM2E8LEMNDapSMROB;%ck z5^Pp2lIYy<{;X8ndxXG5oHXi3{gKKmj}3y8s!5Uv_M;4flJv(mjTSCE)<1Esl-PR@ zZ|cC~&QSo$5_xt5U5GfvI|teo{lIAQ6-d#PMj&4&{9H}ce(UQw?EsWUyJ~v}J?!nn z9yfeEl}}MMV5dwz1*bPElM8_nY?oGb9NLAVEh9rbg`1@f>@w6k?x~iR^B(X>g)pw$ zRw#;dF&2!RIUZohZNf$Q`StRl$y^Uh)UFwE+XYH+HL9@??iCqBB3;&r5p)>A+fKF$ zEV0_~Lnv+MLg8E8b#cFzO7FTTt6|EGjZ#Uji>gx(LXeNo@`jk5NfaAwsA}T=Ziay! zU&r`YovDH39qub8iu^hL3Q*B7wUblU;$6+8Ld70D#0c}v26Rt!tN>d;q`$Gau zFk#;NA6iCla%j0+yL}2YGG8y0NC*bj;28ax?c-tcFBKj{ez|$2dwGm^mB=kQGPyy2i2E3riR5xTOgIG9Y*@!aQLxyYp{riN za+hoIHSiT}9Au_%rk~iTMCFd!?dn36w@sow$NJu(Vrvl0JAepPI$H6mDUa!I?3o&y zqVgo$ToXP|<515#yy+c-0UD7LydNZ&$81l+*!Vh=p>3E_dY}qZeIun3fNH1-g@l@U zhv~;ysHK$nqW73|U=xW)Z8~uK0L906CHl1fQ@T=wG58@;wpHi18>F+!SMjX!EKk}P zjlOa7aA6AS7CwMmoPB3CU*9F|WCqf-tRq2PO>OA|%_5}gu&ymX?A^ZxJ68BVz>;wId1W&vP1WAqu5%0n?+$4Knx$H>v zI!yqQPV&Z*a|bP%!b{EMV05eSEUIZUwXAIW6A{$`CtMzQESmJYbS!!-PTtU~giQdp z0k}!vl=R$K)`m6nnD8+4g$z7gIt?SWxDLeN>sC*beL##50}(Ef2oXdHFGdhichj${ zPh#S5 za_W>{4p>e{&YnsKPsyp%wPe>a=KD^a2B7Ey$bw&vDEib*D7w*)qBm9a$FjZ7K~VJ5 z15otGfTEKJB(9SZd+#F;nrmTgh(_$YRK}t+iQaUr_a3nn7SVR}Ug|^CKp0*lNEUJQ z7~xZ=Z{z!iqHCG_@=nB84m3hCdGR6w9|YioYt$k0Q`m8pwd^P#1$CBhh!4U9b=}IY z7Nn*6z5$;SG@r@iW3b0zoGwfbVMASYYJ)48;<_>ng=(9y_fbh-J)mb)d|MbQ6ar57 z4zUS2cxw_h%A;0wRKL!7CkFGTo`8ikN;ibf^c|-kp3|qpCIlL)}dzAZvA&Fw=GQ`&o1`N+9%EtilE_ELLuB3qFM-A!W}~hP=28r zKie01X6;EH&$Sb+kN1=n7OFF4UA>=HNJL~kyWG2&!1)=4dQi)iU7vauDfNx?<8vSl zQR7OxPyk~qRLf~!^QEOLhvCYyyvGx<$2}BPc33s;QKXXCMq7BUr%;h09C{NF^GbtF zXm&~(wxGFJ0p0qx?4K!I`LjI6*huNj=kwbnlGfVIH^w)pOqZ);3|(i(GS8A&=grf$%)QA&p>T_z)~+q>sxS(!bD~@953+-O&U3 z*t0-QQG&dHggc_iP()ku3s`+KUbG2-AO&FeuJ;ENZY+{$lhi$##Et!0M-RIhj z@D@JoL)44P*YRD6M^x>qYpyFIsz^Pa*x=f)uDFO=Qn|5{iL%sFXel^N#TUq0a0gbe zc@W?6ThKGFo}B}z=$m<;v$t1XV!y^@tyb=#oaWpYqlS{Smf>SHSE!nH0kwOJA~77)}%3 zvajRE!jgeoONG5F+@{O!<(KsBfR1w>k>%fy1n!ho1Hp==U)`qB&n8=Cw+qRSpcGx0 z&<6|=bpQHczq*MfLGtEZ=1r3P8b*z}B%*|?50hNZKI|*bTUc?Ou=X~0R=fTbU8#Xw zI_s2lm8h21rMWeRSY>TMs#mgO8Ey!_zpMET1>pV9dfm&l_%0YsDO8>; z1#lCEA4z3xeAtHvrK$1vt(MVnVQu%M1*^;(jWrmG%mWyHR-Ud}9A5vo#t1ZDn-pTr`4lbAkyj-X#6k*wh zK598ls1xF?hWM!{>%v>|i*TPUnh%j`Z@@Y#y+Jh!fSs?8H+5hKKpp8StRc1`N*V5} z39oG05}ewGFHry^K<{b-+NE2)V>lG<7;+!IE8O7R+d3Xkn+P?->0O8EeQx{&E-X@L z-RxT%ybl|JpHZt?yaxY(iA@E%yLw5`w$Pg4JYBtP$mCSib?WP zYcMj-ph($uEs~}4+~KLI1_N|{+aJl;X?NB2>g&qJdl)6jHPTfJG`_YljO^LtFd}-L zOj@NpP?UJdZm@y!AQ>pjeFG&f&sE+X#{RxAaz&n7g@dIV2Mao`fnzcs(vTKBCCqy# z4xSJxaupdpz1YStoFr{5`D>(1QvE{+mA`spc-q4bQFjL85E`QNYVvrB#EK_(JKM

      @OM^+&dczt`cvg_A&JsPQR+~Uak~ge;RMAO? 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 z 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%0DdU1hcX}Jk^jOT9RY|O!H=L4hlRoV~ItYMe} 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 z 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

      E^SE{S^-Z0s9^%$5KNBA7~QH(IrQam-J6RzV-@~ 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�h7ez)>he4o#>|aanM2jWGt{6W0fG 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 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/licenses/LICENSE-pygresql.txt b/licenses/LICENSE-pygresql.txt deleted file mode 100644 index 4ff09c11fe2..00000000000 --- a/licenses/LICENSE-pygresql.txt +++ /dev/null @@ -1,30 +0,0 @@ -Written by D'Arcy J.M. Cain (darcy@PyGreSQL.org) - -Based heavily on code written by Pascal Andre (andre@chimay.via.ecp.fr) - -Copyright (c) 1995, Pascal Andre - -Further modifications copyright (c) 1997-2008 by D'Arcy J.M. Cain - -Further modifications copyright (c) 2009-2020 by the PyGreSQL Development Team - -PyGreSQL is released under the PostgreSQL License, a liberal Open Source -license, similar to the BSD or MIT licenses: - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose, without fee, and without a written agreement -is hereby granted, provided that the above copyright notice and this -paragraph and the following two paragraphs appear in all copies. In -this license the term "AUTHORS" refers to anyone who has contributed code -to PyGreSQL. - -IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, -SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF -AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE -AUTHORS HAVE NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, -ENHANCEMENTS, OR MODIFICATIONS. diff --git a/licenses/LICENSE-pyyaml.txt b/licenses/LICENSE-pyyaml.txt deleted file mode 100644 index 2f1b8e15e56..00000000000 --- a/licenses/LICENSE-pyyaml.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2017-2021 Ingy dΓΆt Net -Copyright (c) 2006-2016 Kirill Simonov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/licenses/LICENSE-setuptools.txt b/licenses/LICENSE-setuptools.txt deleted file mode 100644 index 1bb5a44356f..00000000000 --- a/licenses/LICENSE-setuptools.txt +++ /dev/null @@ -1,17 +0,0 @@ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/python-dependencies.txt b/python-dependencies.txt index 9e63afef528..7ca6d4dcf65 100644 --- a/python-dependencies.txt +++ b/python-dependencies.txt @@ -1,3 +1,3 @@ psutil==5.7.0 pygresql==5.2 -pyyaml==5.3.1 +pyyaml==5.4.1 From 5cd937979c5b76f1a26e456c3406e84629530571 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Tue, 29 Jul 2025 17:21:42 +0800 Subject: [PATCH 008/260] License: add & clean up license headers and files This commit performs a comprehensive license compliance cleanup to align with release requirements, which are pointed out by Incubator PMC review. The main changes include: 1. Add License Headers: Added the standard Apache License Version 2.0 header to numerous source files that were missing it. This covers multiple file types, including YAML, Markdown, SQL, C/C++, Python, and shell scripts. These files are originally created by the cloudberry community. 2. Simplify LICENSE and NOTICE: - Restructured the root LICENSE file for better clarity. - Cleaned up the NOTICE file by removing redundant information which have been listed in the LICENSE. 3. Remove the unused deployment docs from the `deploy/build`, which can help us manage the file licenses. 4. Update RAT Configuration: Updated `pom.xml` to reflect the changes of the file license headers and attribution. See: https://github.com/apache/cloudberry/issues/1236 --- .../ideas-feature-requests.yml | 20 ++ .github/DISCUSSION_TEMPLATE/proposal.yml | 20 ++ .github/ISSUE_TEMPLATE/bug-report.yml | 20 ++ .github/ISSUE_TEMPLATE/config.yml | 22 +- CODE_OF_CONDUCT.md | 19 ++ CONTRIBUTING.md | 19 ++ LICENSE | 78 +++--- NOTICE | 17 +- README.apache.md | 19 ++ README.md | 19 ++ SECURITY.md | 19 ++ contrib/pax_storage/CMakeLists.txt | 16 ++ contrib/pax_storage/FindDependencies.cmake | 16 ++ contrib/pax_storage/Makefile | 16 ++ contrib/pax_storage/doc/README.catalog.md | 19 ++ contrib/pax_storage/doc/README.clustering.md | 19 ++ contrib/pax_storage/doc/README.dev.md | 19 ++ contrib/pax_storage/doc/README.filter.md | 19 ++ contrib/pax_storage/doc/README.format.md | 19 ++ contrib/pax_storage/doc/README.md | 19 ++ contrib/pax_storage/doc/README.toast.md | 19 ++ contrib/pax_storage/doc/performance.md | 19 +- contrib/pax_storage/init_file | 16 ++ .../src/api/python3/CMakeLists.txt | 17 ++ .../src/api/python3/paxfile_type.cc | 22 ++ .../src/api/python3/paxfilereader_type.cc | 22 ++ .../pax_storage/src/api/python3/paxpy_comm.h | 22 ++ .../src/api/python3/paxpy_modules.cc | 22 ++ .../pax_storage/src/api/python3/paxpy_types.h | 22 ++ .../src/api/python3/paxtype_cast.cc | 22 ++ .../src/api/python3/setup-debug.py | 19 ++ contrib/pax_storage/src/api/python3/setup.py | 19 ++ .../src/api/python3/test/paxpy_test.py | 17 ++ contrib/pax_storage/src/cpp/CMakeLists.txt | 17 ++ contrib/pax_storage/src/cpp/cmake/pax.cmake | 16 ++ .../src/cpp/cmake/pax_format.cmake | 16 ++ .../src/cpp/storage/README_CTID_in_pax.md | 19 ++ .../storage/proto/micro_partition_stats.proto | 22 ++ .../src/cpp/storage/proto/pax.proto | 23 +- contrib/pax_storage/tools/gen_sql.c | 37 ++- contrib/pgcrypto/sm4.h | 26 ++ deploy/README.md | 19 ++ deploy/build/README.CentOS.bash | 64 ----- deploy/build/README.Linux.md | 242 ------------------ deploy/build/README.Rhel-Rocky.bash | 101 -------- deploy/build/README.Ubuntu.bash | 73 ------ deploy/build/README.macOS.bash | 114 --------- deploy/build/README.macOS.md | 132 ---------- deploy/build/README.md | 116 --------- gpAux/gpdemo/gpdemo-defaults.sh | 16 ++ gpMgmt/bin/gpdemo | 16 ++ gpMgmt/bin/gpshrink | 16 +- pom.xml | 181 ++++--------- src/common/sm3.c | 27 +- src/include/crypto/bufenc.h | 19 +- 55 files changed, 963 insertions(+), 1041 deletions(-) delete mode 100755 deploy/build/README.CentOS.bash delete mode 100644 deploy/build/README.Linux.md delete mode 100755 deploy/build/README.Rhel-Rocky.bash delete mode 100755 deploy/build/README.Ubuntu.bash delete mode 100755 deploy/build/README.macOS.bash delete mode 100644 deploy/build/README.macOS.md delete mode 100644 deploy/build/README.md diff --git a/.github/DISCUSSION_TEMPLATE/ideas-feature-requests.yml b/.github/DISCUSSION_TEMPLATE/ideas-feature-requests.yml index 960289119cc..972ba48d79c 100644 --- a/.github/DISCUSSION_TEMPLATE/ideas-feature-requests.yml +++ b/.github/DISCUSSION_TEMPLATE/ideas-feature-requests.yml @@ -1,3 +1,23 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + title: "[Ideas] " labels: ["type: Enhancement"] body: diff --git a/.github/DISCUSSION_TEMPLATE/proposal.yml b/.github/DISCUSSION_TEMPLATE/proposal.yml index 25cf78dbb0f..2048cb07191 100644 --- a/.github/DISCUSSION_TEMPLATE/proposal.yml +++ b/.github/DISCUSSION_TEMPLATE/proposal.yml @@ -1,3 +1,23 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + title: "[Proposal] " labels: ["type: Proposal"] body: diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 7b310ad360e..bf9ef79c12d 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -1,3 +1,23 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + name: "\U0001F41B Bug Report" description: Problems and issues with code in Apache Cloudberry core. title: "[Bug] " diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 26171e9e9b8..05a81306669 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,24 @@ -blank_issues_enabled: false +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +blank_issues_enabled: true contact_links: - name: πŸ™πŸ» Q&A url: https://github.com/apache/cloudberry/discussions/categories/q-a diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index fba27afa81c..8c56ac85eb5 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,3 +1,22 @@ + + # Code of Conduct Apache Cloudberry (Incubating) follows the ASF [Code of diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6c22b84a0ff..6fed70b4a9a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,22 @@ + + Apache Cloudberry (Incubating) welcomes contributions from anyone, new and experienced! We appreciate your interest in contributing. This guide will help you get started with the contribution. diff --git a/LICENSE b/LICENSE index 8d457fd6652..603400aa4cd 100644 --- a/LICENSE +++ b/LICENSE @@ -207,25 +207,17 @@ This product includes software from PostgreSQL, under the PostgreSQL License: The PostgreSQL software includes: ----------------------------- - Apache License - Version 2.0 - contrib/pax_storage/src/cpp/contrib/googlebench - see licenses/LICENSE-googlebench.txt - ---------------------------- BSD License src/bin/pg_controldata/pg_controldata.c copyright (c) Oliver Elphick , 2001 - - ---------------------------- BSD-4-Clause (University of California-Specific) src/include/port/win32_msvc/glob.h src/port/glob.c - see licenses/LICENSE-glob.txt ---------------------------- @@ -246,24 +238,6 @@ The PostgreSQL software includes: src/backend/libpq/sha2.h see licenses/LICENSE-bsd3-sha2.txt - contrib/pax_storage/src/cpp/contrib/googletest - see licenses/LICENSE-googletest.txt - - gpcontrib/gpcloud/test/googletest - see licenses/LICENSE-googletest.txt - ----------------------------- - MIT LICENSE - - dependencies/yyjson - see licenses/LICENSE-yyjson.txt - - contrib/pax_storage/src/cpp/contrib/cpp-stub - see licenses/LICENSE-cpp-stub.txt - - contrib/pax_storage/src/cpp/contrib/tabulate - see licenses/LICENSE-tabulate.txt - ---------------------------- Internet Systems Consortium/Internet Software Consortium (ISC) LICENSE @@ -321,8 +295,7 @@ Copyright (c) 2004-2020 VMware, Inc. or its affiliates. All Rights Reserved. All Rights Reserved. Greenplum Database is licensed under the Apache License Version 2.0 -(see LICENSE & NOTICE) and is based on the PostgreSQL Database -Management System. +(see LICENSE) and is based on the PostgreSQL Database Management System. The Greenplum Database software includes: @@ -338,14 +311,47 @@ The Greenplum Database software includes: gpcontrib/orafce/* see licenses/LICENSE-orafce.txt + ---------------------------- + BSD 3 Clause License + + gpcontrib/gpcloud/test/googletest + see licenses/LICENSE-googletest.txt + ================================================================================ -This product includes code from pg_cron under PostgreSQL license: +Apache Cloudberry includes codes from - /src/include/task/pg_cron.h - /src/include/task/task_states.h - /src/include/task/job_metadata.h - /src/backend/task/task_states.c - /src/backend/task/job_metadata.c - /src/backend/task/pg_cron.c +---------------------------- + pg_cron under PostgreSQL license: - see licenses/LICENSE-citusdata.txt + /src/include/task/pg_cron.h + /src/include/task/task_states.h + /src/include/task/job_metadata.h + /src/backend/task/task_states.c + /src/backend/task/job_metadata.c + /src/backend/task/pg_cron.c + + see licenses/LICENSE-citusdata.txt + +---------------------------- + Apache License - Version 2.0 + + contrib/pax_storage/src/cpp/contrib/googlebench + see licenses/LICENSE-googlebench.txt + +---------------------------- + MIT LICENSE + + dependencies/yyjson + see licenses/LICENSE-yyjson.txt + + contrib/pax_storage/src/cpp/cpp-stub + see licenses/LICENSE-cpp-stub.txt + + contrib/pax_storage/src/cpp/contrib/tabulate + see licenses/LICENSE-tabulate.txt + + ---------------------------- + BSD 3 Clause License + + contrib/pax_storage/src/cpp/contrib/googletest + see licenses/LICENSE-googletest.txt diff --git a/NOTICE b/NOTICE index 9062c71b549..8003e980d0d 100644 --- a/NOTICE +++ b/NOTICE @@ -2,19 +2,4 @@ Apache Cloudberry (Incubating) Copyright 2024-2025 The Apache Software Foundation This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -This product contains significant parts that were originally based on software -from VMware, Inc. or its affiliates. (Greenplum Database -). -Copyright (c) 2004-2020 VMware, Inc. or its affiliates. -License under the Apache License 2.0. - -This product contains significant parts that were orginally based on software -from PostgreSQL Global Development Group (PostgreSQL 14.4 -). -PostgreSQL Database Management System -(formerly known as Postgres, then as Postgres95) -Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group -Portions Copyright (c) 1994, The Regents of the University of California -License under the PostgreSQL License. \ No newline at end of file +The Apache Software Foundation (http://www.apache.org/). \ No newline at end of file diff --git a/README.apache.md b/README.apache.md index 08a746bec0a..18772c9dbae 100644 --- a/README.apache.md +++ b/README.apache.md @@ -1,3 +1,22 @@ + + # Apache Cloudberry (Incubating) License Audit Notes This file documents licensing clarifications and exceptions as part of ASF release readiness for Apache Cloudberry (Incubating). diff --git a/README.md b/README.md index 3d46d155e87..25771f24a10 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,22 @@ + + # Apache Cloudberry (Incubating)

      diff --git a/SECURITY.md b/SECURITY.md index c12a9bab134..81c7936cacc 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,3 +1,22 @@ + + # Security Policy The Apache Security Team handles all security issues across Apache projects and diff --git a/contrib/pax_storage/CMakeLists.txt b/contrib/pax_storage/CMakeLists.txt index c507601bee4..f4c132c1bd7 100644 --- a/contrib/pax_storage/CMakeLists.txt +++ b/contrib/pax_storage/CMakeLists.txt @@ -1,3 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. cmake_minimum_required (VERSION 3.11.0) project(Pax) set(CMAKE_CXX_STANDARD 17) diff --git a/contrib/pax_storage/FindDependencies.cmake b/contrib/pax_storage/FindDependencies.cmake index cf9758cb5be..3189d8e6697 100644 --- a/contrib/pax_storage/FindDependencies.cmake +++ b/contrib/pax_storage/FindDependencies.cmake @@ -1,3 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. ## protobuf include(FindProtobuf) find_package(Protobuf 3.5.0 REQUIRED) diff --git a/contrib/pax_storage/Makefile b/contrib/pax_storage/Makefile index ff7042d8bd5..9f4061db9d7 100644 --- a/contrib/pax_storage/Makefile +++ b/contrib/pax_storage/Makefile @@ -1,3 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. # contrib/pax_storage/Makefile MODULE_big = pax diff --git a/contrib/pax_storage/doc/README.catalog.md b/contrib/pax_storage/doc/README.catalog.md index f23feabd604..9cf41bb9a7c 100644 --- a/contrib/pax_storage/doc/README.catalog.md +++ b/contrib/pax_storage/doc/README.catalog.md @@ -1,3 +1,22 @@ + + # PAX Catalog ## Overview diff --git a/contrib/pax_storage/doc/README.clustering.md b/contrib/pax_storage/doc/README.clustering.md index 63469b57eb9..95c6126227f 100644 --- a/contrib/pax_storage/doc/README.clustering.md +++ b/contrib/pax_storage/doc/README.clustering.md @@ -1,3 +1,22 @@ + + # PAX Clustering # Overview diff --git a/contrib/pax_storage/doc/README.dev.md b/contrib/pax_storage/doc/README.dev.md index a8aa402efbd..744578a09e0 100644 --- a/contrib/pax_storage/doc/README.dev.md +++ b/contrib/pax_storage/doc/README.dev.md @@ -1,3 +1,22 @@ + + # DEV README ## Overview diff --git a/contrib/pax_storage/doc/README.filter.md b/contrib/pax_storage/doc/README.filter.md index 5321ca050fa..bfdf923c3b8 100644 --- a/contrib/pax_storage/doc/README.filter.md +++ b/contrib/pax_storage/doc/README.filter.md @@ -1,3 +1,22 @@ + + # PAX filter ## Overview diff --git a/contrib/pax_storage/doc/README.format.md b/contrib/pax_storage/doc/README.format.md index 90f1dc42550..807d4882624 100644 --- a/contrib/pax_storage/doc/README.format.md +++ b/contrib/pax_storage/doc/README.format.md @@ -1,3 +1,22 @@ + + # PAX Storage Format # Overview diff --git a/contrib/pax_storage/doc/README.md b/contrib/pax_storage/doc/README.md index f8670073876..b4561e479e5 100644 --- a/contrib/pax_storage/doc/README.md +++ b/contrib/pax_storage/doc/README.md @@ -1,3 +1,22 @@ + + # PAX ## Overview diff --git a/contrib/pax_storage/doc/README.toast.md b/contrib/pax_storage/doc/README.toast.md index 70caddb3935..631680a7a9b 100644 --- a/contrib/pax_storage/doc/README.toast.md +++ b/contrib/pax_storage/doc/README.toast.md @@ -1,3 +1,22 @@ + + # PAX toast ## Background diff --git a/contrib/pax_storage/doc/performance.md b/contrib/pax_storage/doc/performance.md index df55aae20e4..dd99ecb832a 100644 --- a/contrib/pax_storage/doc/performance.md +++ b/contrib/pax_storage/doc/performance.md @@ -1,4 +1,21 @@ - + # PAX performance test report diff --git a/contrib/pax_storage/init_file b/contrib/pax_storage/init_file index 77411f3c711..5ae3f8edfa8 100644 --- a/contrib/pax_storage/init_file +++ b/contrib/pax_storage/init_file @@ -1,3 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. -- This file contains global patterns of messages that should be ignored or -- masked out, when comparing test results with the expected output. -- Individual tests can contain additional patterns specific to the test. diff --git a/contrib/pax_storage/src/api/python3/CMakeLists.txt b/contrib/pax_storage/src/api/python3/CMakeLists.txt index d4e49c12e79..7304263e551 100644 --- a/contrib/pax_storage/src/api/python3/CMakeLists.txt +++ b/contrib/pax_storage/src/api/python3/CMakeLists.txt @@ -1,3 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + project(paypy) cmake_minimum_required (VERSION 3.11.0) set(CMAKE_CXX_STANDARD 17) diff --git a/contrib/pax_storage/src/api/python3/paxfile_type.cc b/contrib/pax_storage/src/api/python3/paxfile_type.cc index 8db03a550f0..a1c014fdff7 100644 --- a/contrib/pax_storage/src/api/python3/paxfile_type.cc +++ b/contrib/pax_storage/src/api/python3/paxfile_type.cc @@ -1,3 +1,25 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *------------------------------------------------------------------------- + */ + #include "paxpy_types.h" static struct PyMemberDef paxfile_members[] = { diff --git a/contrib/pax_storage/src/api/python3/paxfilereader_type.cc b/contrib/pax_storage/src/api/python3/paxfilereader_type.cc index 84ded5b91de..3731ab613a5 100644 --- a/contrib/pax_storage/src/api/python3/paxfilereader_type.cc +++ b/contrib/pax_storage/src/api/python3/paxfilereader_type.cc @@ -1,3 +1,25 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *------------------------------------------------------------------------- + */ + #include "paxpy_types.h" #include "comm/fmt.h" diff --git a/contrib/pax_storage/src/api/python3/paxpy_comm.h b/contrib/pax_storage/src/api/python3/paxpy_comm.h index f5cd3884989..084bdbe8b5d 100644 --- a/contrib/pax_storage/src/api/python3/paxpy_comm.h +++ b/contrib/pax_storage/src/api/python3/paxpy_comm.h @@ -1,3 +1,25 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *------------------------------------------------------------------------- + */ + #pragma once #include "paxpy_config_d.h" #define FORMAT_CODE_PY_SSIZE_T "%" PY_FORMAT_SIZE_T "d" diff --git a/contrib/pax_storage/src/api/python3/paxpy_modules.cc b/contrib/pax_storage/src/api/python3/paxpy_modules.cc index 092db511033..be4cb98390d 100644 --- a/contrib/pax_storage/src/api/python3/paxpy_modules.cc +++ b/contrib/pax_storage/src/api/python3/paxpy_modules.cc @@ -1,3 +1,25 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *------------------------------------------------------------------------- + */ + #include #include diff --git a/contrib/pax_storage/src/api/python3/paxpy_types.h b/contrib/pax_storage/src/api/python3/paxpy_types.h index d88ac245a05..8bf708d1761 100644 --- a/contrib/pax_storage/src/api/python3/paxpy_types.h +++ b/contrib/pax_storage/src/api/python3/paxpy_types.h @@ -1,3 +1,25 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *------------------------------------------------------------------------- + */ + #pragma once #include #include diff --git a/contrib/pax_storage/src/api/python3/paxtype_cast.cc b/contrib/pax_storage/src/api/python3/paxtype_cast.cc index 839fa8d416f..7d3239a6f42 100644 --- a/contrib/pax_storage/src/api/python3/paxtype_cast.cc +++ b/contrib/pax_storage/src/api/python3/paxtype_cast.cc @@ -1,3 +1,25 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *------------------------------------------------------------------------- + */ + #include "paxpy_types.h" #include "comm/fmt.h" diff --git a/contrib/pax_storage/src/api/python3/setup-debug.py b/contrib/pax_storage/src/api/python3/setup-debug.py index 60f259f6311..13eadaa357d 100644 --- a/contrib/pax_storage/src/api/python3/setup-debug.py +++ b/contrib/pax_storage/src/api/python3/setup-debug.py @@ -1,3 +1,22 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + from setuptools import find_packages from setuptools import setup, Extension diff --git a/contrib/pax_storage/src/api/python3/setup.py b/contrib/pax_storage/src/api/python3/setup.py index 4922d42552b..a60cc779fd9 100644 --- a/contrib/pax_storage/src/api/python3/setup.py +++ b/contrib/pax_storage/src/api/python3/setup.py @@ -1,3 +1,22 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + from setuptools import find_packages from setuptools import setup, Extension diff --git a/contrib/pax_storage/src/api/python3/test/paxpy_test.py b/contrib/pax_storage/src/api/python3/test/paxpy_test.py index e4d78faf445..df487226e12 100644 --- a/contrib/pax_storage/src/api/python3/test/paxpy_test.py +++ b/contrib/pax_storage/src/api/python3/test/paxpy_test.py @@ -1,4 +1,21 @@ # python3 +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + import unittest import paxpy import datetime diff --git a/contrib/pax_storage/src/cpp/CMakeLists.txt b/contrib/pax_storage/src/cpp/CMakeLists.txt index 8b6cbe0fd29..87ff074e877 100644 --- a/contrib/pax_storage/src/cpp/CMakeLists.txt +++ b/contrib/pax_storage/src/cpp/CMakeLists.txt @@ -1,3 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + cmake_minimum_required (VERSION 3.11.0) # protobuf diff --git a/contrib/pax_storage/src/cpp/cmake/pax.cmake b/contrib/pax_storage/src/cpp/cmake/pax.cmake index 13451426a9e..71775bac2dd 100644 --- a/contrib/pax_storage/src/cpp/cmake/pax.cmake +++ b/contrib/pax_storage/src/cpp/cmake/pax.cmake @@ -1,3 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. ## generate_sql add_executable(generate_sql_script_program "${CMAKE_CURRENT_SOURCE_DIR}/../../tools/gen_sql.c") diff --git a/contrib/pax_storage/src/cpp/cmake/pax_format.cmake b/contrib/pax_storage/src/cpp/cmake/pax_format.cmake index 9aa438ab5d5..4bdc25671f9 100644 --- a/contrib/pax_storage/src/cpp/cmake/pax_format.cmake +++ b/contrib/pax_storage/src/cpp/cmake/pax_format.cmake @@ -1,4 +1,20 @@ # paxformat.so +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. set(pax_comm_src comm/bitmap.cc diff --git a/contrib/pax_storage/src/cpp/storage/README_CTID_in_pax.md b/contrib/pax_storage/src/cpp/storage/README_CTID_in_pax.md index b1b770f8553..f2664a21ac7 100644 --- a/contrib/pax_storage/src/cpp/storage/README_CTID_in_pax.md +++ b/contrib/pax_storage/src/cpp/storage/README_CTID_in_pax.md @@ -1,3 +1,22 @@ + + # CTID in PAX Pax table is different from heap/ao table, for the last two bytes, it does't has continuous logical address. So it can't be mapped to physical file through ctid. diff --git a/contrib/pax_storage/src/cpp/storage/proto/micro_partition_stats.proto b/contrib/pax_storage/src/cpp/storage/proto/micro_partition_stats.proto index 7687b72b9ef..9e3a8decb98 100644 --- a/contrib/pax_storage/src/cpp/storage/proto/micro_partition_stats.proto +++ b/contrib/pax_storage/src/cpp/storage/proto/micro_partition_stats.proto @@ -1,3 +1,25 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *------------------------------------------------------------------------- + */ + syntax = "proto2"; package pax.stats; diff --git a/contrib/pax_storage/src/cpp/storage/proto/pax.proto b/contrib/pax_storage/src/cpp/storage/proto/pax.proto index 7206725fd27..3e25710027d 100644 --- a/contrib/pax_storage/src/cpp/storage/proto/pax.proto +++ b/contrib/pax_storage/src/cpp/storage/proto/pax.proto @@ -1,6 +1,27 @@ -/** +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * * it's a common proto for pax column + * + *------------------------------------------------------------------------- */ + syntax = "proto2"; package pax; diff --git a/contrib/pax_storage/tools/gen_sql.c b/contrib/pax_storage/tools/gen_sql.c index e00a455cf03..e10abe74ecb 100644 --- a/contrib/pax_storage/tools/gen_sql.c +++ b/contrib/pax_storage/tools/gen_sql.c @@ -1,12 +1,31 @@ -// -// This program is used to generate sql script file for PAX. -// Build and run of this program is automatically done in the -// cmake script. -// -// The command to build this program alone is: -// gcc -I`pg_config --includedir-server` -I/src/cpp -o generate_sql gen_sql.c -// -// +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * This program is used to generate sql script file for PAX. + * Build and run of this program is automatically done in the + * cmake script. + * + * The command to build this program alone is: + * gcc -I`pg_config --includedir-server` -I/src/cpp -o generate_sql gen_sql.c + * + *------------------------------------------------------------------------- + */ #include "postgres.h" // NOLINT diff --git a/contrib/pgcrypto/sm4.h b/contrib/pgcrypto/sm4.h index 5af5fe53b2b..b8cafb94b07 100644 --- a/contrib/pgcrypto/sm4.h +++ b/contrib/pgcrypto/sm4.h @@ -1,3 +1,29 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * sm4.h + * + * IDENTIFICATION + * contrib/pgcrypto/sm4.h + * + *------------------------------------------------------------------------- + */ #ifndef _SM4_H_ #define _SM4_H_ diff --git a/deploy/README.md b/deploy/README.md index b1d3af47176..b8da77a0521 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,2 +1,21 @@ + + > [!WARNING] > The files are still in progress and will be revised in the following months. diff --git a/deploy/build/README.CentOS.bash b/deploy/build/README.CentOS.bash deleted file mode 100755 index ee9799d816e..00000000000 --- a/deploy/build/README.CentOS.bash +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash - -# Install needed packages. Please add to this list if you discover additional prerequisites. -sudo yum install -y epel-release -sudo yum install -y \ - apr-devel \ - bison \ - bzip2-devel \ - cmake3 \ - flex \ - gcc \ - gcc-c++ \ - krb5-devel \ - libcurl-devel \ - libevent-devel \ - libkadm5 \ - libyaml-devel \ - libxml2-devel \ - libzstd-devel \ - openssl-devel \ - perl-ExtUtils-Embed \ - python3-devel \ - python3-pip \ - readline-devel \ - xerces-c-devel \ - zlib-devel - -# Needed for pygresql, or you can source greenplum_path.sh after compiling database and installing python-dependencies then -sudo yum install -y \ - postgresql \ - postgresql-devel - -sudo pip3 install conan -sudo pip3 install -r ../../python-dependencies.txt - -sudo tee -a /etc/sysctl.conf << EOF -kernel.shmmax = 5000000000000 -kernel.shmmni = 32768 -kernel.shmall = 40000000000 -kernel.sem = 1000 32768000 1000 32768 -kernel.msgmnb = 1048576 -kernel.msgmax = 1048576 -kernel.msgmni = 32768 - -net.core.netdev_max_backlog = 80000 -net.core.rmem_default = 2097152 -net.core.rmem_max = 16777216 -net.core.wmem_max = 16777216 - -vm.overcommit_memory = 2 -vm.overcommit_ratio = 95 -EOF - -sudo sysctl -p - -sudo mkdir -p /etc/security/limits.d -sudo tee -a /etc/security/limits.d/90-greenplum.conf << EOF -* soft nofile 1048576 -* hard nofile 1048576 -* soft nproc 1048576 -* hard nproc 1048576 -EOF - -ulimit -n 65536 65536 diff --git a/deploy/build/README.Linux.md b/deploy/build/README.Linux.md deleted file mode 100644 index 4f609855a38..00000000000 --- a/deploy/build/README.Linux.md +++ /dev/null @@ -1,242 +0,0 @@ -# Compile and Install Apache Cloudberry on Linux - -This document shares how to compile and install Apache Cloudberry on Linux systems (CentOS 7, RHEL, and Ubuntu). Note that this document is for developers to try out Apache Cloudberry in a single-node environments. DO NOT use this document for production environments. - -Take the following steps to set up the development environments: - -1. [Clone the GitHub repo](#step-1-clone-the-github-repo). -2. [Install dependencies](#step-2-install-dependencies). -3. [Perform prerequisite platform tasks](#step-3-perform-prerequisite-platform-tasks). -4. [Build Apache Cloudberry](#step-4-build-apache-cloudberry). -5. [Verify the cluster](#step-5-verify-the-cluster). - -## Step 1. Clone the GitHub repo - -Clone the GitHub repository `apache/cloudberry` to the target machine: - -```shell -git clone https://github.com/apache/cloudberry.git -``` - -## Step 2. Install dependencies - -Enter the repository and install dependencies according to your operating systems: - -- [For CentOS 7](#for-centos-7) -- [For RHEL 8 or Rocky Linux 8](#for-rhel-8-or-rocky-linux-8) -- [For Ubuntu 18.04 or later](#for-ubuntu-1804-or-later) - -### For CentOS 7 - -> [!WARNING] -> CentOS Linux 7 reached the end of life (EOL) on June 30, 2024. You can change the mirror to vault.centos.org to install software. - -The following steps work on CentOS 7. For other CentOS versions, these steps might work but are not guaranteed to work. - -1. Run the bash script `README.CentOS.bash` in the `deploy/build` directory of the `apache/cloudberry` repository. To run this script, password is required. Then, some required dependencies will be automatically downloaded. - - ```bash - cd cloudberry/deploy/build - ./README.CentOS.bash - ``` - -2. Install additional packages required for configurations. - - ```bash - yum -y install R apr apr-devel apr-util automake autoconf bash bison bison-devel bzip2 bzip2-devel centos-release-scl curl flex flex-devel gcc gcc-c++ git gdb iproute krb5-devel less libcurl libcurl-devel libevent libevent-devel libxml2 libxml2-devel libyaml libzstd-devel libzstd make openldap openssh openssh-clients openssh-server openssl openssl-devel openssl-libs perl python3-devel readline readline-devel rsync sed sudo tar vim wget which xerces-c-devel zip zlib && \ - yum -y install epel-release - ``` - -3. Update the GNU Compiler Collection (GCC) to version `devtoolset-10` to support C++ 14. - - ```bash - yum install centos-release-scl - yum -y install devtoolset-10-gcc devtoolset-10-gcc-c++ devtoolset-10-binutils - scl enable devtoolset-10 bash - source /opt/rh/devtoolset-10/enable - echo "source /opt/rh/devtoolset-10/enable" >> /etc/bashrc - source /etc/bashrc - gcc -v - ``` - -4. Link cmake3 to cmake: - - ```bash - sudo ln -sf /usr/bin/cmake3 /usr/local/bin/cmake - ``` - -### For RHEL 8 or Rocky Linux 8 - -1. Install Development Tools. - - ```bash - sudo yum group install -y "Development Tools" - ``` - -2. Install dependencies: - - ```bash - sudo yum install -y epel-release - - sudo yum install -y apr-devel bison bzip2-devel cmake3 flex gcc gcc-c++ krb5-devel libcurl-devel libevent-devel libkadm5 libxml2-devel libzstd-devel openssl-devel perl-ExtUtils-Embed python3-devel python3-pip readline-devel xerces-c-devel zlib-devel - ``` - -3. Install more dependencies by running the `README.Rhel-Rocky.bash` script. - - ```bash - ~/cloudberry/deploy/build/README.Rhel-Rocky.bash - ``` - -### For Ubuntu 18.04 or later - -1. Install dependencies by running the `README.Ubuntu.bash` script in the `deploy/build` directory. - - ```shell - # You need to enter your password to run. - sudo ~/cloudberry/deploy/build/README.Ubuntu.bash - ``` - - > [!Note] - > - When you run the `README.Ubuntu.bash` script for dependencies, you will be asked to configure `realm` for Kerberos. You can enter any realm, because this is just for testing, and during testing, it will reconfigure a local server/client. If you want to skip this manual configuration, run `export DEBIAN_FRONTEND=noninteractive`. - > - If the script fails to download packages, we recommend that you can try another one software source for Ubuntu. - -2. Install GCC 10. Ubuntu 18.04 and later versions should use GCC 10 or later: - - ```bash - # Install gcc-10. - sudo apt install software-properties-common - sudo add-apt-repository ppa:ubuntu-toolchain-r/test - sudo apt install gcc-10 g++-10 - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 - ``` - -## Step 3. Perform prerequisite platform tasks - -After you have installed all the dependencies for your operating system, it is time to do some prerequisite platform tasks before you go on building Apache Cloudberry. These operations include manually running `ldconfig`, creating the `gpadmin` user, and setting up a password to start the Apache Cloudberry and test. - -1. Make sure that you add `/usr/local/lib` and `/usr/local/lib64` to the `/etc/ld.so.conf` file. - - ```bash - echo -e "/usr/local/lib \n/usr/local/lib64" >> /etc/ld.so.conf - ldconfig - ``` - -2. Create the `gpadmin` user and set up the SSH key. Manually create SSH keys based on different operating systems, so that you can run `ssh localhost` without a password. - - - For CentOS, RHEL, and Rocky Linux: - - ```bash - useradd gpadmin # Creates gpadmin user - su - gpadmin # Uses the gpadmin user - ssh-keygen # Creates SSH key - cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys - chmod 600 ~/.ssh/authorized_keys - exit - ``` - - - For Ubuntu: - - ```bash - useradd -r -m -s /bin/bash gpadmin # Creates gpadmin user - su - gpadmin # Uses the gpadmin user - ssh-keygen # Creates SSH key - cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys - chmod 600 ~/.ssh/authorized_keys - exit - ``` - -## Step 4. Build Apache Cloudberry - -After you have installed all the dependencies and performed the prerequisite platform tasks, you can start to build Apache Cloudberry. Run the following commands in sequence. - -1. Configure the build environment. Enter the `cloudberry` directory and run the `configure` script. - - ```bash - cd cloudberry - ./configure --with-perl --with-python --with-libxml --with-gssapi --prefix=/usr/local/cloudberry - ``` - - > [!Note] - > Cloudberry is built with GPORCA by default. If you want to build Cloudberry without GPORCA, add the `--disable-orca` flag in the `./configure` command. - > - > ```bash - > ./configure --disable-orca --with-perl --with-python --with-libxml --prefix=/usr/local/cloudberry - > ``` - -2. Compile the code and install the database. - - ```bash - make -j8 - make -j8 install - ``` - -3. Bring in the Greenplum environment for your running shell. - - ```bash - cd .. - cp -r cloudberry/ /home/gpadmin/ - cd /home/gpadmin/ - chown -R gpadmin:gpadmin cloudberry/ - su - gpadmin - cd cloudberry/ - source /usr/local/cloudberry/greenplum_path.sh - ``` - -4. Start the demo cluster. - - - For CentOS: - - ```bash - scl enable devtoolset-10 bash - source /opt/rh/devtoolset-10/enable - make create-demo-cluster - ``` - - - For Ubuntu, Rocky, and RHEL: - - ```bash - make create-demo-cluster - ``` - -5. Prepare the test by running the following command. This command will configure the port and environment variables for the test. - - Environment variables such as `PGPORT` and `MASTER_DATA_DIRECTORY` will be configured, which are the default port and the data directory of the master node. - - ```bash - source gpAux/gpdemo/gpdemo-env.sh - ``` - -## Step 5. Verify the cluster - -1. You can verify whether the cluster has started successfully by running the following command. If successful, you can see multiple active `postgres` processes with ports ranging from `7000` to `7007`. - - ```bash - ps -ef | grep postgres - ``` - -2. Connect to the Apache Cloudberry and see the active segment information by querying the system table `gp_segement_configuration`. For detailed description of this table, see the Greenplum document [here](https://docs.vmware.com/en/VMware-Greenplum/6/greenplum-database/ref_guide-system_catalogs-gp_segment_configuration.html). - - ```sql - $ psql -p 7000 postgres - psql (14.4, server 14.4) - Type "help" for help. - - postgres=# select version(); - version - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - PostgreSQL 14.4 (Apache Cloudberry 1.0.0+1c0d6e2224 build dev) on x86_64( GCC 13.2.0) 13.2.0, 64-bit compiled on Sep 22 2023 10:56:01 - (1 row) - - postgres=# select * from gp_segment_configuration; - dbid | content | role | preferred_role | mode | status | port | hostname | address | datadir | warehouseid - ------+---------+------+----------------+------+--------+------+------------+------------+------------------------------------------------------------------------------+------------- - 1 | -1 | p | p | n | u | 7000 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberry/gpAux/gpdemo/datadirs/qddir/demoDataDir-1 | 0 - 8 | -1 | m | m | s | u | 7001 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberry/gpAux/gpdemo/datadirs/standby | 0 - 3 | 1 | p | p | s | u | 7003 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberry/gpAux/gpdemo/datadirs/dbfast2/demoDataDir1 | 0 - 6 | 1 | m | m | s | u | 7006 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberry/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1 | 0 - 2 | 0 | p | p | s | u | 7002 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberry/gpAux/gpdemo/datadirs/dbfast1/demoDataDir0 | 0 - 5 | 0 | m | m | s | u | 7005 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberry/gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0 | 0 - 4 | 2 | p | p | s | u | 7004 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberry/gpAux/gpdemo/datadirs/dbfast3/demoDataDir2 | 0 - 7 | 2 | m | m | s | u | 7007 | i-6wvpa9wt | i-6wvpa9wt | /home/gpadmin/cloudberry/gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2 | 0 - (8 rows) - ``` diff --git a/deploy/build/README.Rhel-Rocky.bash b/deploy/build/README.Rhel-Rocky.bash deleted file mode 100755 index 8fdf57c781e..00000000000 --- a/deploy/build/README.Rhel-Rocky.bash +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/bash - -# Install needed packages. Please add to this list if you discover additional prerequisites -sudo yum group install -y "Development Tools" -INSTALL_PKGS="apr-devel bison bzip2-devel cmake3 epel-release flex gcc gcc-c++ krb5-devel libcurl-devel libevent-devel libkadm5 libxml2-devel libzstd-devel openssl-devel python39 python39-devel python39-psutil python3-pip perl-ExtUtils-MakeMaker.noarch perl-ExtUtils-Embed.noarch readline-devel rsync xerces-c-devel zlib-devel python3-psutil python3-pyyaml python3-psycopg2" - -sudo yum install -y $INSTALL_PKGS - -sudo yum --enablerepo=powertools install -y libyaml-devel - -sudo yum install -y postgresql -sudo yum install -y postgresql-devel - -pip3.9 install -r ../../python-dependencies.txt - -#Remove the python3 softlink because on Rocky8 its pointing to python3.6 by default. We need python3.9 for gpdb7. -sudo rm -rf /usr/bin/python3 -sudo ln -s /usr/bin/python3.9 /usr/bin/python3 - -#For all Greenplum Database host systems running RHEL, CentOs or Rocky8, SELinux must either be Disabled or configured to allow unconfined access to Greenplum processes, directories, and the gpadmin user. -setenforce 0 -sudo tee -a /etc/selinux/config << EOF -SELINUX=disabled -EOF - -#To prevent SELinux-related SSH authentication denials that could occur even with SELinux deactivated -sudo tee -a /etc/sssd/sssd.conf << EOF -selinux_provider=none -EOF - -sudo systemctl stop firewalld.service - -#Configure kernel settings so the system is optimized for Greenplum Database. -sudo tee -a /etc/sysctl.d/10-gpdb.conf << EOF -kernel.msgmax = 65536 -kernel.msgmnb = 65536 -kernel.msgmni = 2048 -kernel.sem = 500 2048000 200 8192 -kernel.shmmni = 1024 -kernel.core_uses_pid = 1 -kernel.core_pattern=/var/core/core.%h.%t -kernel.sysrq = 1 -net.core.netdev_max_backlog = 2000 -net.core.rmem_max = 4194304 -net.core.wmem_max = 4194304 -net.core.rmem_default = 4194304 -net.core.wmem_default = 4194304 -net.ipv4.tcp_rmem = 4096 4224000 16777216 -net.ipv4.tcp_wmem = 4096 4224000 16777216 -net.core.optmem_max = 4194304 -net.core.somaxconn = 10000 -net.ipv4.ip_forward = 0 -net.ipv4.tcp_congestion_control = cubic -net.ipv4.tcp_tw_recycle = 0 -net.core.default_qdisc = fq_codel -net.ipv4.tcp_mtu_probing = 0 -net.ipv4.conf.all.arp_filter = 1 -net.ipv4.conf.default.accept_source_route = 0 -net.ipv4.ip_local_port_range = 10000 65535 -net.ipv4.tcp_max_syn_backlog = 4096 -net.ipv4.tcp_syncookies = 1 -net.ipv4.ipfrag_high_thresh = 41943040 -net.ipv4.ipfrag_low_thresh = 31457280 -net.ipv4.ipfrag_time = 60 -net.ipv4.ip_local_reserved_ports=65330 -vm.overcommit_memory = 2 -vm.overcommit_ratio = 95 -vm.swappiness = 10 -vm.dirty_expire_centisecs = 500 -vm.dirty_writeback_centisecs = 100 -vm.zone_reclaim_mode = 0 -EOF - -RAM_IN_KB=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` -RAM_IN_BYTES=$(($RAM_IN_KB*1024)) -echo "vm.min_free_kbytes = $(($RAM_IN_BYTES*3/100/1024))" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null -echo "kernel.shmall = $(($RAM_IN_BYTES/2/4096))" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null -echo "kernel.shmmax = $(($RAM_IN_BYTES/2))" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null -if [ $RAM_IN_BYTES -le $((64*1024*1024*1024)) ]; then - echo "vm.dirty_background_ratio = 3" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null - echo "vm.dirty_ratio = 10" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null -else - echo "vm.dirty_background_ratio = 0" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null - echo "vm.dirty_ratio = 0" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null - echo "vm.dirty_background_bytes = 1610612736 # 1.5GB" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null - echo "vm.dirty_bytes = 4294967296 # 4GB" | sudo tee -a /etc/sysctl.d/10-gpdb.conf > /dev/null -fi - -sudo sysctl -p - -sudo tee -a /etc/security/limits.d/10-nproc.conf << EOF -* soft nofile 524288 -* hard nofile 524288 -* soft nproc 131072 -* hard nproc 131072 -* soft core unlimited -EOF - - -ulimit -n 65536 65536 - diff --git a/deploy/build/README.Ubuntu.bash b/deploy/build/README.Ubuntu.bash deleted file mode 100755 index ec9ca3ee752..00000000000 --- a/deploy/build/README.Ubuntu.bash +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash - -sudo apt-get update -sudo apt-get install -y \ - bison \ - ccache \ - cmake \ - curl \ - flex \ - git-core \ - gcc \ - g++ \ - inetutils-ping \ - krb5-kdc \ - krb5-admin-server \ - libapr1-dev \ - libbz2-dev \ - libcurl4-gnutls-dev \ - libevent-dev \ - libkrb5-dev \ - libpam-dev \ - libperl-dev \ - libreadline-dev \ - libssl-dev \ - libxerces-c-dev \ - libxml2-dev \ - libyaml-dev \ - libzstd-dev \ - locales \ - net-tools \ - ninja-build \ - openssh-client \ - openssh-server \ - openssl \ - pkg-config \ - python3-dev \ - python3-pip \ - python3-psutil \ - python3-pygresql \ - python3-yaml \ - zlib1g-dev - -pip3 install conan - -sudo tee -a /etc/sysctl.conf << EOF -kernel.shmmax = 5000000000000 -kernel.shmmni = 32768 -kernel.shmall = 40000000000 -kernel.sem = 1000 32768000 1000 32768 -kernel.msgmnb = 1048576 -kernel.msgmax = 1048576 -kernel.msgmni = 32768 - -net.core.netdev_max_backlog = 80000 -net.core.rmem_default = 2097152 -net.core.rmem_max = 16777216 -net.core.wmem_max = 16777216 - -vm.overcommit_memory = 2 -vm.overcommit_ratio = 95 -EOF - -sudo sysctl -p - -sudo mkdir -p /etc/security/limits.d -sudo tee -a /etc/security/limits.d/90-greenplum.conf << EOF -* soft nofile 1048576 -* hard nofile 1048576 -* soft nproc 1048576 -* hard nproc 1048576 -EOF - -ulimit -n 65536 65536 diff --git a/deploy/build/README.macOS.bash b/deploy/build/README.macOS.bash deleted file mode 100755 index 4dff895df50..00000000000 --- a/deploy/build/README.macOS.bash +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/bash - -echo "Caching password..." -sudo -K -sudo true; - -if [ ! -d /tmp/cbdb-devenv ] ; then - mkdir /tmp/cbdb-devenv && cd /tmp/cbdb-devenv || exit -fi - -if hash brew 2>/dev/null; then - echo "Homebrew is already installed!" -else - echo "Installing Homebrew..." - echo | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - if [ $? -eq 1 ]; then - echo "ERROR : Homebrew Installation Failed, fix the failure and re-run the script." - exit 1 - fi -fi - -brew install bash-completion -brew install conan -brew install cmake # gporca -#brew install xerces-c #gporca -brew install libyaml # enables `--enable-mapreduce` -brew install libevent # gpfdist -brew install apr # gpfdist -brew install apr-util # gpfdist -brew install zstd -brew install pkg-config -brew install perl -brew link --force apr -brew link --force apr-util -brew install gcc@13 -brew install gnu-sed - -#Install xerces-c library -if [ ! -d /tmp/cbdb-devenv/gp-xerces ] ; then - echo "INFO: xerces is not installed, Installing...." - git clone https://github.com/greenplum-db/gp-xerces.git -v /tmp/cbdb-devenv/gp-xerces - mkdir /tmp/cbdb-devenv/gp-xerces/build - cd /tmp/cbdb-devenv/gp-xerces/build || exit - /tmp/cbdb-devenv/gp-xerces/configure --prefix="$(brew --prefix)" - make -j"$(nproc)" - make install - cd - || exit -fi - -# Needed for pygresql, or you can source greenplum_path.sh after compiling database and installing python-dependencies then -brew install postgresql@14 - -brew install python3 - -# Due to recent update on OS net-tools package. Mac doesn't have support for ss and ip by default. -# Hence as a workaround installing iproute2mac for ip support and creating soft link for ss support -brew install iproute2mac -sudo ln -s /usr/sbin/netstat "$(brew --prefix)"/bin/ss - -echo 127.0.0.1$'\t'$HOSTNAME | sudo tee -a /etc/hosts - -# OS settings -sudo sysctl -w kern.sysv.shmmax=2147483648 -sudo sysctl -w kern.sysv.shmmin=1 -sudo sysctl -w kern.sysv.shmmni=64 -sudo sysctl -w kern.sysv.shmseg=16 -sudo sysctl -w kern.sysv.shmall=524288 -sudo sysctl -w net.inet.tcp.msl=60 - -sudo sysctl -w net.local.dgram.recvspace=262144 -sudo sysctl -w net.local.dgram.maxdgram=16384 -sudo sysctl -w kern.maxfiles=131072 -sudo sysctl -w kern.maxfilesperproc=131072 -sudo sysctl -w net.inet.tcp.sendspace=262144 -sudo sysctl -w net.inet.tcp.recvspace=262144 -sudo sysctl -w kern.ipc.maxsockbuf=8388608 - -sudo tee -a /etc/sysctl.conf << EOF -kern.sysv.shmmax=2147483648 -kern.sysv.shmmin=1 -kern.sysv.shmmni=64 -kern.sysv.shmseg=16 -kern.sysv.shmall=524288 -net.inet.tcp.msl=60 - -net.local.dgram.recvspace=262144 -net.local.dgram.maxdgram=16384 -kern.maxfiles=131072 -kern.maxfilesperproc=131072 -net.inet.tcp.sendspace=262144 -net.inet.tcp.recvspace=262144 -kern.ipc.maxsockbuf=8388608 -EOF - -# Configure -cat >> ~/.bashrc << EOF -ulimit -n 131072 131072 # Increases the number of open files -export PGHOST="$(hostname)" -export LC_CTYPE="en_US.UTF-8" -EOF - -cat >> ~/.zshrc << EOF -source ~/.bashrc -EOF - -cat << EOF - -================ - -Please source greenplum_path.sh after compiling database, then - -pip3 install --user -r ../../python-dependencies.txt - -EOF diff --git a/deploy/build/README.macOS.md b/deploy/build/README.macOS.md deleted file mode 100644 index 58a9ff86178..00000000000 --- a/deploy/build/README.macOS.md +++ /dev/null @@ -1,132 +0,0 @@ -# Compile and Install Apache Cloudberry on macOS - -This document shares how to build, compile, and install Apache Cloudberry on macOS for development purposes. Follow the steps below. - -According to our test, these steps work well on macOS Ventura 13.4+ with both Intel and Apple silicon processors (M1 or M2). If you have an older version of macOS, upgrading is recommended. - -## Step 1. Install needed dependencies - -Run the following command to install the needed dependencies. You will be asked to enter the `sudo` password of your macOS system. - -```bash -source deploy/build/README.macOS.bash -``` - -> [!NOTE] -> This will install [Homebrew](https://brew.sh/) if missing. - -## Step 2. Enable password-free SSH connection to localhost - -1. Enable **Remote Login** on your macOS system by navigating to **System Preferences** \> **Sharing** \> **Remote Login**. -2. Run the following command to verify whether password-free SSH connection to localhost has been enabled on your operating system. - - ```bash - ssh $(hostname) - ``` - - - If this command runs without error or requiring you to enter a password, run `exit` and go to [Step 3. Configure, compile, and install](#step-3-configure-compile-and-install). - - If you are required to enter a password, take the following steps to set up password-free SSH connection. - - 1. Run `ssh-keygen` and then `cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys`. - 2. Run `ssh $(hostname)` again to check whether password-free connection is ready. - 3. If ready, run `exit` and go to [Step 3. Configure, compile, and install](#step-3-configure-compile-and-install). - -> [!NOTE] -> -> - If it is the first time you are using `ssh` connection to localhost, you might need to accept the trust on the first use prompt: -> -> ```bash -> The authenticity of host '' can't be established. -> ECDSA key fingerprint is SHA256:. -> Are you sure you want to continue connecting (yes/no)? -> ``` -> -> - If your hostname does not resolve, try adding your machine name to `/etc/hosts`: -> -> ```bash -> echo -e "127.0.0.1\t$HOSTNAME" | sudo tee -a /etc/hosts -> ``` - -## Step 3. Configure, compile, and install - -```bash -# Run the following commands under the `cloudberry/` dir. -# 1. Configure the build environment. - -BREWPREFIX=$(brew --prefix); export PATH="$BREWPREFIX/opt/gnu-sed/libexec/gnubin:$BREWPREFIX/opt/apr/bin:$PATH"; CXXFLAGS="-I $BREWPREFIX/include" CFLAGS="-ggdb -Og -g3 -fno-omit-frame-pointer -I $BREWPREFIX/include" LDFLAGS="-L $BREWPREFIX/lib" CC=$(which gcc-13) CXX=$(which g++-13) ./configure --enable-debug --prefix=$(cd ~; pwd)/install/cbdb; - -# 2. Compile and install Apache Cloudberry. - -make -j8 -make -j8 install - -# 3. Bring in Greenplum environment for Apache Cloudberry into your running shell. - -source $(cd ~; pwd)/install/cbdb/greenplum_path.sh - -# 4. Install the Python dependencies. - -pip3 install --user -r python-dependencies.txt - -# 5. Start a demo cluster. - -PORT_BASE=8000 make create-demo-cluster - -# gpdemo-env.sh contains PGPORT, COORDINATOR_DATA_DIRECTORY and MASTER_DATA_DIRECTORY values -source gpAux/gpdemo/gpdemo-env.sh -``` - -## Step 4. Verify the cluster - -1. You can verify whether the cluster has started successfully by running the following command. You will see many active `postgres` processes with ports ranging from `8000` to `8007`. - - ```bash - ps -ef | grep postgres - ``` - -2. Connect to the Apache Cloudberry and see the active segment information by querying the system table `gp_segement_configuration`. For detailed description of this table, see the Greenplum document [here](https://docs.vmware.com/en/VMware-Greenplum/6/greenplum-database/ref_guide-system_catalogs-gp_segment_configuration.html). - - ```sql - $ psql -p 8000 postgres - postgres=# select version(); - postgres=# select * from gp_segment_configuration; - ``` - - Example output: - - ```shell - $ psql -p 8000 postgres - psql (14.4, server 14.4) - Type "help" for help. - - postgres=# select version(); - version - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - PostgreSQL 14.4 (Apache Cloudberry 1.0.0+1c0d6e2224 build dev) on x86_64-apple-darwin22.4.0, compiled by gcc-13 (Homebrew GCC 13.2.0) 13.2.0, 64-bit compiled on Sep 22 2023 10:56:01 - (1 row) - - postgres=# select * from gp_segment_configuration; - dbid | content | role | preferred_role | mode | status | port | hostname | address | datadir | warehouseid - ------+---------+------+----------------+------+--------+------+-----------------------------+-----------------------------+----------------------------------------------------------------------------------------------------------+------------- - 1 | -1 | p | p | n | u | 8000 | hashdatas-MacBook-Pro.local | hashdatas-MacBook-Pro.local | /Users/hashdata/Documents/GitHub/upstream/cloudberry/gpAux/gpdemo/datadirs/qddir/demoDataDir-1 | 0 - 8 | -1 | m | m | s | u | 8001 | hashdatas-MacBook-Pro.local | hashdatas-MacBook-Pro.local | /Users/hashdata/Documents/GitHub/upstream/cloudberry/gpAux/gpdemo/datadirs/standby | 0 - 3 | 1 | p | p | s | u | 8003 | hashdatas-MacBook-Pro.local | hashdatas-MacBook-Pro.local | /Users/hashdata/Documents/GitHub/upstream/cloudberry/gpAux/gpdemo/datadirs/dbfast2/demoDataDir1 | 0 - 6 | 1 | m | m | s | u | 8006 | hashdatas-MacBook-Pro.local | hashdatas-MacBook-Pro.local | /Users/hashdata/Documents/GitHub/upstream/cloudberry/gpAux/gpdemo/datadirs/dbfast_mirror2/demoDataDir1 | 0 - 2 | 0 | p | p | s | u | 8002 | hashdatas-MacBook-Pro.local | hashdatas-MacBook-Pro.local | /Users/hashdata/Documents/GitHub/upstream/cloudberry/gpAux/gpdemo/datadirs/dbfast1/demoDataDir0 | 0 - 5 | 0 | m | m | s | u | 8005 | hashdatas-MacBook-Pro.local | hashdatas-MacBook-Pro.local | /Users/hashdata/Documents/GitHub/upstream/cloudberry/gpAux/gpdemo/datadirs/dbfast_mirror1/demoDataDir0 | 0 - 4 | 2 | p | p | s | u | 8004 | hashdatas-MacBook-Pro.local | hashdatas-MacBook-Pro.local | /Users/hashdata/Documents/GitHub/upstream/cloudberry/gpAux/gpdemo/datadirs/dbfast3/demoDataDir2 | 0 - 7 | 2 | m | m | s | u | 8007 | hashdatas-MacBook-Pro.local | hashdatas-MacBook-Pro.local | /Users/hashdata/Documents/GitHub/upstream/cloudberry/gpAux/gpdemo/datadirs/dbfast_mirror3/demoDataDir2 | 0 - (8 rows) - - postgres=# - ``` - -3. Now we can finally run `installcheck-world` to test everything works fine: - - ```bash - # In the folder where your cloned the source code - make installcheck-world - ``` - -Congratulations πŸŽ‰! You've successfully installed and created a Cloudberry cluster. Happy Hacking! πŸ˜‰ - diff --git a/deploy/build/README.md b/deploy/build/README.md deleted file mode 100644 index 12ca71e6596..00000000000 --- a/deploy/build/README.md +++ /dev/null @@ -1,116 +0,0 @@ - - -# Build Apache Cloudberry from Source Code - -This guides describes how to build Apache Cloudberry from source code. - -- For building on Linux systems, see [Compile and Install Apache Cloudberry on Linux](./README.Linux.md). -- For building on macOS system, see [Compile and Install Apache Cloudberry on macOS](./README.macOS.md). - -## Build the database - -``` -# Configure build environment to install at /usr/local/cloudberry -./configure --with-perl --with-python --with-libxml --with-gssapi --prefix=/usr/local/cloudberry - -# Compile and install -make -j8 -make -j8 install - -# Bring in greenplum environment for CBDB into your running shell -source /usr/local/cloudberry/greenplum_path.sh - -# Start demo cluster -make create-demo-cluster -# (gpdemo-env.sh contains __PGPORT__, __COORDINATOR_DATA_DIRECTORY__ and __MASTER_DATA_DIRECTORY__ values) -source gpAux/gpdemo/gpdemo-env.sh -``` - -- The directory and the TCP ports for the demo cluster can be changed on the fly. -Instead of `make cluster`, consider: - -``` -DATADIRS=/tmp/cbdb-cluster PORT_BASE=5555 make cluster -``` - -- The TCP port for the regression test can be changed on the fly: - -``` -PGPORT=5555 make installcheck-world -``` - -- To turn GPORCA off and use Postgres planner for query optimization: -``` -set optimizer=off; -``` - -- If you want to clean all generated files -``` -make distclean -``` - -## Running tests - -* The default regression tests - -``` -make installcheck-world -``` - -* The top-level target __installcheck-world__ will run all regression - tests in CBDB against the running cluster. For testing individual - parts, the respective targets can be run separately. - -* The PostgreSQL __check__ target does not work. Setting up a - Apache Cloudberry cluster is more complicated than a single-node - PostgreSQL installation, and no-one's done the work to have __make - check__ create a cluster. Create a cluster manually or use - gpAux/gpdemo/ (example below) and run the toplevel __make - installcheck-world__ against that. Patches are welcome! - -* The PostgreSQL __installcheck__ target does not work either, because - some tests are known to fail with Apache Cloudberry. The - __installcheck-good__ schedule in __src/test/regress__ excludes - those tests. - -* When adding a new test, please add it to one of the CBDB-specific tests, - in greenplum_schedule, rather than the PostgreSQL tests inherited from the - upstream. We try to keep the upstream tests identical to the upstream - versions, to make merging with newer PostgreSQL releases easier. - -# Alternative Configurations - -## Building Apache Cloudberry without GPORCA - -Currently, CBDB is built with GPORCA by default. If you want to build CBDB -without GPORCA, configure requires `--disable-orca` flag to be set. - -``` -# Clean environment -make distclean - -# Configure build environment to install at /usr/local/cloudberry -./configure --disable-orca --with-perl --with-python --with-libxml --prefix=/usr/local/cloudberry -``` - -## Building Apache Cloudberry with PXF - -PXF is an extension framework for Greenplum Database/Apache Cloudberry -to enable fast access to external Hadoop datasets. Refer to -[PXF extension](../../gpcontrib/pxf_fdw/README.md) for more information. - -Currently, Cloudberry is built with PXF by default (--enable-pxf is on). -In order to build Cloudberry without pxf, simply invoke `./configure` with additional option `--disable-pxf`. -PXF requires curl, so `--enable-pxf` is not compatible with the `--without-libcurl` option. - -## Building Apache Cloudberry with Python3 enabled - -Apache Cloudberry supports Python3 with plpython3u UDF - -See [how to enable Python3](../../src/pl/plpython/README.md) for details. - - -# Development with Vagrant - -There is a Vagrant-based [quickstart guide for developers](../vagrant/README.md). diff --git a/gpAux/gpdemo/gpdemo-defaults.sh b/gpAux/gpdemo/gpdemo-defaults.sh index 12ffa40b2d3..8823a19c966 100755 --- a/gpAux/gpdemo/gpdemo-defaults.sh +++ b/gpAux/gpdemo/gpdemo-defaults.sh @@ -1,4 +1,20 @@ #!/usr/bin/env bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. USAGE() { echo "" diff --git a/gpMgmt/bin/gpdemo b/gpMgmt/bin/gpdemo index 0717136d20a..39f0ae50669 100755 --- a/gpMgmt/bin/gpdemo +++ b/gpMgmt/bin/gpdemo @@ -1,4 +1,20 @@ #!/usr/bin/env bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. WORKDIR=$(dirname "$0") GPDEMO_LIB=$WORKDIR/lib/gpdemo diff --git a/gpMgmt/bin/gpshrink b/gpMgmt/bin/gpshrink index 4b1603e5093..3f6f145d723 100644 --- a/gpMgmt/bin/gpshrink +++ b/gpMgmt/bin/gpshrink @@ -1,8 +1,22 @@ #!/usr/bin/env python3 # Line too long - pylint: disable=C0301 # Invalid name - pylint: disable=C0103 +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at # -# Copyright (c) Greenplum Inc 2008. All Rights Reserved. +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. # from gppylib.mainUtils import getProgramName diff --git a/pom.xml b/pom.xml index 2816cb2d08f..df2ebe8693a 100644 --- a/pom.xml +++ b/pom.xml @@ -159,16 +159,10 @@ code or new licensing patterns. .git-blame-ignore-revs .dir-locals.el GNUmakefile.in - .github/DISCUSSION_TEMPLATE/ideas-feature-requests.yml - .github/DISCUSSION_TEMPLATE/proposal.yml - .github/full_color_black.svg - .github/ISSUE_TEMPLATE/bug-report.yml - .github/ISSUE_TEMPLATE/config.yml - .github/full_color_white.svg .gitattributes gpMgmt/demo/gpfdist_transform/** - + gpMgmt/demo/gppkg/sample-sources.tar.gz gpMgmt/demo/gppkg/sample.control gpMgmt/demo/gppkg/sample.spec gpMgmt/demo/gppkg/gppkg_spec.yml.in @@ -181,7 +175,6 @@ code or new licensing patterns. gpMgmt/bin/gpload_test/gpload2/*.ans gpMgmt/bin/gpload_test/gpload2/data/** - gpMgmt/bin/gpdemo gpMgmt/bin/gpcheckperf gpMgmt/bin/test/gpinitsystem_test.bash gpMgmt/bin/test/suite.bash @@ -340,14 +333,11 @@ code or new licensing patterns. .abi-check/** - deploy/** - .clang-tidy putversion .gitmodules .editorconfig - sonar-project.properties - + contrib/**/Makefile contrib/**/*.control contrib/**/*.source @@ -384,37 +374,6 @@ code or new licensing patterns. contrib/unaccent/unaccent.rules contrib/unaccent/generate_unaccent_rules.py - contrib/pax_storage/src/test/** - - contrib/pax_storage/init_file - contrib/pax_storage/tools/gen_sql.c - contrib/pax_storage/CMakeLists.txt - contrib/pax_storage/hd-ci/clang_tidy_pax.bash - contrib/pax_storage/hd-ci/compile_pax.bash - contrib/pax_storage/.clang-tidy - contrib/pax_storage/pax_schedule - contrib/pax_storage/FindDependencies.cmake - contrib/pax_storage/.clang-format - contrib/pax_storage/src/cpp/CMakeLists.txt - contrib/pax_storage/src/cpp/cmake/pax_format.cmake - contrib/pax_storage/src/cpp/cmake/pax.cmake - contrib/pax_storage/src/cpp/contrib/CPPLINT.cfg - contrib/pax_storage/src/cpp/storage/proto/micro_partition_stats.proto - contrib/pax_storage/src/cpp/storage/proto/pax.proto - contrib/pax_storage/src/cpp/storage/proto/CPPLINT.cfg - contrib/pax_storage/src/api/python3/paxfile_type.cc - contrib/pax_storage/src/api/python3/CMakeLists.txt - contrib/pax_storage/src/api/python3/test/paxpy_test.py - contrib/pax_storage/src/api/python3/paxpy_modules.cc - contrib/pax_storage/src/api/python3/paxpy_comm.h - contrib/pax_storage/src/api/python3/setup-debug.py - contrib/pax_storage/src/api/python3/MANIFEST.in - contrib/pax_storage/src/api/python3/paxfilereader_type.cc - contrib/pax_storage/src/api/python3/setup.py - contrib/pax_storage/src/api/python3/paxtype_cast.cc - contrib/pax_storage/src/api/python3/setup.cfg - contrib/pax_storage/src/api/python3/paxpy_types.h - contrib/cube/cubeparse.y contrib/cube/CHANGES contrib/cube/cubedata.h @@ -512,7 +471,6 @@ code or new licensing patterns. contrib/pgcrypto/rijndael.tbl contrib/pgcrypto/rijndael.h contrib/pgcrypto/crypt-blowfish.c - contrib/pgcrypto/sm4.h contrib/pgcrypto/package/gppkg_spec.yml.in contrib/pgcrypto/package/pgcrypto.spec @@ -583,7 +541,6 @@ code or new licensing patterns. contrib/formatter_fixedwidth/fixedwidth.c - gpAux/gpdemo/gpdemo-defaults.sh gpAux/gpdemo/Makefile gpAux/gpdemo/demo_cluster.sh gpAux/gpdemo/lalshell @@ -1000,11 +957,6 @@ code or new licensing patterns. src/include/gpopt/utils/COptTasks.h src/include/gpopt/.clang-format src/include/pg_config.h.win32 - src/include/task/bitstring.h - src/include/task/cron.h - src/include/task/pg_cron.h - src/include/task/task_states.h - src/include/task/job_metadata.h src/include/libpq/hba.h src/include/gppc/gppc_config.h src/include/commands/extprotocolcmds.h @@ -1267,7 +1219,6 @@ code or new licensing patterns. src/makefiles/Makefile.netbsd src/fe_utils/log.c src/fe_utils/test/print_test.c - src/common/sm3.c src/common/digit_table.h src/common/etcdutils.c src/nls-global.mk @@ -1288,10 +1239,52 @@ code or new licensing patterns. BUILD_NUMBER Makefile - .gitmessage aclocal.m4 python-dependencies.txt + + + + **/*.gif + **/*.md + **/*.json + **/*.sql + **/*.out + **/Thumbs.db + .github/full_color_black.svg + .github/full_color_white.svg + sonar-project.properties + .gitmessage + + + src/include/task/bitstring.h + src/include/task/cron.h + src/include/task/pg_cron.h + src/include/task/task_states.h + src/include/task/job_metadata.h + + + contrib/pax_storage/src/test/** + contrib/pax_storage/init_file + contrib/pax_storage/.clang-tidy + contrib/pax_storage/pax_schedule + contrib/pax_storage/.clang-format + contrib/pax_storage/src/cpp/contrib/CPPLINT.cfg + contrib/pax_storage/src/cpp/storage/proto/CPPLINT.cfg + contrib/pax_storage/src/api/python3/MANIFEST.in + contrib/pax_storage/src/api/python3/setup.cfg + dependency/yyjson/.gitattributes dependency/yyjson/.github/codecov.yml dependency/yyjson/.github/workflows/cmake.yml @@ -1706,66 +1699,11 @@ code or new licensing patterns. contrib/pax_storage/src/cpp/contrib/googletest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h contrib/pax_storage/src/cpp/contrib/googletest/googletest_deps.bzl - contrib/pax_storage/src/cpp/contrib/cpp-stub/test_cpp17/test_private_member.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/src_linux/addr_any.h - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/Makefile.linux64.gcc - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_private_member_function_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_object_member_function_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_constructor_function_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_virtual_overload_function_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_virtual_function_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_function.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_variadic_function.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/Makefile.win32 - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/Makefile.linux64.clang - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_addr_lambda_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_class_member_function.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_addr_lambda_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_addr_any_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_private_member_function_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/Makefile.linux32.gcc - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_dynamic_library_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_template_function_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_template_function_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/Makefile.linux32.clang - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_constructor_function_x86_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_dtor_function_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_overload_function_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_functor_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_functor_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_object_member_function_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/Makefile.win64 - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_dtor_function_x86_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_dynamic_library_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_overload_function_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_virtual_function_x86_win.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_valgrind_discard_translation_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/test/test_addr_any_linux.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/src_darwin/addr_any.h - contrib/pax_storage/src/cpp/contrib/cpp-stub/.gitmodules - contrib/pax_storage/src/cpp/contrib/cpp-stub/src_win/addr_any.h - contrib/pax_storage/src/cpp/contrib/cpp-stub/.github/workflows/make-test-multi-platform.yml - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/ut/include/gmock/internal/gmock-pp.h - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/ut/include/gmock/internal/custom/gmock-generated-actions.h.pump - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/ut/src/mocks/mock_obj.hpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/ut/src/test_obj.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/ut/src/fixtures/strings.hpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/ut/src/main.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/src/obj_operations.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/src/obj.hpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/src/obj.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/src/main.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/gtest/src/obj_operations.hpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/catch2/ut/include/catch.hpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/catch2/ut/src/test_obj.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/catch2/ut/src/main.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/catch2/src/obj_operations.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/catch2/src/obj.hpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/catch2/src/obj.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/catch2/src/main.cpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/ut_examples/catch2/src/obj_operations.hpp - contrib/pax_storage/src/cpp/contrib/cpp-stub/src/addr_pri.h - contrib/pax_storage/src/cpp/contrib/cpp-stub/src/stub.h + contrib/pax_storage/src/cpp/cpp-stub/src_linux/addr_any.h + contrib/pax_storage/src/cpp/cpp-stub/src_darwin/addr_any.h + contrib/pax_storage/src/cpp/cpp-stub/src_win/addr_any.h + contrib/pax_storage/src/cpp/cpp-stub/src/addr_pri.h + contrib/pax_storage/src/cpp/cpp-stub/src/stub.h contrib/pax_storage/src/cpp/contrib/tabulate/tabulateConfig.cmake.in contrib/pax_storage/src/cpp/contrib/tabulate/tabulate.pri @@ -1801,25 +1739,6 @@ code or new licensing patterns. contrib/pax_storage/src/cpp/contrib/tabulate/.clang-format contrib/pax_storage/src/cpp/contrib/tabulate/.travis.yml - - - **/*.gif - **/*.md - **/*.json - **/*.sql - **/*.out - **/Thumbs.db - - - gpMgmt/bin/pythonSrc/ext/pylint-0.21.0.tar.gz - diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index e47f354cfdd..895fe14f4cc 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -250,6 +250,9 @@ getSchemaData(Archive *fout, int *numTablesPtr) pg_log_info("flagging inherited columns in subtables"); flagInhAttrs(fout->dopt, tblinfo, numTables); + pg_log_info("reading partitioning data"); + getPartitioningInfo(fout); + pg_log_info("reading indexes"); getIndexes(fout, tblinfo, numTables); @@ -302,7 +305,6 @@ static void flagInhTables(Archive *fout, TableInfo *tblinfo, int numTables, InhInfo *inhinfo, int numInherits) { - DumpOptions *dopt = fout->dopt; int i, j; @@ -318,26 +320,18 @@ flagInhTables(Archive *fout, TableInfo *tblinfo, int numTables, continue; /* - * FIXME: In PostgreSQL, foreign tables can be inherited. But - * pg_dump chokes on external tables, if an external table is - * used as a partition, and a column has attislocal=false. - */ - if (tblinfo[i].relstorage == 'x' /* RELSTORAGE_EXTERNAL */) - continue; - - /* - * Normally, we don't bother computing anything for non-target tables, - * but if load-via-partition-root is specified, we gather information - * on every partition in the system so that getRootTableInfo can trace - * from any given to leaf partition all the way up to the root. (We - * don't need to mark them as interesting for getTableAttrs, though.) + * Normally, we don't bother computing anything for non-target tables. + * However, we must find the parents of non-root partitioned tables in + * any case, so that we can trace from leaf partitions up to the root + * (in case a leaf is to be dumped but its parents are not). We need + * not mark such parents interesting for getTableAttrs, though. */ if (!tblinfo[i].dobj.dump) { mark_parents = false; - if (!dopt->load_via_partition_root || - !tblinfo[i].ispartition) + if (!(tblinfo[i].relkind == RELKIND_PARTITIONED_TABLE && + tblinfo[i].ispartition)) find_parents = false; } diff --git a/src/bin/pg_dump/meson.build b/src/bin/pg_dump/meson.build new file mode 100644 index 00000000000..b2fb7ac77fd --- /dev/null +++ b/src/bin/pg_dump/meson.build @@ -0,0 +1,105 @@ +# Copyright (c) 2022-2023, PostgreSQL Global Development Group + +pg_dump_common_sources = files( + 'compress_gzip.c', + 'compress_io.c', + 'compress_lz4.c', + 'compress_none.c', + 'dumputils.c', + 'parallel.c', + 'pg_backup_archiver.c', + 'pg_backup_custom.c', + 'pg_backup_db.c', + 'pg_backup_directory.c', + 'pg_backup_null.c', + 'pg_backup_tar.c', + 'pg_backup_utils.c', +) + +pg_dump_common = static_library('libpgdump_common', + pg_dump_common_sources, + c_pch: pch_postgres_fe_h, + dependencies: [frontend_code, libpq, lz4, zlib], + kwargs: internal_lib_args, +) + + +pg_dump_sources = files( + 'common.c', + 'pg_dump.c', + 'pg_dump_sort.c', +) + +if host_system == 'windows' + pg_dump_sources += rc_bin_gen.process(win32ver_rc, extra_args: [ + '--NAME', 'pg_dump', + '--FILEDESC', 'pg_dump - backup one PostgreSQL database',]) +endif + +pg_dump = executable('pg_dump', + pg_dump_sources, + link_with: [pg_dump_common], + dependencies: [frontend_code, libpq, zlib], + kwargs: default_bin_args, +) +bin_targets += pg_dump + + +pg_dumpall_sources = files( + 'pg_dumpall.c', +) + +if host_system == 'windows' + pg_dumpall_sources += rc_bin_gen.process(win32ver_rc, extra_args: [ + '--NAME', 'pg_dumpall', + '--FILEDESC', 'pg_dumpall - backup PostgreSQL databases']) +endif + +pg_dumpall = executable('pg_dumpall', + pg_dumpall_sources, + link_with: [pg_dump_common], + dependencies: [frontend_code, libpq, zlib], + kwargs: default_bin_args, +) +bin_targets += pg_dumpall + + +pg_restore_sources = files( + 'pg_restore.c', +) + +if host_system == 'windows' + pg_restore_sources += rc_bin_gen.process(win32ver_rc, extra_args: [ + '--NAME', 'pg_restore', + '--FILEDESC', 'pg_restore - restore PostgreSQL databases']) +endif + +pg_restore = executable('pg_restore', + pg_restore_sources, + link_with: [pg_dump_common], + dependencies: [frontend_code, libpq, zlib], + kwargs: default_bin_args, +) +bin_targets += pg_restore + +tests += { + 'name': 'pg_dump', + 'sd': meson.current_source_dir(), + 'bd': meson.current_build_dir(), + 'tap': { + 'env': { + 'GZIP_PROGRAM': gzip.path(), + 'LZ4': program_lz4.found() ? program_lz4.path() : '', + 'with_icu': icu.found() ? 'yes' : 'no', + }, + 'tests': [ + 't/001_basic.pl', + 't/002_pg_dump.pl', + 't/003_pg_dump_with_server.pl', + 't/004_pg_dump_parallel.pl', + 't/010_dump_connstr.pl', + ], + }, +} + +subdir('po', if_found: libintl) diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index b2ae4aaf046..96bd469147a 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -93,6 +93,7 @@ static RestorePass _tocEntryRestorePass(TocEntry *te); static bool _tocEntryIsACL(TocEntry *te); static void _disableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te); static void _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te); +static bool is_load_via_partition_root(TocEntry *te); static void buildTocEntryArrays(ArchiveHandle *AH); static void _moveBefore(TocEntry *pos, TocEntry *te); static int _discoverArchiveFormat(ArchiveHandle *AH); @@ -892,6 +893,8 @@ restore_toc_entry(ArchiveHandle *AH, TocEntry *te, bool is_parallel) } else { + bool use_truncate; + _disableTriggersIfNecessary(AH, te); /* Select owner and schema as necessary */ @@ -903,13 +906,24 @@ restore_toc_entry(ArchiveHandle *AH, TocEntry *te, bool is_parallel) /* * In parallel restore, if we created the table earlier in - * the run then we wrap the COPY in a transaction and - * precede it with a TRUNCATE. If archiving is not on - * this prevents WAL-logging the COPY. This obtains a - * speedup similar to that from using single_txn mode in - * non-parallel restores. + * this run (so that we know it is empty) and we are not + * restoring a load-via-partition-root data item then we + * wrap the COPY in a transaction and precede it with a + * TRUNCATE. If wal_level is set to minimal this prevents + * WAL-logging the COPY. This obtains a speedup similar + * to that from using single_txn mode in non-parallel + * restores. + * + * We mustn't do this for load-via-partition-root cases + * because some data might get moved across partition + * boundaries, risking deadlock and/or loss of previously + * loaded data. (We assume that all partitions of a + * partitioned table will be treated the same way.) */ - if (is_parallel && te->created) + use_truncate = is_parallel && te->created && + !is_load_via_partition_root(te); + + if (use_truncate) { /* * Parallel restore is always talking directly to a @@ -950,7 +964,7 @@ restore_toc_entry(ArchiveHandle *AH, TocEntry *te, bool is_parallel) AH->outputKind = OUTPUT_SQLCMDS; /* close out the transaction started above */ - if (is_parallel && te->created) + if (use_truncate) CommitTransaction(&AH->public); _enableTriggersIfNecessary(AH, te); @@ -1048,6 +1062,43 @@ _enableTriggersIfNecessary(ArchiveHandle *AH, TocEntry *te) fmtQualifiedId(te->namespace, te->tag)); } +/* + * Detect whether a TABLE DATA TOC item is performing "load via partition + * root", that is the target table is an ancestor partition rather than the + * table the TOC item is nominally for. + * + * In newer archive files this can be detected by checking for a special + * comment placed in te->defn. In older files we have to fall back to seeing + * if the COPY statement targets the named table or some other one. This + * will not work for data dumped as INSERT commands, so we could give a false + * negative in that case; fortunately, that's a rarely-used option. + */ +static bool +is_load_via_partition_root(TocEntry *te) +{ + if (te->defn && + strncmp(te->defn, "-- load via partition root ", 27) == 0) + return true; + if (te->copyStmt && *te->copyStmt) + { + PQExpBuffer copyStmt = createPQExpBuffer(); + bool result; + + /* + * Build the initial part of the COPY as it would appear if the + * nominal target table is the actual target. If we see anything + * else, it must be a load-via-partition-root case. + */ + appendPQExpBuffer(copyStmt, "COPY %s ", + fmtQualifiedId(te->namespace, te->tag)); + result = strncmp(te->copyStmt, copyStmt->data, copyStmt->len) != 0; + destroyPQExpBuffer(copyStmt); + return result; + } + /* Assume it's not load-via-partition-root */ + return false; +} + /* * This is a routine that is part of the dumper interface, hence the 'Archive*' parameter. */ @@ -3020,8 +3071,12 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH) res = res & ~REQ_DATA; } - /* If there's no definition command, there's no schema component */ - if (!te->defn || !te->defn[0]) + /* + * If there's no definition command, there's no schema component. Treat + * "load via partition root" comments as not schema. + */ + if (!te->defn || !te->defn[0] || + strncmp(te->defn, "-- load via partition root ", 27) == 0) res = res & ~REQ_SCHEMA; /* diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 03422bed2fe..cf075c88b2c 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -364,6 +364,7 @@ static void appendReloptionsArrayAH(PQExpBuffer buffer, const char *reloptions, static char *get_synchronized_snapshot(Archive *fout); static void setupDumpWorker(Archive *AHX); static TableInfo *getRootTableInfo(const TableInfo *tbinfo); +static bool forcePartitionRootLoad(const TableInfo *tbinfo); /* START MPP ADDITION */ @@ -2537,11 +2538,13 @@ dumpTableData_insert(Archive *fout, const void *dcontext) insertStmt = createPQExpBuffer(); /* - * When load-via-partition-root is set, get the root table name - * for the partition table, so that we can reload data through the - * root table. + * When load-via-partition-root is set or forced, get the root + * table name for the partition table, so that we can reload data + * through the root table. */ - if (dopt->load_via_partition_root && tbinfo->ispartition) + if (tbinfo->ispartition && + (dopt->load_via_partition_root || + forcePartitionRootLoad(tbinfo))) targettab = getRootTableInfo(tbinfo); else targettab = tbinfo; @@ -2739,6 +2742,35 @@ getRootTableInfo(const TableInfo *tbinfo) return parentTbinfo; } +/* + * forcePartitionRootLoad + * Check if we must force load_via_partition_root for this partition. + * + * This is required if any level of ancestral partitioned table has an + * unsafe partitioning scheme. + */ +static bool +forcePartitionRootLoad(const TableInfo *tbinfo) +{ + TableInfo *parentTbinfo; + + Assert(tbinfo->ispartition); + Assert(tbinfo->numParents == 1); + + parentTbinfo = tbinfo->parents[0]; + if (parentTbinfo->unsafe_partitions) + return true; + while (parentTbinfo->ispartition) + { + Assert(parentTbinfo->numParents == 1); + parentTbinfo = parentTbinfo->parents[0]; + if (parentTbinfo->unsafe_partitions) + return true; + } + + return false; +} + /* * dumpTableData - * dump the contents of a single table @@ -2753,34 +2785,40 @@ dumpTableData(Archive *fout, const TableDataInfo *tdinfo) PQExpBuffer copyBuf = createPQExpBuffer(); PQExpBuffer clistBuf = createPQExpBuffer(); DataDumperPtr dumpFn; + char *tdDefn = NULL; char *copyStmt; const char *copyFrom; /* We had better have loaded per-column details about this table */ Assert(tbinfo->interesting); + /* + * When load-via-partition-root is set or forced, get the root table name + * for the partition table, so that we can reload data through the root + * table. Then construct a comment to be inserted into the TOC entry's + * defn field, so that such cases can be identified reliably. + */ + if (tbinfo->ispartition && + (dopt->load_via_partition_root || + forcePartitionRootLoad(tbinfo))) + { + TableInfo *parentTbinfo; + + parentTbinfo = getRootTableInfo(tbinfo); + copyFrom = fmtQualifiedDumpable(parentTbinfo); + printfPQExpBuffer(copyBuf, "-- load via partition root %s", + copyFrom); + tdDefn = pg_strdup(copyBuf->data); + } + else + copyFrom = fmtQualifiedDumpable(tbinfo); + if (dopt->dump_inserts == 0) { /* Dump/restore using COPY */ dumpFn = dumpTableData_copy; - - /* - * When load-via-partition-root is set, get the root table name for - * the partition table, so that we can reload data through the root - * table. - */ - if (dopt->load_via_partition_root && tbinfo->ispartition) - { - TableInfo *parentTbinfo; - - parentTbinfo = getRootTableInfo(tbinfo); - copyFrom = fmtQualifiedDumpable(parentTbinfo); - } - else - copyFrom = fmtQualifiedDumpable(tbinfo); - /* must use 2 steps here 'cause fmtId is nonreentrant */ - appendPQExpBuffer(copyBuf, "COPY %s ", + printfPQExpBuffer(copyBuf, "COPY %s ", copyFrom); appendPQExpBuffer(copyBuf, "%s FROM stdin;\n", fmtCopyColumnList(tbinfo, clistBuf)); @@ -2808,6 +2846,7 @@ dumpTableData(Archive *fout, const TableDataInfo *tdinfo) .owner = tbinfo->rolname, .description = "TABLE DATA", .section = SECTION_DATA, + .createStmt = tdDefn, .copyStmt = copyStmt, .deps = &(tbinfo->dobj.dumpId), .nDeps = 1, @@ -8260,6 +8299,76 @@ getInherits(Archive *fout, int *numInherits) return inhinfo; } +/* + * getPartitioningInfo + * get information about partitioning + * + * For the most part, we only collect partitioning info about tables we + * intend to dump. However, this function has to consider all partitioned + * tables in the database, because we need to know about parents of partitions + * we are going to dump even if the parents themselves won't be dumped. + * + * Specifically, what we need to know is whether each partitioned table + * has an "unsafe" partitioning scheme that requires us to force + * load-via-partition-root mode for its children. Currently the only case + * for which we force that is hash partitioning on enum columns, since the + * hash codes depend on enum value OIDs which won't be replicated across + * dump-and-reload. There are other cases in which load-via-partition-root + * might be necessary, but we expect users to cope with them. + */ +void +getPartitioningInfo(Archive *fout) +{ + PQExpBuffer query; + PGresult *res; + int ntups; + + /* hash partitioning didn't exist before v11 */ + if (fout->remoteVersion < 110000) + return; + /* needn't bother if schema-only dump */ + if (fout->dopt->schemaOnly) + return; + + query = createPQExpBuffer(); + + /* + * Unsafe partitioning schemes are exactly those for which hash enum_ops + * appears among the partition opclasses. We needn't check partstrat. + * + * Note that this query may well retrieve info about tables we aren't + * going to dump and hence have no lock on. That's okay since we need not + * invoke any unsafe server-side functions. + */ + appendPQExpBufferStr(query, + "SELECT partrelid FROM pg_partitioned_table WHERE\n" + "(SELECT c.oid FROM pg_opclass c JOIN pg_am a " + "ON c.opcmethod = a.oid\n" + "WHERE opcname = 'enum_ops' " + "AND opcnamespace = 'pg_catalog'::regnamespace " + "AND amname = 'hash') = ANY(partclass)"); + + res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK); + + ntups = PQntuples(res); + + for (int i = 0; i < ntups; i++) + { + Oid tabrelid = atooid(PQgetvalue(res, i, 0)); + TableInfo *tbinfo; + + tbinfo = findTableByOid(tabrelid); + if (tbinfo == NULL) + pg_fatal("failed sanity check, table OID %u appearing in pg_partitioned_table not found", + tabrelid); + tbinfo->unsafe_partitions = true; + } + + PQclear(res); + + destroyPQExpBuffer(query); +} + /* * getIndexes * get information about every index on a dumpable table diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index a0bf7f4ce86..f437c62f6b3 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -341,6 +341,7 @@ typedef struct _tableInfo bool dummy_view; /* view's real definition must be postponed */ bool postponed_def; /* matview must be postponed into post-data */ bool ispartition; /* is table a partition? */ + bool unsafe_partitions; /* is it an unsafe partitioned table? */ /* * These fields are computed only if we decide the table is interesting @@ -745,6 +746,7 @@ extern ConvInfo *getConversions(Archive *fout, int *numConversions); extern TableInfo *getTables(Archive *fout, int *numTables); extern void getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables); extern InhInfo *getInherits(Archive *fout, int *numInherits); +extern void getPartitioningInfo(Archive *fout); extern void getIndexes(Archive *fout, TableInfo tblinfo[], int numTables); extern void getExtendedStatistics(Archive *fout); extern void getConstraints(Archive *fout, TableInfo tblinfo[], int numTables); diff --git a/src/bin/pg_dump/t/004_pg_dump_parallel.pl b/src/bin/pg_dump/t/004_pg_dump_parallel.pl new file mode 100644 index 00000000000..f41c2fa2233 --- /dev/null +++ b/src/bin/pg_dump/t/004_pg_dump_parallel.pl @@ -0,0 +1,81 @@ + +# Copyright (c) 2021-2023, PostgreSQL Global Development Group + +use strict; +use warnings; + +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More; + +my $dbname1 = 'regression_src'; +my $dbname2 = 'regression_dest1'; +my $dbname3 = 'regression_dest2'; + +my $node = PostgreSQL::Test::Cluster->new('main'); +$node->init; +$node->start; + +my $backupdir = $node->backup_dir; + +$node->run_log([ 'createdb', $dbname1 ]); +$node->run_log([ 'createdb', $dbname2 ]); +$node->run_log([ 'createdb', $dbname3 ]); + +$node->safe_psql( + $dbname1, + qq{ +create type digit as enum ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); + +-- plain table with index +create table tplain (en digit, data int unique); +insert into tplain select (x%10)::text::digit, x from generate_series(1,1000) x; + +-- non-troublesome hashed partitioning +create table ths (mod int, data int, unique(mod, data)) partition by hash(mod); +create table ths_p1 partition of ths for values with (modulus 3, remainder 0); +create table ths_p2 partition of ths for values with (modulus 3, remainder 1); +create table ths_p3 partition of ths for values with (modulus 3, remainder 2); +insert into ths select (x%10), x from generate_series(1,1000) x; + +-- dangerous hashed partitioning +create table tht (en digit, data int, unique(en, data)) partition by hash(en); +create table tht_p1 partition of tht for values with (modulus 3, remainder 0); +create table tht_p2 partition of tht for values with (modulus 3, remainder 1); +create table tht_p3 partition of tht for values with (modulus 3, remainder 2); +insert into tht select (x%10)::text::digit, x from generate_series(1,1000) x; + }); + +$node->command_ok( + [ + 'pg_dump', '-Fd', '--no-sync', '-j2', '-f', "$backupdir/dump1", + $node->connstr($dbname1) + ], + 'parallel dump'); + +$node->command_ok( + [ + 'pg_restore', '-v', + '-d', $node->connstr($dbname2), + '-j3', "$backupdir/dump1" + ], + 'parallel restore'); + +$node->command_ok( + [ + 'pg_dump', '-Fd', + '--no-sync', '-j2', + '-f', "$backupdir/dump2", + '--inserts', $node->connstr($dbname1) + ], + 'parallel dump as inserts'); + +$node->command_ok( + [ + 'pg_restore', '-v', + '-d', $node->connstr($dbname3), + '-j3', "$backupdir/dump2" + ], + 'parallel restore as inserts'); + +done_testing(); From 71613a3c4738382207f67902da2f8a016b0987c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=98=E4=B8=8E=E9=BE=9910336563?= Date: Tue, 29 Jul 2025 15:15:41 +0800 Subject: [PATCH 097/260] Fix CI for Cloudberry Since we cherry-picked the Postgres pg_dump commit to Cloudberry, we need to update the files to support Cloudberry CI to let me pass. --- src/bin/pg_dump/pg_dump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index cf075c88b2c..f522508fd2a 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -8359,7 +8359,7 @@ getPartitioningInfo(Archive *fout) tbinfo = findTableByOid(tabrelid); if (tbinfo == NULL) - pg_fatal("failed sanity check, table OID %u appearing in pg_partitioned_table not found", + fatal("failed sanity check, table OID %u appearing in pg_partitioned_table not found", tabrelid); tbinfo->unsafe_partitions = true; } From f41369fdc21e58e16bc69977e6a9445c7acbf58d Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Fri, 1 Aug 2025 16:55:26 +0800 Subject: [PATCH 098/260] Replace pip3 download with curl for Python deps Replace pip3 download commands with curl for downloading psutil, PyYAML, PyGreSQL and mock packages in gpMgmt/bin/Makefile. This change unifies the download mechanism to use curl consistently for all Python dependencies, avoiding potential pip3 download compatibility issues across different environments. Changes: - Remove pip3 download commands for psutil, PyYAML, PyGreSQL & mock - Use curl to download packages directly from PyPI - Maintain existing wheel and cython installation for PyYAML build - Keep the same package versions and download locations Also, add curl and pip3 dependency detection in configure.ac file for better user experience. When `--with-pythonsrc-ext` option is enabled, configure can check the required dependencies early. --- configure | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/configure b/configure index 4853631e439..52cc4739b4d 100755 --- a/configure +++ b/configure @@ -18556,7 +18556,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18602,7 +18602,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18626,7 +18626,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18671,7 +18671,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18695,7 +18695,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; From caddc4477cd0d3ba3fb5417ad7d2a12b1f434a85 Mon Sep 17 00:00:00 2001 From: Haolin Wang Date: Sat, 29 Oct 2022 19:51:31 +0800 Subject: [PATCH 099/260] fast-analyze: implement fast ANALYZE for append-optimized tables Prior to this patch, GPDB ANALYZE on large AO/CO tables is a time-consuming process. This is because PostgreSQL's two-stage sampling method didn't work well on AO/CO tables. GPDB had to unpack all varblocks till to the target tuples, which could easily result in almost full table scanning if sampling tuples fall around the end of the table. Denis Smirnov 's PR greenplum-db#11190 introduced a `logical` block concept containing fixed number of tuples to support PG's two-stage sampling mechanism, also it sped up fetching target tuples by skipping uncompression of varblock content. Thanks for Denis Smirnov's great contribution! Also, thanks for Ashwin Agrawal 's advice on leveraging AO Block Directory to locate the target sample row without scanning unnecessary varblocks, which brings another significant performance improvement with caching warmed up. In addition, - GPDB has AO/CO specific feature that storing total tuple count in an auxiliary table which could be easily obtained without too much overhead. - GPDB has `fetch` facilities support finding varblock based on AOTupleId without uncompressing unnecessary varblocks. Based on above works and properties, we re-implemented AO/CO ANALYZE sampling by combining Knuth's Algorithm S and varblock skipping in this patch, to address the time-consuming problem. We didn't impelment two-stage sampling for AO/CO as the total size of data set (total tuple count) could be known in advance hence Algorithm S is sufficient to satisfy the sampling requirement. Special thanks Zhenghua Lyu (https://kainwen.com/) for detail analysis of Algorithm S: [Analysis of Algorithm S](https://kainwen.com/2022/11/06/analysis-of-algorithm-s) and follow up [discussion](https://stackoverflow.com/questions/74345921/performance-comparsion-algorithm-s-and-algorithm-z?noredirect=1#comment131292564_74345921) Here is a simple example to show the optimization effect: [AO with compression, with Fast Analyze enabled] create table ao (a int, b inet, c inet) with (appendonly=true, orientation=row, compresstype=zlib, compresslevel=3); insert into ao select i, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text))::inet, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text))::inet from generate_series(1,10000000)i; insert into ao select * from ao; insert into ao select * from ao; insert into ao select * from ao; insert into ao select * from ao; insert into ao select * from ao; insert into ao select * from ao; insert into ao select * from ao; select count(*) from ao; count ------------ 1280000000 (1 row) gpadmin=# analyze ao; ANALYZE Time: 2814.939 ms (00:02.815) gpadmin=# [with block directory and caching warmed] gpadmin=# analyze ao; ANALYZE Time: 1605.342 ms (00:01.605) gpadmin=# [Legacy Analyze] gpadmin=# analyze ao; ANALYZE Time: 59711.905 ms (00:59.712) gpadmin=# [Heap without compression] create table heap (a int, b inet, c inet); insert same data set gpadmin=# analyze heap; ANALYZE Time: 2087.694 ms (00:02.088) gpadmin=# Co-authored-by: Soumyadeep Chakraborty Reviewed by: Ashwin Agrawal, Soumyadeep Chakraborty, Zhenglong Li, Qing Ma --- src/backend/access/aocs/aocsam.c | 465 ++++++++++++- src/backend/access/aocs/aocsam_handler.c | 94 ++- src/backend/access/appendonly/appendonlyam.c | 357 +++++++++- .../access/appendonly/appendonlyam_handler.c | 107 ++- .../appendonly/appendonlyblockdirectory.c | 175 ++++- src/backend/access/heap/heapam_handler.c | 1 - src/backend/commands/analyze.c | 132 ++-- src/backend/commands/analyzefuncs.c | 3 + src/backend/utils/datumstream/datumstream.c | 2 +- src/backend/utils/misc/sampling.c | 8 +- src/include/access/tableam.h | 48 +- src/include/cdb/cdbaocsam.h | 156 +++-- src/include/cdb/cdbappendonlyam.h | 48 +- src/include/cdb/cdbappendonlyblockdirectory.h | 63 +- src/include/commands/vacuum.h | 7 - src/include/utils/datumstream.h | 4 +- src/include/utils/sampling.h | 2 +- src/test/isolation2/expected/ao_blkdir.out | 318 +++++++++ .../isolation2/input/uao/fast_analyze.source | 349 ++++++++++ src/test/isolation2/isolation2_schedule | 2 + .../isolation2/output/uao/fast_analyze.source | 632 ++++++++++++++++++ src/test/isolation2/sql/ao_blkdir.sql | 151 +++++ 22 files changed, 2912 insertions(+), 212 deletions(-) create mode 100644 src/test/isolation2/input/uao/fast_analyze.source create mode 100644 src/test/isolation2/output/uao/fast_analyze.source diff --git a/src/backend/access/aocs/aocsam.c b/src/backend/access/aocs/aocsam.c index a3f2b597977..d3e5c15802a 100644 --- a/src/backend/access/aocs/aocsam.c +++ b/src/backend/access/aocs/aocsam.c @@ -124,6 +124,11 @@ open_all_datumstreamread_segfiles(AOCSScanDesc scan, AOCSFileSegInfo *segInfo) RelationOpenSmgr(rel); open_datumstreamread_segfile(basepath, rel, segInfo, ds[attno], attno); + + /* skip reading block for ANALYZE */ + if ((scan->rs_base.rs_flags & SO_TYPE_ANALYZE) != 0) + continue; + datumstreamread_block(ds[attno], blockDirectory, attno); AOCSScanDesc_UpdateTotalBytesRead(scan, attno); @@ -467,6 +472,46 @@ close_cur_scan_seg(AOCSScanDesc scan) AppendOnlyBlockDirectory_End_forInsert(scan->blockDirectory); } +static void +aocs_blkdirscan_init(AOCSScanDesc scan) +{ + if (scan->aocsfetch == NULL) + { + int natts = RelationGetNumberOfAttributes(scan->rs_base.rs_rd); + scan->proj = palloc(natts * sizeof(*scan->proj)); + MemSet(scan->proj, true, natts * sizeof(*scan->proj)); + + scan->aocsfetch = aocs_fetch_init(scan->rs_base.rs_rd, + scan->rs_base.rs_snapshot, + scan->appendOnlyMetaDataSnapshot, + scan->proj); + } + + scan->blkdirscan = palloc0(sizeof(AOBlkDirScanData)); + AOBlkDirScan_Init(scan->blkdirscan, &scan->aocsfetch->blockDirectory); +} + +static void +aocs_blkdirscan_finish(AOCSScanDesc scan) +{ + AOBlkDirScan_Finish(scan->blkdirscan); + pfree(scan->blkdirscan); + scan->blkdirscan = NULL; + + if (scan->aocsfetch != NULL) + { + aocs_fetch_finish(scan->aocsfetch); + pfree(scan->aocsfetch); + scan->aocsfetch = NULL; + } + + if (scan->proj != NULL) + { + pfree(scan->proj); + scan->proj = NULL; + } +} + /* * aocs_beginrangescan * @@ -552,6 +597,7 @@ aocs_beginscan_internal(Relation relation, AttrNumber natts; Oid visimaprelid; Oid visimapidxid; + Oid blkdirrelid; scan = (AOCSScanDesc) palloc0(sizeof(AOCSScanDescData)); scan->rs_base.rs_rd = relation; @@ -592,6 +638,12 @@ aocs_beginscan_internal(Relation relation, scan->columnScanInfo.ds = NULL; + if ((flags & SO_TYPE_ANALYZE) != 0) + { + scan->segfirstrow = 0; + scan->targrow = 0; + } + GetAppendOnlyEntryAttributes(RelationGetRelid(relation), NULL, NULL, @@ -599,16 +651,24 @@ aocs_beginscan_internal(Relation relation, NULL); GetAppendOnlyEntryAuxOids(relation, - NULL, NULL, NULL, + NULL, &blkdirrelid, NULL, &visimaprelid, &visimapidxid); if (scan->total_seg != 0) + { AppendOnlyVisimap_Init(&scan->visibilityMap, visimaprelid, visimapidxid, AccessShareLock, appendOnlyMetaDataSnapshot); + if ((flags & SO_TYPE_ANALYZE) != 0) + { + if (OidIsValid(blkdirrelid)) + aocs_blkdirscan_init(scan); + } + } + return scan; } @@ -666,6 +726,9 @@ aocs_endscan(AOCSScanDesc scan) if (scan->total_seg != 0) AppendOnlyVisimap_Finish(&scan->visibilityMap, AccessShareLock); + if (scan->blkdirscan != NULL) + aocs_blkdirscan_finish(scan); + /* GPDB should backport this to upstream */ if (scan->rs_base.rs_flags & SO_TEMP_SNAPSHOT) UnregisterSnapshot(scan->rs_base.rs_snapshot); @@ -675,6 +738,396 @@ aocs_endscan(AOCSScanDesc scan) pfree(scan); } +static int +aocs_locate_target_segment(AOCSScanDesc scan, int64 targrow) +{ + int64 rowcount; + + for (int i = scan->cur_seg; i < scan->total_seg; i++) + { + if (i < 0) + continue; + + rowcount = scan->seginfo[i]->total_tupcount; + if (rowcount <= 0) + continue; + + if (scan->segfirstrow + rowcount - 1 >= targrow) + { + /* found the target segment */ + return i; + } + + /* continue next segment */ + scan->segfirstrow += rowcount; + scan->segrowsprocessed = 0; + } + + /* row is beyond the total number of rows in the relation */ + return -1; +} + +/* + * block directory based get_target_tuple() + */ +static bool +aocs_blkdirscan_get_target_tuple(AOCSScanDesc scan, int64 targrow, TupleTableSlot *slot) +{ + int segno, segidx; + int64 rownum = -1; + int64 rowsprocessed; + AOTupleId aotid; + int ncols = scan->columnScanInfo.relationTupleDesc->natts; + AppendOnlyBlockDirectory *blkdir = &scan->aocsfetch->blockDirectory; + + Assert(scan->blkdirscan != NULL); + + /* locate the target segment */ + segidx = aocs_locate_target_segment(scan, targrow); + if (segidx < 0) + return false; + + /* next starting position in locating segfile */ + scan->cur_seg = segidx; + + segno = scan->seginfo[segidx]->segno; + Assert(segno > InvalidFileSegNumber && segno <= AOTupleId_MaxSegmentFileNum); + + /* + * Note: It is safe to assume that the scan's segfile array and the + * blockdir's segfile array are identical. Otherwise, we should stop + * processing and throw an exception to make the error visible. + */ + if (blkdir->segmentFileInfo[segidx]->segno != segno) + { + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("segfile array contents in both scan descriptor " + "and block directory are not identical on " + "append-optimized relation '%s'", + RelationGetRelationName(blkdir->aoRel)))); + } + + /* + * Unlike ao_row, we set currentSegmentFileNum for ao_column here + * just for passing the assertion in extract_minipage() called by + * AOBlkDirScan_GetRowNum(). + * Since we don't invoke AppendOnlyBlockDirectory_GetCachedEntry() + * for ao_column, it shoule be restored back to the original value + * for AppendOnlyBlockDirectory_GetEntry() working properly. + */ + int currentSegmentFileNum = blkdir->currentSegmentFileNum; + blkdir->currentSegmentFileNum = blkdir->segmentFileInfo[segidx]->segno; + + /* locate the target row by seqscan block directory */ + for (int col = 0; col < ncols; col++) + { + /* + * "segfirstrow" should be always pointing to the first row of + * a new segfile, only locate_target_segment could update + * its value. + * + * "segrowsprocessed" is used for tracking the position of + * processed rows in the current segfile. + */ + rowsprocessed = scan->segfirstrow + scan->segrowsprocessed; + + if ((scan->rs_base.rs_rd)->rd_att->attrs[col].attisdropped) + continue; + + rownum = AOBlkDirScan_GetRowNum(scan->blkdirscan, + segno, + col, + targrow, + &rowsprocessed); + + elog(DEBUG2, "AOBlkDirScan_GetRowNum(segno: %d, col: %d, targrow: %ld): " + "[segfirstrow: %ld, segrowsprocessed: %ld, rownum: %ld, cached_mpentry_num: %d]", + segno, col, targrow, scan->segfirstrow, scan->segrowsprocessed, rownum, + blkdir->cached_mpentry_num); + + if (rownum < 0) + continue; + + scan->segrowsprocessed = rowsprocessed - scan->segfirstrow; + + /* + * Found a column represented in the block directory. + * Here we just look for the 1st such column, no need + * to read other columns within the same row. + */ + break; + } + + /* restore to the original value as above mentioned */ + blkdir->currentSegmentFileNum = currentSegmentFileNum; + + if (rownum < 0) + return false; + + /* form the target tuple TID */ + AOTupleIdInit(&aotid, segno, rownum); + + ExecClearTuple(slot); + + /* fetch the target tuple */ + if(!aocs_fetch(scan->aocsfetch, &aotid, slot)) + return false; + + /* OK to return this tuple */ + ExecStoreVirtualTuple(slot); + pgstat_count_heap_fetch(scan->rs_base.rs_rd); + + return true; +} + +/* + * returns the segfile number in which `targrow` locates + */ +static int +aocs_getsegment(AOCSScanDesc scan, int64 targrow) +{ + int segno, segidx; + + /* locate the target segment */ + segidx = aocs_locate_target_segment(scan, targrow); + if (segidx < 0) + { + /* done reading all segments */ + close_cur_scan_seg(scan); + scan->cur_seg = -1; + return -1; + } + + segno = scan->seginfo[segidx]->segno; + Assert(segno > InvalidFileSegNumber && segno <= AOTupleId_MaxSegmentFileNum); + + if (segidx > scan->cur_seg) + { + close_cur_scan_seg(scan); + /* adjust cur_seg to fit for open_next_scan_seg() */ + scan->cur_seg = segidx - 1; + if (open_next_scan_seg(scan) >= 0) + { + /* new segment, make sure segrowsprocessed was reset */ + Assert(scan->segrowsprocessed == 0); + } + else + { + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("Unexpected behavior, failed to open segno %d during scanning AOCO table %s", + segno, RelationGetRelationName(scan->rs_base.rs_rd)))); + } + } + + return segno; +} + +static inline int +aocs_block_remaining_rows(DatumStreamRead *ds) +{ + return (ds->blockRowCount - ds->blockRowsProcessed); +} + +/* + * fetches a single column value corresponding to `endrow` (equals to `targrow`) + */ +static bool +aocs_gettuple_column(AOCSScanDesc scan, AttrNumber attno, int64 startrow, int64 endrow, bool chkvisimap, TupleTableSlot *slot) +{ + bool isSnapshotAny = (scan->rs_base.rs_snapshot == SnapshotAny); + DatumStreamRead *ds = scan->columnScanInfo.ds[attno]; + int segno = scan->seginfo[scan->cur_seg]->segno; + AOTupleId aotid; + bool ret = true; + int64 rowstoprocess, nrows, rownum; + Datum *values; + bool *nulls; + + if (ds->blockFirstRowNum <= 0) + elog(ERROR, "AOCO varblock->blockFirstRowNum should be greater than zero."); + + Assert(segno > InvalidFileSegNumber && segno <= AOTupleId_MaxSegmentFileNum); + Assert(startrow <= endrow); + + rowstoprocess = endrow - startrow + 1; + nrows = ds->blockRowsProcessed + rowstoprocess; + rownum = ds->blockFirstRowNum + nrows - 1; + + /* form the target tuple TID */ + AOTupleIdInit(&aotid, segno, rownum); + + if (chkvisimap && !isSnapshotAny && !AppendOnlyVisimap_IsVisible(&scan->visibilityMap, &aotid)) + { + if (slot != NULL) + ExecClearTuple(slot); + + ret = false; + /* must update tracking vars before return */ + goto out; + } + + /* rowNumInBlock = rowNum - blockFirstRowNum */ + datumstreamread_find(ds, rownum - ds->blockFirstRowNum); + + values = slot->tts_values; + nulls = slot->tts_isnull; + + datumstreamread_get(ds, &(values[attno]), &(nulls[attno])); + +out: + /* update rows processed */ + ds->blockRowsProcessed += rowstoprocess; + + return ret; +} + +/* + * fetches all columns of the target tuple corresponding to `targrow` + */ +static bool +aocs_gettuple(AOCSScanDesc scan, int64 targrow, TupleTableSlot *slot) +{ + bool ret = true; + int64 rowcount = -1; + int64 rowstoprocess; + bool chkvisimap = true; + + Assert(scan->cur_seg >= 0); + Assert(slot != NULL); + + ExecClearTuple(slot); + + rowstoprocess = targrow - scan->segfirstrow + 1; + + /* read from scan->cur_seg */ + for (AttrNumber i = 0; i < scan->columnScanInfo.num_proj_atts; i++) + { + AttrNumber attno = scan->columnScanInfo.proj_atts[i]; + DatumStreamRead *ds = scan->columnScanInfo.ds[attno]; + int64 startrow = scan->segfirstrow + scan->segrowsprocessed; + + if (ds->blockRowCount <= 0) + ; /* haven't read block */ + else + { + /* block was read */ + rowcount = aocs_block_remaining_rows(ds); + Assert(rowcount >= 0); + + if (startrow + rowcount - 1 >= targrow) + { + if (!aocs_gettuple_column(scan, attno, startrow, targrow, chkvisimap, slot)) + { + ret = false; + /* must update tracking vars before return */ + goto out; + } + + chkvisimap = false; + /* haven't finished scanning on current block */ + continue; + } + else + startrow += rowcount; /* skip scanning remaining rows */ + } + + /* + * Keep reading block headers until we find the block containing + * the target row. + */ + while (true) + { + elog(DEBUG2, "aocs_gettuple(): [targrow: %ld, currow: %ld, diff: %ld, " + "startrow: %ld, rowcount: %ld, segfirstrow: %ld, segrowsprocessed: %ld, nth: %d, " + "blockRowCount: %d, blockRowsProcessed: %d]", targrow, startrow + rowcount - 1, + startrow + rowcount - 1 - targrow, startrow, rowcount, scan->segfirstrow, + scan->segrowsprocessed, datumstreamread_nth(ds), ds->blockRowCount, + ds->blockRowsProcessed); + + if (datumstreamread_block_info(ds)) + { + rowcount = ds->blockRowCount; + Assert(rowcount > 0); + + /* new block, reset blockRowsProcessed */ + ds->blockRowsProcessed = 0; + + if (startrow + rowcount - 1 >= targrow) + { + /* read a new buffer to consume */ + datumstreamread_block_content(ds); + + if (!aocs_gettuple_column(scan, attno, startrow, targrow, chkvisimap, slot)) + { + ret = false; + /* must update tracking vars before return */ + goto out; + } + + chkvisimap = false; + /* done this column */ + break; + } + + startrow += rowcount; + AppendOnlyStorageRead_SkipCurrentBlock(&ds->ao_read); + /* continue next block */ + } + else + pg_unreachable(); /* unreachable code */ + } + } + +out: + /* update rows processed */ + scan->segrowsprocessed = rowstoprocess; + + if (ret) + { + ExecStoreVirtualTuple(slot); + pgstat_count_heap_getnext(scan->rs_base.rs_rd); + } + + return ret; +} + +/* + * Given a specific target row number 'targrow' (in the space of all row numbers + * physically present in the table, i.e. across all segfiles), scan and return + * the corresponding tuple in 'slot'. + * + * If the tuple is visible, return true. Otherwise, return false. + */ +bool +aocs_get_target_tuple(AOCSScanDesc aoscan, int64 targrow, TupleTableSlot *slot) +{ + if (aoscan->columnScanInfo.relationTupleDesc == NULL) + { + aoscan->columnScanInfo.relationTupleDesc = slot->tts_tupleDescriptor; + /* Pin it! ... and of course release it upon destruction / rescan */ + PinTupleDesc(aoscan->columnScanInfo.relationTupleDesc); + initscan_with_colinfo(aoscan); + } + + if (aoscan->blkdirscan != NULL) + return aocs_blkdirscan_get_target_tuple(aoscan, targrow, slot); + + if (aocs_getsegment(aoscan, targrow) < 0) + { + /* all done */ + ExecClearTuple(slot); + return false; + } + + /* + * Unlike AO_ROW, AO_COLUMN may have different varblocks + * for different columns, so we get per-column tuple directly + * on the way of walking per-column varblock. + */ + return aocs_gettuple(aoscan, targrow, slot); +} static pg_attribute_hot_inline bool aocs_getnext_noqual(AOCSScanDesc scan, ScanDirection direction, TupleTableSlot *slot) @@ -689,6 +1142,9 @@ aocs_getnext_noqual(AOCSScanDesc scan, ScanDirection direction, TupleTableSlot * Assert(ScanDirectionIsForward(direction)); + /* should not be in ANALYZE - we use a different API */ + Assert((scan->rs_base.rs_flags & SO_TYPE_ANALYZE) == 0); + if (scan->columnScanInfo.relationTupleDesc == NULL) { scan->columnScanInfo.relationTupleDesc = slot->tts_tupleDescriptor; @@ -782,9 +1238,6 @@ aocs_getnext_noqual(AOCSScanDesc scan, ScanDirection direction, TupleTableSlot * * The tuple is invisible. * In `analyze`, we can simply return false */ - if ((scan->rs_base.rs_flags & SO_TYPE_ANALYZE) != 0) - return false; - rowNum = INT64CONST(-1); visible_pass = false; continue; /* not break, need advance for other cols */ @@ -930,11 +1383,7 @@ aocs_getnext_withqual(AOCSScanDesc scan, ScanDirection direction, TupleTableSlot { /* * The tuple is invisible. - * In `analyze`, we can simply return false */ - if ((scan->rs_base.rs_flags & SO_TYPE_ANALYZE) != 0) - return false; - rowNum = INT64CONST(-1); visible_pass = false; continue; /* not break, need advance for other cols */ diff --git a/src/backend/access/aocs/aocsam_handler.c b/src/backend/access/aocs/aocsam_handler.c index 504e9c0fb7a..22ca114cfe0 100644 --- a/src/backend/access/aocs/aocsam_handler.c +++ b/src/backend/access/aocs/aocsam_handler.c @@ -47,6 +47,7 @@ #include "utils/lsyscache.h" #include "utils/pg_rusage.h" #include "utils/guc.h" +#include "utils/sampling.h" #define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID) @@ -1623,10 +1624,13 @@ static bool aoco_scan_analyze_next_block(TableScanDesc scan, BlockNumber blockno, BufferAccessStrategy bstrategy) { - AOCSScanDesc aoscan = (AOCSScanDesc) scan; - aoscan->targetTupleId = blockno; - - return true; + /* + * For append-optimized relations, we use a separate sampling + * method. See table_relation_acquire_sample_rows(). + */ + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("API not supported for appendoptimized relations"))); } static bool @@ -1634,28 +1638,78 @@ aoco_scan_analyze_next_tuple(TableScanDesc scan, TransactionId OldestXmin, double *liverows, double *deadrows, TupleTableSlot *slot) { - AOCSScanDesc aoscan = (AOCSScanDesc) scan; - bool ret = false; + /* + * For append-optimized relations, we use a separate sampling + * method. See table_relation_acquire_sample_rows(). + */ + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("API not supported for appendoptimized relations"))); +} - /* skip several tuples if they are not sampling target */ - while (aoscan->targetTupleId > aoscan->nextTupleId) - { - aoco_getnextslot(scan, ForwardScanDirection, slot); - aoscan->nextTupleId++; - } +static int +aoco_acquire_sample_rows(Relation onerel, int elevel, HeapTuple *rows, + int targrows, double *totalrows, double *totaldeadrows) +{ + int numrows = 0; /* # rows now in reservoir */ + double liverows = 0; /* # live rows seen */ + double deadrows = 0; /* # dead rows seen */ - if (aoscan->targetTupleId == aoscan->nextTupleId) + Assert(targrows > 0); + + TableScanDesc scan = table_beginscan_analyze(onerel); + TupleTableSlot *slot = table_slot_create(onerel, NULL); + AOCSScanDesc aocoscan = (AOCSScanDesc) scan; + + int64 totaltupcount = AOCSScanDesc_TotalTupCount(aocoscan); + int64 totaldeadtupcount = 0; + if (aocoscan->total_seg > 0 ) + totaldeadtupcount = AppendOnlyVisimap_GetRelationHiddenTupleCount(&aocoscan->visibilityMap); + /* + * The conversion from int64 to double (53 significant bits) is safe as the + * AOTupleId is 48bits, the max value of totalrows is never greater than + * AOTupleId_MaxSegmentFileNum * AOTupleId_MaxRowNum (< 48 significant bits). + */ + *totalrows = (double) (totaltupcount - totaldeadtupcount); + *totaldeadrows = (double) totaldeadtupcount; + + /* Prepare for sampling tuple numbers */ + RowSamplerData rs; + RowSampler_Init(&rs, *totalrows, targrows, random()); + + while (RowSampler_HasMore(&rs)) { - ret = aoco_getnextslot(scan, ForwardScanDirection, slot); - aoscan->nextTupleId++; + aocoscan->targrow = RowSampler_Next(&rs); + + vacuum_delay_point(); - if (ret) - *liverows += 1; + if (aocs_get_target_tuple(aocoscan, aocoscan->targrow, slot)) + { + rows[numrows++] = ExecCopySlotHeapTuple(slot); + liverows++; + } else - *deadrows += 1; /* if return an invisible tuple */ + deadrows++; + + ExecClearTuple(slot); } - return ret; + ExecDropSingleTupleTableSlot(slot); + table_endscan(scan); + + /* + * Emit some interesting relation info + */ + ereport(elevel, + (errmsg("\"%s\": scanned " INT64_FORMAT " rows, " + "containing %.0f live rows and %.0f dead rows; " + "%d rows in sample, %.0f accurate total live rows, " + "%.f accurate total dead rows", + RelationGetRelationName(onerel), + rs.m, liverows, deadrows, numrows, + *totalrows, *totaldeadrows))); + + return numrows; } static double @@ -2588,6 +2642,7 @@ static TableAmRoutine ao_column_methods = { .relation_vacuum = aoco_vacuum_rel, .scan_analyze_next_block = aoco_scan_analyze_next_block, .scan_analyze_next_tuple = aoco_scan_analyze_next_tuple, + .relation_acquire_sample_rows = aoco_acquire_sample_rows, .index_build_range_scan = aoco_index_build_range_scan, .index_validate_scan = aoco_index_validate_scan, @@ -2602,7 +2657,6 @@ static TableAmRoutine ao_column_methods = { .scan_bitmap_next_tuple = aoco_scan_bitmap_next_tuple, .scan_sample_next_block = aoco_scan_sample_next_block, .scan_sample_next_tuple = aoco_scan_sample_next_tuple, - .acquire_sample_rows = acquire_sample_rows, .amoptions = ao_amoptions, .swap_relation_files = aoco_swap_relation_files, diff --git a/src/backend/access/appendonly/appendonlyam.c b/src/backend/access/appendonly/appendonlyam.c index 2f590a8678e..508ddcfbaa9 100755 --- a/src/backend/access/appendonly/appendonlyam.c +++ b/src/backend/access/appendonly/appendonlyam.c @@ -1118,6 +1118,305 @@ getNextBlock(AppendOnlyScanDesc scan) return true; } +static int +appendonly_locate_target_segment(AppendOnlyScanDesc scan, int64 targrow) +{ + int64 rowcount; + + for (int i = scan->aos_segfiles_processed - 1; i < scan->aos_total_segfiles; i++) + { + if (i < 0) + continue; + + rowcount = scan->aos_segfile_arr[i]->total_tupcount; + if (rowcount <= 0) + continue; + + if (scan->segfirstrow + rowcount - 1 >= targrow) + { + /* found the target segment */ + return i; + } + + /* continue next segment */ + scan->segfirstrow += rowcount; + scan->segrowsprocessed = 0; + } + + /* row is beyond the total number of rows in the relation */ + return -1; +} + +/* + * returns the segfile number in which `targrow` locates + */ +static int +appendonly_getsegment(AppendOnlyScanDesc scan, int64 targrow) +{ + int segidx, segno; + + /* locate the target segment */ + segidx = appendonly_locate_target_segment(scan, targrow); + if (segidx < 0) + { + CloseScannedFileSeg(scan); + + /* done reading all segfiles */ + Assert(scan->aos_done_all_segfiles); + + return -1; + } + + if (segidx + 1 > scan->aos_segfiles_processed) + { + /* done current segfile */ + CloseScannedFileSeg(scan); + /* + * Adjust aos_segfiles_processed to guide + * SetNextFileSegForRead() opening next + * right segfile. + */ + scan->aos_segfiles_processed = segidx; + } + + segno = scan->aos_segfile_arr[segidx]->segno; + Assert(segno > InvalidFileSegNumber && segno <= AOTupleId_MaxSegmentFileNum); + + if (scan->aos_need_new_segfile) + { + if (SetNextFileSegForRead(scan)) + { + Assert(scan->segrowsprocessed == 0); + scan->needNextBuffer = true; + } + else + { + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("Unexpected behavior, failed to open segno %d during scanning AO table %s", + segno, RelationGetRelationName(scan->aos_rd)))); + } + } + + return segno; +} + +static inline int64 +appendonly_block_remaining_rows(AppendOnlyScanDesc scan) +{ + return (scan->executorReadBlock.rowCount - scan->executorReadBlock.blockRowsProcessed); +} + +/* + * locates the block in which `targrow` exists + */ +static void +appendonly_getblock(AppendOnlyScanDesc scan, int64 targrow, int64 *startrow) +{ + AppendOnlyExecutorReadBlock *varblock = &scan->executorReadBlock; + int64 rowcount = -1; + + if (!scan->needNextBuffer) + { + /* we have a current block */ + rowcount = appendonly_block_remaining_rows(scan); + Assert(rowcount >= 0); + + if (*startrow + rowcount - 1 >= targrow) + { + /* row lies in current block, nothing to do */ + return; + } + else + { + /* skip scanning remaining rows */ + *startrow += rowcount; + scan->needNextBuffer = true; + } + } + + /* + * Keep reading block headers until we find the block containing + * the target row. + */ + while (true) + { + elog(DEBUG2, "appendonly_getblock(): [targrow: %ld, currow: %ld, diff: %ld, " + "startrow: %ld, rowcount: %ld, segfirstrow: %ld, segrowsprocessed: %ld, " + "blockRowsProcessed: %ld, blockRowCount: %d]", targrow, *startrow + rowcount - 1, + *startrow + rowcount - 1 - targrow, *startrow, rowcount, scan->segfirstrow, + scan->segrowsprocessed, varblock->blockRowsProcessed, + varblock->rowCount); + + if (AppendOnlyExecutorReadBlock_GetBlockInfo(&scan->storageRead, varblock)) + { + /* new block, reset blockRowsProcessed */ + varblock->blockRowsProcessed = 0; + rowcount = appendonly_block_remaining_rows(scan); + Assert(rowcount > 0); + if (*startrow + rowcount - 1 >= targrow) + { + AppendOnlyExecutorReadBlock_GetContents(varblock); + /* got a new buffer to consume */ + scan->needNextBuffer = false; + return; + } + + *startrow += rowcount; + AppendOnlyExecutionReadBlock_FinishedScanBlock(varblock); + AppendOnlyStorageRead_SkipCurrentBlock(&scan->storageRead); + /* continue next block */ + } + else + pg_unreachable(); /* unreachable code */ + } +} + +/* + * block directory based get_target_tuple() + */ +static bool +appendonly_blkdirscan_get_target_tuple(AppendOnlyScanDesc scan, int64 targrow, TupleTableSlot *slot) +{ + int segno, segidx; + int64 rownum, rowsprocessed; + AOTupleId aotid; + AppendOnlyBlockDirectory *blkdir = &scan->aofetch->blockDirectory; + + Assert(scan->blkdirscan != NULL); + + /* locate the target segment */ + segidx = appendonly_locate_target_segment(scan, targrow); + if (segidx < 0) + return false; + + scan->aos_segfiles_processed = segidx + 1; + + segno = scan->aos_segfile_arr[segidx]->segno; + Assert(segno > InvalidFileSegNumber && segno <= AOTupleId_MaxSegmentFileNum); + + /* + * Note: It is safe to assume that the scan's segfile array and the + * blockdir's segfile array are identical. Otherwise, we should stop + * processing and throw an exception to make the error visible. + */ + if (blkdir->segmentFileInfo[segidx]->segno != segno) + { + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("segfile array contents in both scan descriptor " + "and block directory are not identical on " + "append-optimized relation '%s'", + RelationGetRelationName(blkdir->aoRel)))); + } + + /* + * Set the current segfile info in the blkdir struct, so we can + * reuse the (cached) block directory entry during the tuple fetch + * operation below. See AppendOnlyBlockDirectory_GetCachedEntry(). + */ + blkdir->currentSegmentFileNum = blkdir->segmentFileInfo[segidx]->segno; + blkdir->currentSegmentFileInfo = blkdir->segmentFileInfo[segidx]; + + /* + * "segfirstrow" should be always pointing to the first row of + * a new segfile in blkdir based ANALYZE, only locate_target_segment + * could update its value. + * + * "segrowsprocessed" is used for tracking the position of + * processed rows in the current segfile. + */ + rowsprocessed = scan->segfirstrow + scan->segrowsprocessed; + /* locate the target row by seqscan block directory */ + rownum = AOBlkDirScan_GetRowNum(scan->blkdirscan, + segno, + 0, + targrow, + &rowsprocessed); + + elog(DEBUG2, "AOBlkDirScan_GetRowNum(segno: %d, col: %d, targrow: %ld): " + "[segfirstrow: %ld, segrowsprocessed: %ld, rownum: %ld, cached_mpentry_num: %d]", + segno, 0, targrow, scan->segfirstrow, scan->segrowsprocessed, rownum, + blkdir->cached_mpentry_num); + + if (rownum < 0) + return false; + + scan->segrowsprocessed = rowsprocessed - scan->segfirstrow; + + /* form the target tuple TID */ + AOTupleIdInit(&aotid, segno, rownum); + + /* ensure the target minipage entry was stored in fetch descriptor */ + Assert(blkdir->cached_mpentry_num != InvalidEntryNum); + Assert(blkdir->minipages == &blkdir->minipages[0]); + + /* fetch the target tuple */ + if(!appendonly_fetch(scan->aofetch, &aotid, slot)) + return false; + + /* OK to return this tuple */ + pgstat_count_heap_fetch(scan->aos_rd); + + return true; +} + +/* + * Given a specific target row number 'targrow' (in the space of all row numbers + * physically present in the table, i.e. across all segfiles), scan and return + * the corresponding tuple in 'slot'. + * + * If the tuple is visible, return true. Otherwise, return false. + */ +bool +appendonly_get_target_tuple(AppendOnlyScanDesc aoscan, int64 targrow, TupleTableSlot *slot) +{ + AppendOnlyExecutorReadBlock *varblock = &aoscan->executorReadBlock; + bool visible; + int64 rowsprocessed, rownum; + int segno; + AOTupleId aotid; + + if (aoscan->blkdirscan != NULL) + return appendonly_blkdirscan_get_target_tuple(aoscan, targrow, slot); + + segno = appendonly_getsegment(aoscan, targrow); + if (segno < 0) + return false; + + rowsprocessed = aoscan->segfirstrow + aoscan->segrowsprocessed; + + appendonly_getblock(aoscan, targrow, &rowsprocessed); + + aoscan->segrowsprocessed = rowsprocessed - aoscan->segfirstrow; + + Assert(rowsprocessed + varblock->rowCount - 1 >= targrow); + rownum = varblock->blockFirstRowNum + (targrow - rowsprocessed); + + elog(DEBUG2, "appendonly_getblock() returns: [segno: %d, rownum: %ld]", segno, rownum); + + /* form the target tuple TID */ + AOTupleIdInit(&aotid, segno, rownum); + + visible = (aoscan->snapshot == SnapshotAny || + AppendOnlyVisimap_IsVisible(&aoscan->visibilityMap, &aotid)); + + if (visible && AppendOnlyExecutorReadBlock_FetchTuple(varblock, rownum, 0, NULL, slot)) + { + /* OK to return this tuple */ + pgstat_count_heap_fetch(aoscan->aos_rd); + } + else + { + if (slot != NULL) + ExecClearTuple(slot); + + return false; + } + + return true; +} + /* ---------------- * appendonlygettup - fetch next appendonly tuple * @@ -1138,6 +1437,8 @@ appendonlygettup(AppendOnlyScanDesc scan, TupleTableSlot *slot) { Assert(ScanDirectionIsForward(dir)); + /* should not be in ANALYZE - we use a different API */ + Assert((scan->rs_base.rs_flags & SO_TYPE_ANALYZE) == 0); Assert(scan->usableBlockSize > 0); bool isSnapshotAny = (scan->snapshot == SnapshotAny); @@ -1178,12 +1479,7 @@ appendonlygettup(AppendOnlyScanDesc scan, if (!isSnapshotAny && !AppendOnlyVisimap_IsVisible(&scan->visibilityMap, aoTupleId)) { - /* - * The tuple is invisible. - * In `analyze`, we can simply return false - */ - if ((scan->rs_base.rs_flags & SO_TYPE_ANALYZE) != 0) - return false; + /* The tuple is invisible */ } else { @@ -1310,6 +1606,34 @@ finishWriteBlock(AppendOnlyInsertDesc aoInsertDesc) Assert(!AppendOnlyStorageWrite_IsBufferAllocated(&aoInsertDesc->storageWrite)); } +static void +appendonly_blkdirscan_init(AppendOnlyScanDesc scan) +{ + if (scan->aofetch == NULL) + scan->aofetch = appendonly_fetch_init(scan->aos_rd, + scan->snapshot, + scan->appendOnlyMetaDataSnapshot); + + scan->blkdirscan = palloc0(sizeof(AOBlkDirScanData)); + AOBlkDirScan_Init(scan->blkdirscan, &scan->aofetch->blockDirectory); +} + +static void +appendonly_blkdirscan_finish(AppendOnlyScanDesc scan) +{ + AOBlkDirScan_Finish(scan->blkdirscan); + pfree(scan->blkdirscan); + scan->blkdirscan = NULL; + + if (scan->aofetch != NULL) + { + appendonly_fetch_finish(scan->aofetch); + pfree(scan->aofetch); + scan->aofetch = NULL; + } +} + + /* ---------------------------------------------------------------- * append-only access method interface * ---------------------------------------------------------------- @@ -1431,19 +1755,33 @@ appendonly_beginrangescan_internal(Relation relation, scan->blockDirectory = NULL; + if ((flags & SO_TYPE_ANALYZE) != 0) + { + scan->segrowsprocessed = 0; + scan->segfirstrow = 0; + scan->targrow = 0; + } + if (segfile_count > 0) { Oid visimaprelid; Oid visimapidxid; + Oid blkdirrelid; GetAppendOnlyEntryAuxOids(relation, - NULL, NULL, NULL, &visimaprelid, &visimapidxid); + NULL, &blkdirrelid, NULL, &visimaprelid, &visimapidxid); AppendOnlyVisimap_Init(&scan->visibilityMap, visimaprelid, visimapidxid, AccessShareLock, appendOnlyMetaDataSnapshot); + + if ((flags & SO_TYPE_ANALYZE) != 0) + { + if (OidIsValid(blkdirrelid)) + appendonly_blkdirscan_init(scan); + } } scan->totalBytesRead = 0; @@ -1519,7 +1857,7 @@ appendonly_beginscan(Relation relation, */ seginfo = GetAllFileSegInfo(relation, appendOnlyMetaDataSnapshot, &segfile_count, NULL); - + aoscan = appendonly_beginrangescan_internal(relation, snapshot, appendOnlyMetaDataSnapshot, @@ -1614,6 +1952,9 @@ appendonly_endscan(TableScanDesc scan) if (aoscan->aos_total_segfiles > 0) AppendOnlyVisimap_Finish(&aoscan->visibilityMap, AccessShareLock); + if (aoscan->blkdirscan != NULL) + appendonly_blkdirscan_finish(aoscan); + if (aoscan->aofetch) { appendonly_fetch_finish(aoscan->aofetch); diff --git a/src/backend/access/appendonly/appendonlyam_handler.c b/src/backend/access/appendonly/appendonlyam_handler.c index 0136d4a850f..218ade630d4 100644 --- a/src/backend/access/appendonly/appendonlyam_handler.c +++ b/src/backend/access/appendonly/appendonlyam_handler.c @@ -46,6 +46,7 @@ #include "utils/lsyscache.h" #include "utils/pg_rusage.h" #include "utils/guc.h" +#include "utils/sampling.h" #define IS_BTREE(r) ((r)->rd_rel->relam == BTREE_AM_OID) @@ -1492,10 +1493,13 @@ static bool appendonly_scan_analyze_next_block(TableScanDesc scan, BlockNumber blockno, BufferAccessStrategy bstrategy) { - AppendOnlyScanDesc aoscan = (AppendOnlyScanDesc) scan; - aoscan->targetTupleId = blockno; - - return true; + /* + * For append-optimized relations, we use a separate sampling + * method. See table_relation_acquire_sample_rows(). + */ + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("API not supported for appendoptimized relations"))); } static bool @@ -1503,30 +1507,91 @@ appendonly_scan_analyze_next_tuple(TableScanDesc scan, TransactionId OldestXmin, double *liverows, double *deadrows, TupleTableSlot *slot) { + /* + * For append-optimized relations, we use a separate sampling + * method. See table_relation_acquire_sample_rows(). + */ + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("API not supported for appendoptimized relations"))); +} + +/* + * Implementation of relation_acquire_sample_rows(). + * + * As opposed to upstream's method of 2-stage sampling, here we can simply use + * Knuth's S algorithm (TAOCP Part 2 Section 3.4.2) as we clearly know N - the + * population size up front (i.e the total number of rows in the relation) + * + * Although an estimate is demanded for the total live rows and total dead rows + * in the table, we can actually return their exact values from aux table metadata. + * + * We intrinsically return rows in physical order, since the rows sampled by + * Algorithm S are in physical order. + */ +static int +appendonly_acquire_sample_rows(Relation onerel, int elevel, HeapTuple *rows, + int targrows, double *totalrows, double *totaldeadrows) +{ + int numrows = 0; /* # number of rows sampled */ + double liverows = 0; /* # live rows seen */ + double deadrows = 0; /* # dead rows seen */ + + Assert(targrows > 0); + + TableScanDesc scan = table_beginscan_analyze(onerel); + TupleTableSlot *slot = table_slot_create(onerel, NULL); AppendOnlyScanDesc aoscan = (AppendOnlyScanDesc) scan; - bool ret = false; - /* skip several tuples if they are not sampling target */ - while (!aoscan->aos_done_all_segfiles - && aoscan->targetTupleId > aoscan->nextTupleId) - { - appendonly_getnextslot(scan, ForwardScanDirection, slot); - aoscan->nextTupleId++; - } + int64 totaltupcount = AppendOnlyScanDesc_TotalTupCount(aoscan); + int64 totaldeadtupcount = 0; + if (aoscan->aos_total_segfiles > 0 ) + totaldeadtupcount = AppendOnlyVisimap_GetRelationHiddenTupleCount(&aoscan->visibilityMap); + /* + * The conversion from int64 to double (53 significant bits) is safe as the + * AOTupleId is 48bits, the max value of totalrows is never greater than + * AOTupleId_MaxSegmentFileNum * AOTupleId_MaxRowNum (< 48 significant bits). + */ + *totalrows = (double) (totaltupcount - totaldeadtupcount); + *totaldeadrows = (double) totaldeadtupcount; - if (!aoscan->aos_done_all_segfiles - && aoscan->targetTupleId == aoscan->nextTupleId) + /* Prepare for sampling row numbers */ + RowSamplerData rs; + RowSampler_Init(&rs, *totalrows, targrows, random()); + + while (RowSampler_HasMore(&rs)) { - ret = appendonly_getnextslot(scan, ForwardScanDirection, slot); - aoscan->nextTupleId++; + aoscan->targrow = RowSampler_Next(&rs); + + vacuum_delay_point(); - if (ret) - *liverows += 1; + if (appendonly_get_target_tuple(aoscan, aoscan->targrow, slot)) + { + rows[numrows++] = ExecCopySlotHeapTuple(slot); + liverows++; + } else - *deadrows += 1; /* if return an invisible tuple */ + deadrows++; + + ExecClearTuple(slot); } - return ret; + ExecDropSingleTupleTableSlot(slot); + table_endscan(scan); + + /* + * Emit some interesting relation info + */ + ereport(elevel, + (errmsg("\"%s\": scanned " INT64_FORMAT " rows, " + "containing %.0f live rows and %.0f dead rows; " + "%d rows in sample, %.0f total live rows, " + "%.f total dead rows", + RelationGetRelationName(onerel), + rs.m, liverows, deadrows, numrows, + *totalrows, *totaldeadrows))); + + return numrows; } static double @@ -2278,6 +2343,7 @@ static const TableAmRoutine ao_row_methods = { .relation_vacuum = appendonly_vacuum_rel, .scan_analyze_next_block = appendonly_scan_analyze_next_block, .scan_analyze_next_tuple = appendonly_scan_analyze_next_tuple, + .relation_acquire_sample_rows = appendonly_acquire_sample_rows, .index_build_range_scan = appendonly_index_build_range_scan, .index_validate_scan = appendonly_index_validate_scan, @@ -2293,7 +2359,6 @@ static const TableAmRoutine ao_row_methods = { .scan_bitmap_next_tuple = appendonly_scan_bitmap_next_tuple, .scan_sample_next_block = appendonly_scan_sample_next_block, .scan_sample_next_tuple = appendonly_scan_sample_next_tuple, - .acquire_sample_rows = acquire_sample_rows, .amoptions = ao_amoptions, .swap_relation_files = appendonly_swap_relation_files, diff --git a/src/backend/access/appendonly/appendonlyblockdirectory.c b/src/backend/access/appendonly/appendonlyblockdirectory.c index b6a9b17991d..2f9a9f4522a 100644 --- a/src/backend/access/appendonly/appendonlyblockdirectory.c +++ b/src/backend/access/appendonly/appendonlyblockdirectory.c @@ -154,6 +154,8 @@ init_internal(AppendOnlyBlockDirectory *blockDirectory) ItemPointerSetInvalid(&minipageInfo->tupleTid); } + blockDirectory->cached_mpentry_num = InvalidEntryNum; + MemoryContextSwitchTo(oldcxt); } @@ -515,6 +517,32 @@ set_directoryentry_range( return true; } +/* + * AppendOnlyBlockDirectory_GetCachedEntry + * + * Return cached minipage entry for avoidance + * of double scans on block directory. + */ +static inline bool +AppendOnlyBlockDirectory_GetCachedEntry( + AppendOnlyBlockDirectory *blockDirectory, + int segmentFileNum, + int columnGroupNo, + AppendOnlyBlockDirectoryEntry *directoryEntry) +{ + MinipagePerColumnGroup *minipageInfo PG_USED_FOR_ASSERTS_ONLY = &blockDirectory->minipages[columnGroupNo]; + + Assert(blockDirectory->cached_mpentry_num != InvalidEntryNum); + Assert(segmentFileNum == blockDirectory->currentSegmentFileNum); + Assert(blockDirectory->currentSegmentFileInfo != NULL); + Assert(minipageInfo->numMinipageEntries > 0); + + return set_directoryentry_range(blockDirectory, + columnGroupNo, + blockDirectory->cached_mpentry_num, + directoryEntry); +} + /* * AppendOnlyBlockDirectory_GetEntry * @@ -547,7 +575,7 @@ AppendOnlyBlockDirectory_GetEntry( HeapTuple tuple = NULL; MinipagePerColumnGroup *minipageInfo = &blockDirectory->minipages[columnGroupNo]; - int entry_no = -1; + int entry_no = InvalidEntryNum; int tmpGroupNo; if (blkdirRel == NULL || blkdirIdx == NULL) @@ -567,6 +595,21 @@ AppendOnlyBlockDirectory_GetEntry( "(%d, %d, " INT64_FORMAT ")", columnGroupNo, segmentFileNum, rowNum))); + /* + * We enable caching minipage entry only for ao_row. + * + * Because ao_column requires all column values, + * but the entry returned here caches for only one + * column. It is unavoidable to scan blkdir again in + * aocs_fetch() to extract all other column entries + * for constructing the whole tuple. + */ + if (!blockDirectory->isAOCol && blockDirectory->cached_mpentry_num != InvalidEntryNum) + return AppendOnlyBlockDirectory_GetCachedEntry(blockDirectory, + segmentFileNum, + columnGroupNo, + directoryEntry); + /* * If the segment file number is the same as * blockDirectory->currentSegmentFileNum, the in-memory minipage may @@ -591,7 +634,8 @@ AppendOnlyBlockDirectory_GetEntry( entry_no = find_minipage_entry(minipageInfo->minipage, minipageInfo->numMinipageEntries, rowNum); - if (entry_no != -1) + + if (entry_no != InvalidEntryNum) { return set_directoryentry_range(blockDirectory, columnGroupNo, @@ -883,7 +927,7 @@ blkdir_entry_exists(AppendOnlyBlockDirectory *blockDirectory, entry_no = find_minipage_entry(minipageInfo->minipage, minipageInfo->numMinipageEntries, rowNum); - if (entry_no != -1) + if (entry_no != InvalidEntryNum) { found = true; break; @@ -1282,7 +1326,7 @@ find_minipage_entry(Minipage *minipage, if (start_no <= end_no) return entry_no; else - return -1; + return InvalidEntryNum; } /* @@ -1620,3 +1664,126 @@ AppendOnlyBlockDirectory_End_forUniqueChecks(AppendOnlyBlockDirectory *blockDire MemoryContextDelete(blockDirectory->memoryContext); } + +/* + * AOBlkDirScan_GetRowNum + * + * Given a target logical row number, + * returns the corresponding physical rowNum, + * or -1 if not found. + * + * targrow: 0-based target logical row number + * startrow: pointer of the start point stepping to targrow + * targsegno: the segfile number in which targrow locates + * colgroupno: current coloumn group number, always 0 for ao_row + */ +int64 +AOBlkDirScan_GetRowNum(AOBlkDirScan blkdirscan, + int targsegno, + int colgroupno, + int64 targrow, + int64 *startrow) +{ + HeapTuple tuple; + TupleDesc tupdesc; + AppendOnlyBlockDirectory *blkdir = blkdirscan->blkdir; + int mpentryi; + MinipagePerColumnGroup *mpinfo; + int64 rownum = -1; + + Assert(targsegno >= 0); + Assert(blkdir != NULL); + + if (blkdirscan->segno != targsegno || blkdirscan->colgroupno != colgroupno) + { + if (blkdirscan->sysscan != NULL) + systable_endscan_ordered(blkdirscan->sysscan); + + ScanKeyData scankeys[2]; + + ScanKeyInit(&scankeys[0], + Anum_pg_aoblkdir_segno, + BTEqualStrategyNumber, + F_INT4EQ, + Int32GetDatum(targsegno)); + + ScanKeyInit(&scankeys[1], + Anum_pg_aoblkdir_columngroupno, + BTEqualStrategyNumber, + F_INT4EQ, + Int32GetDatum(colgroupno)); + + blkdirscan->sysscan = systable_beginscan_ordered(blkdir->blkdirRel, + blkdir->blkdirIdx, + blkdir->appendOnlyMetaDataSnapshot, + 2, /* nkeys */ + scankeys); + blkdirscan->segno = targsegno; + blkdirscan->colgroupno = colgroupno; + /* reset to InvalidEntryNum for new Minipage entry array */ + blkdir->cached_mpentry_num = InvalidEntryNum; + } + + mpentryi = blkdir->cached_mpentry_num; + mpinfo = &blkdir->minipages[colgroupno]; + + while (true) + { + if (mpentryi == InvalidEntryNum) + { + tuple = systable_getnext_ordered(blkdirscan->sysscan, ForwardScanDirection); + if (HeapTupleIsValid(tuple)) + { + tupdesc = RelationGetDescr(blkdir->blkdirRel); + extract_minipage(blkdir, tuple, tupdesc, colgroupno); + /* new minipage */ + mpentryi = 0; + mpinfo = &blkdir->minipages[colgroupno]; + } + else + { + /* done this < segno, colgroupno > */ + systable_endscan_ordered(blkdirscan->sysscan); + blkdirscan->sysscan = NULL; + blkdirscan->segno = -1; + blkdirscan->colgroupno = 0; + /* always set both vars in pairs for safe */ + mpentryi = InvalidEntryNum; + mpinfo = NULL; + + goto out; + } + } + + Assert(mpentryi != InvalidEntryNum); + Assert(mpinfo != NULL); + + for (int i = mpentryi; i < mpinfo->numMinipageEntries; i++) + { + Minipage *mp = mpinfo->minipage; + MinipageEntry *entry = &(mp->entry[i]); + + Assert(entry->firstRowNum > 0); + Assert(entry->rowCount > 0); + + if (*startrow + entry->rowCount - 1 >= targrow) + { + rownum = entry->firstRowNum + (targrow - *startrow); + mpentryi = i; + goto out; + } + + *startrow += entry->rowCount; + } + + /* done this minipage */ + mpentryi = InvalidEntryNum; + mpinfo = NULL; + } + +out: + /* set the result of minipage entry lookup */ + blkdir->cached_mpentry_num = mpentryi; + + return rownum; +} diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 22314d15b07..4535f2fdaba 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -2686,7 +2686,6 @@ static const TableAmRoutine heapam_methods = { .scan_bitmap_next_tuple = heapam_scan_bitmap_next_tuple, .scan_sample_next_block = heapam_scan_sample_next_block, .scan_sample_next_tuple = heapam_scan_sample_next_tuple, - .acquire_sample_rows = acquire_sample_rows, .amoptions = heapam_amoptions, diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 7a6428627f6..5a066e211b1 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -183,13 +183,22 @@ static void compute_index_stats(Relation onerel, double totalrows, MemoryContext col_context); static VacAttrStats *examine_attribute(Relation onerel, int attnum, Node *index_expr, int elevel); +static int acquire_sample_rows(Relation onerel, int elevel, + HeapTuple *rows, int targrows, + double *totalrows, double *totaldeadrows); static int acquire_sample_rows_dispatcher(Relation onerel, bool inh, int elevel, HeapTuple *rows, int targrows, double *totalrows, double *totaldeadrows); +static int gp_acquire_sample_rows_func(Relation onerel, int elevel, + HeapTuple *rows, int targrows, + double *totalrows, double *totaldeadrows); static BlockNumber acquire_index_number_of_blocks(Relation indexrel, Relation tablerel); static void gp_acquire_correlations_dispatcher(Oid relOid, bool inh, float4 *correlations, bool *correlationsIsNull); static int compare_rows(const void *a, const void *b); +static int acquire_inherited_sample_rows(Relation onerel, int elevel, + HeapTuple *rows, int targrows, + double *totalrows, double *totaldeadrows); static void update_attstats(Oid relid, bool inh, int natts, VacAttrStats **vacattrstats); static Datum std_fetch_func(VacAttrStatsP stats, int rownum, bool *isNull); @@ -351,14 +360,14 @@ analyze_rel_internal(Oid relid, RangeVar *relation, { /* Regular table, so we'll use the regular row acquisition function */ if (onerel->rd_tableam) - acquirefunc = onerel->rd_tableam->acquire_sample_rows; + acquirefunc = onerel->rd_tableam->relation_acquire_sample_rows; /* - * If the TableAmRoutine's acquire_sample_rows if NULL, we use - * acquire_sample_rows as default. + * If the TableAmRoutine's gp_acquire_sample_rows_func if NULL, we use + * gp_acquire_sample_rows_func as default. */ if (acquirefunc == NULL) - acquirefunc = acquire_sample_rows; + acquirefunc = gp_acquire_sample_rows_func; /* Also get regular table's size */ relpages = AcquireNumberOfBlocks(onerel); @@ -1608,6 +1617,32 @@ examine_attribute(Relation onerel, int attnum, Node *index_expr, int elevel) return stats; } +/* + * GPDB: If we are the dispatcher, then issue analyze on the segments and + * collect the statistics from them. + */ +int +gp_acquire_sample_rows_func(Relation onerel, int elevel, + HeapTuple *rows, int targrows, + double *totalrows, double *totaldeadrows) +{ + if (Gp_role == GP_ROLE_DISPATCH && + onerel->rd_cdbpolicy && !GpPolicyIsEntry(onerel->rd_cdbpolicy)) + { + /* Fetch sample from the segments. */ + return acquire_sample_rows_dispatcher(onerel, false, elevel, + rows, targrows, + totalrows, totaldeadrows); + } + + if (RelationIsAppendOptimized(onerel)) + return table_relation_acquire_sample_rows(onerel, elevel, rows, + targrows, totalrows, totaldeadrows); + + return acquire_sample_rows(onerel, elevel, rows, + targrows, totalrows, totaldeadrows); +} + /* * acquire_sample_rows -- acquire a random sample of rows from the table * @@ -1640,14 +1675,8 @@ examine_attribute(Relation onerel, int attnum, Node *index_expr, int elevel) * unbiased estimates of the average numbers of live and dead rows per * block. The previous sampling method put too much credence in the row * density near the start of the table. - * - * The returned list of tuples is in order by physical position in the table. - * (We will rely on this later to derive correlation estimates.) - * - * GPDB: If we are the dispatcher, then issue analyze on the segments and - * collect the statistics from them. */ -int +static int acquire_sample_rows(Relation onerel, int elevel, HeapTuple *rows, int targrows, double *totalrows, double *totaldeadrows) @@ -1673,42 +1702,22 @@ acquire_sample_rows(Relation onerel, int elevel, Assert(targrows > 0); - if (Gp_role == GP_ROLE_DISPATCH && - onerel->rd_cdbpolicy && !GpPolicyIsEntry(onerel->rd_cdbpolicy)) - { - /* Fetch sample from the segments. */ - return acquire_sample_rows_dispatcher(onerel, false, elevel, - rows, targrows, - totalrows, totaldeadrows); - } - /* - * GPDB: Analyze does make a lot of assumptions regarding the file layout of a - * relation. These assumptions are heap specific and do not hold for AO/AOCO - * relations. In the case of AO/AOCO, what is actually needed and used instead - * of number of blocks, is number of tuples. - * - * GPDB_12_MERGE_FIXME: BlockNumber is uint32 and Number of tuples is uint64. - * That means that after row number UINT_MAX we will never analyze the table. + * GPDB: Legacy analyze does make a lot of assumptions regarding the file + * layout of a relation. These assumptions are heap specific and do not hold + * for AO/AOCO relations. In the case of AO/AOCO, what is actually needed and + * used instead of number of blocks, is number of tuples. Moreover, BlockNumber + * is uint32 and Number of tuples is uint64. That means that after row number + * UINT_MAX we will never analyze the table. + * + * We introduced a tuple based sampling approach for AO/CO tables to address + * above problems, all corresponding logics were moved out of here and enclosed + * in table_relation_acquire_sample_rows(). So leave here an assertion to ensure + * the relation should not be an AO/CO table. */ - if (RelationIsNonblockRelation(onerel)) - { - /* AO/CO/PAX use non-fixed block layout */ - BlockNumber pages; - double tuples; - double allvisfrac; - int32 attr_widths; + Assert(!RelationIsAppendOptimized(onerel)); - table_relation_estimate_size(onerel, &attr_widths, &pages, - &tuples, &allvisfrac); - - if (tuples > UINT_MAX) - tuples = UINT_MAX; - - totalblocks = (BlockNumber)tuples; - } - else - totalblocks = RelationGetNumberOfBlocks(onerel); + totalblocks = RelationGetNumberOfBlocks(onerel); /* Need a cutoff xmin for HeapTupleSatisfiesVacuum */ OldestXmin = GetOldestNonRemovableTransactionId(onerel); @@ -1897,13 +1906,13 @@ acquire_sample_rows(Relation onerel, int elevel, * Emit some interesting relation info */ ereport(elevel, - (errmsg("\"%s\": scanned %d of %u pages, " - "containing %.0f live rows and %.0f dead rows; " - "%d rows in sample, %.0f estimated total rows", - RelationGetRelationName(onerel), - bs.m, totalblocks, - liverows, deadrows, - numrows, *totalrows))); + (errmsg("\"%s\": scanned %d of %u pages, " + "containing %.0f live rows and %.0f dead rows; " + "%d rows in sample, %.0f estimated total rows", + RelationGetRelationName(onerel), + bs.m, totalblocks, + liverows, deadrows, + numrows, *totalrows))); return numrows; } @@ -1918,17 +1927,12 @@ compare_rows(const void *a, const void *b) HeapTuple hb = *(const HeapTuple *) b; /* - * GPDB_12_MERGE_FIXME: For AO/AOCO tables, blocknumber does not have a - * meaning and is not set. The current implementation of analyze makes - * assumptions about the file layout which do not hold for these two cases. - * The compare function should maintain the row order as consrtucted, hence - * return 0; - * + * For AO/AOCO tables, blocknumber does not have a meaning and is not set. + * We leave this workaround here for legacy AO/CO analyze still working. * There should be no apparent and measurable perfomance hit from calling * this function. - * - * One possible proper fix is to refactor analyze to use the tableam api and - * this sorting should move to the specific implementation. + * + * The AO/CO Fast Analyze won't reach here anymore. */ if (!BlockNumberIsValid(ItemPointerGetBlockNumberNoCheck(&ha->t_self))) return 0; @@ -2053,14 +2057,14 @@ acquire_inherited_sample_rows(Relation onerel, int elevel, { /* Regular table, so use the regular row acquisition function */ if (childrel->rd_tableam) - acquirefunc = childrel->rd_tableam->acquire_sample_rows; + acquirefunc = childrel->rd_tableam->relation_acquire_sample_rows; /* - * If the TableAmRoutine's acquire_sample_rows if NULL, we use - * acquire_sample_rows as default. + * If the TableAmRoutine's relation_acquire_sample_rows if NULL, we use + * relation_acquire_sample_rows as default. */ if (acquirefunc == NULL) - acquirefunc = acquire_sample_rows; + acquirefunc = gp_acquire_sample_rows_func; relpages = AcquireNumberOfBlocks(childrel); } diff --git a/src/backend/commands/analyzefuncs.c b/src/backend/commands/analyzefuncs.c index 8c9fd56199d..b97bbee048c 100644 --- a/src/backend/commands/analyzefuncs.c +++ b/src/backend/commands/analyzefuncs.c @@ -27,6 +27,7 @@ #include "miscadmin.h" #include "funcapi.h" #include "utils/syscache.h" +#include "utils/faultinjector.h" /** * Statistics related parameters. @@ -303,6 +304,8 @@ gp_acquire_sample_rows(PG_FUNCTION_ARGS) ctx->index++; + SIMPLE_FAULT_INJECTOR("returned_sample_row"); + SRF_RETURN_NEXT(funcctx, HeapTupleGetDatum(res)); } else if (!ctx->summary_sent) diff --git a/src/backend/utils/datumstream/datumstream.c b/src/backend/utils/datumstream/datumstream.c index 42f374d1498..82c2b5a7cb3 100644 --- a/src/backend/utils/datumstream/datumstream.c +++ b/src/backend/utils/datumstream/datumstream.c @@ -1129,7 +1129,7 @@ datumstreamwrite_lob(DatumStreamWrite * acc, return varLen; } -static bool +bool datumstreamread_block_info(DatumStreamRead * acc) { bool readOK = false; diff --git a/src/backend/utils/misc/sampling.c b/src/backend/utils/misc/sampling.c index 40e47487c21..58361eb2bff 100644 --- a/src/backend/utils/misc/sampling.c +++ b/src/backend/utils/misc/sampling.c @@ -116,7 +116,11 @@ BlockSampler_Next(BlockSampler bs) } /* - * This is a 64 bit version of BlockSampler. + * This is used for sampling AO/CO row numbers, in the flattened + * row number space, across all segfile tuple counts. 64 bits is + * used for simplicity and is sufficient to hold a maximum tuple + * count of (AOTupleId_MaxSegmentFileNum * MAX_AOREL_CONCURRENCY), + * which can be represented with 48 bits. * * The code is same as BlockSampler except replacing * int type of variables with int64, which is intended @@ -127,7 +131,7 @@ BlockSampler_Next(BlockSampler bs) */ void RowSampler_Init(RowSampler rs, int64 nobjects, int64 samplesize, - long randseed) + long randseed) { rs->N = nobjects; /* measured table size */ diff --git a/src/include/access/tableam.h b/src/include/access/tableam.h index 61948090e22..4a877e857b1 100644 --- a/src/include/access/tableam.h +++ b/src/include/access/tableam.h @@ -751,6 +751,13 @@ typedef struct TableAmRoutine double *liverows, double *deadrows, TupleTableSlot *slot); + + int (*relation_acquire_sample_rows) (Relation onerel, + int elevel, + HeapTuple *rows, + int targrows, + double *totalrows, + double *totaldeadrows); /* see table_index_build_range_scan for reference about parameters */ double (*index_build_range_scan) (Relation table_rel, @@ -948,15 +955,6 @@ typedef struct TableAmRoutine struct SampleScanState *scanstate, TupleTableSlot *slot); - /* - * Like scan_sample_next_block and scan_sample_next_tuple, this callback - * is also used to sample tuple rows. As different storage maybe need to - * use different acquire sample rows process, we extend an interface to - * achieve this requirement. - */ - int (*acquire_sample_rows) (Relation onerel, int elevel, - HeapTuple *rows, int targrows, - double *totalrows, double *totaldeadrows); /* * This callback is used to parse reloptions for relation/matview/toast. */ @@ -1903,6 +1901,38 @@ table_relation_vacuum(Relation rel, struct VacuumParams *params, rel->rd_tableam->relation_vacuum(rel, params, bstrategy); } +/* + * GPDB: Interface to acquire sample rows from a given relation (currently + * AO/CO). + * + * Selected rows are returned in the caller-allocated array rows[], which + * must have space to hold at least targrows entries. + * + * The actual number of rows selected is returned as the function result. + * We also estimate the total numbers of live and dead rows in the table, + * and return them into *totalrows and *totaldeadrows, respectively. + * + * The returned list of tuples is in order by physical position in the table. + * (We will rely on this later to derive correlation estimates.) + * + * Note: this interface is not used by upstream code. + * The upstream interface (implemented by heap) uses a 2-stage sampling method + * using table_scan_analyze_next_block() and table_scan_analyze_next_tuple(). + * See acquire_sample_rows(). Since this upstream method does not suit AO/CO + * tables we have created the relation_acquire_sample_rows() interface. + * + * Note for future merges: + * We have to keep this interface consistent with acquire_sample_rows(). + */ +static inline int +table_relation_acquire_sample_rows(Relation rel, int elevel, HeapTuple *rows, + int targrows, double *totalrows, double *totaldeadrows) +{ + return rel->rd_tableam->relation_acquire_sample_rows(rel, elevel, rows, + targrows, totalrows, + totaldeadrows); +} + /* * Prepare to analyze block `blockno` of `scan`. The scan needs to have been * started with table_beginscan_analyze(). Note that this routine might diff --git a/src/include/cdb/cdbaocsam.h b/src/include/cdb/cdbaocsam.h index b4a4653bfd0..ab990e2bf01 100644 --- a/src/include/cdb/cdbaocsam.h +++ b/src/include/cdb/cdbaocsam.h @@ -105,6 +105,57 @@ enum AOCSScanDescIdentifier AOCSBITMAPSCANDATA /* am private */ }; +/* + * Used for fetch individual tuples from specified by TID of append only relations + * using the AO Block Directory. + */ +typedef struct AOCSFetchDescData +{ + Relation relation; + Snapshot appendOnlyMetaDataSnapshot; + + /* + * Snapshot to use for non-metadata operations. + * Usually snapshot = appendOnlyMetaDataSnapshot, but they + * differ e.g. if gp_select_invisible is set. + */ + Snapshot snapshot; + + MemoryContext initContext; + + int totalSegfiles; + struct AOCSFileSegInfo **segmentFileInfo; + + /* + * Array containing the maximum row number in each aoseg (to be consulted + * during fetch). This is a sparse array as not all segments are involved + * in a scan. Sparse entries are marked with InvalidAORowNum. + * + * Note: + * If we have no updates and deletes, the total_tupcount is equal to the + * maximum row number. But after some updates and deletes, the maximum row + * number is always much bigger than total_tupcount, so this carries the + * last sequence from gp_fastsequence. + */ + int64 lastSequence[AOTupleId_MultiplierSegmentFileNum]; + + char *segmentFileName; + int segmentFileNameMaxLen; + char *basepath; + + AppendOnlyBlockDirectory blockDirectory; + + DatumStreamFetchDesc *datumStreamFetchDesc; + + int64 skipBlockCount; + + AppendOnlyVisimap visibilityMap; + + Oid segrelid; +} AOCSFetchDescData; + +typedef AOCSFetchDescData *AOCSFetchDesc; + /* * Used for scan of appendoptimized column oriented relations, should be used in * the tableam api related code and under it. @@ -118,19 +169,41 @@ typedef struct AOCSScanDescData /* synthetic system attributes */ ItemPointerData cdb_fake_ctid; - int64 total_row; - int64 segrowsprocessed; /* - * Only used by `analyze` + * used by `analyze` */ - int64 nextTupleId; - int64 targetTupleId; /* - * Only used by `sample scan` - */ + * targrow: the output of the Row-based sampler (Alogrithm S), denotes a + * rownumber in the flattened row number space that is the target of a sample, + * which starts from 0. + * In other words, if we have seg0 rownums: [1, 100], seg1 rownums: [1, 200] + * If targrow = 150, then we are referring to seg1's rownum=51. + */ + int64 targrow; + + /* + * segfirstrow: pointing to the next starting row which is used to check + * the distance to `targrow` + */ + int64 segfirstrow; + + /* + * segrowsprocessed: track the rows processed under the current segfile. + * Don't miss updating it accordingly when "segfirstrow" is updated. + */ + int64 segrowsprocessed; + + AOBlkDirScan blkdirscan; + AOCSFetchDesc aocsfetch; + bool *proj; + + /* + * Only used by `sample scan` + */ int64 fetchTupleId; + int64 nextTupleId; int64 totalTuples; /* * Part of the struct to be used only inside aocsam.c @@ -212,57 +285,6 @@ typedef struct AOCSScanDescData typedef AOCSScanDescData *AOCSScanDesc; -/* - * Used for fetch individual tuples from specified by TID of append only relations - * using the AO Block Directory. - */ -typedef struct AOCSFetchDescData -{ - Relation relation; - Snapshot appendOnlyMetaDataSnapshot; - - /* - * Snapshot to use for non-metadata operations. - * Usually snapshot = appendOnlyMetaDataSnapshot, but they - * differ e.g. if gp_select_invisible is set. - */ - Snapshot snapshot; - - MemoryContext initContext; - - int totalSegfiles; - struct AOCSFileSegInfo **segmentFileInfo; - - /* - * Array containing the maximum row number in each aoseg (to be consulted - * during fetch). This is a sparse array as not all segments are involved - * in a scan. Sparse entries are marked with InvalidAORowNum. - * - * Note: - * If we have no updates and deletes, the total_tupcount is equal to the - * maximum row number. But after some updates and deletes, the maximum row - * number is always much bigger than total_tupcount, so this carries the - * last sequence from gp_fastsequence. - */ - int64 lastSequence[AOTupleId_MultiplierSegmentFileNum]; - - char *segmentFileName; - int segmentFileNameMaxLen; - char *basepath; - - AppendOnlyBlockDirectory blockDirectory; - - DatumStreamFetchDesc *datumStreamFetchDesc; - - int64 skipBlockCount; - - AppendOnlyVisimap visibilityMap; - - Oid segrelid; -} AOCSFetchDescData; - -typedef AOCSFetchDescData *AOCSFetchDesc; - /* * AOCSDeleteDescData is used for delete data from AOCS relations. * It serves an equivalent purpose as AppendOnlyScanDescData @@ -397,6 +419,8 @@ extern void aocs_addcol_emptyvpe( extern void aocs_addcol_setfirstrownum(AOCSAddColumnDesc desc, int64 firstRowNum); +extern bool aocs_get_target_tuple(AOCSScanDesc aoscan, int64 targrow, TupleTableSlot *slot); + extern void aoco_dml_init(Relation relation, CmdType operation); extern void aoco_dml_finish(Relation relation, CmdType operation); @@ -423,5 +447,21 @@ AOCSScanDesc_UpdateTotalBytesRead(AOCSScanDesc scan, AttrNumber attno) scan->totalBytesRead += scan->columnScanInfo.ds[attno]->ao_read.current.uncompressedLen; } +static inline int64 +AOCSScanDesc_TotalTupCount(AOCSScanDesc scan) +{ + Assert(scan != NULL); + + int64 totalrows = 0; + AOCSFileSegInfo **seginfo = scan->seginfo; + + for (int i = 0; i < scan->total_seg; i++) + { + if (seginfo[i]->state != AOSEG_STATE_AWAITING_DROP) + totalrows += seginfo[i]->total_tupcount; + } + + return totalrows; +} #endif /* AOCSAM_H */ diff --git a/src/include/cdb/cdbappendonlyam.h b/src/include/cdb/cdbappendonlyam.h index 125c1de4d23..58fc77d8f5c 100644 --- a/src/include/cdb/cdbappendonlyam.h +++ b/src/include/cdb/cdbappendonlyam.h @@ -141,6 +141,7 @@ typedef struct AppendOnlyExecutorReadBlock int segmentFileNum; int64 totalRowsScanned; + int64 blockRowsProcessed; int64 blockFirstRowNum; int64 headerOffsetInFile; @@ -236,10 +237,31 @@ typedef struct AppendOnlyScanDescData AppendOnlyVisimap visibilityMap; /* - * Only used by `analyze` + * used by `analyze` */ - int64 nextTupleId; - int64 targetTupleId; + + /* + * targrow: the output of the Row-based sampler (Alogrithm S), denotes a + * rownumber in the flattened row number space that is the target of a sample, + * which starts from 0. + * In other words, if we have seg0 rownums: [1, 100], seg1 rownums: [1, 200] + * If targrow = 150, then we are referring to seg1's rownum=51. + */ + int64 targrow; + + /* + * segfirstrow: pointing to the next starting row which is used to check + * the distance to `targrow` + */ + int64 segfirstrow; + + /* + * segrowsprocessed: track the rows processed under the current segfile. + * Don't miss updating it accordingly when "segfirstrow" is updated. + */ + int64 segrowsprocessed; + + AOBlkDirScan blkdirscan; /* scan current state */ BlockNumber rs_nblocks; /* current block */ @@ -454,6 +476,9 @@ extern bool appendonly_getnextslot(TableScanDesc scan, ScanDirection direction, TupleTableSlot *slot); extern uint32 appendonly_scan_flags(Relation relation); +extern bool appendonly_get_target_tuple(AppendOnlyScanDesc aoscan, + int64 targrow, + TupleTableSlot *slot); extern AppendOnlyFetchDesc appendonly_fetch_init( Relation relation, Snapshot snapshot, @@ -514,4 +539,21 @@ AppendOnlyScanDesc_UpdateTotalBytesRead(AppendOnlyScanDesc scan) scan->totalBytesRead += scan->storageRead.current.uncompressedLen; } +static inline int64 +AppendOnlyScanDesc_TotalTupCount(AppendOnlyScanDesc scan) +{ + Assert(scan != NULL); + + int64 totalrows = 0; + FileSegInfo **seginfo = scan->aos_segfile_arr; + + for (int i = 0; i < scan->aos_total_segfiles; i++) + { + if (seginfo[i]->state != AOSEG_STATE_AWAITING_DROP) + totalrows += seginfo[i]->total_tupcount; + } + + return totalrows; +} + #endif /* CDBAPPENDONLYAM_H */ diff --git a/src/include/cdb/cdbappendonlyblockdirectory.h b/src/include/cdb/cdbappendonlyblockdirectory.h index 425cb9f7312..f90f7849fe0 100644 --- a/src/include/cdb/cdbappendonlyblockdirectory.h +++ b/src/include/cdb/cdbappendonlyblockdirectory.h @@ -95,6 +95,8 @@ typedef struct MinipagePerColumnGroup #define IsMinipageFull(minipagePerColumnGroup) \ ((minipagePerColumnGroup)->numMinipageEntries == (uint32) gp_blockdirectory_minipage_size) +#define InvalidEntryNum (-1) + /* * Define a structure for the append-only relation block directory. */ @@ -135,6 +137,14 @@ typedef struct AppendOnlyBlockDirectory ScanKey scanKeys; StrategyNumber *strategyNumbers; + /* + * Minipage entry number, for caching purpose. + * + * XXX: scenarios which call AppendOnlyBlockDirectory_GetEntry() + * may need to consider using this cache. + */ + int cached_mpentry_num; + } AppendOnlyBlockDirectory; @@ -169,10 +179,16 @@ typedef struct AOFetchSegmentFile int64 logicalEof; } AOFetchSegmentFile; -typedef struct AppendOnlyBlockDirectorySeqScan { - AppendOnlyBlockDirectory blkdir; - SysScanDesc sysScan; -} AppendOnlyBlockDirectorySeqScan; +/* + * Tracks block directory scan state for block-directory based ANALYZE. + */ +typedef struct AOBlkDirScanData +{ + AppendOnlyBlockDirectory *blkdir; + SysScanDesc sysscan; + int segno; + int colgroupno; +} AOBlkDirScanData, *AOBlkDirScan; extern void AppendOnlyBlockDirectoryEntry_GetBeginRange( AppendOnlyBlockDirectoryEntry *directoryEntry, @@ -190,6 +206,12 @@ extern bool AppendOnlyBlockDirectory_GetEntry( AOTupleId *aoTupleId, int columnGroupNo, AppendOnlyBlockDirectoryEntry *directoryEntry); +extern int64 AOBlkDirScan_GetRowNum( + AOBlkDirScan blkdirscan, + int targsegno, + int colgroupno, + int64 targrow, + int64 *startrow); extern bool AppendOnlyBlockDirectory_CoversTuple( AppendOnlyBlockDirectory *blockDirectory, AOTupleId *aoTupleId); @@ -243,6 +265,8 @@ extern void AppendOnlyBlockDirectory_DeleteSegmentFile( int columnGroupNo); extern void AppendOnlyBlockDirectory_End_forUniqueChecks( AppendOnlyBlockDirectory *blockDirectory); +extern void AppendOnlyBlockDirectory_End_forSearch_InSequence( + AOBlkDirScan seqscan); extern void AppendOnlyBlockDirectory_InsertPlaceholder(AppendOnlyBlockDirectory *blockDirectory, int64 firstRowNum, @@ -322,4 +346,35 @@ copy_out_minipage(MinipagePerColumnGroup *minipageInfo, minipageInfo->numMinipageEntries = minipageInfo->minipage->nEntry; } +static inline void +AOBlkDirScan_Init(AOBlkDirScan blkdirscan, + AppendOnlyBlockDirectory *blkdir) +{ + blkdirscan->blkdir = blkdir; + blkdirscan->sysscan = NULL; + blkdirscan->segno = -1; + blkdirscan->colgroupno = 0; +} + +/* should be called before fetch_finish() */ +static inline void +AOBlkDirScan_Finish(AOBlkDirScan blkdirscan) +{ + /* + * Make sure blkdir hasn't been destroyed by fetch_finish(), + * or systable_endscan_ordered() will be crashed for sysscan + * is holding blkdir relation which is freed. + */ + Assert(blkdirscan->blkdir != NULL); + + if (blkdirscan->sysscan != NULL) + { + systable_endscan_ordered(blkdirscan->sysscan); + blkdirscan->sysscan = NULL; + } + blkdirscan->segno = -1; + blkdirscan->colgroupno = 0; + blkdirscan->blkdir = NULL; +} + #endif diff --git a/src/include/commands/vacuum.h b/src/include/commands/vacuum.h index 87f19d4e087..8e99c8fd70c 100644 --- a/src/include/commands/vacuum.h +++ b/src/include/commands/vacuum.h @@ -434,13 +434,6 @@ extern double anl_random_fract(void); extern double anl_init_selection_state(int n); extern double anl_get_next_S(double t, int n, double *stateptr); -extern int acquire_sample_rows(Relation onerel, int elevel, - HeapTuple *rows, int targrows, - double *totalrows, double *totaldeadrows); -extern int acquire_inherited_sample_rows(Relation onerel, int elevel, - HeapTuple *rows, int targrows, - double *totalrows, double *totaldeadrows); - /* in commands/analyzefuncs.c */ extern Datum gp_acquire_sample_rows(PG_FUNCTION_ARGS); extern Datum gp_acquire_correlations(PG_FUNCTION_ARGS); diff --git a/src/include/utils/datumstream.h b/src/include/utils/datumstream.h index 5210159d8b6..278579fb60b 100644 --- a/src/include/utils/datumstream.h +++ b/src/include/utils/datumstream.h @@ -93,6 +93,7 @@ typedef struct DatumStreamRead int64 blockFirstRowNum; int64 blockFileOffset; int blockRowCount; + int blockRowsProcessed; AppendOnlyStorageRead ao_read; @@ -322,8 +323,9 @@ extern bool datumstreamread_find_block(DatumStreamRead * datumStream, extern void *datumstreamread_get_upgrade_space(DatumStreamRead *datumStream, size_t len); +extern bool datumstreamread_block_info(DatumStreamRead * acc); /* - * MPP-17061: make sure datumstream_read_block_info was called first for the CO block + * MPP-17061: make sure datumstreamread_block_info was called first for the CO block * before calling datumstreamread_block_content. */ extern void datumstreamread_block_content(DatumStreamRead * acc); diff --git a/src/include/utils/sampling.h b/src/include/utils/sampling.h index 9536b07432c..fa3c9aa2ff8 100644 --- a/src/include/utils/sampling.h +++ b/src/include/utils/sampling.h @@ -42,7 +42,7 @@ extern BlockNumber BlockSampler_Init(BlockSampler bs, BlockNumber nblocks, extern bool BlockSampler_HasMore(BlockSampler bs); extern BlockNumber BlockSampler_Next(BlockSampler bs); -/* 64 bit version of BlockSampler */ +/* 64 bit version of BlockSampler (used for sampling AO/CO table rows) */ typedef struct { int64 N; /* number of objects, known in advance */ diff --git a/src/test/isolation2/expected/ao_blkdir.out b/src/test/isolation2/expected/ao_blkdir.out index f202d8ec4da..0a1eb468592 100644 --- a/src/test/isolation2/expected/ao_blkdir.out +++ b/src/test/isolation2/expected/ao_blkdir.out @@ -319,6 +319,155 @@ COMMIT DROP TABLE ao_blkdir_test; DROP +-- Test `tupcount` in pg_aoseg == sum of number of `row_count` across all +-- aoblkdir entries for each segno. Test with commits, aborts and deletes. + +-- Case1: without VACUUM ANALYZE +CREATE TABLE ao_blkdir_test_rowcount(i int, j int) USING ao_row DISTRIBUTED BY (j); +CREATE +1: BEGIN; +BEGIN +2: BEGIN; +BEGIN +3: BEGIN; +BEGIN +4: BEGIN; +BEGIN +1: INSERT INTO ao_blkdir_test_rowcount SELECT i, 2 FROM generate_series(1, 10) i; +INSERT 10 +2: INSERT INTO ao_blkdir_test_rowcount SELECT i, 3 FROM generate_series(1, 20) i; +INSERT 20 +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 30) i; +INSERT 30 +3: ABORT; +ABORT +3: BEGIN; +BEGIN +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 40) i; +INSERT 40 +4: INSERT INTO ao_blkdir_test_rowcount SELECT i, 7 FROM generate_series(1, 50) i; +INSERT 50 +1: COMMIT; +COMMIT +2: COMMIT; +COMMIT +3: COMMIT; +COMMIT +4: COMMIT; +COMMIT +DELETE FROM ao_blkdir_test_rowcount WHERE j = 7; +DELETE 50 + +CREATE INDEX ao_blkdir_test_rowcount_idx ON ao_blkdir_test_rowcount(i); +CREATE + +SELECT segno, sum(row_count) AS totalrows FROM (SELECT (gp_toolkit.__gp_aoblkdir('ao_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno; + segno | totalrows +-------+----------- + 1 | 10 + 2 | 20 + 3 | 40 + 4 | 50 +(4 rows) +SELECT segno, sum(tupcount) AS totalrows FROM gp_toolkit.__gp_aoseg('ao_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno; + segno | totalrows +-------+----------- + 1 | 10 + 2 | 20 + 3 | 40 + 4 | 50 +(4 rows) + +-- Case2: with VACUUM ANALYZE +DROP TABLE ao_blkdir_test_rowcount; +DROP +CREATE TABLE ao_blkdir_test_rowcount(i int, j int) USING ao_row DISTRIBUTED BY (j); +CREATE +CREATE INDEX ao_blkdir_test_rowcount_idx ON ao_blkdir_test_rowcount(i); +CREATE +1: BEGIN; +BEGIN +2: BEGIN; +BEGIN +3: BEGIN; +BEGIN +4: BEGIN; +BEGIN +1: INSERT INTO ao_blkdir_test_rowcount SELECT i, 2 FROM generate_series(1, 10) i; +INSERT 10 +1: INSERT INTO ao_blkdir_test_rowcount SELECT i, 2 FROM ao_blkdir_test_rowcount; +INSERT 10 +1: INSERT INTO ao_blkdir_test_rowcount SELECT i, 2 FROM ao_blkdir_test_rowcount; +INSERT 20 +2: INSERT INTO ao_blkdir_test_rowcount SELECT i, 3 FROM generate_series(1, 20) i; +INSERT 20 +2: INSERT INTO ao_blkdir_test_rowcount SELECT i, 3 FROM ao_blkdir_test_rowcount; +INSERT 20 +2: INSERT INTO ao_blkdir_test_rowcount SELECT i, 3 FROM ao_blkdir_test_rowcount; +INSERT 40 +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 30) i; +INSERT 30 +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM ao_blkdir_test_rowcount; +INSERT 30 +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM ao_blkdir_test_rowcount; +INSERT 60 +4: INSERT INTO ao_blkdir_test_rowcount SELECT i, 7 FROM generate_series(1, 50) i; +INSERT 50 +4: INSERT INTO ao_blkdir_test_rowcount SELECT i, 7 FROM ao_blkdir_test_rowcount; +INSERT 50 +4: INSERT INTO ao_blkdir_test_rowcount SELECT i, 7 FROM ao_blkdir_test_rowcount; +INSERT 100 +1: COMMIT; +COMMIT +2: COMMIT; +COMMIT +3: ABORT; +ABORT +4: COMMIT; +COMMIT + +DELETE FROM ao_blkdir_test_rowcount WHERE j = 7; +DELETE 200 +VACUUM ANALYZE ao_blkdir_test_rowcount; +VACUUM + +SELECT segno, sum(row_count) AS totalrows FROM (SELECT (gp_toolkit.__gp_aoblkdir('ao_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno; + segno | totalrows +-------+----------- + 1 | 40 + 2 | 80 +(2 rows) +SELECT segno, sum(tupcount) AS totalrows FROM gp_toolkit.__gp_aoseg('ao_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno; + segno | totalrows +-------+----------- + 1 | 40 + 2 | 80 + 3 | 0 + 4 | 0 +(4 rows) + +UPDATE ao_blkdir_test_rowcount SET i = i + 1; +UPDATE 120 +VACUUM ANALYZE ao_blkdir_test_rowcount; +VACUUM + +SELECT segno, sum(row_count) AS totalrows FROM (SELECT (gp_toolkit.__gp_aoblkdir('ao_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno; + segno | totalrows +-------+----------- + 3 | 120 +(1 row) +SELECT segno, sum(tupcount) AS totalrows FROM gp_toolkit.__gp_aoseg('ao_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno; + segno | totalrows +-------+----------- + 1 | 0 + 2 | 0 + 3 | 120 + 4 | 0 +(4 rows) + +DROP TABLE ao_blkdir_test_rowcount; +DROP + -------------------------------------------------------------------------------- -- AOCO tables -------------------------------------------------------------------------------- @@ -825,3 +974,172 @@ DETAIL: Key (i)=(2) already exists. DROP TABLE aoco_blkdir_test; DROP + +-- Test `tupcount` in pg_ao(cs)seg == sum of number of `row_count` across all +-- aoblkdir entries for each . Test with commits, aborts +-- and deletes. + +-- Case1: without VACUUM ANALYZE +CREATE TABLE aoco_blkdir_test_rowcount(i int, j int) USING ao_column DISTRIBUTED BY (j); +CREATE +1: BEGIN; +BEGIN +2: BEGIN; +BEGIN +3: BEGIN; +BEGIN +4: BEGIN; +BEGIN +1: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 2 FROM generate_series(1, 10) i; +INSERT 10 +2: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 3 FROM generate_series(1, 20) i; +INSERT 20 +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 30) i; +INSERT 30 +3: ABORT; +ABORT +3: BEGIN; +BEGIN +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 40) i; +INSERT 40 +4: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 7 FROM generate_series(1, 50) i; +INSERT 50 +1: COMMIT; +COMMIT +2: COMMIT; +COMMIT +3: COMMIT; +COMMIT +4: COMMIT; +COMMIT +DELETE FROM aoco_blkdir_test_rowcount WHERE j = 7; +DELETE 50 + +CREATE INDEX aoco_blkdir_test_rowcount_idx ON aoco_blkdir_test_rowcount(i); +CREATE + +SELECT segno, columngroup_no, sum(row_count) AS totalrows FROM (SELECT (gp_toolkit.__gp_aoblkdir('aoco_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno, columngroup_no; + segno | columngroup_no | totalrows +-------+----------------+----------- + 1 | 0 | 10 + 1 | 1 | 10 + 2 | 0 | 20 + 2 | 1 | 20 + 3 | 0 | 40 + 3 | 1 | 40 + 4 | 0 | 50 + 4 | 1 | 50 +(8 rows) +SELECT segno, column_num, sum(tupcount) AS totalrows FROM gp_toolkit.__gp_aocsseg('aoco_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno, column_num; + segno | column_num | totalrows +-------+------------+----------- + 1 | 0 | 10 + 1 | 1 | 10 + 2 | 0 | 20 + 2 | 1 | 20 + 3 | 0 | 40 + 3 | 1 | 40 + 4 | 0 | 50 + 4 | 1 | 50 +(8 rows) + +-- Case2: with VACUUM ANALYZE +DROP TABLE aoco_blkdir_test_rowcount; +DROP +CREATE TABLE aoco_blkdir_test_rowcount(i int, j int) USING ao_column DISTRIBUTED BY (j); +CREATE +CREATE INDEX aoco_blkdir_test_rowcount_idx ON aoco_blkdir_test_rowcount(i); +CREATE +1: BEGIN; +BEGIN +2: BEGIN; +BEGIN +3: BEGIN; +BEGIN +4: BEGIN; +BEGIN +1: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 2 FROM generate_series(1, 10) i; +INSERT 10 +1: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 2 FROM aoco_blkdir_test_rowcount; +INSERT 10 +1: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 2 FROM aoco_blkdir_test_rowcount; +INSERT 20 +2: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 3 FROM generate_series(1, 20) i; +INSERT 20 +2: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 3 FROM aoco_blkdir_test_rowcount; +INSERT 20 +2: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 3 FROM aoco_blkdir_test_rowcount; +INSERT 40 +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 30) i; +INSERT 30 +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM aoco_blkdir_test_rowcount; +INSERT 30 +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM aoco_blkdir_test_rowcount; +INSERT 60 +4: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 7 FROM generate_series(1, 50) i; +INSERT 50 +4: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 7 FROM aoco_blkdir_test_rowcount; +INSERT 50 +4: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 7 FROM aoco_blkdir_test_rowcount; +INSERT 100 +1: COMMIT; +COMMIT +2: COMMIT; +COMMIT +3: ABORT; +ABORT +4: COMMIT; +COMMIT + +DELETE FROM aoco_blkdir_test_rowcount WHERE j = 7; +DELETE 200 +VACUUM ANALYZE aoco_blkdir_test_rowcount; +VACUUM + +SELECT segno, columngroup_no, sum(row_count) AS totalrows FROM (SELECT (gp_toolkit.__gp_aoblkdir('aoco_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno, columngroup_no; + segno | columngroup_no | totalrows +-------+----------------+----------- + 1 | 0 | 40 + 1 | 1 | 40 + 2 | 0 | 80 + 2 | 1 | 80 +(4 rows) +SELECT segno, column_num, sum(tupcount) AS totalrows FROM gp_toolkit.__gp_aocsseg('aoco_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno, column_num; + segno | column_num | totalrows +-------+------------+----------- + 1 | 0 | 40 + 1 | 1 | 40 + 2 | 0 | 80 + 2 | 1 | 80 + 3 | 0 | 0 + 3 | 1 | 0 + 4 | 0 | 0 + 4 | 1 | 0 +(8 rows) + +UPDATE aoco_blkdir_test_rowcount SET i = i + 1; +UPDATE 120 +VACUUM ANALYZE aoco_blkdir_test_rowcount; +VACUUM + +SELECT segno, columngroup_no, sum(row_count) AS totalrows FROM (SELECT (gp_toolkit.__gp_aoblkdir('aoco_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno, columngroup_no; + segno | columngroup_no | totalrows +-------+----------------+----------- + 3 | 0 | 120 + 3 | 1 | 120 +(2 rows) +SELECT segno, column_num, sum(tupcount) AS totalrows FROM gp_toolkit.__gp_aocsseg('aoco_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno, column_num; + segno | column_num | totalrows +-------+------------+----------- + 1 | 0 | 0 + 1 | 1 | 0 + 2 | 0 | 0 + 2 | 1 | 0 + 3 | 0 | 120 + 3 | 1 | 120 + 4 | 0 | 0 + 4 | 1 | 0 +(8 rows) + +DROP TABLE aoco_blkdir_test_rowcount; +DROP diff --git a/src/test/isolation2/input/uao/fast_analyze.source b/src/test/isolation2/input/uao/fast_analyze.source new file mode 100644 index 00000000000..962ba600f75 --- /dev/null +++ b/src/test/isolation2/input/uao/fast_analyze.source @@ -0,0 +1,349 @@ +-- +-- Test AO/CO sampling method. +-- +-- These tests ensure that we achieve our ANALYZE targets for AO/CO tables. +-- +CREATE TABLE fast_analyze_@amname@_1(i int, j int) USING @amname@ DISTRIBUTED BY (j); + +-- Stats target info shows that we will sample 300 * (100) rows. +SHOW default_statistics_target; +SELECT attstattarget FROM pg_attribute + WHERE attrelid = 'fast_analyze_@amname@_1'::regclass AND attname IN ('i', 'j'); + +-------------------------------------------------------------------------------- +-- Scenario 1: +-- We have MORE than 300 * default_statistics_target = 30k rows for a 2 int table, +-- spread across 3 segments, with no aborted rows [2 subcases -> blkdir and +-- non-blkdir]. +-- Expectation: We have collected 30k live rows. +-------------------------------------------------------------------------------- + +-- (a) Without blkdir subcase + +-- Insert 10.5k rows in each QE. +1: BEGIN; +2: BEGIN; +3: BEGIN; +1: INSERT INTO fast_analyze_@amname@_1 SELECT i, 2 FROM generate_series(1, 10500) i; +2: INSERT INTO fast_analyze_@amname@_1 SELECT i, 1 FROM generate_series(1, 10500) i; +3: INSERT INTO fast_analyze_@amname@_1 SELECT i, 5 FROM generate_series(1, 10500) i; +1: COMMIT; +2: COMMIT; +3: COMMIT; + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +ANALYZE fast_analyze_@amname@_1; + +-- We have sampled 10k live rows. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +-- (b) With blkdir subcase + +CREATE INDEX ON fast_analyze_@amname@_1(i); + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +ANALYZE fast_analyze_@amname@_1; + +-- We have sampled 10k live rows from each QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +-------------------------------------------------------------------------------- +-- Scenario 2: +-- We have LESS than 300 * default_statistics_target = 30k rows for a 2 int table, +-- spread across 3 segments, with no aborted rows [2 subcases -> blkdir and +-- non-blkdir]. +-- Expectation: We have collected number of live rows = total tupcount of table. +-------------------------------------------------------------------------------- + +CREATE TABLE fast_analyze_@amname@_2(i int, j int) USING @amname@ DISTRIBUTED BY (j); + +-- (a) Without blkdir subcase + +-- Insert 10 rows in each QE. +1: BEGIN; +2: BEGIN; +3: BEGIN; +1: INSERT INTO fast_analyze_@amname@_2 SELECT i, 2 FROM generate_series(1, 10) i; +2: INSERT INTO fast_analyze_@amname@_2 SELECT i, 1 FROM generate_series(1, 10) i; +3: INSERT INTO fast_analyze_@amname@_2 SELECT i, 5 FROM generate_series(1, 10) i; +1: COMMIT; +2: COMMIT; +3: COMMIT; + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +ANALYZE fast_analyze_@amname@_2; + +-- We have sampled 10 live rows from each QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +-- (b) With blkdir subcase + +CREATE INDEX ON fast_analyze_@amname@_2(i); + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +ANALYZE fast_analyze_@amname@_2; + +-- We have sampled 10 live rows from each QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +-------------------------------------------------------------------------------- +-- Scenario 3: +-- We have ALL aborted rows [2 subcases -> blkdir and non-blkdir]. +-- Expectation: We have not sampled any live rows. +-------------------------------------------------------------------------------- + +CREATE TABLE fast_analyze_@amname@_3(i int, j int) USING @amname@ DISTRIBUTED BY (j); + +-- (a) Without blkdir subcase + +-- Insert 10 rows in each QE. +1: BEGIN; +2: BEGIN; +3: BEGIN; +1: INSERT INTO fast_analyze_@amname@_3 SELECT i, 2 FROM generate_series(1, 10) i; +2: INSERT INTO fast_analyze_@amname@_3 SELECT i, 1 FROM generate_series(1, 10) i; +3: INSERT INTO fast_analyze_@amname@_3 SELECT i, 5 FROM generate_series(1, 10) i; +1: ABORT; +2: ABORT; +3: ABORT; + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +ANALYZE fast_analyze_@amname@_3; + +-- We have not sampled any live rows on any QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +-- (b) With blkdir subcase + +CREATE INDEX ON fast_analyze_@amname@_3(i); + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +ANALYZE fast_analyze_@amname@_3; + +-- We have not sampled any live rows on any QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +-------------------------------------------------------------------------------- +-- Scenario 4: +-- We have ALL deleted rows [2 subcases -> blkdir and non-blkdir]. +-- Expectation: We have not collected any live rows. +-------------------------------------------------------------------------------- + +CREATE TABLE fast_analyze_@amname@_4(i int, j int) USING @amname@ DISTRIBUTED BY (j); + +-- (a) Without blkdir subcase + +-- Insert 10 rows in each QE. +1: BEGIN; +2: BEGIN; +3: BEGIN; +1: INSERT INTO fast_analyze_@amname@_4 SELECT i, 2 FROM generate_series(1, 10) i; +2: INSERT INTO fast_analyze_@amname@_4 SELECT i, 1 FROM generate_series(1, 10) i; +3: INSERT INTO fast_analyze_@amname@_4 SELECT i, 5 FROM generate_series(1, 10) i; +1: COMMIT; +2: COMMIT; +3: COMMIT; +-- Delete all rows. +DELETE FROM fast_analyze_@amname@_4; +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +ANALYZE fast_analyze_@amname@_4; + +-- We have not sampled any live rows on any QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +-- (b) With blkdir subcase + +CREATE INDEX ON fast_analyze_@amname@_4(i); + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +ANALYZE fast_analyze_@amname@_4; + +-- We have not sampled any live rows on any QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) + FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + +DROP TABLE fast_analyze_@amname@_1; +DROP TABLE fast_analyze_@amname@_2; +DROP TABLE fast_analyze_@amname@_3; +DROP TABLE fast_analyze_@amname@_4; + +-- +-- The following tests ensure fast analyze function to work +-- with multi-segfiles tables under concurrent inserts. +-- + +create table analyze_@amname@ (id int, a int, b inet, c inet) using @amname@ with (compresstype=zlib, compresslevel=3); + +insert into analyze_@amname@ select 2, i, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || + (i%255)::text))::inet, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || + (i%255)::text))::inet from generate_series(1,30000)i; + +insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; + +-- test ANALYZE after concurrent inserts commit + +1: begin; +1: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; + +2: begin; +2: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; + +3: begin; +3: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; + +4: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; + +5: analyze analyze_@amname@; + +1: commit; +2: commit; +3: abort; + +1: analyze analyze_@amname@; + +-- test aoblkdir based ANALYZE + +create index on analyze_@amname@(id); + +1: begin; +1: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; + +2: begin; +2: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; + +3: begin; +3: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; + +4: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; + +5: analyze analyze_@amname@; + +1: commit; +2: commit; +3: abort; + +1: analyze analyze_@amname@; + +drop table analyze_@amname@; + +-- test more data and stability, note, it could take a little long time + +create table analyze_@amname@_2 (id int, a int, b inet, c inet) using @amname@ with (compresstype=zlib, compresslevel=3); +insert into analyze_@amname@_2 select 2, i, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || + (i%255)::text))::inet, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || + (i%255)::text))::inet from generate_series(1,1000)i; + +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +insert into analyze_@amname@_2 select * from analyze_@amname@_2; + +1: begin; +1: insert into analyze_@amname@_2 select * from analyze_@amname@_2; + +2: insert into analyze_@amname@_2 select * from analyze_@amname@_2; + +1: commit; + +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; + +1: begin; +1: insert into analyze_@amname@_2 select * from analyze_@amname@_2; + +2: insert into analyze_@amname@_2 select * from analyze_@amname@_2; + +1: abort; + +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; + +-- test with aoblkdir + +create index on analyze_@amname@_2(a); + +1: begin; +1: insert into analyze_@amname@_2 select * from analyze_@amname@_2; + +2: insert into analyze_@amname@_2 select * from analyze_@amname@_2; + +1: commit; + +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; + +1: begin; +1: insert into analyze_@amname@_2 select * from analyze_@amname@_2; + +2: insert into analyze_@amname@_2 select * from analyze_@amname@_2; + +1: abort; + +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; +1: analyze analyze_@amname@_2; + +drop table analyze_@amname@_2; diff --git a/src/test/isolation2/isolation2_schedule b/src/test/isolation2/isolation2_schedule index 8931e46a5fc..aec0005e8d8 100644 --- a/src/test/isolation2/isolation2_schedule +++ b/src/test/isolation2/isolation2_schedule @@ -148,6 +148,7 @@ test: uao/limit_indexscan_inits_row test: uao/test_pg_appendonly_version_row # Refer to the case comment for why it is commented out. # test: uao/bad_buffer_on_temp_ao_row +test: uao/fast_analyze_row test: uao/create_index_allows_readonly_row test: reorganize_after_ao_vacuum_skip_drop truncate_after_ao_vacuum_skip_drop mark_all_aoseg_await_drop @@ -209,6 +210,7 @@ test: uao/test_pg_appendonly_version_column # Refer to the case comment for why it is commented out. # test: uao/bad_buffer_on_temp_ao_column test: uao/create_index_allows_readonly_column +test: uao/fast_analyze_column # this case contains fault injection, must be put in a separate test group test: terminate_in_gang_creation diff --git a/src/test/isolation2/output/uao/fast_analyze.source b/src/test/isolation2/output/uao/fast_analyze.source new file mode 100644 index 00000000000..7f6a133e18b --- /dev/null +++ b/src/test/isolation2/output/uao/fast_analyze.source @@ -0,0 +1,632 @@ +-- +-- Test AO/CO sampling method. +-- +-- These tests ensure that we achieve our ANALYZE targets for AO/CO tables. +-- +CREATE TABLE fast_analyze_@amname@_1(i int, j int) USING @amname@ DISTRIBUTED BY (j); +CREATE + +-- Stats target info shows that we will sample 300 * (100) rows. +SHOW default_statistics_target; + default_statistics_target +--------------------------- + 100 +(1 row) +SELECT attstattarget FROM pg_attribute WHERE attrelid = 'fast_analyze_@amname@_1'::regclass AND attname IN ('i', 'j'); + attstattarget +--------------- + -1 + -1 +(2 rows) + +-------------------------------------------------------------------------------- +-- Scenario 1: +-- We have MORE than 300 * default_statistics_target = 30k rows for a 2 int table, +-- spread across 3 segments, with no aborted rows [2 subcases -> blkdir and +-- non-blkdir]. +-- Expectation: We have collected 30k live rows. +-------------------------------------------------------------------------------- + +-- (a) Without blkdir subcase + +-- Insert 10.5k rows in each QE. +1: BEGIN; +BEGIN +2: BEGIN; +BEGIN +3: BEGIN; +BEGIN +1: INSERT INTO fast_analyze_@amname@_1 SELECT i, 2 FROM generate_series(1, 10500) i; +INSERT 10500 +2: INSERT INTO fast_analyze_@amname@_1 SELECT i, 1 FROM generate_series(1, 10500) i; +INSERT 10500 +3: INSERT INTO fast_analyze_@amname@_1 SELECT i, 5 FROM generate_series(1, 10500) i; +INSERT 10500 +1: COMMIT; +COMMIT +2: COMMIT; +COMMIT +3: COMMIT; +COMMIT + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault_infinite +-------------------------- + Success: + Success: + Success: +(3 rows) + +ANALYZE fast_analyze_@amname@_1; +ANALYZE + +-- We have sampled 10k live rows. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10000' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10000' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10000' + +(3 rows) + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +-- (b) With blkdir subcase + +CREATE INDEX ON fast_analyze_@amname@_1(i); +CREATE + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault_infinite +-------------------------- + Success: + Success: + Success: +(3 rows) + +ANALYZE fast_analyze_@amname@_1; +ANALYZE + +-- We have sampled 10k live rows from each QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10000' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10000' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10000' + +(3 rows) + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +-------------------------------------------------------------------------------- +-- Scenario 2: +-- We have LESS than 300 * default_statistics_target = 30k rows for a 2 int table, +-- spread across 3 segments, with no aborted rows [2 subcases -> blkdir and +-- non-blkdir]. +-- Expectation: We have collected number of live rows = total tupcount of table. +-------------------------------------------------------------------------------- + +CREATE TABLE fast_analyze_@amname@_2(i int, j int) USING @amname@ DISTRIBUTED BY (j); +CREATE + +-- (a) Without blkdir subcase + +-- Insert 10 rows in each QE. +1: BEGIN; +BEGIN +2: BEGIN; +BEGIN +3: BEGIN; +BEGIN +1: INSERT INTO fast_analyze_@amname@_2 SELECT i, 2 FROM generate_series(1, 10) i; +INSERT 10 +2: INSERT INTO fast_analyze_@amname@_2 SELECT i, 1 FROM generate_series(1, 10) i; +INSERT 10 +3: INSERT INTO fast_analyze_@amname@_2 SELECT i, 5 FROM generate_series(1, 10) i; +INSERT 10 +1: COMMIT; +COMMIT +2: COMMIT; +COMMIT +3: COMMIT; +COMMIT + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault_infinite +-------------------------- + Success: + Success: + Success: +(3 rows) + +ANALYZE fast_analyze_@amname@_2; +ANALYZE + +-- We have sampled 10 live rows from each QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10' + +(3 rows) + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +-- (b) With blkdir subcase + +CREATE INDEX ON fast_analyze_@amname@_2(i); +CREATE + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault_infinite +-------------------------- + Success: + Success: + Success: +(3 rows) + +ANALYZE fast_analyze_@amname@_2; +ANALYZE + +-- We have sampled 10 live rows from each QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'triggered' num times hit:'10' + +(3 rows) + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +-------------------------------------------------------------------------------- +-- Scenario 3: +-- We have ALL aborted rows [2 subcases -> blkdir and non-blkdir]. +-- Expectation: We have not sampled any live rows. +-------------------------------------------------------------------------------- + +CREATE TABLE fast_analyze_@amname@_3(i int, j int) USING @amname@ DISTRIBUTED BY (j); +CREATE + +-- (a) Without blkdir subcase + +-- Insert 10 rows in each QE. +1: BEGIN; +BEGIN +2: BEGIN; +BEGIN +3: BEGIN; +BEGIN +1: INSERT INTO fast_analyze_@amname@_3 SELECT i, 2 FROM generate_series(1, 10) i; +INSERT 10 +2: INSERT INTO fast_analyze_@amname@_3 SELECT i, 1 FROM generate_series(1, 10) i; +INSERT 10 +3: INSERT INTO fast_analyze_@amname@_3 SELECT i, 5 FROM generate_series(1, 10) i; +INSERT 10 +1: ABORT; +ABORT +2: ABORT; +ABORT +3: ABORT; +ABORT + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault_infinite +-------------------------- + Success: + Success: + Success: +(3 rows) + +ANALYZE fast_analyze_@amname@_3; +ANALYZE + +-- We have not sampled any live rows on any QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + +(3 rows) + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +-- (b) With blkdir subcase + +CREATE INDEX ON fast_analyze_@amname@_3(i); +CREATE + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault_infinite +-------------------------- + Success: + Success: + Success: +(3 rows) + +ANALYZE fast_analyze_@amname@_3; +ANALYZE + +-- We have not sampled any live rows on any QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + +(3 rows) + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +-------------------------------------------------------------------------------- +-- Scenario 4: +-- We have ALL deleted rows [2 subcases -> blkdir and non-blkdir]. +-- Expectation: We have not collected any live rows. +-------------------------------------------------------------------------------- + +CREATE TABLE fast_analyze_@amname@_4(i int, j int) USING @amname@ DISTRIBUTED BY (j); +CREATE + +-- (a) Without blkdir subcase + +-- Insert 10 rows in each QE. +1: BEGIN; +BEGIN +2: BEGIN; +BEGIN +3: BEGIN; +BEGIN +1: INSERT INTO fast_analyze_@amname@_4 SELECT i, 2 FROM generate_series(1, 10) i; +INSERT 10 +2: INSERT INTO fast_analyze_@amname@_4 SELECT i, 1 FROM generate_series(1, 10) i; +INSERT 10 +3: INSERT INTO fast_analyze_@amname@_4 SELECT i, 5 FROM generate_series(1, 10) i; +INSERT 10 +1: COMMIT; +COMMIT +2: COMMIT; +COMMIT +3: COMMIT; +COMMIT +-- Delete all rows. +DELETE FROM fast_analyze_@amname@_4; +DELETE 30 +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault_infinite +-------------------------- + Success: + Success: + Success: +(3 rows) + +ANALYZE fast_analyze_@amname@_4; +ANALYZE + +-- We have not sampled any live rows on any QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + +(3 rows) + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +-- (b) With blkdir subcase + +CREATE INDEX ON fast_analyze_@amname@_4(i); +CREATE + +SELECT gp_inject_fault_infinite('returned_sample_row', 'skip', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault_infinite +-------------------------- + Success: + Success: + Success: +(3 rows) + +ANALYZE fast_analyze_@amname@_4; +ANALYZE + +-- We have not sampled any live rows on any QE. +SELECT gp_inject_fault('returned_sample_row', 'status', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + + Success: fault name:'returned_sample_row' fault type:'skip' ddl statement:'' database name:'' table name:'' start occurrence:'1' end occurrence:'-1' extra arg:'0' fault injection state:'set' num times hit:'0' + +(3 rows) + +SELECT gp_inject_fault('returned_sample_row', 'reset', dbid) FROM gp_segment_configuration WHERE content != -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +DROP TABLE fast_analyze_@amname@_1; +DROP +DROP TABLE fast_analyze_@amname@_2; +DROP +DROP TABLE fast_analyze_@amname@_3; +DROP +DROP TABLE fast_analyze_@amname@_4; +DROP + +-- +-- The following tests ensure fast analyze function to work +-- with multi-segfiles tables under concurrent inserts. +-- + +create table analyze_@amname@ (id int, a int, b inet, c inet) using @amname@ with (compresstype=zlib, compresslevel=3); +CREATE + +insert into analyze_@amname@ select 2, i, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text))::inet, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text))::inet from generate_series(1,30000)i; +INSERT 30000 + +insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 +insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 + +-- test ANALYZE after concurrent inserts commit + +1: begin; +BEGIN +1: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 + +2: begin; +BEGIN +2: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 + +3: begin; +BEGIN +3: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 + +4: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 + +5: analyze analyze_@amname@; +ANALYZE + +1: commit; +COMMIT +2: commit; +COMMIT +3: abort; +ABORT + +1: analyze analyze_@amname@; +ANALYZE + +-- test aoblkdir based ANALYZE + +create index on analyze_@amname@(id); +CREATE + +1: begin; +BEGIN +1: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 + +2: begin; +BEGIN +2: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 + +3: begin; +BEGIN +3: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 + +4: insert into analyze_@amname@ select * from analyze_@amname@ limit 1000; +INSERT 1000 + +5: analyze analyze_@amname@; +ANALYZE + +1: commit; +COMMIT +2: commit; +COMMIT +3: abort; +ABORT + +1: analyze analyze_@amname@; +ANALYZE + +drop table analyze_@amname@; +DROP + +-- test more data and stability, note, it could take a little long time + +create table analyze_@amname@_2 (id int, a int, b inet, c inet) using @amname@ with (compresstype=zlib, compresslevel=3); +CREATE +insert into analyze_@amname@_2 select 2, i, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text))::inet, (select ((i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text || '.' || (i%255)::text))::inet from generate_series(1,1000)i; +INSERT 1000 + +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 1000 +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 2000 +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 4000 +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 8000 +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 16000 +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 32000 +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 64000 +insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 128000 + +1: begin; +BEGIN +1: insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 256000 + +2: insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 256000 + +1: commit; +COMMIT + +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE + +1: begin; +BEGIN +1: insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 768000 + +2: insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 768000 + +1: abort; +ABORT + +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE + +-- test with aoblkdir + +create index on analyze_@amname@_2(a); +CREATE + +1: begin; +BEGIN +1: insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 1536000 + +2: insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 1536000 + +1: commit; +COMMIT + +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE + +1: begin; +BEGIN +1: insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 4608000 + +2: insert into analyze_@amname@_2 select * from analyze_@amname@_2; +INSERT 4608000 + +1: abort; +ABORT + +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE +1: analyze analyze_@amname@_2; +ANALYZE + +drop table analyze_@amname@_2; +DROP diff --git a/src/test/isolation2/sql/ao_blkdir.sql b/src/test/isolation2/sql/ao_blkdir.sql index cd8f1b662d0..cff529876c1 100644 --- a/src/test/isolation2/sql/ao_blkdir.sql +++ b/src/test/isolation2/sql/ao_blkdir.sql @@ -96,6 +96,81 @@ WHERE gp_segment_id = 0 ORDER BY 1,2,3,4,5; DROP TABLE ao_blkdir_test; +-- Test `tupcount` in pg_aoseg == sum of number of `row_count` across all +-- aoblkdir entries for each segno. Test with commits, aborts and deletes. + +-- Case1: without VACUUM ANALYZE +CREATE TABLE ao_blkdir_test_rowcount(i int, j int) USING ao_row DISTRIBUTED BY (j); +1: BEGIN; +2: BEGIN; +3: BEGIN; +4: BEGIN; +1: INSERT INTO ao_blkdir_test_rowcount SELECT i, 2 FROM generate_series(1, 10) i; +2: INSERT INTO ao_blkdir_test_rowcount SELECT i, 3 FROM generate_series(1, 20) i; +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 30) i; +3: ABORT; +3: BEGIN; +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 40) i; +4: INSERT INTO ao_blkdir_test_rowcount SELECT i, 7 FROM generate_series(1, 50) i; +1: COMMIT; +2: COMMIT; +3: COMMIT; +4: COMMIT; +DELETE FROM ao_blkdir_test_rowcount WHERE j = 7; + +CREATE INDEX ao_blkdir_test_rowcount_idx ON ao_blkdir_test_rowcount(i); + +SELECT segno, sum(row_count) AS totalrows FROM + (SELECT (gp_toolkit.__gp_aoblkdir('ao_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') + WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno; +SELECT segno, sum(tupcount) AS totalrows FROM + gp_toolkit.__gp_aoseg('ao_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno; + +-- Case2: with VACUUM ANALYZE +DROP TABLE ao_blkdir_test_rowcount; +CREATE TABLE ao_blkdir_test_rowcount(i int, j int) USING ao_row DISTRIBUTED BY (j); +CREATE INDEX ao_blkdir_test_rowcount_idx ON ao_blkdir_test_rowcount(i); +1: BEGIN; +2: BEGIN; +3: BEGIN; +4: BEGIN; +1: INSERT INTO ao_blkdir_test_rowcount SELECT i, 2 FROM generate_series(1, 10) i; +1: INSERT INTO ao_blkdir_test_rowcount SELECT i, 2 FROM ao_blkdir_test_rowcount; +1: INSERT INTO ao_blkdir_test_rowcount SELECT i, 2 FROM ao_blkdir_test_rowcount; +2: INSERT INTO ao_blkdir_test_rowcount SELECT i, 3 FROM generate_series(1, 20) i; +2: INSERT INTO ao_blkdir_test_rowcount SELECT i, 3 FROM ao_blkdir_test_rowcount; +2: INSERT INTO ao_blkdir_test_rowcount SELECT i, 3 FROM ao_blkdir_test_rowcount; +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 30) i; +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM ao_blkdir_test_rowcount; +3: INSERT INTO ao_blkdir_test_rowcount SELECT i, 4 FROM ao_blkdir_test_rowcount; +4: INSERT INTO ao_blkdir_test_rowcount SELECT i, 7 FROM generate_series(1, 50) i; +4: INSERT INTO ao_blkdir_test_rowcount SELECT i, 7 FROM ao_blkdir_test_rowcount; +4: INSERT INTO ao_blkdir_test_rowcount SELECT i, 7 FROM ao_blkdir_test_rowcount; +1: COMMIT; +2: COMMIT; +3: ABORT; +4: COMMIT; + +DELETE FROM ao_blkdir_test_rowcount WHERE j = 7; +VACUUM ANALYZE ao_blkdir_test_rowcount; + +SELECT segno, sum(row_count) AS totalrows FROM + (SELECT (gp_toolkit.__gp_aoblkdir('ao_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') + WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno; +SELECT segno, sum(tupcount) AS totalrows FROM + gp_toolkit.__gp_aoseg('ao_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno; + +UPDATE ao_blkdir_test_rowcount SET i = i + 1; +VACUUM ANALYZE ao_blkdir_test_rowcount; + +SELECT segno, sum(row_count) AS totalrows FROM + (SELECT (gp_toolkit.__gp_aoblkdir('ao_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') + WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno; +SELECT segno, sum(tupcount) AS totalrows FROM + gp_toolkit.__gp_aoseg('ao_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno; + +DROP TABLE ao_blkdir_test_rowcount; + -------------------------------------------------------------------------------- -- AOCO tables -------------------------------------------------------------------------------- @@ -203,3 +278,79 @@ FROM gp_segment_configuration WHERE role = 'p' AND content = 0; 4: INSERT INTO aoco_blkdir_test VALUES (2, 2); DROP TABLE aoco_blkdir_test; + +-- Test `tupcount` in pg_ao(cs)seg == sum of number of `row_count` across all +-- aoblkdir entries for each . Test with commits, aborts +-- and deletes. + +-- Case1: without VACUUM ANALYZE +CREATE TABLE aoco_blkdir_test_rowcount(i int, j int) USING ao_column DISTRIBUTED BY (j); +1: BEGIN; +2: BEGIN; +3: BEGIN; +4: BEGIN; +1: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 2 FROM generate_series(1, 10) i; +2: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 3 FROM generate_series(1, 20) i; +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 30) i; +3: ABORT; +3: BEGIN; +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 40) i; +4: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 7 FROM generate_series(1, 50) i; +1: COMMIT; +2: COMMIT; +3: COMMIT; +4: COMMIT; +DELETE FROM aoco_blkdir_test_rowcount WHERE j = 7; + +CREATE INDEX aoco_blkdir_test_rowcount_idx ON aoco_blkdir_test_rowcount(i); + +SELECT segno, columngroup_no, sum(row_count) AS totalrows FROM + (SELECT (gp_toolkit.__gp_aoblkdir('aoco_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') + WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno, columngroup_no; +SELECT segno, column_num, sum(tupcount) AS totalrows FROM + gp_toolkit.__gp_aocsseg('aoco_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno, column_num; + +-- Case2: with VACUUM ANALYZE +DROP TABLE aoco_blkdir_test_rowcount; +CREATE TABLE aoco_blkdir_test_rowcount(i int, j int) USING ao_column DISTRIBUTED BY (j); +CREATE INDEX aoco_blkdir_test_rowcount_idx ON aoco_blkdir_test_rowcount(i); +1: BEGIN; +2: BEGIN; +3: BEGIN; +4: BEGIN; +1: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 2 FROM generate_series(1, 10) i; +1: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 2 FROM aoco_blkdir_test_rowcount; +1: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 2 FROM aoco_blkdir_test_rowcount; +2: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 3 FROM generate_series(1, 20) i; +2: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 3 FROM aoco_blkdir_test_rowcount; +2: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 3 FROM aoco_blkdir_test_rowcount; +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM generate_series(1, 30) i; +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM aoco_blkdir_test_rowcount; +3: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 4 FROM aoco_blkdir_test_rowcount; +4: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 7 FROM generate_series(1, 50) i; +4: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 7 FROM aoco_blkdir_test_rowcount; +4: INSERT INTO aoco_blkdir_test_rowcount SELECT i, 7 FROM aoco_blkdir_test_rowcount; +1: COMMIT; +2: COMMIT; +3: ABORT; +4: COMMIT; + +DELETE FROM aoco_blkdir_test_rowcount WHERE j = 7; +VACUUM ANALYZE aoco_blkdir_test_rowcount; + +SELECT segno, columngroup_no, sum(row_count) AS totalrows FROM + (SELECT (gp_toolkit.__gp_aoblkdir('aoco_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') + WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno, columngroup_no; +SELECT segno, column_num, sum(tupcount) AS totalrows FROM + gp_toolkit.__gp_aocsseg('aoco_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno, column_num; + +UPDATE aoco_blkdir_test_rowcount SET i = i + 1; +VACUUM ANALYZE aoco_blkdir_test_rowcount; + +SELECT segno, columngroup_no, sum(row_count) AS totalrows FROM + (SELECT (gp_toolkit.__gp_aoblkdir('aoco_blkdir_test_rowcount')).* FROM gp_dist_random('gp_id') + WHERE gp_segment_id = 0)s GROUP BY segno, columngroup_no ORDER BY segno, columngroup_no; +SELECT segno, column_num, sum(tupcount) AS totalrows FROM + gp_toolkit.__gp_aocsseg('aoco_blkdir_test_rowcount') WHERE segment_id = 0 GROUP BY segno, column_num; + +DROP TABLE aoco_blkdir_test_rowcount; From 13f6c3c63ba2d842275a78ae9d342dc20697b73e Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Fri, 18 Jul 2025 01:30:07 +0800 Subject: [PATCH 100/260] Fix fast analyze for PAX tables and simplify acquisition function selection This commit addresses several issues with fast analyze: 1. For PAX tables, we now properly estimate the number of blocks by using table_relation_estimate_size() rather than RelationGetNumberOfBlocks(), since PAX uses non-fixed block layout. This provides more accurate sampling for PAX tables. 2. Simplified the acquisition function selection logic by always using gp_acquire_sample_rows_func for regular tables, removing the conditional check for rd_tableam->relation_acquire_sample_rows. This makes the code more straightforward and consistent. 3. Fixed an issue in datumstream.c by resetting blockRowCount when closing a file during analyze operations. --- src/backend/access/aocs/aocsam.c | 15 +++++--- src/backend/access/appendonly/appendonlyam.c | 6 ++++ src/backend/commands/analyze.c | 37 +++++++++++--------- src/backend/utils/datumstream/datumstream.c | 1 + 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/backend/access/aocs/aocsam.c b/src/backend/access/aocs/aocsam.c index d3e5c15802a..d5e3fd45e59 100644 --- a/src/backend/access/aocs/aocsam.c +++ b/src/backend/access/aocs/aocsam.c @@ -478,8 +478,8 @@ aocs_blkdirscan_init(AOCSScanDesc scan) if (scan->aocsfetch == NULL) { int natts = RelationGetNumberOfAttributes(scan->rs_base.rs_rd); - scan->proj = palloc(natts * sizeof(*scan->proj)); - MemSet(scan->proj, true, natts * sizeof(*scan->proj)); + scan->proj = palloc(natts * sizeof(bool)); + MemSet(scan->proj, true, natts * sizeof(bool)); scan->aocsfetch = aocs_fetch_init(scan->rs_base.rs_rd, scan->rs_base.rs_snapshot, @@ -662,10 +662,9 @@ aocs_beginscan_internal(Relation relation, AccessShareLock, appendOnlyMetaDataSnapshot); - if ((flags & SO_TYPE_ANALYZE) != 0) + if ((flags & SO_TYPE_ANALYZE) != 0 && OidIsValid(blkdirrelid)) { - if (OidIsValid(blkdirrelid)) - aocs_blkdirscan_init(scan); + aocs_blkdirscan_init(scan); } } @@ -752,6 +751,12 @@ aocs_locate_target_segment(AOCSScanDesc scan, int64 targrow) if (rowcount <= 0) continue; + if (scan->seginfo[i]->state == AOSEG_STATE_AWAITING_DROP) + { + /* skip this segment, it is awaiting drop */ + continue; + } + if (scan->segfirstrow + rowcount - 1 >= targrow) { /* found the target segment */ diff --git a/src/backend/access/appendonly/appendonlyam.c b/src/backend/access/appendonly/appendonlyam.c index 508ddcfbaa9..b5f6a17a597 100755 --- a/src/backend/access/appendonly/appendonlyam.c +++ b/src/backend/access/appendonly/appendonlyam.c @@ -1132,6 +1132,12 @@ appendonly_locate_target_segment(AppendOnlyScanDesc scan, int64 targrow) if (rowcount <= 0) continue; + if (scan->aos_segfile_arr[i]->state == AOSEG_STATE_AWAITING_DROP) + { + /* skip this segment, it is awaiting drop */ + continue; + } + if (scan->segfirstrow + rowcount - 1 >= targrow) { /* found the target segment */ diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 5a066e211b1..e06dbea2870 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -358,16 +358,11 @@ analyze_rel_internal(Oid relid, RangeVar *relation, onerel->rd_rel->relkind == RELKIND_MATVIEW || onerel->rd_rel->relkind == RELKIND_DIRECTORY_TABLE) { - /* Regular table, so we'll use the regular row acquisition function */ - if (onerel->rd_tableam) - acquirefunc = onerel->rd_tableam->relation_acquire_sample_rows; - /* * If the TableAmRoutine's gp_acquire_sample_rows_func if NULL, we use * gp_acquire_sample_rows_func as default. */ - if (acquirefunc == NULL) - acquirefunc = gp_acquire_sample_rows_func; + acquirefunc = gp_acquire_sample_rows_func; /* Also get regular table's size */ relpages = AcquireNumberOfBlocks(onerel); @@ -1716,8 +1711,24 @@ acquire_sample_rows(Relation onerel, int elevel, * the relation should not be an AO/CO table. */ Assert(!RelationIsAppendOptimized(onerel)); + if (RelationIsPax(onerel)) + { + /* PAX use non-fixed block layout */ + BlockNumber pages; + double tuples; + double allvisfrac; + int32 attr_widths; - totalblocks = RelationGetNumberOfBlocks(onerel); + table_relation_estimate_size(onerel, &attr_widths, &pages, + &tuples, &allvisfrac); + + if (tuples > UINT_MAX) + tuples = UINT_MAX; + + totalblocks = (BlockNumber)tuples; + } + else + totalblocks = RelationGetNumberOfBlocks(onerel); /* Need a cutoff xmin for HeapTupleSatisfiesVacuum */ OldestXmin = GetOldestNonRemovableTransactionId(onerel); @@ -2055,16 +2066,8 @@ acquire_inherited_sample_rows(Relation onerel, int elevel, childrel->rd_rel->relkind == RELKIND_MATVIEW || childrel->rd_rel->relkind == RELKIND_DIRECTORY_TABLE) { - /* Regular table, so use the regular row acquisition function */ - if (childrel->rd_tableam) - acquirefunc = childrel->rd_tableam->relation_acquire_sample_rows; - - /* - * If the TableAmRoutine's relation_acquire_sample_rows if NULL, we use - * relation_acquire_sample_rows as default. - */ - if (acquirefunc == NULL) - acquirefunc = gp_acquire_sample_rows_func; + /* use relation_acquire_sample_rows as default. */ + acquirefunc = gp_acquire_sample_rows_func; relpages = AcquireNumberOfBlocks(childrel); } diff --git a/src/backend/utils/datumstream/datumstream.c b/src/backend/utils/datumstream/datumstream.c index 82c2b5a7cb3..53addc99a95 100644 --- a/src/backend/utils/datumstream/datumstream.c +++ b/src/backend/utils/datumstream/datumstream.c @@ -876,6 +876,7 @@ datumstreamread_close_file(DatumStreamRead * ds) { AppendOnlyStorageRead_CloseFile(&ds->ao_read); + ds->blockRowCount = 0; ds->need_close_file = false; } From 677d939176427a2426ff05650b5b463c0b616147 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Sat, 9 Aug 2025 01:49:32 +0800 Subject: [PATCH 101/260] Add macro documentation comments to AC_DEFINE for FTS and OpenSSL options. --- configure | 6 ++- configure.ac | 4 +- src/include/pg_config.h.in | 89 ++++++++++++++++---------------------- 3 files changed, 44 insertions(+), 55 deletions(-) diff --git a/configure b/configure index 52cc4739b4d..434d389c699 100755 --- a/configure +++ b/configure @@ -9187,7 +9187,8 @@ $as_echo "checking whether to build with external-fts... $enable_external_fts" > if test "$enable_external_fts" = no; then - $as_echo "#define USE_INTERNAL_FTS 1" >>confdefs.h + +$as_echo "#define USE_INTERNAL_FTS 1" >>confdefs.h CFLAGS="$CFLAGS -DUSE_INTERNAL_FTS=1" fi @@ -15741,7 +15742,8 @@ if test "$enable_openssl_redirect" = yes; then as_fn_error $? "--enable-openssl-redirect must specify --with-ssl" "$LINENO" 5 fi - $as_echo "#define OPENSSL_ALLOW_REDIRECT 1" >>confdefs.h + +$as_echo "#define OPENSSL_ALLOW_REDIRECT 1" >>confdefs.h fi diff --git a/configure.ac b/configure.ac index bcb47600ad2..34ccc9764be 100644 --- a/configure.ac +++ b/configure.ac @@ -919,7 +919,7 @@ AC_MSG_RESULT([checking whether to build with external-fts... $enable_external_f AC_SUBST(enable_external_fts) if test "$enable_external_fts" = no; then - AC_DEFINE([USE_INTERNAL_FTS], [1]) + AC_DEFINE([USE_INTERNAL_FTS], [1], [Define to 1 to use the internal FTS implementation.]) CFLAGS="$CFLAGS -DUSE_INTERNAL_FTS=1" fi @@ -1742,7 +1742,7 @@ if test "$enable_openssl_redirect" = yes; then AC_MSG_ERROR([--enable-openssl-redirect must specify --with-ssl]) fi - AC_DEFINE([OPENSSL_ALLOW_REDIRECT], [1]) + AC_DEFINE([OPENSSL_ALLOW_REDIRECT], [1], [Define to 1 if you want to allow OpenSSL redirects.]) fi # Check for curl. diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index b5cce8d6162..a5393e85076 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -60,25 +60,16 @@ /* Define to 1 to build with ic-proxy support (--enable-ic-proxy) */ #undef ENABLE_IC_PROXY -/* Define to 1 to disable preload interconnect module */ +/* Define to 1 to preload with ic module */ #undef ENABLE_PRELOAD_IC_MODULE /* Define to 1 to build client libraries as thread-safe code. (--enable-thread-safety) */ #undef ENABLE_THREAD_SAFETY -/* Define to 1 to build with fault injector. (--enable-faultinjector) */ +/* Define to 1 to build with fault injector. */ #undef FAULT_INJECTOR -/* Define to nothing if C supports flexible array members, and to 1 if it does - not. That way, with a declaration like `struct s { int n; double - d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 - compilers. When computing the size of such an object, don't use 'sizeof - (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' - instead. Don't use 'offsetof (struct s, d[0])', as this doesn't work with - MSVC and with C++ compilers. */ -#undef FLEXIBLE_ARRAY_MEMBER - /* float4 values are passed by value if 'true', by reference if 'false' (always true in GPDB) */ #undef FLOAT4PASSBYVAL @@ -130,6 +121,9 @@ /* Define to 1 if you have the `BIO_meth_new' function. */ #undef HAVE_BIO_METH_NEW +/* Define to 1 if you have the `cbrt' function. */ +#undef HAVE_CBRT + /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME @@ -148,9 +142,6 @@ /* Define to 1 if you have the `CRYPTO_lock' function. */ #undef HAVE_CRYPTO_LOCK -/* Define to 1 if you have the header file. */ -#undef HAVE_CRYPT_H - /* define if the compiler supports basic C++14 syntax */ #undef HAVE_CXX14 @@ -386,6 +377,9 @@ /* Define to 1 if you have the `execinfo' library (-lexecinfo). */ #undef HAVE_LIBEXECINFO +/* Define to 1 if you have the `jansson' library (-ljansson). */ +#undef HAVE_LIBJANSSON + /* Define to 1 if you have the `ldap' library (-lldap). */ #undef HAVE_LIBLDAP @@ -407,6 +401,9 @@ /* Define to 1 if you have the `rt' library (-lrt). */ #undef HAVE_LIBRT +/* Define to 1 if you have the `seccomp' library (-lseccomp). */ +#undef HAVE_LIBSECCOMP + /* Define to 1 if you have the `selinux' library (-lselinux). */ #undef HAVE_LIBSELINUX @@ -503,6 +500,9 @@ /* Define to 1 if you have the `pread' function. */ #undef HAVE_PREAD +/* Define if protobuf is available */ +#undef HAVE_PROTOBUF + /* Define to 1 if you have the `pstat' function. */ #undef HAVE_PSTAT @@ -744,10 +744,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H -/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use - `HAVE_STRUCT_TM_TM_ZONE' instead. */ -#undef HAVE_TM_ZONE - /* Define to 1 if your compiler understands `typeof' or something similar. */ #undef HAVE_TYPEOF @@ -796,14 +792,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_WINLDAP_H - /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK2_H /* Define to 1 if you have the `writev' function. */ #undef HAVE_WRITEV - /* Define to 1 if you have the `X509_get_signature_nid' function. */ #undef HAVE_X509_GET_SIGNATURE_NID @@ -813,6 +807,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_YAML_H +/* Define if zstd is available */ +#undef HAVE_ZSTD + /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL @@ -867,9 +864,6 @@ /* Define to 1 if you have the `__strtoull' function. */ #undef HAVE___STRTOULL -/* Define to 1 if you have the `etcdlib' library (-letcdlib). */ -#undef HAVE_LIBETCDLIB - /* Define to the appropriate printf length modifier for 64-bit ints. */ #undef INT64_MODIFIER @@ -882,6 +876,9 @@ /* Define bytes to use libc memset(). */ #undef MEMSET_LOOP_LIMIT +/* Define to 1 if you want to allow OpenSSL redirects. */ +#undef OPENSSL_ALLOW_REDIRECT + /* Define to the OpenSSL API version in use. This avoids deprecation warnings from newer OpenSSL versions. */ #undef OPENSSL_API_COMPAT @@ -930,7 +927,6 @@ #undef PG_USE_STDBOOL /* Postgres version Apache Cloudberry is based on */ -/* PostgreSQL version as a string */ #undef PG_VERSION /* PostgreSQL version as a number */ @@ -960,7 +956,7 @@ RELSEG_SIZE requires an initdb. */ #undef RELSEG_SIZE -/* Define to 1 to use serverless mode of Cloudberry. (--enable-serverless) */ +/* Define to 1 to use serverless mode of Cloudberry. (--enable-serverless) */ #undef SERVERLESS /* The size of `bool', as computed by sizeof. */ @@ -1005,9 +1001,6 @@ /* Define to 1 to build with libcurl support. (--with-libcurl) */ #undef USE_CURL -/* Define to use /dev/urandom for random number generation */ -#undef USE_DEV_URANDOM - /* Define to 1 if you want float4 values to be passed by value. (Always defined in GPDB) */ #undef USE_FLOAT4_BYVAL @@ -1019,10 +1012,12 @@ /* Define to 1 to build with gpcloud (--enable-gpcloud) */ #undef USE_GPCLOUD - /* Define to build with ICU support. (--with-icu) */ #undef USE_ICU +/* Define to 1 to use the internal FTS implementation. */ +#undef USE_INTERNAL_FTS + /* Define to 1 to build with LDAP support. (--with-ldap) */ #undef USE_LDAP @@ -1033,18 +1028,18 @@ (--with-libxslt) */ #undef USE_LIBXSLT +/* Define to 1 to build Cloudberry using the shared library libpostgres.so + (--enable-link-postgres-with-shared) */ +#undef USE_LINK_POSTGRES_WITH_SHARED + /* Define to 1 to build with LLVM based JIT support. (--with-llvm) */ #undef USE_LLVM -/* Define to 1 to build with Mapreduce capabilities (--enable-mapreduce) */ -#undef USE_MAPREDUCE - -/* Define to 1 to build with shared postgres backend capabilities (--enable-shared-postgres-backend) */ -#undef USE_SHARED_POSTGRES_BACKEND - /* Define to 1 to build with LZ4 support. (--with-lz4) */ #undef USE_LZ4 +/* Define to 1 to build with Mapreduce capabilities (--enable-mapreduce) */ +#undef USE_MAPREDUCE /* Define to select named POSIX semaphores. */ #undef USE_NAMED_POSIX_SEMAPHORES @@ -1052,21 +1047,19 @@ /* Define to 1 to build with OpenSSL support. (--with-ssl=openssl) */ #undef USE_OPENSSL -/* Define to use OpenSSL for random number generation */ -#undef USE_OPENSSL_RANDOM - -/* Define to use OpenSSL redirect access internal implements if not implements */ -#undef OPENSSL_ALLOW_REDIRECT - /* Define to 1 to build with Cloudberry ORCA optimizer. (--enable-orca) */ #undef USE_ORCA -/* Define to 1 to build with pax support. (--enable-pax) */ -#undef USE_PAX_STORAGE - /* Define to 1 to build with PAM support. (--with-pam) */ #undef USE_PAM +/* Define to 1 to support PAX */ +#undef USE_PAX_STORAGE + +/* Define to 1 to build with shared Cloudberry backend capabilities + (--enable-shared-postgres-backend) */ +#undef USE_SHARED_POSTGRES_BACKEND + /* Define to 1 to use software CRC-32C implementation (slicing-by-8). */ #undef USE_SLICING_BY_8_CRC32C @@ -1100,9 +1093,6 @@ /* Define to 1 if `wcstombs_l' requires . */ #undef WCSTOMBS_L_IN_XLOCALE -/* Define to build with external FTS support. (--enable-external-fts) */ -#undef USE_INTERNAL_FTS - /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD @@ -1122,10 +1112,7 @@ */ #undef XLOG_BLCKSZ -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif + /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS From e803eb704d3ea3bc8f3cfb46b799eec68041dc58 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Thu, 7 Aug 2025 18:54:12 +0800 Subject: [PATCH 102/260] Fix 'dispath' typo in direct dispatch code. Corrected the misspelling of 'dispatch' (was 'dispath') in GPDB's direct dispatch code and other places, including variable names and comments where applicable.No functionality is affected. Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/cdb/cdbutil.c | 2 +- src/backend/commands/cluster.c | 2 +- src/backend/optimizer/plan/createplan.c | 4 ++-- src/backend/optimizer/util/pathnode.c | 2 +- src/include/cdb/cdbtm.h | 2 +- src/include/nodes/pathnodes.h | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/backend/cdb/cdbutil.c b/src/backend/cdb/cdbutil.c index f732368d725..a241549662d 100644 --- a/src/backend/cdb/cdbutil.c +++ b/src/backend/cdb/cdbutil.c @@ -122,7 +122,7 @@ typedef struct HostPrimaryCountEntry * * In phase 2 of 2PC, current xact has been marked to TRANS_COMMIT/ABORT, * COMMIT_PREPARED or ABORT_PREPARED DTM are performed, if they failed, - * dispather disconnect and destroy all gangs and fetch the latest segment + * dispatcher disconnect and destroy all gangs and fetch the latest segment * configurations to do RETRY_COMMIT_PREPARED or RETRY_ABORT_PREPARED, * however, postgres disallow catalog lookups outside of xacts. * diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 9ba76564998..47cc7f733e2 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -210,7 +210,7 @@ cluster(ParseState *pstate, ClusterStmt *stmt, bool isTopLevel) table_close(rel, NoLock); /* Do the job. */ - /* GPDB_14_MERGE_FIXME: do we need the return value of cluster_rel to dispath ? */ + /* GPDB_14_MERGE_FIXME: do we need the return value of cluster_rel to dispatch ? */ cluster_rel(tableOid, indexOid, ¶ms); if (Gp_role == GP_ROLE_DISPATCH) diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 7ce61a9ab9e..53c1bf7d338 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -2312,12 +2312,12 @@ create_projection_plan(PlannerInfo *root, ProjectionPath *best_path, int flags) * https://github.com/greenplum-db/gpdb/issues/9874 for more * detailed info. */ - if (root->config->gp_enable_direct_dispatch && best_path->direct_dispath_contentIds) + if (root->config->gp_enable_direct_dispatch && best_path->direct_dispatch_contentIds) { DirectDispatchInfo dispatchInfo; dispatchInfo.isDirectDispatch = true; - dispatchInfo.contentIds = best_path->direct_dispath_contentIds; + dispatchInfo.contentIds = best_path->direct_dispatch_contentIds; dispatchInfo.haveProcessedAnyCalculations = true; MergeDirectDispatchCalculationInfo(&root->curSlice->directDispatch, &dispatchInfo); diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 871a7b1b35f..0347fe5030c 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -2092,7 +2092,7 @@ set_append_path_locus(PlannerInfo *root, Path *pathnode, RelOptInfo *rel, * gp_execution_segment() = here, so we should update * direct dispatch info when creating plan. */ - ((ProjectionPath *) subpath)->direct_dispath_contentIds = list_make1_int(gp_session_id % numsegments); + ((ProjectionPath *) subpath)->direct_dispatch_contentIds = list_make1_int(gp_session_id % numsegments); CdbPathLocus_MakeStrewn(&(subpath->locus), numsegments, diff --git a/src/include/cdb/cdbtm.h b/src/include/cdb/cdbtm.h index 2bf259a8744..dc05e1a79dd 100644 --- a/src/include/cdb/cdbtm.h +++ b/src/include/cdb/cdbtm.h @@ -217,7 +217,7 @@ typedef struct TMGXACT * When first assigning and fetching gxid, using this to keep * atomic and then assign/fetch gxid with its value. * Only use this on QD when necessary as QE's gxid and - * DistributedSnapshot is dispathed from QD. + * DistributedSnapshot is dispatched from QD. */ pg_atomic_uint64 atomic_gxid; #endif diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h index b81b5020089..b02a2ccf0c1 100644 --- a/src/include/nodes/pathnodes.h +++ b/src/include/nodes/pathnodes.h @@ -2133,7 +2133,7 @@ typedef struct ProjectionPath * CDB: projection with qual gp_execution_segment() = , * for such case we should consider update directdispatch info. */ - List *direct_dispath_contentIds; + List *direct_dispatch_contentIds; } ProjectionPath; typedef struct RuntimeFilterPath From 8a67cf7c19d7990b40960596c286b8f8e46be64b Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Mon, 11 Aug 2025 15:34:28 +0800 Subject: [PATCH 103/260] Add option to avoid additional generated EquivalenceCalss for RelabelType in cdb_pull_up_eclass. Fix issue https://github.com/apache/cloudberry/issues/1301 For partition tables, cdb_pull_up_eclass will call get_eclass_for_sort_expr to find an existing equivalence class it is a member of. It will fail and build a new single-member EquivalenceClass for it when there is RelabelType. That will cause cdbpath_match_preds_to_both_distkeys return false even the locus are compatible because the RestrictInfo's left_ec/right_ec and rel's distribution key's dk_eclasses are two different pointers. And unnecessary Motions will be added in that case. CREATE TABLE t1 (id varchar(32), date date) DISTRIBUTED BY (id) PARTITION BY RANGE (date) (START (date '2016-01-01') INCLUSIVE END (date '2016-01-02') EXCLUSIVE EVERY (INTERVAL '1 day')); CREATE TABLE t2 (id varchar(32)) DISTRIBUTED BY (id); EXPLAIN(COSTS OFF) SELECT COUNT(*) FROM t1 JOIN t2 USING(id); QUERY PLAN ------------------------------------------------------------------ Aggregate -> Gather Motion 3:1 (slice1; segments: 3) -> Hash Join Hash Cond: ((t1.id)::text = (t2.id)::text) -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: t1.id -> Seq Scan on t1_1_prt_1 t1 -> Hash -> Seq Scan on t2 Optimizer: Postgres query optimizer (10 rows) cdbpullup_findEclassInTargetList() will ignore the presence or absence of a RelabelType node atop either expr in determining whether an EC member expr matches a targetlist expr. But get_eclass_for_sort_expr() didn't handle additional RelabelType and a new EC may be generated. We should not disturb get_eclass_for_sort_expr() as it's used at many places and UPSTREAM didn't add RelabelType to EC for that case. If find a sub_distkeyexpr from cdbpullup_findEclassInTargetList and we know that there is RelabelType stripped inside, we don't need to try to fetch or generate new EC in get_eclass_for_sort_expr(). So, add options for cdb_pull_up_eclass to ignore RelabelType when needed. Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/cdb/cdbpathlocus.c | 8 +- src/backend/cdb/cdbpullup.c | 12 ++- src/backend/optimizer/path/pathkeys.c | 9 +- src/include/cdb/cdbpullup.h | 2 +- src/include/optimizer/paths.h | 3 +- src/test/regress/expected/partition_join.out | 95 ++++++++++++++++++++ src/test/regress/sql/partition_join.sql | 40 +++++++++ 7 files changed, 160 insertions(+), 9 deletions(-) diff --git a/src/backend/cdb/cdbpathlocus.c b/src/backend/cdb/cdbpathlocus.c index 04fba4b367a..29930085429 100644 --- a/src/backend/cdb/cdbpathlocus.c +++ b/src/backend/cdb/cdbpathlocus.c @@ -518,7 +518,8 @@ cdbpathlocus_from_subquery(struct PlannerInfo *root, rel->relids, usable_subtlist, new_vars, - -1 /* not used */); + -1 /* not used */, + false/* not used */); if (outer_ec) { outer_dk = makeNode(DistributionKey); @@ -589,7 +590,7 @@ cdbpathlocus_get_distkey_exprs(CdbPathLocus locus, EquivalenceClass *dk_eclass = (EquivalenceClass *) lfirst(ec_cell); item = cdbpullup_findEclassInTargetList(dk_eclass, targetlist, - distkey->dk_opfamily); + distkey->dk_opfamily, NULL); if (item) break; @@ -668,7 +669,8 @@ cdbpathlocus_pull_above_projection(struct PlannerInfo *root, relids, targetlist, newvarlist, - newrelid); + newrelid, + true /* ignore RelabelType */); if (new_ec) break; } diff --git a/src/backend/cdb/cdbpullup.c b/src/backend/cdb/cdbpullup.c index c6f243ae08a..a7aa6486856 100644 --- a/src/backend/cdb/cdbpullup.c +++ b/src/backend/cdb/cdbpullup.c @@ -241,7 +241,7 @@ cdbpullup_expr(Expr *expr, List *targetlist, List *newvarlist, Index newvarno) */ Expr * cdbpullup_findEclassInTargetList(EquivalenceClass *eclass, List *targetlist, - Oid hashOpFamily) + Oid hashOpFamily, bool *relabel_stripped) { ListCell *lc; @@ -276,7 +276,11 @@ cdbpullup_findEclassInTargetList(EquivalenceClass *eclass, List *targetlist, *------- */ while (IsA(key, RelabelType)) + { key = (Expr *) ((RelabelType *) key)->arg; + if(relabel_stripped && (!*relabel_stripped)) + *relabel_stripped = true; + } foreach(lc_tle, targetlist) { @@ -293,7 +297,11 @@ cdbpullup_findEclassInTargetList(EquivalenceClass *eclass, List *targetlist, /* ignore RelabelType nodes on both sides */ naked_tlexpr = tlexpr; while (naked_tlexpr && IsA(naked_tlexpr, RelabelType)) + { naked_tlexpr = (Node *) ((RelabelType *) naked_tlexpr)->arg; + if(relabel_stripped && (!*relabel_stripped)) + *relabel_stripped = true; + } if (IsA(key, Var)) { @@ -342,7 +350,7 @@ cdbpullup_truncatePathKeysForTargetList(List *pathkeys, List *targetlist) { PathKey *pk = (PathKey *) lfirst(lc); - if (!cdbpullup_findEclassInTargetList(pk->pk_eclass, targetlist, InvalidOid)) + if (!cdbpullup_findEclassInTargetList(pk->pk_eclass, targetlist, InvalidOid, NULL)) break; new_pathkeys = lappend(new_pathkeys, pk); diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c index ece5f3cde82..48a60c137d3 100644 --- a/src/backend/optimizer/path/pathkeys.c +++ b/src/backend/optimizer/path/pathkeys.c @@ -1551,23 +1551,28 @@ cdb_pull_up_eclass(PlannerInfo *root, Relids relids, List *targetlist, List *newvarlist, - Index newrelid) + Index newrelid, + bool ignore_relabel) { Expr *sub_distkeyexpr; EquivalenceClass *outer_ec; Expr *newexpr = NULL; Index sortref = 0; + bool relabel_stripped = false; Assert(eclass); Assert(!newvarlist || list_length(newvarlist) == list_length(targetlist)); /* Find an expr that we can rewrite to use the projected columns. */ - sub_distkeyexpr = cdbpullup_findEclassInTargetList(eclass, targetlist, InvalidOid); + sub_distkeyexpr = cdbpullup_findEclassInTargetList(eclass, targetlist, InvalidOid, &relabel_stripped); /* Replace expr's Var nodes with new ones referencing the targetlist. */ if (sub_distkeyexpr) { + if (ignore_relabel && relabel_stripped) + return eclass; + newexpr = cdbpullup_expr(sub_distkeyexpr, targetlist, newvarlist, diff --git a/src/include/cdb/cdbpullup.h b/src/include/cdb/cdbpullup.h index 535b2987ce1..8c23a4a64f2 100644 --- a/src/include/cdb/cdbpullup.h +++ b/src/include/cdb/cdbpullup.h @@ -55,7 +55,7 @@ Expr * cdbpullup_expr(Expr *expr, List *targetlist, List *newvarlist, Index newvarno); -extern Expr *cdbpullup_findEclassInTargetList(EquivalenceClass *eclass, List *targetlist, Oid hashOpFamily); +extern Expr *cdbpullup_findEclassInTargetList(EquivalenceClass *eclass, List *targetlist, Oid hashOpFamily, bool *relabel_stripped); extern List *cdbpullup_truncatePathKeysForTargetList(List *pathkeys, List *targetlist); diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h index 9b890e95566..a90c654cea6 100644 --- a/src/include/optimizer/paths.h +++ b/src/include/optimizer/paths.h @@ -283,7 +283,8 @@ cdb_pull_up_eclass(PlannerInfo *root, Relids relids, List *targetlist, List *newvarlist, - Index newrelid); + Index newrelid, + bool ignore_relabel); extern List *make_pathkeys_for_sortclauses(PlannerInfo *root, List *sortclauses, diff --git a/src/test/regress/expected/partition_join.out b/src/test/regress/expected/partition_join.out index 80bde64b3db..107cbc746e5 100644 --- a/src/test/regress/expected/partition_join.out +++ b/src/test/regress/expected/partition_join.out @@ -5700,3 +5700,98 @@ SELECT t1.*, t2.* FROM alpha t1 INNER JOIN beta t2 ON (t1.a = t2.a AND t1.b = t2 1 | 209 | 0009 | 1 | 209 | 0009 (8 rows) +-- +-- test issue https://github.com/apache/cloudberry/issues/1301 +-- +begin; +create table t_issue_1301_big( + id varchar(32), + t varchar(32) +) distributed by (id) +partition by range(t) +( +partition p1 start ('0') end ('5'), +partition p2 start ('5') end ('9999999999999999999') +); +create index idx_t_issue_1301_big_id on t_issue_1301_big(id); +insert into t_issue_1301_big select seq, seq from generate_series(1, 100000) as seq; +create table t_issue_1301_small( + id varchar(32), + t varchar(32) +) distributed by (id); +insert into t_issue_1301_small select seq*10000, seq*10000 from generate_series(1, 100) as seq; +set local optimizer = off; +set local enable_nestloop to on; +analyze t_issue_1301_big; +analyze t_issue_1301_small; +explain(costs off) select a.* from t_issue_1301_small a left join t_issue_1301_big b on a.id=b.id; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + -> Nested Loop Left Join + -> Seq Scan on t_issue_1301_small a + -> Append + -> Index Only Scan using t_issue_1301_big_1_prt_p1_id_idx on t_issue_1301_big_1_prt_p1 b_1 + Index Cond: (id = (a.id)::text) + -> Index Only Scan using t_issue_1301_big_1_prt_p2_id_idx on t_issue_1301_big_1_prt_p2 b_2 + Index Cond: (id = (a.id)::text) + Optimizer: Postgres query optimizer +(9 rows) + +abort; +BEGIN; +CREATE TABLE t1 (id varchar(32), date date) DISTRIBUTED BY (id) +PARTITION BY RANGE (date) +(START (date '2016-01-01') INCLUSIVE END (date '2016-01-04') EXCLUSIVE EVERY (INTERVAL '1 day')); +CREATE TABLE t2 (id varchar(32)) DISTRIBUTED BY (id); +analyze t1; +analyze t2; +\d+ t1; + Partitioned table "public.t1" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+-----------------------+-----------+----------+---------+----------+--------------+------------- + id | character varying(32) | | | | extended | | + date | date | | | | plain | | +Partition key: RANGE (date) +Partitions: t1_1_prt_1 FOR VALUES FROM ('01-01-2016') TO ('01-02-2016'), + t1_1_prt_2 FOR VALUES FROM ('01-02-2016') TO ('01-03-2016'), + t1_1_prt_3 FOR VALUES FROM ('01-03-2016') TO ('01-04-2016') +Distributed by: (id) + +\d+ t2; + Table "public.t2" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+-----------------------+-----------+----------+---------+----------+--------------+------------- + id | character varying(32) | | | | extended | | +Distributed by: (id) + +EXPLAIN(COSTS OFF) SELECT COUNT(*) FROM t1_1_prt_1 JOIN t2 USING(id); + QUERY PLAN +------------------------------------------------------------------ + Aggregate + -> Gather Motion 3:1 (slice1; segments: 3) + -> Hash Join + Hash Cond: ((t1_1_prt_1.id)::text = (t2.id)::text) + -> Seq Scan on t1_1_prt_1 + -> Hash + -> Seq Scan on t2 + Optimizer: Postgres query optimizer +(8 rows) + +EXPLAIN(COSTS OFF) SELECT COUNT(*) FROM t1 JOIN t2 USING(id); + QUERY PLAN +------------------------------------------------------------------ + Aggregate + -> Gather Motion 3:1 (slice1; segments: 3) + -> Hash Join + Hash Cond: ((t1.id)::text = (t2.id)::text) + -> Append + -> Seq Scan on t1_1_prt_1 t1_1 + -> Seq Scan on t1_1_prt_2 t1_2 + -> Seq Scan on t1_1_prt_3 t1_3 + -> Hash + -> Seq Scan on t2 + Optimizer: Postgres query optimizer +(11 rows) + +ABORT; diff --git a/src/test/regress/sql/partition_join.sql b/src/test/regress/sql/partition_join.sql index 24baa458b1d..404f9242b16 100644 --- a/src/test/regress/sql/partition_join.sql +++ b/src/test/regress/sql/partition_join.sql @@ -1173,3 +1173,43 @@ SELECT t1.*, t2.* FROM alpha t1 INNER JOIN beta t2 ON (t1.a = t2.a AND t1.c = t2 EXPLAIN (COSTS OFF) SELECT t1.*, t2.* FROM alpha t1 INNER JOIN beta t2 ON (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c) WHERE ((t1.b >= 100 AND t1.b < 110) OR (t1.b >= 200 AND t1.b < 210)) AND ((t2.b >= 100 AND t2.b < 110) OR (t2.b >= 200 AND t2.b < 210)) AND t1.c IN ('0004', '0009') ORDER BY t1.a, t1.b; SELECT t1.*, t2.* FROM alpha t1 INNER JOIN beta t2 ON (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c) WHERE ((t1.b >= 100 AND t1.b < 110) OR (t1.b >= 200 AND t1.b < 210)) AND ((t2.b >= 100 AND t2.b < 110) OR (t2.b >= 200 AND t2.b < 210)) AND t1.c IN ('0004', '0009') ORDER BY t1.a, t1.b; + +-- +-- test issue https://github.com/apache/cloudberry/issues/1301 +-- +begin; +create table t_issue_1301_big( + id varchar(32), + t varchar(32) +) distributed by (id) +partition by range(t) +( +partition p1 start ('0') end ('5'), +partition p2 start ('5') end ('9999999999999999999') +); +create index idx_t_issue_1301_big_id on t_issue_1301_big(id); +insert into t_issue_1301_big select seq, seq from generate_series(1, 100000) as seq; +create table t_issue_1301_small( + id varchar(32), + t varchar(32) +) distributed by (id); +insert into t_issue_1301_small select seq*10000, seq*10000 from generate_series(1, 100) as seq; +set local optimizer = off; +set local enable_nestloop to on; +analyze t_issue_1301_big; +analyze t_issue_1301_small; +explain(costs off) select a.* from t_issue_1301_small a left join t_issue_1301_big b on a.id=b.id; +abort; + +BEGIN; +CREATE TABLE t1 (id varchar(32), date date) DISTRIBUTED BY (id) +PARTITION BY RANGE (date) +(START (date '2016-01-01') INCLUSIVE END (date '2016-01-04') EXCLUSIVE EVERY (INTERVAL '1 day')); +CREATE TABLE t2 (id varchar(32)) DISTRIBUTED BY (id); +analyze t1; +analyze t2; +\d+ t1; +\d+ t2; +EXPLAIN(COSTS OFF) SELECT COUNT(*) FROM t1_1_prt_1 JOIN t2 USING(id); +EXPLAIN(COSTS OFF) SELECT COUNT(*) FROM t1 JOIN t2 USING(id); +ABORT; From 1d7d4f53d6d9a73e7dd6357c0d8ba3a4325fcde4 Mon Sep 17 00:00:00 2001 From: Brent Doil Date: Fri, 26 Jan 2024 10:32:27 -0500 Subject: [PATCH 104/260] Revert "Ban enums as distribution and partition keys" This reverts commit a863997e6459e907979478f013b588447385ca07. The issues with restoring enums in distribution and partition keys has been resolved in pg_dump by the cherry-pick of 7e7c5b683985c85fb990c4d49ab960cbc83434b4. A gpbackup fix disables gp_enable_segment_copy_checking before loading a table/matview with an enum hash distribution/partition, then reorganizing the table after it's loaded and resetting the GUC. With these two changes it's safe to unban enums as distribution and hash keys. --- contrib/btree_gin/expected/enum.out | 29 ++- contrib/btree_gin/sql/enum.sql | 25 ++- src/backend/commands/tablecmds.c | 5 - src/backend/parser/parse_utilcmd.c | 7 - src/test/regress/expected/enum.out | 170 +++++++++--------- .../regress/expected/enum_dist_part_ban.out | 24 --- .../expected/gpdist_legacy_opclasses.out | 27 ++- .../gpdist_legacy_opclasses_optimizer.out | 28 ++- src/test/regress/expected/partition_prune.out | 4 +- .../expected/partition_prune_optimizer.out | 4 +- src/test/regress/greenplum_schedule | 2 - src/test/regress/sql/enum.sql | 22 +-- src/test/regress/sql/enum_dist_part_ban.sql | 22 --- .../regress/sql/gpdist_legacy_opclasses.sql | 8 +- src/test/regress/sql/partition_prune.sql | 2 +- 15 files changed, 145 insertions(+), 234 deletions(-) delete mode 100644 src/test/regress/expected/enum_dist_part_ban.out delete mode 100644 src/test/regress/sql/enum_dist_part_ban.sql diff --git a/contrib/btree_gin/expected/enum.out b/contrib/btree_gin/expected/enum.out index 2b0ddf11eb3..c4ac1174ea2 100644 --- a/contrib/btree_gin/expected/enum.out +++ b/contrib/btree_gin/expected/enum.out @@ -1,14 +1,11 @@ set enable_seqscan=off; CREATE TYPE rainbow AS ENUM ('r','o','y','g','b','i','v'); CREATE TABLE test_enum ( - h int, i rainbow ); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'h' as the Greenplum Database data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -INSERT INTO test_enum VALUES (1, 'v'),(2, 'y'),(3, 'r'),(4, 'g'),(5, 'o'),(6, 'i'),(7, 'b'); +INSERT INTO test_enum VALUES ('v'),('y'),('r'),('g'),('o'),('i'),('b'); CREATE INDEX idx_enum ON test_enum USING gin (i); -SELECT i FROM test_enum WHERE i<'g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i<'g'::rainbow ORDER BY i; i --- r @@ -16,7 +13,7 @@ SELECT i FROM test_enum WHERE i<'g'::rainbow ORDER BY i; y (3 rows) -SELECT i FROM test_enum WHERE i<='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i<='g'::rainbow ORDER BY i; i --- r @@ -25,13 +22,13 @@ SELECT i FROM test_enum WHERE i<='g'::rainbow ORDER BY i; g (4 rows) -SELECT i FROM test_enum WHERE i='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i='g'::rainbow ORDER BY i; i --- g (1 row) -SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; i --- g @@ -40,7 +37,7 @@ SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; v (4 rows) -SELECT i FROM test_enum WHERE i>'g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>'g'::rainbow ORDER BY i; i --- b @@ -48,7 +45,7 @@ SELECT i FROM test_enum WHERE i>'g'::rainbow ORDER BY i; v (3 rows) -explain (costs off) SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; +explain (costs off) SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; QUERY PLAN ----------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) @@ -59,17 +56,11 @@ explain (costs off) SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; Recheck Cond: (i >= 'g'::rainbow) -> Bitmap Index Scan on idx_enum Index Cond: (i >= 'g'::rainbow) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: Postgres query optimizer (9 rows) -- make sure we handle the non-evenly-numbered oid case for enums create type e as enum ('0', '2', '3'); alter type e add value '1' after '0'; -CREATE TABLE t ( - h int, - i e -); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'h' as the Greenplum Database data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -insert into t select j, (j % 4)::text::e from generate_series(0, 100000) as j; -create index on t using gin (i); +create table t as select (i % 4)::text::e from generate_series(0, 100000) as i; +create index on t using gin (e); diff --git a/contrib/btree_gin/sql/enum.sql b/contrib/btree_gin/sql/enum.sql index 9876be88c85..f35162f8f58 100644 --- a/contrib/btree_gin/sql/enum.sql +++ b/contrib/btree_gin/sql/enum.sql @@ -1,30 +1,25 @@ set enable_seqscan=off; + CREATE TYPE rainbow AS ENUM ('r','o','y','g','b','i','v'); CREATE TABLE test_enum ( - h int, i rainbow ); -INSERT INTO test_enum VALUES (1, 'v'),(2, 'y'),(3, 'r'),(4, 'g'),(5, 'o'),(6, 'i'),(7, 'b'); +INSERT INTO test_enum VALUES ('v'),('y'),('r'),('g'),('o'),('i'),('b'); CREATE INDEX idx_enum ON test_enum USING gin (i); -SELECT i FROM test_enum WHERE i<'g'::rainbow ORDER BY i; -SELECT i FROM test_enum WHERE i<='g'::rainbow ORDER BY i; -SELECT i FROM test_enum WHERE i='g'::rainbow ORDER BY i; -SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; -SELECT i FROM test_enum WHERE i>'g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i<'g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i<='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>'g'::rainbow ORDER BY i; -explain (costs off) SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; +explain (costs off) SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; -- make sure we handle the non-evenly-numbered oid case for enums create type e as enum ('0', '2', '3'); alter type e add value '1' after '0'; - -CREATE TABLE t ( - h int, - i e -); -insert into t select j, (j % 4)::text::e from generate_series(0, 100000) as j; -create index on t using gin (i); +create table t as select (i % 4)::text::e from generate_series(0, 100000) as i; +create index on t using gin (e); diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 573c57af8de..e731e37142c 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -21176,11 +21176,6 @@ ComputePartitionAttrs(ParseState *pstate, Relation rel, List *partParams, AttrNu } } - if (strategy == PARTITION_STRATEGY_HASH && type_is_enum(atttype)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot use ENUM column \"%s\" in PARTITION BY statement for hash partitions", pelem->name))); - /* * Apply collation override if any */ diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 49063b5f7fd..223c6fcb48b 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -3137,13 +3137,6 @@ getPolicyForDistributedBy(DistributedBy *distributedBy, TupleDesc tupdesc) if (strcmp(colname, NameStr(attr->attname)) == 0) { Oid opclass; - Oid typid; - - typid = getBaseType(attr->atttypid); - if (type_is_enum(typid)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot use ENUM column \"%s\" in DISTRIBUTED BY statement", colname))); opclass = cdb_get_opclass_for_column_def(dkelem->opclass, attr->atttypid); diff --git a/src/test/regress/expected/enum.out b/src/test/regress/expected/enum.out index 3b8af8008e1..686ab49742d 100644 --- a/src/test/regress/expected/enum.out +++ b/src/test/regress/expected/enum.out @@ -198,71 +198,71 @@ ORDER BY enumsortorder; -- -- Basic table creation, row selection -- -CREATE TABLE enumtest (i int, col rainbow); -INSERT INTO enumtest values (1, 'red'), (2, 'orange'), (3, 'yellow'), (4, 'green'); -COPY enumtest (i, col) FROM stdin; +CREATE TABLE enumtest (col rainbow); +INSERT INTO enumtest values ('red'), ('orange'), ('yellow'), ('green'); +COPY enumtest FROM stdin; SELECT * FROM enumtest; - i | col ----+-------- - 5 | blue - 6 | purple - 2 | orange - 3 | yellow - 4 | green - 1 | red + col +-------- + red + orange + yellow + green + blue + purple (6 rows) -- -- Operators, no index -- SELECT * FROM enumtest WHERE col = 'orange'; - i | col ----+-------- - 2 | orange + col +-------- + orange (1 row) SELECT * FROM enumtest WHERE col <> 'orange' ORDER BY col; - i | col ----+-------- - 1 | red - 3 | yellow - 4 | green - 5 | blue - 6 | purple + col +-------- + red + yellow + green + blue + purple (5 rows) SELECT * FROM enumtest WHERE col > 'yellow' ORDER BY col; - i | col ----+-------- - 4 | green - 5 | blue - 6 | purple + col +-------- + green + blue + purple (3 rows) SELECT * FROM enumtest WHERE col >= 'yellow' ORDER BY col; - i | col ----+-------- - 3 | yellow - 4 | green - 5 | blue - 6 | purple + col +-------- + yellow + green + blue + purple (4 rows) SELECT * FROM enumtest WHERE col < 'green' ORDER BY col; - i | col ----+-------- - 1 | red - 2 | orange - 3 | yellow + col +-------- + red + orange + yellow (3 rows) SELECT * FROM enumtest WHERE col <= 'green' ORDER BY col; - i | col ----+-------- - 1 | red - 2 | orange - 3 | yellow - 4 | green + col +-------- + red + orange + yellow + green (4 rows) -- @@ -311,53 +311,53 @@ SET enable_bitmapscan = off; -- CREATE INDEX enumtest_btree ON enumtest USING btree (col); SELECT * FROM enumtest WHERE col = 'orange'; - i | col ----+-------- - 2 | orange + col +-------- + orange (1 row) SELECT * FROM enumtest WHERE col <> 'orange' ORDER BY col; - i | col ----+-------- - 1 | red - 3 | yellow - 4 | green - 5 | blue - 6 | purple + col +-------- + red + yellow + green + blue + purple (5 rows) SELECT * FROM enumtest WHERE col > 'yellow' ORDER BY col; - i | col ----+-------- - 4 | green - 5 | blue - 6 | purple + col +-------- + green + blue + purple (3 rows) SELECT * FROM enumtest WHERE col >= 'yellow' ORDER BY col; - i | col ----+-------- - 3 | yellow - 4 | green - 5 | blue - 6 | purple + col +-------- + yellow + green + blue + purple (4 rows) SELECT * FROM enumtest WHERE col < 'green' ORDER BY col; - i | col ----+-------- - 1 | red - 2 | orange - 3 | yellow + col +-------- + red + orange + yellow (3 rows) SELECT * FROM enumtest WHERE col <= 'green' ORDER BY col; - i | col ----+-------- - 1 | red - 2 | orange - 3 | yellow - 4 | green + col +-------- + red + orange + yellow + green (4 rows) SELECT min(col) FROM enumtest; @@ -384,9 +384,9 @@ DROP INDEX enumtest_btree; -- CREATE INDEX enumtest_hash ON enumtest USING hash (col); SELECT * FROM enumtest WHERE col = 'orange'; - i | col ----+-------- - 2 | orange + col +-------- + orange (1 row) DROP INDEX enumtest_hash; @@ -537,11 +537,11 @@ DROP FUNCTION echo_me(rainbow); -- -- RI triggers on enum types -- -CREATE TABLE enumtest_parent (i int PRIMARY KEY, id rainbow); -CREATE TABLE enumtest_child (i int REFERENCES enumtest_parent, parent rainbow); -INSERT INTO enumtest_parent VALUES (1, 'red'); -INSERT INTO enumtest_child VALUES (1, 'red'); -INSERT INTO enumtest_child VALUES (2, 'blue'); -- fail +CREATE TABLE enumtest_parent (id rainbow PRIMARY KEY); +CREATE TABLE enumtest_child (parent rainbow REFERENCES enumtest_parent); +INSERT INTO enumtest_parent VALUES ('red'); +INSERT INTO enumtest_child VALUES ('red'); +INSERT INTO enumtest_child VALUES ('blue'); -- fail -- start_ignore -- foreign keys are not checked in GPDB, hence these pass. -- end_ignore @@ -550,9 +550,9 @@ DELETE FROM enumtest_parent; -- fail -- cross-type RI should fail -- CREATE TYPE bogus AS ENUM('good', 'bad', 'ugly'); -CREATE TABLE enumtest_bogus_child(i int, parent bogus REFERENCES enumtest_parent); +CREATE TABLE enumtest_bogus_child(parent bogus REFERENCES enumtest_parent); ERROR: foreign key constraint "enumtest_bogus_child_parent_fkey" cannot be implemented -DETAIL: Key columns "parent" and "i" are of incompatible types: bogus and integer. +DETAIL: Key columns "parent" and "id" are of incompatible types: bogus and rainbow. DROP TYPE bogus; -- check renaming a value ALTER TYPE rainbow RENAME VALUE 'red' TO 'crimson'; diff --git a/src/test/regress/expected/enum_dist_part_ban.out b/src/test/regress/expected/enum_dist_part_ban.out deleted file mode 100644 index addc5b89a5e..00000000000 --- a/src/test/regress/expected/enum_dist_part_ban.out +++ /dev/null @@ -1,24 +0,0 @@ --- test that distributing or hash partitioning by an enum field or expression is blocked -CREATE DATABASE ban_enum; -\c ban_enum --- create a test enum -create type colorEnum as enum ('r', 'g', 'b'); --- hash partition by enum column name -create table part (a int, b colorEnum) partition by hash(b); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -ERROR: cannot use ENUM column "b" in PARTITION BY statement for hash partitions --- hash partition by enum column expression -create table part (a int, b colorEnum) partition by hash((b)); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -ERROR: cannot use ENUM column "(null)" in PARTITION BY statement for hash partitions --- distribute by enum column -create table distr (a colorEnum, b int); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -ERROR: cannot use ENUM column "a" in DISTRIBUTED BY statement --- clean up database -drop type colorEnum; -\c regression -DROP DATABASE ban_enum; diff --git a/src/test/regress/expected/gpdist_legacy_opclasses.out b/src/test/regress/expected/gpdist_legacy_opclasses.out index 920bcb7f9ad..58b353c86d7 100644 --- a/src/test/regress/expected/gpdist_legacy_opclasses.out +++ b/src/test/regress/expected/gpdist_legacy_opclasses.out @@ -296,34 +296,27 @@ explain (costs off) select * from modern_int a inner join legacy_domain_over_int Optimizer: Postgres query optimizer (9 rows) --- Distributing by enum has been banned, so this test is updated to instead distribute by a dummy int column --- Banned because in backup/restore scenarios the data will be in the "wrong" segment as oids for each enum --- entry are re-generated and hashing them will result in arbitrary segment assignment. create type colors as enum ('red', 'green', 'blue'); -create table legacy_enum(col1 int, color colors) distributed by(col1); -insert into legacy_enum values (1, 'red'), (2, 'green'), (3, 'blue'); +create table legacy_enum(color colors) distributed by(color cdbhash_enum_ops); +insert into legacy_enum values ('red'), ('green'), ('blue'); explain (costs off) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; QUERY PLAN --------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) -> Hash Join Hash Cond: (a.color = b.color) - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: a.color - -> Seq Scan on legacy_enum a + -> Seq Scan on legacy_enum a -> Hash - -> Redistribute Motion 3:3 (slice3; segments: 3) - Hash Key: b.color - -> Seq Scan on legacy_enum b + -> Seq Scan on legacy_enum b Optimizer: Postgres query optimizer -(11 rows) +(7 rows) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; - col1 | color | col1 | color -------+-------+------+------- - 3 | blue | 3 | blue - 2 | green | 2 | green - 1 | red | 1 | red + color | color +-------+------- + blue | blue + red | red + green | green (3 rows) -- diff --git a/src/test/regress/expected/gpdist_legacy_opclasses_optimizer.out b/src/test/regress/expected/gpdist_legacy_opclasses_optimizer.out index e02b9a3f00e..17ac0786a8f 100644 --- a/src/test/regress/expected/gpdist_legacy_opclasses_optimizer.out +++ b/src/test/regress/expected/gpdist_legacy_opclasses_optimizer.out @@ -295,31 +295,27 @@ explain (costs off) select * from modern_int a inner join legacy_domain_over_int Optimizer: Postgres query optimizer (9 rows) --- Distributing by enum has been banned, so this test is updated to instead distribute by a dummy int column --- Banned because in backup/restore scenarios the data will be in the "wrong" segment as oids for each enum --- entry are re-generated and hashing them will result in arbitrary segment assignment. create type colors as enum ('red', 'green', 'blue'); -create table legacy_enum(col1 int, color colors) distributed by(col1); -insert into legacy_enum values (1, 'red'), (2, 'green'), (3, 'blue'); +create table legacy_enum(color colors) distributed by(color cdbhash_enum_ops); +insert into legacy_enum values ('red'), ('green'), ('blue'); explain (costs off) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; - QUERY PLAN ---------------------------------------------- + QUERY PLAN +-------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) -> Hash Join Hash Cond: ((a.color)::anyenum = (b.color)::anyenum) -> Seq Scan on legacy_enum a -> Hash - -> Broadcast Motion 3:3 (slice2; segments: 3) - -> Seq Scan on legacy_enum b - Optimizer: Pivotal Optimizer (GPORCA) version 3.41.0 -(8 rows) + -> Seq Scan on legacy_enum b + Optimizer: GPORCA +(7 rows) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; - col1 | color | col1 | color -------+-------+------+------- - 2 | green | 2 | green - 3 | blue | 3 | blue - 1 | red | 1 | red + color | color +-------+------- + blue | blue + red | red + green | green (3 rows) -- diff --git a/src/test/regress/expected/partition_prune.out b/src/test/regress/expected/partition_prune.out index b3673b2ce48..75e646374be 100644 --- a/src/test/regress/expected/partition_prune.out +++ b/src/test/regress/expected/partition_prune.out @@ -3770,13 +3770,13 @@ explain (costs off) select * from pph_arrpart where a in ('{4, 5}', '{1}'); drop table pph_arrpart; -- enum type list partition key create type pp_colors as enum ('green', 'blue', 'black'); -create table pp_enumpart (col1 int, a pp_colors) partition by list (a); +create table pp_enumpart (a pp_colors) partition by list (a); create table pp_enumpart_green partition of pp_enumpart for values in ('green'); create table pp_enumpart_blue partition of pp_enumpart for values in ('blue'); explain (costs off) select * from pp_enumpart where a = 'blue'; QUERY PLAN ------------------------------------------ - Gather Motion 3:1 (slice1; segments: 3) + Gather Motion 1:1 (slice1; segments: 1) -> Seq Scan on pp_enumpart_blue pp_enumpart Filter: (a = 'blue'::pp_colors) Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/partition_prune_optimizer.out b/src/test/regress/expected/partition_prune_optimizer.out index f3640ade989..72e87807c8a 100644 --- a/src/test/regress/expected/partition_prune_optimizer.out +++ b/src/test/regress/expected/partition_prune_optimizer.out @@ -3597,7 +3597,7 @@ explain (costs off) select * from pph_arrpart where a in ('{4, 5}', '{1}'); drop table pph_arrpart; -- enum type list partition key create type pp_colors as enum ('green', 'blue', 'black'); -create table pp_enumpart (col1 int, a pp_colors) partition by list (a); +create table pp_enumpart (a pp_colors) partition by list (a); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. create table pp_enumpart_green partition of pp_enumpart for values in ('green'); @@ -3605,7 +3605,7 @@ create table pp_enumpart_blue partition of pp_enumpart for values in ('blue'); explain (costs off) select * from pp_enumpart where a = 'blue'; QUERY PLAN ------------------------------------------ - Gather Motion 3:1 (slice1; segments: 3) + Gather Motion 1:1 (slice1; segments: 1) -> Dynamic Seq Scan on pp_enumpart Number of partitions to scan: 1 (out of 2) Filter: (a = 'blue'::pp_colors) diff --git a/src/test/regress/greenplum_schedule b/src/test/regress/greenplum_schedule index f2f66e6cd6e..0bf96b38a50 100755 --- a/src/test/regress/greenplum_schedule +++ b/src/test/regress/greenplum_schedule @@ -377,8 +377,6 @@ test: dynamic_table # DML tests for AO/CO unique indexes. test: uao_dml/uao_dml_unique_index_delete_row uao_dml/uao_dml_unique_index_delete_column uao_dml/uao_dml_unique_index_update_row uao_dml/uao_dml_unique_index_update_column -# test that distributing or hash partitioning by an enum field or expression is blocked -test: enum_dist_part_ban # run pg_hba raleted testing test: hba_conf diff --git a/src/test/regress/sql/enum.sql b/src/test/regress/sql/enum.sql index 495e3a8034e..fef8f994f40 100644 --- a/src/test/regress/sql/enum.sql +++ b/src/test/regress/sql/enum.sql @@ -120,11 +120,11 @@ ORDER BY enumsortorder; -- -- Basic table creation, row selection -- -CREATE TABLE enumtest (i int, col rainbow); -INSERT INTO enumtest values (1, 'red'), (2, 'orange'), (3, 'yellow'), (4, 'green'); -COPY enumtest (i, col) FROM stdin; -5 blue -6 purple +CREATE TABLE enumtest (col rainbow); +INSERT INTO enumtest values ('red'), ('orange'), ('yellow'), ('green'); +COPY enumtest FROM stdin; +blue +purple \. SELECT * FROM enumtest; @@ -244,17 +244,17 @@ DROP FUNCTION echo_me(rainbow); -- -- RI triggers on enum types -- -CREATE TABLE enumtest_parent (i int PRIMARY KEY, id rainbow); -CREATE TABLE enumtest_child (i int REFERENCES enumtest_parent, parent rainbow); -INSERT INTO enumtest_parent VALUES (1, 'red'); -INSERT INTO enumtest_child VALUES (1, 'red'); -INSERT INTO enumtest_child VALUES (2, 'blue'); -- fail +CREATE TABLE enumtest_parent (id rainbow PRIMARY KEY); +CREATE TABLE enumtest_child (parent rainbow REFERENCES enumtest_parent); +INSERT INTO enumtest_parent VALUES ('red'); +INSERT INTO enumtest_child VALUES ('red'); +INSERT INTO enumtest_child VALUES ('blue'); -- fail DELETE FROM enumtest_parent; -- fail -- -- cross-type RI should fail -- CREATE TYPE bogus AS ENUM('good', 'bad', 'ugly'); -CREATE TABLE enumtest_bogus_child(i int, parent bogus REFERENCES enumtest_parent); +CREATE TABLE enumtest_bogus_child(parent bogus REFERENCES enumtest_parent); DROP TYPE bogus; -- check renaming a value diff --git a/src/test/regress/sql/enum_dist_part_ban.sql b/src/test/regress/sql/enum_dist_part_ban.sql deleted file mode 100644 index 23ff33fc589..00000000000 --- a/src/test/regress/sql/enum_dist_part_ban.sql +++ /dev/null @@ -1,22 +0,0 @@ --- test that distributing or hash partitioning by an enum field or expression is blocked - -CREATE DATABASE ban_enum; -\c ban_enum - --- create a test enum -create type colorEnum as enum ('r', 'g', 'b'); - --- hash partition by enum column name -create table part (a int, b colorEnum) partition by hash(b); - --- hash partition by enum column expression -create table part (a int, b colorEnum) partition by hash((b)); - --- distribute by enum column -create table distr (a colorEnum, b int); - - --- clean up database -drop type colorEnum; -\c regression -DROP DATABASE ban_enum; diff --git a/src/test/regress/sql/gpdist_legacy_opclasses.sql b/src/test/regress/sql/gpdist_legacy_opclasses.sql index 394cca51d47..2170e93c64f 100644 --- a/src/test/regress/sql/gpdist_legacy_opclasses.sql +++ b/src/test/regress/sql/gpdist_legacy_opclasses.sql @@ -168,13 +168,9 @@ explain (costs off) select * from legacy_domain_over_int a inner join legacy_dom explain (costs off) select * from legacy_int a inner join legacy_domain_over_int b on a.id = b.id; explain (costs off) select * from modern_int a inner join legacy_domain_over_int b on a.id = b.id; - --- Distributing by enum has been banned, so this test is updated to instead distribute by a dummy int column --- Banned because in backup/restore scenarios the data will be in the "wrong" segment as oids for each enum --- entry are re-generated and hashing them will result in arbitrary segment assignment. create type colors as enum ('red', 'green', 'blue'); -create table legacy_enum(col1 int, color colors) distributed by(col1); -insert into legacy_enum values (1, 'red'), (2, 'green'), (3, 'blue'); +create table legacy_enum(color colors) distributed by(color cdbhash_enum_ops); +insert into legacy_enum values ('red'), ('green'), ('blue'); explain (costs off) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; select * from legacy_enum a inner join legacy_enum b on a.color = b.color; diff --git a/src/test/regress/sql/partition_prune.sql b/src/test/regress/sql/partition_prune.sql index a496f1a7985..f9e3b1f2013 100644 --- a/src/test/regress/sql/partition_prune.sql +++ b/src/test/regress/sql/partition_prune.sql @@ -937,7 +937,7 @@ drop table pph_arrpart; -- enum type list partition key create type pp_colors as enum ('green', 'blue', 'black'); -create table pp_enumpart (col1 int, a pp_colors) partition by list (a); +create table pp_enumpart (a pp_colors) partition by list (a); create table pp_enumpart_green partition of pp_enumpart for values in ('green'); create table pp_enumpart_blue partition of pp_enumpart for values in ('blue'); explain (costs off) select * from pp_enumpart where a = 'blue'; From 425be8ce68c75d7d70e2c844ca5e786d4c143073 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Thu, 7 Aug 2025 00:01:26 +0000 Subject: [PATCH 105/260] Fix: Prevent excessive sampling on QEs by restricting ComputeExtStatisticsRows to QD In `do_analyze_rel`, the function `ComputeExtStatisticsRows` calculates the minimum number of sample rows needed for extended statistics (e.g., dependencies, ndistinct). This calculation is only meaningful and required on the Query Dispatcher (QD), since only the QD is responsible for coordinating the final extended statistics generation. Previously, all segments (including QEs) executed this logic, resulting in excessive sampling. For large tables, this caused the QD to receive more rows than it can handle, leading to the error: ERROR: too many sample rows received from gp_acquire_sample_rows --- src/backend/commands/analyze.c | 6 ++++-- src/test/regress/expected/stats_ext.out | 13 +++++++++++++ src/test/regress/expected/stats_ext_optimizer.out | 13 +++++++++++++ src/test/regress/sql/stats_ext.sql | 12 ++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index e06dbea2870..32c74f6cd14 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -717,8 +717,10 @@ do_analyze_rel(Relation onerel, VacuumParams *params, * statistics target. So we may need to sample more rows and then build * the statistics with enough detail. */ - minrows = ComputeExtStatisticsRows(onerel, attr_cnt, vacattrstats); - + if (IS_QD_OR_SINGLENODE()) + minrows = ComputeExtStatisticsRows(onerel, attr_cnt, vacattrstats); + else + minrows = 0; if (targrows < minrows) targrows = minrows; diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out index 9b8580f59c2..3fc90553026 100644 --- a/src/test/regress/expected/stats_ext.out +++ b/src/test/regress/expected/stats_ext.out @@ -3240,3 +3240,16 @@ NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table tststats.priv_test_tbl drop cascades to view tststats.priv_test_view DROP USER regress_stats_user1; +-- test analyze with extended statistics +CREATE TABLE tbl_issue1293 (col1 int, col2 int); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'col1' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +INSERT INTO tbl_issue1293 +SELECT i / 10000, i / 100000 +FROM generate_series(1, 1000000) s(i); +ANALYZE tbl_issue1293; +-- Create extended statistics on col1, col2 +CREATE STATISTICS s1 (dependencies) ON col1, col2 FROM tbl_issue1293; +-- Trigger extended stats collection +ANALYZE tbl_issue1293; +DROP TABLE tbl_issue1293; diff --git a/src/test/regress/expected/stats_ext_optimizer.out b/src/test/regress/expected/stats_ext_optimizer.out index f62d399b4ca..d19caa775d1 100644 --- a/src/test/regress/expected/stats_ext_optimizer.out +++ b/src/test/regress/expected/stats_ext_optimizer.out @@ -3275,3 +3275,16 @@ NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to table tststats.priv_test_tbl drop cascades to view tststats.priv_test_view DROP USER regress_stats_user1; +-- test analyze with extended statistics +CREATE TABLE tbl_issue1293 (col1 int, col2 int); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'col1' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +INSERT INTO tbl_issue1293 +SELECT i / 10000, i / 100000 +FROM generate_series(1, 1000000) s(i); +ANALYZE tbl_issue1293; +-- Create extended statistics on col1, col2 +CREATE STATISTICS s1 (dependencies) ON col1, col2 FROM tbl_issue1293; +-- Trigger extended stats collection +ANALYZE tbl_issue1293; +DROP TABLE tbl_issue1293; diff --git a/src/test/regress/sql/stats_ext.sql b/src/test/regress/sql/stats_ext.sql index f005f2c2957..91edd3a5bba 100644 --- a/src/test/regress/sql/stats_ext.sql +++ b/src/test/regress/sql/stats_ext.sql @@ -1651,3 +1651,15 @@ DROP FUNCTION op_leak(int, int); RESET SESSION AUTHORIZATION; DROP SCHEMA tststats CASCADE; DROP USER regress_stats_user1; + +-- test analyze with extended statistics +CREATE TABLE tbl_issue1293 (col1 int, col2 int); +INSERT INTO tbl_issue1293 +SELECT i / 10000, i / 100000 +FROM generate_series(1, 1000000) s(i); +ANALYZE tbl_issue1293; +-- Create extended statistics on col1, col2 +CREATE STATISTICS s1 (dependencies) ON col1, col2 FROM tbl_issue1293; +-- Trigger extended stats collection +ANALYZE tbl_issue1293; +DROP TABLE tbl_issue1293; From 948732078a0776adacec4cb2d3896a60de8360e1 Mon Sep 17 00:00:00 2001 From: zhoujiaqi Date: Mon, 11 Aug 2025 13:52:15 +0800 Subject: [PATCH 106/260] FIX: Invalid relcache leak WARNING logged in autovacuum The autovacuum launcher process periodically launches workers to vacuum the table. During this process, the UDF `pg_catalog.gp_acquire_sample_rows` will be called. Also the vacuum task always be canceled by launcher. The plan of `pg_catalog.gp_acquire_sample_rows` is: ``` QUERY PLAN --------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..45.02 rows=3000 width=32) Output: (gp_acquire_sample_rows('17018'::oid, 1250, false)) -> ProjectSet (cost=0.00..5.02 rows=1000 width=32) Output: gp_acquire_sample_rows('17018'::oid, 1250, false) -> Result (cost=0.00..0.01 rows=1 width=0) Optimizer: Postgres query optimizer (6 rows) ``` In actual examples, we often encounter relcache leaks caused by `pg_catalog.gp_acquire_sample_rows`. In fact, this warning is not caused by the UDF itself. The following are the complete steps to reproduce(not stable reproduce) 1. User use the insert/update/delete SQL. Auto-vacuum is enabled. 2. The auto-vacuum worker process call the `pg_catalog.gp_acquire_sample_rows` 2.1 The vacuum launches in master cancel the vacuum query. 2.2 The vacuum worker in master process the interrupt in the intercontect. So the gather motion will be aborted. 2.3 The segment do the tuple sender in the motion(`doSendTuple`).But it found the connection is NOT alive. Also it have not recv the SIGN INT in this time. So segment mark the `StopRequested` to true, and finish the current motion, and the function `pg_catalog.gp_acquire_sample_rows` in project set can't call the `table_close` in this time. 2.4 The segment call the `PortalDrop` to destory the resowner which inside the current portal, and current portal status won't be FAIL, because current segment still have not recv the SIGN INT. The resowner found the leaked relcache, log the WARNING. 3. After step2, segments recv the SIGN INT, But nothing to do. --- contrib/interconnect/udp/ic_udpifc.c | 5 ++++- src/backend/executor/nodeMotion.c | 3 ++- src/backend/utils/mmgr/portalmem.c | 3 ++- src/include/utils/portal.h | 3 +++ src/test/regress/expected/vacuum_gp.out | 28 +++++++++++++++++++++++++ src/test/regress/sql/vacuum_gp.sql | 17 ++++++++++++++- 6 files changed, 55 insertions(+), 4 deletions(-) diff --git a/contrib/interconnect/udp/ic_udpifc.c b/contrib/interconnect/udp/ic_udpifc.c index 63e8c9301dd..c28511fe828 100644 --- a/contrib/interconnect/udp/ic_udpifc.c +++ b/contrib/interconnect/udp/ic_udpifc.c @@ -3965,7 +3965,10 @@ receiveChunksUDPIFCLoop(ChunkTransportState *pTransportStates, ChunkTransportSta /* check the potential errors in rx thread. */ checkRxThreadError(); - /* do not check interrupts when holding the lock */ + FaultInjector_InjectFaultIfSet("interconnect_stop_recv_chunk", + DDLNotSpecified, + "" /* databaseName */ , + "" /* tableName */ ); ML_CHECK_FOR_INTERRUPTS(pTransportStates->teardownActive); /* diff --git a/src/backend/executor/nodeMotion.c b/src/backend/executor/nodeMotion.c index b6514f2a0ce..1229d460a55 100644 --- a/src/backend/executor/nodeMotion.c +++ b/src/backend/executor/nodeMotion.c @@ -31,7 +31,7 @@ #include "utils/wait_event.h" #include "miscadmin.h" #include "utils/memutils.h" - +#include "tcop/pquery.h" /* ActivePortal */ /* #define MEASURE_MOTION_TIME */ @@ -269,6 +269,7 @@ execMotionSender(MotionState *node) if (node->stopRequested) { + ActivePortal->stop_requested_in_motion = true; elog(gp_workfile_caching_loglevel, "Motion calling Squelch on child node"); /* propagate stop notification to our children */ ExecSquelchNode(outerNode, true); diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c index 45812a608e0..2835fbd10f1 100644 --- a/src/backend/utils/mmgr/portalmem.c +++ b/src/backend/utils/mmgr/portalmem.c @@ -224,6 +224,7 @@ CreatePortal(const char *name, bool allowDup, bool dupSilent) portal->atEnd = true; /* disallow fetches until query is set */ portal->visible = true; portal->creation_time = GetCurrentStatementStartTimestamp(); + portal->stop_requested_in_motion = false; if (IsResQueueEnabled()) { @@ -587,7 +588,7 @@ PortalDrop(Portal portal, bool isTopCommit) if (portal->resowner && (!isTopCommit || portal->status == PORTAL_FAILED)) { - bool isCommit = (portal->status != PORTAL_FAILED); + bool isCommit = (portal->status != PORTAL_FAILED) && !portal->stop_requested_in_motion; ResourceOwnerRelease(portal->resowner, RESOURCE_RELEASE_BEFORE_LOCKS, diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h index fb940fa1ecf..e592d1e8863 100644 --- a/src/include/utils/portal.h +++ b/src/include/utils/portal.h @@ -225,6 +225,9 @@ typedef struct PortalData /* MPP: is this portal a CURSOR, or protocol level portal? */ bool is_extended_query; /* simple or extended query protocol? */ + + /* current motion stop requested? */ + bool stop_requested_in_motion; } PortalData; /* diff --git a/src/test/regress/expected/vacuum_gp.out b/src/test/regress/expected/vacuum_gp.out index 35d1a1e4fed..daeb2504559 100644 --- a/src/test/regress/expected/vacuum_gp.out +++ b/src/test/regress/expected/vacuum_gp.out @@ -437,3 +437,31 @@ SELECT reltuples, relname FROM pg_class WHERE oid='vac_reltuple_distortion'::reg 1e+06 | vac_reltuple_distortion (1 row) +-- test wrong log relcache leak in pg_catalog.gp_acquire_sample_rows +-- start_ignore +drop table if exists relcache_leak_in_motion; +NOTICE: table "relcache_leak_in_motion" does not exist, skipping +-- end_ignore +create table relcache_leak_in_motion(v1 int); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'v1' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +insert into relcache_leak_in_motion values(generate_series(0, 10000)); +SELECT gp_inject_fault('interconnect_stop_recv_chunk', 'interrupt', dbid) + FROM gp_segment_configuration WHERE content = -1 and role='p'; + gp_inject_fault +----------------- + Success: +(1 row) + +analyze relcache_leak_in_motion; +ERROR: canceling statement due to user request +SELECT gp_inject_fault('interconnect_stop_recv_chunk', 'reset', dbid) + FROM gp_segment_configuration WHERE content = -1 and role='p'; + gp_inject_fault +----------------- + Success: +(1 row) + +-- start_ignore +drop table if exists relcache_leak_in_motion; +-- end_ignore diff --git a/src/test/regress/sql/vacuum_gp.sql b/src/test/regress/sql/vacuum_gp.sql index 04f88df9e0c..198a80f4a93 100644 --- a/src/test/regress/sql/vacuum_gp.sql +++ b/src/test/regress/sql/vacuum_gp.sql @@ -290,4 +290,19 @@ VACUUM vac_reltuple_distortion; VACUUM vac_reltuple_distortion; -- 2nd call to VACUUM after ANALYZE SELECT reltuples, relname FROM pg_class WHERE oid='vac_reltuple_distortion'::regclass; VACUUM vac_reltuple_distortion; -SELECT reltuples, relname FROM pg_class WHERE oid='vac_reltuple_distortion'::regclass; \ No newline at end of file +SELECT reltuples, relname FROM pg_class WHERE oid='vac_reltuple_distortion'::regclass; + +-- test wrong log relcache leak in pg_catalog.gp_acquire_sample_rows +-- start_ignore +drop table if exists relcache_leak_in_motion; +-- end_ignore +create table relcache_leak_in_motion(v1 int); +insert into relcache_leak_in_motion values(generate_series(0, 10000)); +SELECT gp_inject_fault('interconnect_stop_recv_chunk', 'interrupt', dbid) + FROM gp_segment_configuration WHERE content = -1 and role='p'; +analyze relcache_leak_in_motion; +SELECT gp_inject_fault('interconnect_stop_recv_chunk', 'reset', dbid) + FROM gp_segment_configuration WHERE content = -1 and role='p'; +-- start_ignore +drop table if exists relcache_leak_in_motion; +-- end_ignore From 866455cd31544c77623aba6f1ae899030e1c5127 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Fri, 1 Aug 2025 17:17:26 +0800 Subject: [PATCH 107/260] Fix row estimation for parallel subquery paths. In CBDB, path's row estimation is determined by subpath's rows and cluster segments. However, when there is a parallel subquery scan path, each worker will process fewer rows (divided by parallel_workers). This commit fixes that issue. The correction not only makes parallel subquery estimation more accurate, but also enables the entire plan to be as parallel as possible, particularly for subqueries in complex queries. Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/optimizer/path/costsize.c | 4 +- src/test/regress/expected/cbdb_parallel.out | 104 ++++++++++++++++++ .../regress/expected/incremental_sort.out | 4 +- .../expected/incremental_sort_optimizer.out | 4 +- src/test/regress/sql/cbdb_parallel.sql | 62 +++++++++++ src/test/regress/sql/incremental_sort.sql | 4 +- 6 files changed, 174 insertions(+), 8 deletions(-) diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 04c68c5620d..4a1bbbf584b 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -1540,10 +1540,10 @@ cost_subqueryscan(SubqueryScanPath *path, PlannerInfo *root, Assert(baserel->relid > 0); Assert(baserel->rtekind == RTE_SUBQUERY); - /* Adjust row count if this runs in multiple segments and parallel model */ if (CdbPathLocus_IsPartitioned(path->path.locus)) { - numsegments = CdbPathLocus_NumSegments(path->path.locus); + /* Adjust row count if this runs in multiple segments and parallel model */ + numsegments = CdbPathLocus_NumSegmentsPlusParallelWorkers(path->path.locus); } else numsegments = 1; diff --git a/src/test/regress/expected/cbdb_parallel.out b/src/test/regress/expected/cbdb_parallel.out index d6b8983eb2f..942705e7471 100644 --- a/src/test/regress/expected/cbdb_parallel.out +++ b/src/test/regress/expected/cbdb_parallel.out @@ -3415,6 +3415,110 @@ reset enable_parallel; -- -- End of test Parallel UNION -- +-- +-- Test Parallel Subquery. +-- +CREATE TABLE departments ( + department_id INT PRIMARY KEY, + department_name VARCHAR(100) +); +CREATE TABLE employees ( + employee_id INT PRIMARY KEY, + name VARCHAR(100), + salary NUMERIC, + department_id INT +); +INSERT INTO departments VALUES +(1, 'Sales'), +(2, 'IT'), +(3, 'HR'); +INSERT INTO employees VALUES +(1, 'Alice', 5000, 1), +(2, 'Bob', 6000, 1), +(3, 'Charlie', 7000, 2), +(4, 'David', 8000, 2), +(5, 'Eve', 9000, 3); +set enable_parallel = off; +explain SELECT e.name +FROM employees e +WHERE e.salary > ( + SELECT AVG(salary) + FROM employees + WHERE department_id = e.department_id); + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) (cost=163.42..307.76 rows=3767 width=218) + -> Hash Join (cost=163.42..257.54 rows=1256 width=218) + Hash Cond: (e.department_id = "Expr_SUBQUERY".csq_c0) + Join Filter: (e.salary > "Expr_SUBQUERY".csq_c1) + -> Seq Scan on employees e (cost=0.00..71.67 rows=3767 width=254) + -> Hash (cost=150.92..150.92 rows=1000 width=36) + -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=130.09..150.92 rows=1000 width=36) + -> Subquery Scan on "Expr_SUBQUERY" (cost=130.09..137.59 rows=333 width=36) + -> Finalize HashAggregate (cost=130.09..134.26 rows=333 width=36) + Group Key: employees.department_id + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=90.50..122.67 rows=990 width=36) + Hash Key: employees.department_id + -> Partial HashAggregate (cost=90.50..102.87 rows=990 width=36) + Group Key: employees.department_id + -> Seq Scan on employees (cost=0.00..71.67 rows=3767 width=36) + Optimizer: Postgres query optimizer +(16 rows) + +SELECT e.name +FROM employees e +WHERE e.salary > ( + SELECT AVG(salary) + FROM employees + WHERE department_id = e.department_id); + name +------- + Bob + David +(2 rows) + +set enable_parallel = on; +set min_parallel_table_scan_size = 0; +explain SELECT e.name +FROM employees e +WHERE e.salary > ( + SELECT AVG(salary) + FROM employees + WHERE department_id = e.department_id); + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------- + Gather Motion 6:1 (slice1; segments: 6) (cost=116.58..230.86 rows=3767 width=218) + -> Parallel Hash Join (cost=116.58..186.92 rows=628 width=218) + Hash Cond: (e.department_id = "Expr_SUBQUERY".csq_c0) + Join Filter: (e.salary > "Expr_SUBQUERY".csq_c1) + -> Parallel Seq Scan on employees e (cost=0.00..52.83 rows=1883 width=254) + -> Parallel Hash (cost=110.33..110.33 rows=500 width=36) + -> Broadcast Workers Motion 6:6 (slice2; segments: 6) (cost=99.92..110.33 rows=500 width=36) + -> Subquery Scan on "Expr_SUBQUERY" (cost=99.92..103.67 rows=167 width=36) + -> HashAggregate (cost=99.92..102.00 rows=167 width=36) + Group Key: employees.department_id + -> Redistribute Motion 6:6 (slice3; segments: 6) (cost=0.00..90.50 rows=1883 width=36) + Hash Key: employees.department_id + Hash Module: 3 + -> Parallel Seq Scan on employees (cost=0.00..52.83 rows=1883 width=36) + Optimizer: Postgres query optimizer +(15 rows) + +SELECT e.name +FROM employees e +WHERE e.salary > ( + SELECT AVG(salary) + FROM employees + WHERE department_id = e.department_id); + name +------- + Bob + David +(2 rows) + + +reset enable_parallel; +reset min_parallel_table_scan_size; -- start_ignore drop schema test_parallel cascade; -- end_ignore diff --git a/src/test/regress/expected/incremental_sort.out b/src/test/regress/expected/incremental_sort.out index 9bdd3486d2b..c5f52e1e97f 100644 --- a/src/test/regress/expected/incremental_sort.out +++ b/src/test/regress/expected/incremental_sort.out @@ -589,7 +589,6 @@ select explain_analyze_without_memory('select * from (select * from t order by a Optimizer: Postgres query optimizer (13 rows) -reset max_parallel_workers_per_gather; select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 55')); jsonb_pretty ------------------------------------------------- @@ -626,6 +625,7 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from ] (1 row) +reset max_parallel_workers_per_gather; select explain_analyze_inc_sort_nodes_verify_invariants('select * from (select * from t order by a) s order by a, b limit 55'); explain_analyze_inc_sort_nodes_verify_invariants -------------------------------------------------- @@ -815,7 +815,6 @@ select explain_analyze_without_memory('select * from (select * from t order by a Optimizer: Postgres query optimizer (14 rows) -reset max_parallel_workers_per_gather; select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 70')); jsonb_pretty ------------------------------------------------- @@ -861,6 +860,7 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from ] (1 row) +reset max_parallel_workers_per_gather; select explain_analyze_inc_sort_nodes_verify_invariants('select * from (select * from t order by a) s order by a, b limit 70'); explain_analyze_inc_sort_nodes_verify_invariants -------------------------------------------------- diff --git a/src/test/regress/expected/incremental_sort_optimizer.out b/src/test/regress/expected/incremental_sort_optimizer.out index 97550c1beda..f5fd24f81ba 100644 --- a/src/test/regress/expected/incremental_sort_optimizer.out +++ b/src/test/regress/expected/incremental_sort_optimizer.out @@ -560,7 +560,6 @@ select explain_analyze_without_memory('select * from (select * from t order by a Optimizer: Pivotal Optimizer (GPORCA) (9 rows) -reset max_parallel_workers_per_gather; select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 55')); jsonb_pretty -------------- @@ -568,6 +567,7 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from ] (1 row) +reset max_parallel_workers_per_gather; select explain_analyze_inc_sort_nodes_verify_invariants('select * from (select * from t order by a) s order by a, b limit 55'); explain_analyze_inc_sort_nodes_verify_invariants -------------------------------------------------- @@ -743,7 +743,6 @@ select explain_analyze_without_memory('select * from (select * from t order by a Optimizer: Pivotal Optimizer (GPORCA) (10 rows) -reset max_parallel_workers_per_gather; select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 70')); jsonb_pretty -------------- @@ -751,6 +750,7 @@ select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from ] (1 row) +reset max_parallel_workers_per_gather; select explain_analyze_inc_sort_nodes_verify_invariants('select * from (select * from t order by a) s order by a, b limit 70'); explain_analyze_inc_sort_nodes_verify_invariants -------------------------------------------------- diff --git a/src/test/regress/sql/cbdb_parallel.sql b/src/test/regress/sql/cbdb_parallel.sql index 95d3b6b50d0..0ee6f72cb2a 100644 --- a/src/test/regress/sql/cbdb_parallel.sql +++ b/src/test/regress/sql/cbdb_parallel.sql @@ -1074,6 +1074,68 @@ reset enable_parallel; -- End of test Parallel UNION -- +-- +-- Test Parallel Subquery. +-- +CREATE TABLE departments ( + department_id INT PRIMARY KEY, + department_name VARCHAR(100) +); + +CREATE TABLE employees ( + employee_id INT PRIMARY KEY, + name VARCHAR(100), + salary NUMERIC, + department_id INT +); + +INSERT INTO departments VALUES +(1, 'Sales'), +(2, 'IT'), +(3, 'HR'); + +INSERT INTO employees VALUES +(1, 'Alice', 5000, 1), +(2, 'Bob', 6000, 1), +(3, 'Charlie', 7000, 2), +(4, 'David', 8000, 2), +(5, 'Eve', 9000, 3); + +set enable_parallel = off; +explain SELECT e.name +FROM employees e +WHERE e.salary > ( + SELECT AVG(salary) + FROM employees + WHERE department_id = e.department_id); + +SELECT e.name +FROM employees e +WHERE e.salary > ( + SELECT AVG(salary) + FROM employees + WHERE department_id = e.department_id); + +set enable_parallel = on; +set min_parallel_table_scan_size = 0; + +explain SELECT e.name +FROM employees e +WHERE e.salary > ( + SELECT AVG(salary) + FROM employees + WHERE department_id = e.department_id); + +SELECT e.name +FROM employees e +WHERE e.salary > ( + SELECT AVG(salary) + FROM employees + WHERE department_id = e.department_id); + +reset enable_parallel; +reset min_parallel_table_scan_size; + -- start_ignore drop schema test_parallel cascade; -- end_ignore diff --git a/src/test/regress/sql/incremental_sort.sql b/src/test/regress/sql/incremental_sort.sql index eb7a1082f2b..afd1dab2045 100644 --- a/src/test/regress/sql/incremental_sort.sql +++ b/src/test/regress/sql/incremental_sort.sql @@ -147,8 +147,8 @@ select * from (select * from t order by a) s order by a, b limit 55; -- Test EXPLAIN ANALYZE with only a fullsort group. set max_parallel_workers_per_gather = 0; select explain_analyze_without_memory('select * from (select * from t order by a) s order by a, b limit 55'); -reset max_parallel_workers_per_gather; select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 55')); +reset max_parallel_workers_per_gather; select explain_analyze_inc_sort_nodes_verify_invariants('select * from (select * from t order by a) s order by a, b limit 55'); delete from t; @@ -181,8 +181,8 @@ rollback; -- Test EXPLAIN ANALYZE with both fullsort and presorted groups. set max_parallel_workers_per_gather = 0; select explain_analyze_without_memory('select * from (select * from t order by a) s order by a, b limit 70'); -reset max_parallel_workers_per_gather; select jsonb_pretty(explain_analyze_inc_sort_nodes_without_memory('select * from (select * from t order by a) s order by a, b limit 70')); +reset max_parallel_workers_per_gather; select explain_analyze_inc_sort_nodes_verify_invariants('select * from (select * from t order by a) s order by a, b limit 70'); delete from t; From fc7315272a3a63c401b8614b35e2b809df9c47c4 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Mon, 4 Aug 2025 23:50:34 +0800 Subject: [PATCH 108/260] Correct parallel window function in CASE WHEN. Previously, we attempted to disable window functions inside CASE WHEN expressions due to concerns about unstable parallel results. However, this was a misunderstanding. All expressions from the subquery are Var columns, not the original expressions. This issue was uncovered when we fixed the subquery row count estimation, causing the cost to change in the upper plan. EXPLAIN(COSTS OFF) SELECT empno, depname, salary, bonus, depadj, MIN(bonus) OVER (ORDER BY empno), MAX(depadj) OVER () FROM( SELECT *, CASE WHEN enroll_date < '2008-01-01' THEN 2008 - extract(YEAR FROM enroll_date) END * 500 AS bonus, CASE WHEN AVG(salary) OVER (PARTITION BY depname) < salary THEN 200 END AS depadj FROM empsalary )s; QUERY PLAN -------------------------------------------------------------------------- WindowAgg -> WindowAgg Order By: s.empno -> Gather Motion 6:1 (slice1; segments: 6) Merge Key: s.empno -> Sort Sort Key: s.empno -> Subquery Scan on s -> WindowAgg Partition By: empsalary.depname -> Sort Sort Key: empsalary.depname -> Redistribute Motion 6:6 (slice2; segments: 6) Hash Key: empsalary.depname Hash Module: 3 -> Parallel Seq Scan on empsalary Optimizer: Postgres query optimizer (17 rows) Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/optimizer/plan/planner.c | 63 ------------------- src/test/regress/expected/window_parallel.out | 15 +++-- src/test/regress/sql/misc_jiras.sql | 2 + src/test/regress/sql/window_parallel.sql | 2 +- 4 files changed, 12 insertions(+), 70 deletions(-) diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 9728f4f34ef..22ec8b43266 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -300,12 +300,6 @@ static split_rollup_data *make_new_rollups_for_hash_grouping_set(PlannerInfo *ro Path *path, grouping_sets_data *gd); -static bool -contain_case_expr(Node *clause); - -static bool -contain_case_expr_walker(Node *node, void *context); - static void create_partial_window_path(PlannerInfo *root, RelOptInfo *window_rel, Path *path, @@ -9139,25 +9133,6 @@ make_new_rollups_for_hash_grouping_set(PlannerInfo *root, return srd; } -static bool -contain_case_expr(Node *clause) -{ - return contain_case_expr_walker(clause, NULL); -} - -static bool -contain_case_expr_walker(Node *node, void *context) -{ - if (node == NULL) - return false; - - if (IsA(node, CaseExpr)) - return true; - - return expression_tree_walker(node, contain_case_expr_walker, - context); -} - /* * Parallel processing of window functions. * @@ -9176,47 +9151,9 @@ create_partial_window_path(PlannerInfo *root, { PathTarget *window_target; ListCell *l; - Bitmapset *sgrefs; window_target = input_target; - sgrefs = NULL; - - foreach(l, activeWindows) - { - WindowClause *wc = lfirst_node(WindowClause, l); - ListCell *lc2; - - foreach(lc2, wc->partitionClause) - { - SortGroupClause *sortcl = lfirst_node(SortGroupClause, lc2); - - sgrefs = bms_add_member(sgrefs, sortcl->tleSortGroupRef); - } - foreach(lc2, wc->orderClause) - { - SortGroupClause *sortcl = lfirst_node(SortGroupClause, lc2); - - sgrefs = bms_add_member(sgrefs, sortcl->tleSortGroupRef); - } - } - - int x = -1; - while ((x = bms_next_member(sgrefs, x)) >= 0) - { - Index sgref = get_pathtarget_sortgroupref(input_target, x); - if (sgref != 0) - { - ListCell *lc; - foreach(lc, input_target->exprs) - { - Expr *expr = (Expr *) lfirst(lc); - if (contain_case_expr((Node*)expr)) - return; - } - } - } - foreach(l, activeWindows) { WindowClause *wc = lfirst_node(WindowClause, l); diff --git a/src/test/regress/expected/window_parallel.out b/src/test/regress/expected/window_parallel.out index bd4b9161c1b..c9e226b7355 100644 --- a/src/test/regress/expected/window_parallel.out +++ b/src/test/regress/expected/window_parallel.out @@ -498,7 +498,7 @@ SELECT sum(salary) OVER w, rank() OVER w FROM empsalary WINDOW w AS (PARTITION B (10 rows) -- w8 --- strict aggs +-- window agg in CASE WHEN clause set enable_parallel = off; EXPLAIN(COSTS OFF) SELECT empno, depname, salary, bonus, depadj, MIN(bonus) OVER (ORDER BY empno), MAX(depadj) OVER () FROM( @@ -556,12 +556,12 @@ SELECT empno, depname, salary, bonus, depadj, MIN(bonus) OVER (ORDER BY empno), AVG(salary) OVER (PARTITION BY depname) < salary THEN 200 END AS depadj FROM empsalary )s; - QUERY PLAN -------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------ WindowAgg -> WindowAgg Order By: s.empno - -> Gather Motion 3:1 (slice1; segments: 3) + -> Gather Motion 6:1 (slice1; segments: 6) Merge Key: s.empno -> Sort Sort Key: s.empno @@ -570,9 +570,12 @@ SELECT empno, depname, salary, bonus, depadj, MIN(bonus) OVER (ORDER BY empno), Partition By: empsalary.depname -> Sort Sort Key: empsalary.depname - -> Seq Scan on empsalary + -> Redistribute Motion 6:6 (slice2; segments: 6) + Hash Key: empsalary.depname + Hash Module: 3 + -> Parallel Seq Scan on empsalary Optimizer: Postgres query optimizer -(14 rows) +(17 rows) SELECT empno, depname, salary, bonus, depadj, MIN(bonus) OVER (ORDER BY empno), MAX(depadj) OVER () FROM( SELECT *, diff --git a/src/test/regress/sql/misc_jiras.sql b/src/test/regress/sql/misc_jiras.sql index 651b26344d5..760f2325d3e 100644 --- a/src/test/regress/sql/misc_jiras.sql +++ b/src/test/regress/sql/misc_jiras.sql @@ -21,6 +21,7 @@ set statement_mem to '1024kB'; set extra_float_digits=0; -- the last decimal digits are somewhat random +set enable_parallel = off; -- Inject fault at 'winagg_after_spool_tuples' to show that the tuplestore spills -- to disk. SELECT gp_inject_fault('winagg_after_spool_tuples', 'skip', dbid) @@ -42,6 +43,7 @@ SELECT gp_inject_fault('winagg_after_spool_tuples', 'reset', dbid) FROM gp_segment_configuration WHERE role='p' AND content>=0; reset statement_mem; +reset enable_parallel; -- non-ASCII multibyte character should show up correctly in error messages. select 'ζΊ‹' || (B'1'); diff --git a/src/test/regress/sql/window_parallel.sql b/src/test/regress/sql/window_parallel.sql index e8136750b2a..9ba4f1b9fc4 100644 --- a/src/test/regress/sql/window_parallel.sql +++ b/src/test/regress/sql/window_parallel.sql @@ -120,7 +120,7 @@ SELECT sum(salary) OVER w, rank() OVER w FROM empsalary WINDOW w AS (PARTITION B SELECT sum(salary) OVER w, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary DESC); -- w8 --- strict aggs +-- window agg in CASE WHEN clause set enable_parallel = off; EXPLAIN(COSTS OFF) SELECT empno, depname, salary, bonus, depadj, MIN(bonus) OVER (ORDER BY empno), MAX(depadj) OVER () FROM( From 7524588bb767193d3954bfa5a0c2a0fe0d9bb140 Mon Sep 17 00:00:00 2001 From: zhoujiaqi Date: Thu, 24 Jul 2025 14:58:47 +0800 Subject: [PATCH 109/260] ORCA: Introduce hash windows aggregation when use the vectorization exector In this PR, ORCA now supports generating `WindowHashAgg` plans which already have implementation in the vectorization executor. However, the CBDB row executor currently lacks implementation for the WindowHashAgg operator. To prevent ORCA from generating this operator in the row executor, I've added an struct which named `OptimizerOptions` to control the plan for row executor or vectorization executor. (By the way, ORCA may later generate plans specifically for the vectorization executor). The `WindowAgg` operator implemention in the vectorization execution is: 1. First, sorting the input rows by `ORDER BY` keys 2. Then do the `PARTITION` by `PARTITION BY` keys 3. Finally do the window function. Since step1 must be globally sorted, it cannot be parallelized in the vectorization executor. This results in poor performance of the `WindowAgg` operator. By contrast, `WindowHashAgg` employs a more efficient approach: 1. First hashes input data into buckets based on `PARTITION BY` keys 2. Then sorts data `within each bucket` according to `ORDER BY` keys 3. Finally computes window functions on the sorted bucket data For the row engine, `WindowHashAgg` operators will not be generated. Also current commit introduces a new GUC named `optimizer_force_window_hash_agg` to force generate plans with `WindowHashAgg` (Don't used this GUC expect debug ORCA). Co-Author-By: zhangyue --- .../pg_stat_statements/pg_stat_statements.c | 14 +- gpcontrib/pg_hint_plan/pg_hint_plan.c | 12 +- src/backend/cdb/cdbllize.c | 1 + src/backend/cdb/cdbplan.c | 19 + src/backend/cdb/cdbtargeteddispatch.c | 1 + src/backend/gpopt/CGPOptimizer.cpp | 9 +- .../gpopt/config/CConfigParamMapping.cpp | 13 +- .../translate/CTranslatorDXLToPlStmt.cpp | 415 ++++++++++++++---- src/backend/gpopt/utils/COptTasks.cpp | 6 +- .../include/gpdbcost/CCostModelGPDB.h | 6 + .../gporca/libgpdbcost/src/CCostModelGPDB.cpp | 66 ++- .../include/gpopt/base/CDistributionSpec.h | 3 + .../gpopt/base/CDistributionSpecHashed.h | 3 +- .../include/gpopt/operators/COperator.h | 1 + .../operators/CPhysicalHashSequenceProject.h | 123 ++++++ .../operators/CPhysicalSequenceProject.h | 2 +- .../gpopt/translate/CTranslatorExprToDXL.h | 2 +- .../libgpopt/include/gpopt/xforms/CXform.h | 1 + .../CXformImplementHashSequenceProject.h | 95 ++++ .../libgpopt/include/gpopt/xforms/xforms.h | 1 + .../src/base/CDistributionSpecHashed.cpp | 14 +- .../src/operators/CLogicalSequenceProject.cpp | 2 + .../CPhysicalHashSequenceProject.cpp | 151 +++++++ .../operators/CPhysicalSequenceProject.cpp | 5 +- .../gporca/libgpopt/src/operators/Makefile | 1 + .../src/translate/CTranslatorExprToDXL.cpp | 16 +- .../libgpopt/src/xforms/CXformFactory.cpp | 1 + .../CXformImplementHashSequenceProject.cpp | 112 +++++ .../gporca/libgpopt/src/xforms/Makefile | 1 + .../dxl/operators/CDXLPhysicalWindow.h | 7 +- .../include/naucrates/dxl/xml/dxltokens.h | 1 + .../include/naucrates/traceflags/traceflags.h | 3 + .../src/operators/CDXLPhysicalWindow.cpp | 20 +- .../parser/CParseHandlerPhysicalWindow.cpp | 2 +- .../gporca/libnaucrates/src/xml/dxltokens.cpp | 1 + src/backend/nodes/copyfuncs.c | 40 ++ src/backend/nodes/outfast.c | 3 + src/backend/nodes/outfuncs.c | 30 ++ src/backend/nodes/print.c | 2 + src/backend/nodes/readfast.c | 3 + src/backend/nodes/readfuncs.c | 31 ++ src/backend/optimizer/plan/orca.c | 6 +- src/backend/optimizer/plan/planner.c | 13 +- src/backend/optimizer/util/walkers.c | 8 + src/backend/utils/misc/guc_gp.c | 12 + src/backend/utils/resource_manager/memquota.c | 1 + src/include/gpopt/CGPOptimizer.h | 7 +- .../gpopt/config/CConfigParamMapping.h | 2 +- .../gpopt/translate/CTranslatorDXLToPlStmt.h | 9 +- src/include/gpopt/utils/COptTasks.h | 10 +- src/include/nodes/nodes.h | 1 + src/include/nodes/plannodes.h | 41 ++ src/include/optimizer/orca.h | 3 +- src/include/optimizer/orcaopt.h | 41 ++ src/include/optimizer/planner.h | 8 +- src/include/utils/guc.h | 1 + src/include/utils/unsync_guc_name.h | 1 + .../modules/delay_execution/delay_execution.c | 6 +- src/test/regress/hooktest/hook_test.c | 8 +- src/test/unit/mock/gpopt_mock.c | 3 +- 60 files changed, 1264 insertions(+), 156 deletions(-) create mode 100644 src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashSequenceProject.h create mode 100644 src/backend/gporca/libgpopt/include/gpopt/xforms/CXformImplementHashSequenceProject.h create mode 100644 src/backend/gporca/libgpopt/src/operators/CPhysicalHashSequenceProject.cpp create mode 100644 src/backend/gporca/libgpopt/src/xforms/CXformImplementHashSequenceProject.cpp create mode 100644 src/include/optimizer/orcaopt.h diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 3cd6221d001..b125bcca694 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -313,7 +313,8 @@ static void pgss_post_parse_analyze(ParseState *pstate, Query *query, static PlannedStmt *pgss_planner(Query *parse, const char *query_string, int cursorOptions, - ParamListInfo boundParams); + ParamListInfo boundParams, + OptimizerOptions *optimizer_options); static void pgss_ExecutorStart(QueryDesc *queryDesc, int eflags); static void pgss_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, @@ -866,7 +867,8 @@ static PlannedStmt * pgss_planner(Query *parse, const char *query_string, int cursorOptions, - ParamListInfo boundParams) + ParamListInfo boundParams, + OptimizerOptions *optimizer_options) { PlannedStmt *result; @@ -908,10 +910,10 @@ pgss_planner(Query *parse, { if (prev_planner_hook) result = prev_planner_hook(parse, query_string, cursorOptions, - boundParams); + boundParams, optimizer_options); else result = standard_planner(parse, query_string, cursorOptions, - boundParams); + boundParams, optimizer_options); } PG_FINALLY(); { @@ -945,10 +947,10 @@ pgss_planner(Query *parse, { if (prev_planner_hook) result = prev_planner_hook(parse, query_string, cursorOptions, - boundParams); + boundParams, optimizer_options); else result = standard_planner(parse, query_string, cursorOptions, - boundParams); + boundParams, optimizer_options); } return result; diff --git a/gpcontrib/pg_hint_plan/pg_hint_plan.c b/gpcontrib/pg_hint_plan/pg_hint_plan.c index 033a9d01200..1d37677019c 100644 --- a/gpcontrib/pg_hint_plan/pg_hint_plan.c +++ b/gpcontrib/pg_hint_plan/pg_hint_plan.c @@ -428,7 +428,7 @@ pg_hint_plan_add_paths_to_joinrel(PlannerInfo *root, static void *external_plan_hint_hook(Query *parse); #endif static PlannedStmt *pg_hint_plan_planner(Query *parse, const char *query_string, int cursorOptions, - ParamListInfo boundParams); + ParamListInfo boundParams, OptimizerOptions *optimizer_options); static RelOptInfo *pg_hint_plan_join_search(PlannerInfo *root, int levels_needed, List *initial_rels); @@ -3118,7 +3118,7 @@ pg_hint_plan_ProcessUtility(PlannedStmt *pstmt, const char *queryString, */ static PlannedStmt * pg_hint_plan_planner(Query *parse, const char *query_string, - int cursorOptions, ParamListInfo boundParams) + int cursorOptions, ParamListInfo boundParams, OptimizerOptions *optimizer_options) { int save_nestlevel; PlannedStmt *result; @@ -3236,9 +3236,9 @@ pg_hint_plan_planner(Query *parse, const char *query_string, } if (prev_planner) - result = (*prev_planner) (parse, query_string, cursorOptions, boundParams); + result = (*prev_planner) (parse, query_string, cursorOptions, boundParams, optimizer_options); else - result = standard_planner(parse, query_string, cursorOptions, boundParams); + result = standard_planner(parse, query_string, cursorOptions, boundParams, optimizer_options); current_hint_str = prev_hint_str; recurse_level--; @@ -3298,9 +3298,9 @@ pg_hint_plan_planner(Query *parse, const char *query_string, } current_hint_state = NULL; if (prev_planner) - result = (*prev_planner) (parse, query_string, cursorOptions, boundParams); + result = (*prev_planner) (parse, query_string, cursorOptions, boundParams, optimizer_options); else - result = standard_planner(parse, query_string, cursorOptions, boundParams); + result = standard_planner(parse, query_string, cursorOptions, boundParams, optimizer_options); /* The upper-level planner still needs the current hint state */ if (HintStateStack != NIL) diff --git a/src/backend/cdb/cdbllize.c b/src/backend/cdb/cdbllize.c index 070ed51b99c..a4037c36158 100644 --- a/src/backend/cdb/cdbllize.c +++ b/src/backend/cdb/cdbllize.c @@ -1506,6 +1506,7 @@ motion_sanity_walker(Node *node, sanity_result_t *result) { case T_Result: case T_WindowAgg: + case T_WindowHashAgg: case T_TableFunctionScan: case T_ShareInputScan: case T_Append: diff --git a/src/backend/cdb/cdbplan.c b/src/backend/cdb/cdbplan.c index 1979ad38f8b..f48d8448338 100644 --- a/src/backend/cdb/cdbplan.c +++ b/src/backend/cdb/cdbplan.c @@ -694,6 +694,25 @@ plan_tree_mutator(Node *node, return (Node *) newwindow; } break; + case T_WindowHashAgg: + { + WindowHashAgg *window = (WindowHashAgg *) node; + WindowHashAgg *newwindow; + + FLATCOPY(newwindow, window, WindowHashAgg); + PLANMUTATE(newwindow, window); + + COPYARRAY(newwindow, window, partNumCols, partColIdx); + COPYARRAY(newwindow, window, partNumCols, partOperators); + + COPYARRAY(newwindow, window, ordNumCols, ordColIdx); + COPYARRAY(newwindow, window, ordNumCols, ordOperators); + MUTATE(newwindow->startOffset, window->startOffset, Node *); + MUTATE(newwindow->endOffset, window->endOffset, Node *); + + return (Node *) newwindow; + } + break; case T_Unique: { diff --git a/src/backend/cdb/cdbtargeteddispatch.c b/src/backend/cdb/cdbtargeteddispatch.c index b297164e273..da6f40c5971 100644 --- a/src/backend/cdb/cdbtargeteddispatch.c +++ b/src/backend/cdb/cdbtargeteddispatch.c @@ -522,6 +522,7 @@ DirectDispatchUpdateContentIdsFromPlan(PlannerInfo *root, Plan *plan) DisableTargetedDispatch(&dispatchInfo); break; case T_WindowAgg: + case T_WindowHashAgg: case T_TableFunctionScan: case T_RecursiveUnion: /* no change to dispatchInfo */ diff --git a/src/backend/gpopt/CGPOptimizer.cpp b/src/backend/gpopt/CGPOptimizer.cpp index 2ab834173f1..11d08f8438a 100644 --- a/src/backend/gpopt/CGPOptimizer.cpp +++ b/src/backend/gpopt/CGPOptimizer.cpp @@ -45,7 +45,8 @@ PlannedStmt * CGPOptimizer::GPOPTOptimizedPlan( Query *query, bool * - had_unexpected_failure // output : set to true if optimizer unexpectedly failed to produce plan + had_unexpected_failure, // output : set to true if optimizer unexpectedly failed to produce plan + OptimizerOptions *opts ) { SOptContext gpopt_context; @@ -55,7 +56,7 @@ CGPOptimizer::GPOPTOptimizedPlan( GPOS_TRY { - plStmt = COptTasks::GPOPTOptimizedPlan(query, &gpopt_context); + plStmt = COptTasks::GPOPTOptimizedPlan(query, &gpopt_context, opts); // clean up context gpopt_context.Free(gpopt_context.epinQuery, gpopt_context.epinPlStmt); } @@ -199,9 +200,9 @@ CGPOptimizer::TerminateGPOPT() //--------------------------------------------------------------------------- extern "C" { PlannedStmt * -GPOPTOptimizedPlan(Query *query, bool *had_unexpected_failure) +GPOPTOptimizedPlan(Query *query, bool *had_unexpected_failure, OptimizerOptions *opts) { - return CGPOptimizer::GPOPTOptimizedPlan(query, had_unexpected_failure); + return CGPOptimizer::GPOPTOptimizedPlan(query, had_unexpected_failure, opts); } } diff --git a/src/backend/gpopt/config/CConfigParamMapping.cpp b/src/backend/gpopt/config/CConfigParamMapping.cpp index 802cf38785b..fcf4889ff8f 100644 --- a/src/backend/gpopt/config/CConfigParamMapping.cpp +++ b/src/backend/gpopt/config/CConfigParamMapping.cpp @@ -326,6 +326,12 @@ CConfigParamMapping::SConfigMappingElem CConfigParamMapping::m_elements[] = { false, // m_negate_param GPOS_WSZ_LIT( "Disable the dynamic seq/bitmap/index scan in partition table")}, + + {EopttraceEnableWindowHashAgg, &optimizer_force_window_hash_agg, + false, // m_negate_param + GPOS_WSZ_LIT( + "Enable create window hash agg")}, + }; //--------------------------------------------------------------------------- @@ -339,7 +345,8 @@ CConfigParamMapping::SConfigMappingElem CConfigParamMapping::m_elements[] = { CBitSet * CConfigParamMapping::PackConfigParamInBitset( CMemoryPool *mp, - ULONG xform_id // number of available xforms + ULONG xform_id, // number of available xforms + BOOL create_vec_plan ) { CBitSet *traceflag_bitset = GPOS_NEW(mp) CBitSet(mp, EopttraceSentinel); @@ -561,6 +568,10 @@ CConfigParamMapping::PackConfigParamInBitset( GPOPT_DISABLE_XFORM_TF(CXform::ExfRightOuterJoin2HashJoin)); } + if (create_vec_plan) { + traceflag_bitset->ExchangeSet(EopttraceEnableWindowHashAgg); + } + return traceflag_bitset; } diff --git a/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp b/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp index c7b89c0384e..e706f5f68ac 100644 --- a/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp +++ b/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp @@ -407,8 +407,13 @@ CTranslatorDXLToPlStmt::TranslateDXLOperatorToPlan( } case EdxlopPhysicalWindow: { - plan = TranslateDXLWindow(dxlnode, output_context, + if (CDXLPhysicalWindow::Cast(dxlnode->GetOperator())->IsWindowHashAgg()) { + plan = TranslateDXLWindowHashAgg(dxlnode, output_context, + ctxt_translation_prev_siblings); + } else { + plan = TranslateDXLWindowAgg(dxlnode, output_context, ctxt_translation_prev_siblings); + } break; } case EdxlopPhysicalSort: @@ -3040,16 +3045,121 @@ CTranslatorDXLToPlStmt::TranslateDXLAgg( return (Plan *) agg; } +static +int WindowFrameSpecToOptions(const EdxlFrameSpec &dxlFS) { + int winFrameOptions = 0; + if (EdxlfsRow == dxlFS) + { + winFrameOptions |= FRAMEOPTION_ROWS; + } + else if (EdxlfsGroups == dxlFS) + { + winFrameOptions |= FRAMEOPTION_GROUPS; + } + else + { + winFrameOptions |= FRAMEOPTION_RANGE; + } + return winFrameOptions; +} + +static +int WindowFrameExclusionStrategyToOptions(const EdxlFrameExclusionStrategy &dxlFES) { + int winFrameOptions = 0; + if (dxlFES == EdxlfesCurrentRow) + { + winFrameOptions |= FRAMEOPTION_EXCLUDE_CURRENT_ROW; + } + else if (dxlFES == EdxlfesGroup) + { + winFrameOptions |= FRAMEOPTION_EXCLUDE_GROUP; + } + else if (dxlFES == EdxlfesTies) + { + winFrameOptions |= FRAMEOPTION_EXCLUDE_TIES; + } + + return winFrameOptions; +} + +static +int WindowFrameStartBoundaryToOptions(const EdxlFrameBoundary &dxlFB) { + int winFrameOptions = 0; + if (dxlFB == EdxlfbUnboundedPreceding) + { + winFrameOptions |= FRAMEOPTION_START_UNBOUNDED_PRECEDING; + } + if (dxlFB == EdxlfbBoundedPreceding) + { + winFrameOptions |= FRAMEOPTION_START_OFFSET_PRECEDING; + } + if (dxlFB == EdxlfbCurrentRow) + { + winFrameOptions |= FRAMEOPTION_START_CURRENT_ROW; + } + if (dxlFB == EdxlfbBoundedFollowing) + { + winFrameOptions |= FRAMEOPTION_START_OFFSET_FOLLOWING; + } + if (dxlFB == EdxlfbUnboundedFollowing) + { + winFrameOptions |= FRAMEOPTION_START_UNBOUNDED_FOLLOWING; + } + if (dxlFB == EdxlfbDelayedBoundedPreceding) + { + winFrameOptions |= FRAMEOPTION_START_OFFSET_PRECEDING; + } + if (dxlFB == EdxlfbDelayedBoundedFollowing) + { + winFrameOptions |= FRAMEOPTION_START_OFFSET_FOLLOWING; + } + return winFrameOptions; +} + +static +int WindowFrameEndBoundaryToOptions(const EdxlFrameBoundary &dxlFB) { + int winFrameOptions = 0; + if (dxlFB == EdxlfbUnboundedPreceding) + { + winFrameOptions |= FRAMEOPTION_END_UNBOUNDED_PRECEDING; + } + if (dxlFB == EdxlfbBoundedPreceding) + { + winFrameOptions |= FRAMEOPTION_END_OFFSET_PRECEDING; + } + if (dxlFB == EdxlfbCurrentRow) + { + winFrameOptions |= FRAMEOPTION_END_CURRENT_ROW; + } + if (dxlFB == EdxlfbBoundedFollowing) + { + winFrameOptions |= FRAMEOPTION_END_OFFSET_FOLLOWING; + } + if (dxlFB == EdxlfbUnboundedFollowing) + { + winFrameOptions |= FRAMEOPTION_END_UNBOUNDED_FOLLOWING; + } + if (dxlFB == EdxlfbDelayedBoundedPreceding) + { + winFrameOptions |= FRAMEOPTION_END_OFFSET_PRECEDING; + } + if (dxlFB == EdxlfbDelayedBoundedFollowing) + { + winFrameOptions |= FRAMEOPTION_END_OFFSET_FOLLOWING; + } + return winFrameOptions; +} + //--------------------------------------------------------------------------- // @function: -// CTranslatorDXLToPlStmt::TranslateDXLWindow +// CTranslatorDXLToPlStmt::TranslateDXLWindowAgg // // @doc: // Translate DXL window node into GPDB window plan node // //--------------------------------------------------------------------------- Plan * -CTranslatorDXLToPlStmt::TranslateDXLWindow( +CTranslatorDXLToPlStmt::TranslateDXLWindowAgg( const CDXLNode *window_dxlnode, CDXLTranslateContext *output_context, CDXLTranslationContextArray *ctxt_translation_prev_siblings) { @@ -3104,9 +3214,6 @@ CTranslatorDXLToPlStmt::TranslateDXLWindow( const ULongPtrArray *part_by_cols_array = window_dxlop->GetPartByColsArray(); window->partNumCols = part_by_cols_array->Size(); - window->partColIdx = nullptr; - window->partOperators = nullptr; - window->partCollations = nullptr; if (window->partNumCols > 0) { @@ -3116,6 +3223,10 @@ CTranslatorDXLToPlStmt::TranslateDXLWindow( (Oid *) gpdb::GPDBAlloc(window->partNumCols * sizeof(Oid)); window->partCollations = (Oid *) gpdb::GPDBAlloc(window->partNumCols * sizeof(Oid)); + } else { + window->partColIdx = nullptr; + window->partOperators = nullptr; + window->partCollations = nullptr; } const ULONG num_of_part_cols = part_by_cols_array->Size(); @@ -3196,34 +3307,214 @@ CTranslatorDXLToPlStmt::TranslateDXLWindow( if (nullptr != window_key->GetWindowFrame()) { window->frameOptions = FRAMEOPTION_NONDEFAULT; - if (EdxlfsRow == window_frame->ParseDXLFrameSpec()) - { - window->frameOptions |= FRAMEOPTION_ROWS; - } - else if (EdxlfsGroups == window_frame->ParseDXLFrameSpec()) - { - window->frameOptions |= FRAMEOPTION_GROUPS; - } - else - { - window->frameOptions |= FRAMEOPTION_RANGE; - } + window->frameOptions |= WindowFrameSpecToOptions(window_frame->ParseDXLFrameSpec()); + window->frameOptions |= WindowFrameExclusionStrategyToOptions( + window_frame->ParseFrameExclusionStrategy()); - if (window_frame->ParseFrameExclusionStrategy() == - EdxlfesCurrentRow) - { - window->frameOptions |= FRAMEOPTION_EXCLUDE_CURRENT_ROW; - } - else if (window_frame->ParseFrameExclusionStrategy() == - EdxlfesGroup) + // translate the CDXLNodes representing the leading and trailing edge + CDXLTranslationContextArray *child_contexts = + GPOS_NEW(m_mp) CDXLTranslationContextArray(m_mp); + child_contexts->Append(&child_context); + + CMappingColIdVarPlStmt colid_var_mapping = + CMappingColIdVarPlStmt(m_mp, nullptr, child_contexts, + output_context, m_dxl_to_plstmt_context); + + // Translate lead boundary + // + // Note that we don't distinguish between the delayed and undelayed + // versions beoynd this point. Executor will make that decision + // without our help. + // + CDXLNode *win_frame_leading_dxlnode = window_frame->PdxlnLeading(); + window->frameOptions |= WindowFrameStartBoundaryToOptions( + CDXLScalarWindowFrameEdge::Cast(win_frame_leading_dxlnode->GetOperator()) + ->ParseDXLFrameBoundary()); + if (0 != win_frame_leading_dxlnode->Arity()) { - window->frameOptions |= FRAMEOPTION_EXCLUDE_GROUP; + window->startOffset = + (Node *) m_translator_dxl_to_scalar->TranslateDXLToScalar( + (*win_frame_leading_dxlnode)[0], &colid_var_mapping); } - else if (window_frame->ParseFrameExclusionStrategy() == EdxlfesTies) + + // And the same for the trail boundary + CDXLNode *win_frame_trailing_dxlnode = + window_frame->PdxlnTrailing(); + window->frameOptions |= WindowFrameEndBoundaryToOptions( + CDXLScalarWindowFrameEdge::Cast( + win_frame_trailing_dxlnode->GetOperator()) + ->ParseDXLFrameBoundary()); + + if (0 != win_frame_trailing_dxlnode->Arity()) { - window->frameOptions |= FRAMEOPTION_EXCLUDE_TIES; + window->endOffset = + (Node *) m_translator_dxl_to_scalar->TranslateDXLToScalar( + (*win_frame_trailing_dxlnode)[0], &colid_var_mapping); } + window->startInRangeFunc = window_frame->PdxlnStartInRangeFunc(); + window->endInRangeFunc = window_frame->PdxlnEndInRangeFunc(); + window->inRangeColl = window_frame->PdxlnInRangeColl(); + window->inRangeAsc = window_frame->PdxlnInRangeAsc(); + window->inRangeNullsFirst = window_frame->PdxlnInRangeNullsFirst(); + + // cleanup + child_contexts->Release(); + } + else + { + window->frameOptions = FRAMEOPTION_DEFAULTS; + } + } + + SetParamIds(plan); + + // cleanup + child_contexts->Release(); + + return (Plan *) window; +} + +//--------------------------------------------------------------------------- +// @function: +// CTranslatorDXLToPlStmt::TranslateDXLWindowHashAgg +// +// @doc: +// Translate DXL window node into GPDB window hash plan node +// +//--------------------------------------------------------------------------- +Plan * +CTranslatorDXLToPlStmt::TranslateDXLWindowHashAgg( + const CDXLNode *window_dxlnode, CDXLTranslateContext *output_context, + CDXLTranslationContextArray *ctxt_translation_prev_siblings) +{ + WindowHashAgg *window = MakeNode(WindowHashAgg); + + Plan *plan = &(window->plan); + plan->plan_node_id = m_dxl_to_plstmt_context->GetNextPlanId(); + + CDXLPhysicalWindow *window_dxlop = + CDXLPhysicalWindow::Cast(window_dxlnode->GetOperator()); + + // translate the operator costs + TranslatePlanCosts(window_dxlnode, plan); + + // translate children + CDXLNode *child_dxlnode = (*window_dxlnode)[EdxlwindowIndexChild]; + CDXLNode *project_list_dxlnode = (*window_dxlnode)[EdxlwindowIndexProjList]; + CDXLNode *filter_dxlnode = (*window_dxlnode)[EdxlwindowIndexFilter]; + + CDXLTranslateContext child_context(m_mp, true, + output_context->GetColIdToParamIdMap()); + Plan *child_plan = TranslateDXLOperatorToPlan( + child_dxlnode, &child_context, ctxt_translation_prev_siblings); + + CDXLTranslationContextArray *child_contexts = + GPOS_NEW(m_mp) CDXLTranslationContextArray(m_mp); + child_contexts->Append(&child_context); + + // translate proj list and filter + TranslateProjListAndFilter(project_list_dxlnode, filter_dxlnode, + nullptr, // translate context for the base table + child_contexts, // pdxltrctxRight, + &plan->targetlist, &plan->qual, output_context); + + ListCell *lc; + + foreach (lc, plan->targetlist) + { + TargetEntry *target_entry = (TargetEntry *) lfirst(lc); + if (IsA(target_entry->expr, WindowFunc)) + { + WindowFunc *window_func = (WindowFunc *) target_entry->expr; + window->winref = window_func->winref; + break; + } + } + + plan->lefttree = child_plan; + + // translate partition columns + const ULongPtrArray *part_by_cols_array = + window_dxlop->GetPartByColsArray(); + window->partNumCols = part_by_cols_array->Size(); + + if (window->partNumCols > 0) + { + window->partColIdx = (AttrNumber *) gpdb::GPDBAlloc( + window->partNumCols * sizeof(AttrNumber)); + window->partOperators = + (Oid *) gpdb::GPDBAlloc(window->partNumCols * sizeof(Oid)); + window->partCollations = + (Oid *) gpdb::GPDBAlloc(window->partNumCols * sizeof(Oid)); + } else { + window->partColIdx = nullptr; + window->partOperators = nullptr; + window->partCollations = nullptr; + } + + const ULONG num_of_part_cols = part_by_cols_array->Size(); + for (ULONG ul = 0; ul < num_of_part_cols; ul++) + { + ULONG part_colid = *((*part_by_cols_array)[ul]); + const TargetEntry *te_part_colid = + child_context.GetTargetEntry(part_colid); + if (nullptr == te_part_colid) + { + GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiDXL2PlStmtAttributeNotFound, + part_colid); + } + window->partColIdx[ul] = te_part_colid->resno; + + // Also find the equality operators to use for each partitioning key col. + Oid type_id = gpdb::ExprType((Node *) te_part_colid->expr); + window->partOperators[ul] = gpdb::GetEqualityOp(type_id); + Assert(window->partOperators[ul] != 0); + window->partCollations[ul] = + gpdb::ExprCollation((Node *) te_part_colid->expr); + } + + // translate window keys + const ULONG size = window_dxlop->WindowKeysCount(); + if (size > 1) + { + GpdbEreport(ERRCODE_INTERNAL_ERROR, ERROR, + "ORCA produced a plan with more than one window key", + nullptr); + } + GPOS_ASSERT(size <= 1 && "cannot have more than one window key"); + + if (size == 1) + { + // translate the sorting columns used in the window key + const CDXLWindowKey *window_key = window_dxlop->GetDXLWindowKeyAt(0); + const CDXLWindowFrame *window_frame = window_key->GetWindowFrame(); + const CDXLNode *sort_col_list_dxlnode = window_key->GetSortColListDXL(); + + const ULONG num_of_cols = sort_col_list_dxlnode->Arity(); + + window->ordNumCols = num_of_cols; + window->ordColIdx = + (AttrNumber *) gpdb::GPDBAlloc(num_of_cols * sizeof(AttrNumber)); + window->ordOperators = + (Oid *) gpdb::GPDBAlloc(num_of_cols * sizeof(Oid)); + window->ordCollations = + (Oid *) gpdb::GPDBAlloc(num_of_cols * sizeof(Oid)); + window->ordNullsFirst = + (bool *) gpdb::GPDBAlloc(num_of_cols * sizeof(bool)); + // different with windowagg, sort should be full + TranslateSortCols(sort_col_list_dxlnode, &child_context, + window->ordColIdx, window->ordOperators, + window->ordCollations, window->ordNullsFirst); + + // translate the window frame specified in the window key + if (nullptr != window_key->GetWindowFrame()) + { + window->frameOptions = FRAMEOPTION_NONDEFAULT; + window->frameOptions |= WindowFrameSpecToOptions(window_frame->ParseDXLFrameSpec()); + window->frameOptions |= WindowFrameExclusionStrategyToOptions( + window_frame->ParseFrameExclusionStrategy()); + // translate the CDXLNodes representing the leading and trailing edge CDXLTranslationContextArray *child_contexts = GPOS_NEW(m_mp) CDXLTranslationContextArray(m_mp); @@ -3240,38 +3531,9 @@ CTranslatorDXLToPlStmt::TranslateDXLWindow( // without our help. // CDXLNode *win_frame_leading_dxlnode = window_frame->PdxlnLeading(); - EdxlFrameBoundary lead_boundary_type = - CDXLScalarWindowFrameEdge::Cast( - win_frame_leading_dxlnode->GetOperator()) - ->ParseDXLFrameBoundary(); - if (lead_boundary_type == EdxlfbUnboundedPreceding) - { - window->frameOptions |= FRAMEOPTION_START_UNBOUNDED_PRECEDING; - } - if (lead_boundary_type == EdxlfbBoundedPreceding) - { - window->frameOptions |= FRAMEOPTION_START_OFFSET_PRECEDING; - } - if (lead_boundary_type == EdxlfbCurrentRow) - { - window->frameOptions |= FRAMEOPTION_START_CURRENT_ROW; - } - if (lead_boundary_type == EdxlfbBoundedFollowing) - { - window->frameOptions |= FRAMEOPTION_START_OFFSET_FOLLOWING; - } - if (lead_boundary_type == EdxlfbUnboundedFollowing) - { - window->frameOptions |= FRAMEOPTION_START_UNBOUNDED_FOLLOWING; - } - if (lead_boundary_type == EdxlfbDelayedBoundedPreceding) - { - window->frameOptions |= FRAMEOPTION_START_OFFSET_PRECEDING; - } - if (lead_boundary_type == EdxlfbDelayedBoundedFollowing) - { - window->frameOptions |= FRAMEOPTION_START_OFFSET_FOLLOWING; - } + window->frameOptions |= WindowFrameStartBoundaryToOptions( + CDXLScalarWindowFrameEdge::Cast(win_frame_leading_dxlnode->GetOperator()) + ->ParseDXLFrameBoundary()); if (0 != win_frame_leading_dxlnode->Arity()) { window->startOffset = @@ -3282,38 +3544,11 @@ CTranslatorDXLToPlStmt::TranslateDXLWindow( // And the same for the trail boundary CDXLNode *win_frame_trailing_dxlnode = window_frame->PdxlnTrailing(); - EdxlFrameBoundary trail_boundary_type = + window->frameOptions |= WindowFrameEndBoundaryToOptions( CDXLScalarWindowFrameEdge::Cast( win_frame_trailing_dxlnode->GetOperator()) - ->ParseDXLFrameBoundary(); - if (trail_boundary_type == EdxlfbUnboundedPreceding) - { - window->frameOptions |= FRAMEOPTION_END_UNBOUNDED_PRECEDING; - } - if (trail_boundary_type == EdxlfbBoundedPreceding) - { - window->frameOptions |= FRAMEOPTION_END_OFFSET_PRECEDING; - } - if (trail_boundary_type == EdxlfbCurrentRow) - { - window->frameOptions |= FRAMEOPTION_END_CURRENT_ROW; - } - if (trail_boundary_type == EdxlfbBoundedFollowing) - { - window->frameOptions |= FRAMEOPTION_END_OFFSET_FOLLOWING; - } - if (trail_boundary_type == EdxlfbUnboundedFollowing) - { - window->frameOptions |= FRAMEOPTION_END_UNBOUNDED_FOLLOWING; - } - if (trail_boundary_type == EdxlfbDelayedBoundedPreceding) - { - window->frameOptions |= FRAMEOPTION_END_OFFSET_PRECEDING; - } - if (trail_boundary_type == EdxlfbDelayedBoundedFollowing) - { - window->frameOptions |= FRAMEOPTION_END_OFFSET_FOLLOWING; - } + ->ParseDXLFrameBoundary()); + if (0 != win_frame_trailing_dxlnode->Arity()) { window->endOffset = diff --git a/src/backend/gpopt/utils/COptTasks.cpp b/src/backend/gpopt/utils/COptTasks.cpp index 0f5aadbd82a..dd0e61116d8 100644 --- a/src/backend/gpopt/utils/COptTasks.cpp +++ b/src/backend/gpopt/utils/COptTasks.cpp @@ -913,7 +913,7 @@ COptTasks::OptimizeTask(void *ptr) { // set trace flags trace_flags = CConfigParamMapping::PackConfigParamInBitset( - mp, CXform::ExfSentinel); + mp, CXform::ExfSentinel, opt_ctxt->m_create_vec_plan); SetTraceflags(mp, trace_flags, &enabled_trace_flags, &disabled_trace_flags); @@ -1156,13 +1156,15 @@ COptTasks::Optimize(Query *query) // //--------------------------------------------------------------------------- PlannedStmt * -COptTasks::GPOPTOptimizedPlan(Query *query, SOptContext *gpopt_context) +COptTasks::GPOPTOptimizedPlan(Query *query, SOptContext *gpopt_context, OptimizerOptions *opts) { Assert(query); Assert(gpopt_context); gpopt_context->m_query = query; gpopt_context->m_should_generate_plan_stmt = true; + // Copy options in `OptimizerOptions` to `SOptContext` + gpopt_context->m_create_vec_plan = opts->create_vectorization_plan; Execute(&OptimizeTask, gpopt_context); return gpopt_context->m_plan_stmt; } diff --git a/src/backend/gporca/libgpdbcost/include/gpdbcost/CCostModelGPDB.h b/src/backend/gporca/libgpdbcost/include/gpdbcost/CCostModelGPDB.h index 9103a08ed8e..2b44693fa4e 100644 --- a/src/backend/gporca/libgpdbcost/include/gpdbcost/CCostModelGPDB.h +++ b/src/backend/gporca/libgpdbcost/include/gpdbcost/CCostModelGPDB.h @@ -107,6 +107,12 @@ class CCostModelGPDB : public ICostModel const CCostModelGPDB *pcmgpdb, const SCostingInfo *pci); + // cost of hash sequence project + static CCost CostHashSequenceProject(CMemoryPool *mp, + CExpressionHandle &exprhdl, + const CCostModelGPDB *pcmgpdb, + const SCostingInfo *pci); + // cost of CTE producer static CCost CostCTEProducer(CMemoryPool *mp, CExpressionHandle &exprhdl, const CCostModelGPDB *pcmgpdb, diff --git a/src/backend/gporca/libgpdbcost/src/CCostModelGPDB.cpp b/src/backend/gporca/libgpdbcost/src/CCostModelGPDB.cpp index a91fc4283fd..73330059c72 100644 --- a/src/backend/gporca/libgpdbcost/src/CCostModelGPDB.cpp +++ b/src/backend/gporca/libgpdbcost/src/CCostModelGPDB.cpp @@ -31,6 +31,7 @@ #include "gpopt/operators/CPhysicalMotionBroadcast.h" #include "gpopt/operators/CPhysicalPartitionSelector.h" #include "gpopt/operators/CPhysicalSequenceProject.h" +#include "gpopt/operators/CPhysicalHashSequenceProject.h" #include "gpopt/operators/CPhysicalStreamAgg.h" #include "gpopt/operators/CPhysicalUnionAll.h" #include "gpopt/operators/CPredicateUtils.h" @@ -1594,11 +1595,17 @@ CCostModelGPDB::CostSequenceProject(CMemoryPool *mp, CExpressionHandle &exprhdl, GPOS_ASSERT(COperator::EopPhysicalSequenceProject == exprhdl.Pop()->Eopid()); + const CDouble dTupDefaultProcCostUnit = + pcmgpdb->GetCostModelParams() + ->PcpLookup(CCostModelParamsGPDB::EcpTupDefaultProcCostUnit) + ->Get(); + GPOS_ASSERT(0 < dTupDefaultProcCostUnit); + CPhysicalSequenceProject *psp = CPhysicalSequenceProject::PopConvert(exprhdl.Pop()); - if (GPOS_FTRACE(EopttraceForceSplitWindowFunc) && + if (GPOS_FTRACE(EopttraceForceSplitWindowFunc) && psp->Pspt() == COperator::EsptypeGlobalTwoStep) { - return CCost(0); + return CCost(dTupDefaultProcCostUnit * 2); } const DOUBLE num_rows_outer = pci->PdRows()[0]; @@ -1614,12 +1621,59 @@ CCostModelGPDB::CostSequenceProject(CMemoryPool *mp, CExpressionHandle &exprhdl, ulSortCols += pos->UlSortColumns(); } + // we process (sorted window of) input tuples to compute window function values + CCost costLocal = + CCost(pci->NumRebinds() * (ulSortCols * num_rows_outer * dWidthOuter * + dTupDefaultProcCostUnit)); + CCost costChild = + CostChildren(mp, exprhdl, pci, pcmgpdb->GetCostModelParams()); + + return costLocal + costChild; +} + +//--------------------------------------------------------------------------- +// @function: +// CCostModelGPDB::CostSequenceProject +// +// @doc: +// Cost of sequence project +// +//--------------------------------------------------------------------------- +CCost +CCostModelGPDB::CostHashSequenceProject(CMemoryPool *mp, CExpressionHandle &exprhdl, + const CCostModelGPDB *pcmgpdb, + const SCostingInfo *pci) +{ + GPOS_ASSERT(nullptr != pcmgpdb); + GPOS_ASSERT(nullptr != pci); + GPOS_ASSERT(COperator::EopPhysicalHashSequenceProject == + exprhdl.Pop()->Eopid()); const CDouble dTupDefaultProcCostUnit = pcmgpdb->GetCostModelParams() ->PcpLookup(CCostModelParamsGPDB::EcpTupDefaultProcCostUnit) ->Get(); GPOS_ASSERT(0 < dTupDefaultProcCostUnit); + CPhysicalHashSequenceProject *psp = CPhysicalHashSequenceProject::PopConvert(exprhdl.Pop()); + + if (GPOS_FTRACE(EopttraceForceSplitWindowFunc) && + psp->Pspt() == COperator::EsptypeGlobalTwoStep) { + return CCost(dTupDefaultProcCostUnit); + } + + const DOUBLE num_rows_outer = pci->PdRows()[0]; + const DOUBLE dWidthOuter = pci->GetWidth()[0]; + + ULONG ulSortCols = 0; + COrderSpecArray *pdrgpos = + CPhysicalHashSequenceProject::PopConvert(psp)->Pdrgpos(); + const ULONG ulOrderSpecs = pdrgpos->Size(); + for (ULONG ul = 0; ul < ulOrderSpecs; ul++) + { + COrderSpec *pos = (*pdrgpos)[ul]; + ulSortCols += pos->UlSortColumns(); + } + // we process (sorted window of) input tuples to compute window function values CCost costLocal = CCost(pci->NumRebinds() * (ulSortCols * num_rows_outer * dWidthOuter * @@ -2462,18 +2516,26 @@ CCostModelGPDB::Cost( return CostSequenceProject(m_mp, exprhdl, this, pci); } + case COperator::EopPhysicalHashSequenceProject: + { + return CostHashSequenceProject(m_mp, exprhdl, this, pci); + } + case COperator::EopPhysicalCTEProducer: { return CostCTEProducer(m_mp, exprhdl, this, pci); } + case COperator::EopPhysicalCTEConsumer: { return CostCTEConsumer(m_mp, exprhdl, this, pci); } + case COperator::EopPhysicalConstTableGet: { return CostConstTableGet(m_mp, exprhdl, this, pci); } + case COperator::EopPhysicalDML: { return CostDML(m_mp, exprhdl, this, pci); diff --git a/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpec.h b/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpec.h index d8b4919674b..d3b47b95f80 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpec.h +++ b/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpec.h @@ -179,6 +179,9 @@ class CDistributionSpec : public CPropSpec } // print IOstream &OsPrint(IOstream &os) const override = 0; + virtual IOstream &OsPrintNoWrap(IOstream &os) const{ + return OsPrint(os); + } // return distribution partitioning type virtual EDistributionPartitioningType Edpt() const = 0; diff --git a/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpecHashed.h b/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpecHashed.h index 306b36f4ab9..5e4de6ac62a 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpecHashed.h +++ b/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpecHashed.h @@ -178,7 +178,8 @@ class CDistributionSpecHashed : public CDistributionSpecRandom // print IOstream &OsPrint(IOstream &os) const override; - IOstream &OsPrintWithPrefix(IOstream &os, const char *prefix) const; + IOstream &OsPrintNoWrap(IOstream &os) const override; + IOstream &OsPrintWithPrefix(IOstream &os, const char *prefix, BOOL wrap = true) const; // return a hashed distribution on the maximal hashable subset of given columns static CDistributionSpecHashed *PdshashedMaximal(CMemoryPool *mp, diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/COperator.h b/src/backend/gporca/libgpopt/include/gpopt/operators/COperator.h index 272bba90929..657e3082ef7 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/COperator.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/COperator.h @@ -213,6 +213,7 @@ class COperator : public CRefCount, public DbgPrintMixin EopPhysicalCTEProducer, EopPhysicalCTEConsumer, EopPhysicalSequenceProject, + EopPhysicalHashSequenceProject, EopPhysicalDynamicIndexScan, EopPhysicalInnerHashJoin, diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashSequenceProject.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashSequenceProject.h new file mode 100644 index 00000000000..288c0873b47 --- /dev/null +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashSequenceProject.h @@ -0,0 +1,123 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * CPhysicalHashSequenceProject.h + * + * IDENTIFICATION + * src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashSequenceProject.h + * + *------------------------------------------------------------------------- + */ + +#ifndef GPOPT_CPhysicalHashSequenceProject_H +#define GPOPT_CPhysicalHashSequenceProject_H + +#include "gpos/base.h" + +#include "gpopt/base/CWindowFrame.h" +#include "gpopt/operators/CPhysicalSequenceProject.h" + +namespace gpopt +{ +// fwd declarations +class CDistributionSpec; + +//--------------------------------------------------------------------------- +// @class: +// CPhysicalHashSequenceProject +// +// @doc: +// Physical Hash Sequence Project operator +// +//--------------------------------------------------------------------------- +class CPhysicalHashSequenceProject : public CPhysicalSequenceProject +{ +public: + CPhysicalHashSequenceProject(const CPhysicalHashSequenceProject &) = delete; + + // ctor + CPhysicalHashSequenceProject(CMemoryPool *mp, ESPType m_sptype, + CDistributionSpec *pds, + COrderSpecArray *pdrgpos, + CWindowFrameArray *pdrgpwf); + + // dtor + ~CPhysicalHashSequenceProject() override; + + // ident accessors + EOperatorId + Eopid() const override + { + return EopPhysicalHashSequenceProject; + } + + // operator name + const CHAR * + SzId() const override + { + return "CPhysicalHashSequenceProject"; + } + + // match function + BOOL Matches(COperator *pop) const override; + + // hashing function + ULONG HashValue() const override; + + // sensitivity to order of inputs + BOOL FInputOrderSensitive() const override; + + // compute required sort order of the n-th child + COrderSpec *PosRequired(CMemoryPool *mp, CExpressionHandle &exprhdl, + COrderSpec *posRequired, ULONG child_index, + CDrvdPropArray *pdrgpdpCtxt, + ULONG ulOptReq) const override; + + // return order property enforcing type for this operator + CEnfdProp::EPropEnforcingType EpetOrder( + CExpressionHandle &exprhdl, const CEnfdOrder *peo) const override; + + // return true if operator passes through stats obtained from children, + // this is used when computing stats during costing + BOOL + FPassThruStats() const override + { + return true; + } + + // print + IOstream &OsPrint(IOstream &os) const override; + + // conversion function + static CPhysicalHashSequenceProject * + PopConvert(COperator *pop) + { + GPOS_ASSERT(nullptr != pop); + GPOS_ASSERT(EopPhysicalHashSequenceProject == pop->Eopid()); + + return dynamic_cast(pop); + } + +}; // class CPhysicalHashSequenceProject + +} // namespace gpopt + +#endif // !GPOPT_CPhysicalHashSequenceProject_H + +// EOF diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalSequenceProject.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalSequenceProject.h index dc6afd1ecfa..e9d84d6edad 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalSequenceProject.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalSequenceProject.h @@ -31,7 +31,7 @@ class CDistributionSpec; //--------------------------------------------------------------------------- class CPhysicalSequenceProject : public CPhysical { -private: +protected: // window type ESPType m_sptype; diff --git a/src/backend/gporca/libgpopt/include/gpopt/translate/CTranslatorExprToDXL.h b/src/backend/gporca/libgpopt/include/gpopt/translate/CTranslatorExprToDXL.h index a3acaebb254..2c50e9e812f 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/translate/CTranslatorExprToDXL.h +++ b/src/backend/gporca/libgpopt/include/gpopt/translate/CTranslatorExprToDXL.h @@ -244,7 +244,7 @@ class CTranslatorExprToDXL CDXLNode *PdxlnWindow(CExpression *pexprSeqPrj, CColRefArray *colref_array, CDistributionSpecArray *pdrgpdsBaseTables, - ULONG *pulNonGatherMotions, BOOL *pfDML); + ULONG *pulNonGatherMotions, BOOL *pfDML, BOOL fWindowHashAgg); CDXLNode *PdxlnNLJoin(CExpression *pexprNLJ, CColRefArray *colref_array, CDistributionSpecArray *pdrgpdsBaseTables, diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h index fc7a1c8c7e6..904e6b4b1c8 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h @@ -170,6 +170,7 @@ class CXform : public CRefCount, public DbgPrintMixin ExfSplitDQA, ExfSequenceProject2Apply, ExfImplementSequenceProject, + ExfImplementHashSequenceProject, ExfImplementAssert, ExfCTEAnchor2Sequence, ExfCTEAnchor2TrivialSelect, diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformImplementHashSequenceProject.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformImplementHashSequenceProject.h new file mode 100644 index 00000000000..1422a1bbaec --- /dev/null +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformImplementHashSequenceProject.h @@ -0,0 +1,95 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * CXformImplementHashSequenceProject.h + * + * IDENTIFICATION + * src/backend/gporca/libgpopt/include/gpopt/xforms/CXformImplementHashSequenceProject.h + * + *------------------------------------------------------------------------- + */ +#ifndef GPOPT_CXformImplementHashSequenceProject_H +#define GPOPT_CXformImplementHashSequenceProject_H + +#include "gpos/base.h" + +#include "gpopt/operators/CExpressionHandle.h" +#include "gpopt/xforms/CXformImplementation.h" + +namespace gpopt +{ +using namespace gpos; + +//--------------------------------------------------------------------------- +// @class: +// CXformImplementHashSequenceProject +// +// @doc: +// Transform Project to ComputeScalar +// +//--------------------------------------------------------------------------- +class CXformImplementHashSequenceProject : public CXformImplementation +{ +private: +public: + CXformImplementHashSequenceProject( + const CXformImplementHashSequenceProject &) = delete; + + // ctor + explicit CXformImplementHashSequenceProject(CMemoryPool *mp); + + // dtor + ~CXformImplementHashSequenceProject() override = default; + + // ident accessors + EXformId + Exfid() const override + { + return ExfImplementHashSequenceProject; + } + + const CHAR * + SzId() const override + { + return "CXformImplementHashSequenceProject"; + } + + // compute xform promise for a given expression handle + EXformPromise + Exfp(CExpressionHandle &exprhdl) const override + { + if (exprhdl.DeriveHasSubquery(1)) + { + return CXform::ExfpNone; + } + + return CXform::ExfpHigh; + } + + // actual transform + void Transform(CXformContext *, CXformResult *, + CExpression *) const override; + +}; // class CXformImplementHashSequenceProject + +} // namespace gpopt + +#endif // !GPOPT_CXformImplementHashSequenceProject_H + +// EOF diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h index 25e724c2128..d0972b2be2c 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h @@ -71,6 +71,7 @@ #include "gpopt/xforms/CXformImplementLimit.h" #include "gpopt/xforms/CXformImplementSequence.h" #include "gpopt/xforms/CXformImplementSequenceProject.h" +#include "gpopt/xforms/CXformImplementHashSequenceProject.h" #include "gpopt/xforms/CXformImplementSplit.h" #include "gpopt/xforms/CXformImplementTVF.h" #include "gpopt/xforms/CXformImplementTVFNoArgs.h" diff --git a/src/backend/gporca/libgpopt/src/base/CDistributionSpecHashed.cpp b/src/backend/gporca/libgpopt/src/base/CDistributionSpecHashed.cpp index 7636b0d74d4..0adf07022d8 100644 --- a/src/backend/gporca/libgpopt/src/base/CDistributionSpecHashed.cpp +++ b/src/backend/gporca/libgpopt/src/base/CDistributionSpecHashed.cpp @@ -858,9 +858,16 @@ CDistributionSpecHashed::OsPrint(IOstream &os) const return OsPrintWithPrefix(os, ""); } +IOstream & +CDistributionSpecHashed::OsPrintNoWrap(IOstream &os) const +{ + return OsPrintWithPrefix(os, "", false); +} + IOstream & CDistributionSpecHashed::OsPrintWithPrefix(IOstream &os, - const char *prefix) const + const char *prefix, + BOOL wrap) const { os << this->SzId() << ": [ "; const ULONG length = m_pdrgpexpr->Size(); @@ -876,7 +883,7 @@ CDistributionSpecHashed::OsPrintWithPrefix(IOstream &os, } else { - os << *(hash_expr); + hash_expr->OsPrint(os); // the expression added a newline, indent the following with the prefix os << prefix; } @@ -912,7 +919,8 @@ CDistributionSpecHashed::OsPrintWithPrefix(IOstream &os, if (nullptr != m_equiv_hash_exprs && m_equiv_hash_exprs->Size() > 0 && GPOS_FTRACE(EopttracePrintEquivDistrSpecs)) { - os << "," << std::endl; + os << ","; + if (wrap) os << std::endl; for (ULONG ul = 0; ul < m_equiv_hash_exprs->Size(); ul++) { CExpressionArray *equiv_distribution_exprs = diff --git a/src/backend/gporca/libgpopt/src/operators/CLogicalSequenceProject.cpp b/src/backend/gporca/libgpopt/src/operators/CLogicalSequenceProject.cpp index f0018ea02a8..4d20c7c5e26 100644 --- a/src/backend/gporca/libgpopt/src/operators/CLogicalSequenceProject.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CLogicalSequenceProject.cpp @@ -369,6 +369,8 @@ CLogicalSequenceProject::PxfsCandidates(CMemoryPool *mp) const CXformSet *xform_set = GPOS_NEW(mp) CXformSet(mp); (void) xform_set->ExchangeSet(CXform::ExfSequenceProject2Apply); (void) xform_set->ExchangeSet(CXform::ExfImplementSequenceProject); + if (GPOS_FTRACE(EopttraceEnableWindowHashAgg)) + (void) xform_set->ExchangeSet(CXform::ExfImplementHashSequenceProject); return xform_set; } diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalHashSequenceProject.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalHashSequenceProject.cpp new file mode 100644 index 00000000000..4a6fee19a81 --- /dev/null +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalHashSequenceProject.cpp @@ -0,0 +1,151 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * CPhysicalHashSequenceProject.cpp + * + * IDENTIFICATION + * src/backend/gporca/libgpopt/src/operators/CPhysicalHashSequenceProject.cpp + * + *------------------------------------------------------------------------- + */ + +#include "gpopt/operators/CPhysicalHashSequenceProject.h" + +#include "gpos/base.h" + +#include "gpopt/base/CDistributionSpecAny.h" +#include "gpopt/base/CDistributionSpecHashed.h" +#include "gpopt/base/CDistributionSpecReplicated.h" +#include "gpopt/base/CDistributionSpecSingleton.h" +#include "gpopt/base/COptCtxt.h" +#include "gpopt/base/CUtils.h" +#include "gpopt/base/CWindowFrame.h" +#include "gpopt/cost/ICostModel.h" +#include "gpopt/operators/CExpressionHandle.h" +#include "gpopt/operators/CLogicalSequenceProject.h" +#include "gpopt/operators/CScalarIdent.h" + +using namespace gpopt; + +//--------------------------------------------------------------------------- +// @function: +// CPhysicalHashSequenceProject::CPhysicalHashSequenceProject +// +// @doc: +// Ctor +// +//--------------------------------------------------------------------------- +CPhysicalHashSequenceProject::CPhysicalHashSequenceProject(CMemoryPool *mp, + ESPType sptype, + CDistributionSpec *pds, + COrderSpecArray *pdrgpos, + CWindowFrameArray *pdrgpwf) + : CPhysicalSequenceProject(mp, sptype, pds, pdrgpos, pdrgpwf) +{} + +CPhysicalHashSequenceProject::~CPhysicalHashSequenceProject() {} + +COrderSpec * +CPhysicalHashSequenceProject::PosRequired(CMemoryPool *mp, + CExpressionHandle &, // exprhdl + COrderSpec *, // posRequired + ULONG +#ifdef GPOS_DEBUG + child_index +#endif // GPOS_DEBUG + , + CDrvdPropArray *, // pdrgpdpCtxt + ULONG // ulOptReq +) const +{ + GPOS_ASSERT(0 == child_index); + return GPOS_NEW(mp) COrderSpec(mp); +} + +// match function +BOOL +CPhysicalHashSequenceProject::Matches(COperator *pop) const +{ + GPOS_ASSERT(nullptr != pop); + if (Eopid() == pop->Eopid()) + { + CPhysicalHashSequenceProject *popHashSequenceProject = + CPhysicalHashSequenceProject::PopConvert(pop); + return m_sptype == popHashSequenceProject->Pspt() && + m_pds->Matches(popHashSequenceProject->Pds()) && + CWindowFrame::Equals(m_pdrgpwf, + popHashSequenceProject->Pdrgpwf()) && + COrderSpec::Equals(m_pdrgpos, + popHashSequenceProject->Pdrgpos()); + } + + return false; +} + +// hashing function + +ULONG +CPhysicalHashSequenceProject::HashValue() const +{ + BOOL ltrue = true; + ULONG ulHash = CPhysicalSequenceProject::HashValue(); + + ulHash = gpos::CombineHashes(ulHash, m_pds->HashValue()); + // combine a true hash value + ulHash = gpos::CombineHashes(ulHash, gpos::HashValue(<rue)); + + return ulHash; +} + +BOOL +CPhysicalHashSequenceProject::FInputOrderSensitive() const { + return false; +} + +CEnfdProp::EPropEnforcingType +CPhysicalHashSequenceProject::EpetOrder(CExpressionHandle &/*exprhdl*/, + const CEnfdOrder * +#ifdef GPOS_DEBUG + peo +#endif // GPOS_DEBUG +) const +{ + GPOS_ASSERT(nullptr != peo); + GPOS_ASSERT(!peo->PosRequired()->IsEmpty()); + + return CEnfdProp::EpetRequired; +} + + +IOstream &CPhysicalHashSequenceProject::OsPrint(IOstream &os) const +{ + os << SzId() << " ("; + CLogicalSequenceProject::OsPrintWindowType(os, m_sptype); + os << ", hashed) ("; + (void) m_pds->OsPrint(os); + os << ", "; + (void) COrderSpec::OsPrint(os, m_pdrgpos); + os << ", "; + (void) CWindowFrame::OsPrint(os, m_pdrgpwf); + + return os << ")"; +} + + +// EOF diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalSequenceProject.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalSequenceProject.cpp index 4b663137cf4..3c5aade6eb9 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalSequenceProject.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalSequenceProject.cpp @@ -563,13 +563,12 @@ CPhysicalSequenceProject::OsPrint(IOstream &os) const { os << SzId() << " ("; CLogicalSequenceProject::OsPrintWindowType(os, m_sptype); - os << ") ("; - (void) m_pds->OsPrint(os); + os << ", non-hashed) ("; + (void) m_pds->OsPrintNoWrap(os); os << ", "; (void) COrderSpec::OsPrint(os, m_pdrgpos); os << ", "; (void) CWindowFrame::OsPrint(os, m_pdrgpwf); - return os << ")"; } diff --git a/src/backend/gporca/libgpopt/src/operators/Makefile b/src/backend/gporca/libgpopt/src/operators/Makefile index 5030aec79a0..faa0f9a70d6 100644 --- a/src/backend/gporca/libgpopt/src/operators/Makefile +++ b/src/backend/gporca/libgpopt/src/operators/Makefile @@ -130,6 +130,7 @@ OBJS = CExpression.o \ CPhysicalScan.o \ CPhysicalSequence.o \ CPhysicalSequenceProject.o \ + CPhysicalHashSequenceProject.o \ CPhysicalSerialUnionAll.o \ CPhysicalSort.o \ CPhysicalSplit.o \ diff --git a/src/backend/gporca/libgpopt/src/translate/CTranslatorExprToDXL.cpp b/src/backend/gporca/libgpopt/src/translate/CTranslatorExprToDXL.cpp index fa1e7a1d17c..6119e2ba71f 100644 --- a/src/backend/gporca/libgpopt/src/translate/CTranslatorExprToDXL.cpp +++ b/src/backend/gporca/libgpopt/src/translate/CTranslatorExprToDXL.cpp @@ -58,6 +58,7 @@ #include "gpopt/operators/CPhysicalPartitionSelector.h" #include "gpopt/operators/CPhysicalScalarAgg.h" #include "gpopt/operators/CPhysicalSequenceProject.h" +#include "gpopt/operators/CPhysicalHashSequenceProject.h" #include "gpopt/operators/CPhysicalSort.h" #include "gpopt/operators/CPhysicalSplit.h" #include "gpopt/operators/CPhysicalSpool.h" @@ -313,8 +314,6 @@ CTranslatorExprToDXL::PdxlnTranslate(CExpression *pexpr, pdxlnPrL->ReplaceChild(ul, pdxlnPrElNew); } - - if (0 == ulNonGatherMotions) { CTranslatorExprToDXLUtils::SetDirectDispatchInfo( @@ -409,10 +408,11 @@ CTranslatorExprToDXL::CreateDXLNode(CExpression *pexpr, pexpr, colref_array, pdrgpdsBaseTables, pulNonGatherMotions, pfDML); break; + case COperator::EopPhysicalHashSequenceProject: case COperator::EopPhysicalSequenceProject: dxlnode = CTranslatorExprToDXL::PdxlnWindow( pexpr, colref_array, pdrgpdsBaseTables, pulNonGatherMotions, - pfDML); + pfDML, pexpr->Pop()->Eopid() == COperator::EopPhysicalHashSequenceProject); break; case COperator::EopPhysicalInnerNLJoin: case COperator::EopPhysicalInnerIndexNLJoin: @@ -6854,11 +6854,13 @@ CDXLNode * CTranslatorExprToDXL::PdxlnWindow(CExpression *pexprSeqPrj, CColRefArray *colref_array, CDistributionSpecArray *pdrgpdsBaseTables, - ULONG *pulNonGatherMotions, BOOL *pfDML) + ULONG *pulNonGatherMotions, BOOL *pfDML, + BOOL fWindowHashAgg) { GPOS_ASSERT(nullptr != pexprSeqPrj); - CPhysicalSequenceProject *popSeqPrj = + CPhysicalSequenceProject *popSeqPrj = fWindowHashAgg ? + CPhysicalHashSequenceProject::PopConvert(pexprSeqPrj->Pop()) : CPhysicalSequenceProject::PopConvert(pexprSeqPrj->Pop()); CDistributionSpec *pds = popSeqPrj->Pds(); ULongPtrArray *colids = GPOS_NEW(m_mp) ULongPtrArray(m_mp); @@ -6940,7 +6942,8 @@ CTranslatorExprToDXL::PdxlnWindow(CExpression *pexprSeqPrj, // construct a Window node CDXLPhysicalWindow *pdxlopWindow = - GPOS_NEW(m_mp) CDXLPhysicalWindow(m_mp, colids, pdrgpdxlwk); + GPOS_NEW(m_mp) CDXLPhysicalWindow(m_mp, colids, pdrgpdxlwk, + fWindowHashAgg); CDXLNode *pdxlnWindow = GPOS_NEW(m_mp) CDXLNode(m_mp, pdxlopWindow); pdxlnWindow->SetProperties(dxl_properties); @@ -6958,7 +6961,6 @@ CTranslatorExprToDXL::PdxlnWindow(CExpression *pexprSeqPrj, return pdxlnWindow; } - //--------------------------------------------------------------------------- // @function: // CTranslatorExprToDXL::PdxlnArray diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp index 27267cc39c8..f54aa957ebc 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp @@ -248,6 +248,7 @@ CXformFactory::Instantiate() Add(GPOS_NEW(m_mp) CXformSplitDQA(m_mp)); Add(GPOS_NEW(m_mp) CXformSequenceProject2Apply(m_mp)); Add(GPOS_NEW(m_mp) CXformImplementSequenceProject(m_mp)); + Add(GPOS_NEW(m_mp) CXformImplementHashSequenceProject(m_mp)); Add(GPOS_NEW(m_mp) CXformImplementAssert(m_mp)); Add(GPOS_NEW(m_mp) CXformCTEAnchor2Sequence(m_mp)); Add(GPOS_NEW(m_mp) CXformCTEAnchor2TrivialSelect(m_mp)); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformImplementHashSequenceProject.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformImplementHashSequenceProject.cpp new file mode 100644 index 00000000000..e01f95377fb --- /dev/null +++ b/src/backend/gporca/libgpopt/src/xforms/CXformImplementHashSequenceProject.cpp @@ -0,0 +1,112 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * CXformImplementHashSequenceProject.cpp + * + * IDENTIFICATION + * src/backend/gporca/libgpopt/src/xforms/CXformImplementHashSequenceProject.cpp + * + *------------------------------------------------------------------------- + */ + +#include "gpopt/xforms/CXformImplementHashSequenceProject.h" + +#include "gpos/base.h" + +#include "gpopt/operators/CLogicalSequenceProject.h" +#include "gpopt/operators/CPatternLeaf.h" +#include "gpopt/operators/CPhysicalHashSequenceProject.h" + + +using namespace gpopt; + + +//--------------------------------------------------------------------------- +// @function: +// CXformImplementHashSequenceProject::CXformImplementHashSequenceProject +// +// @doc: +// Ctor +// +//--------------------------------------------------------------------------- +CXformImplementHashSequenceProject::CXformImplementHashSequenceProject( + CMemoryPool *mp) + : // pattern + CXformImplementation(GPOS_NEW(mp) CExpression( + mp, GPOS_NEW(mp) CLogicalSequenceProject(mp), + GPOS_NEW(mp) CExpression( + mp, GPOS_NEW(mp) CPatternLeaf(mp)), // relational child + GPOS_NEW(mp) + CExpression(mp, GPOS_NEW(mp) CPatternLeaf(mp)) // scalar child + )) +{ +} + + +//--------------------------------------------------------------------------- +// @function: +// CXformImplementHashSequenceProject::Transform +// +// @doc: +// Actual transformation +// +//--------------------------------------------------------------------------- +void +CXformImplementHashSequenceProject::Transform(CXformContext *pxfctxt, + CXformResult *pxfres, + CExpression *pexpr) const +{ + GPOS_ASSERT(nullptr != pxfctxt); + GPOS_ASSERT(FPromising(pxfctxt->Pmp(), this, pexpr)); + GPOS_ASSERT(FCheckPattern(pexpr)); + + CMemoryPool *mp = pxfctxt->Pmp(); + + // extract components + CExpression *pexprRelational = (*pexpr)[0]; + CExpression *pexprScalar = (*pexpr)[1]; + + // addref all children + pexprRelational->AddRef(); + pexprScalar->AddRef(); + + // extract members of logical sequence project operator + CLogicalSequenceProject *popLogicalSequenceProject = + CLogicalSequenceProject::PopConvert(pexpr->Pop()); + COperator::ESPType sptype = popLogicalSequenceProject->Pspt(); + CDistributionSpec *pds = popLogicalSequenceProject->Pds(); + COrderSpecArray *pdrgpos = popLogicalSequenceProject->Pdrgpos(); + CWindowFrameArray *pdrgpwf = popLogicalSequenceProject->Pdrgpwf(); + pds->AddRef(); + pdrgpos->AddRef(); + pdrgpwf->AddRef(); + + // assemble physical operator + CExpression *pexprSequenceProject = GPOS_NEW(mp) CExpression( + mp, + GPOS_NEW(mp) + CPhysicalHashSequenceProject(mp, sptype, pds, pdrgpos, pdrgpwf), + pexprRelational, pexprScalar); + + // add alternative to results + pxfres->Add(pexprSequenceProject); +} + + +// EOF diff --git a/src/backend/gporca/libgpopt/src/xforms/Makefile b/src/backend/gporca/libgpopt/src/xforms/Makefile index 4283daedb4c..a51ddd6f564 100644 --- a/src/backend/gporca/libgpopt/src/xforms/Makefile +++ b/src/backend/gporca/libgpopt/src/xforms/Makefile @@ -58,6 +58,7 @@ OBJS = CDecorrelator.o \ CXformImplementLimit.o \ CXformImplementSequence.o \ CXformImplementSequenceProject.o \ + CXformImplementHashSequenceProject.o \ CXformImplementSplit.o \ CXformImplementTVF.o \ CXformImplementTVFNoArgs.o \ diff --git a/src/backend/gporca/libnaucrates/include/naucrates/dxl/operators/CDXLPhysicalWindow.h b/src/backend/gporca/libnaucrates/include/naucrates/dxl/operators/CDXLPhysicalWindow.h index 4df4c3bc27a..a1d304af502 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/dxl/operators/CDXLPhysicalWindow.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/dxl/operators/CDXLPhysicalWindow.h @@ -46,12 +46,14 @@ class CDXLPhysicalWindow : public CDXLPhysical // window keys CDXLWindowKeyArray *m_dxl_window_key_array; + BOOL m_window_hash_agg; + public: CDXLPhysicalWindow(CDXLPhysicalWindow &) = delete; //ctor CDXLPhysicalWindow(CMemoryPool *mp, ULongPtrArray *part_by_colid_array, - CDXLWindowKeyArray *window_key_array); + CDXLWindowKeyArray *window_key_array, BOOL fWindowHashAgg); //dtor ~CDXLPhysicalWindow() override; @@ -76,6 +78,9 @@ class CDXLPhysicalWindow : public CDXLPhysical // return the window key at a given position CDXLWindowKey *GetDXLWindowKeyAt(ULONG ulPos) const; + // is windowagg implements by window hash agg + BOOL IsWindowHashAgg() const; + // serialize operator in DXL format void SerializeToDXL(CXMLSerializer *xml_serializer, const CDXLNode *dxlnode) const override; diff --git a/src/backend/gporca/libnaucrates/include/naucrates/dxl/xml/dxltokens.h b/src/backend/gporca/libnaucrates/include/naucrates/dxl/xml/dxltokens.h index f4daec1305f..a03f4bb92dd 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/dxl/xml/dxltokens.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/dxl/xml/dxltokens.h @@ -237,6 +237,7 @@ enum Edxltoken EdxltokenScalarWindowFrameTrailingEdge, EdxltokenWindowKeyList, EdxltokenWindowKey, + EdxltokenWindowHashAgg, EdxltokenWindowSpecList, EdxltokenWindowSpec, diff --git a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h index 2e0995fcd66..f433b28d062 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h @@ -238,6 +238,9 @@ enum EOptTraceFlag // Disable dynamic seq/bitmap/index scan EopttraceDisableDynamicTableScan = 103049, + // Enable window hash agg + EopttraceEnableWindowHashAgg = 103050, + /////////////////////////////////////////////////////// ///////////////////// statistics flags //////////////// ////////////////////////////////////////////////////// diff --git a/src/backend/gporca/libnaucrates/src/operators/CDXLPhysicalWindow.cpp b/src/backend/gporca/libnaucrates/src/operators/CDXLPhysicalWindow.cpp index 9c5e7ca4e9b..19112cf23ca 100644 --- a/src/backend/gporca/libnaucrates/src/operators/CDXLPhysicalWindow.cpp +++ b/src/backend/gporca/libnaucrates/src/operators/CDXLPhysicalWindow.cpp @@ -28,10 +28,12 @@ using namespace gpdxl; //--------------------------------------------------------------------------- CDXLPhysicalWindow::CDXLPhysicalWindow(CMemoryPool *mp, ULongPtrArray *part_by_colid_array, - CDXLWindowKeyArray *window_key_array) + CDXLWindowKeyArray *window_key_array, + BOOL fWindowHashAgg) : CDXLPhysical(mp), m_part_by_colid_array(part_by_colid_array), - m_dxl_window_key_array(window_key_array) + m_dxl_window_key_array(window_key_array), + m_window_hash_agg(fWindowHashAgg) { GPOS_ASSERT(nullptr != m_part_by_colid_array); GPOS_ASSERT(nullptr != m_dxl_window_key_array); @@ -122,6 +124,18 @@ CDXLPhysicalWindow::GetDXLWindowKeyAt(ULONG position) const return (*m_dxl_window_key_array)[position]; } +//--------------------------------------------------------------------------- +// @function: +// CDXLPhysicalWindow::IsWindowHashAgg +// +// @doc: +// Is windowagg implements by window hash agg +// +//--------------------------------------------------------------------------- +BOOL CDXLPhysicalWindow::IsWindowHashAgg() const { + return m_window_hash_agg; +} + //--------------------------------------------------------------------------- // @function: // CDXLPhysicalWindow::SerializeToDXL @@ -168,6 +182,8 @@ CDXLPhysicalWindow::SerializeToDXL(CXMLSerializer *xml_serializer, CDXLTokens::GetDXLTokenStr(EdxltokenNamespacePrefix), window_keys_list_str); + xml_serializer->AddAttribute( + CDXLTokens::GetDXLTokenStr(EdxltokenWindowHashAgg), m_window_hash_agg); xml_serializer->CloseElement( CDXLTokens::GetDXLTokenStr(EdxltokenNamespacePrefix), element_name); } diff --git a/src/backend/gporca/libnaucrates/src/parser/CParseHandlerPhysicalWindow.cpp b/src/backend/gporca/libnaucrates/src/parser/CParseHandlerPhysicalWindow.cpp index 50704f05d39..28801cbf271 100644 --- a/src/backend/gporca/libnaucrates/src/parser/CParseHandlerPhysicalWindow.cpp +++ b/src/backend/gporca/libnaucrates/src/parser/CParseHandlerPhysicalWindow.cpp @@ -155,7 +155,7 @@ CParseHandlerPhysicalWindow::EndElement(const XMLCh *const, // element_uri, CDXLWindowKeyArray *window_key_array_dxlnode = window_key_list_parse_handler->GetDxlWindowKeyArray(); CDXLPhysicalWindow *window_op_dxlnode = GPOS_NEW(m_mp) CDXLPhysicalWindow( - m_mp, m_part_by_colid_array, window_key_array_dxlnode); + m_mp, m_part_by_colid_array, window_key_array_dxlnode, false); m_dxl_node = GPOS_NEW(m_mp) CDXLNode(m_mp, window_op_dxlnode); // set statistics and physical properties diff --git a/src/backend/gporca/libnaucrates/src/xml/dxltokens.cpp b/src/backend/gporca/libnaucrates/src/xml/dxltokens.cpp index 4ddfaf6fbed..2d56b2fce23 100644 --- a/src/backend/gporca/libnaucrates/src/xml/dxltokens.cpp +++ b/src/backend/gporca/libnaucrates/src/xml/dxltokens.cpp @@ -343,6 +343,7 @@ CDXLTokens::Init(CMemoryPool *mp) {EdxltokenWindowFrame, GPOS_WSZ_LIT("WindowFrame")}, {EdxltokenWindowKeyList, GPOS_WSZ_LIT("WindowKeyList")}, {EdxltokenWindowKey, GPOS_WSZ_LIT("WindowKey")}, + {EdxltokenWindowHashAgg, GPOS_WSZ_LIT("IsWindowHashAgg")}, {EdxltokenWindowSpecList, GPOS_WSZ_LIT("WindowSpecList")}, {EdxltokenWindowSpec, GPOS_WSZ_LIT("WindowSpec")}, diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 18ffeb3f784..e9c44880cb4 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -1473,6 +1473,43 @@ _copyWindowAgg(const WindowAgg *from) return newnode; } +/* + * _copyWindowHashAgg + */ +static WindowHashAgg * +_copyWindowHashAgg(const WindowHashAgg *from) +{ + WindowHashAgg *newnode = makeNode(WindowHashAgg); + + CopyPlanFields((const Plan *) from, (Plan *) newnode); + + COPY_SCALAR_FIELD(winref); + COPY_SCALAR_FIELD(partNumCols); + COPY_POINTER_FIELD(partColIdx, from->partNumCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(partOperators, from->partNumCols * sizeof(Oid)); + COPY_POINTER_FIELD(partCollations, from->partNumCols * sizeof(Oid)); + COPY_SCALAR_FIELD(ordNumCols); + + if (from->ordNumCols > 0) + { + COPY_POINTER_FIELD(ordColIdx, from->ordNumCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(ordOperators, from->ordNumCols * sizeof(Oid)); + COPY_POINTER_FIELD(ordCollations, from->ordNumCols * sizeof(Oid)); + COPY_POINTER_FIELD(ordNullsFirst, from->ordNumCols * sizeof(bool)); + } + + COPY_SCALAR_FIELD(frameOptions); + COPY_NODE_FIELD(startOffset); + COPY_NODE_FIELD(endOffset); + COPY_SCALAR_FIELD(startInRangeFunc); + COPY_SCALAR_FIELD(endInRangeFunc); + COPY_SCALAR_FIELD(inRangeColl); + COPY_SCALAR_FIELD(inRangeAsc); + COPY_SCALAR_FIELD(inRangeNullsFirst); + + return newnode; +} + /* * _copyUnique */ @@ -6562,6 +6599,9 @@ copyObjectImpl(const void *from) case T_WindowAgg: retval = _copyWindowAgg(from); break; + case T_WindowHashAgg: + retval = _copyWindowHashAgg(from); + break; case T_TableFunctionScan: retval = _copyTableFunctionScan(from); break; diff --git a/src/backend/nodes/outfast.c b/src/backend/nodes/outfast.c index 054fc06238a..cfc6a322c0d 100644 --- a/src/backend/nodes/outfast.c +++ b/src/backend/nodes/outfast.c @@ -1030,6 +1030,9 @@ _outNode(StringInfo str, void *obj) case T_WindowAgg: _outWindowAgg(str, obj); break; + case T_WindowHashAgg: + _outWindowHashAgg(str, obj); + break; case T_Group: _outGroup(str, obj); break; diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 38f34f40b62..6b21ff93654 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -1013,6 +1013,33 @@ _outWindowAgg(StringInfo str, const WindowAgg *node) WRITE_BOOL_FIELD(inRangeNullsFirst); } +static void +_outWindowHashAgg(StringInfo str, const WindowHashAgg *node) +{ + WRITE_NODE_TYPE("WINDOWHASHAGG"); + + _outPlanInfo(str, (const Plan *) node); + + WRITE_UINT_FIELD(winref); + WRITE_INT_FIELD(partNumCols); + WRITE_ATTRNUMBER_ARRAY(partColIdx, node->partNumCols); + WRITE_OID_ARRAY(partOperators, node->partNumCols); + WRITE_OID_ARRAY(partCollations, node->partNumCols); + WRITE_INT_FIELD(ordNumCols); + WRITE_ATTRNUMBER_ARRAY(ordColIdx, node->ordNumCols); + WRITE_OID_ARRAY(ordOperators, node->ordNumCols); + WRITE_OID_ARRAY(ordCollations, node->ordNumCols); + WRITE_BOOL_ARRAY(ordNullsFirst, node->ordNumCols); + WRITE_INT_FIELD(frameOptions); + WRITE_NODE_FIELD(startOffset); + WRITE_NODE_FIELD(endOffset); + WRITE_OID_FIELD(startInRangeFunc); + WRITE_OID_FIELD(endInRangeFunc); + WRITE_OID_FIELD(inRangeColl); + WRITE_BOOL_FIELD(inRangeAsc); + WRITE_BOOL_FIELD(inRangeNullsFirst); +} + static void _outGroup(StringInfo str, const Group *node) { @@ -4347,6 +4374,9 @@ outNode(StringInfo str, const void *obj) case T_WindowAgg: _outWindowAgg(str, obj); break; + case T_WindowHashAgg: + _outWindowHashAgg(str, obj); + break; case T_Group: _outGroup(str, obj); break; diff --git a/src/backend/nodes/print.c b/src/backend/nodes/print.c index c5223413071..3d0bd4b1533 100644 --- a/src/backend/nodes/print.c +++ b/src/backend/nodes/print.c @@ -564,6 +564,8 @@ plannode_type(Plan *p) return "TupleSplit"; case T_WindowAgg: return "WINDOWAGG"; + case T_WindowHashAgg: + return "WINDOWHASHAGG"; case T_TableFunctionScan: return "TABLEFUNCTIONSCAN"; case T_Unique: diff --git a/src/backend/nodes/readfast.c b/src/backend/nodes/readfast.c index 887f9eae433..0cf853e5847 100644 --- a/src/backend/nodes/readfast.c +++ b/src/backend/nodes/readfast.c @@ -2076,6 +2076,9 @@ readNodeBinary(void) case T_WindowAgg: return_value = _readWindowAgg(); break; + case T_WindowHashAgg: + return_value = _readWindowHashAgg(); + break; case T_TableFunctionScan: return_value = _readTableFunctionScan(); break; diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 636e79d1cf4..cfe4c8d1d01 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -2534,6 +2534,35 @@ _readWindowAgg(void) READ_DONE(); } +static WindowHashAgg * +_readWindowHashAgg(void) +{ + READ_LOCALS(WindowHashAgg); + + ReadCommonPlan(&local_node->plan); + + READ_UINT_FIELD(winref); + READ_INT_FIELD(partNumCols); + READ_ATTRNUMBER_ARRAY(partColIdx, local_node->partNumCols); + READ_OID_ARRAY(partOperators, local_node->partNumCols); + READ_OID_ARRAY(partCollations, local_node->partNumCols); + READ_INT_FIELD(ordNumCols); + READ_ATTRNUMBER_ARRAY(ordColIdx, local_node->ordNumCols); + READ_OID_ARRAY(ordOperators, local_node->ordNumCols); + READ_OID_ARRAY(ordCollations, local_node->ordNumCols); + READ_BOOL_ARRAY(ordNullsFirst, local_node->ordNumCols); + READ_INT_FIELD(frameOptions); + READ_NODE_FIELD(startOffset); + READ_NODE_FIELD(endOffset); + READ_OID_FIELD(startInRangeFunc); + READ_OID_FIELD(endInRangeFunc); + READ_OID_FIELD(inRangeColl); + READ_BOOL_FIELD(inRangeAsc); + READ_BOOL_FIELD(inRangeNullsFirst); + + READ_DONE(); +} + /* * _readUnique */ @@ -3165,6 +3194,8 @@ parseNodeString(void) return_value = _readDQAExpr(); else if (MATCH("WINDOWAGG", 9)) return_value = _readWindowAgg(); + else if (MATCH("WINDOWHASHAGG", 13)) + return_value = _readWindowHashAgg(); else if (MATCH("UNIQUE", 6)) return_value = _readUnique(); else if (MATCH("GATHER", 6)) diff --git a/src/backend/optimizer/plan/orca.c b/src/backend/optimizer/plan/orca.c index 0d706129d58..dc6a88e73c6 100644 --- a/src/backend/optimizer/plan/orca.c +++ b/src/backend/optimizer/plan/orca.c @@ -41,7 +41,7 @@ #include "utils/lsyscache.h" /* GPORCA entry point */ -extern PlannedStmt * GPOPTOptimizedPlan(Query *parse, bool *had_unexpected_failure); +extern PlannedStmt * GPOPTOptimizedPlan(Query *parse, bool *had_unexpected_failure, OptimizerOptions *opts); static Plan *remove_redundant_results(PlannerInfo *root, Plan *plan); static Node *remove_redundant_results_mutator(Node *node, void *); @@ -89,7 +89,7 @@ log_optimizer(PlannedStmt *plan, bool fUnexpectedFailure) * This is the main entrypoint for invoking Orca. */ PlannedStmt * -optimize_query(Query *parse, int cursorOptions, ParamListInfo boundParams) +optimize_query(Query *parse, int cursorOptions, ParamListInfo boundParams, OptimizerOptions *options) { /* flag to check if optimizer unexpectedly failed to produce a plan */ bool fUnexpectedFailure = false; @@ -153,7 +153,7 @@ optimize_query(Query *parse, int cursorOptions, ParamListInfo boundParams) pqueryCopy = (Query *) transformGroupedWindows((Node *) pqueryCopy, NULL); /* Ok, invoke ORCA. */ - result = GPOPTOptimizedPlan(pqueryCopy, &fUnexpectedFailure); + result = GPOPTOptimizedPlan(pqueryCopy, &fUnexpectedFailure, options); log_optimizer(result, fUnexpectedFailure); diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 22ec8b43266..e4b25e97b33 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -328,13 +328,16 @@ planner(Query *parse, const char *query_string, int cursorOptions, { PlannedStmt *result; instr_time starttime, endtime; + OptimizerOptions *optimizer_options; + optimizer_options = palloc(sizeof(OptimizerOptions)); + optimizer_options->create_vectorization_plan = false; if (planner_hook) { if (gp_log_optimization_time) INSTR_TIME_SET_CURRENT(starttime); - result = (*planner_hook) (parse, query_string, cursorOptions, boundParams); + result = (*planner_hook) (parse, query_string, cursorOptions, boundParams, optimizer_options); if (gp_log_optimization_time) { @@ -344,14 +347,14 @@ planner(Query *parse, const char *query_string, int cursorOptions, } } else - result = standard_planner(parse, query_string, cursorOptions, boundParams); - + result = standard_planner(parse, query_string, cursorOptions, boundParams, optimizer_options); + pfree(optimizer_options); return result; } PlannedStmt * standard_planner(Query *parse, const char *query_string, int cursorOptions, - ParamListInfo boundParams) + ParamListInfo boundParams, OptimizerOptions *optimizer_options) { PlannedStmt *result; PlannerGlobal *glob; @@ -404,7 +407,7 @@ standard_planner(Query *parse, const char *query_string, int cursorOptions, INSTR_TIME_SET_CURRENT(starttime); #ifdef USE_ORCA - result = optimize_query(parse, cursorOptions, boundParams); + result = optimize_query(parse, cursorOptions, boundParams, optimizer_options); #else /* Make sure this branch is not taken in builds using --disable-orca. */ Assert(false); diff --git a/src/backend/optimizer/util/walkers.c b/src/backend/optimizer/util/walkers.c index 93834cb32f7..3b3d0311d06 100644 --- a/src/backend/optimizer/util/walkers.c +++ b/src/backend/optimizer/util/walkers.c @@ -403,6 +403,14 @@ plan_tree_walker(Node *node, if (walker(((WindowAgg *) node)->endOffset, context)) return true; break; + case T_WindowHashAgg: + if (walk_plan_node_fields((Plan *) node, walker, context)) + return true; + if (walker(((WindowHashAgg *) node)->startOffset, context)) + return true; + if (walker(((WindowHashAgg *) node)->endOffset, context)) + return true; + break; case T_Unique: if (walk_plan_node_fields((Plan *) node, walker, context)) diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index df83e03b766..02de621cb54 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -365,6 +365,7 @@ bool optimizer_enable_replicated_table; bool optimizer_enable_foreign_table; bool optimizer_enable_right_outer_join; bool optimizer_enable_query_parameter; +bool optimizer_force_window_hash_agg; /* Optimizer plan enumeration related GUCs */ bool optimizer_enumerate_plans; @@ -3288,6 +3289,17 @@ struct config_bool ConfigureNamesBool_gp[] = true, NULL, NULL, NULL }, + { + {"optimizer_force_window_hash_agg", PGC_USERSET, DEVELOPER_OPTIONS, + gettext_noop("Enable create window hash agg."), + NULL, + GUC_NOT_IN_SAMPLE + }, + &optimizer_force_window_hash_agg, // TODO: remove it before merge + false, + NULL, NULL, NULL + }, + { {"aqumv_allow_foreign_table", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("allow answer query using materialized views which have foreign or external tables."), diff --git a/src/backend/utils/resource_manager/memquota.c b/src/backend/utils/resource_manager/memquota.c index f1e272e9f24..1cf5f805df9 100644 --- a/src/backend/utils/resource_manager/memquota.c +++ b/src/backend/utils/resource_manager/memquota.c @@ -247,6 +247,7 @@ IsMemoryIntensiveOperator(Node *node, PlannedStmt *stmt) case T_Hash: case T_BitmapIndexScan: case T_WindowAgg: + case T_WindowHashAgg: case T_TableFunctionScan: case T_FunctionScan: return true; diff --git a/src/include/gpopt/CGPOptimizer.h b/src/include/gpopt/CGPOptimizer.h index 243e42c6da1..4a191a8009a 100644 --- a/src/include/gpopt/CGPOptimizer.h +++ b/src/include/gpopt/CGPOptimizer.h @@ -18,6 +18,7 @@ extern "C" { #include "postgres.h" +#include "optimizer/orcaopt.h" #include "nodes/params.h" #include "nodes/parsenodes.h" #include "nodes/plannodes.h" @@ -30,7 +31,8 @@ class CGPOptimizer static PlannedStmt *GPOPTOptimizedPlan( Query *query, bool * - had_unexpected_failure // output : set to true if optimizer unexpectedly failed to produce plan + had_unexpected_failure, // output : set to true if optimizer unexpectedly failed to produce plan + OptimizerOptions *opts ); // serialize planned statement into DXL @@ -45,7 +47,8 @@ class CGPOptimizer extern "C" { extern PlannedStmt *GPOPTOptimizedPlan(Query *query, - bool *had_unexpected_failure); + bool *had_unexpected_failure, + OptimizerOptions *opts); extern char *SerializeDXLPlan(Query *query); extern void InitGPOPT(); extern void TerminateGPOPT(); diff --git a/src/include/gpopt/config/CConfigParamMapping.h b/src/include/gpopt/config/CConfigParamMapping.h index ec314640b9d..32d81825384 100644 --- a/src/include/gpopt/config/CConfigParamMapping.h +++ b/src/include/gpopt/config/CConfigParamMapping.h @@ -68,7 +68,7 @@ class CConfigParamMapping CConfigParamMapping(const CConfigParamMapping &) = delete; // pack enabled optimizer config params in a traceflag bitset - static CBitSet *PackConfigParamInBitset(CMemoryPool *mp, ULONG xform_id); + static CBitSet *PackConfigParamInBitset(CMemoryPool *mp, ULONG xform_id, BOOL create_vec_plan); }; } // namespace gpdxl diff --git a/src/include/gpopt/translate/CTranslatorDXLToPlStmt.h b/src/include/gpopt/translate/CTranslatorDXLToPlStmt.h index b2cb6104fb2..625ed5cd0a3 100644 --- a/src/include/gpopt/translate/CTranslatorDXLToPlStmt.h +++ b/src/include/gpopt/translate/CTranslatorDXLToPlStmt.h @@ -291,12 +291,19 @@ class CTranslatorDXLToPlStmt ); // translate DXL window node into GPDB window node - Plan *TranslateDXLWindow( + Plan *TranslateDXLWindowAgg( const CDXLNode *motion_dxlnode, CDXLTranslateContext *output_context, CDXLTranslationContextArray * ctxt_translation_prev_siblings // translation contexts of previous siblings ); + // translate DXL window node into window hash agg node + Plan *TranslateDXLWindowHashAgg( + const CDXLNode *window_dxlnode, CDXLTranslateContext *output_context, + CDXLTranslationContextArray + *ctxt_translation_prev_siblings // translation contexts of previous siblings + ); + // translate DXL sort node into GPDB Sort plan node Plan *TranslateDXLSort( const CDXLNode *sort_dxlnode, CDXLTranslateContext *output_context, diff --git a/src/include/gpopt/utils/COptTasks.h b/src/include/gpopt/utils/COptTasks.h index 2de78c7667a..3fa5f91216c 100644 --- a/src/include/gpopt/utils/COptTasks.h +++ b/src/include/gpopt/utils/COptTasks.h @@ -15,6 +15,10 @@ #ifndef COptTasks_H #define COptTasks_H +extern "C" { +#include "optimizer/orcaopt.h" +} + #include "gpos/error/CException.h" #include "gpopt/base/CColRef.h" @@ -108,6 +112,9 @@ struct SOptContext // casting function static SOptContext *Cast(void *ptr); + // other options pass by OptimizerOptions + BOOL m_create_vec_plan; + }; // struct SOptContext class COptTasks @@ -160,7 +167,8 @@ class COptTasks // optimize Query->DXL->LExpr->Optimize->PExpr->DXL->PlannedStmt static PlannedStmt *GPOPTOptimizedPlan(Query *query, - SOptContext *gpopt_context); + SOptContext *gpopt_context, + OptimizerOptions *opts); // enable/disable a given xforms static bool SetXform(char *xform_str, bool should_disable); diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index 2ec47618998..30c0c09c6e4 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -103,6 +103,7 @@ typedef enum NodeTag T_Agg, T_TupleSplit, T_WindowAgg, + T_WindowHashAgg, T_Unique, T_Gather, T_GatherMerge, diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index d2b2d921fba..e4695fd56f2 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -1442,6 +1442,47 @@ typedef struct WindowAgg bool inRangeNullsFirst; /* nulls sort first for in_range tests? */ } WindowAgg; + +/* ---------------- + * window hash aggregate node + * + * A WindowHashAgg node implements window functions over zero or more + * ordering/framing specifications within a partition specification on + * appropriately UNORDERED input. + * + * CBDB does not create plans with `WindowHashAgg` for the row executor, + * but does for the vectorization executor. + * ---------------- + */ +typedef struct WindowHashAgg +{ + Plan plan; + Index winref; /* ID referenced by window functions */ + int partNumCols; /* number of columns in partition clause */ + AttrNumber *partColIdx; /* their indexes in the target list */ + Oid *partOperators; /* equality operators for partition columns */ + Oid *partCollations; /* collations for partition columns */ + /* + * Different with `WindowAgg`, WindowHashAgg may use the + * `order by` information. + */ + int ordNumCols; /* number of sort-key columns */ + AttrNumber *ordColIdx; /* their indexes in the target list */ + Oid *ordOperators; /* OIDs of operators to sort them by */ + Oid *ordCollations; /* OIDs of collations */ + bool *ordNullsFirst; /* NULLS FIRST/LAST directions */ + + int frameOptions; /* frame_clause options, see WindowDef */ + Node *startOffset; /* expression for starting bound, if any */ + Node *endOffset; /* expression for ending bound, if any */ + /* these fields are used with RANGE offset PRECEDING/FOLLOWING: */ + Oid startInRangeFunc; /* in_range function for startOffset */ + Oid endInRangeFunc; /* in_range function for endOffset */ + Oid inRangeColl; /* collation for in_range tests */ + bool inRangeAsc; /* use ASC sort order for in_range tests? */ + bool inRangeNullsFirst; /* nulls sort first for in_range tests? */ +} WindowHashAgg; + /* ---------------- * unique node * ---------------- diff --git a/src/include/optimizer/orca.h b/src/include/optimizer/orca.h index d26903fc085..a32af3f56fd 100644 --- a/src/include/optimizer/orca.h +++ b/src/include/optimizer/orca.h @@ -18,10 +18,11 @@ #define ORCA_H #include "pg_config.h" +#include "optimizer/orcaopt.h" #ifdef USE_ORCA -extern PlannedStmt * optimize_query(Query *parse, int cursorOptions, ParamListInfo boundParams); +extern PlannedStmt * optimize_query(Query *parse, int cursorOptions, ParamListInfo boundParams, OptimizerOptions *options); extern Node *transformGroupedWindows(Node *node, void *context); // plan_hint_hook generates HintState by parsing a Query. diff --git a/src/include/optimizer/orcaopt.h b/src/include/optimizer/orcaopt.h new file mode 100644 index 00000000000..2bb5395875c --- /dev/null +++ b/src/include/optimizer/orcaopt.h @@ -0,0 +1,41 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * orcaopt.h + * + * IDENTIFICATION + * src/include/optimizer/orcaopt.h + * + *------------------------------------------------------------------------- + */ +#ifndef ORCA_OPT_H +#define ORCA_OPT_H + +#include "pg_config.h" + +#ifdef USE_ORCA + +typedef struct OptimizerOptions +{ + bool create_vectorization_plan; +} OptimizerOptions; + +#endif + +#endif /* ORCA_H */ diff --git a/src/include/optimizer/planner.h b/src/include/optimizer/planner.h index 29aac021f38..610034b2c62 100644 --- a/src/include/optimizer/planner.h +++ b/src/include/optimizer/planner.h @@ -21,13 +21,14 @@ #include "nodes/pathnodes.h" #include "nodes/plannerconfig.h" #include "nodes/plannodes.h" - +#include "optimizer/orcaopt.h" /* Hook for plugins to get control in planner() */ typedef PlannedStmt *(*planner_hook_type) (Query *parse, const char *query_string, int cursorOptions, - ParamListInfo boundParams); + ParamListInfo boundParams, + OptimizerOptions *optimizer_options); extern PGDLLIMPORT planner_hook_type planner_hook; /* Hook for plugins to get control when grouping_planner() plans upper rels */ @@ -41,7 +42,8 @@ extern PGDLLIMPORT create_upper_paths_hook_type create_upper_paths_hook; extern PlannedStmt *standard_planner(Query *parse, const char *query_string, int cursorOptions, - ParamListInfo boundParams); + ParamListInfo boundParams, + OptimizerOptions *optimizer_options); extern PlannerInfo *subquery_planner(PlannerGlobal *glob, Query *parse, PlannerInfo *parent_root, diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index de0f931c797..40838ba969d 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -546,6 +546,7 @@ extern bool optimizer_enable_replicated_table; extern bool optimizer_enable_foreign_table; extern bool optimizer_enable_right_outer_join; extern bool optimizer_enable_query_parameter; +extern bool optimizer_force_window_hash_agg; /* Optimizer plan enumeration related GUCs */ extern bool optimizer_enumerate_plans; diff --git a/src/include/utils/unsync_guc_name.h b/src/include/utils/unsync_guc_name.h index a2a325bd9ed..b3a19ca7b9f 100644 --- a/src/include/utils/unsync_guc_name.h +++ b/src/include/utils/unsync_guc_name.h @@ -440,6 +440,7 @@ "optimizer_enable_foreign_table", "optimizer_enable_right_outer_join", "optimizer_enable_query_parameter", + "optimizer_force_window_hash_agg", "optimizer_enforce_subplans", "optimizer_enumerate_plans", "optimizer_expand_fulljoin", diff --git a/src/test/modules/delay_execution/delay_execution.c b/src/test/modules/delay_execution/delay_execution.c index b3d0841ba80..03925c74880 100644 --- a/src/test/modules/delay_execution/delay_execution.c +++ b/src/test/modules/delay_execution/delay_execution.c @@ -44,17 +44,17 @@ void _PG_fini(void); /* planner_hook function to provide the desired delay */ static PlannedStmt * delay_execution_planner(Query *parse, const char *query_string, - int cursorOptions, ParamListInfo boundParams) + int cursorOptions, ParamListInfo boundParams, OptimizerOptions *optimizer_options) { PlannedStmt *result; /* Invoke the planner, possibly via a previous hook user */ if (prev_planner_hook) result = prev_planner_hook(parse, query_string, cursorOptions, - boundParams); + boundParams, optimizer_options); else result = standard_planner(parse, query_string, cursorOptions, - boundParams); + boundParams, optimizer_options); /* If enabled, delay by taking and releasing the specified lock */ if (post_planning_lock_id != 0) diff --git a/src/test/regress/hooktest/hook_test.c b/src/test/regress/hooktest/hook_test.c index bf0e6d5f5f0..d06d0fe1c44 100644 --- a/src/test/regress/hooktest/hook_test.c +++ b/src/test/regress/hooktest/hook_test.c @@ -15,7 +15,7 @@ PG_MODULE_MAGIC; static planner_hook_type prev_planner_hook = NULL; -static PlannedStmt *test_planner_hook(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams); +static PlannedStmt *test_planner_hook(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams, OptimizerOptions *optimizer_options); void _PG_init(void); void _PG_fini(void); @@ -34,16 +34,16 @@ _PG_fini(void) } static PlannedStmt * -test_planner_hook(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams) +test_planner_hook(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams, OptimizerOptions *optimizer_options) { PlannedStmt *stmt; elog(LOG, "In test_planner_hook"); if (prev_planner_hook) - stmt = (*prev_planner_hook) (parse, query_string, cursorOptions, boundParams); + stmt = (*prev_planner_hook) (parse, query_string, cursorOptions, boundParams, optimizer_options); else - stmt = standard_planner(parse, query_string, cursorOptions, boundParams); + stmt = standard_planner(parse, query_string, cursorOptions, boundParams, optimizer_options); return stmt; } diff --git a/src/test/unit/mock/gpopt_mock.c b/src/test/unit/mock/gpopt_mock.c index 39bf2c49e82..ae16a4cab75 100644 --- a/src/test/unit/mock/gpopt_mock.c +++ b/src/test/unit/mock/gpopt_mock.c @@ -3,6 +3,7 @@ #include "lib/stringinfo.h" #include "nodes/parsenodes.h" #include "nodes/plannodes.h" +#include "optimizer/orcaopt.h" char * SerializeDXLPlan(Query *pquery) @@ -12,7 +13,7 @@ SerializeDXLPlan(Query *pquery) } PlannedStmt * -GPOPTOptimizedPlan(Query *pquery, bool pfUnexpectedFailure) +GPOPTOptimizedPlan(Query *pquery, bool pfUnexpectedFailure, OptimizerOptions *opts) { elog(ERROR, "mock implementation of GPOPTOptimizedPlan called"); return NULL; From d6a15dffcb3ddf02b9cceb91a2ba927fc8faa313 Mon Sep 17 00:00:00 2001 From: zhoujiaqi Date: Thu, 31 Jul 2025 13:49:06 +0800 Subject: [PATCH 110/260] ORCA: Support create plan in singlenode mode In single node mode, ORCA may produce incorrect results for some insert/update/delete operations, or sublink/subselect operations. I don't have plan to spend a lot of time to support all operators. The current commit supports singlenode-mode in ORCA and disables unsupported operators. --- .github/workflows/build-cloudberry.yml | 6 +- .../gpopt/config/CConfigParamMapping.cpp | 8 +- .../gpopt/translate/CTranslatorQueryToDXL.cpp | 47 +++++++ .../gpopt/translate/CTranslatorUtils.cpp | 1 + src/backend/gpopt/utils/COptTasks.cpp | 7 +- .../include/naucrates/traceflags/traceflags.h | 3 + src/backend/optimizer/plan/planner.c | 2 +- src/backend/utils/misc/guc_gp.c | 11 -- .../gpopt/translate/CTranslatorQueryToDXL.h | 2 + src/include/utils/guc.h | 1 - src/include/utils/unsync_guc_name.h | 1 - .../expected/lockmodes.out | 116 +++++++++--------- .../singlenode_regress/expected/explain.out | 1 + .../expected/rowsecurity.out | 38 +++--- .../singlenode_regress/expected/select.out | 13 +- 15 files changed, 154 insertions(+), 103 deletions(-) diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index 8d04d51a095..de702b5790d 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -273,7 +273,8 @@ jobs: "make_configs":["src/test/isolation:installcheck-singlenode", "src/test/singlenode_regress:installcheck-singlenode", "src/test/singlenode_isolation2:installcheck-singlenode"], - "num_primary_mirror_pairs":0 + "num_primary_mirror_pairs":0, + "pg_settings":{"optimizer":"off"} }, {"test":"ic-resgroup-v2", "make_configs":["src/test/isolation2:installcheck-resgroup-v2"], @@ -315,9 +316,6 @@ jobs: }, {"test":"ic-parallel-retrieve-cursor", "make_configs":["src/test/isolation2:installcheck-parallel-retrieve-cursor"] - }, - {"test":"ic-cbdb-parallel", - "make_configs":["src/test/regress:installcheck-cbdb-parallel"] } ] }' diff --git a/src/backend/gpopt/config/CConfigParamMapping.cpp b/src/backend/gpopt/config/CConfigParamMapping.cpp index fcf4889ff8f..ad58148b28b 100644 --- a/src/backend/gpopt/config/CConfigParamMapping.cpp +++ b/src/backend/gpopt/config/CConfigParamMapping.cpp @@ -15,7 +15,7 @@ extern "C" { #include "postgres.h" - +#include "cdb/cdbvars.h" #include "utils/guc.h" } @@ -386,6 +386,12 @@ CConfigParamMapping::PackConfigParamInBitset( } } + if (IS_SINGLENODE()) { + traceflag_bitset->ExchangeSet(EopttraceSingleNodeMode); + } else { + traceflag_bitset->ExchangeClear(EopttraceSingleNodeMode); + } + if (!optimizer_enable_nljoin) { CBitSet *nl_join_bitset = CXform::PbsNLJoinXforms(mp); diff --git a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp index 20cc6557c28..34b045b6807 100644 --- a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp +++ b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp @@ -210,6 +210,9 @@ CTranslatorQueryToDXL::CTranslatorQueryToDXL( } } + // check if query has insert/update/delete when is_master_only is true. + CheckUnsupportedDDLInSingleMode(m_mp, query); + // check if the query has any unsupported node types CheckUnsupportedNodeTypes(query); @@ -280,6 +283,50 @@ CTranslatorQueryToDXL::~CTranslatorQueryToDXL() } } +//--------------------------------------------------------------------------- +// @function: +// CTranslatorQueryToDXL::CheckUnsupportedNodeTypes +// +// @doc: +// Check for unsupported node types, and throws an exception when found +// +//--------------------------------------------------------------------------- +void +CTranslatorQueryToDXL::CheckUnsupportedDDLInSingleMode(CMemoryPool *mp, Query *query) +{ + static const SUnsupportedFeature unsupported_features[] = { + {T_SubLink, GPOS_WSZ_LIT("Sublink")}, + {T_SubqueryScan, GPOS_WSZ_LIT("Subscan")}, + }; + + List *unsupported_list = NIL; + for (ULONG ul = 0; ul < GPOS_ARRAY_SIZE(unsupported_features); ul++) + { + unsupported_list = gpdb::LAppendInt(unsupported_list, + unsupported_features[ul].node_tag); + } + + INT unsupported_node = gpdb::FindNodes((Node *) query, unsupported_list); + gpdb::GPDBFree(unsupported_list); + + if (GPOS_FTRACE(EopttraceSingleNodeMode) || GPOS_FTRACE(EopttraceDisableMotions)) { + if (query->commandType == CMD_INSERT || query->commandType == CMD_UPDATE || + query->commandType == CMD_DELETE) { + GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiQuery2DXLUnsupportedFeature, + GPOS_WSZ_LIT("Single-mode not support insert/update/delete")); + } + + if (0 <= unsupported_node) { + CWStringDynamic error_message(mp); + error_message.AppendFormat(GPOS_WSZ_LIT("Single-mode not support %s"), + unsupported_features[unsupported_node].m_feature_name); + + GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiQuery2DXLUnsupportedFeature, + error_message.GetBuffer()); + } + } +} + //--------------------------------------------------------------------------- // @function: // CTranslatorQueryToDXL::CheckUnsupportedNodeTypes diff --git a/src/backend/gpopt/translate/CTranslatorUtils.cpp b/src/backend/gpopt/translate/CTranslatorUtils.cpp index 0887c72725c..356f2668919 100644 --- a/src/backend/gpopt/translate/CTranslatorUtils.cpp +++ b/src/backend/gpopt/translate/CTranslatorUtils.cpp @@ -150,6 +150,7 @@ CTranslatorUtils::GetTableDescr(CMemoryPool *mp, CMDAccessor *md_accessor, } else if (IMDRelation::ErelstorageForeign != rel->RetrieveRelStorageType() && !optimizer_enable_master_only_queries && + !GPOS_FTRACE(EopttraceSingleNodeMode) && (IMDRelation::EreldistrMasterOnly == distribution_policy)) { // fall back to the planner for queries on master-only table if they are disabled with Orca. This is due to diff --git a/src/backend/gpopt/utils/COptTasks.cpp b/src/backend/gpopt/utils/COptTasks.cpp index dd0e61116d8..afdbcc4665c 100644 --- a/src/backend/gpopt/utils/COptTasks.cpp +++ b/src/backend/gpopt/utils/COptTasks.cpp @@ -953,10 +953,9 @@ COptTasks::OptimizeTask(void *ptr) query_to_dxl_translator->GetCTEs(); GPOS_ASSERT(nullptr != query_output_dxlnode_array); - BOOL is_master_only = - !optimizer_enable_motions || - (!optimizer_enable_motions_masteronly_queries && - !query_to_dxl_translator->HasDistributedTables()); + BOOL is_master_only = GPOS_FTRACE(EopttraceDisableMotions) || + GPOS_FTRACE(EopttraceSingleNodeMode) || + !query_to_dxl_translator->HasDistributedTables(); // See NoteDistributionPolicyOpclasses() in src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp BOOL use_legacy_opfamilies = (query_to_dxl_translator->GetDistributionHashOpsKind() == diff --git a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h index f433b28d062..473806f4a37 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h @@ -83,6 +83,9 @@ enum EOptTraceFlag // print debug info of CTE EopttraceDebugCTE = 101020, + // Is singlenode + EopttraceSingleNodeMode = 101021, + /////////////////////////////////////////////////////// ////////////////// transformations flags ////////////// /////////////////////////////////////////////////////// diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index e4b25e97b33..5ecb8695205 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -384,7 +384,7 @@ standard_planner(Query *parse, const char *query_string, int cursorOptions, * PARALLEL RETRIEVE CURSOR is not supported by ORCA yet. */ if (optimizer && - GP_ROLE_DISPATCH == Gp_role && + IS_QD_OR_SINGLENODE() && IS_QUERY_DISPATCHER() && (cursorOptions & CURSOR_OPT_SKIP_FOREIGN_PARTITIONS) == 0 && (cursorOptions & CURSOR_OPT_PARALLEL_RETRIEVE) == 0) diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 02de621cb54..66c204c1075 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -322,7 +322,6 @@ char *optimizer_search_strategy_path = NULL; /* GUCs to tell Optimizer to enable a physical operator */ bool optimizer_enable_nljoin; bool optimizer_enable_indexjoin; -bool optimizer_enable_motions_masteronly_queries; bool optimizer_enable_motions; bool optimizer_enable_motion_broadcast; bool optimizer_enable_motion_gather; @@ -2176,16 +2175,6 @@ struct config_bool ConfigureNamesBool_gp[] = true, NULL, NULL, NULL }, - { - {"optimizer_enable_motions_masteronly_queries", PGC_USERSET, DEVELOPER_OPTIONS, - gettext_noop("Enable plans with Motion operators in the optimizer for queries with no distributed tables."), - NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE - }, - &optimizer_enable_motions_masteronly_queries, - false, - NULL, NULL, NULL - }, { {"optimizer_enable_motions", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Enable plans with Motion operators in the optimizer."), diff --git a/src/include/gpopt/translate/CTranslatorQueryToDXL.h b/src/include/gpopt/translate/CTranslatorQueryToDXL.h index c74892e5df2..392af626d29 100644 --- a/src/include/gpopt/translate/CTranslatorQueryToDXL.h +++ b/src/include/gpopt/translate/CTranslatorQueryToDXL.h @@ -147,6 +147,8 @@ class CTranslatorQueryToDXL // node is found static void CheckUnsupportedNodeTypes(Query *query); + static void CheckUnsupportedDDLInSingleMode(CMemoryPool *mp, Query *query); + // walker to check if SUBLINK node is present in the security quals static BOOL CheckSublinkInSecurityQuals(Node *node, void *context); diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 40838ba969d..05ff02dd8f1 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -501,7 +501,6 @@ extern char *optimizer_search_strategy_path; /* GUCs to tell Optimizer to enable a physical operator */ extern bool optimizer_enable_nljoin; extern bool optimizer_enable_indexjoin; -extern bool optimizer_enable_motions_masteronly_queries; extern bool optimizer_enable_motions; extern bool optimizer_enable_motion_broadcast; extern bool optimizer_enable_motion_gather; diff --git a/src/include/utils/unsync_guc_name.h b/src/include/utils/unsync_guc_name.h index b3a19ca7b9f..065eca54d6e 100644 --- a/src/include/utils/unsync_guc_name.h +++ b/src/include/utils/unsync_guc_name.h @@ -420,7 +420,6 @@ "optimizer_enable_motion_gather", "optimizer_enable_motion_redistribute", "optimizer_enable_motions", - "optimizer_enable_motions_masteronly_queries", "optimizer_enable_multiple_distinct_aggs", "optimizer_enable_nljoin", "optimizer_enable_outerjoin_rewrite", diff --git a/src/test/singlenode_isolation2/expected/lockmodes.out b/src/test/singlenode_isolation2/expected/lockmodes.out index 0caadff3922..40835b507ca 100644 --- a/src/test/singlenode_isolation2/expected/lockmodes.out +++ b/src/test/singlenode_isolation2/expected/lockmodes.out @@ -159,13 +159,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods, t_lockmods1 for update; - QUERY PLAN ------------------------------------------------------------------------- - Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20) - -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10) - -> Materialize (cost=0.00..1.07 rows=5 width=10) - -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10) - Optimizer: Postgres query optimizer + QUERY PLAN +------------------------------------------------------------------- + Nested Loop (cost=0.00..1324032.37 rows=5 width=8) + Join Filter: true + -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4) + -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4) + Optimizer: GPORCA (5 rows) 1: select * from t_lockmods, t_lockmods1 for update; c | c @@ -185,13 +185,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods, t_lockmods1 for no key update; - QUERY PLAN ------------------------------------------------------------------------- - Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20) - -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10) - -> Materialize (cost=0.00..1.07 rows=5 width=10) - -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10) - Optimizer: Postgres query optimizer + QUERY PLAN +------------------------------------------------------------------- + Nested Loop (cost=0.00..1324032.37 rows=5 width=8) + Join Filter: true + -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4) + -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4) + Optimizer: GPORCA (5 rows) 1: select * from t_lockmods, t_lockmods1 for no key update; c | c @@ -211,13 +211,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods, t_lockmods1 for share; - QUERY PLAN ------------------------------------------------------------------------- - Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20) - -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10) - -> Materialize (cost=0.00..1.07 rows=5 width=10) - -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10) - Optimizer: Postgres query optimizer + QUERY PLAN +------------------------------------------------------------------- + Nested Loop (cost=0.00..1324032.37 rows=5 width=8) + Join Filter: true + -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4) + -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4) + Optimizer: GPORCA (5 rows) 1: select * from t_lockmods, t_lockmods1 for share; c | c @@ -237,13 +237,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods, t_lockmods1 for key share; - QUERY PLAN ------------------------------------------------------------------------- - Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20) - -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10) - -> Materialize (cost=0.00..1.07 rows=5 width=10) - -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10) - Optimizer: Postgres query optimizer + QUERY PLAN +------------------------------------------------------------------- + Nested Loop (cost=0.00..1324032.37 rows=5 width=8) + Join Filter: true + -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4) + -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4) + Optimizer: GPORCA (5 rows) 1: select * from t_lockmods, t_lockmods1 for key share; c | c @@ -583,13 +583,14 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods_ao, t_lockmods_ao1 for update; - QUERY PLAN ---------------------------------------------------------------------- - Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20) - -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10) - -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10) - Optimizer: Postgres query optimizer -(4 rows) + QUERY PLAN +---------------------------------------------------------------------- + Nested Loop (cost=0.00..1324032.57 rows=8 width=8) + Join Filter: true + -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4) + -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4) + Optimizer: GPORCA +(5 rows) 1: select * from t_lockmods_ao, t_lockmods_ao1 for update; c | c ---+--- @@ -608,13 +609,14 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods_ao, t_lockmods_ao1 for no key update; - QUERY PLAN ---------------------------------------------------------------------- - Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20) - -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10) - -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10) - Optimizer: Postgres query optimizer -(4 rows) + QUERY PLAN +---------------------------------------------------------------------- + Nested Loop (cost=0.00..1324032.57 rows=8 width=8) + Join Filter: true + -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4) + -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4) + Optimizer: GPORCA +(5 rows) 1: select * from t_lockmods_ao, t_lockmods_ao1 for no key update; c | c ---+--- @@ -633,13 +635,14 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods_ao, t_lockmods_ao1 for share; - QUERY PLAN ---------------------------------------------------------------------- - Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20) - -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10) - -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10) - Optimizer: Postgres query optimizer -(4 rows) + QUERY PLAN +---------------------------------------------------------------------- + Nested Loop (cost=0.00..1324032.57 rows=8 width=8) + Join Filter: true + -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4) + -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4) + Optimizer: GPORCA +(5 rows) 1: select * from t_lockmods_ao, t_lockmods_ao1 for share; c | c ---+--- @@ -658,13 +661,14 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods_ao, t_lockmods_ao1 for key share; - QUERY PLAN ---------------------------------------------------------------------- - Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20) - -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10) - -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10) - Optimizer: Postgres query optimizer -(4 rows) + QUERY PLAN +---------------------------------------------------------------------- + Nested Loop (cost=0.00..1324032.57 rows=8 width=8) + Join Filter: true + -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4) + -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4) + Optimizer: GPORCA +(5 rows) 1: select * from t_lockmods_ao, t_lockmods_ao1 for key share; c | c ---+--- diff --git a/src/test/singlenode_regress/expected/explain.out b/src/test/singlenode_regress/expected/explain.out index 2803a0b2c50..2c9f373b894 100644 --- a/src/test/singlenode_regress/expected/explain.out +++ b/src/test/singlenode_regress/expected/explain.out @@ -471,6 +471,7 @@ select jsonb_pretty( }, + "Settings": { + "Optimizer": "Postgres query optimizer",+ + "optimizer": "off", + "parallel_setup_cost": "0", + "parallel_tuple_cost": "0", + "min_parallel_table_scan_size": "0" + diff --git a/src/test/singlenode_regress/expected/rowsecurity.out b/src/test/singlenode_regress/expected/rowsecurity.out index 60b1eb0a261..d2b3baec80d 100644 --- a/src/test/singlenode_regress/expected/rowsecurity.out +++ b/src/test/singlenode_regress/expected/rowsecurity.out @@ -783,15 +783,16 @@ SELECT * FROM t1 FOR SHARE; EXPLAIN (COSTS OFF) SELECT * FROM t1 FOR SHARE; QUERY PLAN ------------------------------------- - Append - -> Seq Scan on t1 t1_1 - Filter: ((a % 2) = 0) - -> Seq Scan on t2 t1_2 - Filter: ((a % 2) = 0) - -> Seq Scan on t3 t1_3 - Filter: ((a % 2) = 0) + LockRows + -> Append + -> Seq Scan on t1 t1_1 + Filter: ((a % 2) = 0) + -> Seq Scan on t2 t1_2 + Filter: ((a % 2) = 0) + -> Seq Scan on t3 t1_3 + Filter: ((a % 2) = 0) Optimizer: Postgres query optimizer -(8 rows) +(9 rows) SELECT * FROM t1 WHERE f_leak(b) FOR SHARE; NOTICE: f_leak => bbb @@ -809,17 +810,18 @@ NOTICE: f_leak => yyy (5 rows) EXPLAIN (COSTS OFF) SELECT * FROM t1 WHERE f_leak(b) FOR SHARE; - QUERY PLAN ------------------------------------------------ - Append - -> Seq Scan on t1 t1_1 - Filter: (((a % 2) = 0) AND f_leak(b)) - -> Seq Scan on t2 t1_2 - Filter: (((a % 2) = 0) AND f_leak(b)) - -> Seq Scan on t3 t1_3 - Filter: (((a % 2) = 0) AND f_leak(b)) + QUERY PLAN +----------------------------------------------------- + LockRows + -> Append + -> Seq Scan on t1 t1_1 + Filter: (((a % 2) = 0) AND f_leak(b)) + -> Seq Scan on t2 t1_2 + Filter: (((a % 2) = 0) AND f_leak(b)) + -> Seq Scan on t3 t1_3 + Filter: (((a % 2) = 0) AND f_leak(b)) Optimizer: Postgres query optimizer -(8 rows) +(9 rows) -- union all query SELECT a, b, tableoid::regclass FROM t2 UNION ALL SELECT a, b, tableoid::regclass FROM t3; diff --git a/src/test/singlenode_regress/expected/select.out b/src/test/singlenode_regress/expected/select.out index a7014af1f98..f393c638962 100644 --- a/src/test/singlenode_regress/expected/select.out +++ b/src/test/singlenode_regress/expected/select.out @@ -816,13 +816,14 @@ select unique2 from onek2 where unique2 = 11 and stringu1 < 'B'; -- but if it's an update target, must retest anyway explain (costs off) select unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update; - QUERY PLAN ------------------------------------------ - Index Scan using onek2_u2_prtl on onek2 - Index Cond: (unique2 = 11) - Filter: (stringu1 < 'B'::name) + QUERY PLAN +----------------------------------------------- + LockRows + -> Index Scan using onek2_u2_prtl on onek2 + Index Cond: (unique2 = 11) + Filter: (stringu1 < 'B'::name) Optimizer: Postgres query optimizer -(4 rows) +(5 rows) select unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update; unique2 From ad0652d395ef73480af64aa6d58fe4ad3b815be9 Mon Sep 17 00:00:00 2001 From: zhoujiaqi Date: Mon, 16 Jun 2025 13:42:11 +0800 Subject: [PATCH 111/260] ORCA: Support pushdown partial aggregate below join Different with CXformUtils::PexprPushGbBelowJoin(will pushdown the one-stage agg) Push the partial agg only follow the three rules: 1. The keyset of group by in(contains all) the keyset of join 2. The output from join outer child contains the scalar from groupby - the scalar from groupby is not the groupby key, but it's the output of agg 3. The output of group by contains(all) the join scalar used from outer child Partial agg cannot be pushed through join because (1) no group by keysets in(contains all) join keysets, or (3) Gb uses columns from both join children, or (4) Gb hides columns required for the join scalar child Not like the CXformUtils::PexprPushGbBelowJoin, pushdown a partial agg **NO REQUIRED** the unique key in the key of join inner child. Also we should **NEVER** pushdown the multi-stage agg from `CXformSplitDQA`(the DISTINCT case). --- .../include/gpopt/operators/CLogicalGbAgg.h | 16 + .../include/gpopt/operators/CPhysicalAgg.h | 5 +- .../gpopt/operators/CPhysicalHashAgg.h | 2 +- .../operators/CPhysicalHashAggDeduplicate.h | 1 + .../gpopt/operators/CPhysicalScalarAgg.h | 3 +- .../gpopt/operators/CPhysicalStreamAgg.h | 4 +- .../operators/CPhysicalStreamAggDeduplicate.h | 1 + .../libgpopt/include/gpopt/xforms/CXform.h | 1 + .../xforms/CXformPushPartialAggBelowJoin.h | 97 ++ .../include/gpopt/xforms/CXformSplitDQA.h | 3 +- .../include/gpopt/xforms/CXformUtils.h | 23 +- .../libgpopt/include/gpopt/xforms/xforms.h | 1 + .../libgpopt/src/operators/CLogicalGbAgg.cpp | 24 +- .../libgpopt/src/operators/CPhysicalAgg.cpp | 8 +- .../src/operators/CPhysicalHashAgg.cpp | 6 +- .../operators/CPhysicalHashAggDeduplicate.cpp | 5 +- .../src/operators/CPhysicalScalarAgg.cpp | 6 +- .../src/operators/CPhysicalStreamAgg.cpp | 6 +- .../CPhysicalStreamAggDeduplicate.cpp | 5 +- .../libgpopt/src/xforms/CXformFactory.cpp | 1 + .../src/xforms/CXformGbAgg2HashAgg.cpp | 1 + .../src/xforms/CXformGbAgg2ScalarAgg.cpp | 1 + .../src/xforms/CXformGbAgg2StreamAgg.cpp | 1 + .../xforms/CXformGbAggDedup2HashAggDedup.cpp | 1 + .../CXformGbAggDedup2StreamAggDedup.cpp | 1 + .../xforms/CXformPushPartialAggBelowJoin.cpp | 422 +++++++ .../src/xforms/CXformSimplifyGbAgg.cpp | 5 +- .../libgpopt/src/xforms/CXformSplitDQA.cpp | 4 +- .../libgpopt/src/xforms/CXformSplitGbAgg.cpp | 4 +- .../libgpopt/src/xforms/CXformUtils.cpp | 1 + .../gporca/libgpopt/src/xforms/Makefile | 1 + src/test/regress/expected/agg_pushdown.out | 371 +++--- .../expected/agg_pushdown_optimizer.out | 1113 +++++++++++++++++ src/test/regress/sql/agg_pushdown.sql | 57 +- 34 files changed, 1909 insertions(+), 292 deletions(-) create mode 100644 src/backend/gporca/libgpopt/include/gpopt/xforms/CXformPushPartialAggBelowJoin.h create mode 100644 src/backend/gporca/libgpopt/src/xforms/CXformPushPartialAggBelowJoin.cpp create mode 100644 src/test/regress/expected/agg_pushdown_optimizer.out diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CLogicalGbAgg.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CLogicalGbAgg.h index a7f1b01c202..005b78db1e8 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CLogicalGbAgg.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CLogicalGbAgg.h @@ -131,6 +131,20 @@ class CLogicalGbAgg : public CLogicalUnary return m_fGeneratesDuplicates; } + // dose this aggregate generated by pushdown + BOOL + FAggPushdown() const + { + return m_aggpushdown; + } + + // this aggregate generated by pushdown + void + MarkAggPushdown() + { + m_aggpushdown = true; + } + // match function BOOL Matches(COperator *pop) const override; @@ -274,6 +288,8 @@ class CLogicalGbAgg : public CLogicalUnary // which type of multi-stage agg it is EAggStage m_aggStage; + // is current agg pushdown? + BOOL m_aggpushdown; }; // class CLogicalGbAgg } // namespace gpopt diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalAgg.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalAgg.h index a5a44e61d0c..0a1c5b5000e 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalAgg.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalAgg.h @@ -44,6 +44,9 @@ class CPhysicalAgg : public CPhysical CLogicalGbAgg::EAggStage m_aggStage; + // is aggregate gernerated by pushdown + BOOL m_aggpushdown; + // compute required distribution of the n-th child of an intermediate aggregate CDistributionSpec *PdsRequiredIntermediateAgg(CMemoryPool *mp, ULONG ulOptReq) const; @@ -111,7 +114,7 @@ class CPhysicalAgg : public CPhysical COperator::EGbAggType egbaggtype, BOOL fGeneratesDuplicates, CColRefArray *pdrgpcrArgDQA, BOOL fMultiStage, BOOL isAggFromSplitDQA, CLogicalGbAgg::EAggStage aggStage, - BOOL should_enforce_distribution); + BOOL isAggPushdown, BOOL should_enforce_distribution); // is this agg generated by CXformSplitDQA BOOL IsAggFromSplitDQA() const; diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashAgg.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashAgg.h index 87c817d7aa2..ff63514e41f 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashAgg.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashAgg.h @@ -41,7 +41,7 @@ class CPhysicalHashAgg : public CPhysicalAgg BOOL fGeneratesDuplicates, CColRefArray *pdrgpcrArgDQA, BOOL fMultiStage, BOOL isAggFromSplitDQA, CLogicalGbAgg::EAggStage aggStage, - BOOL should_enforce_distribution = true + BOOL isAggPushdown, BOOL should_enforce_distribution // should_enforce_distribution should be set to false if // 'local' and 'global' splits don't need to have different // distributions. This flag is set to false if the local diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashAggDeduplicate.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashAggDeduplicate.h index 75fefc1535c..204a3bbe4b5 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashAggDeduplicate.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalHashAggDeduplicate.h @@ -42,6 +42,7 @@ class CPhysicalHashAggDeduplicate : public CPhysicalHashAgg BOOL fGeneratesDuplicates, BOOL fMultiStage, BOOL isAggFromSplitDQA, CLogicalGbAgg::EAggStage aggStage, + BOOL isAggPushdown, BOOL should_enforce_distribution); // dtor diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalScalarAgg.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalScalarAgg.h index 17aee5e65d8..291b49f0732 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalScalarAgg.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalScalarAgg.h @@ -40,7 +40,8 @@ class CPhysicalScalarAgg : public CPhysicalAgg CColRefArray *pdrgpcrMinimal, // minimal grouping columns based on FD's COperator::EGbAggType egbaggtype, BOOL fGeneratesDuplicates, CColRefArray *pdrgpcrArgDQA, BOOL fMultiStage, BOOL isAggFromSplitDQA, - CLogicalGbAgg::EAggStage aggStage, BOOL should_enforce_distribution); + CLogicalGbAgg::EAggStage aggStage, BOOL isAggPushdown, + BOOL should_enforce_distribution); // dtor ~CPhysicalScalarAgg() override; diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalStreamAgg.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalStreamAgg.h index 1cb0dbf9490..21dc3464638 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalStreamAgg.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalStreamAgg.h @@ -60,8 +60,8 @@ class CPhysicalStreamAgg : public CPhysicalAgg CColRefArray *pdrgpcrMinimal, // minimal grouping columns based on FD's COperator::EGbAggType egbaggtype, BOOL fGeneratesDuplicates, CColRefArray *pdrgpcrArgDQA, BOOL fMultiStage, BOOL isAggFromSplitDQA, - CLogicalGbAgg::EAggStage aggStage, - BOOL should_enforce_distribution = true + CLogicalGbAgg::EAggStage aggStage, BOOL isAggPushdown, + BOOL should_enforce_distribution // should_enforce_distribution should be set to false if // 'local' and 'global' splits don't need to have different // distributions. This flag is set to false if the local diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalStreamAggDeduplicate.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalStreamAggDeduplicate.h index 6a79c3690d3..a05479aa4bf 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalStreamAggDeduplicate.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalStreamAggDeduplicate.h @@ -43,6 +43,7 @@ class CPhysicalStreamAggDeduplicate : public CPhysicalStreamAgg BOOL fGeneratesDuplicates, BOOL fMultiStage, BOOL isAggFromSplitDQA, CLogicalGbAgg::EAggStage aggStage, + BOOL isAggPushdown, BOOL should_enforce_distribution); // dtor diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h index 904e6b4b1c8..225371097c5 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h @@ -165,6 +165,7 @@ class CXform : public CRefCount, public DbgPrintMixin ExfPushGbWithHavingBelowJoin, ExfPushGbBelowUnion, ExfPushGbBelowUnionAll, + ExfPushPartialAggBelowJoin, ExfSplitGbAgg, ExfSplitGbAggDedup, ExfSplitDQA, diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformPushPartialAggBelowJoin.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformPushPartialAggBelowJoin.h new file mode 100644 index 00000000000..4c4d858c813 --- /dev/null +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformPushPartialAggBelowJoin.h @@ -0,0 +1,97 @@ +//--------------------------------------------------------------------------- +// Greenplum Database +// Copyright (C) 2012 EMC Corp. +// +// @filename: +// CXformPushPartialAggBelowJoin.h +// +// @doc: +// Push group by below join transform +//--------------------------------------------------------------------------- +#ifndef GPOPT_CXformPushPartialAggBelowJoin_H +#define GPOPT_CXformPushPartialAggBelowJoin_H + +#include + +#include "gpos/base.h" + +#include "gpopt/xforms/CXformExploration.h" +namespace gpopt +{ +using namespace gpos; + +//--------------------------------------------------------------------------- +// @class: +// CXformPushPartialAggBelowJoin +// +// @doc: +// Push group by below join transform +// +//--------------------------------------------------------------------------- +class CXformPushPartialAggBelowJoin : public CXformExploration +{ +private: + static BOOL FLocalGbAggAlreadyPushed(CExpression *pexprGlobalGb); + + static std::pair FCanPushLocalGbAggBelowJoin( + CMemoryPool *mp, CExpression *pexpr); + + static CExpression *ExchangeGbkeyFromJoinKey(CMemoryPool *mp, + CExpression *pexpr); + static CColRefSet *PcrsJoinKey(CMemoryPool *mp, CExpression *pexprOuter, + CExpression *pexprInner, + CExpression *pexprScalar); + + static CExpression *PushLocalGbAggBelowJoin(CMemoryPool *mp, + CExpression *pexprGlobalGb); + + static CColRefSet *PexprGetGbAggkey(CMemoryPool *mp, + CExpression *pexprGbAgg); + +public: + CXformPushPartialAggBelowJoin(const CXformPushPartialAggBelowJoin &) = + delete; + + // ctor + explicit CXformPushPartialAggBelowJoin(CMemoryPool *mp); + + // ctor + explicit CXformPushPartialAggBelowJoin(CExpression *pexprPattern); + + // dtor + ~CXformPushPartialAggBelowJoin() override = default; + + // ident accessors + EXformId + Exfid() const override + { + return ExfPushPartialAggBelowJoin; + } + + const CHAR * + SzId() const override + { + return "CXformPushPartialAggBelowJoin"; + } + + // Compatibility function + BOOL + FCompatible(CXform::EXformId exfid) override + { + return (CXform::ExfPushPartialAggBelowJoin != exfid); + } + + // compute xform promise for a given expression handle + EXformPromise Exfp(CExpressionHandle &exprhdl) const override; + + // actual transform + void Transform(CXformContext *pxfctxt, CXformResult *pxfres, + CExpression *pexpr) const override; + +}; // class CXformPushPartialAggBelowJoin + +} // namespace gpopt + +#endif // !GPOPT_CXformPushPartialAggBelowJoin_H + +// EOF diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformSplitDQA.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformSplitDQA.h index 9a62c9a5d4f..4c7512b6e41 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformSplitDQA.h +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformSplitDQA.h @@ -117,7 +117,8 @@ class CXformSplitDQA : public CXformExploration FCompatible(CXform::EXformId exfid) override { return (CXform::ExfSplitDQA != exfid) && - (CXform::ExfSplitGbAgg != exfid); + (CXform::ExfSplitGbAgg != exfid) && + (CXform::ExfPushPartialAggBelowJoin != exfid); } // compute xform promise for a given expression handle diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformUtils.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformUtils.h index 65651204184..6494cfc992a 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformUtils.h +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformUtils.h @@ -82,10 +82,6 @@ class CXformUtils CTableDescriptor *ptabdesc, CColRefArray *colref_array); - // helper for extracting foreign key - static CColRefSet *PcrsFKey(CMemoryPool *mp, CExpressionArray *pdrgpexpr, - CColRefSet *prcsOutput, CColRefSet *pcrsKey); - // return the set of columns from the given array of columns which appear // in the index included / key columns static CColRefSet *PcrsIndexColumns(CMemoryPool *mp, @@ -172,13 +168,6 @@ class CXformUtils CColRefSet *prcsOutput, CColRefSet *pcrsGrpCols); - // check if the preconditions for pushing down Group by through join are satisfied - static BOOL FCanPushGbAggBelowJoin(CColRefSet *pcrsGrpCols, - CColRefSet *pcrsJoinOuterChildOutput, - CColRefSet *pcrsJoinScalarUsedFromOuter, - CColRefSet *pcrsGrpByOutput, - CColRefSet *pcrsGrpByUsed, - CColRefSet *pcrsFKey); // create a dynamic operator for a btree index plan template static CLogical * @@ -295,11 +284,23 @@ class CXformUtils static CXform::EXformPromise ExfpExpandJoinOrder(CExpressionHandle &exprhdl, const CXform *xform); + // extract foreign key + static CColRefSet *PcrsFKey(CMemoryPool *mp, CExpressionArray *pdrgpexpr, + CColRefSet *prcsOutput, CColRefSet *pcrsKey); + // extract foreign key static CColRefSet *PcrsFKey(CMemoryPool *mp, CExpression *pexprOuter, CExpression *pexprInner, CExpression *pexprScalar); + // check if the preconditions for pushing down Group by through join are satisfied + static BOOL FCanPushGbAggBelowJoin(CColRefSet *pcrsGrpCols, + CColRefSet *pcrsJoinOuterChildOutput, + CColRefSet *pcrsJoinScalarUsedFromOuter, + CColRefSet *pcrsGrpByOutput, + CColRefSet *pcrsGrpByUsed, + CColRefSet *pcrsFKey); + // compute a swap of the two given joins static CExpression *PexprSwapJoins(CMemoryPool *mp, CExpression *pexprTopJoin, diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h index d0972b2be2c..fb5ba6b1e3c 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h @@ -132,6 +132,7 @@ #include "gpopt/xforms/CXformPushGbBelowJoin.h" #include "gpopt/xforms/CXformPushGbBelowUnion.h" #include "gpopt/xforms/CXformPushGbBelowUnionAll.h" +#include "gpopt/xforms/CXformPushPartialAggBelowJoin.h" #include "gpopt/xforms/CXformPushGbDedupBelowJoin.h" #include "gpopt/xforms/CXformPushGbWithHavingBelowJoin.h" #include "gpopt/xforms/CXformPushJoinBelowLeftUnionAll.h" diff --git a/src/backend/gporca/libgpopt/src/operators/CLogicalGbAgg.cpp b/src/backend/gporca/libgpopt/src/operators/CLogicalGbAgg.cpp index 12a367dba3e..6d70f7df0a3 100644 --- a/src/backend/gporca/libgpopt/src/operators/CLogicalGbAgg.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CLogicalGbAgg.cpp @@ -40,7 +40,8 @@ CLogicalGbAgg::CLogicalGbAgg(CMemoryPool *mp) m_pdrgpcr(nullptr), m_pdrgpcrMinimal(nullptr), m_egbaggtype(COperator::EgbaggtypeSentinel), - m_aggStage(EasOthers) + m_aggStage(EasOthers), + m_aggpushdown(false) { m_fPattern = true; } @@ -62,7 +63,8 @@ CLogicalGbAgg::CLogicalGbAgg(CMemoryPool *mp, CColRefArray *colref_array, m_pdrgpcr(colref_array), m_pdrgpcrMinimal(nullptr), m_egbaggtype(egbaggtype), - m_aggStage(EasOthers) + m_aggStage(EasOthers), + m_aggpushdown(false) { if (COperator::EgbaggtypeLocal == egbaggtype) { @@ -86,7 +88,8 @@ CLogicalGbAgg::CLogicalGbAgg(CMemoryPool *mp, CColRefArray *colref_array, m_pdrgpcr(colref_array), m_pdrgpcrMinimal(nullptr), m_egbaggtype(egbaggtype), - m_aggStage(aggStage) + m_aggStage(aggStage), + m_aggpushdown(false) { if (COperator::EgbaggtypeLocal == egbaggtype) { @@ -120,7 +123,8 @@ CLogicalGbAgg::CLogicalGbAgg(CMemoryPool *mp, CColRefArray *colref_array, m_pdrgpcr(colref_array), m_pdrgpcrMinimal(nullptr), m_egbaggtype(egbaggtype), - m_aggStage(EasOthers) + m_aggStage(EasOthers), + m_aggpushdown(false) { GPOS_ASSERT(nullptr != colref_array); GPOS_ASSERT(COperator::EgbaggtypeSentinel > egbaggtype); @@ -142,7 +146,8 @@ CLogicalGbAgg::CLogicalGbAgg(CMemoryPool *mp, CColRefArray *colref_array, m_pdrgpcr(colref_array), m_pdrgpcrMinimal(nullptr), m_egbaggtype(egbaggtype), - m_aggStage(aggStage) + m_aggStage(aggStage), + m_aggpushdown(false) { GPOS_ASSERT(nullptr != colref_array); GPOS_ASSERT(COperator::EgbaggtypeSentinel > egbaggtype); @@ -171,7 +176,8 @@ CLogicalGbAgg::CLogicalGbAgg(CMemoryPool *mp, CColRefArray *colref_array, m_pdrgpcr(colref_array), m_pdrgpcrMinimal(pdrgpcrMinimal), m_egbaggtype(egbaggtype), - m_aggStage(EasOthers) + m_aggStage(EasOthers), + m_aggpushdown(false) { GPOS_ASSERT(nullptr != colref_array); GPOS_ASSERT(COperator::EgbaggtypeSentinel > egbaggtype); @@ -209,7 +215,8 @@ CLogicalGbAgg::CLogicalGbAgg(CMemoryPool *mp, CColRefArray *colref_array, m_pdrgpcr(colref_array), m_pdrgpcrMinimal(pdrgpcrMinimal), m_egbaggtype(egbaggtype), - m_aggStage(EasOthers) + m_aggStage(EasOthers), + m_aggpushdown(false) { GPOS_ASSERT(nullptr != colref_array); GPOS_ASSERT(COperator::EgbaggtypeSentinel > egbaggtype); @@ -592,6 +599,7 @@ CLogicalGbAgg::PxfsCandidates(CMemoryPool *mp) const (void) xform_set->ExchangeSet(CXform::ExfPushGbBelowUnionAll); if (FGlobal()) { + (void) xform_set->ExchangeSet(CXform::ExfPushPartialAggBelowJoin); (void) xform_set->ExchangeSet(CXform::ExfSplitGbAgg); } (void) xform_set->ExchangeSet(CXform::ExfSplitDQA); @@ -698,7 +706,7 @@ CLogicalGbAgg::OsPrint(IOstream &os) const os << SzId() << "( "; OsPrintGbAggType(os, m_egbaggtype); - os << " )"; + os << (m_aggpushdown ? ", pushdown )" : " )"); os << " Grp Cols: ["; CUtils::OsPrintDrgPcr(os, m_pdrgpcr); os << "]" diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalAgg.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalAgg.cpp index e8f39bc59b8..0b35e399eb2 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalAgg.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalAgg.cpp @@ -39,12 +39,14 @@ CPhysicalAgg::CPhysicalAgg( CColRefArray *pdrgpcrMinimal, // minimal grouping columns based on FD's COperator::EGbAggType egbaggtype, BOOL fGeneratesDuplicates, CColRefArray *pdrgpcrArgDQA, BOOL fMultiStage, BOOL isAggFromSplitDQA, - CLogicalGbAgg::EAggStage aggStage, BOOL should_enforce_distribution) + CLogicalGbAgg::EAggStage aggStage, BOOL isAggPushdown, + BOOL should_enforce_distribution) : CPhysical(mp), m_pdrgpcr(colref_array), m_egbaggtype(egbaggtype), m_isAggFromSplitDQA(isAggFromSplitDQA), m_aggStage(aggStage), + m_aggpushdown(isAggPushdown), m_pdrgpcrMinimal(nullptr), m_fGeneratesDuplicates(fGeneratesDuplicates), m_pdrgpcrArgDQA(pdrgpcrArgDQA), @@ -696,6 +698,10 @@ CPhysicalAgg::OsPrint(IOstream &os) const { os << ", multi-stage"; } + if (m_aggpushdown) + { + os << ", pushdown"; + } os << " )"; diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalHashAgg.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalHashAgg.cpp index 198f1e8f7c2..82fd5d09799 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalHashAgg.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalHashAgg.cpp @@ -33,10 +33,12 @@ CPhysicalHashAgg::CPhysicalHashAgg( CMemoryPool *mp, CColRefArray *colref_array, CColRefArray *pdrgpcrMinimal, COperator::EGbAggType egbaggtype, BOOL fGeneratesDuplicates, CColRefArray *pdrgpcrArgDQA, BOOL fMultiStage, BOOL isAggFromSplitDQA, - CLogicalGbAgg::EAggStage aggStage, BOOL should_enforce_distribution) + CLogicalGbAgg::EAggStage aggStage, BOOL isAggPushdown, + BOOL should_enforce_distribution) : CPhysicalAgg(mp, colref_array, pdrgpcrMinimal, egbaggtype, fGeneratesDuplicates, pdrgpcrArgDQA, fMultiStage, - isAggFromSplitDQA, aggStage, should_enforce_distribution) + isAggFromSplitDQA, aggStage, isAggPushdown, + should_enforce_distribution) { } diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalHashAggDeduplicate.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalHashAggDeduplicate.cpp index 089f431e261..41aab57db29 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalHashAggDeduplicate.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalHashAggDeduplicate.cpp @@ -33,11 +33,12 @@ CPhysicalHashAggDeduplicate::CPhysicalHashAggDeduplicate( CMemoryPool *mp, CColRefArray *colref_array, CColRefArray *pdrgpcrMinimal, COperator::EGbAggType egbaggtype, CColRefArray *pdrgpcrKeys, BOOL fGeneratesDuplicates, BOOL fMultiStage, BOOL isAggFromSplitDQA, - CLogicalGbAgg::EAggStage aggStage, BOOL should_enforce_distribution) + CLogicalGbAgg::EAggStage aggStage, BOOL isAggPushdown, + BOOL should_enforce_distribution) : CPhysicalHashAgg(mp, colref_array, pdrgpcrMinimal, egbaggtype, fGeneratesDuplicates, nullptr /*pdrgpcrGbMinusDistinct*/, fMultiStage, isAggFromSplitDQA, aggStage, - should_enforce_distribution), + isAggPushdown, should_enforce_distribution), m_pdrgpcrKeys(pdrgpcrKeys) { GPOS_ASSERT(nullptr != pdrgpcrKeys); diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalScalarAgg.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalScalarAgg.cpp index 6b1f54fdfb4..c63f2790376 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalScalarAgg.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalScalarAgg.cpp @@ -33,10 +33,12 @@ CPhysicalScalarAgg::CPhysicalScalarAgg( CMemoryPool *mp, CColRefArray *colref_array, CColRefArray *pdrgpcrMinimal, COperator::EGbAggType egbaggtype, BOOL fGeneratesDuplicates, CColRefArray *pdrgpcrArgDQA, BOOL fMultiStage, BOOL isAggFromSplitDQA, - CLogicalGbAgg::EAggStage aggStage, BOOL should_enforce_distribution) + CLogicalGbAgg::EAggStage aggStage, BOOL isAggPushdown, + BOOL should_enforce_distribution) : CPhysicalAgg(mp, colref_array, pdrgpcrMinimal, egbaggtype, fGeneratesDuplicates, pdrgpcrArgDQA, fMultiStage, - isAggFromSplitDQA, aggStage, should_enforce_distribution) + isAggFromSplitDQA, aggStage, isAggPushdown, + should_enforce_distribution) { } diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalStreamAgg.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalStreamAgg.cpp index 156f24d92ee..4f4b31de650 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalStreamAgg.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalStreamAgg.cpp @@ -36,10 +36,12 @@ CPhysicalStreamAgg::CPhysicalStreamAgg( CMemoryPool *mp, CColRefArray *colref_array, CColRefArray *pdrgpcrMinimal, COperator::EGbAggType egbaggtype, BOOL fGeneratesDuplicates, CColRefArray *pdrgpcrArgDQA, BOOL fMultiStage, BOOL isAggFromSplitDQA, - CLogicalGbAgg::EAggStage aggStage, BOOL should_enforce_distribution) + CLogicalGbAgg::EAggStage aggStage, BOOL isAggPushdown, + BOOL should_enforce_distribution) : CPhysicalAgg(mp, colref_array, pdrgpcrMinimal, egbaggtype, fGeneratesDuplicates, pdrgpcrArgDQA, fMultiStage, - isAggFromSplitDQA, aggStage, should_enforce_distribution), + isAggFromSplitDQA, aggStage, isAggPushdown, + should_enforce_distribution), m_pos(nullptr) { GPOS_ASSERT(nullptr != m_pdrgpcrMinimal); diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalStreamAggDeduplicate.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalStreamAggDeduplicate.cpp index 500c9cdcb8e..8af573b6285 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalStreamAggDeduplicate.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalStreamAggDeduplicate.cpp @@ -31,11 +31,12 @@ CPhysicalStreamAggDeduplicate::CPhysicalStreamAggDeduplicate( CMemoryPool *mp, CColRefArray *colref_array, CColRefArray *pdrgpcrMinimal, COperator::EGbAggType egbaggtype, CColRefArray *pdrgpcrKeys, BOOL fGeneratesDuplicates, BOOL fMultiStage, BOOL isAggFromSplitDQA, - CLogicalGbAgg::EAggStage aggStage, BOOL should_enforce_distribution) + CLogicalGbAgg::EAggStage aggStage, BOOL isAggPushdown, + BOOL should_enforce_distribution) : CPhysicalStreamAgg( mp, colref_array, pdrgpcrMinimal, egbaggtype, fGeneratesDuplicates, nullptr /*pdrgpcrGbMinusDistinct*/, fMultiStage, isAggFromSplitDQA, - aggStage, should_enforce_distribution), + aggStage, isAggPushdown, should_enforce_distribution), m_pdrgpcrKeys(pdrgpcrKeys) { GPOS_ASSERT(nullptr != pdrgpcrKeys); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp index f54aa957ebc..e21c24511dd 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp @@ -243,6 +243,7 @@ CXformFactory::Instantiate() Add(GPOS_NEW(m_mp) CXformPushGbWithHavingBelowJoin(m_mp)); Add(GPOS_NEW(m_mp) CXformPushGbBelowUnion(m_mp)); Add(GPOS_NEW(m_mp) CXformPushGbBelowUnionAll(m_mp)); + Add(GPOS_NEW(m_mp) CXformPushPartialAggBelowJoin(m_mp)); Add(GPOS_NEW(m_mp) CXformSplitGbAgg(m_mp)); Add(GPOS_NEW(m_mp) CXformSplitGbAggDedup(m_mp)); Add(GPOS_NEW(m_mp) CXformSplitDQA(m_mp)); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2HashAgg.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2HashAgg.cpp index c94a6bdff55..f739779762c 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2HashAgg.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2HashAgg.cpp @@ -135,6 +135,7 @@ CXformGbAgg2HashAgg::Transform(CXformContext *pxfctxt, CXformResult *pxfres, popAgg->FGeneratesDuplicates(), pdrgpcrArgDQA, CXformUtils::FMultiStageAgg(pexpr), CXformUtils::FAggGenBySplitDQAXform(pexpr), popAgg->AggStage(), + popAgg->FAggPushdown(), !CXformUtils::FLocalAggCreatedByEagerAggXform(pexpr)), pexprRel, pexprScalar); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2ScalarAgg.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2ScalarAgg.cpp index b270371663a..7564d830d46 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2ScalarAgg.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2ScalarAgg.cpp @@ -107,6 +107,7 @@ CXformGbAgg2ScalarAgg::Transform(CXformContext *pxfctxt, CXformResult *pxfres, popAgg->FGeneratesDuplicates(), pdrgpcrArgDQA, CXformUtils::FMultiStageAgg(pexpr), CXformUtils::FAggGenBySplitDQAXform(pexpr), popAgg->AggStage(), + popAgg->FAggPushdown(), !CXformUtils::FLocalAggCreatedByEagerAggXform(pexpr)), pexprRel, pexprScalar); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2StreamAgg.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2StreamAgg.cpp index a4875cf222c..2cca4071ce2 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2StreamAgg.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformGbAgg2StreamAgg.cpp @@ -121,6 +121,7 @@ CXformGbAgg2StreamAgg::Transform(CXformContext *pxfctxt, CXformResult *pxfres, popAgg->FGeneratesDuplicates(), pdrgpcrArgDQA, CXformUtils::FMultiStageAgg(pexpr), CXformUtils::FAggGenBySplitDQAXform(pexpr), popAgg->AggStage(), + popAgg->FAggPushdown(), !CXformUtils::FLocalAggCreatedByEagerAggXform(pexpr)), pexprRel, pexprScalar); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformGbAggDedup2HashAggDedup.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformGbAggDedup2HashAggDedup.cpp index b139e6c9f63..2c7994869c5 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformGbAggDedup2HashAggDedup.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformGbAggDedup2HashAggDedup.cpp @@ -83,6 +83,7 @@ CXformGbAggDedup2HashAggDedup::Transform(CXformContext *pxfctxt, popAggDedup->FGeneratesDuplicates(), CXformUtils::FMultiStageAgg(pexpr), CXformUtils::FAggGenBySplitDQAXform(pexpr), popAggDedup->AggStage(), + popAggDedup->FAggPushdown(), !CXformUtils::FLocalAggCreatedByEagerAggXform(pexpr)), pexprRel, pexprScalar); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformGbAggDedup2StreamAggDedup.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformGbAggDedup2StreamAggDedup.cpp index 388e6eed2a0..f6341a96eec 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformGbAggDedup2StreamAggDedup.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformGbAggDedup2StreamAggDedup.cpp @@ -84,6 +84,7 @@ CXformGbAggDedup2StreamAggDedup::Transform(CXformContext *pxfctxt, popAggDedup->FGeneratesDuplicates(), CXformUtils::FMultiStageAgg(pexpr), CXformUtils::FAggGenBySplitDQAXform(pexpr), popAggDedup->AggStage(), + popAggDedup->FAggPushdown(), !CXformUtils::FLocalAggCreatedByEagerAggXform(pexpr)), pexprRel, pexprScalar); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformPushPartialAggBelowJoin.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformPushPartialAggBelowJoin.cpp new file mode 100644 index 00000000000..f551b4a3aef --- /dev/null +++ b/src/backend/gporca/libgpopt/src/xforms/CXformPushPartialAggBelowJoin.cpp @@ -0,0 +1,422 @@ +//--------------------------------------------------------------------------- +// Greenplum Database +// Copyright (C) 2012 EMC Corp. +// +// @filename: +// CXformPushPartialAggBelowJoin.cpp +// +// @doc: +// Implementation of pushing group by below join transform +//--------------------------------------------------------------------------- + +#include "gpopt/xforms/CXformPushPartialAggBelowJoin.h" + +#include "gpos/base.h" + +#include "gpopt/operators/CLogicalGbAgg.h" +#include "gpopt/operators/CLogicalInnerJoin.h" +#include "gpopt/operators/CPatternLeaf.h" +#include "gpopt/xforms/CXformUtils.h" + +using namespace gpopt; + +// ctor +CXformPushPartialAggBelowJoin::CXformPushPartialAggBelowJoin(CMemoryPool *mp) + : // pattern + CXformExploration(GPOS_NEW(mp) CExpression( + mp, GPOS_NEW(mp) CLogicalGbAgg(mp), // global-stage agg + GPOS_NEW(mp) CExpression( + mp, GPOS_NEW(mp) CLogicalGbAgg(mp), // local-stage agg + GPOS_NEW(mp) CExpression( + mp, GPOS_NEW(mp) CLogicalInnerJoin(mp), + GPOS_NEW(mp) CExpression( + mp, GPOS_NEW(mp) CPatternLeaf(mp)), // join outer child + GPOS_NEW(mp) CExpression( + mp, GPOS_NEW(mp) CPatternLeaf(mp)), // join inner child + GPOS_NEW(mp) CExpression( + mp, GPOS_NEW(mp) CPatternTree(mp)) // join predicate + ), + GPOS_NEW(mp) CExpression( + mp, + GPOS_NEW(mp) CPatternTree(mp)) // local scalar project list + ), + GPOS_NEW(mp) CExpression( + mp, GPOS_NEW(mp) CPatternTree(mp)) // global scalar project list + )) +{ +} + +// ctor +CXformPushPartialAggBelowJoin::CXformPushPartialAggBelowJoin( + CExpression *pexprPattern) + : CXformExploration(pexprPattern) +{ +} + + +BOOL +CXformPushPartialAggBelowJoin::FLocalGbAggAlreadyPushed( + CExpression *pexprGlobalGb) +{ + CExpression *pexprLocalGb = (*pexprGlobalGb)[0]; + CExpression *pexprJoin = (*pexprLocalGb)[0]; + CExpression *pexprOuter = (*pexprJoin)[0]; + return pexprOuter->Pop()->Eopid() == COperator::EopLogicalGbAgg && + CLogicalGbAgg::PopConvert(pexprOuter->Pop())->Egbaggtype() == + COperator::EgbaggtypeLocal; +} + + +// compute xform promise for a given expression handle +CXform::EXformPromise +CXformPushPartialAggBelowJoin::Exfp(CExpressionHandle &exprhdl) const +{ + CLogicalGbAgg *popGbAgg = CLogicalGbAgg::PopConvert(exprhdl.Pop()); + if (!popGbAgg->FGlobal()) // multi-stage-but-local-agg + { + return CXform::ExfpNone; + } + + return CXform::ExfpHigh; +} + +CColRefSet * +CXformPushPartialAggBelowJoin::PexprGetGbAggkey(CMemoryPool *mp, + CExpression *pexprGbAgg) +{ + // get the group by key set + CLogicalGbAgg *popGbAgg = CLogicalGbAgg::PopConvert(pexprGbAgg->Pop()); + + CColRefSet *pcrsGbKey = GPOS_NEW(mp) CColRefSet(mp); + CColRefArray *colref_array = popGbAgg->PdrgpcrMinimal(); + if (nullptr == colref_array) + { + colref_array = popGbAgg->Pdrgpcr(); + } + pcrsGbKey->Include(colref_array); + return pcrsGbKey; +} + +// always get the outer join key +CColRefSet * +CXformPushPartialAggBelowJoin::PcrsJoinKey(CMemoryPool *mp, + CExpression *pexprOuter, + CExpression *pexprInner, + CExpression *pexprScalar) +{ + CColRefSet *prcsOuterOutput = pexprOuter->DeriveOutputColumns(); + CColRefSet *prcsInnerOutput = pexprInner->DeriveOutputColumns(); + CColRefSet *pcrsFKey = GPOS_NEW(mp) CColRefSet(mp); + + CExpressionArray *pdrgpexpr = + CPredicateUtils::PdrgpexprConjuncts(mp, pexprScalar); + + const ULONG ulConjuncts = pdrgpexpr->Size(); + for (ULONG ul = 0; ul < ulConjuncts; ul++) + { + CExpression *pexprConjunct = (*pdrgpexpr)[ul]; + if (!CPredicateUtils::FPlainEquality(pexprConjunct)) + { + continue; + } + + CColRef *pcrFst = const_cast( + CScalarIdent::PopConvert((*pexprConjunct)[0]->Pop())->Pcr()); + CColRef *pcrSnd = const_cast( + CScalarIdent::PopConvert((*pexprConjunct)[1]->Pop())->Pcr()); + if (prcsOuterOutput->FMember(pcrFst) && + prcsInnerOutput->FMember(pcrSnd)) + { + pcrsFKey->Include(pcrFst); + } + else if (prcsOuterOutput->FMember(pcrSnd) && + prcsInnerOutput->FMember(pcrFst)) + { + pcrsFKey->Include(pcrSnd); + } + } + + pdrgpexpr->Release(); + if (pcrsFKey->Size() == 0) + { + pcrsFKey->Release(); + pcrsFKey = nullptr; + } + + return pcrsFKey; +} + + +// Different with CXformUtils::PexprPushGbBelowJoin(will pushdown the one-stage agg) +// Push the partial agg only follow the three rules: +// 1. The keyset of group by in(contains all) the keyset of join +// 2. The output from join outer child contains the scalar from groupby +// - the scalar from groupby is not the groupby key, but it's the output of agg +// 3. The output of group by contains(all) the join scalar used from outer child +// +// Partial agg cannot be pushed through join because +// (1) no group by keysets in(contains all) join keysets, or +// (3) Gb uses columns from both join children, or +// (4) Gb hides columns required for the join scalar child +// +// not like the CXformUtils::PexprPushGbBelowJoin, pushdown a partial agg **NO REQUIRED** +// the unique key in the key of join inner child. +// +// Also we should **NEVER** pushdown the multi-stage agg from `CXformSplitDQA`(the DISTINCT case). +// +std::pair +CXformPushPartialAggBelowJoin::FCanPushLocalGbAggBelowJoin( + CMemoryPool *mp, CExpression *pexprGlobalGb) +{ + // safe to direct extract the child expressions + CExpression *pexprLocalGb = (*pexprGlobalGb)[0]; + + CExpression *pexprJoin = (*pexprLocalGb)[0]; + CExpression *pexprLocalPrjList = (*pexprLocalGb)[1]; + + CExpression *pexprOuter = (*pexprJoin)[0]; + CExpression *pexprInner = (*pexprJoin)[1]; + CExpression *pexprScalar = (*pexprJoin)[2]; + + // prepare the args for the `FCanPushGbAggBelowJoin` + CColRefSet *pcrsJoinOuterChildOutput = pexprOuter->DeriveOutputColumns(); + CColRefSet *pcrsGrpByUsed = pexprLocalPrjList->DeriveUsedColumns(); + CColRefSet *pcrsGrpByOutput = pexprLocalGb->DeriveOutputColumns(); + + BOOL fCanPush; + + // current agg form DQA, can't be pushed, otherwise the result may be wrong + if (!pexprLocalPrjList->PdrgPexpr() || + pexprLocalPrjList->PdrgPexpr()->Size() == 0 || + CLogicalGbAgg::PopConvert(pexprLocalGb->Pop())->PdrgpcrArgDQA() != + nullptr) + { + return std::make_pair(false, true); + } + + // get the group by key set + CColRefSet *pcrsGbKey = PexprGetGbAggkey(mp, pexprLocalGb); + + // get the keyset group by key in join key + CColRefSet *pcrsGbInJoinKey = + PcrsJoinKey(mp, pexprOuter, pexprInner, pexprScalar); + + // get the join scalar used from outer child + CColRefSet *pcrsJoinScalarUsedFromOuter = + GPOS_NEW(mp) CColRefSet(mp, *(pexprScalar->DeriveUsedColumns())); + pcrsJoinScalarUsedFromOuter->Intersection(pcrsJoinOuterChildOutput); + + // check can we pushdown the local agg + fCanPush = CXformUtils::FCanPushGbAggBelowJoin( + pcrsGbKey, pcrsJoinOuterChildOutput, pcrsJoinScalarUsedFromOuter, + pcrsGrpByOutput, pcrsGrpByUsed, pcrsGbInJoinKey); + + pcrsJoinScalarUsedFromOuter->Release(); + pcrsGbKey->Release(); + CRefCount::SafeRelease(pcrsGbInJoinKey); + return std::make_pair(fCanPush, false); +} + +CExpression * +CXformPushPartialAggBelowJoin::PushLocalGbAggBelowJoin( + CMemoryPool *mp, CExpression *pexprGlobalGb) +{ + CExpression *pexprLocalGb = (*pexprGlobalGb)[0]; + CLogicalGbAgg *popGbAgg = CLogicalGbAgg::PopConvert(pexprLocalGb->Pop()); + CExpression *pexprGlobalPrjList = (*pexprGlobalGb)[1]; + + CExpression *pexprJoin = (*pexprLocalGb)[0]; + CExpression *pexprLocalPrjList = (*pexprLocalGb)[1]; + + CExpression *pexprOuter = (*pexprJoin)[0]; + CExpression *pexprInner = (*pexprJoin)[1]; + CExpression *pexprScalar = (*pexprJoin)[2]; + + // get the group by key set + CColRefSet *pcrsGbKey = PexprGetGbAggkey(mp, pexprLocalGb); + + CColRefSet *pcrsJoinOuterChildOutput = pexprOuter->DeriveOutputColumns(); + CLogicalGbAgg *popGbAggNew; + + if (!pcrsJoinOuterChildOutput->ContainsAll(pcrsGbKey)) + { + CColRefSet *pcrsGrpColsNew = GPOS_NEW(mp) CColRefSet(mp); + pcrsGrpColsNew->Include(pcrsGbKey); + pcrsGrpColsNew->Intersection(pcrsJoinOuterChildOutput); + + popGbAggNew = GPOS_NEW(mp) + CLogicalGbAgg(mp, pcrsGrpColsNew->Pdrgpcr(mp), + popGbAgg->Egbaggtype(), popGbAgg->AggStage()); + + pcrsGrpColsNew->Release(); + } + else + { + popGbAgg->AddRef(); + popGbAggNew = popGbAgg; + } + + pcrsGbKey->Release(); + + // recreate a local agg below join, above the join outer expression + pexprOuter->AddRef(); + pexprLocalPrjList->AddRef(); + + popGbAggNew->MarkAggPushdown(); + CExpression *pexprNewGb = GPOS_NEW(mp) + CExpression(mp, popGbAggNew, pexprOuter, pexprLocalPrjList); + + // recreate the join which outer is the local agg + COperator *popJoin = pexprJoin->Pop(); + popJoin->AddRef(); + pexprInner->AddRef(); + pexprScalar->AddRef(); + CExpression *pexprNewJoin = GPOS_NEW(mp) + CExpression(mp, popJoin, pexprNewGb, pexprInner, pexprScalar); + + // recreate the global agg below the join + CLogicalGbAgg *popGlobalGb = + CLogicalGbAgg::PopConvert(pexprGlobalGb->Pop()); + popGlobalGb->Pdrgpcr()->AddRef(); + CLogicalGbAgg *popGlobalGbNew = GPOS_NEW(mp) + CLogicalGbAgg(mp, popGlobalGb->Pdrgpcr(), popGlobalGb->Egbaggtype(), + popGlobalGb->AggStage()); + popGlobalGbNew->MarkAggPushdown(); + + pexprGlobalPrjList->AddRef(); + return GPOS_NEW(mp) + CExpression(mp, popGlobalGbNew, pexprNewJoin, pexprGlobalPrjList); +} + + +// Used to exchange the group by key with join key +// Current groupby should not equal with outer join key but equal with inner join key. +// Also should not be the multi groupby key. +// Then exchange the local agg group by key to the outer join key +CExpression * +CXformPushPartialAggBelowJoin::ExchangeGbkeyFromJoinKey( + CMemoryPool *mp, CExpression *pexprGlobalGb) +{ + CExpression *pexprLocalGb = (*pexprGlobalGb)[0]; + CLogicalGbAgg *popGbAgg = CLogicalGbAgg::PopConvert(pexprLocalGb->Pop()); + CExpression *pexprGlobalPrjList = (*pexprGlobalGb)[1]; + + CExpression *pexprJoin = (*pexprLocalGb)[0]; + CExpression *pexprLocalPrjList = (*pexprLocalGb)[1]; + + CExpression *pexprOuter = (*pexprJoin)[0]; + CExpression *pexprInner = (*pexprJoin)[1]; + CExpression *pexprScalar = (*pexprJoin)[2]; + + CExpression *pexprNew = nullptr; + + // get the group by key set + CColRefSet *pcrsGbKey = PexprGetGbAggkey(mp, pexprLocalGb); + CColRefSet *pcrsGbInJoinKey = + PcrsJoinKey(mp, pexprOuter, pexprInner, pexprScalar); + + if (pcrsGbKey->Size() == 1 && pcrsGbInJoinKey && + pcrsGbInJoinKey->Size() == 1) + { + CColRefSet *pcrsJoinInnerKey = + PcrsJoinKey(mp, pexprInner, pexprOuter, pexprScalar); + + // current group by not in outer and inner join key + if (!pcrsJoinInnerKey || !pcrsGbKey->ContainsAll(pcrsJoinInnerKey)) + { + pcrsGbKey->Release(); + CRefCount::SafeRelease(pcrsJoinInnerKey); + CRefCount::SafeRelease(pcrsGbInJoinKey); + return nullptr; + } + else + { + CRefCount::SafeRelease(pcrsJoinInnerKey); + } + + CColRefArray *pcraGbInJoinKey = pcrsGbInJoinKey->Pdrgpcr(mp); + + // change group by to the join key(another side)mak + CLogicalGbAgg *popGbAggNew = GPOS_NEW(mp) CLogicalGbAgg( + mp, pcraGbInJoinKey, popGbAgg->Egbaggtype(), popGbAgg->AggStage()); + + pexprJoin->AddRef(); + pexprLocalPrjList->AddRef(); + + CExpression *pexprNewLocalGb = GPOS_NEW(mp) + CExpression(mp, popGbAggNew, pexprJoin, pexprLocalPrjList); + + // recreate the global agg also exchange the group by key + CLogicalGbAgg *popGlobalGb = + CLogicalGbAgg::PopConvert(pexprGlobalGb->Pop()); + popGlobalGb->Pdrgpcr()->AddRef(); + COperator *popGlobalGbNew = GPOS_NEW(mp) + CLogicalGbAgg(mp, popGlobalGb->Pdrgpcr(), popGlobalGb->Egbaggtype(), + popGlobalGb->AggStage()); + + pexprGlobalPrjList->AddRef(); + pexprNew = GPOS_NEW(mp) CExpression(mp, popGlobalGbNew, pexprNewLocalGb, + pexprGlobalPrjList); + } + + pcrsGbKey->Release(); + CRefCount::SafeRelease(pcrsGbInJoinKey); + + return pexprNew; +} + +// actual transform +void +CXformPushPartialAggBelowJoin::Transform(CXformContext *pxfctxt, + CXformResult *pxfres, + CExpression *pexpr) const +{ + GPOS_ASSERT(nullptr != pxfctxt); + GPOS_ASSERT(FPromising(pxfctxt->Pmp(), this, pexpr)); + GPOS_ASSERT(FCheckPattern(pexpr)); + + BOOL fCanPush; + BOOL fFailDueDQA; + CMemoryPool *mp = pxfctxt->Pmp(); + + // check current agg already been pushdowned + if (FLocalGbAggAlreadyPushed(pexpr)) + { + return; + } + + CExpression *pexprResult = nullptr; + std::tie(fCanPush, fFailDueDQA) = FCanPushLocalGbAggBelowJoin(mp, pexpr); + + // check the expression can do the pushdown. + if (fCanPush) + { + // do the pushdown + pexprResult = PushLocalGbAggBelowJoin(mp, pexpr); + GPOS_ASSERT(pexprResult); + } + else if (!fFailDueDQA) // no DQA, we can exchange the gb key and try again + { + // exchange the groupby by key + CExpression *pexprNew = ExchangeGbkeyFromJoinKey(mp, pexpr); + if (pexprNew) + { + std::tie(fCanPush, fFailDueDQA) = + FCanPushLocalGbAggBelowJoin(mp, pexprNew); + + // should not fail due the DQA + GPOS_ASSERT(!fFailDueDQA); + if (fCanPush) + { + pexprResult = PushLocalGbAggBelowJoin(mp, pexprNew); + GPOS_ASSERT(pexprResult); + } + } + + // release the expression + CRefCount::SafeRelease(pexprNew); + } + + if (pexprResult) + pxfres->Add(pexprResult); +} \ No newline at end of file diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformSimplifyGbAgg.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformSimplifyGbAgg.cpp index 3abb4ffa69a..b7483342bff 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformSimplifyGbAgg.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformSimplifyGbAgg.cpp @@ -61,9 +61,8 @@ CXformSimplifyGbAgg::Exfp(CExpressionHandle &exprhdl) const { CLogicalGbAgg *popAgg = CLogicalGbAgg::PopConvert(exprhdl.Pop()); - GPOS_ASSERT(COperator::EgbaggtypeGlobal == popAgg->Egbaggtype()); - - if (0 == popAgg->Pdrgpcr()->Size() || nullptr != popAgg->PdrgpcrMinimal()) + if (0 == popAgg->Pdrgpcr()->Size() || nullptr != popAgg->PdrgpcrMinimal() + || popAgg->Egbaggtype() != COperator::EgbaggtypeGlobal) { return CXform::ExfpNone; } diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformSplitDQA.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformSplitDQA.cpp index a5ad355f5d3..c4008a885f3 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformSplitDQA.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformSplitDQA.cpp @@ -62,9 +62,11 @@ CXformSplitDQA::CXformSplitDQA(CMemoryPool *mp) CXform::EXformPromise CXformSplitDQA::Exfp(CExpressionHandle &exprhdl) const { + CLogicalGbAgg *popGbAgg = CLogicalGbAgg::PopConvert(exprhdl.Pop()); // do not split aggregate if it is not a global aggregate, has no distinct aggs, has MDQAs, has outer references, // or return types of Agg functions are ambiguous - if (!CLogicalGbAgg::PopConvert(exprhdl.Pop())->FGlobal() || + if (!popGbAgg->FGlobal() || + popGbAgg->FAggPushdown() || 0 == exprhdl.DeriveTotalDistinctAggs(1) || exprhdl.DeriveHasMultipleDistinctAggs(1) || 0 < exprhdl.DeriveOuterReferences()->Size() || diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformSplitGbAgg.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformSplitGbAgg.cpp index 2a55afdc752..25a46d1519a 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformSplitGbAgg.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformSplitGbAgg.cpp @@ -76,9 +76,11 @@ CXformSplitGbAgg::CXformSplitGbAgg(CExpression *pexprPattern) CXform::EXformPromise CXformSplitGbAgg::Exfp(CExpressionHandle &exprhdl) const { + CLogicalGbAgg *popGbAgg = CLogicalGbAgg::PopConvert(exprhdl.Pop()); // do not split aggregate if it is a local aggregate, has distinct aggs, has outer references, // or return types of Agg functions are ambiguous - if (!CLogicalGbAgg::PopConvert(exprhdl.Pop())->FGlobal() || + if (!popGbAgg->FGlobal() || + popGbAgg->FAggPushdown() || // current agg have been pushdown 0 < exprhdl.DeriveTotalDistinctAggs(1) || 0 < exprhdl.DeriveOuterReferences()->Size() || nullptr == exprhdl.PexprScalarExactChild(1) || diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformUtils.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformUtils.cpp index a21e3d963de..b810b058f4d 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformUtils.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformUtils.cpp @@ -560,6 +560,7 @@ CXformUtils::PexprPushGbBelowJoin(CMemoryPool *mp, CExpression *pexpr) pexprOuter->AddRef(); pexprPrjList->AddRef(); + popGbAggNew->MarkAggPushdown(); CExpression *pexprNewGb = GPOS_NEW(mp) CExpression(mp, popGbAggNew, pexprOuter, pexprPrjList); diff --git a/src/backend/gporca/libgpopt/src/xforms/Makefile b/src/backend/gporca/libgpopt/src/xforms/Makefile index a51ddd6f564..03f6293b36d 100644 --- a/src/backend/gporca/libgpopt/src/xforms/Makefile +++ b/src/backend/gporca/libgpopt/src/xforms/Makefile @@ -114,6 +114,7 @@ OBJS = CDecorrelator.o \ CXformPushGbBelowJoin.o \ CXformPushGbDedupBelowJoin.o \ CXformPushGbWithHavingBelowJoin.o \ + CXformPushPartialAggBelowJoin.o \ CXformRemoveSubqDistinct.o \ CXformResult.o \ CXformRightOuterJoin2HashJoin.o \ diff --git a/src/test/regress/expected/agg_pushdown.out b/src/test/regress/expected/agg_pushdown.out index 8e6b8e478ba..2895c8e69a8 100644 --- a/src/test/regress/expected/agg_pushdown.out +++ b/src/test/regress/expected/agg_pushdown.out @@ -1,23 +1,23 @@ --- disable ORCA -SET optimizer TO off; -- Test case group 1: basic functions CREATE TABLE agg_pushdown_parent ( - i int primary key, - x int); + i int, + x int); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'i' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. CREATE TABLE agg_pushdown_child1 ( - j int, - parent int, - v double precision, - PRIMARY KEY (j, parent)); -CREATE INDEX ON agg_pushdown_child1(parent); + j int, + parent int, + v double precision + ) + DISTRIBUTED BY (j, parent); CREATE TABLE agg_pushdown_child2 ( - k int, - parent int, - v double precision, - PRIMARY KEY (k, parent));; + k int, + parent int, + v double precision) + DISTRIBUTED BY (k, parent); INSERT INTO agg_pushdown_parent(i, x) SELECT n, n -FROM generate_series(0, 7) AS s(n); +FROM generate_series(0, 10) AS s(n); INSERT INTO agg_pushdown_child1(j, parent, v) SELECT 128 * i + n, i, random() FROM generate_series(0, 127) AS s(n), agg_pushdown_parent; @@ -27,79 +27,12 @@ FROM generate_series(0, 127) AS s(n), agg_pushdown_parent; ANALYZE agg_pushdown_parent; ANALYZE agg_pushdown_child1; ANALYZE agg_pushdown_child2; -SET enable_nestloop TO on; -SET enable_hashjoin TO off; -SET enable_mergejoin TO off; -- Perform scan of a table, aggregate the result, join it to the other table -- and finalize the aggregation. --- --- In addition, check that functionally dependent column "p.x" can be --- referenced by SELECT although GROUP BY references "p.i". -SET gp_enable_agg_pushdown TO off; -EXPLAIN (VERBOSE on, COSTS off) -SELECT p.x, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 -AS c1 ON c1.parent = p.i GROUP BY p.i; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) - Output: p.x, (avg(c1.v)), p.i - -> HashAggregate - Output: p.x, avg(c1.v), p.i - Group Key: p.i - -> Nested Loop - Output: p.i, p.x, c1.v - Inner Unique: true - -> Redistribute Motion 3:3 (slice2; segments: 3) - Output: c1.v, c1.parent - Hash Key: c1.parent - -> Seq Scan on public.agg_pushdown_child1 c1 - Output: c1.v, c1.parent - -> Memoize - Output: p.x, p.i - Cache Key: c1.parent - Cache Mode: logical - -> Index Scan using agg_pushdown_parent_pkey on public.agg_pushdown_parent p - Output: p.x, p.i - Index Cond: (p.i = c1.parent) - Settings: enable_hashjoin = 'off', enable_mergejoin = 'off', enable_nestloop = 'on', gp_enable_agg_pushdown = 'off', optimizer = 'off' - Optimizer: Postgres query optimizer -(22 rows) - -SET gp_enable_agg_pushdown TO on; -EXPLAIN (VERBOSE on, COSTS off) -SELECT p.x, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 -AS c1 ON c1.parent = p.i GROUP BY p.i; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) - Output: p.x, (avg(c1.v)), p.i - -> Finalize GroupAggregate - Output: p.x, avg(c1.v), p.i - Group Key: p.i - -> Sort - Output: p.i, p.x, (PARTIAL avg(c1.v)) - Sort Key: p.i - -> Nested Loop - Output: p.i, p.x, (PARTIAL avg(c1.v)) - Inner Unique: true - -> Redistribute Motion 3:3 (slice2; segments: 3) - Output: c1.parent, (PARTIAL avg(c1.v)) - Hash Key: c1.parent - -> Partial HashAggregate - Output: c1.parent, PARTIAL avg(c1.v) - Group Key: c1.parent - -> Seq Scan on public.agg_pushdown_child1 c1 - Output: c1.j, c1.parent, c1.v - -> Index Scan using agg_pushdown_parent_pkey on public.agg_pushdown_parent p - Output: p.i, p.x - Index Cond: (p.i = c1.parent) - Settings: enable_hashjoin = 'off', enable_mergejoin = 'off', enable_nestloop = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'off' - Optimizer: Postgres query optimizer -(24 rows) - --- The same for hash join. +SET enable_mergejoin TO off; SET enable_nestloop TO off; SET enable_hashjoin TO on; +SET gp_enable_agg_pushdown TO on; EXPLAIN (VERBOSE on, COSTS off) SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 AS c1 ON c1.parent = p.i GROUP BY p.i; @@ -182,63 +115,73 @@ SET enable_seqscan TO off; EXPLAIN (VERBOSE on, COSTS off) SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 AS c1 ON c1.parent = p.i GROUP BY p.i; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) Output: p.i, (avg(c1.v)) - -> HashAggregate + -> Finalize HashAggregate Output: p.i, avg(c1.v) Group Key: p.i - -> Nested Loop - Output: p.i, c1.v - Inner Unique: true - -> Redistribute Motion 3:3 (slice2; segments: 3) - Output: c1.v, c1.parent - Hash Key: c1.parent - -> Index Scan using agg_pushdown_child1_parent_idx on public.agg_pushdown_child1 c1 - Output: c1.v, c1.parent - -> Memoize - Output: p.i - Cache Key: c1.parent - Cache Mode: logical - -> Index Only Scan using agg_pushdown_parent_pkey on public.agg_pushdown_parent p - Output: p.i - Index Cond: (p.i = c1.parent) - Settings: enable_hashjoin = 'on', enable_mergejoin = 'on', enable_nestloop = 'on', enable_seqscan = 'off', gp_enable_agg_pushdown = 'off', optimizer = 'off' + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: p.i, (PARTIAL avg(c1.v)) + Hash Key: p.i + -> Partial GroupAggregate + Output: p.i, PARTIAL avg(c1.v) + Group Key: p.i + -> Merge Join + Output: p.i, c1.v + Merge Cond: (p.i = c1.parent) + -> Sort + Output: p.i + Sort Key: p.i + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + -> Sort + Output: c1.v, c1.parent + Sort Key: c1.parent + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.v, c1.parent + Settings: enable_hashjoin = 'on', enable_mergejoin = 'on', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'off', gp_enable_agg_pushdown = 'off', optimizer = 'off' Optimizer: Postgres query optimizer -(22 rows) +(28 rows) SET gp_enable_agg_pushdown TO on; EXPLAIN (VERBOSE on, COSTS off) SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 AS c1 ON c1.parent = p.i GROUP BY p.i; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) Output: p.i, (avg(c1.v)) - -> Finalize GroupAggregate + -> Finalize HashAggregate Output: p.i, avg(c1.v) Group Key: p.i - -> Sort + -> Redistribute Motion 3:3 (slice2; segments: 3) Output: p.i, (PARTIAL avg(c1.v)) - Sort Key: p.i - -> Nested Loop + Hash Key: p.i + -> Merge Join Output: p.i, (PARTIAL avg(c1.v)) - Inner Unique: true - -> Redistribute Motion 3:3 (slice2; segments: 3) + Merge Cond: (p.i = c1.parent) + -> Sort + Output: p.i + Sort Key: p.i + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + -> Sort Output: c1.parent, (PARTIAL avg(c1.v)) - Hash Key: c1.parent - -> Partial GroupAggregate + Sort Key: c1.parent + -> Partial HashAggregate Output: c1.parent, PARTIAL avg(c1.v) Group Key: c1.parent - -> Index Scan using agg_pushdown_child1_parent_idx on public.agg_pushdown_child1 c1 + -> Seq Scan on public.agg_pushdown_child1 c1 Output: c1.j, c1.parent, c1.v - -> Index Only Scan using agg_pushdown_parent_pkey on public.agg_pushdown_parent p - Output: p.i - Index Cond: (p.i = c1.parent) - Settings: enable_hashjoin = 'on', enable_mergejoin = 'on', enable_nestloop = 'on', enable_seqscan = 'off', gp_enable_agg_pushdown = 'on', optimizer = 'off' + Settings: enable_hashjoin = 'on', enable_mergejoin = 'on', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'off', gp_enable_agg_pushdown = 'on', optimizer = 'off' Optimizer: Postgres query optimizer -(24 rows) +(28 rows) SET enable_seqscan TO on; -- Join "c1" to "p.x" column, i.e. one that is not in the GROUP BY clause. The @@ -324,45 +267,49 @@ EXPLAIN (VERBOSE on, COSTS off) SELECT p.i, avg(c1.v + c2.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 AS c1 ON c1.parent = p.i JOIN agg_pushdown_child2 AS c2 ON c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) - Output: p.i, (avg((c1.v + c2.v))) - -> HashAggregate - Output: p.i, avg((c1.v + c2.v)) - Group Key: p.i - -> Nested Loop - Output: p.i, c1.v, c2.v - Inner Unique: true - -> Redistribute Motion 3:3 (slice2; segments: 3) - Output: c1.v, c1.parent, c2.v, c2.parent - Hash Key: c1.parent + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Finalize GroupAggregate + Output: p.i, avg((c1.v + c2.v)) + Group Key: p.i + -> Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (PARTIAL avg((c1.v + c2.v))) + Merge Key: p.i + -> Partial GroupAggregate + Output: p.i, PARTIAL avg((c1.v + c2.v)) + Group Key: p.i + -> Sort + Output: p.i, c1.v, c2.v + Sort Key: p.i -> Nested Loop - Output: c1.v, c1.parent, c2.v, c2.parent - Inner Unique: true - -> Seq Scan on public.agg_pushdown_child1 c1 - Output: c1.j, c1.parent, c1.v - -> Index Scan using agg_pushdown_child2_pkey on public.agg_pushdown_child2 c2 - Output: c2.k, c2.parent, c2.v - Index Cond: ((c2.k = c1.j) AND (c2.parent = c1.parent)) - -> Memoize - Output: p.i - Cache Key: c1.parent - Cache Mode: logical - -> Index Only Scan using agg_pushdown_parent_pkey on public.agg_pushdown_parent p - Output: p.i - Index Cond: (p.i = c1.parent) - Settings: enable_hashjoin = 'off', enable_mergejoin = 'off', enable_nestloop = 'on', enable_seqscan = 'on', gp_enable_agg_pushdown = 'off', optimizer = 'off' + Output: p.i, c1.v, c2.v + Join Filter: (c1.parent = p.i) + -> Broadcast Motion 3:3 (slice2; segments: 3) + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + -> Materialize + Output: c1.v, c1.parent, c2.v, c2.parent + -> Nested Loop + Output: c1.v, c1.parent, c2.v, c2.parent + Join Filter: ((c1.parent = c2.parent) AND (c1.j = c2.k)) + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.j, c1.parent, c1.v + -> Materialize + Output: c2.v, c2.parent, c2.k + -> Seq Scan on public.agg_pushdown_child2 c2 + Output: c2.v, c2.parent, c2.k + Settings: enable_hashjoin = 'off', enable_mergejoin = 'off', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'off', optimizer = 'off' Optimizer: Postgres query optimizer -(28 rows) +(32 rows) SET gp_enable_agg_pushdown TO on; EXPLAIN (VERBOSE on, COSTS off) SELECT p.i, avg(c1.v + c2.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 AS c1 ON c1.parent = p.i JOIN agg_pushdown_child2 AS c2 ON c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) Output: p.i, (avg((c1.v + c2.v))) -> Finalize GroupAggregate @@ -371,29 +318,33 @@ c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; -> Sort Output: p.i, (PARTIAL avg((c1.v + c2.v))) Sort Key: p.i - -> Nested Loop + -> Redistribute Motion 3:3 (slice2; segments: 3) Output: p.i, (PARTIAL avg((c1.v + c2.v))) - Inner Unique: true - -> Redistribute Motion 3:3 (slice2; segments: 3) - Output: c1.parent, c2.parent, (PARTIAL avg((c1.v + c2.v))) - Hash Key: c1.parent - -> Partial HashAggregate - Output: c1.parent, c2.parent, PARTIAL avg((c1.v + c2.v)) - Group Key: c1.parent - -> Nested Loop - Output: c1.v, c1.parent, c2.v, c2.parent - Inner Unique: true - -> Seq Scan on public.agg_pushdown_child1 c1 - Output: c1.j, c1.parent, c1.v - -> Index Scan using agg_pushdown_child2_pkey on public.agg_pushdown_child2 c2 - Output: c2.k, c2.parent, c2.v - Index Cond: ((c2.k = c1.j) AND (c2.parent = c1.parent)) - -> Index Only Scan using agg_pushdown_parent_pkey on public.agg_pushdown_parent p - Output: p.i - Index Cond: (p.i = c1.parent) - Settings: enable_hashjoin = 'off', enable_mergejoin = 'off', enable_nestloop = 'on', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'off' + Hash Key: p.i + -> Nested Loop + Output: p.i, (PARTIAL avg((c1.v + c2.v))) + Join Filter: (c1.parent = p.i) + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + -> Materialize + Output: c1.parent, c2.parent, (PARTIAL avg((c1.v + c2.v))) + -> Partial HashAggregate + Output: c1.parent, c2.parent, PARTIAL avg((c1.v + c2.v)) + Group Key: c1.parent + -> Nested Loop + Output: c1.v, c1.parent, c2.v, c2.parent + Join Filter: ((c1.parent = c2.parent) AND (c1.j = c2.k)) + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.j, c1.parent, c1.v + -> Materialize + Output: c2.v, c2.parent, c2.k + -> Seq Scan on public.agg_pushdown_child2 c2 + Output: c2.v, c2.parent, c2.k + Settings: enable_hashjoin = 'off', enable_mergejoin = 'off', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'off' Optimizer: Postgres query optimizer -(30 rows) +(34 rows) -- The same for hash join. SET enable_nestloop TO off; @@ -402,8 +353,8 @@ EXPLAIN (VERBOSE on, COSTS off) SELECT p.i, avg(c1.v + c2.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 AS c1 ON c1.parent = p.i JOIN agg_pushdown_child2 AS c2 ON c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) Output: p.i, (avg((c1.v + c2.v))) -> Finalize GroupAggregate @@ -429,7 +380,6 @@ c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; Group Key: c1.parent -> Hash Join Output: c1.v, c1.parent, c2.v, c2.parent - Inner Unique: true Hash Cond: ((c1.parent = c2.parent) AND (c1.j = c2.k)) -> Seq Scan on public.agg_pushdown_child1 c1 Output: c1.j, c1.parent, c1.v @@ -437,9 +387,9 @@ c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; Output: c2.v, c2.parent, c2.k -> Seq Scan on public.agg_pushdown_child2 c2 Output: c2.v, c2.parent, c2.k - Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'off' + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'off' Optimizer: Postgres query optimizer -(35 rows) +(34 rows) -- The same for merge join. SET enable_hashjoin TO off; @@ -449,39 +399,42 @@ EXPLAIN (VERBOSE on, COSTS off) SELECT p.i, avg(c1.v + c2.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 AS c1 ON c1.parent = p.i JOIN agg_pushdown_child2 AS c2 ON c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) Output: p.i, (avg((c1.v + c2.v))) - -> Finalize GroupAggregate + -> HashAggregate Output: p.i, avg((c1.v + c2.v)) Group Key: p.i - -> Merge Join - Output: p.i, (PARTIAL avg((c1.v + c2.v))) - Inner Unique: true - Merge Cond: (c1.parent = p.i) - -> Sort - Output: c1.parent, c2.parent, (PARTIAL avg((c1.v + c2.v))) - Sort Key: c1.parent - -> Redistribute Motion 3:3 (slice2; segments: 3) - Output: c1.parent, c2.parent, (PARTIAL avg((c1.v + c2.v))) - Hash Key: c1.parent - -> Partial HashAggregate - Output: c1.parent, c2.parent, PARTIAL avg((c1.v + c2.v)) - Group Key: c1.parent - -> Merge Join - Output: c1.v, c1.parent, c2.v, c2.parent - Inner Unique: true - Merge Cond: ((c1.j = c2.k) AND (c1.parent = c2.parent)) - -> Index Scan using agg_pushdown_child1_pkey on public.agg_pushdown_child1 c1 - Output: c1.j, c1.parent, c1.v - -> Index Scan using agg_pushdown_child2_pkey on public.agg_pushdown_child2 c2 - Output: c2.k, c2.parent, c2.v - -> Index Only Scan using agg_pushdown_parent_pkey on public.agg_pushdown_parent p - Output: p.i - Settings: enable_hashjoin = 'off', enable_mergejoin = 'on', enable_nestloop = 'off', enable_seqscan = 'off', gp_enable_agg_pushdown = 'on', optimizer = 'off' + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: p.i, c1.v, c2.v + Hash Key: p.i + -> Merge Join + Output: p.i, c1.v, c2.v + Merge Cond: (c1.parent = p.i) + -> Merge Join + Output: c1.v, c1.parent, c2.v, c2.parent + Merge Cond: ((c1.parent = c2.parent) AND (c1.j = c2.k)) + -> Sort + Output: c1.v, c1.parent, c1.j + Sort Key: c1.parent, c1.j + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.v, c1.parent, c1.j + -> Sort + Output: c2.v, c2.parent, c2.k + Sort Key: c2.parent, c2.k + -> Seq Scan on public.agg_pushdown_child2 c2 + Output: c2.v, c2.parent, c2.k + -> Sort + Output: p.i + Sort Key: p.i + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + Settings: enable_hashjoin = 'off', enable_mergejoin = 'on', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'off', gp_enable_agg_pushdown = 'on', optimizer = 'off' Optimizer: Postgres query optimizer -(30 rows) +(33 rows) SET enable_seqscan TO on; -- Clear tables @@ -502,6 +455,7 @@ SET enable_nestloop TO off; SET enable_hashjoin TO on; SET enable_mergejoin TO off; SET gp_enable_agg_pushdown TO ON; +SET optimizer_force_multistage_agg to ON; -- Join key and group key are the same. EXPLAIN (VERBOSE on, COSTS off) SELECT t1.id, SUM(t1.val) FROM t1, t2 WHERE t1.id = t2.id GROUP BY t1.id; @@ -846,7 +800,7 @@ NOTICE: table "nation_pd" does not exist, skipping CREATE TABLE vendor_pd (v_id int, v_name VARCHAR(20)) WITH (APPENDONLY=true, ORIENTATION=column); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'v_id' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -CREATE TABLE customer_pd (c_id int primary key, c_v_id int, c_n_id int, c_type int, c_consumption int); +CREATE TABLE customer_pd (c_id int, c_v_id int, c_n_id int, c_type int, c_consumption int); CREATE TABLE nation_pd (n_id int, n_name VARCHAR(20), n_type int, n_population int) WITH (APPENDONLY=true, ORIENTATION=column); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'n_id' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. @@ -1153,16 +1107,11 @@ DROP TABLE pagg_pd; CREATE TABLE pagg_pd_p (a int, b int); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -CREATE TABLE pagg_pd (c text, d int) inherits (pagg_pd_p) PARTITION BY LIST(c); -ERROR: cannot create partitioned table as inheritance child DROP TABLE IF EXISTS pagg_pd, pagg_pd_p; NOTICE: table "pagg_pd" does not exist, skipping CREATE TABLE pagg_pd_p (a int, b int, c text) PARTITION BY LIST(c); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -CREATE TABLE pagg_pd (d int) inherits (pagg_pd_p); -NOTICE: table has parent, setting distribution columns to match parent table -ERROR: cannot inherit from partitioned table "pagg_pd_p" DROP TABLE IF EXISTS pagg_pd, pagg_pd_p; NOTICE: table "pagg_pd" does not exist, skipping CREATE TABLE pagg_pd_p (a int, b int); @@ -1234,7 +1183,7 @@ SELECT t1.c, sum(t1.a) DROP TABLE pagg_pd, pagg_pd_p; RESET enable_incremental_sort; -- Clear settings -SET optimizer TO default; +RESET optimizer_force_multistage_agg; SET gp_enable_agg_pushdown TO off; SET enable_seqscan TO on; SET enable_nestloop TO on; diff --git a/src/test/regress/expected/agg_pushdown_optimizer.out b/src/test/regress/expected/agg_pushdown_optimizer.out new file mode 100644 index 00000000000..af0b16315e9 --- /dev/null +++ b/src/test/regress/expected/agg_pushdown_optimizer.out @@ -0,0 +1,1113 @@ +-- Test case group 1: basic functions +CREATE TABLE agg_pushdown_parent ( + i int, + x int); +CREATE TABLE agg_pushdown_child1 ( + j int, + parent int, + v double precision + ) + DISTRIBUTED BY (j, parent); +CREATE TABLE agg_pushdown_child2 ( + k int, + parent int, + v double precision) + DISTRIBUTED BY (k, parent); +INSERT INTO agg_pushdown_parent(i, x) +SELECT n, n +FROM generate_series(0, 10) AS s(n); +INSERT INTO agg_pushdown_child1(j, parent, v) +SELECT 128 * i + n, i, random() +FROM generate_series(0, 127) AS s(n), agg_pushdown_parent; +INSERT INTO agg_pushdown_child2(k, parent, v) +SELECT 128 * i + n, i, random() +FROM generate_series(0, 127) AS s(n), agg_pushdown_parent; +ANALYZE agg_pushdown_parent; +ANALYZE agg_pushdown_child1; +ANALYZE agg_pushdown_child2; +-- Perform scan of a table, aggregate the result, join it to the other table +-- and finalize the aggregation. +SET enable_mergejoin TO off; +SET enable_nestloop TO off; +SET enable_hashjoin TO on; +SET gp_enable_agg_pushdown TO on; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 +AS c1 ON c1.parent = p.i GROUP BY p.i; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg(c1.v)) + -> Finalize HashAggregate + Output: p.i, avg(c1.v) + Group Key: p.i + -> Hash Join + Output: p.i, (PARTIAL avg(c1.v)) + Hash Cond: (c1.parent = p.i) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: c1.parent, (PARTIAL avg(c1.v)) + Hash Key: c1.parent + -> Streaming Partial HashAggregate + Output: c1.parent, PARTIAL avg(c1.v) + Group Key: c1.parent + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.parent, c1.v + -> Hash + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(22 rows) + +-- The same for merge join. +SET enable_hashjoin TO off; +SET enable_mergejoin TO on; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 +AS c1 ON c1.parent = p.i GROUP BY p.i; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg(c1.v)) + -> Finalize HashAggregate + Output: p.i, avg(c1.v) + Group Key: p.i + -> Hash Join + Output: p.i, (PARTIAL avg(c1.v)) + Hash Cond: (c1.parent = p.i) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: c1.parent, (PARTIAL avg(c1.v)) + Hash Key: c1.parent + -> Streaming Partial HashAggregate + Output: c1.parent, PARTIAL avg(c1.v) + Group Key: c1.parent + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.parent, c1.v + -> Hash + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + Settings: enable_hashjoin = 'off', enable_mergejoin = 'on', enable_nestloop = 'off', enable_parallel = 'off', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(22 rows) + +-- Restore the default values. +SET enable_nestloop TO on; +SET enable_hashjoin TO on; +-- Scan index on agg_pushdown_child1(parent) column and aggregate the result +-- using AGG_SORTED strategy. +SET gp_enable_agg_pushdown TO off; +SET enable_seqscan TO off; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 +AS c1 ON c1.parent = p.i GROUP BY p.i; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg(c1.v)) + -> Finalize HashAggregate + Output: p.i, avg(c1.v) + Group Key: p.i + -> Hash Join + Output: p.i, (PARTIAL avg(c1.v)) + Hash Cond: (c1.parent = p.i) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: c1.parent, (PARTIAL avg(c1.v)) + Hash Key: c1.parent + -> Streaming Partial HashAggregate + Output: c1.parent, PARTIAL avg(c1.v) + Group Key: c1.parent + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.parent, c1.v + -> Hash + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + Settings: enable_hashjoin = 'on', enable_mergejoin = 'on', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'off', gp_enable_agg_pushdown = 'off', optimizer = 'on' + Optimizer: GPORCA +(22 rows) + +SET gp_enable_agg_pushdown TO on; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 +AS c1 ON c1.parent = p.i GROUP BY p.i; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg(c1.v)) + -> Finalize HashAggregate + Output: p.i, avg(c1.v) + Group Key: p.i + -> Hash Join + Output: p.i, (PARTIAL avg(c1.v)) + Hash Cond: (c1.parent = p.i) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: c1.parent, (PARTIAL avg(c1.v)) + Hash Key: c1.parent + -> Streaming Partial HashAggregate + Output: c1.parent, PARTIAL avg(c1.v) + Group Key: c1.parent + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.parent, c1.v + -> Hash + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + Settings: enable_hashjoin = 'on', enable_mergejoin = 'on', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'off', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(22 rows) + +SET enable_seqscan TO on; +-- Join "c1" to "p.x" column, i.e. one that is not in the GROUP BY clause. The +-- planner should still use "c1.parent" as grouping expression for partial +-- aggregation, although it's not in the same equivalence class as the GROUP +-- BY expression ("p.i"). The reason to use "c1.parent" for partial +-- aggregation is that this is the only way for "c1" to provide the join +-- expression with input data. +SET gp_enable_agg_pushdown TO off; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 +AS c1 ON c1.parent = p.x GROUP BY p.i; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg(c1.v)) + -> Finalize HashAggregate + Output: p.i, avg(c1.v) + Group Key: p.i + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: p.i, (PARTIAL avg(c1.v)) + Hash Key: p.i + -> Streaming Partial HashAggregate + Output: p.i, PARTIAL avg(c1.v) + Group Key: p.i + -> Hash Join + Output: p.i, c1.v + Hash Cond: (c1.parent = p.x) + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.parent, c1.v + -> Hash + Output: p.i, p.x + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: p.i, p.x + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i, p.x + Settings: enable_hashjoin = 'on', enable_mergejoin = 'on', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'off', optimizer = 'on' + Optimizer: GPORCA +(24 rows) + +SET gp_enable_agg_pushdown TO on; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 +AS c1 ON c1.parent = p.x GROUP BY p.i; + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg(c1.v)) + -> Finalize HashAggregate + Output: p.i, avg(c1.v) + Group Key: p.i + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: p.i, (PARTIAL avg(c1.v)) + Hash Key: p.i + -> Streaming Partial HashAggregate + Output: p.i, PARTIAL avg(c1.v) + Group Key: p.i + -> Hash Join + Output: p.i, c1.v + Hash Cond: (c1.parent = p.x) + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.parent, c1.v + -> Hash + Output: p.i, p.x + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: p.i, p.x + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i, p.x + Settings: enable_hashjoin = 'on', enable_mergejoin = 'on', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(24 rows) + +-- Perform nestloop join between agg_pushdown_child1 and agg_pushdown_child2 +-- and aggregate the result. +SET enable_nestloop TO on; +SET enable_hashjoin TO off; +SET enable_mergejoin TO off; +SET gp_enable_agg_pushdown TO off; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v + c2.v) FROM agg_pushdown_parent AS p JOIN +agg_pushdown_child1 AS c1 ON c1.parent = p.i JOIN agg_pushdown_child2 AS c2 ON +c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg((c1.v + c2.v))) + -> Finalize HashAggregate + Output: p.i, avg((c1.v + c2.v)) + Group Key: p.i + -> Hash Join + Output: p.i, (PARTIAL avg((c1.v + c2.v))) + Hash Cond: (c1.parent = p.i) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: c1.parent, (PARTIAL avg((c1.v + c2.v))) + Hash Key: c1.parent + -> Streaming Partial HashAggregate + Output: c1.parent, PARTIAL avg((c1.v + c2.v)) + Group Key: c1.parent + -> Hash Join + Output: c1.parent, c1.v, c2.v + Hash Cond: ((c1.j = c2.k) AND (c1.parent = c2.parent)) + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.j, c1.parent, c1.v + -> Hash + Output: c2.k, c2.parent, c2.v + -> Seq Scan on public.agg_pushdown_child2 c2 + Output: c2.k, c2.parent, c2.v + -> Hash + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + Settings: enable_hashjoin = 'off', enable_mergejoin = 'off', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'off', optimizer = 'on' + Optimizer: GPORCA +(29 rows) + +SET gp_enable_agg_pushdown TO on; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v + c2.v) FROM agg_pushdown_parent AS p JOIN +agg_pushdown_child1 AS c1 ON c1.parent = p.i JOIN agg_pushdown_child2 AS c2 ON +c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg((c1.v + c2.v))) + -> Finalize HashAggregate + Output: p.i, avg((c1.v + c2.v)) + Group Key: p.i + -> Hash Join + Output: p.i, (PARTIAL avg((c1.v + c2.v))) + Hash Cond: (c1.parent = p.i) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: c1.parent, (PARTIAL avg((c1.v + c2.v))) + Hash Key: c1.parent + -> Streaming Partial HashAggregate + Output: c1.parent, PARTIAL avg((c1.v + c2.v)) + Group Key: c1.parent + -> Hash Join + Output: c1.parent, c1.v, c2.v + Hash Cond: ((c1.j = c2.k) AND (c1.parent = c2.parent)) + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.j, c1.parent, c1.v + -> Hash + Output: c2.k, c2.parent, c2.v + -> Seq Scan on public.agg_pushdown_child2 c2 + Output: c2.k, c2.parent, c2.v + -> Hash + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + Settings: enable_hashjoin = 'off', enable_mergejoin = 'off', enable_nestloop = 'on', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(29 rows) + +-- The same for hash join. +SET enable_nestloop TO off; +SET enable_hashjoin TO on; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v + c2.v) FROM agg_pushdown_parent AS p JOIN +agg_pushdown_child1 AS c1 ON c1.parent = p.i JOIN agg_pushdown_child2 AS c2 ON +c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg((c1.v + c2.v))) + -> Finalize HashAggregate + Output: p.i, avg((c1.v + c2.v)) + Group Key: p.i + -> Hash Join + Output: p.i, (PARTIAL avg((c1.v + c2.v))) + Hash Cond: (c1.parent = p.i) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: c1.parent, (PARTIAL avg((c1.v + c2.v))) + Hash Key: c1.parent + -> Streaming Partial HashAggregate + Output: c1.parent, PARTIAL avg((c1.v + c2.v)) + Group Key: c1.parent + -> Hash Join + Output: c1.parent, c1.v, c2.v + Hash Cond: ((c1.j = c2.k) AND (c1.parent = c2.parent)) + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.j, c1.parent, c1.v + -> Hash + Output: c2.k, c2.parent, c2.v + -> Seq Scan on public.agg_pushdown_child2 c2 + Output: c2.k, c2.parent, c2.v + -> Hash + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(29 rows) + +-- The same for merge join. +SET enable_hashjoin TO off; +SET enable_mergejoin TO on; +SET enable_seqscan TO off; +EXPLAIN (VERBOSE on, COSTS off) +SELECT p.i, avg(c1.v + c2.v) FROM agg_pushdown_parent AS p JOIN +agg_pushdown_child1 AS c1 ON c1.parent = p.i JOIN agg_pushdown_child2 AS c2 ON +c2.parent = p.i WHERE c1.j = c2.k GROUP BY p.i; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: p.i, (avg((c1.v + c2.v))) + -> Finalize HashAggregate + Output: p.i, avg((c1.v + c2.v)) + Group Key: p.i + -> Hash Join + Output: p.i, (PARTIAL avg((c1.v + c2.v))) + Hash Cond: (c1.parent = p.i) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: c1.parent, (PARTIAL avg((c1.v + c2.v))) + Hash Key: c1.parent + -> Streaming Partial HashAggregate + Output: c1.parent, PARTIAL avg((c1.v + c2.v)) + Group Key: c1.parent + -> Hash Join + Output: c1.parent, c1.v, c2.v + Hash Cond: ((c1.j = c2.k) AND (c1.parent = c2.parent)) + -> Seq Scan on public.agg_pushdown_child1 c1 + Output: c1.j, c1.parent, c1.v + -> Hash + Output: c2.k, c2.parent, c2.v + -> Seq Scan on public.agg_pushdown_child2 c2 + Output: c2.k, c2.parent, c2.v + -> Hash + Output: p.i + -> Seq Scan on public.agg_pushdown_parent p + Output: p.i + Settings: enable_hashjoin = 'off', enable_mergejoin = 'on', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'off', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(29 rows) + +SET enable_seqscan TO on; +-- Clear tables +DROP TABLE agg_pushdown_child1; +DROP TABLE agg_pushdown_child2; +DROP TABLE agg_pushdown_parent; +-- Test case group 2: Pushdown with different join keys and group keys. +DROP TABLE IF EXISTS t1, t2; +NOTICE: table "t1" does not exist, skipping +NOTICE: table "t2" does not exist, skipping +CREATE TABLE t1 (id int, val int, comment VARCHAR(20)); +CREATE TABLE t2 (id int, val int); +SET enable_nestloop TO off; +SET enable_hashjoin TO on; +SET enable_mergejoin TO off; +SET gp_enable_agg_pushdown TO ON; +SET optimizer_force_multistage_agg to ON; +-- Join key and group key are the same. +EXPLAIN (VERBOSE on, COSTS off) +SELECT t1.id, SUM(t1.val) FROM t1, t2 WHERE t1.id = t2.id GROUP BY t1.id; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t1.id, (sum(t1.val)) + -> Finalize HashAggregate + Output: t1.id, sum(t1.val) + Group Key: t1.id + -> Hash Join + Output: t1.id, (PARTIAL sum(t1.val)) + Hash Cond: (t1.id = t2.id) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: t1.id, (PARTIAL sum(t1.val)) + Hash Key: t1.id + -> Streaming Partial HashAggregate + Output: t1.id, PARTIAL sum(t1.val) + Group Key: t1.id + -> Redistribute Motion 3:3 (slice3; segments: 3) + Output: t1.id, t1.val + -> Seq Scan on public.t1 + Output: t1.id, t1.val + -> Hash + Output: t2.id + -> Seq Scan on public.t2 + Output: t2.id + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(24 rows) + +-- Join key and group key are different. +EXPLAIN (VERBOSE on, COSTS off) +SELECT t1.val, SUM(t1.id) FROM t1, t2 WHERE t1.id = t2.id GROUP BY t1.val; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t1.val, (sum(t1.id)) + -> Finalize HashAggregate + Output: t1.val, sum(t1.id) + Group Key: t1.val + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: t1.val, (PARTIAL sum(t1.id)) + Hash Key: t1.val + -> Streaming Partial HashAggregate + Output: t1.val, PARTIAL sum(t1.id) + Group Key: t1.val + -> Hash Join + Output: t1.id, t1.val + Hash Cond: (t1.id = t2.id) + -> Seq Scan on public.t1 + Output: t1.id, t1.val + -> Hash + Output: t2.id + -> Seq Scan on public.t2 + Output: t2.id + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(22 rows) + +-- Pushdown with equivclass. +EXPLAIN (VERBOSE on, COSTS off) +SELECT t2.id, SUM(t1.val) FROM t1, t2 WHERE t1.id = t2.id GROUP BY t2.id; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t2.id, (sum(t1.val)) + -> Finalize HashAggregate + Output: t2.id, sum(t1.val) + Group Key: t2.id + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: t2.id, (PARTIAL sum(t1.val)) + Hash Key: t2.id + -> Streaming Partial HashAggregate + Output: t2.id, PARTIAL sum(t1.val) + Group Key: t2.id + -> Redistribute Motion 3:3 (slice3; segments: 3) + Output: t1.val, t2.id + -> Hash Join + Output: t1.val, t2.id + Hash Cond: (t1.id = t2.id) + -> Seq Scan on public.t1 + Output: t1.id, t1.val + -> Hash + Output: t2.id + -> Seq Scan on public.t2 + Output: t2.id + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(24 rows) + +-- Group by column from t2 and aggregate column from t1. +EXPLAIN (VERBOSE on, COSTS off) +SELECT t2.val, SUM(t1.val) FROM t1, t2 WHERE t1.id = t2.id GROUP BY t2.val; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t2.val, (sum(t1.val)) + -> Finalize HashAggregate + Output: t2.val, sum(t1.val) + Group Key: t2.val + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: t2.val, (PARTIAL sum(t1.val)) + Hash Key: t2.val + -> Streaming Partial HashAggregate + Output: t2.val, PARTIAL sum(t1.val) + Group Key: t2.val + -> Hash Join + Output: t1.val, t2.val + Hash Cond: (t1.id = t2.id) + -> Seq Scan on public.t1 + Output: t1.id, t1.val + -> Hash + Output: t2.id, t2.val + -> Seq Scan on public.t2 + Output: t2.id, t2.val + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(22 rows) + +-- Pushdown with multiply group keys. +EXPLAIN (VERBOSE on, COSTS off) +SELECT t1.id, t1.comment, SUM(t1.val) FROM t1, t2 WHERE t1.id = t2.id GROUP BY t1.id, t1.comment; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t1.id, t1.comment, (sum(t1.val)) + -> Finalize HashAggregate + Output: t1.id, t1.comment, sum(t1.val) + Group Key: t1.id, t1.comment + -> Hash Join + Output: t1.id, t1.comment, (PARTIAL sum(t1.val)) + Hash Cond: (t1.id = t2.id) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: t1.id, t1.comment, (PARTIAL sum(t1.val)) + Hash Key: t1.id + -> Streaming Partial HashAggregate + Output: t1.id, t1.comment, PARTIAL sum(t1.val) + Group Key: t1.id, t1.comment + -> Redistribute Motion 3:3 (slice3; segments: 3) + Output: t1.id, t1.val, t1.comment + -> Seq Scan on public.t1 + Output: t1.id, t1.val, t1.comment + -> Hash + Output: t2.id + -> Seq Scan on public.t2 + Output: t2.id + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(24 rows) + +-- Pushdown with multiply join keys. +EXPLAIN (VERBOSE on, COSTS off) +SELECT t1.id, t1.comment, SUM(t1.val) FROM t1, t2 WHERE t1.id = t2.id and t1.val = t2.val GROUP BY t1.id, t1.comment; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t1.id, t1.comment, (sum(t1.val)) + -> HashAggregate + Output: t1.id, t1.comment, sum(t1.val) + Group Key: t1.id, t1.comment + -> Hash Join + Output: t1.id, t1.val, t1.comment + Hash Cond: ((t1.id = t2.id) AND (t1.val = t2.val)) + -> Seq Scan on public.t1 + Output: t1.id, t1.val, t1.comment + -> Hash + Output: t2.id, t2.val + -> Seq Scan on public.t2 + Output: t2.id, t2.val + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(16 rows) + +-- Test above case with different data distributions +INSERT INTO t1 SELECT i, i, 'asd' FROM generate_series(1, 10000) s(i); +ANALYZE t1; +EXPLAIN (VERBOSE on, COSTS off) +SELECT t1.id, t1.comment, SUM(t1.val) FROM t1, t2 WHERE t1.id = t2.id and t1.val = t2.val GROUP BY t1.id, t1.comment; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t1.id, t1.comment, (sum(t1.val)) + -> HashAggregate + Output: t1.id, t1.comment, sum(t1.val) + Group Key: t1.id, t1.comment + -> Hash Join + Output: t1.id, t1.val, t1.comment + Hash Cond: ((t1.id = t2.id) AND (t1.val = t2.val)) + -> Seq Scan on public.t1 + Output: t1.id, t1.val, t1.comment + -> Hash + Output: t2.id, t2.val + -> Seq Scan on public.t2 + Output: t2.id, t2.val + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(16 rows) + +DELETE FROM t1; +INSERT INTO t1 SELECT i % 10, 1, 'asd' FROM generate_series(1, 10000) s(i); +ANALYZE t1; +EXPLAIN (VERBOSE on, COSTS off) +SELECT t1.id, t1.comment, SUM(t1.val) FROM t1, t2 WHERE t1.id = t2.id and t1.val = t2.val GROUP BY t1.id, t1.comment; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t1.id, t1.comment, (sum(t1.val)) + -> HashAggregate + Output: t1.id, t1.comment, sum(t1.val) + Group Key: t1.id, t1.comment + -> Hash Join + Output: t1.id, t1.val, t1.comment + Hash Cond: ((t1.id = t2.id) AND (t1.val = t2.val)) + -> Seq Scan on public.t1 + Output: t1.id, t1.val, t1.comment + -> Hash + Output: t2.id, t2.val + -> Seq Scan on public.t2 + Output: t2.id, t2.val + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(16 rows) + +-- Clear tables +DROP TABLE t1, t2; +-- Test case group 3: Pushdown in subquery and group from subquery. +DROP TABLE IF EXISTS part, lineitem; +NOTICE: table "part" does not exist, skipping +NOTICE: table "lineitem" does not exist, skipping +CREATE TABLE part (p_partkey int, p_size int, p_price int); +CREATE TABLE lineitem (l_orderkey int, l_partkey int, l_amount int); +SET enable_nestloop TO off; +SET enable_hashjoin TO on; +SET enable_mergejoin TO off; +SET gp_enable_agg_pushdown TO ON; +-- Pushdown within subquery. +EXPLAIN (VERBOSE on, COSTS off) +SELECT SUM(slp) FROM + (SELECT l_partkey, SUM(p_price) from lineitem, part + WHERE l_partkey = p_partkey AND p_size < 40 + GROUP BY l_partkey + ORDER BY l_partkey + LIMIT 100) temp(lp, slp) + WHERE slp > 10; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Aggregate + Output: sum((sum(part.p_price))) + -> Result + Output: (sum(part.p_price)) + Filter: ((sum(part.p_price)) > 10) + -> Limit + Output: lineitem.l_partkey, (sum(part.p_price)) + -> Gather Motion 3:1 (slice1; segments: 3) + Output: lineitem.l_partkey, (sum(part.p_price)) + Merge Key: lineitem.l_partkey + -> Finalize GroupAggregate + Output: lineitem.l_partkey, sum(part.p_price) + Group Key: lineitem.l_partkey + -> Sort + Output: lineitem.l_partkey, (PARTIAL sum(part.p_price)) + Sort Key: lineitem.l_partkey + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: lineitem.l_partkey, (PARTIAL sum(part.p_price)) + Hash Key: lineitem.l_partkey + -> Streaming Partial HashAggregate + Output: lineitem.l_partkey, PARTIAL sum(part.p_price) + Group Key: lineitem.l_partkey + -> Redistribute Motion 3:3 (slice3; segments: 3) + Output: lineitem.l_partkey, part.p_price + -> Hash Join + Output: lineitem.l_partkey, part.p_price + Hash Cond: (part.p_partkey = lineitem.l_partkey) + -> Seq Scan on public.part + Output: part.p_partkey, part.p_price + Filter: (part.p_size < 40) + -> Hash + Output: lineitem.l_partkey + -> Redistribute Motion 3:3 (slice4; segments: 3) + Output: lineitem.l_partkey + Hash Key: lineitem.l_partkey + -> Seq Scan on public.lineitem + Output: lineitem.l_partkey + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(39 rows) + +-- Group base on subquery. +EXPLAIN (VERBOSE on, COSTS off) +SELECT p_partkey, SUM(l_amount) FROM + part, (SELECT l_partkey, l_amount + 10 + FROM lineitem ORDER BY l_partkey LIMIT 10000) li(l_partkey, l_amount) + WHERE l_partkey = p_partkey + GROUP BY p_partkey; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: part.p_partkey, (sum(((lineitem.l_amount + 10)))) + -> Finalize HashAggregate + Output: part.p_partkey, sum(((lineitem.l_amount + 10))) + Group Key: part.p_partkey + -> Hash Join + Output: part.p_partkey, (PARTIAL sum(((lineitem.l_amount + 10)))) + Hash Cond: (lineitem.l_partkey = part.p_partkey) + -> Redistribute Motion 1:3 (slice2) + Output: lineitem.l_partkey, (PARTIAL sum(((lineitem.l_amount + 10)))) + Hash Key: lineitem.l_partkey + -> Partial GroupAggregate + Output: lineitem.l_partkey, PARTIAL sum(((lineitem.l_amount + 10))) + Group Key: lineitem.l_partkey + -> Limit + Output: lineitem.l_partkey, ((lineitem.l_amount + 10)) + -> Gather Motion 3:1 (slice3; segments: 3) + Output: lineitem.l_partkey, ((lineitem.l_amount + 10)) + Merge Key: lineitem.l_partkey + -> Result + Output: lineitem.l_partkey, (lineitem.l_amount + 10) + -> Sort + Output: lineitem.l_partkey, lineitem.l_amount + Sort Key: lineitem.l_partkey + -> Seq Scan on public.lineitem + Output: lineitem.l_partkey, lineitem.l_amount + -> Hash + Output: part.p_partkey + -> Seq Scan on public.part + Output: part.p_partkey + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(32 rows) + +-- Clear tables +DROP TABLE part, lineitem; +-- Test case group 4: construct grouped join rel from 2 plain rels +DROP TABLE IF EXISTS vendor_pd, customer_pd, nation_pd; +NOTICE: table "vendor_pd" does not exist, skipping +NOTICE: table "customer_pd" does not exist, skipping +NOTICE: table "nation_pd" does not exist, skipping +CREATE TABLE vendor_pd (v_id int, v_name VARCHAR(20)) WITH (APPENDONLY=true, ORIENTATION=column); +CREATE TABLE customer_pd (c_id int, c_v_id int, c_n_id int, c_type int, c_consumption int); +CREATE TABLE nation_pd (n_id int, n_name VARCHAR(20), n_type int, n_population int) WITH (APPENDONLY=true, ORIENTATION=column); +INSERT INTO nation_pd SELECT i, 'abc', 1, 1 from generate_series(1, 100) s(i); +INSERT INTO customer_pd SELECT i, i % 100, i % 100, 1, 100 from generate_series(1, 10000) s(i); +ANALYZE nation_pd, customer_pd; +-- For each vendor, calculate the total consumption of qualified customers +EXPLAIN (VERBOSE on, COSTS off) +SELECT v_id, v_name, SUM(c_consumption) + FROM vendor_pd, customer_pd, nation_pd + WHERE v_id = c_v_id AND c_n_id = n_id AND c_id > n_population + GROUP BY v_id, v_name; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: vendor_pd.v_id, vendor_pd.v_name, (sum(customer_pd.c_consumption)) + -> Finalize HashAggregate + Output: vendor_pd.v_id, vendor_pd.v_name, sum(customer_pd.c_consumption) + Group Key: vendor_pd.v_id, vendor_pd.v_name + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: vendor_pd.v_id, vendor_pd.v_name, (PARTIAL sum(customer_pd.c_consumption)) + Hash Key: vendor_pd.v_id, vendor_pd.v_name + -> Streaming Partial HashAggregate + Output: vendor_pd.v_id, vendor_pd.v_name, PARTIAL sum(customer_pd.c_consumption) + Group Key: vendor_pd.v_id, vendor_pd.v_name + -> Hash Join + Output: vendor_pd.v_id, vendor_pd.v_name, customer_pd.c_consumption + Hash Cond: (nation_pd.n_id = customer_pd.c_n_id) + Join Filter: (customer_pd.c_id > nation_pd.n_population) + -> Seq Scan on public.nation_pd + Output: nation_pd.n_id, nation_pd.n_population + -> Hash + Output: vendor_pd.v_id, vendor_pd.v_name, customer_pd.c_id, customer_pd.c_n_id, customer_pd.c_consumption + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: vendor_pd.v_id, vendor_pd.v_name, customer_pd.c_id, customer_pd.c_n_id, customer_pd.c_consumption + -> Hash Join + Output: vendor_pd.v_id, vendor_pd.v_name, customer_pd.c_id, customer_pd.c_n_id, customer_pd.c_consumption + Hash Cond: (customer_pd.c_v_id = vendor_pd.v_id) + -> Seq Scan on public.customer_pd + Output: customer_pd.c_id, customer_pd.c_v_id, customer_pd.c_n_id, customer_pd.c_consumption + -> Hash + Output: vendor_pd.v_id, vendor_pd.v_name + -> Broadcast Motion 3:3 (slice4; segments: 3) + Output: vendor_pd.v_id, vendor_pd.v_name + -> Seq Scan on public.vendor_pd + Output: vendor_pd.v_id, vendor_pd.v_name + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(34 rows) + +-- For each vendor/c_type/n_type, calculate the total consumption of qualified customers +EXPLAIN (VERBOSE on, COSTS off) +SELECT v_id, c_type, n_type, SUM(c_consumption) + FROM vendor_pd, customer_pd, nation_pd + WHERE v_id = c_v_id AND c_n_id = n_id AND c_id > n_population + GROUP BY v_id, c_type, n_type; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: vendor_pd.v_id, customer_pd.c_type, nation_pd.n_type, (sum(customer_pd.c_consumption)) + -> Finalize GroupAggregate + Output: vendor_pd.v_id, customer_pd.c_type, nation_pd.n_type, sum(customer_pd.c_consumption) + Group Key: vendor_pd.v_id, customer_pd.c_type, nation_pd.n_type + -> Sort + Output: vendor_pd.v_id, customer_pd.c_type, nation_pd.n_type, (PARTIAL sum(customer_pd.c_consumption)) + Sort Key: vendor_pd.v_id, customer_pd.c_type, nation_pd.n_type + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: vendor_pd.v_id, customer_pd.c_type, nation_pd.n_type, (PARTIAL sum(customer_pd.c_consumption)) + Hash Key: vendor_pd.v_id, customer_pd.c_type, nation_pd.n_type + -> Streaming Partial HashAggregate + Output: vendor_pd.v_id, customer_pd.c_type, nation_pd.n_type, PARTIAL sum(customer_pd.c_consumption) + Group Key: vendor_pd.v_id, customer_pd.c_type, nation_pd.n_type + -> Hash Join + Output: vendor_pd.v_id, customer_pd.c_type, customer_pd.c_consumption, nation_pd.n_type + Hash Cond: (nation_pd.n_id = customer_pd.c_n_id) + Join Filter: (customer_pd.c_id > nation_pd.n_population) + -> Seq Scan on public.nation_pd + Output: nation_pd.n_id, nation_pd.n_type, nation_pd.n_population + -> Hash + Output: vendor_pd.v_id, customer_pd.c_id, customer_pd.c_n_id, customer_pd.c_type, customer_pd.c_consumption + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: vendor_pd.v_id, customer_pd.c_id, customer_pd.c_n_id, customer_pd.c_type, customer_pd.c_consumption + -> Hash Join + Output: vendor_pd.v_id, customer_pd.c_id, customer_pd.c_n_id, customer_pd.c_type, customer_pd.c_consumption + Hash Cond: (customer_pd.c_v_id = vendor_pd.v_id) + -> Seq Scan on public.customer_pd + Output: customer_pd.c_id, customer_pd.c_v_id, customer_pd.c_n_id, customer_pd.c_type, customer_pd.c_consumption + -> Hash + Output: vendor_pd.v_id + -> Broadcast Motion 3:3 (slice4; segments: 3) + Output: vendor_pd.v_id + -> Seq Scan on public.vendor_pd + Output: vendor_pd.v_id + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(37 rows) + +-- For each vendor/n_type, calculate the total consumption of customers from nation with condition. +EXPLAIN (VERBOSE on, COSTS off) +SELECT v_id, v_name, n_type, SUM(c_consumption) + FROM vendor_pd, customer_pd, nation_pd + WHERE v_id = c_v_id AND c_n_id = n_id AND n_population > 100 + GROUP BY v_id, v_name, n_type; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + GroupAggregate + Output: vendor_pd.v_id, vendor_pd.v_name, nation_pd.n_type, sum(customer_pd.c_consumption) + Group Key: vendor_pd.v_id, vendor_pd.v_name, nation_pd.n_type + -> Sort + Output: vendor_pd.v_id, vendor_pd.v_name, customer_pd.c_consumption, nation_pd.n_type + Sort Key: vendor_pd.v_id, vendor_pd.v_name, nation_pd.n_type + -> Hash Join + Output: vendor_pd.v_id, vendor_pd.v_name, customer_pd.c_consumption, nation_pd.n_type + Hash Cond: (customer_pd.c_n_id = nation_pd.n_id) + -> Gather Motion 3:1 (slice1; segments: 3) + Output: vendor_pd.v_id, vendor_pd.v_name, customer_pd.c_n_id, customer_pd.c_consumption + -> Hash Join + Output: vendor_pd.v_id, vendor_pd.v_name, customer_pd.c_n_id, customer_pd.c_consumption + Hash Cond: (customer_pd.c_v_id = vendor_pd.v_id) + -> Seq Scan on public.customer_pd + Output: customer_pd.c_v_id, customer_pd.c_n_id, customer_pd.c_consumption + -> Hash + Output: vendor_pd.v_id, vendor_pd.v_name + -> Broadcast Motion 3:3 (slice2; segments: 3) + Output: vendor_pd.v_id, vendor_pd.v_name + -> Seq Scan on public.vendor_pd + Output: vendor_pd.v_id, vendor_pd.v_name + -> Hash + Output: nation_pd.n_id, nation_pd.n_type + -> Gather Motion 3:1 (slice3; segments: 3) + Output: nation_pd.n_id, nation_pd.n_type + -> Seq Scan on public.nation_pd + Output: nation_pd.n_id, nation_pd.n_type + Filter: (nation_pd.n_population > 100) + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(31 rows) + +-- Clear tables +DROP TABLE vendor_pd, customer_pd, nation_pd; +-- Test case group 4: OLAP-like cases +DROP TABLE IF EXISTS fact, dim; +NOTICE: table "fact" does not exist, skipping +NOTICE: table "dim" does not exist, skipping +CREATE TABLE fact (id int, did int, fact_time int, val int) WITH (APPENDONLY=true, ORIENTATION=column); +CREATE TABLE dim (did int, proj_name varchar(20), brand int, model int); +INSERT INTO dim SELECT i % 100, 1, 1 FROM generate_series(1, 100) s(i); +INSERT INTO fact SELECT i % 10, i % 100, 30, 1 FROM generate_series(1, 10000) s(i); +ANALYZE dim, fact; +-- Test sum fact vals group by dim column +EXPLAIN (VERBOSE on, COSTS off) +SELECT dim.did, sum(val) + FROM fact JOIN dim ON fact.did = dim.did + WHERE fact_time > 10 AND fact_time < 2000 + GROUP BY dim.did; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: dim.did, (sum(fact.val)) + -> Finalize HashAggregate + Output: dim.did, sum(fact.val) + Group Key: dim.did + -> Hash Join + Output: dim.did, (PARTIAL sum(fact.val)) + Hash Cond: (fact.did = dim.did) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: fact.did, (PARTIAL sum(fact.val)) + Hash Key: fact.did + -> Streaming Partial HashAggregate + Output: fact.did, PARTIAL sum(fact.val) + Group Key: fact.did + -> Seq Scan on public.fact + Output: fact.did, fact.val + Filter: ((fact.fact_time > 10) AND (fact.fact_time < 2000)) + -> Hash + Output: dim.did + -> Seq Scan on public.dim + Output: dim.did + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(23 rows) + +EXPLAIN (VERBOSE on, COSTS off) +SELECT dim.proj_name, sum(val) + FROM fact JOIN dim ON fact.did = dim.did + WHERE fact_time > 10 AND fact_time < 2000 + GROUP BY dim.proj_name; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: dim.proj_name, (sum(fact.val)) + -> Finalize HashAggregate + Output: dim.proj_name, sum(fact.val) + Group Key: dim.proj_name + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: dim.proj_name, (PARTIAL sum(fact.val)) + Hash Key: dim.proj_name + -> Streaming Partial HashAggregate + Output: dim.proj_name, PARTIAL sum(fact.val) + Group Key: dim.proj_name + -> Hash Join + Output: fact.val, dim.proj_name + Hash Cond: (fact.did = dim.did) + -> Seq Scan on public.fact + Output: fact.did, fact.val + Filter: ((fact.fact_time > 10) AND (fact.fact_time < 2000)) + -> Hash + Output: dim.did, dim.proj_name + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: dim.did, dim.proj_name + -> Seq Scan on public.dim + Output: dim.did, dim.proj_name + Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(25 rows) + +-- Clear tables +DROP TABLE dim, fact; +-- Test case group 5: partition table and inherit table +SET enable_incremental_sort TO off; +DROP TABLE IF EXISTS pagg_pd; +NOTICE: table "pagg_pd" does not exist, skipping +CREATE TABLE pagg_pd (a int, b int, c text, d int) PARTITION BY LIST(c); +CREATE TABLE pagg_pd_p1 PARTITION OF pagg_pd FOR VALUES IN ('0000', '0001', '0002', '0003', '0004'); +NOTICE: table has parent, setting distribution columns to match parent table +CREATE TABLE pagg_pd_p2 PARTITION OF pagg_pd FOR VALUES IN ('0005', '0006', '0007', '0008'); +NOTICE: table has parent, setting distribution columns to match parent table +CREATE TABLE pagg_pd_p3 PARTITION OF pagg_pd FOR VALUES IN ('0009', '0010', '0011'); +NOTICE: table has parent, setting distribution columns to match parent table +INSERT INTO pagg_pd SELECT i % 20, i % 30, to_char(i % 12, 'FM0000'), i % 30 FROM generate_series(0, 2999) i; +ANALYZE pagg_pd; +EXPLAIN (VERBOSE on, COSTS off) +SELECT t1.c, sum(t1.a) + FROM pagg_pd t1 JOIN pagg_pd t2 ON t1.c < t2.c + GROUP BY t1.c + ORDER BY 1, 2; + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t1.c, (sum(t1.a)) + Merge Key: t1.c, (sum(t1.a)) + -> Sort + Output: t1.c, (sum(t1.a)) + Sort Key: t1.c, (sum(t1.a)) + -> Finalize HashAggregate + Output: t1.c, sum(t1.a) + Group Key: t1.c + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: t1.c, (PARTIAL sum(t1.a)) + Hash Key: t1.c + -> Streaming Partial HashAggregate + Output: t1.c, PARTIAL sum(t1.a) + Group Key: t1.c + -> Nested Loop + Output: t1.a, t1.c + Join Filter: (t1.c < t2.c) + -> Dynamic Seq Scan on public.pagg_pd t1 + Output: t1.a, t1.c + Number of partitions to scan: 3 (out of 3) + -> Materialize + Output: t2.c + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: t2.c + -> Dynamic Seq Scan on public.pagg_pd t2 + Output: t2.c + Number of partitions to scan: 3 (out of 3) + Settings: enable_hashjoin = 'on', enable_incremental_sort = 'off', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(30 rows) + +SELECT t1.c, sum(t1.a) + FROM pagg_pd t1 JOIN pagg_pd t2 ON t1.c < t2.c + GROUP BY t1.c + ORDER BY 1, 2; + c | sum +------+--------- + 0000 | 5500000 + 0001 | 5625000 + 0002 | 5625000 + 0003 | 5500000 + 0004 | 3500000 + 0005 | 3375000 + 0006 | 3125000 + 0007 | 2750000 + 0008 | 1500000 + 0009 | 1125000 + 0010 | 625000 +(11 rows) + +DROP TABLE pagg_pd; +CREATE TABLE pagg_pd_p (a int, b int); +DROP TABLE IF EXISTS pagg_pd, pagg_pd_p; +NOTICE: table "pagg_pd" does not exist, skipping +CREATE TABLE pagg_pd_p (a int, b int, c text) PARTITION BY LIST(c); +DROP TABLE IF EXISTS pagg_pd, pagg_pd_p; +NOTICE: table "pagg_pd" does not exist, skipping +CREATE TABLE pagg_pd_p (a int, b int); +CREATE TABLE pagg_pd (c text, d int) inherits (pagg_pd_p); +NOTICE: table has parent, setting distribution columns to match parent table +INSERT INTO pagg_pd SELECT i % 20, i % 30, to_char(i % 12, 'FM0000'), i % 30 FROM generate_series(0, 2999) i; +ANALYZE pagg_pd; +EXPLAIN (VERBOSE on, COSTS off) +SELECT t1.c, sum(t1.a) + FROM pagg_pd t1 JOIN pagg_pd t2 ON t1.c < t2.c + GROUP BY t1.c + ORDER BY 1, 2; + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: t1.c, (sum(t1.a)) + Merge Key: t1.c, (sum(t1.a)) + -> Sort + Output: t1.c, (sum(t1.a)) + Sort Key: t1.c, (sum(t1.a)) + -> Finalize HashAggregate + Output: t1.c, sum(t1.a) + Group Key: t1.c + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: t1.c, (PARTIAL sum(t1.a)) + Hash Key: t1.c + -> Streaming Partial HashAggregate + Output: t1.c, PARTIAL sum(t1.a) + Group Key: t1.c + -> Nested Loop + Output: t1.a, t1.c + Join Filter: (t1.c < t2.c) + -> Seq Scan on public.pagg_pd t1 + Output: t1.a, t1.c + -> Materialize + Output: t2.c + -> Broadcast Motion 3:3 (slice3; segments: 3) + Output: t2.c + -> Seq Scan on public.pagg_pd t2 + Output: t2.c + Settings: enable_hashjoin = 'on', enable_incremental_sort = 'off', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' + Optimizer: GPORCA +(28 rows) + +SELECT t1.c, sum(t1.a) + FROM pagg_pd t1 JOIN pagg_pd t2 ON t1.c < t2.c + GROUP BY t1.c + ORDER BY 1, 2; + c | sum +------+--------- + 0000 | 5500000 + 0001 | 5625000 + 0002 | 5625000 + 0003 | 5500000 + 0004 | 3500000 + 0005 | 3375000 + 0006 | 3125000 + 0007 | 2750000 + 0008 | 1500000 + 0009 | 1125000 + 0010 | 625000 +(11 rows) + +DROP TABLE pagg_pd, pagg_pd_p; +RESET enable_incremental_sort; +-- Clear settings +RESET optimizer_force_multistage_agg; +SET gp_enable_agg_pushdown TO off; +SET enable_seqscan TO on; +SET enable_nestloop TO on; +SET enable_hashjoin TO on; +SET enable_mergejoin TO on; diff --git a/src/test/regress/sql/agg_pushdown.sql b/src/test/regress/sql/agg_pushdown.sql index 3378f8b64e6..3bdf1bd7571 100644 --- a/src/test/regress/sql/agg_pushdown.sql +++ b/src/test/regress/sql/agg_pushdown.sql @@ -1,28 +1,24 @@ --- disable ORCA -SET optimizer TO off; - -- Test case group 1: basic functions CREATE TABLE agg_pushdown_parent ( - i int primary key, - x int); + i int, + x int); CREATE TABLE agg_pushdown_child1 ( - j int, - parent int, - v double precision, - PRIMARY KEY (j, parent)); - -CREATE INDEX ON agg_pushdown_child1(parent); + j int, + parent int, + v double precision + ) + DISTRIBUTED BY (j, parent); CREATE TABLE agg_pushdown_child2 ( - k int, - parent int, - v double precision, - PRIMARY KEY (k, parent));; + k int, + parent int, + v double precision) + DISTRIBUTED BY (k, parent); INSERT INTO agg_pushdown_parent(i, x) SELECT n, n -FROM generate_series(0, 7) AS s(n); +FROM generate_series(0, 10) AS s(n); INSERT INTO agg_pushdown_child1(j, parent, v) SELECT 128 * i + n, i, random() @@ -36,29 +32,12 @@ ANALYZE agg_pushdown_parent; ANALYZE agg_pushdown_child1; ANALYZE agg_pushdown_child2; -SET enable_nestloop TO on; -SET enable_hashjoin TO off; -SET enable_mergejoin TO off; - -- Perform scan of a table, aggregate the result, join it to the other table -- and finalize the aggregation. --- --- In addition, check that functionally dependent column "p.x" can be --- referenced by SELECT although GROUP BY references "p.i". -SET gp_enable_agg_pushdown TO off; -EXPLAIN (VERBOSE on, COSTS off) -SELECT p.x, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 -AS c1 ON c1.parent = p.i GROUP BY p.i; - -SET gp_enable_agg_pushdown TO on; -EXPLAIN (VERBOSE on, COSTS off) -SELECT p.x, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 -AS c1 ON c1.parent = p.i GROUP BY p.i; - --- The same for hash join. +SET enable_mergejoin TO off; SET enable_nestloop TO off; SET enable_hashjoin TO on; - +SET gp_enable_agg_pushdown TO on; EXPLAIN (VERBOSE on, COSTS off) SELECT p.i, avg(c1.v) FROM agg_pushdown_parent AS p JOIN agg_pushdown_child1 AS c1 ON c1.parent = p.i GROUP BY p.i; @@ -160,6 +139,7 @@ SET enable_hashjoin TO on; SET enable_mergejoin TO off; SET gp_enable_agg_pushdown TO ON; +SET optimizer_force_multistage_agg to ON; -- Join key and group key are the same. EXPLAIN (VERBOSE on, COSTS off) @@ -235,7 +215,7 @@ DROP TABLE part, lineitem; -- Test case group 4: construct grouped join rel from 2 plain rels DROP TABLE IF EXISTS vendor_pd, customer_pd, nation_pd; CREATE TABLE vendor_pd (v_id int, v_name VARCHAR(20)) WITH (APPENDONLY=true, ORIENTATION=column); -CREATE TABLE customer_pd (c_id int primary key, c_v_id int, c_n_id int, c_type int, c_consumption int); +CREATE TABLE customer_pd (c_id int, c_v_id int, c_n_id int, c_type int, c_consumption int); CREATE TABLE nation_pd (n_id int, n_name VARCHAR(20), n_type int, n_population int) WITH (APPENDONLY=true, ORIENTATION=column); INSERT INTO nation_pd SELECT i, 'abc', 1, 1 from generate_series(1, 100) s(i); @@ -316,11 +296,9 @@ SELECT t1.c, sum(t1.a) DROP TABLE pagg_pd; CREATE TABLE pagg_pd_p (a int, b int); -CREATE TABLE pagg_pd (c text, d int) inherits (pagg_pd_p) PARTITION BY LIST(c); DROP TABLE IF EXISTS pagg_pd, pagg_pd_p; CREATE TABLE pagg_pd_p (a int, b int, c text) PARTITION BY LIST(c); -CREATE TABLE pagg_pd (d int) inherits (pagg_pd_p); DROP TABLE IF EXISTS pagg_pd, pagg_pd_p; CREATE TABLE pagg_pd_p (a int, b int); @@ -343,8 +321,7 @@ DROP TABLE pagg_pd, pagg_pd_p; RESET enable_incremental_sort; -- Clear settings -SET optimizer TO default; - +RESET optimizer_force_multistage_agg; SET gp_enable_agg_pushdown TO off; SET enable_seqscan TO on; From 114125776848325026f667c4405f805ecfe3a1d9 Mon Sep 17 00:00:00 2001 From: zhoujiaqi Date: Tue, 1 Jul 2025 16:20:01 +0800 Subject: [PATCH 112/260] Statistic: Add STATISTIC_KIND_NDV_BY_SEGMENTS used to calculate ndistinct on segment When there are aggregation statements in SQL, the optimizer usually generates a logical GbAgg operator. For this type of logical operator, if distinct does not exist, the physical operator can be one-stage or two-stage. The cost of two-stage aggregation will be calculated by NDV(number of distinct values). But the problem is that the statistics in CBDB are "global". It means that the global NDV value may small, but the NDV value on segments can be larger. Therefore, the current commit introduces a new statistical kind which named `STATISTIC_KIND_NDV_BY_SEGMENTS`, this kind of statistical will calculate the NDV on the segment and accumulate each NDV of singlesegment on the master. --- src/backend/commands/analyze.c | 113 +++++++++++++++++++++++++--- src/backend/commands/analyzefuncs.c | 21 +++++- src/backend/commands/analyzeutils.c | 56 ++++++++++++++ src/include/catalog/pg_statistic.h | 12 +++ src/include/commands/analyzeutils.h | 4 + src/include/commands/vacuum.h | 6 +- 6 files changed, 201 insertions(+), 11 deletions(-) diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 32c74f6cd14..265155b065b 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -148,9 +148,6 @@ */ #define GP_HLL_ERROR_MARGIN 0.003 -/* Fix attr number of return record of function gp_acquire_sample_rows */ -#define FIX_ATTR_NUM 3 - /* Per-index data for ANALYZE */ typedef struct AnlIndexData { @@ -170,7 +167,7 @@ static BufferAccessStrategy vac_strategy; Bitmapset **acquire_func_colLargeRowIndexes; double *acquire_func_colLargeRowLength; - +double *acquire_func_colNDVBySeg; static void do_analyze_rel(Relation onerel, VacuumParams *params, List *va_cols, @@ -500,6 +497,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, Bitmapset **colLargeRowIndexes; double *colLargeRowLength; + double *colNDVBySeg; bool sample_needed; int64 AnalyzePageHit = VacuumPageHit; @@ -742,7 +740,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, } colLargeRowIndexes = (Bitmapset **) palloc0(sizeof(Bitmapset *) * max_natts); colLargeRowLength = (double *)palloc0(sizeof(double) * max_natts); - + colNDVBySeg = (double *)palloc0(sizeof(double) * max_natts); if ((params->options & VACOPT_FULLSCAN) != 0) { @@ -776,6 +774,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, */ acquire_func_colLargeRowIndexes = colLargeRowIndexes; acquire_func_colLargeRowLength = colLargeRowLength; + acquire_func_colNDVBySeg = colNDVBySeg; pgstat_progress_update_param(PROGRESS_ANALYZE_PHASE, inh ? PROGRESS_ANALYZE_PHASE_ACQUIRE_SAMPLE_ROWS_INH : PROGRESS_ANALYZE_PHASE_ACQUIRE_SAMPLE_ROWS); @@ -789,6 +788,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, &totalrows, &totaldeadrows); acquire_func_colLargeRowIndexes = NULL; acquire_func_colLargeRowLength = NULL; + acquire_func_colNDVBySeg = NULL; if (ctx) MemoryContextSwitchTo(anl_context); } @@ -881,6 +881,12 @@ do_analyze_rel(Relation onerel, VacuumParams *params, for (i = 0; i < attr_cnt; i++) { VacAttrStats *stats = vacattrstats[i]; + + if (Gp_role == GP_ROLE_DISPATCH && GpPolicyIsPartitioned(onerel->rd_cdbpolicy)) + { + stats->stadistinctbyseg = colNDVBySeg[i]; + } + stats->tupDesc = onerel->rd_att; /* * utilize hyperloglog and merge utilities to derive @@ -1000,6 +1006,11 @@ do_analyze_rel(Relation onerel, VacuumParams *params, stats->stadistinct = n_distinct; } + if (Gp_role == GP_ROLE_EXECUTE) { + Assert(ctx->stadistincts); + ctx->stadistincts[i] = Float8GetDatum(stats->stadistinct); + } + MemoryContextResetAndDeleteChildren(col_context); } @@ -1085,7 +1096,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params, if (RelationStorageIsAO(onerel)) relallvisible = 0; else - relallvisible = AcquireNumberOfAllVisibleBlocks(onerel); + relallvisible = AcquireNumberOfAllVisibleBlocks(onerel); /* Update pg_class for table relation */ vac_update_relstats(onerel, @@ -2684,6 +2695,7 @@ process_sample_rows(Portal portal, */ Bitmapset **colLargeRowIndexes = acquire_func_colLargeRowIndexes; double *colLargeRowLength = acquire_func_colLargeRowLength; + double *colNDVBySeg = acquire_func_colNDVBySeg; TupleDesc relDesc = RelationGetDescr(onerel); TupleDesc funcTupleDesc; TupleDesc sampleTupleDesc; @@ -2723,12 +2735,13 @@ process_sample_rows(Portal portal, * Also create tupledesc of return record of function gp_acquire_sample_rows. */ sampleTupleDesc = CreateTupleDescCopy(relDesc); - ncolumns = numLiveColumns + FIX_ATTR_NUM; + ncolumns = NUM_SAMPLE_FIXED_COLS + numLiveColumns; funcTupleDesc = CreateTemplateTupleDesc(ncolumns); TupleDescInitEntry(funcTupleDesc, (AttrNumber) 1, "", FLOAT8OID, -1, 0); TupleDescInitEntry(funcTupleDesc, (AttrNumber) 2, "", FLOAT8OID, -1, 0); TupleDescInitEntry(funcTupleDesc, (AttrNumber) 3, "", FLOAT8ARRAYOID, -1, 0); + TupleDescInitEntry(funcTupleDesc, (AttrNumber) 4, "", FLOAT8ARRAYOID, -1, 0); for (i = 0; i < relDesc->natts; i++) { @@ -2838,10 +2851,34 @@ process_sample_rows(Portal portal, if (!funcRetNulls[0]) { /* This is a summary row. */ + ArrayType *arrayVal; + Datum *colndv; + bool *nulls; + int numelems; + + Assert(!funcRetNulls[1] && !funcRetNulls[3]); + this_totalrows = DatumGetFloat8(funcRetValues[0]); this_totaldeadrows = DatumGetFloat8(funcRetValues[1]); (*totalrows) += this_totalrows; (*totaldeadrows) += this_totaldeadrows; + + arrayVal = DatumGetArrayTypeP(funcRetValues[3]); + deconstruct_array(arrayVal, FLOAT8OID, 8, true, 'd', + &colndv, &nulls, &numelems); + for (i = 0; i < relDesc->natts; i++) + { + double this_colndv = DatumGetFloat8(colndv[i]); + if (this_colndv < 0) { + Assert(this_colndv >= -1); + colNDVBySeg[i] += abs(this_colndv) * this_totalrows; + } else { + /* if current segment have any data, then ndv won't be 0. + * if current segment have no rows, ndv is 0. + */ + colNDVBySeg[i] += DatumGetFloat8(colndv[i]); + } + } } else { @@ -2887,8 +2924,8 @@ process_sample_rows(Portal portal, continue; } - dnulls[i] = funcRetNulls[FIX_ATTR_NUM + index]; - dvalues[i] = funcRetValues[FIX_ATTR_NUM + index]; + dnulls[i] = funcRetNulls[NUM_SAMPLE_FIXED_COLS + index]; + dvalues[i] = funcRetValues[NUM_SAMPLE_FIXED_COLS + index]; index++; /* Move index to the next result set attribute */ } @@ -4350,6 +4387,33 @@ compute_scalar_stats(VacAttrStatsP stats, slot_idx++; } } + + /* set the ndv from segments */ + if (stats->stadistinctbyseg != 0 && slot_idx < STATISTIC_NUM_SLOTS - 1 + && !OidIsValid(stats->attrtype->typanalyze)) // should not be the array + { + MemoryContext old_context; + Datum *ndvbs; + + /* Must copy the target values into anl_context */ + old_context = MemoryContextSwitchTo(stats->anl_context); + ndvbs = (Datum *) palloc(sizeof(Datum)); + ndvbs[0] = Float8GetDatum(stats->stadistinctbyseg); + MemoryContextSwitchTo(old_context); + + stats->stakind[slot_idx] = STATISTIC_KIND_NDV_BY_SEGMENTS; + stats->staop[slot_idx] = mystats->ltopr; + stats->stacoll[slot_idx] = stats->attrcollid; + + stats->statypid[slot_idx] = FLOAT8OID; + stats->statyplen[slot_idx] = 8; + stats->statypbyval[slot_idx] = true; + stats->statypalign[slot_idx] = TYPALIGN_DOUBLE; + + stats->stavalues[slot_idx] = ndvbs; + stats->numvalues[slot_idx] = 1; + slot_idx++; + } } else if (nonnull_cnt > 0) { @@ -4892,6 +4956,37 @@ merge_leaf_stats(VacAttrStatsP stats, slot_idx++; } } + + // ndistinct by segments calculation + { + old_context = MemoryContextSwitchTo(stats->anl_context); + bool valid; + double ndinstinct_by_segs = 0; + Datum *ndvbs; + + valid = aggregate_leaf_partition_ndvbs( + numPartitions, heaptupleStats, relTuples, &ndinstinct_by_segs); + + if (valid) + { + ndvbs = (Datum *) palloc(sizeof(Datum)); + ndvbs[0] = Float8GetDatum(ndinstinct_by_segs); + + stats->stakind[slot_idx] = STATISTIC_KIND_NDV_BY_SEGMENTS; + stats->staop[slot_idx] = mystats->ltopr; + + stats->statypid[slot_idx] = FLOAT8OID; + stats->statyplen[slot_idx] = 8; + stats->statypbyval[slot_idx] = true; + stats->statypalign[slot_idx] = TYPALIGN_DOUBLE; + + stats->stavalues[slot_idx] = ndvbs; + stats->numvalues[slot_idx] = 1; + slot_idx++; + } + MemoryContextSwitchTo(old_context); + } + for (i = 0; i < numPartitions; i++) { if (HeapTupleIsValid(heaptupleStats[i])) diff --git a/src/backend/commands/analyzefuncs.c b/src/backend/commands/analyzefuncs.c index b97bbee048c..fc965259489 100644 --- a/src/backend/commands/analyzefuncs.c +++ b/src/backend/commands/analyzefuncs.c @@ -131,6 +131,9 @@ gp_acquire_sample_rows(PG_FUNCTION_ARGS) onerel = table_open(relOid, AccessShareLock); relDesc = RelationGetDescr(onerel); + /* will be init in `analyze_rel` */ + ctx->stadistincts = (Datum *) palloc0(relDesc->natts * sizeof(Datum)); + MemSet(¶ms, 0, sizeof(VacuumParams)); params.options |= VACOPT_ANALYZE; params.freeze_min_age = -1; @@ -184,6 +187,13 @@ gp_acquire_sample_rows(PG_FUNCTION_ARGS) FLOAT8ARRAYOID, -1, 0); + /* stadistinct for each live column */ + TupleDescInitEntry(outDesc, + 4, + "stadistinct_array", + FLOAT8ARRAYOID, + -1, + 0); outattno = NUM_SAMPLE_FIXED_COLS + 1; for (attno = 1; attno <= relDesc->natts; attno++) @@ -243,7 +253,8 @@ gp_acquire_sample_rows(PG_FUNCTION_ARGS) HeapTuple relTuple = ctx->sample_rows[ctx->index]; int attno; int outattno; - bool has_toolarge = false; + + bool has_toolarge = false; Datum *relvalues = (Datum *) palloc(relDesc->natts * sizeof(Datum)); bool *relnulls = (bool *) palloc(relDesc->natts * sizeof(bool)); Datum *oversized_cols_length = (Datum *) palloc0(relDesc->natts * sizeof(Datum)); @@ -300,6 +311,9 @@ gp_acquire_sample_rows(PG_FUNCTION_ARGS) outvalues[1] = (Datum) 0; outnulls[1] = true; + outvalues[3] = (Datum) 0; + outnulls[3] = true; + res = heap_form_tuple(outDesc, outvalues, outnulls); ctx->index++; @@ -320,6 +334,11 @@ gp_acquire_sample_rows(PG_FUNCTION_ARGS) outvalues[2] = (Datum) 0; outnulls[2] = true; + + outvalues[3] = PointerGetDatum(construct_array(ctx->stadistincts, relDesc->natts, + FLOAT8OID, 8, true, 'd')); + outnulls[3] = false; + for (outattno = NUM_SAMPLE_FIXED_COLS + 1; outattno <= outDesc->natts; outattno++) { outvalues[outattno - 1] = (Datum) 0; diff --git a/src/backend/commands/analyzeutils.c b/src/backend/commands/analyzeutils.c index 0876517d517..c0d048c9a64 100644 --- a/src/backend/commands/analyzeutils.c +++ b/src/backend/commands/analyzeutils.c @@ -743,6 +743,37 @@ getHistogramMCVTuple(AttStatsSlot * *histSlots, MCVFreqPair **mcvRemaining, } } +static bool +getNdvBySegHeapTuple(AttStatsSlot * *ndvbsSlots, HeapTuple *heaptupleStats, float4 *relTuples, int nParts) +{ + bool valid = true; + + for (int i = 0; i < nParts; i++) + { + if (!HeapTupleIsValid(heaptupleStats[i])) + { + continue; + } + + ndvbsSlots[i] = (AttStatsSlot *) palloc(sizeof(AttStatsSlot)); + (void) get_attstatsslot(ndvbsSlots[i], heaptupleStats[i], + STATISTIC_KIND_NDV_BY_SEGMENTS, InvalidOid, ATTSTATSSLOT_VALUES); + + if ((InvalidOid != ndvbsSlots[i]->valuetype && // result is not empty + // not empty partition with invalid ndvbs + (relTuples[i] > 0 && DatumGetFloat8(ndvbsSlots[i]->values[0]) == 0)) || + // not empty partition without ndvbs + (InvalidOid == ndvbsSlots[i]->valuetype && relTuples[i] > 0)) { + valid = false; + break; + } + + Assert(ndvbsSlots[i]->valuetype == FLOAT8OID); + Assert(ndvbsSlots[i]->nvalues == 1); + } + return valid; +} + /* * Initialize heap by inserting the second histogram bound from each partition histogram. * Input: @@ -1302,3 +1333,28 @@ leaf_parts_analyzed(Oid attrelid, Oid relid_exclude, List *va_cols, int elevel) return !all_parts_empty; } + + +bool +aggregate_leaf_partition_ndvbs(int nParts, + HeapTuple *heaptupleStats, + float4 *relTuples, + float8 *result) +{ + bool valid; + Assert(nParts > 0); + Assert(result); + + AttStatsSlot **ndvbsSlots = (AttStatsSlot **) palloc0((nParts) * sizeof(AttStatsSlot *)); + valid = getNdvBySegHeapTuple(ndvbsSlots, heaptupleStats, relTuples, nParts); + if (valid) { + for (int i = 0; i < nParts; i++) + { + if (ndvbsSlots[i]) { + *result += DatumGetFloat8(ndvbsSlots[i]->values[0]); + } + } + } + + return valid; +} \ No newline at end of file diff --git a/src/include/catalog/pg_statistic.h b/src/include/catalog/pg_statistic.h index 0c81a479a86..2643925d0f3 100644 --- a/src/include/catalog/pg_statistic.h +++ b/src/include/catalog/pg_statistic.h @@ -287,6 +287,18 @@ DECLARE_FOREIGN_KEY((starelid, staattnum), pg_attribute, (attrelid, attnum)); */ #define STATISTIC_KIND_BOUNDS_HISTOGRAM 7 +/* + * Used to calculate the summary of ndv on the segment. + * It will be used to count the number of rows produced + * when optimizer generating the partial agg node, and + * thus calculate the cost value of the operator. + * + * In the past, partial agg used histogram (on master) + * data to calculate NDV, which may be quite different + * from the NDV on the segment. + */ +#define STATISTIC_KIND_NDV_BY_SEGMENTS 8 + /* * A "hyperloglog" slot stores the hyperloglog_counter created for sampled data. * This hyperloglog_counter data structure is converted into a bytea and stored diff --git a/src/include/commands/analyzeutils.h b/src/include/commands/analyzeutils.h index f07339a598d..33ca85d458a 100644 --- a/src/include/commands/analyzeutils.h +++ b/src/include/commands/analyzeutils.h @@ -61,4 +61,8 @@ extern AttrNumber fetch_leaf_attnum(Oid leafRelid, const char* attname); extern HeapTuple fetch_leaf_att_stats(Oid leafRelid, AttrNumber leafAttNum); extern bool leaf_parts_analyzed(Oid attrelid, Oid relid_exclude, List *va_cols, int elevel); +extern bool aggregate_leaf_partition_ndvbs(int nParts, + HeapTuple *heaptupleStats, + float4 *relTuples, + float8 *result); #endif /* ANALYZEUTILS_H */ diff --git a/src/include/commands/vacuum.h b/src/include/commands/vacuum.h index 8e99c8fd70c..e33d39973c0 100644 --- a/src/include/commands/vacuum.h +++ b/src/include/commands/vacuum.h @@ -150,6 +150,7 @@ typedef struct VacAttrStats float4 stanullfrac; /* fraction of entries that are NULL */ int32 stawidth; /* average width of column values */ float4 stadistinct; /* # distinct values */ + double stadistinctbyseg; /* # distinct values by segments*/ int16 stakind[STATISTIC_NUM_SLOTS]; Oid staop[STATISTIC_NUM_SLOTS]; Oid stacoll[STATISTIC_NUM_SLOTS]; @@ -323,13 +324,16 @@ typedef struct double totalrows; double totaldeadrows; + /* Only used if current role is excutor */ + Datum* stadistincts; + /* * Result tuple descriptor. Each returned row consists of three "fixed" * columns, plus all the columns of the sampled table (excluding dropped * columns). */ TupleDesc outDesc; -#define NUM_SAMPLE_FIXED_COLS 3 +#define NUM_SAMPLE_FIXED_COLS 4 /* SRF state, to track which rows have already been returned. */ int index; From 7e7aeb0777972f12f8ff513bb57bc383512b006f Mon Sep 17 00:00:00 2001 From: zhoujiaqi Date: Tue, 1 Jul 2025 17:23:54 +0800 Subject: [PATCH 113/260] ORCA: Make partial agg use the ndistinct generated by segment to calculate the output rows A new statistic STATISTIC_KIND_NDV_BY_SEGMENTS(hereinafter referred to as NDVOnSeg) was added in the previous commit and is applied to ORCA in the current commit. Due to the limited slots of statskind, not all cases have NDVOnSeg statistics. However, if the current colstats has NDVOnSeg, NDVOnSeg will be used first, otherwise, ORCA will fall back to using the histogram to calculate NDV (the calculation result is close to the NDV in pg_statistic). In fact, I think this commit is quite safe, because I only changed the NDV value in `CColStats`, which means that the cost calculation will be more accurate when the GbAgg operator is closer to the Scan operator. --- .../expected/bfv_aggregate_optimizer.out | 2 +- .../regress/expected/incremental_analyze.out | 2 +- .../regress/expected/olap_plans_optimizer.out | 116 +++++++-------- .../expected/subselect_gp_optimizer.out | 100 ++++++------- .../translate/CTranslatorRelcacheToDXL.cpp | 20 ++- .../include/gpopt/operators/CLogicalGbAgg.h | 9 +- .../gporca/libgpopt/src/base/CCostContext.cpp | 4 +- .../libgpopt/src/mdcache/CMDAccessor.cpp | 4 +- .../src/operators/CLogicalDifference.cpp | 3 +- .../libgpopt/src/operators/CLogicalGbAgg.cpp | 9 +- .../operators/CLogicalGbAggDeduplicate.cpp | 3 +- .../src/operators/CLogicalIntersect.cpp | 3 +- .../libgpopt/src/operators/CLogicalUnion.cpp | 3 +- .../dxl/parser/CParseHandlerColStats.h | 3 + .../parser/CParseHandlerStatsDerivedColumn.h | 3 + .../include/naucrates/dxl/xml/dxltokens.h | 1 + .../include/naucrates/md/CDXLColStats.h | 11 +- .../naucrates/md/CDXLStatsDerivedColumn.h | 12 +- .../include/naucrates/md/IMDColStats.h | 3 + .../statistics/CGroupByStatsProcessor.h | 3 +- .../include/naucrates/statistics/CHistogram.h | 12 ++ .../naucrates/statistics/CStatisticsUtils.h | 12 +- .../gporca/libnaucrates/src/CDXLUtils.cpp | 4 +- .../libnaucrates/src/md/CDXLColStats.cpp | 12 +- .../src/md/CDXLStatsDerivedColumn.cpp | 3 +- .../src/parser/CParseHandlerColStats.cpp | 16 +- .../CParseHandlerStatsDerivedColumn.cpp | 13 +- .../src/statistics/CFilterStatsProcessor.cpp | 6 +- .../src/statistics/CGroupByStatsProcessor.cpp | 5 +- .../src/statistics/CHistogram.cpp | 64 +++++--- .../CLeftOuterJoinStatsProcessor.cpp | 3 +- .../CLeftSemiJoinStatsProcessor.cpp | 3 +- .../src/statistics/CProjectStatsProcessor.cpp | 3 +- .../src/statistics/CStatisticsUtils.cpp | 32 ++-- .../gporca/libnaucrates/src/xml/dxltokens.cpp | 1 + .../expected/agg_pushdown_optimizer.out | 37 ++--- .../expected/bfv_aggregate_optimizer.out | 2 +- .../regress/expected/gp_dqa_optimizer.out | 110 ++++++-------- src/test/regress/expected/gpsd.out | 16 +- .../regress/expected/incremental_analyze.out | 2 +- src/test/regress/expected/minirepro.out | 16 +- .../regress/expected/olap_plans_optimizer.out | 134 ++++++++--------- .../expected/subselect_gp_optimizer.out | 140 +++++++++--------- 43 files changed, 544 insertions(+), 416 deletions(-) diff --git a/contrib/pax_storage/src/test/regress/expected/bfv_aggregate_optimizer.out b/contrib/pax_storage/src/test/regress/expected/bfv_aggregate_optimizer.out index 72f0a78988c..f8508db62b0 100644 --- a/contrib/pax_storage/src/test/regress/expected/bfv_aggregate_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/bfv_aggregate_optimizer.out @@ -188,7 +188,7 @@ set optimizer_force_multistage_agg = on; select count_operator('select count(*) from multi_stage_test group by b;','GroupAggregate'); count_operator ---------------- - 2 + 1 (1 row) set optimizer_force_multistage_agg = off; diff --git a/contrib/pax_storage/src/test/regress/expected/incremental_analyze.out b/contrib/pax_storage/src/test/regress/expected/incremental_analyze.out index f03df4df785..1808ca8082e 100644 --- a/contrib/pax_storage/src/test/regress/expected/incremental_analyze.out +++ b/contrib/pax_storage/src/test/regress/expected/incremental_analyze.out @@ -1949,7 +1949,7 @@ SELECT staattnum, stakind1, stakind2, stakind3, stakind4, stakind5, FROM pg_statistic WHERE starelid = 'simple_table_no_hll'::regclass; staattnum | stakind1 | stakind2 | stakind3 | stakind4 | stakind5 | stavalues1 | stavalues2 | stavalues3 | stavalues4 | stavalues5 -----------+----------+----------+----------+----------+----------+--------------+------------+------------+------------+------------ - 1 | 2 | 3 | 0 | 0 | 0 | {1,3,5,7,10} | | | | + 1 | 2 | 3 | 8 | 0 | 0 | {1,3,5,7,10} | | {10} | | (1 row) -- Make sure analyze rootpartition option works in an option list diff --git a/contrib/pax_storage/src/test/regress/expected/olap_plans_optimizer.out b/contrib/pax_storage/src/test/regress/expected/olap_plans_optimizer.out index fda6a3821ca..4f4915b3dd8 100644 --- a/contrib/pax_storage/src/test/regress/expected/olap_plans_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/olap_plans_optimizer.out @@ -79,18 +79,20 @@ select a, b, c, sum(d) from olap_test group by a, b, c; -- If it's not a superset, redistribution is needed. explain select a, sum(d) from olap_test group by a; - QUERY PLAN -------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.55 rows=3 width=12) - -> Finalize HashAggregate (cost=0.00..431.55 rows=1 width=12) + -> Finalize GroupAggregate (cost=0.00..431.55 rows=1 width=12) Group Key: a - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.55 rows=1 width=12) - Hash Key: a - -> Streaming Partial HashAggregate (cost=0.00..431.55 rows=1 width=12) - Group Key: a - -> Seq Scan on olap_test (cost=0.00..431.09 rows=3334 width=8) + -> Sort (cost=0.00..431.55 rows=2 width=12) + Sort Key: a + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.55 rows=2 width=12) + Hash Key: a + -> Streaming Partial HashAggregate (cost=0.00..431.55 rows=2 width=12) + Group Key: a + -> Seq Scan on olap_test (cost=0.00..431.09 rows=3334 width=8) Optimizer: GPORCA -(9 rows) +(11 rows) select a, sum(d) from olap_test group by a; a | sum @@ -185,8 +187,8 @@ set gp_motion_cost_per_row=1.0; -- If the query produces a relatively small number of groups in comparison to -- the number of input rows, two-stage aggregation will be picked. explain select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a), (b, c)); - QUERY PLAN --------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1726.51 rows=152 width=20) -> Sequence (cost=0.00..1726.50 rows=51 width=20) -> Shared Scan (share slice:id 1:0) (cost=0.00..431.19 rows=3334 width=1) @@ -199,18 +201,20 @@ explain select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a) -> Streaming Partial HashAggregate (cost=0.00..431.91 rows=44 width=16) Group Key: share0_ref2.b, share0_ref2.c -> Shared Scan (share slice:id 2:0) (cost=0.00..431.10 rows=3334 width=12) - -> Finalize HashAggregate (cost=0.00..431.47 rows=1 width=12) + -> Finalize GroupAggregate (cost=0.00..431.47 rows=1 width=12) Group Key: share0_ref3.a - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=1 width=12) - Hash Key: share0_ref3.a - -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=1 width=12) - Group Key: share0_ref3.a - -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) + -> Sort (cost=0.00..431.47 rows=2 width=12) + Sort Key: share0_ref3.a + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=2 width=12) + Hash Key: share0_ref3.a + -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=2 width=12) + Group Key: share0_ref3.a + -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) -> HashAggregate (cost=0.00..431.91 rows=7 width=16) Group Key: share0_ref4.a, share0_ref4.b -> Shared Scan (share slice:id 1:0) (cost=0.00..431.10 rows=3334 width=12) Optimizer: GPORCA -(23 rows) +(25 rows) select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a), (b, c)); a | b | c | sum @@ -255,8 +259,8 @@ select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a), (b, c) -- If the query produces a relatively large number of groups in comparison to -- the number of input rows, one-stage aggregation will be picked. explain select a, b, d, sum(d) from olap_test group by grouping sets((a, b), (a), (b, d)); - QUERY PLAN ---------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1727.48 rows=10022 width=20) -> Sequence (cost=0.00..1726.74 rows=3341 width=20) -> Shared Scan (share slice:id 1:0) (cost=0.00..431.17 rows=3334 width=1) @@ -268,18 +272,20 @@ explain select a, b, d, sum(d) from olap_test group by grouping sets((a, b), (a) Hash Key: share0_ref2.b, share0_ref2.d -> Result (cost=0.00..431.06 rows=3334 width=8) -> Shared Scan (share slice:id 2:0) (cost=0.00..431.06 rows=3334 width=8) - -> Finalize HashAggregate (cost=0.00..431.47 rows=1 width=12) + -> Finalize GroupAggregate (cost=0.00..431.47 rows=1 width=12) Group Key: share0_ref3.a - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=1 width=12) - Hash Key: share0_ref3.a - -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=1 width=12) - Group Key: share0_ref3.a - -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) + -> Sort (cost=0.00..431.47 rows=2 width=12) + Sort Key: share0_ref3.a + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=2 width=12) + Hash Key: share0_ref3.a + -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=2 width=12) + Group Key: share0_ref3.a + -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) -> HashAggregate (cost=0.00..431.91 rows=7 width=16) Group Key: share0_ref4.a, share0_ref4.b -> Shared Scan (share slice:id 1:0) (cost=0.00..431.10 rows=3334 width=12) Optimizer: GPORCA -(22 rows) +(24 rows) -- do not execute this query as it would produce too many tuples. -- Test that when the second-stage Agg doesn't try to preserve the @@ -292,8 +298,8 @@ explain select a, b, d, sum(d) from olap_test group by grouping sets((a, b), (a) -- from the Merge Key. set enable_hashagg=off; explain select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a), (b, c)) limit 200; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------- Limit (cost=0.00..1726.51 rows=152 width=20) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1726.51 rows=152 width=20) -> Sequence (cost=0.00..1726.50 rows=51 width=20) @@ -307,18 +313,20 @@ explain select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a) -> Streaming Partial HashAggregate (cost=0.00..431.91 rows=44 width=16) Group Key: share0_ref2.b, share0_ref2.c -> Shared Scan (share slice:id 2:0) (cost=0.00..431.10 rows=3334 width=12) - -> Finalize HashAggregate (cost=0.00..431.47 rows=1 width=12) + -> Finalize GroupAggregate (cost=0.00..431.47 rows=1 width=12) Group Key: share0_ref3.a - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=1 width=12) - Hash Key: share0_ref3.a - -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=1 width=12) - Group Key: share0_ref3.a - -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) + -> Sort (cost=0.00..431.47 rows=2 width=12) + Sort Key: share0_ref3.a + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=2 width=12) + Hash Key: share0_ref3.a + -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=2 width=12) + Group Key: share0_ref3.a + -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) -> HashAggregate (cost=0.00..431.91 rows=7 width=16) Group Key: share0_ref4.a, share0_ref4.b -> Shared Scan (share slice:id 1:0) (cost=0.00..431.10 rows=3334 width=12) Optimizer: GPORCA -(24 rows) +(26 rows) reset enable_hashagg; -- @@ -331,48 +339,40 @@ create table foo_ctas(a int, b int) distributed randomly; insert into foo_ctas select g%5, g%2 from generate_series(1, 100) g; analyze foo_ctas; explain create table bar_ctas as select * from foo_ctas group by a, b distributed by (b); - QUERY PLAN ------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------- Result (cost=0.00..431.10 rows=6 width=8) -> Redistribute Motion 3:3 (slice1; segments: 3) (cost=0.00..431.01 rows=6 width=8) Hash Key: b -> GroupAggregate (cost=0.00..431.01 rows=2 width=8) Group Key: a, b - -> Sort (cost=0.00..431.01 rows=2 width=8) + -> Sort (cost=0.00..431.01 rows=34 width=8) Sort Key: a, b - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.01 rows=2 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=34 width=8) Hash Key: a, b - -> GroupAggregate (cost=0.00..431.01 rows=2 width=8) - Group Key: a, b - -> Sort (cost=0.00..431.01 rows=34 width=8) - Sort Key: a, b - -> Seq Scan on foo_ctas (cost=0.00..431.00 rows=34 width=8) - Optimizer: Pivotal Optimizer (GPORCA) -(15 rows) + -> Seq Scan on foo_ctas (cost=0.00..431.00 rows=34 width=8) + Optimizer: GPORCA +(11 rows) create table bar_ctas as select * from foo_ctas group by a, b distributed by (b); -- Currently, the planner misses this optimization with INSERT, so this -- needs an extra Redistribute Motion. explain insert into bar_ctas select * from foo_ctas group by a, b; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------- Insert on bar_ctas (cost=0.00..431.10 rows=2 width=8) -> Result (cost=0.00..431.01 rows=6 width=12) -> Redistribute Motion 3:3 (slice1; segments: 3) (cost=0.00..431.01 rows=6 width=8) Hash Key: foo_ctas.b -> GroupAggregate (cost=0.00..431.01 rows=2 width=8) Group Key: foo_ctas.a, foo_ctas.b - -> Sort (cost=0.00..431.01 rows=2 width=8) + -> Sort (cost=0.00..431.01 rows=34 width=8) Sort Key: foo_ctas.a, foo_ctas.b - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.01 rows=2 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=34 width=8) Hash Key: foo_ctas.a, foo_ctas.b - -> GroupAggregate (cost=0.00..431.01 rows=2 width=8) - Group Key: foo_ctas.a, foo_ctas.b - -> Sort (cost=0.00..431.01 rows=34 width=8) - Sort Key: foo_ctas.a, foo_ctas.b - -> Seq Scan on foo_ctas (cost=0.00..431.00 rows=34 width=8) - Optimizer: Pivotal Optimizer (GPORCA) -(16 rows) + -> Seq Scan on foo_ctas (cost=0.00..431.00 rows=34 width=8) + Optimizer: GPORCA +(12 rows) drop table foo_ctas; drop table bar_ctas; diff --git a/contrib/pax_storage/src/test/regress/expected/subselect_gp_optimizer.out b/contrib/pax_storage/src/test/regress/expected/subselect_gp_optimizer.out index 41ab2a59a70..8c4b96b6be8 100644 --- a/contrib/pax_storage/src/test/regress/expected/subselect_gp_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/subselect_gp_optimizer.out @@ -1643,110 +1643,102 @@ EXPLAIN SELECT '' AS five, f1 AS "Correlated Field" EXPLAIN select count(*) from (select 1 from tenk1 a where unique1 IN (select hundred from tenk1 b)) ss; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost=0.00..826.06 rows=1 width=8) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..826.06 rows=1 width=8) -> Partial Aggregate (cost=0.00..826.06 rows=1 width=8) -> Nested Loop (cost=0.00..826.06 rows=34 width=1) Join Filter: true - -> GroupAggregate (cost=0.00..431.94 rows=34 width=4) + -> HashAggregate (cost=0.00..431.95 rows=34 width=4) Group Key: b.hundred - -> Sort (cost=0.00..431.94 rows=34 width=4) - Sort Key: b.hundred - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.94 rows=34 width=4) - Hash Key: b.hundred - -> Streaming HashAggregate (cost=0.00..431.94 rows=34 width=4) - Group Key: b.hundred - -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.94 rows=100 width=4) + Hash Key: b.hundred + -> Streaming HashAggregate (cost=0.00..431.94 rows=100 width=4) + Group Key: b.hundred + -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) -> Bitmap Heap Scan on tenk1 a (cost=0.00..394.11 rows=1 width=1) Recheck Cond: (unique1 = b.hundred) -> Bitmap Index Scan on tenk1_unique1 (cost=0.00..0.00 rows=0 width=0) Index Cond: (unique1 = b.hundred) Optimizer: GPORCA -(19 rows) +(17 rows) EXPLAIN select count(distinct ss.ten) from (select ten from tenk1 a where unique1 IN (select hundred from tenk1 b)) ss; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------- - Finalize Aggregate (cost=0.00..826.06 rows=1 width=8) - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..826.06 rows=1 width=8) - -> Partial Aggregate (cost=0.00..826.06 rows=1 width=8) - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..826.06 rows=34 width=4) + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------- + Finalize Aggregate (cost=0.00..826.07 rows=1 width=8) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..826.07 rows=1 width=8) + -> Partial Aggregate (cost=0.00..826.07 rows=1 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..826.07 rows=34 width=4) Hash Key: a.ten - -> Nested Loop (cost=0.00..826.06 rows=34 width=4) + -> Nested Loop (cost=0.00..826.07 rows=34 width=4) Join Filter: true - -> GroupAggregate (cost=0.00..431.94 rows=34 width=4) + -> HashAggregate (cost=0.00..431.95 rows=34 width=4) Group Key: b.hundred - -> Sort (cost=0.00..431.94 rows=34 width=4) - Sort Key: b.hundred - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.94 rows=34 width=4) - Hash Key: b.hundred - -> Streaming HashAggregate (cost=0.00..431.94 rows=34 width=4) - Group Key: b.hundred - -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.94 rows=100 width=4) + Hash Key: b.hundred + -> Streaming HashAggregate (cost=0.00..431.94 rows=100 width=4) + Group Key: b.hundred + -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) -> Bitmap Heap Scan on tenk1 a (cost=0.00..394.12 rows=1 width=4) Recheck Cond: (unique1 = b.hundred) -> Bitmap Index Scan on tenk1_unique1 (cost=0.00..0.00 rows=0 width=0) Index Cond: (unique1 = b.hundred) Optimizer: GPORCA -(21 rows) +(19 rows) EXPLAIN select count(*) from (select 1 from tenk1 a where unique1 IN (select distinct hundred from tenk1 b)) ss; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost=0.00..826.06 rows=1 width=8) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..826.06 rows=1 width=8) -> Partial Aggregate (cost=0.00..826.06 rows=1 width=8) -> Nested Loop (cost=0.00..826.06 rows=34 width=1) Join Filter: true - -> GroupAggregate (cost=0.00..431.94 rows=34 width=4) + -> HashAggregate (cost=0.00..431.95 rows=34 width=4) Group Key: b.hundred - -> Sort (cost=0.00..431.94 rows=34 width=4) - Sort Key: b.hundred - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.94 rows=34 width=4) - Hash Key: b.hundred - -> Streaming HashAggregate (cost=0.00..431.94 rows=34 width=4) - Group Key: b.hundred - -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.94 rows=100 width=4) + Hash Key: b.hundred + -> Streaming HashAggregate (cost=0.00..431.94 rows=100 width=4) + Group Key: b.hundred + -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) -> Bitmap Heap Scan on tenk1 a (cost=0.00..394.11 rows=1 width=1) Recheck Cond: (unique1 = b.hundred) -> Bitmap Index Scan on tenk1_unique1 (cost=0.00..0.00 rows=0 width=0) Index Cond: (unique1 = b.hundred) Optimizer: GPORCA -(19 rows) +(17 rows) EXPLAIN select count(distinct ss.ten) from (select ten from tenk1 a where unique1 IN (select distinct hundred from tenk1 b)) ss; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------- - Finalize Aggregate (cost=0.00..826.06 rows=1 width=8) - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..826.06 rows=1 width=8) - -> Partial Aggregate (cost=0.00..826.06 rows=1 width=8) - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..826.06 rows=34 width=4) + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------- + Finalize Aggregate (cost=0.00..826.07 rows=1 width=8) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..826.07 rows=1 width=8) + -> Partial Aggregate (cost=0.00..826.07 rows=1 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..826.07 rows=34 width=4) Hash Key: a.ten - -> Nested Loop (cost=0.00..826.06 rows=34 width=4) + -> Nested Loop (cost=0.00..826.07 rows=34 width=4) Join Filter: true - -> GroupAggregate (cost=0.00..431.94 rows=34 width=4) + -> HashAggregate (cost=0.00..431.95 rows=34 width=4) Group Key: b.hundred - -> Sort (cost=0.00..431.94 rows=34 width=4) - Sort Key: b.hundred - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.94 rows=34 width=4) - Hash Key: b.hundred - -> Streaming HashAggregate (cost=0.00..431.94 rows=34 width=4) - Group Key: b.hundred - -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.94 rows=100 width=4) + Hash Key: b.hundred + -> Streaming HashAggregate (cost=0.00..431.94 rows=100 width=4) + Group Key: b.hundred + -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) -> Bitmap Heap Scan on tenk1 a (cost=0.00..394.12 rows=1 width=4) Recheck Cond: (unique1 = b.hundred) -> Bitmap Index Scan on tenk1_unique1 (cost=0.00..0.00 rows=0 width=0) Index Cond: (unique1 = b.hundred) Optimizer: GPORCA -(21 rows) +(19 rows) -- -- In case of simple exists query, planner can generate alternative diff --git a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp index 44c719d5412..d0d57338b78 100644 --- a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp +++ b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp @@ -2037,9 +2037,24 @@ CTranslatorRelcacheToDXL::RetrieveColStats(CMemoryPool *mp, std::max(CDouble(0.0), (1 - num_freq_buckets - null_freq)); } + // histogram values extracted from the pg_statistic tuple for a given column + AttStatsSlot ndvbs_slot; + + // get histogram datums from pg_statistic entry + (void) gpdb::GetAttrStatsSlot(&ndvbs_slot, stats_tup, + STATISTIC_KIND_NDV_BY_SEGMENTS, InvalidOid, + ATTSTATSSLOT_VALUES); + CDouble ndvbs = CHistogram::DefaultNDVBySegments; + if (InvalidOid != ndvbs_slot.valuetype) + { + GPOS_ASSERT(ndvbs_slot.nvalues == 1); + ndvbs = CDouble(gpdb::Float8FromDatum(ndvbs_slot.values[0])); + } + // free up allocated datum and float4 arrays gpdb::FreeAttrStatsSlot(&mcv_slot); gpdb::FreeAttrStatsSlot(&hist_slot); + gpdb::FreeAttrStatsSlot(&ndvbs_slot); gpdb::FreeHeapTuple(stats_tup); @@ -2047,8 +2062,7 @@ CTranslatorRelcacheToDXL::RetrieveColStats(CMemoryPool *mp, mdid_col_stats->AddRef(); CDXLColStats *dxl_col_stats = GPOS_NEW(mp) CDXLColStats( mp, mdid_col_stats, md_colname, width, null_freq, distinct_remaining, - freq_remaining, dxl_stats_bucket_array, false /* is_col_stats_missing */ - ); + freq_remaining, ndvbs, dxl_stats_bucket_array, false /* is_col_stats_missing */); return dxl_col_stats; } @@ -2118,7 +2132,7 @@ CTranslatorRelcacheToDXL::GenerateStatsForSystemCols( return GPOS_NEW(mp) CDXLColStats( mp, mdid_col_stats, md_colname, width, null_freq, distinct_remaining, - freq_remaining, dxl_stats_bucket_array, is_col_stats_missing); + freq_remaining, CHistogram::DefaultNDVBySegments, dxl_stats_bucket_array, is_col_stats_missing); } //--------------------------------------------------------------------------- diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CLogicalGbAgg.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CLogicalGbAgg.h index 005b78db1e8..448f807d8a9 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CLogicalGbAgg.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CLogicalGbAgg.h @@ -179,6 +179,13 @@ class CLogicalGbAgg : public CLogicalUnary return (COperator::EgbaggtypeGlobal == m_egbaggtype); } + // is a local aggregate? + BOOL + FLocal() const + { + return (COperator::EgbaggtypeLocal == m_egbaggtype); + } + // minimal grouping columns accessor CColRefArray * PdrgpcrMinimal() const @@ -269,7 +276,7 @@ class CLogicalGbAgg : public CLogicalUnary static IStatistics *PstatsDerive(CMemoryPool *mp, IStatistics *child_stats, CColRefArray *pdrgpcrGroupingCols, ULongPtrArray *pdrgpulComputedCols, - CBitSet *keys); + CBitSet *keys, BOOL isLocal); // print group by aggregate type static IOstream &OsPrintGbAggType(IOstream &os, diff --git a/src/backend/gporca/libgpopt/src/base/CCostContext.cpp b/src/backend/gporca/libgpopt/src/base/CCostContext.cpp index d5bcf38df70..2d69d1d7072 100644 --- a/src/backend/gporca/libgpopt/src/base/CCostContext.cpp +++ b/src/backend/gporca/libgpopt/src/base/CCostContext.cpp @@ -751,7 +751,9 @@ CCostContext::DRowsPerHost() const CStatisticsConfig *stats_config = poptctxt->GetOptimizerConfig()->GetStatsConf(); CDouble dNDVs = CStatisticsUtils::Groups(m_mp, Pstats(), stats_config, - pdrgpul, nullptr /*keys*/); + pdrgpul, nullptr /*keys*/, + false /* is_partial, current distinct key is the distribution key */ + ); pdrgpul->Release(); if (dNDVs < ulHosts) diff --git a/src/backend/gporca/libgpopt/src/mdcache/CMDAccessor.cpp b/src/backend/gporca/libgpopt/src/mdcache/CMDAccessor.cpp index e8c7fa1b19f..78a33f93676 100644 --- a/src/backend/gporca/libgpopt/src/mdcache/CMDAccessor.cpp +++ b/src/backend/gporca/libgpopt/src/mdcache/CMDAccessor.cpp @@ -1192,10 +1192,12 @@ CMDAccessor::GetHistogram(CMemoryPool *mp, IMDId *mdid_type, CDouble null_freq = pmdcolstats->GetNullFreq(); CDouble distinct_remaining = pmdcolstats->GetDistinctRemain(); CDouble freq_remaining = pmdcolstats->GetFreqRemain(); + CDouble distinct_by_segs = pmdcolstats->GetDistinctBySegs(); CHistogram *histogram = GPOS_NEW(mp) CHistogram(mp, buckets, true /*is_well_defined*/, null_freq, - distinct_remaining, freq_remaining, is_col_stats_missing); + distinct_remaining, freq_remaining, distinct_by_segs, + is_col_stats_missing); GPOS_ASSERT_IMP(fBoolType, 3 >= histogram->GetNumDistinct() - CStatistics::Epsilon); diff --git a/src/backend/gporca/libgpopt/src/operators/CLogicalDifference.cpp b/src/backend/gporca/libgpopt/src/operators/CLogicalDifference.cpp index 788feefd5f4..c60cd4f5ac0 100644 --- a/src/backend/gporca/libgpopt/src/operators/CLogicalDifference.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CLogicalDifference.cpp @@ -174,7 +174,8 @@ CLogicalDifference::PstatsDerive(CMemoryPool *mp, CExpressionHandle &exprhdl, mp, LASJ_stats, (*m_pdrgpdrgpcrInput)[0], // we group by the columns of the first child pdrgpulComputedCols, // no computed columns for set ops - nullptr // no keys, use all grouping cols + nullptr, // no keys, use all grouping cols + false // is local agg? ); // clean up diff --git a/src/backend/gporca/libgpopt/src/operators/CLogicalGbAgg.cpp b/src/backend/gporca/libgpopt/src/operators/CLogicalGbAgg.cpp index 6d70f7df0a3..55f060b160a 100644 --- a/src/backend/gporca/libgpopt/src/operators/CLogicalGbAgg.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CLogicalGbAgg.cpp @@ -625,7 +625,9 @@ CLogicalGbAgg::PxfsCandidates(CMemoryPool *mp) const IStatistics * CLogicalGbAgg::PstatsDerive(CMemoryPool *mp, IStatistics *child_stats, CColRefArray *pdrgpcrGroupingCols, - ULongPtrArray *pdrgpulComputedCols, CBitSet *keys) + ULongPtrArray *pdrgpulComputedCols, + CBitSet *keys, + BOOL isLocal) { const ULONG ulGroupingCols = pdrgpcrGroupingCols->Size(); @@ -639,7 +641,7 @@ CLogicalGbAgg::PstatsDerive(CMemoryPool *mp, IStatistics *child_stats, IStatistics *stats = CGroupByStatsProcessor::CalcGroupByStats( mp, dynamic_cast(child_stats), pdrgpulGroupingCols, - pdrgpulComputedCols, keys); + pdrgpulComputedCols, keys, isLocal); // clean up pdrgpulGroupingCols->Release(); @@ -669,7 +671,8 @@ CLogicalGbAgg::PstatsDerive(CMemoryPool *mp, CExpressionHandle &exprhdl, exprhdl.DeriveDefinedColumns(1)->ExtractColIds(mp, pdrgpulComputedCols); IStatistics *stats = PstatsDerive(mp, child_stats, Pdrgpcr(), - pdrgpulComputedCols, nullptr /*keys*/); + pdrgpulComputedCols, nullptr /*keys*/, + FLocal()); pdrgpulComputedCols->Release(); diff --git a/src/backend/gporca/libgpopt/src/operators/CLogicalGbAggDeduplicate.cpp b/src/backend/gporca/libgpopt/src/operators/CLogicalGbAggDeduplicate.cpp index cd42cc813ab..aafce73d352 100644 --- a/src/backend/gporca/libgpopt/src/operators/CLogicalGbAggDeduplicate.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CLogicalGbAggDeduplicate.cpp @@ -255,7 +255,8 @@ CLogicalGbAggDeduplicate::PstatsDerive(CMemoryPool *mp, } IStatistics *stats = CLogicalGbAgg::PstatsDerive(mp, child_stats, Pdrgpcr(), - pdrgpulComputedCols, keys); + pdrgpulComputedCols, keys, + FLocal()); keys->Release(); pdrgpulComputedCols->Release(); diff --git a/src/backend/gporca/libgpopt/src/operators/CLogicalIntersect.cpp b/src/backend/gporca/libgpopt/src/operators/CLogicalIntersect.cpp index efb9691a2db..23e5ee7f30b 100644 --- a/src/backend/gporca/libgpopt/src/operators/CLogicalIntersect.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CLogicalIntersect.cpp @@ -163,7 +163,8 @@ CLogicalIntersect::PstatsDerive(CMemoryPool *mp, CExpressionHandle &exprhdl, mp, pstatsIntersectAll, (*m_pdrgpdrgpcrInput)[0], // we group by the columns of the first child pdrgpulComputedCols, // no computed columns for set ops - nullptr // no keys, use all grouping cols + nullptr, // no keys, use all grouping cols + false ); // clean up pdrgpulComputedCols->Release(); diff --git a/src/backend/gporca/libgpopt/src/operators/CLogicalUnion.cpp b/src/backend/gporca/libgpopt/src/operators/CLogicalUnion.cpp index 178f4ad521e..1a9aaa3314f 100644 --- a/src/backend/gporca/libgpopt/src/operators/CLogicalUnion.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CLogicalUnion.cpp @@ -150,7 +150,8 @@ CLogicalUnion::PstatsDerive(CMemoryPool *mp, CExpressionHandle &exprhdl, mp, pstatsUnionAll, m_pdrgpcrOutput, // we group by the output columns pdrgpulComputedCols, // no computed columns for set ops - nullptr // no keys, use all grouping cols + nullptr, // no keys, use all grouping cols + false ); // clean up diff --git a/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerColStats.h b/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerColStats.h index 9a8c7ddeafd..e594d8cabc7 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerColStats.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerColStats.h @@ -62,6 +62,9 @@ class CParseHandlerColStats : public CParseHandlerMetadataObject // is the column statistics missing in the database BOOL m_is_column_stats_missing; + // ndistinct generated by segments + CDouble m_distinct_by_segs; + // process the start of an element void StartElement( const XMLCh *const element_uri, // URI of element's namespace diff --git a/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerStatsDerivedColumn.h b/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerStatsDerivedColumn.h index 1a8ce378d03..6dc5604de63 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerStatsDerivedColumn.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerStatsDerivedColumn.h @@ -50,6 +50,9 @@ class CParseHandlerStatsDerivedColumn : public CParseHandlerBase // frequency of remaining tuples CDouble m_freq_remaining; + // ndistinct generated by segments + CDouble m_distinct_by_segs; + // derived column stats CDXLStatsDerivedColumn *m_dxl_stats_derived_col; diff --git a/src/backend/gporca/libnaucrates/include/naucrates/dxl/xml/dxltokens.h b/src/backend/gporca/libnaucrates/include/naucrates/dxl/xml/dxltokens.h index a03f4bb92dd..5a61801511a 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/dxl/xml/dxltokens.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/dxl/xml/dxltokens.h @@ -371,6 +371,7 @@ enum Edxltoken EdxltokenColNdvRemain, EdxltokenColFreqRemain, EdxltokenColStatsMissing, + EdxltokenColNdvBySeg, EdxltokenParamId, diff --git a/src/backend/gporca/libnaucrates/include/naucrates/md/CDXLColStats.h b/src/backend/gporca/libnaucrates/include/naucrates/md/CDXLColStats.h index e3d60d288f4..d9c4f0c6416 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/md/CDXLColStats.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/md/CDXLColStats.h @@ -69,6 +69,9 @@ class CDXLColStats : public IMDColStats // is column statistics missing in the database BOOL m_is_col_stats_missing; + // ndistinct generated by segments + CDouble m_distinct_by_segs; + // DXL string for object CWStringDynamic *m_dxl_str = nullptr; @@ -79,7 +82,7 @@ class CDXLColStats : public IMDColStats CDXLColStats(CMemoryPool *mp, CMDIdColStats *mdid_col_stats, CMDName *mdname, CDouble width, CDouble null_freq, CDouble distinct_remaining, CDouble freq_remaining, - CDXLBucketArray *dxl_stats_bucket_array, + CDouble distinct_by_segs, CDXLBucketArray *dxl_stats_bucket_array, BOOL is_col_stats_missing); // dtor @@ -132,6 +135,12 @@ class CDXLColStats : public IMDColStats return m_is_col_stats_missing; } + CDouble + GetDistinctBySegs() const override + { + return m_distinct_by_segs; + } + // get the bucket at the given position const CDXLBucket *GetDXLBucketAt(ULONG ul) const override; diff --git a/src/backend/gporca/libnaucrates/include/naucrates/md/CDXLStatsDerivedColumn.h b/src/backend/gporca/libnaucrates/include/naucrates/md/CDXLStatsDerivedColumn.h index 73c121494c7..bce04068762 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/md/CDXLStatsDerivedColumn.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/md/CDXLStatsDerivedColumn.h @@ -54,6 +54,9 @@ class CDXLStatsDerivedColumn : public CRefCount // frequency of remaining tuples CDouble m_freq_remaining; + // ndistinct generated by segments + CDouble m_distinct_by_segs; + CDXLBucketArray *m_dxl_stats_bucket_array; public: @@ -62,7 +65,7 @@ class CDXLStatsDerivedColumn : public CRefCount // ctor CDXLStatsDerivedColumn(ULONG colid, CDouble width, CDouble null_freq, CDouble distinct_remaining, CDouble freq_remaining, - CDXLBucketArray *dxl_stats_bucket_array); + CDouble distinct_by_segs, CDXLBucketArray *dxl_stats_bucket_array); // dtor ~CDXLStatsDerivedColumn() override; @@ -102,6 +105,13 @@ class CDXLStatsDerivedColumn : public CRefCount return m_freq_remaining; } + // ndistinct generated by segments + CDouble + GetDistinctBySeg() const + { + return m_distinct_by_segs; + } + const CDXLBucketArray *TransformHistogramToDXLBucketArray() const; // serialize bucket in DXL format diff --git a/src/backend/gporca/libnaucrates/include/naucrates/md/IMDColStats.h b/src/backend/gporca/libnaucrates/include/naucrates/md/IMDColStats.h index fbc6a08d39e..7fa5b8aacff 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/md/IMDColStats.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/md/IMDColStats.h @@ -60,6 +60,9 @@ class IMDColStats : public IMDCacheObject // is the columns statistics missing in the database virtual BOOL IsColStatsMissing() const = 0; + // ndistinct generated by segment + virtual CDouble GetDistinctBySegs() const = 0; + // get the bucket at the given position virtual const CDXLBucket *GetDXLBucketAt(ULONG ul) const = 0; }; diff --git a/src/backend/gporca/libnaucrates/include/naucrates/statistics/CGroupByStatsProcessor.h b/src/backend/gporca/libnaucrates/include/naucrates/statistics/CGroupByStatsProcessor.h index 6a0008d67a2..832e8782c6a 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/statistics/CGroupByStatsProcessor.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/statistics/CGroupByStatsProcessor.h @@ -24,7 +24,8 @@ class CGroupByStatsProcessor static CStatistics *CalcGroupByStats(CMemoryPool *mp, const CStatistics *input_stats, ULongPtrArray *GCs, - ULongPtrArray *aggs, CBitSet *keys); + ULongPtrArray *aggs, CBitSet *keys, + BOOL is_partial); }; } // namespace gpnaucrates diff --git a/src/backend/gporca/libnaucrates/include/naucrates/statistics/CHistogram.h b/src/backend/gporca/libnaucrates/include/naucrates/statistics/CHistogram.h index ccc3258a43d..a67944ce697 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/statistics/CHistogram.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/statistics/CHistogram.h @@ -83,6 +83,9 @@ class CHistogram : public gpos::DbgPrintMixin // frequency of tuples not covered in the buckets CDouble m_freq_remaining; + // ndistinct generated by segments + CDouble m_distinct_by_segs; + // has histogram skew been measures BOOL m_skew_was_measured; @@ -232,6 +235,7 @@ class CHistogram : public gpos::DbgPrintMixin CHistogram(CMemoryPool *mp, CBucketArray *histogram_buckets, BOOL is_well_defined, CDouble null_freq, CDouble distinct_remaining, CDouble freq_remaining, + CDouble distinct_by_segs, BOOL is_col_stats_missing = false); // set null frequency @@ -353,6 +357,11 @@ class CHistogram : public gpos::DbgPrintMixin // total number of distinct values CDouble GetNumDistinct() const; + // total number of distinct values + CDouble GetDistinctBySegs() const { + return m_distinct_by_segs; + } + // is histogram well formed BOOL IsValid() const; @@ -474,6 +483,9 @@ class CHistogram : public gpos::DbgPrintMixin // default frequency of NDV remain static const CDouble DefaultNDVFreqRemain; + + // default NDV by segments + static const CDouble DefaultNDVBySegments; }; // class CHistogram } // namespace gpnaucrates diff --git a/src/backend/gporca/libnaucrates/include/naucrates/statistics/CStatisticsUtils.h b/src/backend/gporca/libnaucrates/include/naucrates/statistics/CStatisticsUtils.h index 77523590ae6..24cedd6672b 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/statistics/CStatisticsUtils.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/statistics/CStatisticsUtils.h @@ -109,13 +109,15 @@ class CStatisticsUtils static void AddNdvForAllGrpCols( CMemoryPool *mp, const CStatistics *input_stats, const ULongPtrArray *grouping_columns, - CDoubleArray *output_ndvs // output array of NDV + CDoubleArray *output_ndvs, // output array of NDV + BOOL is_partial ); // compute max number of groups when grouping on columns from the given source static CDouble MaxNumGroupsForGivenSrcGprCols( CMemoryPool *mp, const CStatisticsConfig *stats_config, - CStatistics *input_stats, const ULongPtrArray *src_grouping_cols); + CStatistics *input_stats, const ULongPtrArray *src_grouping_cols, + BOOL is_partial); // check to see if any one of the grouping columns has been capped static BOOL CappedGrpColExists(const CStatistics *stats, @@ -245,13 +247,15 @@ class CStatisticsUtils CMemoryPool *mp, const CStatisticsConfig *stats_config, const IStatistics *stats, CColRefSet *grp_cols_refset, // grouping columns - CBitSet *keys // keys derived during optimization + CBitSet *keys, // keys derived during optimization + BOOL is_partial ); // compute the cumulative number of groups for the given set of grouping columns static CDouble Groups(CMemoryPool *mp, IStatistics *stats, const CStatisticsConfig *stats_config, - ULongPtrArray *grouping_cols, CBitSet *keys); + ULongPtrArray *grouping_cols, CBitSet *keys, + BOOL is_partial); // return the default number of distinct values static CDouble diff --git a/src/backend/gporca/libnaucrates/src/CDXLUtils.cpp b/src/backend/gporca/libnaucrates/src/CDXLUtils.cpp index 43e627c0335..b1c1bad0322 100644 --- a/src/backend/gporca/libnaucrates/src/CDXLUtils.cpp +++ b/src/backend/gporca/libnaucrates/src/CDXLUtils.cpp @@ -621,13 +621,15 @@ CDXLUtils::ParseDXLToOptimizerStatisticObjArray( CDouble distinct_remaining = dxl_derived_col_stats->GetDistinctRemain(); CDouble freq_remaining = dxl_derived_col_stats->GetFreqRemain(); + CDouble distinct_by_segs = dxl_derived_col_stats->GetDistinctBySeg(); CBucketArray *stats_buckets_array = CDXLUtils::ParseDXLToBucketsArray(mp, md_accessor, dxl_derived_col_stats); CHistogram *histogram = GPOS_NEW(mp) CHistogram(mp, stats_buckets_array, true /*is_well_defined*/, - null_freq, distinct_remaining, freq_remaining); + null_freq, distinct_remaining, freq_remaining, + distinct_by_segs); column_id_histogram_map->Insert(GPOS_NEW(mp) ULONG(column_id), histogram); diff --git a/src/backend/gporca/libnaucrates/src/md/CDXLColStats.cpp b/src/backend/gporca/libnaucrates/src/md/CDXLColStats.cpp index 39c346c169b..20da011b5e6 100644 --- a/src/backend/gporca/libnaucrates/src/md/CDXLColStats.cpp +++ b/src/backend/gporca/libnaucrates/src/md/CDXLColStats.cpp @@ -33,7 +33,7 @@ using namespace gpmd; CDXLColStats::CDXLColStats(CMemoryPool *mp, CMDIdColStats *mdid_col_stats, CMDName *mdname, CDouble width, CDouble null_freq, CDouble distinct_remaining, CDouble freq_remaining, - CDXLBucketArray *dxl_stats_bucket_array, + CDouble distinct_by_segs, CDXLBucketArray *dxl_stats_bucket_array, BOOL is_col_stats_missing) : m_mp(mp), m_mdid_col_stats(mdid_col_stats), @@ -43,7 +43,8 @@ CDXLColStats::CDXLColStats(CMemoryPool *mp, CMDIdColStats *mdid_col_stats, m_distinct_remaining(distinct_remaining), m_freq_remaining(freq_remaining), m_dxl_stats_bucket_array(dxl_stats_bucket_array), - m_is_col_stats_missing(is_col_stats_missing) + m_is_col_stats_missing(is_col_stats_missing), + m_distinct_by_segs(distinct_by_segs) { GPOS_ASSERT(mdid_col_stats->IsValid()); GPOS_ASSERT(nullptr != dxl_stats_bucket_array); @@ -167,6 +168,9 @@ CDXLColStats::Serialize(CXMLSerializer *xml_serializer) const xml_serializer->AddAttribute( CDXLTokens::GetDXLTokenStr(EdxltokenColStatsMissing), m_is_col_stats_missing); + xml_serializer->AddAttribute( + CDXLTokens::GetDXLTokenStr(EdxltokenColNdvBySeg), + m_distinct_by_segs); GPOS_CHECK_ABORT; @@ -233,8 +237,8 @@ CDXLColStats::CreateDXLDummyColStats(CMemoryPool *mp, IMDId *mdid, dxl_col_stats = GPOS_NEW(mp) CDXLColStats( mp, mdid_col_stats, mdname, width, CHistogram::DefaultNullFreq, CHistogram::DefaultNDVRemain, CHistogram::DefaultNDVFreqRemain, - dxl_bucket_array.Value(), true /* is_col_stats_missing */ - ); + CHistogram::DefaultNDVBySegments, dxl_bucket_array.Value(), + true /* is_col_stats_missing */); dxl_bucket_array.Reset(); return dxl_col_stats.Reset(); } diff --git a/src/backend/gporca/libnaucrates/src/md/CDXLStatsDerivedColumn.cpp b/src/backend/gporca/libnaucrates/src/md/CDXLStatsDerivedColumn.cpp index 78a45d8dc4d..b80c3ce5a16 100644 --- a/src/backend/gporca/libnaucrates/src/md/CDXLStatsDerivedColumn.cpp +++ b/src/backend/gporca/libnaucrates/src/md/CDXLStatsDerivedColumn.cpp @@ -30,12 +30,13 @@ using namespace gpmd; //--------------------------------------------------------------------------- CDXLStatsDerivedColumn::CDXLStatsDerivedColumn( ULONG colid, CDouble width, CDouble null_freq, CDouble distinct_remaining, - CDouble freq_remaining, CDXLBucketArray *dxl_stats_bucket_array) + CDouble freq_remaining, CDouble distinct_by_segs, CDXLBucketArray *dxl_stats_bucket_array) : m_colid(colid), m_width(width), m_null_freq(null_freq), m_distinct_remaining(distinct_remaining), m_freq_remaining(freq_remaining), + m_distinct_by_segs(distinct_by_segs), m_dxl_stats_bucket_array(dxl_stats_bucket_array) { GPOS_ASSERT(0 <= m_width); diff --git a/src/backend/gporca/libnaucrates/src/parser/CParseHandlerColStats.cpp b/src/backend/gporca/libnaucrates/src/parser/CParseHandlerColStats.cpp index 3c8d2d2dc66..eb1d3440882 100644 --- a/src/backend/gporca/libnaucrates/src/parser/CParseHandlerColStats.cpp +++ b/src/backend/gporca/libnaucrates/src/parser/CParseHandlerColStats.cpp @@ -42,7 +42,8 @@ CParseHandlerColStats::CParseHandlerColStats( m_null_freq(0.0), m_distinct_remaining(0.0), m_freq_remaining(0.0), - m_is_column_stats_missing(false) + m_is_column_stats_missing(false), + m_distinct_by_segs(0.0) { } @@ -129,6 +130,17 @@ CParseHandlerColStats::StartElement(const XMLCh *const element_uri, parsed_is_column_stats_missing, EdxltokenColStatsMissing, EdxltokenColumnStats); } + + const XMLCh *parsed_distinct_by_segs = + attrs.getValue(CDXLTokens::XmlstrToken(EdxltokenColNdvBySeg)); + if (nullptr != parsed_distinct_by_segs) + { + m_distinct_by_segs = + CDXLOperatorFactory::ConvertAttrValueToBool( + m_parse_handler_mgr->GetDXLMemoryManager(), + parsed_distinct_by_segs, EdxltokenColNdvBySeg, + EdxltokenColumnStats); + } } else if (0 == XMLString::compareString( CDXLTokens::XmlstrToken(EdxltokenColumnStatsBucket), @@ -198,7 +210,7 @@ CParseHandlerColStats::EndElement(const XMLCh *const, // element_uri, m_imd_obj = GPOS_NEW(m_mp) CDXLColStats( m_mp, m_mdid, m_md_name, m_width, m_null_freq, m_distinct_remaining, - m_freq_remaining, dxl_stats_bucket_array, m_is_column_stats_missing); + m_freq_remaining, m_distinct_by_segs, dxl_stats_bucket_array, m_is_column_stats_missing); // deactivate handler m_parse_handler_mgr->DeactivateHandler(); diff --git a/src/backend/gporca/libnaucrates/src/parser/CParseHandlerStatsDerivedColumn.cpp b/src/backend/gporca/libnaucrates/src/parser/CParseHandlerStatsDerivedColumn.cpp index 43fdd2d4d07..bcc1e21d259 100644 --- a/src/backend/gporca/libnaucrates/src/parser/CParseHandlerStatsDerivedColumn.cpp +++ b/src/backend/gporca/libnaucrates/src/parser/CParseHandlerStatsDerivedColumn.cpp @@ -39,6 +39,7 @@ CParseHandlerStatsDerivedColumn::CParseHandlerStatsDerivedColumn( m_null_freq(0.0), m_distinct_remaining(0.0), m_freq_remaining(0.0), + m_distinct_by_segs(0.0), m_dxl_stats_derived_col(nullptr) { } @@ -115,6 +116,16 @@ CParseHandlerStatsDerivedColumn::StartElement( parsed_freq_remaining, EdxltokenColFreqRemain, EdxltokenColumnStats); } + + const XMLCh *parsed_distinct_by_segs = + attrs.getValue(CDXLTokens::XmlstrToken(EdxltokenColNdvBySeg)); + if (nullptr != parsed_distinct_by_segs) + { + m_distinct_by_segs = CDXLOperatorFactory::ConvertAttrValueToDouble( + m_parse_handler_mgr->GetDXLMemoryManager(), + parsed_distinct_by_segs, EdxltokenColNdvBySeg, + EdxltokenColumnStats); + } } else if (0 == XMLString::compareString( CDXLTokens::XmlstrToken(EdxltokenColumnStatsBucket), @@ -184,7 +195,7 @@ CParseHandlerStatsDerivedColumn::EndElement( m_dxl_stats_derived_col = GPOS_NEW(m_mp) CDXLStatsDerivedColumn( m_colid, m_width, m_null_freq, m_distinct_remaining, m_freq_remaining, - dxl_stats_bucket_array); + m_distinct_by_segs, dxl_stats_bucket_array); // deactivate handler m_parse_handler_mgr->DeactivateHandler(); diff --git a/src/backend/gporca/libnaucrates/src/statistics/CFilterStatsProcessor.cpp b/src/backend/gporca/libnaucrates/src/statistics/CFilterStatsProcessor.cpp index 0e4ed5697bb..a7e458ec353 100644 --- a/src/backend/gporca/libnaucrates/src/statistics/CFilterStatsProcessor.cpp +++ b/src/backend/gporca/libnaucrates/src/statistics/CFilterStatsProcessor.cpp @@ -904,8 +904,10 @@ CFilterStatsProcessor::MakeHistArrayCmpAnyFilter(CMemoryPool *mp, } CHistogram *dummy_histogram = GPOS_NEW(mp) CHistogram(mp, dummy_histogram_buckets, true /* is_well_defined */, - CDouble(0.0) /* null_freq */, - CDouble(ndv_remain) /* distinct_remain */, freq_remain); + CHistogram::DefaultNullFreq /* null_freq */, + CDouble(ndv_remain) /* distinct_remain */, + freq_remain, + CHistogram::DefaultNDVBySegments); // dummy histogram should already be normalized since each bucket's frequency // is already adjusted by a scale factor of 1/dummy_rows to avoid unnecessarily // deep-copying the histogram buckets diff --git a/src/backend/gporca/libnaucrates/src/statistics/CGroupByStatsProcessor.cpp b/src/backend/gporca/libnaucrates/src/statistics/CGroupByStatsProcessor.cpp index c7cee555c58..351201160b1 100644 --- a/src/backend/gporca/libnaucrates/src/statistics/CGroupByStatsProcessor.cpp +++ b/src/backend/gporca/libnaucrates/src/statistics/CGroupByStatsProcessor.cpp @@ -23,7 +23,8 @@ CStatistics * CGroupByStatsProcessor::CalcGroupByStats(CMemoryPool *mp, const CStatistics *input_stats, ULongPtrArray *GCs, - ULongPtrArray *aggs, CBitSet *keys) + ULongPtrArray *aggs, CBitSet *keys, + BOOL is_partial) { // create hash map from colid -> histogram for resultant structure UlongToHistogramMap *col_histogram_mapping = @@ -74,7 +75,7 @@ CGroupByStatsProcessor::CalcGroupByStats(CMemoryPool *mp, const CStatisticsConfig *stats_config = input_stats->GetStatsConfig(); CDoubleArray *NDVs = CStatisticsUtils::ExtractNDVForGrpCols( - mp, stats_config, input_stats, groupby_cols_for_stats, keys); + mp, stats_config, input_stats, groupby_cols_for_stats, keys, is_partial); CDouble groups = CStatisticsUtils::GetCumulativeNDVs(stats_config, NDVs); diff --git a/src/backend/gporca/libnaucrates/src/statistics/CHistogram.cpp b/src/backend/gporca/libnaucrates/src/statistics/CHistogram.cpp index 26601c6e745..14c4f5cb40b 100644 --- a/src/backend/gporca/libnaucrates/src/statistics/CHistogram.cpp +++ b/src/backend/gporca/libnaucrates/src/statistics/CHistogram.cpp @@ -47,6 +47,9 @@ const CDouble CHistogram::DefaultNDVRemain(0.0); // default frequency of NDV remain const CDouble CHistogram::DefaultNDVFreqRemain(0.0); +// default NDV by segments +const CDouble CHistogram::DefaultNDVBySegments(0.0); + // sample size used to estimate skew #define GPOPT_SKEW_SAMPLE_SIZE 1000 @@ -59,6 +62,7 @@ CHistogram::CHistogram(CMemoryPool *mp, CBucketArray *histogram_buckets, m_null_freq(CHistogram::DefaultNullFreq), m_distinct_remaining(DefaultNDVRemain), m_freq_remaining(DefaultNDVFreqRemain), + m_distinct_by_segs(DefaultNDVBySegments), m_skew_was_measured(false), m_skew(1.0), m_NDVs_were_scaled(false), @@ -75,6 +79,7 @@ CHistogram::CHistogram(CMemoryPool *mp, BOOL is_well_defined) m_null_freq(CHistogram::DefaultNullFreq), m_distinct_remaining(DefaultNDVRemain), m_freq_remaining(DefaultNDVFreqRemain), + m_distinct_by_segs(DefaultNDVBySegments), m_skew_was_measured(false), m_skew(1.0), m_NDVs_were_scaled(false), @@ -87,13 +92,14 @@ CHistogram::CHistogram(CMemoryPool *mp, BOOL is_well_defined) CHistogram::CHistogram(CMemoryPool *mp, CBucketArray *histogram_buckets, BOOL is_well_defined, CDouble null_freq, CDouble distinct_remaining, CDouble freq_remaining, - BOOL is_col_stats_missing) + CDouble distinct_by_segs, BOOL is_col_stats_missing) : m_mp(mp), m_histogram_buckets(histogram_buckets), m_is_well_defined(is_well_defined), m_null_freq(null_freq), m_distinct_remaining(distinct_remaining), m_freq_remaining(freq_remaining), + m_distinct_by_segs(distinct_by_segs), m_skew_was_measured(false), m_skew(1.0), m_NDVs_were_scaled(false), @@ -144,6 +150,7 @@ CHistogram::OsPrint(IOstream &os) const os << "Total NDV : " << GetNumDistinct() << std::endl; os << "Remaining frequency: " << GetFreqRemain() << std::endl; os << "Total frequency : " << GetFrequency() << std::endl; + os << "NDV by segs : " << GetDistinctBySegs() << std::endl; if (m_skew_was_measured) { @@ -207,16 +214,20 @@ CHistogram::MakeHistogramLessThanOrLessThanEqualFilter( CDouble distinct_remaining = 0.0; CDouble freq_remaining = 0.0; + CDouble distinct_by_segs = 0.0; if (CStatistics::Epsilon < m_distinct_remaining * DefaultSelectivity) { distinct_remaining = m_distinct_remaining * DefaultSelectivity; freq_remaining = m_freq_remaining * DefaultSelectivity; + distinct_by_segs = m_distinct_by_segs * DefaultSelectivity; } return GPOS_NEW(m_mp) CHistogram(m_mp, new_buckets, true, // is_well_defined CDouble(0.0), // fNullFreq - distinct_remaining, freq_remaining); + distinct_remaining, + freq_remaining, + distinct_by_segs); } // return an array buckets after applying non equality filter on the histogram buckets @@ -267,7 +278,7 @@ CHistogram::MakeHistogramInequalityFilter(CPoint *point) const return GPOS_NEW(m_mp) CHistogram(m_mp, histogram_buckets, true /*is_well_defined*/, null_freq, - m_distinct_remaining, m_freq_remaining); + m_distinct_remaining, m_freq_remaining, m_distinct_by_segs); } // construct new histogram with IDF filter @@ -286,7 +297,7 @@ CHistogram::MakeHistogramIDFFilter(CPoint *point) const return GPOS_NEW(m_mp) CHistogram(m_mp, histogram_buckets, true /*is_well_defined*/, null_freq, - m_distinct_remaining, m_freq_remaining); + m_distinct_remaining, m_freq_remaining, m_distinct_by_segs); } // return an array buckets after applying equality filter on the histogram buckets @@ -339,7 +350,7 @@ CHistogram::MakeHistogramEqualFilter(CPoint *point) const { return GPOS_NEW(m_mp) CHistogram( m_mp, GPOS_NEW(m_mp) CBucketArray(m_mp), true /* is_well_defined */, - m_null_freq, DefaultNDVRemain, DefaultNDVFreqRemain); + m_null_freq, DefaultNDVRemain, DefaultNDVFreqRemain, DefaultNDVBySegments); } CBucketArray *histogram_buckets = MakeBucketsWithEqualityFilter(point); @@ -353,7 +364,8 @@ CHistogram::MakeHistogramEqualFilter(CPoint *point) const 0.0, // null_freq 1.0, // distinct_remaining std::min(CDouble(1.0), - m_freq_remaining / m_distinct_remaining) // freq_remaining + m_freq_remaining / m_distinct_remaining), // freq_remaining + DefaultNDVBySegments // distinct by segments ); } @@ -385,13 +397,15 @@ CHistogram::MakeHistogramINDFFilter(CPoint *point) const null_freq, 1.0, // distinct_remaining std::min(CDouble(1.0), - m_freq_remaining / m_distinct_remaining) // freq_remaining + m_freq_remaining / m_distinct_remaining), // freq_remaining + DefaultNDVBySegments // distinct by segments ); } return GPOS_NEW(m_mp) CHistogram( m_mp, histogram_buckets, true /* is_well_defined */, null_freq, - CHistogram::DefaultNDVRemain, CHistogram::DefaultNDVFreqRemain); + CHistogram::DefaultNDVRemain, CHistogram::DefaultNDVFreqRemain, + CHistogram::DefaultNDVBySegments); } // construct new histogram with greater than or greater than equal filter @@ -446,16 +460,18 @@ CHistogram::MakeHistogramGreaterThanOrGreaterThanEqualFilter( CDouble distinct_remaining = 0.0; CDouble freq_remaining = 0.0; + CDouble distinct_by_segs = 0.0; if (CStatistics::Epsilon < m_distinct_remaining * DefaultSelectivity) { distinct_remaining = m_distinct_remaining * DefaultSelectivity; freq_remaining = m_freq_remaining * DefaultSelectivity; + distinct_by_segs = m_distinct_by_segs * DefaultSelectivity; } return GPOS_NEW(m_mp) CHistogram(m_mp, new_buckets, true, // is_well_defined CDouble(0.0), // fNullFreq - distinct_remaining, freq_remaining); + distinct_remaining, freq_remaining, distinct_by_segs); } // sum of frequencies from buckets. @@ -964,7 +980,7 @@ CHistogram::MakeLASJHistogram(CStatsPred::EStatsCmpType stats_cmp_type, return GPOS_NEW(m_mp) CHistogram(m_mp, new_buckets, true /*is_well_defined*/, null_freq, - m_distinct_remaining, m_freq_remaining); + m_distinct_remaining, m_freq_remaining, m_distinct_by_segs); } // scales frequencies on histogram so that they add up to 1.0. @@ -1020,7 +1036,7 @@ CHistogram::CopyHistogram() const m_histogram_buckets->AddRef(); CHistogram *histogram_copy = GPOS_NEW(m_mp) CHistogram(m_mp, m_histogram_buckets, m_is_well_defined, m_null_freq, - m_distinct_remaining, m_freq_remaining); + m_distinct_remaining, m_freq_remaining, m_distinct_by_segs); if (WereNDVsScaled()) { histogram_copy->SetNDVScaled(); @@ -1163,7 +1179,9 @@ CHistogram::MakeJoinHistogramEqualityFilter(const CHistogram *histogram) const return GPOS_NEW(m_mp) CHistogram(m_mp, join_buckets, true /*is_well_defined*/, - 0.0 /*null_freq*/, distinct_remaining, freq_remaining); + 0.0 /*null_freq*/, distinct_remaining, freq_remaining, + DefaultNDVRemain // ndv from segs will be distortion after join + ); } // construct a new histogram for NDV based cardinality estimation @@ -1214,7 +1232,9 @@ CHistogram::MakeNDVBasedJoinHistogramEqualityFilter( return GPOS_NEW(m_mp) CHistogram(m_mp, join_buckets, true /*is_well_defined*/, - 0.0 /*null_freq*/, distinct_remaining, freq_remaining); + 0.0 /*null_freq*/, distinct_remaining, freq_remaining, + DefaultNDVRemain // ndv from segs will be distortion after join + ); } // construct a new histogram for an INDF join predicate @@ -1419,7 +1439,9 @@ CHistogram::MakeGroupByHistogramNormalize(CDouble, // rows, CHistogram *result_histogram = GPOS_NEW(m_mp) CHistogram(m_mp, new_buckets, true /*is_well_defined*/, new_null_freq, - m_distinct_remaining, freq_remaining); + m_distinct_remaining, freq_remaining, + DefaultNDVRemain // ndv from segs will be distortion after gb + ); *result_distinct_values = result_histogram->GetNumDistinct(); return result_histogram; @@ -1518,6 +1540,13 @@ CHistogram::MakeUnionAllHistogramNormalize(CDouble rows, (m_freq_remaining * rows + histogram->GetFreqRemain() * rows_other) / rows_new; + CDouble distinct_by_seg = DefaultNDVBySegments; + if (m_distinct_by_segs > CStatistics::Epsilon && + histogram->GetDistinctBySegs() > CStatistics::Epsilon) + { + distinct_by_seg = m_distinct_by_segs + histogram->GetDistinctBySegs(); + } + ULONG max_num_buckets = COptCtxt::PoctxtFromTLS() ->GetOptimizerConfig() ->GetStatsConf() @@ -1528,7 +1557,7 @@ CHistogram::MakeUnionAllHistogramNormalize(CDouble rows, CombineBuckets(m_mp, new_buckets, desired_num_buckets); CHistogram *result_histogram = GPOS_NEW(m_mp) CHistogram(m_mp, result_buckets, true /*is_well_defined*/, - new_null_freq, distinct_remaining, freq_remaining); + new_null_freq, distinct_remaining, freq_remaining, distinct_by_seg); (void) result_histogram->NormalizeHistogram(); GPOS_ASSERT(result_histogram->IsValid()); @@ -2051,7 +2080,7 @@ CHistogram::TranslateToDXLDerivedColumnStats(CMDAccessor *md_accessor, return GPOS_NEW(m_mp) CDXLStatsDerivedColumn(colid, width, m_null_freq, m_distinct_remaining, - m_freq_remaining, dxl_stats_bucket_array); + m_freq_remaining, m_distinct_by_segs, dxl_stats_bucket_array); } // randomly pick a bucket index based on bucket frequency values @@ -2218,10 +2247,11 @@ CHistogram::MakeDefaultBoolHistogram(CMemoryPool *mp) CDouble distinct_remaining = CDouble(3.0); CDouble freq_remaining = CDouble(1.0); CDouble null_freq = CDouble(0.0); + CDouble distinct_by_segs = CDouble(0.0); return GPOS_NEW(mp) CHistogram( mp, buckets, true /* is_well_defined */, null_freq, distinct_remaining, - freq_remaining, true /*is_col_stats_missing */ + freq_remaining, distinct_by_segs, true /*is_col_stats_missing */ ); } diff --git a/src/backend/gporca/libnaucrates/src/statistics/CLeftOuterJoinStatsProcessor.cpp b/src/backend/gporca/libnaucrates/src/statistics/CLeftOuterJoinStatsProcessor.cpp index 218b9c0b6fe..a1d5d695f90 100644 --- a/src/backend/gporca/libnaucrates/src/statistics/CLeftOuterJoinStatsProcessor.cpp +++ b/src/backend/gporca/libnaucrates/src/statistics/CLeftOuterJoinStatsProcessor.cpp @@ -199,7 +199,8 @@ CLeftOuterJoinStatsProcessor::AddHistogramsLOJInner( CHistogram *null_histogram = GPOS_NEW(mp) CHistogram( mp, GPOS_NEW(mp) CBucketArray(mp), true /*is_well_defined*/, 1.0 /*null_freq*/, CHistogram::DefaultNDVRemain, - CHistogram::DefaultNDVFreqRemain); + CHistogram::DefaultNDVFreqRemain, + CHistogram::DefaultNDVBySegments); CHistogram *LOJ_histogram = inner_join_histogram->MakeUnionAllHistogramNormalize( num_rows_inner_join, null_histogram, num_rows_LASJ); diff --git a/src/backend/gporca/libnaucrates/src/statistics/CLeftSemiJoinStatsProcessor.cpp b/src/backend/gporca/libnaucrates/src/statistics/CLeftSemiJoinStatsProcessor.cpp index 8a2ddeaf943..11e48efa319 100644 --- a/src/backend/gporca/libnaucrates/src/statistics/CLeftSemiJoinStatsProcessor.cpp +++ b/src/backend/gporca/libnaucrates/src/statistics/CLeftSemiJoinStatsProcessor.cpp @@ -43,7 +43,8 @@ CLeftSemiJoinStatsProcessor::CalcLSJoinStatsStatic( IStatistics *inner_stats = CGroupByStatsProcessor::CalcGroupByStats( mp, dynamic_cast(inner_stats_input), inner_colids, aggs, - nullptr // keys: no keys, use all grouping cols + nullptr, // keys: no keys, use all grouping cols + false /* isPartial*/ ); const CStatistics *outer_stats = diff --git a/src/backend/gporca/libnaucrates/src/statistics/CProjectStatsProcessor.cpp b/src/backend/gporca/libnaucrates/src/statistics/CProjectStatsProcessor.cpp index 097c14f304f..9b2ebe057ef 100644 --- a/src/backend/gporca/libnaucrates/src/statistics/CProjectStatsProcessor.cpp +++ b/src/backend/gporca/libnaucrates/src/statistics/CProjectStatsProcessor.cpp @@ -91,7 +91,8 @@ CProjectStatsProcessor::CalcProjStats( proj_col_histogram = GPOS_NEW(mp) CHistogram(mp, proj_col_bucket, is_well_defined, null_freq, CHistogram::DefaultNDVRemain, - CHistogram::DefaultNDVFreqRemain); + CHistogram::DefaultNDVFreqRemain, + CHistogram::DefaultNDVBySegments); } histograms_new->Insert(GPOS_NEW(mp) ULONG(colid), diff --git a/src/backend/gporca/libnaucrates/src/statistics/CStatisticsUtils.cpp b/src/backend/gporca/libnaucrates/src/statistics/CStatisticsUtils.cpp index 3947a23aecf..4131a2b42df 100644 --- a/src/backend/gporca/libnaucrates/src/statistics/CStatisticsUtils.cpp +++ b/src/backend/gporca/libnaucrates/src/statistics/CStatisticsUtils.cpp @@ -1356,7 +1356,8 @@ CStatisticsUtils::AddNdvForAllGrpCols( CMemoryPool *mp, const CStatistics *input_stats, const ULongPtrArray *grouping_columns, // array of grouping column ids from a source - CDoubleArray *output_ndvs // output array of ndvs + CDoubleArray *output_ndvs, // output array of ndvs + BOOL is_partial // cal ndvs with segment generated ) { GPOS_ASSERT(nullptr != grouping_columns); @@ -1374,10 +1375,14 @@ CStatisticsUtils::AddNdvForAllGrpCols( const CHistogram *histogram = input_stats->GetHistogram(colid); if (nullptr != histogram) { - distinct_vals = histogram->GetNumDistinct(); - if (histogram->IsEmpty()) - { - distinct_vals = DefaultDistinctVals(input_stats->Rows()); + if (is_partial && histogram->GetDistinctBySegs() > CStatistics::Epsilon) { + distinct_vals = histogram->GetDistinctBySegs(); + } else { + distinct_vals = histogram->GetNumDistinct(); + if (histogram->IsEmpty()) + { + distinct_vals = DefaultDistinctVals(input_stats->Rows()); + } } } output_ndvs->Append(GPOS_NEW(mp) CDouble(distinct_vals)); @@ -1401,7 +1406,8 @@ CDoubleArray * CStatisticsUtils::ExtractNDVForGrpCols( CMemoryPool *mp, const CStatisticsConfig *stats_config, const IStatistics *stats, CColRefSet *grp_cols_refset, - CBitSet *keys // keys derived during optimization + CBitSet *keys, // keys derived during optimization + BOOL is_partial ) { GPOS_ASSERT(nullptr != stats); @@ -1425,13 +1431,13 @@ CStatisticsUtils::ExtractNDVForGrpCols( { // this array of grouping columns represents computed columns. // Since we currently do not cap computed columns, we add all of their NDVs as is - AddNdvForAllGrpCols(mp, input_stats, src_grouping_cols, ndvs); + AddNdvForAllGrpCols(mp, input_stats, src_grouping_cols, ndvs, is_partial); } else { // compute the maximum number of groups when aggregated on columns from the given source CDouble max_grps_per_src = MaxNumGroupsForGivenSrcGprCols( - mp, stats_config, input_stats, src_grouping_cols); + mp, stats_config, input_stats, src_grouping_cols, is_partial); ndvs->Append(GPOS_NEW(mp) CDouble(max_grps_per_src)); } } @@ -1524,7 +1530,8 @@ CStatisticsUtils::MaxNdv(const CStatistics *stats, CDouble CStatisticsUtils::MaxNumGroupsForGivenSrcGprCols( CMemoryPool *mp, const CStatisticsConfig *stats_config, - CStatistics *input_stats, const ULongPtrArray *src_grouping_cols) + CStatistics *input_stats, const ULongPtrArray *src_grouping_cols, + BOOL is_partial) { GPOS_ASSERT(nullptr != input_stats); GPOS_ASSERT(nullptr != src_grouping_cols); @@ -1565,7 +1572,7 @@ CStatisticsUtils::MaxNumGroupsForGivenSrcGprCols( // add any remaining columns not covered by multivariate n-distinct // correlated stats - AddNdvForAllGrpCols(mp, input_stats, updated_src_grouping_cols, ndvs); + AddNdvForAllGrpCols(mp, input_stats, updated_src_grouping_cols, ndvs, is_partial); updated_src_grouping_cols->Release(); // take the minimum of (a) the estimated number of groups from the columns of this source, @@ -1597,7 +1604,8 @@ CDouble CStatisticsUtils::Groups(CMemoryPool *mp, IStatistics *stats, const CStatisticsConfig *stats_config, ULongPtrArray *grouping_cols, - CBitSet *keys // keys derived during optimization + CBitSet *keys, // keys derived during optimization + BOOL is_partial ) { GPOS_ASSERT(nullptr != stats); @@ -1609,7 +1617,7 @@ CStatisticsUtils::Groups(CMemoryPool *mp, IStatistics *stats, MakeGroupByColsForStats(mp, grouping_cols, computed_groupby_cols); CDoubleArray *ndvs = - ExtractNDVForGrpCols(mp, stats_config, stats, grp_col_for_stats, keys); + ExtractNDVForGrpCols(mp, stats_config, stats, grp_col_for_stats, keys, is_partial); CDouble groups = std::min(std::max(CStatistics::MinRows.Get(), GetCumulativeNDVs(stats_config, ndvs).Get()), diff --git a/src/backend/gporca/libnaucrates/src/xml/dxltokens.cpp b/src/backend/gporca/libnaucrates/src/xml/dxltokens.cpp index 2d56b2fce23..0f59d689a05 100644 --- a/src/backend/gporca/libnaucrates/src/xml/dxltokens.cpp +++ b/src/backend/gporca/libnaucrates/src/xml/dxltokens.cpp @@ -417,6 +417,7 @@ CDXLTokens::Init(CMemoryPool *mp) {EdxltokenColNdvRemain, GPOS_WSZ_LIT("NdvRemain")}, {EdxltokenColFreqRemain, GPOS_WSZ_LIT("FreqRemain")}, {EdxltokenColStatsMissing, GPOS_WSZ_LIT("ColStatsMissing")}, + {EdxltokenColNdvBySeg, GPOS_WSZ_LIT("NdvBySeg")}, {EdxltokenParamId, GPOS_WSZ_LIT("ParamId")}, diff --git a/src/test/regress/expected/agg_pushdown_optimizer.out b/src/test/regress/expected/agg_pushdown_optimizer.out index af0b16315e9..494abb1c68c 100644 --- a/src/test/regress/expected/agg_pushdown_optimizer.out +++ b/src/test/regress/expected/agg_pushdown_optimizer.out @@ -936,30 +936,33 @@ SELECT dim.proj_name, sum(val) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) Output: dim.proj_name, (sum(fact.val)) - -> Finalize HashAggregate + -> Finalize GroupAggregate Output: dim.proj_name, sum(fact.val) Group Key: dim.proj_name - -> Redistribute Motion 3:3 (slice2; segments: 3) + -> Sort Output: dim.proj_name, (PARTIAL sum(fact.val)) - Hash Key: dim.proj_name - -> Streaming Partial HashAggregate - Output: dim.proj_name, PARTIAL sum(fact.val) - Group Key: dim.proj_name - -> Hash Join - Output: fact.val, dim.proj_name - Hash Cond: (fact.did = dim.did) - -> Seq Scan on public.fact - Output: fact.did, fact.val - Filter: ((fact.fact_time > 10) AND (fact.fact_time < 2000)) - -> Hash - Output: dim.did, dim.proj_name - -> Broadcast Motion 3:3 (slice3; segments: 3) + Sort Key: dim.proj_name + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: dim.proj_name, (PARTIAL sum(fact.val)) + Hash Key: dim.proj_name + -> Streaming Partial HashAggregate + Output: dim.proj_name, PARTIAL sum(fact.val) + Group Key: dim.proj_name + -> Hash Join + Output: fact.val, dim.proj_name + Hash Cond: (fact.did = dim.did) + -> Seq Scan on public.fact + Output: fact.did, fact.val + Filter: ((fact.fact_time > 10) AND (fact.fact_time < 2000)) + -> Hash Output: dim.did, dim.proj_name - -> Seq Scan on public.dim + -> Broadcast Motion 3:3 (slice3; segments: 3) Output: dim.did, dim.proj_name + -> Seq Scan on public.dim + Output: dim.did, dim.proj_name Settings: enable_hashjoin = 'on', enable_mergejoin = 'off', enable_nestloop = 'off', enable_parallel = 'off', enable_seqscan = 'on', gp_enable_agg_pushdown = 'on', optimizer = 'on' Optimizer: GPORCA -(25 rows) +(28 rows) -- Clear tables DROP TABLE dim, fact; diff --git a/src/test/regress/expected/bfv_aggregate_optimizer.out b/src/test/regress/expected/bfv_aggregate_optimizer.out index 47ae7048795..51fd134f587 100644 --- a/src/test/regress/expected/bfv_aggregate_optimizer.out +++ b/src/test/regress/expected/bfv_aggregate_optimizer.out @@ -188,7 +188,7 @@ set optimizer_force_multistage_agg = on; select count_operator('select count(*) from multi_stage_test group by b;','GroupAggregate'); count_operator ---------------- - 2 + 1 (1 row) set optimizer_force_multistage_agg = off; diff --git a/src/test/regress/expected/gp_dqa_optimizer.out b/src/test/regress/expected/gp_dqa_optimizer.out index 09af6999902..acbd713866d 100644 --- a/src/test/regress/expected/gp_dqa_optimizer.out +++ b/src/test/regress/expected/gp_dqa_optimizer.out @@ -2936,8 +2936,8 @@ select sum(Distinct e), count(b), sum(c) from dqa_f3 group by a; * */ explain (verbose on, costs off) select sum(Distinct c), count(a), sum(d) from dqa_f3 group by b; - QUERY PLAN --------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) Output: (sum(c)), (count(a)), (sum(d)) -> Finalize HashAggregate @@ -2946,23 +2946,20 @@ explain (verbose on, costs off) select sum(Distinct c), count(a), sum(d) from dq -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) Hash Key: b - -> Partial GroupAggregate + -> Partial HashAggregate Output: b, c, PARTIAL count(a), PARTIAL sum(d) Group Key: dqa_f3.b, dqa_f3.c - -> Sort + -> Redistribute Motion 3:3 (slice3; segments: 3) Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) - Sort Key: dqa_f3.b, dqa_f3.c - -> Redistribute Motion 3:3 (slice3; segments: 3) - Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) - Hash Key: b, c - -> Streaming Partial HashAggregate - Output: b, c, PARTIAL count(a), PARTIAL sum(d) - Group Key: dqa_f3.b, dqa_f3.c - -> Seq Scan on public.dqa_f3 - Output: a, b, c, d - Optimizer: Pivotal Optimizer (GPORCA) - Settings: enable_groupagg = 'off', gp_motion_cost_per_row = '1' -(24 rows) + Hash Key: b, c + -> Streaming Partial HashAggregate + Output: b, c, PARTIAL count(a), PARTIAL sum(d) + Group Key: dqa_f3.b, dqa_f3.c + -> Seq Scan on public.dqa_f3 + Output: a, b, c, d + Settings: enable_groupagg = 'off', enable_hashagg = 'on', enable_parallel = 'off', gp_motion_cost_per_row = '2', optimizer = 'on' + Optimizer: GPORCA +(21 rows) select sum(Distinct c), count(a), sum(d) from dqa_f3 group by b; sum | count | sum @@ -2975,8 +2972,8 @@ select sum(Distinct c), count(a), sum(d) from dqa_f3 group by b; (5 rows) explain (verbose on, costs off) select sum(Distinct c), count(a), sum(d) from dqa_f3 group by b order by b; - QUERY PLAN --------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------- Result Output: (sum(c)), (count(a)), (sum(d)) -> Gather Motion 3:1 (slice1; segments: 3) @@ -2991,23 +2988,20 @@ explain (verbose on, costs off) select sum(Distinct c), count(a), sum(d) from dq -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) Hash Key: b - -> Partial GroupAggregate + -> Partial HashAggregate Output: b, c, PARTIAL count(a), PARTIAL sum(d) Group Key: dqa_f3.b, dqa_f3.c - -> Sort + -> Redistribute Motion 3:3 (slice3; segments: 3) Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) - Sort Key: dqa_f3.b, dqa_f3.c - -> Redistribute Motion 3:3 (slice3; segments: 3) - Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) - Hash Key: b, c - -> Streaming Partial HashAggregate - Output: b, c, PARTIAL count(a), PARTIAL sum(d) - Group Key: dqa_f3.b, dqa_f3.c - -> Seq Scan on public.dqa_f3 - Output: a, b, c, d - Optimizer: Pivotal Optimizer (GPORCA) - Settings: enable_groupagg = 'off', gp_motion_cost_per_row = '1' -(30 rows) + Hash Key: b, c + -> Streaming Partial HashAggregate + Output: b, c, PARTIAL count(a), PARTIAL sum(d) + Group Key: dqa_f3.b, dqa_f3.c + -> Seq Scan on public.dqa_f3 + Output: a, b, c, d + Settings: enable_groupagg = 'off', enable_hashagg = 'on', enable_parallel = 'off', gp_motion_cost_per_row = '2', optimizer = 'on' + Optimizer: GPORCA +(27 rows) select sum(Distinct c), count(a), sum(d) from dqa_f3 group by b order by b; sum | count | sum @@ -3039,23 +3033,20 @@ explain (verbose on, costs off) select distinct sum(Distinct c), count(a), sum(d -> Redistribute Motion 3:3 (slice3; segments: 3) Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) Hash Key: b - -> Partial GroupAggregate + -> Partial HashAggregate Output: b, c, PARTIAL count(a), PARTIAL sum(d) Group Key: dqa_f3.b, dqa_f3.c - -> Sort + -> Redistribute Motion 3:3 (slice4; segments: 3) Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) - Sort Key: dqa_f3.b, dqa_f3.c - -> Redistribute Motion 3:3 (slice4; segments: 3) - Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) - Hash Key: b, c - -> Streaming Partial HashAggregate - Output: b, c, PARTIAL count(a), PARTIAL sum(d) - Group Key: dqa_f3.b, dqa_f3.c - -> Seq Scan on public.dqa_f3 - Output: a, b, c, d + Hash Key: b, c + -> Streaming Partial HashAggregate + Output: b, c, PARTIAL count(a), PARTIAL sum(d) + Group Key: dqa_f3.b, dqa_f3.c + -> Seq Scan on public.dqa_f3 + Output: a, b, c, d Settings: enable_groupagg = 'off', enable_hashagg = 'on', enable_parallel = 'off', gp_motion_cost_per_row = '2', optimizer = 'on' - Optimizer: Pivotal Optimizer (GPORCA) -(33 rows) + Optimizer: GPORCA +(30 rows) select distinct sum(Distinct c), count(a), sum(d) from dqa_f3 group by b; sum | count | sum @@ -3115,8 +3106,8 @@ select sum(Distinct c), count(a), sum(d) from dqa_f3 group by b having avg(e) > -- Test gp_enable_agg_distinct_pruning is off on this branch set gp_enable_agg_distinct_pruning = off; explain (verbose on, costs off) select sum(Distinct c), count(a), sum(d) from dqa_f3 group by b; - QUERY PLAN ---------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) Output: (sum(c)), (count(a)), (sum(d)) -> Finalize HashAggregate @@ -3125,23 +3116,20 @@ explain (verbose on, costs off) select sum(Distinct c), count(a), sum(d) from dq -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) Hash Key: b - -> Partial GroupAggregate + -> Partial HashAggregate Output: b, c, PARTIAL count(a), PARTIAL sum(d) Group Key: dqa_f3.b, dqa_f3.c - -> Sort + -> Redistribute Motion 3:3 (slice3; segments: 3) Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) - Sort Key: dqa_f3.b, dqa_f3.c - -> Redistribute Motion 3:3 (slice3; segments: 3) - Output: b, c, (PARTIAL count(a)), (PARTIAL sum(d)) - Hash Key: b, c - -> Streaming Partial HashAggregate - Output: b, c, PARTIAL count(a), PARTIAL sum(d) - Group Key: dqa_f3.b, dqa_f3.c - -> Seq Scan on public.dqa_f3 - Output: a, b, c, d - Optimizer: Pivotal Optimizer (GPORCA) - Settings: enable_groupagg = 'off', gp_enable_agg_distinct_pruning = 'off', gp_motion_cost_per_row = '1' -(24 rows) + Hash Key: b, c + -> Streaming Partial HashAggregate + Output: b, c, PARTIAL count(a), PARTIAL sum(d) + Group Key: dqa_f3.b, dqa_f3.c + -> Seq Scan on public.dqa_f3 + Output: a, b, c, d + Settings: enable_groupagg = 'off', enable_hashagg = 'on', enable_parallel = 'off', gp_enable_agg_distinct_pruning = 'off', gp_motion_cost_per_row = '2', optimizer = 'on' + Optimizer: GPORCA +(21 rows) select sum(Distinct c), count(a), sum(d) from dqa_f3 group by b; sum | count | sum diff --git a/src/test/regress/expected/gpsd.out b/src/test/regress/expected/gpsd.out index 71ee193381e..7d0864bb936 100644 --- a/src/test/regress/expected/gpsd.out +++ b/src/test/regress/expected/gpsd.out @@ -103,10 +103,10 @@ select from pg_statistic where starelid IN ('gpsd_foo'::regclass, 'gpsd_foo_1'::regclass); staattnum | stainherit | stanullfrac | stawidth | stadistinct | stakind1 | stakind2 | stakind3 | stakind4 | stakind5 | staop1 | staop2 | staop3 | staop4 | staop5 | stacoll1 | stacoll2 | stacoll3 | stacoll4 | stacoll5 | stanumbers1 | stanumbers2 | stanumbers3 | stanumbers4 | stanumbers5 | stavalues1 | stavalues2 | stavalues3 | stavalues4 | stavalues5 -----------+------------+-------------+----------+-------------+----------+----------+----------+----------+----------+--------+--------+--------+--------+--------+----------+----------+----------+----------+----------+-------------+-------------+-------------+-------------+-------------+------------------------------------------+------------+------------+------------+------------ - 1 | t | 0 | 4 | -1 | 2 | 0 | 0 | 0 | 0 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1,2,3,4,5} | | | | - 2 | t | 0 | 7 | -1 | 2 | 0 | 0 | 0 | 0 | 664 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {"a \\ and a \"",i,something,z'world',Ο¨} | | | | - 1 | f | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 0 | 97 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | {1} | | | | {1,2,3,4,5} | | | | - 2 | f | 0 | 7 | -1 | 2 | 3 | 0 | 0 | 0 | 664 | 664 | 0 | 0 | 0 | 100 | 100 | 0 | 0 | 0 | | {-1} | | | | {"a \\ and a \"",i,something,z'world',Ο¨} | | | | + 1 | t | 0 | 4 | -1 | 2 | 8 | 0 | 0 | 0 | 97 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1,2,3,4,5} | {5} | | | + 2 | t | 0 | 7 | -1 | 2 | 8 | 0 | 0 | 0 | 664 | 664 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {"a \\ and a \"",i,something,z'world',Ο¨} | {5} | | | + 1 | f | 0 | 4 | -1 | 2 | 3 | 8 | 0 | 0 | 97 | 97 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | {1} | | | | {1,2,3,4,5} | | {5} | | + 2 | f | 0 | 7 | -1 | 2 | 3 | 8 | 0 | 0 | 664 | 664 | 664 | 0 | 0 | 100 | 100 | 100 | 0 | 0 | | {-1} | | | | {"a \\ and a \"",i,something,z'world',Ο¨} | | {5} | | (4 rows) -------------------------------------------------------------------------------- @@ -170,9 +170,9 @@ select from pg_statistic where starelid IN ('gpsd_foo'::regclass, 'gpsd_foo_1'::regclass); staattnum | stainherit | stanullfrac | stawidth | stadistinct | stakind1 | stakind2 | stakind3 | stakind4 | stakind5 | staop1 | staop2 | staop3 | staop4 | staop5 | stacoll1 | stacoll2 | stacoll3 | stacoll4 | stacoll5 | stanumbers1 | stanumbers2 | stanumbers3 | stanumbers4 | stanumbers5 | stavalues1 | stavalues2 | stavalues3 | stavalues4 | stavalues5 -----------+------------+-------------+----------+-------------+----------+----------+----------+----------+----------+--------+--------+--------+--------+--------+----------+----------+----------+----------+----------+-------------+-------------+-------------+-------------+-------------+------------+------------+-----------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1 | t | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | - 2 | t | 0 | 10 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | {hello,'world'} | | - 1 | f | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 99 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | {"\\x0e060200ffffffff0000000001000000010000000000803f0000803f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"} - 2 | f | 0 | 10 | -1 | 0 | 0 | 0 | 0 | 99 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | {"\\x0e060200ffffffff0000000001000000010000000000803f0000803f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"} + 1 | t | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 0 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | + 2 | t | 0 | 10 | -1 | 8 | 0 | 0 | 0 | 0 | 664 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | {hello,'world'} | | + 1 | f | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 99 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | {"\\x0e060200ffffffff0000000001000000010000000000803f0000803f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"} + 2 | f | 0 | 10 | -1 | 8 | 0 | 0 | 0 | 99 | 664 | 0 | 0 | 0 | 0 | 100 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | {"\\x0e060200ffffffff0000000001000000010000000000803f0000803f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"} (4 rows) diff --git a/src/test/regress/expected/incremental_analyze.out b/src/test/regress/expected/incremental_analyze.out index 99646363b17..a2caf59e0e9 100644 --- a/src/test/regress/expected/incremental_analyze.out +++ b/src/test/regress/expected/incremental_analyze.out @@ -1949,7 +1949,7 @@ SELECT staattnum, stakind1, stakind2, stakind3, stakind4, stakind5, FROM pg_statistic WHERE starelid = 'simple_table_no_hll'::regclass; staattnum | stakind1 | stakind2 | stakind3 | stakind4 | stakind5 | stavalues1 | stavalues2 | stavalues3 | stavalues4 | stavalues5 -----------+----------+----------+----------+----------+----------+--------------+------------+------------+------------+------------ - 1 | 2 | 3 | 0 | 0 | 0 | {1,3,5,7,10} | | | | + 1 | 2 | 3 | 8 | 0 | 0 | {1,3,5,7,10} | | {10} | | (1 row) -- Make sure analyze rootpartition option works in an option list diff --git a/src/test/regress/expected/minirepro.out b/src/test/regress/expected/minirepro.out index 40e0401750e..3b876793628 100644 --- a/src/test/regress/expected/minirepro.out +++ b/src/test/regress/expected/minirepro.out @@ -132,12 +132,12 @@ select from pg_statistic where starelid IN ('minirepro_foo'::regclass, 'minirepro_foo_1'::regclass); staattnum | stainherit | stanullfrac | stawidth | stadistinct | stakind1 | stakind2 | stakind3 | stakind4 | stakind5 | staop1 | staop2 | staop3 | staop4 | staop5 | stacoll1 | stacoll2 | stacoll3 | stacoll4 | stacoll5 | stanumbers1 | stanumbers2 | stanumbers3 | stanumbers4 | stanumbers5 | stavalues1 | stavalues2 | stavalues3 | stavalues4 | stavalues5 -----------+------------+-------------+----------+-------------+----------+----------+----------+----------+----------+--------+--------+--------+--------+--------+----------+----------+----------+----------+----------+-------------+-------------+-------------+-------------+-------------+------------+------------+------------+------------+------------ - 1 | t | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | - 2 | t | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | - 3 | t | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | - 1 | f | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | - 2 | f | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | - 3 | f | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | + 1 | t | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 0 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | + 2 | t | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 0 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | + 3 | t | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 0 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | + 1 | f | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 0 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | + 2 | f | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 0 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | + 3 | f | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 0 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | (6 rows) -- Cleanup @@ -220,8 +220,8 @@ select from pg_statistic where starelid IN ('minirepro_foo'::regclass, 'minirepro_foo_1'::regclass); staattnum | stainherit | stanullfrac | stawidth | stadistinct | stakind1 | stakind2 | stakind3 | stakind4 | stakind5 | staop1 | staop2 | staop3 | staop4 | staop5 | stacoll1 | stacoll2 | stacoll3 | stacoll4 | stacoll5 | stanumbers1 | stanumbers2 | stanumbers3 | stanumbers4 | stanumbers5 | stavalues1 | stavalues2 | stavalues3 | stavalues4 | stavalues5 -----------+------------+-------------+----------+-------------+----------+----------+----------+----------+----------+--------+--------+--------+--------+--------+----------+----------+----------+----------+----------+-------------+-------------+-------------+-------------+-------------+------------+------------+------------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1 | t | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | - 1 | f | 0 | 4 | -1 | 0 | 0 | 0 | 0 | 99 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | | | | | {"\\x0e060200ffffffff0000000001000000010000000000803f0000803f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"} + 1 | t | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 0 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | + 1 | f | 0 | 4 | -1 | 8 | 0 | 0 | 0 | 99 | 97 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | | | | | {1} | | | | {"\\x0e060200ffffffff0000000001000000010000000000803f0000803f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"} (2 rows) -- Cleanup diff --git a/src/test/regress/expected/olap_plans_optimizer.out b/src/test/regress/expected/olap_plans_optimizer.out index 7753de8c0b8..e2198882b9f 100644 --- a/src/test/regress/expected/olap_plans_optimizer.out +++ b/src/test/regress/expected/olap_plans_optimizer.out @@ -79,18 +79,20 @@ select a, b, c, sum(d) from olap_test group by a, b, c; -- If it's not a superset, redistribution is needed. explain select a, sum(d) from olap_test group by a; - QUERY PLAN -------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.54 rows=3 width=12) - -> Finalize HashAggregate (cost=0.00..431.54 rows=1 width=12) + QUERY PLAN +------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.55 rows=3 width=12) + -> Finalize GroupAggregate (cost=0.00..431.55 rows=1 width=12) Group Key: a - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.54 rows=1 width=12) - Hash Key: a - -> Streaming Partial HashAggregate (cost=0.00..431.54 rows=1 width=12) - Group Key: a - -> Seq Scan on olap_test (cost=0.00..431.08 rows=3334 width=8) - Optimizer: Pivotal Optimizer (GPORCA) -(9 rows) + -> Sort (cost=0.00..431.55 rows=2 width=12) + Sort Key: a + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.55 rows=2 width=12) + Hash Key: a + -> Streaming Partial HashAggregate (cost=0.00..431.55 rows=2 width=12) + Group Key: a + -> Seq Scan on olap_test (cost=0.00..431.09 rows=3334 width=8) + Optimizer: GPORCA +(11 rows) select a, sum(d) from olap_test group by a; a | sum @@ -185,12 +187,12 @@ set gp_motion_cost_per_row=1.0; -- If the query produces a relatively small number of groups in comparison to -- the number of input rows, two-stage aggregation will be picked. explain select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a), (b, c)); - QUERY PLAN --------------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1726.50 rows=152 width=20) - -> Sequence (cost=0.00..1726.49 rows=51 width=20) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1726.51 rows=152 width=20) + -> Sequence (cost=0.00..1726.50 rows=51 width=20) -> Shared Scan (share slice:id 1:0) (cost=0.00..431.19 rows=3334 width=1) - -> Seq Scan on olap_test (cost=0.00..431.08 rows=3334 width=16) + -> Seq Scan on olap_test (cost=0.00..431.09 rows=3334 width=16) -> Append (cost=0.00..1295.30 rows=51 width=20) -> Finalize HashAggregate (cost=0.00..431.92 rows=44 width=16) Group Key: share0_ref2.b, share0_ref2.c @@ -199,17 +201,19 @@ explain select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a) -> Streaming Partial HashAggregate (cost=0.00..431.91 rows=44 width=16) Group Key: share0_ref2.b, share0_ref2.c -> Shared Scan (share slice:id 2:0) (cost=0.00..431.10 rows=3334 width=12) - -> Finalize HashAggregate (cost=0.00..431.47 rows=1 width=12) + -> Finalize GroupAggregate (cost=0.00..431.47 rows=1 width=12) Group Key: share0_ref3.a - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.48 rows=1 width=12) + -> Sort (cost=0.00..431.47 rows=2 width=12) + Sort Key: share0_ref3.a + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=2 width=12) Hash Key: share0_ref3.a - -> Streaming Partial HashAggregate (cost=0.00..431.48 rows=1 width=12) + -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=2 width=12) Group Key: share0_ref3.a -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) -> HashAggregate (cost=0.00..431.91 rows=7 width=16) Group Key: share0_ref4.a, share0_ref4.b -> Shared Scan (share slice:id 1:0) (cost=0.00..431.10 rows=3334 width=12) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (25 rows) select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a), (b, c)); @@ -257,10 +261,10 @@ select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a), (b, c) explain select a, b, d, sum(d) from olap_test group by grouping sets((a, b), (a), (b, d)); QUERY PLAN ------------------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1727.49 rows=10022 width=20) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1727.48 rows=10022 width=20) -> Sequence (cost=0.00..1726.74 rows=3341 width=20) - -> Shared Scan (share slice:id 1:0) (cost=0.00..431.16 rows=3334 width=1) - -> Seq Scan on olap_test (cost=0.00..431.08 rows=3334 width=12) + -> Shared Scan (share slice:id 1:0) (cost=0.00..431.17 rows=3334 width=1) + -> Seq Scan on olap_test (cost=0.00..431.09 rows=3334 width=12) -> Append (cost=0.00..1295.50 rows=3341 width=20) -> HashAggregate (cost=0.00..431.99 rows=3334 width=16) Group Key: share0_ref2.b, share0_ref2.d @@ -268,18 +272,20 @@ explain select a, b, d, sum(d) from olap_test group by grouping sets((a, b), (a) Hash Key: share0_ref2.b, share0_ref2.d -> Result (cost=0.00..431.06 rows=3334 width=8) -> Shared Scan (share slice:id 2:0) (cost=0.00..431.06 rows=3334 width=8) - -> Finalize HashAggregate (cost=0.00..431.47 rows=1 width=12) + -> Finalize GroupAggregate (cost=0.00..431.47 rows=1 width=12) Group Key: share0_ref3.a - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=1 width=12) - Hash Key: share0_ref3.a - -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=1 width=12) - Group Key: share0_ref3.a - -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) + -> Sort (cost=0.00..431.47 rows=2 width=12) + Sort Key: share0_ref3.a + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=2 width=12) + Hash Key: share0_ref3.a + -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=2 width=12) + Group Key: share0_ref3.a + -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) -> HashAggregate (cost=0.00..431.91 rows=7 width=16) Group Key: share0_ref4.a, share0_ref4.b -> Shared Scan (share slice:id 1:0) (cost=0.00..431.10 rows=3334 width=12) - Optimizer: Pivotal Optimizer (GPORCA) -(22 rows) + Optimizer: GPORCA +(24 rows) -- do not execute this query as it would produce too many tuples. -- Test that when the second-stage Agg doesn't try to preserve the @@ -292,13 +298,13 @@ explain select a, b, d, sum(d) from olap_test group by grouping sets((a, b), (a) -- from the Merge Key. set enable_hashagg=off; explain select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a), (b, c)) limit 200; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------- - Limit (cost=0.00..1726.50 rows=152 width=20) - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1726.50 rows=152 width=20) - -> Sequence (cost=0.00..1726.49 rows=51 width=20) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------- + Limit (cost=0.00..1726.51 rows=152 width=20) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1726.51 rows=152 width=20) + -> Sequence (cost=0.00..1726.50 rows=51 width=20) -> Shared Scan (share slice:id 1:0) (cost=0.00..431.19 rows=3334 width=1) - -> Seq Scan on olap_test (cost=0.00..431.08 rows=3334 width=16) + -> Seq Scan on olap_test (cost=0.00..431.09 rows=3334 width=16) -> Append (cost=0.00..1295.30 rows=51 width=20) -> Finalize HashAggregate (cost=0.00..431.92 rows=44 width=16) Group Key: share0_ref2.b, share0_ref2.c @@ -307,18 +313,20 @@ explain select a, b, c, sum(d) from olap_test group by grouping sets((a, b), (a) -> Streaming Partial HashAggregate (cost=0.00..431.91 rows=44 width=16) Group Key: share0_ref2.b, share0_ref2.c -> Shared Scan (share slice:id 2:0) (cost=0.00..431.10 rows=3334 width=12) - -> Finalize HashAggregate (cost=0.00..431.47 rows=1 width=12) + -> Finalize GroupAggregate (cost=0.00..431.47 rows=1 width=12) Group Key: share0_ref3.a - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=1 width=12) - Hash Key: share0_ref3.a - -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=1 width=12) - Group Key: share0_ref3.a - -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) + -> Sort (cost=0.00..431.47 rows=2 width=12) + Sort Key: share0_ref3.a + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.47 rows=2 width=12) + Hash Key: share0_ref3.a + -> Streaming Partial HashAggregate (cost=0.00..431.47 rows=2 width=12) + Group Key: share0_ref3.a + -> Shared Scan (share slice:id 3:0) (cost=0.00..431.06 rows=3334 width=8) -> HashAggregate (cost=0.00..431.91 rows=7 width=16) Group Key: share0_ref4.a, share0_ref4.b -> Shared Scan (share slice:id 1:0) (cost=0.00..431.10 rows=3334 width=12) - Optimizer: Pivotal Optimizer (GPORCA) -(24 rows) + Optimizer: GPORCA +(26 rows) reset enable_hashagg; -- @@ -331,48 +339,40 @@ create table foo_ctas(a int, b int) distributed randomly; insert into foo_ctas select g%5, g%2 from generate_series(1, 100) g; analyze foo_ctas; explain create table bar_ctas as select * from foo_ctas group by a, b distributed by (b); - QUERY PLAN ------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------- Result (cost=0.00..431.10 rows=6 width=8) -> Redistribute Motion 3:3 (slice1; segments: 3) (cost=0.00..431.01 rows=6 width=8) Hash Key: b -> GroupAggregate (cost=0.00..431.01 rows=2 width=8) Group Key: a, b - -> Sort (cost=0.00..431.01 rows=2 width=8) + -> Sort (cost=0.00..431.01 rows=34 width=8) Sort Key: a, b - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.01 rows=2 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=34 width=8) Hash Key: a, b - -> GroupAggregate (cost=0.00..431.01 rows=2 width=8) - Group Key: a, b - -> Sort (cost=0.00..431.01 rows=34 width=8) - Sort Key: a, b - -> Seq Scan on foo_ctas (cost=0.00..431.00 rows=34 width=8) - Optimizer: Pivotal Optimizer (GPORCA) -(15 rows) + -> Seq Scan on foo_ctas (cost=0.00..431.00 rows=34 width=8) + Optimizer: GPORCA +(11 rows) create table bar_ctas as select * from foo_ctas group by a, b distributed by (b); -- Currently, the planner misses this optimization with INSERT, so this -- needs an extra Redistribute Motion. explain insert into bar_ctas select * from foo_ctas group by a, b; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------- Insert on bar_ctas (cost=0.00..431.10 rows=2 width=8) -> Result (cost=0.00..431.01 rows=6 width=12) -> Redistribute Motion 3:3 (slice1; segments: 3) (cost=0.00..431.01 rows=6 width=8) Hash Key: foo_ctas.b -> GroupAggregate (cost=0.00..431.01 rows=2 width=8) Group Key: foo_ctas.a, foo_ctas.b - -> Sort (cost=0.00..431.01 rows=2 width=8) + -> Sort (cost=0.00..431.01 rows=34 width=8) Sort Key: foo_ctas.a, foo_ctas.b - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.01 rows=2 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=34 width=8) Hash Key: foo_ctas.a, foo_ctas.b - -> GroupAggregate (cost=0.00..431.01 rows=2 width=8) - Group Key: foo_ctas.a, foo_ctas.b - -> Sort (cost=0.00..431.01 rows=34 width=8) - Sort Key: foo_ctas.a, foo_ctas.b - -> Seq Scan on foo_ctas (cost=0.00..431.00 rows=34 width=8) - Optimizer: Pivotal Optimizer (GPORCA) -(16 rows) + -> Seq Scan on foo_ctas (cost=0.00..431.00 rows=34 width=8) + Optimizer: GPORCA +(12 rows) drop table foo_ctas; drop table bar_ctas; diff --git a/src/test/regress/expected/subselect_gp_optimizer.out b/src/test/regress/expected/subselect_gp_optimizer.out index 72830e65e08..51344116edd 100644 --- a/src/test/regress/expected/subselect_gp_optimizer.out +++ b/src/test/regress/expected/subselect_gp_optimizer.out @@ -1812,102 +1812,94 @@ EXPLAIN SELECT '' AS six, f1 AS "Correlated Field", f2 AS "Second Field" EXPLAIN select count(*) from (select 1 from tenk1 a where unique1 IN (select hundred from tenk1 b)) ss; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------- - Finalize Aggregate (cost=0.00..864.06 rows=1 width=8) - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..864.06 rows=1 width=8) - -> Partial Aggregate (cost=0.00..864.06 rows=1 width=8) - -> Hash Join (cost=0.00..864.06 rows=34 width=1) + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------- + Finalize Aggregate (cost=0.00..864.08 rows=1 width=8) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..864.08 rows=1 width=8) + -> Partial Aggregate (cost=0.00..864.08 rows=1 width=8) + -> Hash Join (cost=0.00..864.08 rows=34 width=1) Hash Cond: (a.unique1 = b.hundred) - -> Seq Scan on tenk1 a (cost=0.00..431.50 rows=3334 width=4) - -> Hash (cost=431.94..431.94 rows=34 width=4) - -> GroupAggregate (cost=0.00..431.94 rows=34 width=4) + -> Seq Scan on tenk1 a (cost=0.00..431.51 rows=3334 width=4) + -> Hash (cost=431.95..431.95 rows=34 width=4) + -> HashAggregate (cost=0.00..431.95 rows=34 width=4) Group Key: b.hundred - -> Sort (cost=0.00..431.94 rows=34 width=4) - Sort Key: b.hundred - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.93 rows=34 width=4) - Hash Key: b.hundred - -> Streaming HashAggregate (cost=0.00..431.93 rows=34 width=4) - Group Key: b.hundred - -> Seq Scan on tenk1 b (cost=0.00..431.50 rows=3334 width=4) - Optimizer: Pivotal Optimizer (GPORCA) -(17 rows) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.94 rows=100 width=4) + Hash Key: b.hundred + -> Streaming HashAggregate (cost=0.00..431.94 rows=100 width=4) + Group Key: b.hundred + -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) + Optimizer: GPORCA +(15 rows) EXPLAIN select count(distinct ss.ten) from (select ten from tenk1 a where unique1 IN (select hundred from tenk1 b)) ss; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------- - Finalize Aggregate (cost=0.00..864.09 rows=1 width=8) - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..864.09 rows=1 width=8) - -> Partial Aggregate (cost=0.00..864.09 rows=1 width=8) - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..864.09 rows=34 width=4) + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------- + Finalize Aggregate (cost=0.00..864.11 rows=1 width=8) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..864.11 rows=1 width=8) + -> Partial Aggregate (cost=0.00..864.11 rows=1 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..864.11 rows=34 width=4) Hash Key: a.ten - -> Hash Join (cost=0.00..864.09 rows=34 width=4) + -> Hash Join (cost=0.00..864.11 rows=34 width=4) Hash Cond: (a.unique1 = b.hundred) - -> Seq Scan on tenk1 a (cost=0.00..431.50 rows=3334 width=8) - -> Hash (cost=431.93..431.93 rows=34 width=4) - -> GroupAggregate (cost=0.00..431.93 rows=34 width=4) + -> Seq Scan on tenk1 a (cost=0.00..431.51 rows=3334 width=8) + -> Hash (cost=431.95..431.95 rows=34 width=4) + -> HashAggregate (cost=0.00..431.95 rows=34 width=4) Group Key: b.hundred - -> Sort (cost=0.00..431.93 rows=34 width=4) - Sort Key: b.hundred - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.93 rows=34 width=4) - Hash Key: b.hundred - -> Streaming HashAggregate (cost=0.00..431.93 rows=34 width=4) - Group Key: b.hundred - -> Seq Scan on tenk1 b (cost=0.00..431.50 rows=3334 width=4) - Optimizer: Pivotal Optimizer (GPORCA) -(19 rows) + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.94 rows=100 width=4) + Hash Key: b.hundred + -> Streaming HashAggregate (cost=0.00..431.94 rows=100 width=4) + Group Key: b.hundred + -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) + Optimizer: GPORCA +(17 rows) EXPLAIN select count(*) from (select 1 from tenk1 a where unique1 IN (select distinct hundred from tenk1 b)) ss; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------- - Finalize Aggregate (cost=0.00..864.06 rows=1 width=8) - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..864.06 rows=1 width=8) - -> Partial Aggregate (cost=0.00..864.06 rows=1 width=8) - -> Hash Semi Join (cost=0.00..864.06 rows=34 width=1) + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------- + Finalize Aggregate (cost=0.00..864.08 rows=1 width=8) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..864.08 rows=1 width=8) + -> Partial Aggregate (cost=0.00..864.08 rows=1 width=8) + -> Hash Semi Join (cost=0.00..864.08 rows=34 width=1) Hash Cond: (a.unique1 = b.hundred) - -> Seq Scan on tenk1 a (cost=0.00..431.50 rows=3334 width=4) - -> Hash (cost=431.94..431.94 rows=34 width=4) - -> GroupAggregate (cost=0.00..431.94 rows=34 width=4) + -> Seq Scan on tenk1 a (cost=0.00..431.51 rows=3334 width=4) + -> Hash (cost=431.95..431.95 rows=34 width=4) + -> HashAggregate (cost=0.00..431.95 rows=34 width=4) Group Key: b.hundred - -> Sort (cost=0.00..431.94 rows=34 width=4) - Sort Key: b.hundred - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.93 rows=34 width=4) - Hash Key: b.hundred - -> Streaming HashAggregate (cost=0.00..431.93 rows=34 width=4) - Group Key: b.hundred - -> Seq Scan on tenk1 b (cost=0.00..431.50 rows=3334 width=4) - Optimizer: Pivotal Optimizer (GPORCA) -(17 rows) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.94 rows=100 width=4) + Hash Key: b.hundred + -> Streaming HashAggregate (cost=0.00..431.94 rows=100 width=4) + Group Key: b.hundred + -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) + Optimizer: GPORCA +(15 rows) EXPLAIN select count(distinct ss.ten) from (select ten from tenk1 a where unique1 IN (select distinct hundred from tenk1 b)) ss; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------- - Finalize Aggregate (cost=0.00..864.09 rows=1 width=8) - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..864.09 rows=1 width=8) - -> Partial Aggregate (cost=0.00..864.09 rows=1 width=8) - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..864.09 rows=34 width=4) + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------- + Finalize Aggregate (cost=0.00..864.11 rows=1 width=8) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..864.11 rows=1 width=8) + -> Partial Aggregate (cost=0.00..864.11 rows=1 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..864.11 rows=34 width=4) Hash Key: a.ten - -> Hash Semi Join (cost=0.00..864.09 rows=34 width=4) + -> Hash Semi Join (cost=0.00..864.11 rows=34 width=4) Hash Cond: (a.unique1 = b.hundred) - -> Seq Scan on tenk1 a (cost=0.00..431.50 rows=3334 width=8) - -> Hash (cost=431.93..431.93 rows=34 width=4) - -> GroupAggregate (cost=0.00..431.93 rows=34 width=4) + -> Seq Scan on tenk1 a (cost=0.00..431.51 rows=3334 width=8) + -> Hash (cost=431.95..431.95 rows=34 width=4) + -> HashAggregate (cost=0.00..431.95 rows=34 width=4) Group Key: b.hundred - -> Sort (cost=0.00..431.93 rows=34 width=4) - Sort Key: b.hundred - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.93 rows=34 width=4) - Hash Key: b.hundred - -> Streaming HashAggregate (cost=0.00..431.93 rows=34 width=4) - Group Key: b.hundred - -> Seq Scan on tenk1 b (cost=0.00..431.50 rows=3334 width=4) - Optimizer: Pivotal Optimizer (GPORCA) -(19 rows) + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.94 rows=100 width=4) + Hash Key: b.hundred + -> Streaming HashAggregate (cost=0.00..431.94 rows=100 width=4) + Group Key: b.hundred + -> Seq Scan on tenk1 b (cost=0.00..431.51 rows=3334 width=4) + Optimizer: GPORCA +(17 rows) -- -- In case of simple exists query, planner can generate alternative From 8a3982d708f7619d845765e4de424e888dd7f069 Mon Sep 17 00:00:00 2001 From: zhoujiaqi Date: Thu, 26 Jun 2025 18:10:55 +0800 Subject: [PATCH 114/260] ORCA: allow different strategy control the redistribute key below aggregate In CBDB, if there is an AGG operator (one-step AGG or final AGG operator) that requires data redistribution, then the redistribution motion operator will used all `GROUP BY` keys as the redistribute keys. In fact, only a single key needs to be redistributed, and the results of AGG will be the same. Reducing the number of redistributed keys can effectively reduce the overhead of hash function calls in motion operator. However, this may lead to data skew. Therefore, the current commit provides several different strategies for deciding how redistribution keys should be selected during redistribution motion operator (which under the AGG operator). User can use the GUC `optimizer_agg_pds_strategy` to select the strategies. - OPTIMIZER_AGG_PDS_ALL_KEY(value: 0): default one, select all `GROUP BY` key as the redistributed keys. - OPTIMIZER_AGG_PDS_FIRST_KEY(value: 1): select the first `GROUP BY` key as the redistributed keys. - OPTIMIZER_AGG_PDS_MINIMAL_LEN_KEY(value: 2): select a `GROUP BY` key which has the minimal and positive typlen as the redistributed keys. If only non-fixed type (such as text and varchar) exist, select the first `GROUP BY` key. - OPTIMIZER_AGG_PDS_EXCLUDE_NON_FIXED(value: 3): select the `GROUP BY` key which is fixed typlen the redistributed keys. If only non-fixed type (such as text and varchar) exist, select the first `GROUP BY` key. --- .../gpopt/config/CConfigParamMapping.cpp | 8 ++ .../libgpopt/src/operators/CPhysicalAgg.cpp | 57 ++++++++++- .../include/naucrates/traceflags/traceflags.h | 9 ++ src/backend/utils/misc/guc_gp.c | 12 +++ src/include/utils/guc.h | 7 ++ src/include/utils/unsync_guc_name.h | 1 + src/test/regress/expected/aggregates.out | 90 +++++++++++++++++ .../regress/expected/aggregates_optimizer.out | 96 +++++++++++++++++++ src/test/regress/sql/aggregates.sql | 23 +++++ 9 files changed, 301 insertions(+), 2 deletions(-) diff --git a/src/backend/gpopt/config/CConfigParamMapping.cpp b/src/backend/gpopt/config/CConfigParamMapping.cpp index ad58148b28b..2968a31829d 100644 --- a/src/backend/gpopt/config/CConfigParamMapping.cpp +++ b/src/backend/gpopt/config/CConfigParamMapping.cpp @@ -578,6 +578,14 @@ CConfigParamMapping::PackConfigParamInBitset( traceflag_bitset->ExchangeSet(EopttraceEnableWindowHashAgg); } + if (optimizer_agg_pds_strategy == OPTIMIZER_AGG_PDS_FIRST_KEY) { + traceflag_bitset->ExchangeSet(EopttraceAggRRSFirstKey); + } else if (optimizer_agg_pds_strategy == OPTIMIZER_AGG_PDS_MINIMAL_LEN_KEY) { + traceflag_bitset->ExchangeSet(EopttraceAggRRSMinimalLenKey); + } else if (optimizer_agg_pds_strategy == OPTIMIZER_AGG_PDS_EXCLUDE_NON_FIXED) { + traceflag_bitset->ExchangeSet(EopttraceAggRRSExcludeNonFixedKey); + } + return traceflag_bitset; } diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalAgg.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalAgg.cpp index 0b35e399eb2..d4e9a72649d 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalAgg.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalAgg.cpp @@ -8,7 +8,6 @@ // @doc: // Implementation of basic aggregate operator //--------------------------------------------------------------------------- - #include "gpopt/operators/CPhysicalAgg.h" #include "gpos/base.h" @@ -295,11 +294,65 @@ CDistributionSpec * CPhysicalAgg::PdsMaximalHashed(CMemoryPool *mp, CColRefArray *colref_array) { GPOS_ASSERT(nullptr != colref_array); + CColRefArray *pcraResHashs = nullptr; + + if (GPOS_FTRACE(EopttraceAggRRSFirstKey)) { + pcraResHashs = GPOS_NEW(mp) CColRefArray(mp); + if (colref_array->Size() > 0) { + CColRef *colref = (*colref_array)[0]; + pcraResHashs->Append(colref); + } + } else if (GPOS_FTRACE(EopttraceAggRRSMinimalLenKey)) { + ULONG ulsz = colref_array->Size(); + pcraResHashs = GPOS_NEW(mp) CColRefArray(mp); + + LINT minimal_typlen = gpos::lint_max; // less than minimal typlen + LINT minimal_typlen_ul = -1; + for (ULONG ul = 0; ul < ulsz; ul++) { + CColRef *pcr =(*colref_array)[ul]; + const gpmd::IMDType *pmdtyp = pcr->RetrieveType(); + LINT typlen = pmdtyp->IsFixedLength() ? pmdtyp->Length() : (gpos::lint_max - 1); + + if (typlen < minimal_typlen) { + minimal_typlen = typlen; + minimal_typlen_ul = ul; + } + } + + if (minimal_typlen_ul != -1) { + pcraResHashs->Append((*colref_array)[minimal_typlen_ul]); + } + } else if (GPOS_FTRACE(EopttraceAggRRSExcludeNonFixedKey)) { + ULONG ulsz = colref_array->Size(); + pcraResHashs = GPOS_NEW(mp) CColRefArray(mp); + + for (ULONG ul = 0; ul < ulsz; ul++) { + CColRef *pcr =(*colref_array)[ul]; + const gpmd::IMDType *pmdtyp = pcr->RetrieveType(); + if (pmdtyp->IsFixedLength()) { + pcraResHashs->Append(pcr); + } + } + + // no key in result + if (pcraResHashs->Size() == 0) { + colref_array->AddRef(); + pcraResHashs = colref_array; + } + } else { + colref_array->AddRef(); + pcraResHashs = colref_array; + } + + GPOS_ASSERT(nullptr != pcraResHashs); + GPOS_ASSERT_IMP(colref_array->Size() > 0, pcraResHashs->Size() > 0); CDistributionSpecHashed *pdshashedMaximal = CDistributionSpecHashed::PdshashedMaximal( - mp, colref_array, true /*fNullsColocated*/ + mp, pcraResHashs, true /*fNullsColocated*/ ); + + pcraResHashs->Release(); if (nullptr != pdshashedMaximal) { return pdshashedMaximal; diff --git a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h index 473806f4a37..0693a374fbf 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h @@ -244,6 +244,15 @@ enum EOptTraceFlag // Enable window hash agg EopttraceEnableWindowHashAgg = 103050, + // Use the first key in AGG Pds + EopttraceAggRRSFirstKey = 103051, + + // Use the minimal length key in AGG Pds + EopttraceAggRRSMinimalLenKey = 103052, + + // Use the all key exclude the non-fixed key in AGG pds + EopttraceAggRRSExcludeNonFixedKey = 103053, + /////////////////////////////////////////////////////// ///////////////////// statistics flags //////////////// ////////////////////////////////////////////////////// diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 66c204c1075..c7bb596cb61 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -365,6 +365,7 @@ bool optimizer_enable_foreign_table; bool optimizer_enable_right_outer_join; bool optimizer_enable_query_parameter; bool optimizer_force_window_hash_agg; +int optimizer_agg_pds_strategy; /* Optimizer plan enumeration related GUCs */ bool optimizer_enumerate_plans; @@ -4490,6 +4491,17 @@ struct config_int ConfigureNamesInt_gp[] = NULL, NULL, NULL }, + { + {"optimizer_agg_pds_strategy", PGC_USERSET, DEVELOPER_OPTIONS, + gettext_noop("Set the strategy of agg required distribution."), + NULL, + GUC_NOT_IN_SAMPLE + }, + &optimizer_agg_pds_strategy, + OPTIMIZER_AGG_PDS_ALL_KEY, OPTIMIZER_AGG_PDS_ALL_KEY, OPTIMIZER_AGG_PDS_EXCLUDE_NON_FIXED, + NULL, NULL, NULL + }, + { {"memory_profiler_dataset_size", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Set the size in GB"), diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 05ff02dd8f1..b12d29f1e16 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -466,6 +466,12 @@ extern bool create_restartpoint_on_ckpt_record_replay; #define OPTIMIZER_GPDB_CALIBRATED 1 /* GPDB's calibrated cost model */ #define OPTIMIZER_GPDB_EXPERIMENTAL 2 /* GPDB's experimental cost model */ +/* optimizer cost model */ +#define OPTIMIZER_AGG_PDS_ALL_KEY 0 +#define OPTIMIZER_AGG_PDS_FIRST_KEY 1 +#define OPTIMIZER_AGG_PDS_MINIMAL_LEN_KEY 2 +#define OPTIMIZER_AGG_PDS_EXCLUDE_NON_FIXED 3 + /* Optimizer related gucs */ extern bool optimizer; @@ -546,6 +552,7 @@ extern bool optimizer_enable_foreign_table; extern bool optimizer_enable_right_outer_join; extern bool optimizer_enable_query_parameter; extern bool optimizer_force_window_hash_agg; +extern int optimizer_agg_pds_strategy; /* Optimizer plan enumeration related GUCs */ extern bool optimizer_enumerate_plans; diff --git a/src/include/utils/unsync_guc_name.h b/src/include/utils/unsync_guc_name.h index 065eca54d6e..b26c5b43c7b 100644 --- a/src/include/utils/unsync_guc_name.h +++ b/src/include/utils/unsync_guc_name.h @@ -440,6 +440,7 @@ "optimizer_enable_right_outer_join", "optimizer_enable_query_parameter", "optimizer_force_window_hash_agg", + "optimizer_agg_pds_strategy", "optimizer_enforce_subplans", "optimizer_enumerate_plans", "optimizer_expand_fulljoin", diff --git a/src/test/regress/expected/aggregates.out b/src/test/regress/expected/aggregates.out index 91dba471eeb..e2105a3af40 100644 --- a/src/test/regress/expected/aggregates.out +++ b/src/test/regress/expected/aggregates.out @@ -3404,3 +3404,93 @@ having sum(tgb1.v3 * tgb2.v3) > 100 and reset debug_print_aggref_in_explain; reset optimizer_force_multistage_agg; +-- test the optimizer_agg_pds_strategy +DROP TABLE IF EXISTS pds_t1; +NOTICE: table "pds_t1" does not exist, skipping +create table pds_t1(v1 int, v2 text, v3 int, v4 text, v5 int, v6 text) DISTRIBUTED BY (v1); +set optimizer_agg_pds_strategy to 0; +explain (costs off) select v2,v3 from pds_t1 group by v2,v3; + QUERY PLAN +------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> HashAggregate + Group Key: v2, v3 + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: v2, v3 + -> HashAggregate + Group Key: v2, v3 + -> Seq Scan on pds_t1 + Optimizer: Postgres query optimizer +(9 rows) + +set optimizer_agg_pds_strategy to 1; +explain (costs off) select v2,v3 from pds_t1 group by v2,v3; + QUERY PLAN +------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> HashAggregate + Group Key: v2, v3 + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: v2, v3 + -> HashAggregate + Group Key: v2, v3 + -> Seq Scan on pds_t1 + Optimizer: Postgres query optimizer +(9 rows) + +set optimizer_agg_pds_strategy to 2; +explain (costs off) select v2,v3 from pds_t1 group by v2,v3; + QUERY PLAN +------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> HashAggregate + Group Key: v2, v3 + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: v2, v3 + -> HashAggregate + Group Key: v2, v3 + -> Seq Scan on pds_t1 + Optimizer: Postgres query optimizer +(9 rows) + +set optimizer_agg_pds_strategy to 3; +explain (costs off) select v2,v3,v4,v5,v6 from pds_t1 group by v2,v3,v4,v5,v6; + QUERY PLAN +------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> HashAggregate + Group Key: v2, v3, v4, v5, v6 + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: v2, v3, v4, v5, v6 + -> HashAggregate + Group Key: v2, v3, v4, v5, v6 + -> Seq Scan on pds_t1 + Optimizer: Postgres query optimizer +(9 rows) + +-- We can't dedup the "Redistribute Motion", cause in this step we can't know the +-- distribution of output column which from the underlying operators. +-- So you need to be cautious when opening this guc. +set optimizer_agg_pds_strategy to 1; +explain (costs off) select v1,v2,v3 from pds_t1 group by v3,v2,v1; + QUERY PLAN +------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> HashAggregate + Group Key: v3, v2, v1 + -> Seq Scan on pds_t1 + Optimizer: Postgres query optimizer +(5 rows) + +set optimizer_agg_pds_strategy to 0; +explain (costs off) select v1,v2,v3 from pds_t1 group by v3,v2,v1; + QUERY PLAN +------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> HashAggregate + Group Key: v3, v2, v1 + -> Seq Scan on pds_t1 + Optimizer: Postgres query optimizer +(5 rows) + +reset optimizer_agg_pds_strategy; diff --git a/src/test/regress/expected/aggregates_optimizer.out b/src/test/regress/expected/aggregates_optimizer.out index a832e48e940..73fcea90841 100644 --- a/src/test/regress/expected/aggregates_optimizer.out +++ b/src/test/regress/expected/aggregates_optimizer.out @@ -3573,3 +3573,99 @@ having sum(tgb1.v3 * tgb2.v3) > 100 and reset debug_print_aggref_in_explain; reset optimizer_force_multistage_agg; +-- test the optimizer_agg_pds_strategy +DROP TABLE IF EXISTS pds_t1; +NOTICE: table "pds_t1" does not exist, skipping +create table pds_t1(v1 int, v2 text, v3 int, v4 text, v5 int, v6 text) DISTRIBUTED BY (v1); +set optimizer_agg_pds_strategy to 0; +explain (costs off) select v2,v3 from pds_t1 group by v2,v3; + QUERY PLAN +------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> GroupAggregate + Group Key: v2, v3 + -> Sort + Sort Key: v2, v3 + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: v2, v3 + -> Seq Scan on pds_t1 + Optimizer: GPORCA +(9 rows) + +set optimizer_agg_pds_strategy to 1; +explain (costs off) select v2,v3 from pds_t1 group by v2,v3; + QUERY PLAN +------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> GroupAggregate + Group Key: v2, v3 + -> Sort + Sort Key: v2, v3 + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: v2 + -> Seq Scan on pds_t1 + Optimizer: GPORCA +(9 rows) + +set optimizer_agg_pds_strategy to 2; +explain (costs off) select v2,v3 from pds_t1 group by v2,v3; + QUERY PLAN +------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> GroupAggregate + Group Key: v2, v3 + -> Sort + Sort Key: v2, v3 + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: v3 + -> Seq Scan on pds_t1 + Optimizer: GPORCA +(9 rows) + +set optimizer_agg_pds_strategy to 3; +explain (costs off) select v2,v3,v4,v5,v6 from pds_t1 group by v2,v3,v4,v5,v6; + QUERY PLAN +------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> GroupAggregate + Group Key: v2, v3, v4, v5, v6 + -> Sort + Sort Key: v2, v3, v4, v5, v6 + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: v3, v5 + -> Seq Scan on pds_t1 + Optimizer: GPORCA +(9 rows) + +-- We can't dedup the "Redistribute Motion", cause in this step we can't know the +-- distribution of output column which from the underlying operators. +-- So you need to be cautious when opening this guc. +set optimizer_agg_pds_strategy to 1; +explain (costs off) select v1,v2,v3 from pds_t1 group by v3,v2,v1; + QUERY PLAN +------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> GroupAggregate + Group Key: v3, v2, v1 + -> Sort + Sort Key: v3, v2, v1 + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: v3 + -> Seq Scan on pds_t1 + Optimizer: GPORCA +(9 rows) + +set optimizer_agg_pds_strategy to 0; +explain (costs off) select v1,v2,v3 from pds_t1 group by v3,v2,v1; + QUERY PLAN +------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> GroupAggregate + Group Key: v3, v2, v1 + -> Sort + Sort Key: v3, v2, v1 + -> Seq Scan on pds_t1 + Optimizer: GPORCA +(7 rows) + +reset optimizer_agg_pds_strategy; diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql index 600ff0282e0..a96b976fdcd 100644 --- a/src/test/regress/sql/aggregates.sql +++ b/src/test/regress/sql/aggregates.sql @@ -1528,3 +1528,26 @@ having sum(tgb1.v3 * tgb2.v3) > 100 and reset debug_print_aggref_in_explain; reset optimizer_force_multistage_agg; + +-- test the optimizer_agg_pds_strategy +DROP TABLE IF EXISTS pds_t1; +create table pds_t1(v1 int, v2 text, v3 int, v4 text, v5 int, v6 text) DISTRIBUTED BY (v1); + +set optimizer_agg_pds_strategy to 0; +explain (costs off) select v2,v3 from pds_t1 group by v2,v3; +set optimizer_agg_pds_strategy to 1; +explain (costs off) select v2,v3 from pds_t1 group by v2,v3; +set optimizer_agg_pds_strategy to 2; +explain (costs off) select v2,v3 from pds_t1 group by v2,v3; +set optimizer_agg_pds_strategy to 3; +explain (costs off) select v2,v3,v4,v5,v6 from pds_t1 group by v2,v3,v4,v5,v6; + +-- We can't dedup the "Redistribute Motion", cause in this step we can't know the +-- distribution of output column which from the underlying operators. +-- So you need to be cautious when opening this guc. +set optimizer_agg_pds_strategy to 1; +explain (costs off) select v1,v2,v3 from pds_t1 group by v3,v2,v1; +set optimizer_agg_pds_strategy to 0; +explain (costs off) select v1,v2,v3 from pds_t1 group by v3,v2,v1; + +reset optimizer_agg_pds_strategy; \ No newline at end of file From 34779092d2799558d027130b45408d34330b4ce6 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Sun, 17 Aug 2025 16:26:03 +0800 Subject: [PATCH 115/260] Fix memory leak for bitmap in PAX Bitmap should free memory if the memory is allocated by itself. --- .../pax_storage/src/cpp/access/pax_visimap.cc | 3 +- contrib/pax_storage/src/cpp/comm/bitmap.h | 45 ++++++++----------- .../src/cpp/storage/orc/orc_format_reader.cc | 3 +- contrib/pax_storage/src/cpp/storage/pax.cc | 6 +-- .../src/cpp/storage/vec/pax_porc_adpater.cc | 3 +- .../src/cpp/storage/vec_parallel_pax.cc | 2 +- 6 files changed, 25 insertions(+), 37 deletions(-) diff --git a/contrib/pax_storage/src/cpp/access/pax_visimap.cc b/contrib/pax_storage/src/cpp/access/pax_visimap.cc index b96752d31ba..cdc7dfe763e 100644 --- a/contrib/pax_storage/src/cpp/access/pax_visimap.cc +++ b/contrib/pax_storage/src/cpp/access/pax_visimap.cc @@ -143,8 +143,7 @@ bool TestVisimap(Relation rel, const char *visimap_name, int offset) { fs = Singleton::GetInstance(); auto visimap = LoadVisimap(fs, options, file_path); - auto bm = Bitmap8(BitmapRaw(visimap->data(), visimap->size()), - Bitmap8::ReadOnlyOwnBitmap); + auto bm = Bitmap8(BitmapRaw(visimap->data(), visimap->size())); auto is_set = bm.Test(offset); return !is_set; } diff --git a/contrib/pax_storage/src/cpp/comm/bitmap.h b/contrib/pax_storage/src/cpp/comm/bitmap.h index 1fc831f1787..793f85d668c 100644 --- a/contrib/pax_storage/src/cpp/comm/bitmap.h +++ b/contrib/pax_storage/src/cpp/comm/bitmap.h @@ -147,19 +147,9 @@ struct BitmapRaw final { raw.bitmap = nullptr; raw.size = 0; } - BitmapRaw &operator=(BitmapRaw) = delete; BitmapRaw &operator=(BitmapRaw &) = delete; BitmapRaw &operator=(const BitmapRaw &) = delete; - BitmapRaw &operator=(BitmapRaw &&raw) { - if (this != &raw) { - PAX_DELETE_ARRAY(bitmap); - bitmap = raw.bitmap; - size = raw.size; - raw.bitmap = nullptr; - raw.size = 0; - } - return *this; - } + BitmapRaw &operator=(BitmapRaw &&raw) = delete; ~BitmapRaw() = default; @@ -171,40 +161,46 @@ template class BitmapTpl final { public: using BitmapMemoryPolicy = void (*)(BitmapRaw &, uint32); - explicit BitmapTpl(uint32 initial_size = 16, - BitmapMemoryPolicy policy = DefaultBitmapMemoryPolicy) { + explicit BitmapTpl(uint32 initial_size = 16) { static_assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8); static_assert(BM_WORD_BITS == (1 << BM_WORD_SHIFTS)); - policy_ = policy; - policy(raw_, Max(initial_size, 16)); + policy_ = DefaultBitmapMemoryPolicy; + policy_(raw_, Max(initial_size, 16)); } - explicit BitmapTpl(const BitmapRaw &raw, BitmapMemoryPolicy policy) { + explicit BitmapTpl(const BitmapRaw &raw) { static_assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8); static_assert(BM_WORD_BITS == (1 << BM_WORD_SHIFTS)); - Assert(policy == ReadOnlyRefBitmap || policy == ReadOnlyOwnBitmap); - policy_ = policy; + policy_ = ReadOnlyRefBitmap; raw_.bitmap = raw.bitmap; raw_.size = raw.size; } BitmapTpl(const BitmapTpl &tpl) = delete; BitmapTpl(BitmapTpl &&tpl) - : raw_(std::move(tpl.raw_)), policy_(tpl.policy_) {} + : raw_(std::move(tpl.raw_)), policy_(tpl.policy_) { + tpl.raw_.bitmap = nullptr; + tpl.policy_ = ReadOnlyRefBitmap; + } BitmapTpl(BitmapRaw &&raw) - : raw_(std::move(raw)), policy_(DefaultBitmapMemoryPolicy) {} + : raw_(std::move(raw)), policy_(ReadOnlyRefBitmap) {} BitmapTpl &operator=(const BitmapTpl &tpl) = delete; BitmapTpl &operator=(BitmapTpl &&tpl) = delete; ~BitmapTpl() { // Reference doesn't free the memory - if (policy_ == ReadOnlyRefBitmap) raw_.bitmap = nullptr; + if (policy_ == DefaultBitmapMemoryPolicy) + PAX_DELETE_ARRAY(raw_.bitmap); + raw_.bitmap = nullptr; } std::unique_ptr Clone() const { + auto bm = std::make_unique(raw_); auto p = PAX_NEW_ARRAY(raw_.size); memcpy(p, raw_.bitmap, sizeof(T) * raw_.size); - BitmapRaw bm_raw(p, raw_.size); - return std::make_unique(std::move(bm_raw)); + bm->raw_.bitmap = p; + bm->raw_.size = raw_.size; + bm->policy_ = DefaultBitmapMemoryPolicy; + return bm; } inline size_t WordBits() const { return BM_WORD_BITS; } @@ -272,9 +268,6 @@ class BitmapTpl final { // raise CBDB_RAISE(cbdb::CException::kExTypeInvalidMemoryOperation); } - static void ReadOnlyOwnBitmap(BitmapRaw & /*raw*/, uint32 /*index*/) { - CBDB_RAISE(cbdb::CException::kExTypeInvalidMemoryOperation); - } static inline size_t RequireWords(size_t nbits) { return nbits ? ((nbits - 1) >> BM_WORD_SHIFTS) + 1 : 0; diff --git a/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc b/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc index 94ac27bbf4c..2fa58790d97 100644 --- a/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc +++ b/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc @@ -909,8 +909,7 @@ std::unique_ptr OrcFormatReader::ReadStripe( reinterpret_cast(data_buffer->GetAvailableBuffer()); Assert(non_null_stream.kind() == pax::porc::proto::Stream_Kind_PRESENT); - non_null_bitmap = std::make_unique(BitmapRaw(bm_bytes, bm_nbytes), - BitmapTpl::ReadOnlyRefBitmap); + non_null_bitmap = std::make_unique(BitmapRaw(bm_bytes, bm_nbytes)); data_buffer->Brush(bm_nbytes); } diff --git a/contrib/pax_storage/src/cpp/storage/pax.cc b/contrib/pax_storage/src/cpp/storage/pax.cc index d1b2000009c..ab10387c76c 100644 --- a/contrib/pax_storage/src/cpp/storage/pax.cc +++ b/contrib/pax_storage/src/cpp/storage/pax.cc @@ -615,8 +615,7 @@ void TableDeleter::DeleteWithVisibilityMap( auto buffer = LoadVisimap(file_system_, file_system_options_, visibility_map_filename); auto visibility_file_bitmap = - Bitmap8(BitmapRaw(buffer->data(), buffer->size()), - Bitmap8::ReadOnlyOwnBitmap); + Bitmap8(BitmapRaw(buffer->data(), buffer->size())); visi_bitmap = Bitmap8::Union(&visibility_file_bitmap, delete_visi_bitmap.get()); @@ -664,8 +663,7 @@ void TableDeleter::DeleteWithVisibilityMap( // Update the stats in pax aux table // Notice that: PAX won't update the stats in group UpdateStatsInAuxTable(catalog_update, micro_partition_metadata, - std::make_shared(visi_bitmap->Raw(), - Bitmap8::ReadOnlyOwnBitmap), + std::make_shared(visi_bitmap->Raw()), min_max_col_idxs, cbdb::GetBloomFilterColumnIndexes(rel_), stats_updater_projection); diff --git a/contrib/pax_storage/src/cpp/storage/vec/pax_porc_adpater.cc b/contrib/pax_storage/src/cpp/storage/vec/pax_porc_adpater.cc index 9cfcc49b091..65eeb4e88ae 100644 --- a/contrib/pax_storage/src/cpp/storage/vec/pax_porc_adpater.cc +++ b/contrib/pax_storage/src/cpp/storage/vec/pax_porc_adpater.cc @@ -576,8 +576,7 @@ std::pair VecAdapter::AppendPorcFormat(PaxColumns *columns, vec_buffer->Set(boolean_buffer, align_size); Bitmap8 vec_bool_bitmap( - BitmapRaw((uint8 *)(boolean_buffer), align_size), - BitmapTpl::ReadOnlyRefBitmap); + BitmapRaw((uint8 *)(boolean_buffer), align_size)); CopyBitPackedBuffer(column, micro_partition_visibility_bitmap_, group_base_offset_, range_begin, range_lens, diff --git a/contrib/pax_storage/src/cpp/storage/vec_parallel_pax.cc b/contrib/pax_storage/src/cpp/storage/vec_parallel_pax.cc index a93d5d17646..632be28f827 100644 --- a/contrib/pax_storage/src/cpp/storage/vec_parallel_pax.cc +++ b/contrib/pax_storage/src/cpp/storage/vec_parallel_pax.cc @@ -60,7 +60,7 @@ class MicroPartitionInfo : public MicroPartitionInfoProvider { if (!visimap_name.empty()) { visimap = pax::LoadVisimap(file_system, nullptr, visimap_name); BitmapRaw raw(visimap->data(), visimap->size()); - bitmap = std::make_unique(raw, BitmapTpl::ReadOnlyRefBitmap); + bitmap = std::make_unique(raw); } return {std::move(visimap), std::move(bitmap)}; } From 38f9b356bf1b2c12e2a84d3cdec6cc7e8d63c730 Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 14 Aug 2025 18:38:19 +0800 Subject: [PATCH 116/260] Fix: use correct offset to access members of Serialized Snapshot Data --- src/backend/utils/time/snapmgr.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c index a5e94e065c2..34f45d5b59b 100644 --- a/src/backend/utils/time/snapmgr.c +++ b/src/backend/utils/time/snapmgr.c @@ -2592,13 +2592,19 @@ RestoreSnapshot(char *start_address) if (serialized_snapshot.haveDistribSnapshot && serialized_snapshot.ds_count > 0) { + Size ds_off = sizeof(SerializedSnapshotData) + + serialized_snapshot.xcnt * sizeof(TransactionId) + + serialized_snapshot.subxcnt * sizeof(TransactionId); + Size ds_lmoff = ds_off + + serialized_snapshot.ds_count * sizeof(DistributedTransactionId); + snapshot->distribSnapshotWithLocalMapping.ds.inProgressXidArray = (DistributedTransactionId*) ((char *) snapshot + dsoff); snapshot->distribSnapshotWithLocalMapping.inProgressMappedLocalXids = (TransactionId*) ((char *) snapshot + dslmoff); memcpy(snapshot->distribSnapshotWithLocalMapping.ds.inProgressXidArray, - (DistributedTransactionId*) (start_address + dsoff), + (DistributedTransactionId*) (start_address + ds_off), serialized_snapshot.ds_count * sizeof(DistributedTransactionId)); @@ -2608,7 +2614,7 @@ RestoreSnapshot(char *start_address) 0, serialized_snapshot.ds_count * sizeof(TransactionId)); memcpy(snapshot->distribSnapshotWithLocalMapping.inProgressMappedLocalXids, - (TransactionId*) (start_address + dslmoff), + (TransactionId*) (start_address + ds_lmoff), serialized_snapshot.currentLocalXidsCount * sizeof(TransactionId)); } From b5d4dc7091cc6a6a92cf71ac921c582b01a0ed03 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Thu, 14 Aug 2025 22:27:22 +0000 Subject: [PATCH 117/260] Fix handling of interconnect_address and parallel worker check in single-node setup In InitializeParallelDSM(), interconnect_address may be NULL in a single-node deployment. Avoid passing NULL to strcpy() by checking before use and fall back to an empty string. Also, in index_create_internal(), refine the condition for enabling parallel index build. Instead of testing "ii_ParallelWorkers != -1", use the clearer and correct check "ii_ParallelWorkers > 0". --- src/backend/access/transam/parallel.c | 5 ++++- src/backend/catalog/index.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 1b52383f556..6ce60577a2f 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -379,7 +379,10 @@ InitializeParallelDSM(ParallelContext *pcxt) /* CDB: should sync some global states to workes */ fps->cdb_aux_state.session_id = gp_session_id; fps->cdb_aux_state.num_segments = numsegmentsFromQD; - strcpy(fps->cdb_aux_state.interconnect_address, interconnect_address); + if (interconnect_address) + strcpy(fps->cdb_aux_state.interconnect_address, interconnect_address); + else + fps->cdb_aux_state.interconnect_address[0] = '\0'; fps->cdb_aux_state.ic_htab_size = ic_htab_size; /* We can skip the rest of this if we're not budgeting for any workers. */ diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index d754d97c781..a775f32e2b0 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1388,7 +1388,7 @@ index_create_internal(Relation heapRelation, * * We should bring it back in the future. */ - index_build(heapRelation, indexRelation, indexInfo, false, indexInfo->ii_ParallelWorkers != -1); + index_build(heapRelation, indexRelation, indexInfo, false, indexInfo->ii_ParallelWorkers > 0); } /* From e30dd60e52259553aeca0ff1cd78cfff086b92bc Mon Sep 17 00:00:00 2001 From: WANG Weinan Date: Thu, 31 Jul 2025 17:54:03 +0800 Subject: [PATCH 118/260] Feat: Enable hot DR cluster The most of feature is done by upsteam, but hot DR qd can not organzie cdbcomponent by `gp_segment_configuration` rel. Define a boolean GUC name as `hot_dr`, if the `hot_dr` enable, read cluster infor from segconf file. --- .github/workflows/build-cloudberry.yml | 3 ++ src/backend/access/transam/xlog.c | 10 +++++ src/backend/cdb/cdbutil.c | 40 +++++++++++++++---- src/backend/utils/misc/guc_gp.c | 27 +++++++++++++ src/include/access/xlog.h | 1 + src/include/cdb/cdbutil.h | 1 + src/include/cdb/cdbvars.h | 1 + src/include/utils/unsync_guc_name.h | 1 + .../expected/hot_standby/faults.out | 3 +- .../isolation2/sql/hot_standby/faults.sql | 3 +- 10 files changed, 80 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index de702b5790d..fd2b9c73949 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -310,6 +310,9 @@ jobs: {"test":"ic-isolation2", "make_configs":["src/test/isolation2:installcheck-isolation2"] }, + {"test":"ic-isolation2-hot-standby", + "make_configs":["src/test/isolation2:installcheck-hot-standby"] + }, {"test":"ic-isolation2-crash", "make_configs":["src/test/isolation2:installcheck-isolation2-crash"], "enable_core_check":false diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index ffc8714cf62..034aeb6473b 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -114,6 +114,7 @@ int XLogArchiveTimeout = 0; int XLogArchiveMode = ARCHIVE_MODE_OFF; char *XLogArchiveCommand = NULL; bool EnableHotStandby = false; +bool EnableHotDR = false; bool fullPageWrites = true; bool wal_log_hints = false; bool wal_compression = false; @@ -7967,6 +7968,12 @@ StartupXLOG(void) if (gp_pause_on_restore_point_replay) pauseRecoveryOnRestorePoint(xlogreader); + /* Exit the recovery loop if a promotion is triggered in pauseRecoveryOnRestorePoint() */ + if (reachedContinuousRecoveryTarget && recoveryTargetAction == RECOVERY_TARGET_ACTION_PROMOTE){ + reachedRecoveryTarget = true; + break; + } + /* Exit loop if we reached inclusive recovery target */ if (recoveryStopsAfter(xlogreader)) { @@ -10757,6 +10764,9 @@ XLogRestorePoint(const char *rpName) xlrec.rp_time = GetCurrentTimestamp(); strlcpy(xlrec.rp_name, rpName, MAXFNAMELEN); + /* LogHotStandby for the restore here */ + LogStandbySnapshot(); + XLogBeginInsert(); XLogRegisterData((char *) &xlrec, sizeof(xl_restore_point)); diff --git a/src/backend/cdb/cdbutil.c b/src/backend/cdb/cdbutil.c index a241549662d..fbf3f8900f2 100644 --- a/src/backend/cdb/cdbutil.c +++ b/src/backend/cdb/cdbutil.c @@ -92,6 +92,7 @@ static int CdbComponentDatabaseInfoCompare(const void *p1, const void *p2); static GpSegConfigEntry * readGpSegConfigFromCatalog(int *total_dbs); static GpSegConfigEntry * readGpSegConfigFromFTSFiles(int *total_dbs); +static GpSegConfigEntry * readGpSegConfigFromFiles(int *total_dbs); static void getAddressesForDBid(GpSegConfigEntry *c, int elevel); static HTAB *hostPrimaryCountHashTableInit(void); @@ -131,6 +132,15 @@ typedef struct HostPrimaryCountEntry */ static GpSegConfigEntry * readGpSegConfigFromFTSFiles(int *total_dbs) +{ + Assert(!IsTransactionState() && !IS_HOT_DR_CLUSTER()); + /* notify and wait FTS to finish a probe and update the dump file */ + FtsNotifyProber(); + return readGpSegConfigFromFiles(total_dbs); +} + +static GpSegConfigEntry * +readGpSegConfigFromFiles(int *total_dbs) { FILE *fd; int idx = 0; @@ -142,11 +152,6 @@ readGpSegConfigFromFTSFiles(int *total_dbs) char address[MAXHOSTNAMELEN]; char buf[MAXHOSTNAMELEN * 2 + 32]; - Assert(!IsTransactionState()); - - /* notify and wait FTS to finish a probe and update the dump file */ - FtsNotifyProber(); - fd = AllocateFile(GPSEGCONFIGDUMPFILE, "r"); if (!fd) @@ -188,6 +193,18 @@ readGpSegConfigFromFTSFiles(int *total_dbs) return configs; } +bool +checkGpSegConfigFtsFiles() +{ + FILE *fd = AllocateFile(GPSEGCONFIGDUMPFILE, "r"); + + if (!fd) + return false; + + FreeFile(fd); + return true; +} + /* * writeGpSegConfigToFTSFiles() dump gp_segment_configuration to the file * GPSEGCONFIGDUMPFILE, in $PGDATA, only FTS process can use this function. @@ -372,10 +389,17 @@ getCdbComponentInfo(void) HTAB *hostPrimaryCountHash = hostPrimaryCountHashTableInit(); - if (IsTransactionState()) - configs = readGpSegConfigFromCatalog(&total_dbs); + if (EnableHotDR) + { + configs = readGpSegConfigFromFiles(&total_dbs); + } else - configs = readGpSegConfigFromFTSFiles(&total_dbs); + { + if (IsTransactionState()) + configs = readGpSegConfigFromCatalog(&total_dbs); + else + configs = readGpSegConfigFromFTSFiles(&total_dbs); + } component_databases = palloc0(sizeof(CdbComponentDatabases)); diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index c7bb596cb61..2c373e5a582 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -86,6 +86,7 @@ static bool check_optimizer(bool *newval, void **extra, GucSource source); static bool check_verify_gpfdists_cert(bool *newval, void **extra, GucSource source); static bool check_dispatch_log_stats(bool *newval, void **extra, GucSource source); static bool check_gp_workfile_compression(bool *newval, void **extra, GucSource source); +static bool check_hot_dr(bool *newval, void **extra, GucSource source); /* Helper function for guc setter */ bool gpvars_check_gp_resqueue_priority_default_value(char **newval, @@ -3331,6 +3332,16 @@ struct config_bool ConfigureNamesBool_gp[] = NULL, NULL, NULL }, + { + {"hot_dr", PGC_POSTMASTER, REPLICATION_STANDBY, + gettext_noop("DR Cluster as well as allows connteions and queries"), + NULL + }, + &EnableHotDR, + false, + check_hot_dr, NULL, NULL + }, + { {"gp_enable_runtime_filter_pushdown", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Try to push the hash table of hash join to the seqscan or AM as bloom filter."), @@ -5455,6 +5466,22 @@ check_verify_gpfdists_cert(bool *newval, void **extra, GucSource source) return true; } +static bool +check_hot_dr(bool *newval, void **extra, GucSource source) +{ + if (*newval && !EnableHotStandby) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("cannot enable \"hot_dr\" when \"hot_standby\" is false"))); + + if (*newval && IS_QUERY_DISPATCHER() && !checkGpSegConfigFtsFiles()) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("cannot enable \"hot_dr\" since DR cluster segment configuration file does not exits"))); + + return true; +} + static bool check_dispatch_log_stats(bool *newval, void **extra, GucSource source) { diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index e8a73ceb201..6d1cc151ed2 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -123,6 +123,7 @@ extern int XLogArchiveTimeout; extern int wal_retrieve_retry_interval; extern char *XLogArchiveCommand; extern bool EnableHotStandby; +extern bool EnableHotDR; extern bool fullPageWrites; extern bool wal_log_hints; diff --git a/src/include/cdb/cdbutil.h b/src/include/cdb/cdbutil.h index 22c3cc782d8..0f638bbd521 100644 --- a/src/include/cdb/cdbutil.h +++ b/src/include/cdb/cdbutil.h @@ -132,6 +132,7 @@ extern char *getDnsAddress(char *name, int port, int elevel); #ifdef USE_INTERNAL_FTS extern void writeGpSegConfigToFTSFiles(void); +extern bool checkGpSegConfigFtsFiles(void); #else GpSegConfigEntry * readGpSegConfig(char * buff, int *total_dbs); diff --git a/src/include/cdb/cdbvars.h b/src/include/cdb/cdbvars.h index 2393384ec3a..534f957978d 100644 --- a/src/include/cdb/cdbvars.h +++ b/src/include/cdb/cdbvars.h @@ -757,6 +757,7 @@ extern GpId GpIdentity; #define MAX_DBID_STRING_LENGTH 11 #define UNINITIALIZED_GP_IDENTITY_VALUE (-10000) +#define IS_HOT_DR_CLUSTER() (EnableHotDR) #define IS_QUERY_DISPATCHER() (GpIdentity.segindex == MASTER_CONTENT_ID) #define IS_HOT_STANDBY_QD() (EnableHotStandby && IS_QUERY_DISPATCHER() && RecoveryInProgress()) diff --git a/src/include/utils/unsync_guc_name.h b/src/include/utils/unsync_guc_name.h index b26c5b43c7b..37f629e6e97 100644 --- a/src/include/utils/unsync_guc_name.h +++ b/src/include/utils/unsync_guc_name.h @@ -294,6 +294,7 @@ "gp_workfile_limit_per_segment", "gp_workfile_max_entries", "hba_file", + "hot_dr", "hot_standby", "hot_standby_feedback", "huge_pages", diff --git a/src/test/isolation2/expected/hot_standby/faults.out b/src/test/isolation2/expected/hot_standby/faults.out index 39f3a06cca6..2eb16b37229 100644 --- a/src/test/isolation2/expected/hot_standby/faults.out +++ b/src/test/isolation2/expected/hot_standby/faults.out @@ -133,7 +133,7 @@ select gp_inject_fault('out_of_recovery_in_startupxlog', 'reset', dbid) from gp_ ERROR: primary segments can only process MPP protocol messages from primary QD (seg1 slice1 127.0.1.1:7006 pid=14671) HINT: Exit the current session and re-connect. -1Sq: ... - +-- start_ignore -- will fail due to downed mirror (previous primary) -1S: select * from hs_failover; ERROR: failed to acquire resources on one or more segments @@ -141,6 +141,7 @@ DETAIL: connection to server at "10.13.9.74", port 7003 failed: Connection refu Is the server running on that host and accepting TCP/IP connections? (seg1 10.13.9.74:7003) -1Sq: ... +-- end_ignore -- bring the downed mirror up !\retcode gprecoverseg -aF; diff --git a/src/test/isolation2/sql/hot_standby/faults.sql b/src/test/isolation2/sql/hot_standby/faults.sql index 6e25bcba272..b1be240916a 100644 --- a/src/test/isolation2/sql/hot_standby/faults.sql +++ b/src/test/isolation2/sql/hot_standby/faults.sql @@ -59,10 +59,11 @@ select gp_inject_fault('out_of_recovery_in_startupxlog', 'reset', dbid) from gp_ -- in an existing gang. That mirror is now a primary, so it will complain and the query fails. -1S: select * from hs_failover; -1Sq: - +-- start_ignore -- will fail due to downed mirror (previous primary) -1S: select * from hs_failover; -1Sq: +-- end_ignore -- bring the downed mirror up !\retcode gprecoverseg -aF; From c9901522256e334c26a17f6226803c5ec61f176d Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Mon, 4 Aug 2025 22:20:07 +0800 Subject: [PATCH 119/260] Align scan terminology: Shared Scan and ShareInputScan. The plan node appears as 'Shared Scan' in user's EXPLAIN output, while internally it's represented as ShareInputScan type. Most codes use the correct terms, but some places incorrectly mix: - 'shared input scan' in codebase (should be 'ShareInputScan') - 'Share Scan' in EXPLAIN (should be 'Shared Scan') This change aligns all usage while preserving existing correct references. Authored-by: Zhang Mingli avamingli@gmail.com --- .../src/test/regress/expected/qp_with_clause.out | 2 +- .../test/regress/expected/query_finish_pending.out | 14 +++++++------- .../src/test/regress/input/temp_tablespaces.source | 2 +- .../test/regress/output/temp_tablespaces.source | 2 +- .../src/test/regress/sql/qp_with_clause.sql | 2 +- .../src/test/regress/sql/query_finish_pending.sql | 14 +++++++------- src/backend/cdb/cdbmutate.c | 8 ++++---- src/backend/executor/nodeShareInputScan.c | 6 +++--- .../gpopt/translate/CTranslatorDXLToPlStmt.cpp | 2 +- .../src/translate/CTranslatorDXLToExpr.cpp | 2 +- src/include/gpopt/translate/CContextDXLToPlStmt.h | 2 +- src/include/optimizer/cost.h | 2 +- src/test/regress/expected/qp_with_clause.out | 2 +- .../regress/expected/qp_with_clause_optimizer.out | 2 +- src/test/regress/expected/query_finish_pending.out | 14 +++++++------- src/test/regress/input/temp_tablespaces.source | 2 +- src/test/regress/output/temp_tablespaces.source | 2 +- src/test/regress/sql/qp_with_clause.sql | 2 +- src/test/regress/sql/query_finish_pending.sql | 14 +++++++------- .../singlenode_regress/expected/qp_with_clause.out | 2 +- .../expected/query_finish_pending.out | 14 +++++++------- src/test/singlenode_regress/sql/qp_with_clause.sql | 2 +- .../sql/query_finish_pending.sql | 14 +++++++------- 23 files changed, 64 insertions(+), 64 deletions(-) diff --git a/contrib/pax_storage/src/test/regress/expected/qp_with_clause.out b/contrib/pax_storage/src/test/regress/expected/qp_with_clause.out index 2a496cc0f7a..f2b67df8d8f 100644 --- a/contrib/pax_storage/src/test/regress/expected/qp_with_clause.out +++ b/contrib/pax_storage/src/test/regress/expected/qp_with_clause.out @@ -11089,7 +11089,7 @@ ORDER BY 1, 2, 3, 4 DESC LIMIT 25; 35NAME | 7 | 5NAME | 1 (25 rows) --- Test that SharedInputScan within the same slice is always executed +-- Test that ShareInputScan within the same slice is always executed set gp_cte_sharing=on; -- start_ignore CREATE TABLE car (a int, b int); diff --git a/contrib/pax_storage/src/test/regress/expected/query_finish_pending.out b/contrib/pax_storage/src/test/regress/expected/query_finish_pending.out index cd162170e13..f075a0f75a2 100644 --- a/contrib/pax_storage/src/test/regress/expected/query_finish_pending.out +++ b/contrib/pax_storage/src/test/regress/expected/query_finish_pending.out @@ -92,7 +92,7 @@ select gp_inject_fault('execsort_sort_bounded_heap', 'status', 2); (1 row) --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node drop table if exists testsisc; NOTICE: table "testsisc" does not exist, skipping @@ -104,7 +104,7 @@ insert into testsisc select i, i % 1000, i % 100000, i % 75 from (select count(*) as nsegments from gp_segment_configuration where role='p' and content >= 0) foo) bar; set gp_resqueue_print_operator_memory_limits=on; set statement_mem='2MB'; --- ORCA does not generate SharedInputScan with a Sort node underneath it. For +-- ORCA does not generate ShareInputScan with a Sort node underneath it. For -- the following query, ORCA disregards the order by inside the cte definition; -- planner on the other hand does not. set optimizer=off; @@ -114,8 +114,8 @@ select gp_inject_fault('execshare_input_next', 'reset', 2); Success: (1 row) --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 2); gp_inject_fault ----------------- @@ -137,7 +137,7 @@ select gp_inject_fault('execshare_input_next', 'status', 2); (1 row) --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node and sort_mk algorithm is used select gp_inject_fault('execshare_input_next', 'reset', 2); gp_inject_fault @@ -145,8 +145,8 @@ select gp_inject_fault('execshare_input_next', 'reset', 2); Success: (1 row) --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 2); gp_inject_fault ----------------- diff --git a/contrib/pax_storage/src/test/regress/input/temp_tablespaces.source b/contrib/pax_storage/src/test/regress/input/temp_tablespaces.source index c3d19970517..c36522fe90d 100644 --- a/contrib/pax_storage/src/test/regress/input/temp_tablespaces.source +++ b/contrib/pax_storage/src/test/regress/input/temp_tablespaces.source @@ -45,7 +45,7 @@ CREATE TABLE tts_foo (i int, j int) distributed by(i); insert into tts_foo select i, i from generate_series(1,80000)i; ANALYZE tts_foo; set gp_cte_sharing=on; --- CBDB_PARALLEL_FIXME: since we disabled shared input scan in parallel mode, sisc_xslice_temp_files +-- CBDB_PARALLEL_FIXME: since we disabled Share Input Scan in parallel mode, sisc_xslice_temp_files -- will never be triggered. We need set max_parallel_workers_per_gather to 0 in this case. set max_parallel_workers_per_gather = 0; diff --git a/contrib/pax_storage/src/test/regress/output/temp_tablespaces.source b/contrib/pax_storage/src/test/regress/output/temp_tablespaces.source index 1f579686f3d..f11164ce226 100644 --- a/contrib/pax_storage/src/test/regress/output/temp_tablespaces.source +++ b/contrib/pax_storage/src/test/regress/output/temp_tablespaces.source @@ -56,7 +56,7 @@ CREATE TABLE tts_foo (i int, j int) distributed by(i); insert into tts_foo select i, i from generate_series(1,80000)i; ANALYZE tts_foo; set gp_cte_sharing=on; --- CBDB_PARALLEL_FIXME: since we disabled shared input scan in parallel mode, sisc_xslice_temp_files +-- CBDB_PARALLEL_FIXME: since we disabled Share Input Scan in parallel mode, sisc_xslice_temp_files -- will never be triggered. We need set max_parallel_workers_per_gather to 0 in this case. set max_parallel_workers_per_gather = 0; -- CASE 1: when temp_tablespaces is set, hashagg and share-input-scan diff --git a/contrib/pax_storage/src/test/regress/sql/qp_with_clause.sql b/contrib/pax_storage/src/test/regress/sql/qp_with_clause.sql index ad018427f55..567de4f00d1 100644 --- a/contrib/pax_storage/src/test/regress/sql/qp_with_clause.sql +++ b/contrib/pax_storage/src/test/regress/sql/qp_with_clause.sql @@ -10329,7 +10329,7 @@ WHERE e.deptno = dc1.deptno AND m.deptno = dmc1.dept_mgr_no ORDER BY 1, 2, 3, 4 DESC LIMIT 25; --- Test that SharedInputScan within the same slice is always executed +-- Test that ShareInputScan within the same slice is always executed set gp_cte_sharing=on; -- start_ignore diff --git a/contrib/pax_storage/src/test/regress/sql/query_finish_pending.sql b/contrib/pax_storage/src/test/regress/sql/query_finish_pending.sql index 220fd4c35e5..e2d0a186d0c 100644 --- a/contrib/pax_storage/src/test/regress/sql/query_finish_pending.sql +++ b/contrib/pax_storage/src/test/regress/sql/query_finish_pending.sql @@ -38,7 +38,7 @@ reset enable_parallel; select gp_inject_fault('execsort_sort_bounded_heap', 'status', 2); --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node drop table if exists testsisc; create table testsisc (i1 int, i2 int, i3 int, i4 int); @@ -48,13 +48,13 @@ insert into testsisc select i, i % 1000, i % 100000, i % 75 from set gp_resqueue_print_operator_memory_limits=on; set statement_mem='2MB'; --- ORCA does not generate SharedInputScan with a Sort node underneath it. For +-- ORCA does not generate ShareInputScan with a Sort node underneath it. For -- the following query, ORCA disregards the order by inside the cte definition; -- planner on the other hand does not. set optimizer=off; select gp_inject_fault('execshare_input_next', 'reset', 2); --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 2); set enable_parallel = off; @@ -64,13 +64,13 @@ select * from cte c1, cte c2 limit 2; select gp_inject_fault('execshare_input_next', 'status', 2); --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node and sort_mk algorithm is used select gp_inject_fault('execshare_input_next', 'reset', 2); --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 2); with cte as (select i2 from testsisc order by i2) diff --git a/src/backend/cdb/cdbmutate.c b/src/backend/cdb/cdbmutate.c index 1b5820587ef..27115cfed45 100644 --- a/src/backend/cdb/cdbmutate.c +++ b/src/backend/cdb/cdbmutate.c @@ -825,8 +825,8 @@ shareinput_peekmot(ApplyShareInputContext *ctxt) * plan. * * To work around that issue, create a CTE for each shared input node, with - * columns that match the target list of the SharedInputScan's subplan, - * and replace the target list entries of the SharedInputScan with + * columns that match the target list of the ShareInputScan's subplan, + * and replace the target list entries of the ShareInputScan with * Vars that point to the CTE instead of the child plan. */ Plan * @@ -893,8 +893,8 @@ replace_shareinput_targetlists_walker(Node *node, PlannerInfo *root, bool fPop) /* * Replace all the target list entries. * - * SharedInputScan nodes are not projection-capable, so the target - * list of the SharedInputScan matches the subplan's target list. + * ShareInputScan nodes are not projection-capable, so the target + * list of the ShareInputScan matches the subplan's target list. */ newtargetlist = NIL; attno = 1; diff --git a/src/backend/executor/nodeShareInputScan.c b/src/backend/executor/nodeShareInputScan.c index 808ae157ce8..a2ce47e192a 100644 --- a/src/backend/executor/nodeShareInputScan.c +++ b/src/backend/executor/nodeShareInputScan.c @@ -76,7 +76,7 @@ /* * In a cross-slice ShareinputScan, the producer and consumer processes * communicate using shared memory. There's a hash table containing one - * 'shareinput_share_state' for each in-progress shared input scan. + * 'shareinput_share_state' for each in-progress Share Input Scan. * * The hash table itself,, and the fields within every entry, are protected * by ShareInputScanLock. (Although some operations get away without the @@ -631,11 +631,11 @@ ExecSquelchShareInputScan(ShareInputScanState *node, bool force) ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); /* - * If this SharedInputScan is shared within the same slice then its + * If this ShareInputScan is shared within the same slice then its * subtree may still need to be executed and the motions in the subtree * cannot yet be stopped. Thus, don't recurse in this case. * - * In squelching a cross-slice SharedInputScan writer, we need to ensure + * In squelching a cross-slice ShareInputScan writer, we need to ensure * we don't block any reader on other slices as a result of not * materializing the shared plan. * diff --git a/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp b/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp index e706f5f68ac..4acf13bd606 100644 --- a/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp +++ b/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp @@ -4445,7 +4445,7 @@ CTranslatorDXLToPlStmt::TranslateDXLCTEProducerToSharedScan( CDXLPhysicalCTEProducer::Cast(cte_producer_dxlnode->GetOperator()); ULONG cte_id = cte_prod_dxlop->Id(); - // create the shared input scan representing the CTE Producer + // create the Share Input Scan representing the CTE Producer ShareInputScan *shared_input_scan = MakeNode(ShareInputScan); shared_input_scan->share_id = cte_id; shared_input_scan->discard_output = true; diff --git a/src/backend/gporca/libgpopt/src/translate/CTranslatorDXLToExpr.cpp b/src/backend/gporca/libgpopt/src/translate/CTranslatorDXLToExpr.cpp index 0339db778b9..c592a7ab7f3 100644 --- a/src/backend/gporca/libgpopt/src/translate/CTranslatorDXLToExpr.cpp +++ b/src/backend/gporca/libgpopt/src/translate/CTranslatorDXLToExpr.cpp @@ -367,7 +367,7 @@ void CTranslatorDXLToExpr::PruneCTEs() poper->RecalOutputColumns(umask, pprgpcrsz); // Align consumer and producer output columns. - // In fact, we can support the column projection in consumer(SharedInputScan). + // In fact, we can support the column projection in consumer(ShareInputScan). // However, non-requested columns in consumer(which from producer) may be added to the consumer, // which will make the plan for consumer(support projection) very complicated. // diff --git a/src/include/gpopt/translate/CContextDXLToPlStmt.h b/src/include/gpopt/translate/CContextDXLToPlStmt.h index 3a1be11d196..2630ad1a62d 100644 --- a/src/include/gpopt/translate/CContextDXLToPlStmt.h +++ b/src/include/gpopt/translate/CContextDXLToPlStmt.h @@ -158,7 +158,7 @@ class CContextDXLToPlStmt // register a newly CTE producer void RegisterCTEProducerInfo(ULONG cte_id, ULongPtrArray *producer_output_colidx_map, ShareInputScan *siscan); - // return the shared input scan plans representing the CTE producer + // return the Share Input Scan plans representing the CTE producer std::pair GetCTEProducerInfo(ULONG cte_id) const; // return list of range table entries diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h index c49cba565f8..ff8b9c591f0 100644 --- a/src/include/optimizer/cost.h +++ b/src/include/optimizer/cost.h @@ -166,7 +166,7 @@ extern void cost_group(Path *path, PlannerInfo *root, List *quals, Cost input_startup_cost, Cost input_total_cost, double input_tuples); -/* GPDB_92_MERGE_FIXME: parameterized path for shared input scan? */ +/* GPDB_92_MERGE_FIXME: parameterized path for Share Input Scan? */ extern void cost_shareinputscan(Path *path, PlannerInfo *root, Cost sharecost, double ntuples, int width); extern void initial_cost_nestloop(PlannerInfo *root, JoinCostWorkspace *workspace, diff --git a/src/test/regress/expected/qp_with_clause.out b/src/test/regress/expected/qp_with_clause.out index b87845ca82b..8aaa6f73dae 100644 --- a/src/test/regress/expected/qp_with_clause.out +++ b/src/test/regress/expected/qp_with_clause.out @@ -11090,7 +11090,7 @@ ORDER BY 1, 2, 3, 4 DESC LIMIT 25; 35NAME | 7 | 5NAME | 1 (25 rows) --- Test that SharedInputScan within the same slice is always executed +-- Test that ShareInputScan within the same slice is always executed set gp_cte_sharing=on; -- start_ignore CREATE TABLE car (a int, b int); diff --git a/src/test/regress/expected/qp_with_clause_optimizer.out b/src/test/regress/expected/qp_with_clause_optimizer.out index ddfae1d3747..e70be54b656 100644 --- a/src/test/regress/expected/qp_with_clause_optimizer.out +++ b/src/test/regress/expected/qp_with_clause_optimizer.out @@ -11139,7 +11139,7 @@ ORDER BY 1, 2, 3, 4 DESC LIMIT 25; 35NAME | 7 | 5NAME | 1 (25 rows) --- Test that SharedInputScan within the same slice is always executed +-- Test that ShareInputScan within the same slice is always executed set gp_cte_sharing=on; -- start_ignore CREATE TABLE car (a int, b int); diff --git a/src/test/regress/expected/query_finish_pending.out b/src/test/regress/expected/query_finish_pending.out index cd162170e13..f075a0f75a2 100644 --- a/src/test/regress/expected/query_finish_pending.out +++ b/src/test/regress/expected/query_finish_pending.out @@ -92,7 +92,7 @@ select gp_inject_fault('execsort_sort_bounded_heap', 'status', 2); (1 row) --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node drop table if exists testsisc; NOTICE: table "testsisc" does not exist, skipping @@ -104,7 +104,7 @@ insert into testsisc select i, i % 1000, i % 100000, i % 75 from (select count(*) as nsegments from gp_segment_configuration where role='p' and content >= 0) foo) bar; set gp_resqueue_print_operator_memory_limits=on; set statement_mem='2MB'; --- ORCA does not generate SharedInputScan with a Sort node underneath it. For +-- ORCA does not generate ShareInputScan with a Sort node underneath it. For -- the following query, ORCA disregards the order by inside the cte definition; -- planner on the other hand does not. set optimizer=off; @@ -114,8 +114,8 @@ select gp_inject_fault('execshare_input_next', 'reset', 2); Success: (1 row) --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 2); gp_inject_fault ----------------- @@ -137,7 +137,7 @@ select gp_inject_fault('execshare_input_next', 'status', 2); (1 row) --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node and sort_mk algorithm is used select gp_inject_fault('execshare_input_next', 'reset', 2); gp_inject_fault @@ -145,8 +145,8 @@ select gp_inject_fault('execshare_input_next', 'reset', 2); Success: (1 row) --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 2); gp_inject_fault ----------------- diff --git a/src/test/regress/input/temp_tablespaces.source b/src/test/regress/input/temp_tablespaces.source index 1130658f9da..9fb0644ee9c 100644 --- a/src/test/regress/input/temp_tablespaces.source +++ b/src/test/regress/input/temp_tablespaces.source @@ -41,7 +41,7 @@ CREATE TABLE tts_foo (i int, j int) distributed by(i); insert into tts_foo select i, i from generate_series(1,80000)i; ANALYZE tts_foo; set gp_cte_sharing=on; --- CBDB_PARALLEL_FIXME: since we disabled shared input scan in parallel mode, sisc_xslice_temp_files +-- CBDB_PARALLEL_FIXME: since we disabled Share Input Scan in parallel mode, sisc_xslice_temp_files -- will never be triggered. We need set max_parallel_workers_per_gather to 0 in this case. set max_parallel_workers_per_gather = 0; diff --git a/src/test/regress/output/temp_tablespaces.source b/src/test/regress/output/temp_tablespaces.source index 8fe01bff02a..45ae696b58c 100644 --- a/src/test/regress/output/temp_tablespaces.source +++ b/src/test/regress/output/temp_tablespaces.source @@ -52,7 +52,7 @@ CREATE TABLE tts_foo (i int, j int) distributed by(i); insert into tts_foo select i, i from generate_series(1,80000)i; ANALYZE tts_foo; set gp_cte_sharing=on; --- CBDB_PARALLEL_FIXME: since we disabled shared input scan in parallel mode, sisc_xslice_temp_files +-- CBDB_PARALLEL_FIXME: since we disabled Share Input Scan in parallel mode, sisc_xslice_temp_files -- will never be triggered. We need set max_parallel_workers_per_gather to 0 in this case. set max_parallel_workers_per_gather = 0; -- CASE 1: when temp_tablespaces is set, hashagg and share-input-scan diff --git a/src/test/regress/sql/qp_with_clause.sql b/src/test/regress/sql/qp_with_clause.sql index 5164491251b..fbff6575d89 100644 --- a/src/test/regress/sql/qp_with_clause.sql +++ b/src/test/regress/sql/qp_with_clause.sql @@ -10331,7 +10331,7 @@ WHERE e.deptno = dc1.deptno AND m.deptno = dmc1.dept_mgr_no ORDER BY 1, 2, 3, 4 DESC LIMIT 25; --- Test that SharedInputScan within the same slice is always executed +-- Test that ShareInputScan within the same slice is always executed set gp_cte_sharing=on; -- start_ignore diff --git a/src/test/regress/sql/query_finish_pending.sql b/src/test/regress/sql/query_finish_pending.sql index 220fd4c35e5..e2d0a186d0c 100644 --- a/src/test/regress/sql/query_finish_pending.sql +++ b/src/test/regress/sql/query_finish_pending.sql @@ -38,7 +38,7 @@ reset enable_parallel; select gp_inject_fault('execsort_sort_bounded_heap', 'status', 2); --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node drop table if exists testsisc; create table testsisc (i1 int, i2 int, i3 int, i4 int); @@ -48,13 +48,13 @@ insert into testsisc select i, i % 1000, i % 100000, i % 75 from set gp_resqueue_print_operator_memory_limits=on; set statement_mem='2MB'; --- ORCA does not generate SharedInputScan with a Sort node underneath it. For +-- ORCA does not generate ShareInputScan with a Sort node underneath it. For -- the following query, ORCA disregards the order by inside the cte definition; -- planner on the other hand does not. set optimizer=off; select gp_inject_fault('execshare_input_next', 'reset', 2); --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 2); set enable_parallel = off; @@ -64,13 +64,13 @@ select * from cte c1, cte c2 limit 2; select gp_inject_fault('execshare_input_next', 'status', 2); --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node and sort_mk algorithm is used select gp_inject_fault('execshare_input_next', 'reset', 2); --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 2); with cte as (select i2 from testsisc order by i2) diff --git a/src/test/singlenode_regress/expected/qp_with_clause.out b/src/test/singlenode_regress/expected/qp_with_clause.out index 70620fb5dd8..35831398b32 100644 --- a/src/test/singlenode_regress/expected/qp_with_clause.out +++ b/src/test/singlenode_regress/expected/qp_with_clause.out @@ -11078,7 +11078,7 @@ ORDER BY 1, 2, 3, 4 DESC LIMIT 25; 35NAME | 7 | 5NAME | 1 (25 rows) --- Test that SharedInputScan within the same slice is always executed +-- Test that ShareInputScan within the same slice is always executed set gp_cte_sharing=on; -- start_ignore CREATE TABLE car (a int, b int); diff --git a/src/test/singlenode_regress/expected/query_finish_pending.out b/src/test/singlenode_regress/expected/query_finish_pending.out index 92a45ebf7b6..92b96a14d53 100644 --- a/src/test/singlenode_regress/expected/query_finish_pending.out +++ b/src/test/singlenode_regress/expected/query_finish_pending.out @@ -98,7 +98,7 @@ select gp_inject_fault('execsort_sort_bounded_heap', 'status', 1); (1 row) --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node drop table if exists testsisc; NOTICE: table "testsisc" does not exist, skipping @@ -110,7 +110,7 @@ insert into testsisc select i, i % 1000, i % 100000, i % 75 from (select count(*) as nsegments from gp_segment_configuration where role='p' and content >= -1) foo) bar; set gp_resqueue_print_operator_memory_limits=on; set statement_mem='2MB'; --- ORCA does not generate SharedInputScan with a Sort node underneath it. For +-- ORCA does not generate ShareInputScan with a Sort node underneath it. For -- the following query, ORCA disregards the order by inside the cte definition; -- planner on the other hand does not. set optimizer=off; @@ -120,8 +120,8 @@ select gp_inject_fault('execshare_input_next', 'reset', 1); Success: (1 row) --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 1); gp_inject_fault ----------------- @@ -145,7 +145,7 @@ select gp_inject_fault('execshare_input_next', 'status', 1); (1 row) --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node and sort_mk algorithm is used select gp_inject_fault('execshare_input_next', 'reset', 1); gp_inject_fault @@ -153,8 +153,8 @@ select gp_inject_fault('execshare_input_next', 'reset', 1); Success: (1 row) --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 1); gp_inject_fault ----------------- diff --git a/src/test/singlenode_regress/sql/qp_with_clause.sql b/src/test/singlenode_regress/sql/qp_with_clause.sql index 117da4ce87a..5ca3593210b 100644 --- a/src/test/singlenode_regress/sql/qp_with_clause.sql +++ b/src/test/singlenode_regress/sql/qp_with_clause.sql @@ -10329,7 +10329,7 @@ WHERE e.deptno = dc1.deptno AND m.deptno = dmc1.dept_mgr_no ORDER BY 1, 2, 3, 4 DESC LIMIT 25; --- Test that SharedInputScan within the same slice is always executed +-- Test that ShareInputScan within the same slice is always executed set gp_cte_sharing=on; -- start_ignore diff --git a/src/test/singlenode_regress/sql/query_finish_pending.sql b/src/test/singlenode_regress/sql/query_finish_pending.sql index b59fced52ac..c353bf82abf 100644 --- a/src/test/singlenode_regress/sql/query_finish_pending.sql +++ b/src/test/singlenode_regress/sql/query_finish_pending.sql @@ -45,7 +45,7 @@ select i1 from _tmp_table order by i2 limit 3; select gp_inject_fault('execsort_sort_bounded_heap', 'status', 1); --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node drop table if exists testsisc; create table testsisc (i1 int, i2 int, i3 int, i4 int); @@ -55,13 +55,13 @@ insert into testsisc select i, i % 1000, i % 100000, i % 75 from set gp_resqueue_print_operator_memory_limits=on; set statement_mem='2MB'; --- ORCA does not generate SharedInputScan with a Sort node underneath it. For +-- ORCA does not generate ShareInputScan with a Sort node underneath it. For -- the following query, ORCA disregards the order by inside the cte definition; -- planner on the other hand does not. set optimizer=off; select gp_inject_fault('execshare_input_next', 'reset', 1); --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 1); -- In cbdb single node, if we inject fault in the single node, no data should return. @@ -71,13 +71,13 @@ select * from cte c1, cte c2 limit 2; -- end_ignore select gp_inject_fault('execshare_input_next', 'status', 1); --- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, +-- test if Share Input Scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed, -- where the child is a Sort node and sort_mk algorithm is used select gp_inject_fault('execshare_input_next', 'reset', 1); --- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple. --- This will eagerly free the memory context of shared input scan's child node. +-- Set QueryFinishPending to true after ShareInputScan has retrieved the first tuple. +-- This will eagerly free the memory context of Share Input Scan's child node. select gp_inject_fault('execshare_input_next', 'finish_pending', 1); -- In cbdb single node, if we inject fault in the single node, no data should return. From e588d5c282687878f40ed72c5f07713478cb623b Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Thu, 7 Aug 2025 16:58:38 +0800 Subject: [PATCH 120/260] Fix crash in explain with append info for ShareInputScan nodes. The issue occurs when ShareInputScan nodes are reused multiple times during explain with append info in deparse_context_for_plan_tree(). Address that by marking only the producer of ShareInputScan with the same share_id to prevent the crash. This ensures proper handling of shared scan nodes during plan tree deparsing. Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/cdb/cdbmutate.c | 2 ++ src/backend/nodes/copyfuncs.c | 1 + src/backend/nodes/outfuncs_common.c | 1 + src/backend/nodes/readfast.c | 1 + src/backend/optimizer/plan/planshare.c | 1 + src/backend/optimizer/plan/setrefs.c | 15 +++++++++++++++ src/include/nodes/plannodes.h | 3 +++ 7 files changed, 24 insertions(+) diff --git a/src/backend/cdb/cdbmutate.c b/src/backend/cdb/cdbmutate.c index 27115cfed45..6fdf21d58ae 100644 --- a/src/backend/cdb/cdbmutate.c +++ b/src/backend/cdb/cdbmutate.c @@ -659,6 +659,8 @@ shareinput_save_producer(ShareInputScan *plan, ApplyShareInputContext *ctxt) ctxt->shared_input_count = new_shared_input_count; } + plan->ref_set = true; + Assert(ctxt->shared_plans[share_id] == NULL); ctxt->shared_plans[share_id] = plan->scan.plan.lefttree; } diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index e9c44880cb4..7dcead7c499 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -1262,6 +1262,7 @@ _copyShareInputScan(const ShareInputScan *from) COPY_SCALAR_FIELD(this_slice_id); COPY_SCALAR_FIELD(nconsumers); COPY_SCALAR_FIELD(discard_output); + COPY_SCALAR_FIELD(ref_set); return newnode; } diff --git a/src/backend/nodes/outfuncs_common.c b/src/backend/nodes/outfuncs_common.c index f164f5a6ca6..44a760390f2 100644 --- a/src/backend/nodes/outfuncs_common.c +++ b/src/backend/nodes/outfuncs_common.c @@ -398,6 +398,7 @@ _outShareInputScan(StringInfo str, const ShareInputScan *node) WRITE_INT_FIELD(this_slice_id); WRITE_INT_FIELD(nconsumers); WRITE_BOOL_FIELD(discard_output); + WRITE_BOOL_FIELD(ref_set); _outPlanInfo(str, (Plan *) node); } diff --git a/src/backend/nodes/readfast.c b/src/backend/nodes/readfast.c index 0cf853e5847..8066d1198c1 100644 --- a/src/backend/nodes/readfast.c +++ b/src/backend/nodes/readfast.c @@ -1002,6 +1002,7 @@ _readShareInputScan(void) READ_INT_FIELD(this_slice_id); READ_INT_FIELD(nconsumers); READ_BOOL_FIELD(discard_output); + READ_BOOL_FIELD(ref_set); ReadCommonPlan(&local_node->scan.plan); diff --git a/src/backend/optimizer/plan/planshare.c b/src/backend/optimizer/plan/planshare.c index 75983b8ffe3..f60f45f933e 100644 --- a/src/backend/optimizer/plan/planshare.c +++ b/src/backend/optimizer/plan/planshare.c @@ -40,6 +40,7 @@ make_shareinputscan(PlannerInfo *root, Plan *inputplan) sisc->this_slice_id = -1; sisc->nconsumers = 0; sisc->discard_output = false; + sisc->ref_set = false; sisc->scan.plan.qual = NIL; sisc->scan.plan.righttree = NULL; diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 715971a7b02..5ed6f9dacab 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -387,6 +387,7 @@ set_plan_references(PlannerInfo *root, Plan *plan) PlannerGlobal *glob = root->glob; int rtoffset = list_length(glob->finalrtable); ListCell *lc; + bool need_append_rel = true; #ifdef USE_ASSERT_CHECKING /* @@ -422,6 +423,17 @@ set_plan_references(PlannerInfo *root, Plan *plan) glob->finalrowmarks = lappend(glob->finalrowmarks, newrc); } + /* + * ShareInputScan nodes can be reused multiple times during execution, but this + * causes a crash when explaining plans with append info in the function + * deparse_context_for_plan_tree(). + * + * To fix this, we only add appendrels for the producer ShareInputScan node of + * a given share_id, rather than all nodes with the same share_id. + */ + if (plan != NULL && IsA(plan, ShareInputScan)) + need_append_rel = ((ShareInputScan *) plan)->ref_set; + /* * Adjust RT indexes of AppendRelInfos and add to final appendrels list. * We assume the AppendRelInfos were built during planning and don't need @@ -431,6 +443,9 @@ set_plan_references(PlannerInfo *root, Plan *plan) { AppendRelInfo *appinfo = lfirst_node(AppendRelInfo, lc); + if (!need_append_rel) + break; + /* adjust RT indexes */ appinfo->parent_relid += rtoffset; appinfo->child_relid += rtoffset; diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index e4695fd56f2..dd214cb9996 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -1245,6 +1245,9 @@ typedef struct ShareInputScan /* Discard the scan output? True for ORCA CTE producer, false otherwise. */ bool discard_output; + + /* Could be set reference? */ + bool ref_set; } ShareInputScan; /* ---------------- From c0c99c6e170e96e0efd2bde8b5dad13d77bfe709 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Wed, 20 Aug 2025 15:49:42 +0800 Subject: [PATCH 121/260] Add TPC-DS Query 04 test case to verify CTE sharing bug. This adds the complex TPC-DS Query 04 as a test case to verify a bug that caused crashes when gp_cte_sharing=on in the planner. The issue was difficult to reproduce with simpler queries, requiring the full complexity of TPC-DS Query 04 to properly manifest. The crash occurred during planning when CTE sharing was enabled. Adding this test will help prevent regression of this specific planner issue. While not a minimal reproduction case, the full query is necessary to reliably trigger the problematic behavior. Authored-by: Zhang Mingli avamingli@gmail.com --- src/test/regress/expected/tpcds_q04.out | 5546 ++++++++++++++++ .../regress/expected/tpcds_q04_optimizer.out | 5572 ++++++++++++++++ src/test/regress/greenplum_schedule | 3 + src/test/regress/sql/tpcds_q04.sql | 5591 +++++++++++++++++ 4 files changed, 16712 insertions(+) create mode 100644 src/test/regress/expected/tpcds_q04.out create mode 100644 src/test/regress/expected/tpcds_q04_optimizer.out create mode 100644 src/test/regress/sql/tpcds_q04.sql diff --git a/src/test/regress/expected/tpcds_q04.out b/src/test/regress/expected/tpcds_q04.out new file mode 100644 index 00000000000..2bdcd377f85 --- /dev/null +++ b/src/test/regress/expected/tpcds_q04.out @@ -0,0 +1,5546 @@ +CREATE SCHEMA cte_bug; +SET gp_default_storage_options = ''; +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); + set_config +------------ + +(1 row) + +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; +SET default_tablespace = ''; +SET default_table_access_method = ao_column; +-- +-- Name: catalog_sales; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.catalog_sales; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.catalog_sales; + ^ +CREATE TABLE cte_bug.catalog_sales ( + cs_sold_date_sk integer, + cs_sold_time_sk integer, + cs_ship_date_sk integer, + cs_bill_customer_sk integer, + cs_bill_cdemo_sk integer, + cs_bill_hdemo_sk integer, + cs_bill_addr_sk integer, + cs_ship_customer_sk integer, + cs_ship_cdemo_sk integer, + cs_ship_hdemo_sk integer, + cs_ship_addr_sk integer, + cs_call_center_sk integer, + cs_catalog_page_sk integer, + cs_ship_mode_sk integer, + cs_warehouse_sk integer, + cs_item_sk integer NOT NULL, + cs_promo_sk integer, + cs_order_number bigint NOT NULL, + cs_quantity integer, + cs_wholesale_cost numeric(7,2), + cs_list_price numeric(7,2), + cs_sales_price numeric(7,2), + cs_ext_discount_amt numeric(7,2), + cs_ext_sales_price numeric(7,2), + cs_ext_wholesale_cost numeric(7,2), + cs_ext_list_price numeric(7,2), + cs_ext_tax numeric(7,2), + cs_coupon_amt numeric(7,2), + cs_ext_ship_cost numeric(7,2), + cs_net_paid numeric(7,2), + cs_net_paid_inc_tax numeric(7,2), + cs_net_paid_inc_ship numeric(7,2), + cs_net_paid_inc_ship_tax numeric(7,2), + cs_net_profit numeric(7,2), + COLUMN cs_sold_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_sold_time_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_call_center_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_catalog_page_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_mode_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_warehouse_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_item_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_promo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_order_number ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_quantity ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_discount_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_coupon_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_ship_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid_inc_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid_inc_ship ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid_inc_ship_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_profit ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (cs_item_sk); +-- +-- Name: customer; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.customer; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.customer; + ^ +CREATE TABLE cte_bug.customer ( + c_customer_sk integer NOT NULL, + c_customer_id character varying(16) NOT NULL, + c_current_cdemo_sk integer, + c_current_hdemo_sk integer, + c_current_addr_sk integer, + c_first_shipto_date_sk integer, + c_first_sales_date_sk integer, + c_salutation character varying(10), + c_first_name character varying(20), + c_last_name character varying(30), + c_preferred_cust_flag character(1), + c_birth_day integer, + c_birth_month integer, + c_birth_year integer, + c_birth_country character varying(20), + c_login character varying(13), + c_email_address character varying(50), + c_last_review_date integer, + COLUMN c_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_customer_id ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_current_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_current_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_current_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_first_shipto_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_first_sales_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_salutation ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_first_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_last_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_preferred_cust_flag ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_day ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_month ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_country ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_login ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_email_address ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_last_review_date ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (c_customer_sk); +-- +-- Name: date_dim; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.date_dim; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.date_dim; + ^ +CREATE TABLE cte_bug.date_dim ( + d_date_sk integer NOT NULL, + d_date_id character varying(16) NOT NULL, + d_date date, + d_month_seq integer, + d_week_seq integer, + d_quarter_seq integer, + d_year integer, + d_dow integer, + d_moy integer, + d_dom integer, + d_qoy integer, + d_fy_year integer, + d_fy_quarter_seq integer, + d_fy_week_seq integer, + d_day_name character varying(9), + d_quarter_name character varying(6), + d_holiday character(1), + d_weekend character(1), + d_following_holiday character(1), + d_first_dom integer, + d_last_dom integer, + d_same_day_ly integer, + d_same_day_lq integer, + d_current_day character(1), + d_current_week character(1), + d_current_month character(1), + d_current_quarter character(1), + d_current_year character(1), + COLUMN d_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_date_id ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_date ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_month_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_week_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_quarter_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_dow ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_moy ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_dom ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_qoy ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_fy_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_fy_quarter_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_fy_week_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_day_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_quarter_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_holiday ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_weekend ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_following_holiday ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_first_dom ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_last_dom ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_same_day_ly ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_same_day_lq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_day ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_week ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_month ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_quarter ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (d_date_sk); +-- +-- Name: store_sales; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.store_sales; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.store_sales; + ^ +CREATE TABLE cte_bug.store_sales ( + ss_sold_date_sk integer, + ss_sold_time_sk integer, + ss_item_sk integer NOT NULL, + ss_customer_sk integer, + ss_cdemo_sk integer, + ss_hdemo_sk integer, + ss_addr_sk integer, + ss_store_sk integer, + ss_promo_sk integer, + ss_ticket_number bigint NOT NULL, + ss_quantity integer, + ss_wholesale_cost numeric(7,2), + ss_list_price numeric(7,2), + ss_sales_price numeric(7,2), + ss_ext_discount_amt numeric(7,2), + ss_ext_sales_price numeric(7,2), + ss_ext_wholesale_cost numeric(7,2), + ss_ext_list_price numeric(7,2), + ss_ext_tax numeric(7,2), + ss_coupon_amt numeric(7,2), + ss_net_paid numeric(7,2), + ss_net_paid_inc_tax numeric(7,2), + ss_net_profit numeric(7,2), + COLUMN ss_sold_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_sold_time_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_item_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_store_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_promo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ticket_number ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_quantity ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_discount_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_coupon_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_net_paid ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_net_paid_inc_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_net_profit ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (ss_item_sk); +-- +-- Name: web_sales; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.web_sales; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.web_sales; + ^ +CREATE TABLE cte_bug.web_sales ( + ws_sold_date_sk integer, + ws_sold_time_sk integer, + ws_ship_date_sk integer, + ws_item_sk integer NOT NULL, + ws_bill_customer_sk integer, + ws_bill_cdemo_sk integer, + ws_bill_hdemo_sk integer, + ws_bill_addr_sk integer, + ws_ship_customer_sk integer, + ws_ship_cdemo_sk integer, + ws_ship_hdemo_sk integer, + ws_ship_addr_sk integer, + ws_web_page_sk integer, + ws_web_site_sk integer, + ws_ship_mode_sk integer, + ws_warehouse_sk integer, + ws_promo_sk integer, + ws_order_number bigint NOT NULL, + ws_quantity integer, + ws_wholesale_cost numeric(7,2), + ws_list_price numeric(7,2), + ws_sales_price numeric(7,2), + ws_ext_discount_amt numeric(7,2), + ws_ext_sales_price numeric(7,2), + ws_ext_wholesale_cost numeric(7,2), + ws_ext_list_price numeric(7,2), + ws_ext_tax numeric(7,2), + ws_coupon_amt numeric(7,2), + ws_ext_ship_cost numeric(7,2), + ws_net_paid numeric(7,2), + ws_net_paid_inc_tax numeric(7,2), + ws_net_paid_inc_ship numeric(7,2), + ws_net_paid_inc_ship_tax numeric(7,2), + ws_net_profit numeric(7,2), + COLUMN ws_sold_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_sold_time_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_item_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_web_page_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_web_site_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_mode_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_warehouse_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_promo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_order_number ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_quantity ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_discount_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_coupon_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_ship_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid_inc_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid_inc_ship ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid_inc_ship_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_profit ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (ws_item_sk); +-- +-- Apache Cloudberry database dump complete +-- +-- +-- Allow system table modifications +-- +set allow_system_table_mods=true; +-- Table: catalog_sales +UPDATE pg_class +SET + relpages = 1497467::int, + reltuples = 720015040.0::real, + relallvisible = 0::int +WHERE relname = 'catalog_sales' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- Table: date_dim +UPDATE pg_class +SET + relpages = 40::int, + reltuples = 73049.0::real, + relallvisible = 0::int +WHERE relname = 'date_dim' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- Table: customer +UPDATE pg_class +SET + relpages = 2870::int, + reltuples = 2100000.0::real, + relallvisible = 0::int +WHERE relname = 'customer' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- Table: store_sales +UPDATE pg_class +SET + relpages = 1930653::int, + reltuples = 1439977500.0::real, + relallvisible = 0::int +WHERE relname = 'store_sales' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- Table: web_sales +UPDATE pg_class +SET + relpages = 736204::int, + reltuples = 360014100.0::real, + relallvisible = 0::int +WHERE relname = 'web_sales' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- +-- Table: catalog_sales, Attribute: cs_sold_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 1::smallint, + False::boolean, + 0.0046333335::real, + 4::integer, + 1836.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0017666667, 0.0015666666, 0.0015666666, 0.0015, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014333334, 0.0014333334, 0.0014333334, 0.0014333334, 0.0014, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666}'::real[], + NULL::real[], + '{0.054781195}'::real[], + NULL::real[], + NULL::real[], + E'{"2452618","2451872","2451875","2451537","2451130","2451869","2451873","2451891","2451908","2452223","2452613","2451169","2451486","2451513","2451904","2451163","2451173","2451541","2451885","2451177","2451504","2451876","2451884","2452249","2452264","2452587","2452606","2451138","2451146","2451158","2451491","2451523","2451536","2451540","2451544","2451883","2451899","2452217","2452222","2452248","2452593","2451535","2451864","2451874","2451894","2451896","2452230","2452588","2452597","2451156","2451505","2451514","2452247","2452259","2452269","2452585","2452627","2451150","2451157","2451166","2451171","2451512","2451515","2451519","2451526","2451881","2451886","2451893","2452232","2452254","2452265","2452576","2452583","2452609","2452612","2452616","2452630","2451132","2451136","2451522","2451529","2451887","2452220","2452235","2452498","2452594","2452595","2452601","2452620","2452624","2451029","2451131","2451133","2451139","2451147","2451170","2451525","2451532","2451856","2451858"}'::int4[], + E'{"2450815","2450843","2450872","2450902","2450927","2450954","2450982","2451010","2451032","2451043","2451055","2451066","2451078","2451090","2451102","2451116","2451125","2451142","2451153","2451165","2451181","2451211","2451241","2451266","2451295","2451323","2451348","2451375","2451397","2451409","2451421","2451434","2451446","2451458","2451471","2451483","2451494","2451506","2451520","2451539","2451563","2451589","2451616","2451645","2451670","2451696","2451724","2451754","2451768","2451782","2451795","2451807","2451818","2451831","2451842","2451853","2451865","2451879","2451898","2451910","2451933","2451960","2451990","2452016","2452042","2452069","2452097","2452122","2452135","2452147","2452158","2452169","2452182","2452195","2452207","2452218","2452231","2452242","2452255","2452267","2452278","2452309","2452340","2452369","2452396","2452424","2452450","2452480","2452497","2452509","2452521","2452533","2452544","2452556","2452568","2452582","2452599","2452610","2452625","2452636","2452654"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_sold_time_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 2::smallint, + False::boolean, + 0.005::real, + 4::integer, + 72297.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0002}'::real[], + NULL::real[], + '{0.0112536065}'::real[], + NULL::real[], + NULL::real[], + E'{"44417"}'::int4[], + E'{"19","3608","5437","7239","9103","10773","12524","14298","15582","16852","17926","19155","20275","21514","22764","24007","25186","26042","26962","27910","28794","29659","30546","31449","32213","32885","33617","34346","35082","35807","36509","37180","37892","38557","39244","39936","40721","41398","42183","42868","43569","44109","44624","45170","45703","46274","46759","47492","48133","48850","49628","50310","51472","52776","53993","54839","55874","56759","57696","58416","59123","59800","60516","61221","61836","62429","62989","63592","64155","64738","65238","65703","66205","66700","67247","67791","68275","68782","69195","69611","70077","70485","70923","71369","71847","72304","72827","73342","73877","74404","74966","75510","76220","76902","77680","78437","79149","80343","81522","82791","86392"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 3::smallint, + False::boolean, + 0.0052::real, + 4::integer, + 1914.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0015333333, 0.0014, 0.0013666666, 0.0013666666, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001}'::real[], + NULL::real[], + '{0.0545705}'::real[], + NULL::real[], + NULL::real[], + E'{"2451918","2451182","2451209","2452278","2451544","2451907","2452252","2452639","2452648","2452659","2451207","2452590","2451205","2451541","2451559","2451183","2451549","2451909","2451910","2451911","2451933","2452260","2452262","2452624","2452634","2452637","2451906","2451914","2452233","2452242","2452265","2452270","2451121","2451180","2451192","2451526","2451565","2451575","2451896","2451897","2451899","2451912","2451936","2452245","2452618","2452626","2452653","2451161","2451173","2451174","2451191","2451478","2451528","2451555","2451915","2451927","2452261","2452269","2452281","2452290","2452629","2452633","2452643","2451162","2451164","2451185","2451548","2451550","2451584","2451929","2451940","2452236","2452283","2452608","2452654","2451165","2451168","2451481","2451511","2451517","2451553","2451582","2451889","2451917","2452294","2452632","2452641","2452642","2452647","2452660","2451123","2451178","2451184","2451204","2451491","2451512","2451513","2451516","2451520","2451538"}'::int4[], + E'{"2450821","2450886","2450917","2450945","2450976","2451006","2451032","2451056","2451073","2451088","2451101","2451114","2451128","2451140","2451151","2451166","2451186","2451199","2451214","2451227","2451241","2451259","2451286","2451317","2451344","2451370","2451397","2451421","2451439","2451456","2451470","2451484","2451497","2451510","2451529","2451542","2451561","2451573","2451588","2451603","2451620","2451643","2451671","2451698","2451724","2451752","2451777","2451799","2451817","2451830","2451844","2451858","2451870","2451880","2451892","2451908","2451926","2451941","2451953","2451966","2451982","2452002","2452032","2452056","2452083","2452113","2452139","2452159","2452176","2452190","2452204","2452217","2452229","2452244","2452257","2452274","2452287","2452301","2452312","2452325","2452341","2452360","2452392","2452421","2452448","2452475","2452504","2452523","2452541","2452555","2452569","2452581","2452594","2452606","2452617","2452631","2452651","2452666","2452678","2452695","2452742"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_bill_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 4::smallint, + False::boolean, + 0.0047333334::real, + 4::integer, + 2076691.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.009644499}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"83","19255","38469","57334","77660","100353","121648","142864","164380","186732","206072","225376","246600","266629","288115","310326","332043","353860","375080","398568","418154","439646","461654","482840","506162","528559","549467","568302","588542","608968","630692","650223","671210","692175","713622","734326","754624","775800","798038","818056","841239","862315","882803","902700","923351","943590","963503","984723","1007978","1026125","1047160","1067477","1087789","1107171","1127082","1149889","1169435","1192194","1212249","1233291","1254464","1277232","1298034","1319408","1340687","1361652","1382794","1402582","1423476","1446047","1468226","1490417","1512333","1534704","1553629","1572989","1592634","1611613","1630695","1653622","1674063","1694178","1714594","1736071","1758421","1781336","1801193","1823164","1844186","1864368","1883410","1905171","1926138","1948282","1969988","1992903","2014079","2034696","2056865","2078611","2099787"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_bill_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 5::smallint, + False::boolean, + 0.005133333::real, + 4::integer, + 2250439.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0031504256}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"302","18541","37466","54463","73740","92424","112008","130967","151053","169555","190110","209507","228068","249282","268918","288605","307024","325774","343640","360630","381214","401158","419575","438762","458312","478977","498196","516757","537388","556845","575435","593167","612925","631535","649867","668933","688696","708123","729225","748554","766895","786505","806811","825215","844584","864169","883774","902048","921519","939325","959048","977470","995552","1013270","1032128","1049619","1069099","1089358","1107492","1124109","1143285","1161705","1180858","1201502","1221860","1240948","1262383","1281164","1299986","1317873","1338886","1358783","1378683","1398812","1417832","1435737","1456539","1476597","1496447","1515429","1535261","1554963","1573327","1591123","1612033","1630239","1650833","1669983","1688937","1707342","1727798","1746079","1764329","1783178","1803869","1823803","1842989","1862762","1881322","1901969","1920750"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_bill_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 6::smallint, + False::boolean, + 0.0045666667::real, + 4::integer, + 7211.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.000111478614}'::real[], + NULL::real[], + NULL::real[], + E'{"952","3639","822","1878","3522","3566","4915","5053","5336"}'::int4[], + E'{"1","69","138","207","278","358","430","510","587","655","728","798","869","942","1011","1079","1148","1221","1293","1363","1436","1515","1590","1658","1727","1796","1869","1943","2011","2089","2164","2238","2309","2383","2458","2534","2607","2674","2744","2820","2896","2971","3050","3121","3192","3259","3330","3406","3478","3554","3622","3693","3766","3837","3910","3986","4059","4136","4203","4276","4352","4423","4495","4568","4638","4711","4786","4851","4924","4995","5071","5139","5209","5275","5348","5419","5491","5562","5630","5702","5783","5855","5928","6005","6074","6145","6221","6287","6362","6437","6509","6581","6652","6718","6791","6859","6925","6992","7067","7135","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_bill_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 7::smallint, + False::boolean, + 0.0049666665::real, + 4::integer, + 1046873.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.010069353}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"4","11125","22235","33070","44034","54814","66903","76551","86436","96499","107386","117375","127737","138201","149160","158550","169352","179553","191448","202662","213153","223343","232616","242533","253489","263641","274314","284608","294503","305542","316693","327046","337213","348029","358708","369038","379092","389216","399404","411658","421481","431880","442318","452462","463687","473855","484589","494142","504812","515093","525984","536447","546801","557909","568809","579887","590134","600989","611895","621827","631620","641611","653140","664172","674648","685363","696406","706802","717628","727362","737815","748416","758649","768984","779629","790315","800549","811382","821988","832542","842239","852925","861542","872217","882338","893425","903652","914043","925124","935145","946703","957135","966844","978263","987914","998584","1009037","1019530","1030620","1041099","1049900"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 8::smallint, + False::boolean, + 0.0044::real, + 4::integer, + 1988803.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.012593937}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"112","19457","38552","56966","77106","98752","120684","141455","163448","185974","205916","225714","246798","267145","288778","309669","331415","352688","373910","396777","417012","437984","458412","480601","503081","525455","546630","566430","585396","605761","627797","647297","667174","689078","710793","730789","751531","771586","793233","812933","836114","858314","878748","899241","919733","940900","960199","982017","1005759","1024900","1046467","1067416","1087759","1107005","1127271","1149614","1169010","1191761","1212083","1233029","1254014","1275851","1297280","1318761","1339872","1360476","1383115","1402788","1422877","1446083","1468587","1490686","1513016","1535950","1556692","1575347","1593894","1613402","1634582","1657027","1677173","1698221","1719408","1739440","1762772","1784881","1805037","1826722","1847883","1868042","1887771","1909652","1929728","1951115","1972152","1994703","2015691","2036799","2059398","2079650","2099910"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 9::smallint, + False::boolean, + 0.0047::real, + 4::integer, + 2111792.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0029372792}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"302","18991","38051","55457","73906","92142","111203","130054","150524","168838","188615","208305","226780","247275","267002","286332","305964","323539","341623","359088","378908","398275","417006","435648","456039","475587","494530","514681","534729","554637","572188","589663","608849","627139","645797","665116","684344","704227","724342","743953","761704","781964","800445","819537","838906","859432","878743","896384","916344","935630","954106","974012","992877","1010876","1030092","1047512","1067272","1087763","1106244","1123512","1143152","1162252","1181423","1201399","1221079","1241127","1262335","1281211","1300282","1317917","1338913","1359409","1379678","1399509","1419706","1437833","1458212","1478319","1498253","1517308","1537216","1555785","1574809","1593715","1614555","1632477","1652767","1671255","1689246","1707832","1727015","1745671","1764329","1783647","1803713","1823176","1843528","1863426","1881885","1901131","1920750"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 10::smallint, + False::boolean, + 0.0045::real, + 4::integer, + 7216.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00046666668, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{-0.0024474491}'::real[], + NULL::real[], + NULL::real[], + E'{"3639","952","4257","822","1910","4081","4594","4618","4915"}'::int4[], + E'{"1","73","142","207","280","358","430","508","582","649","721","795","869","944","1014","1083","1154","1229","1300","1373","1444","1523","1596","1662","1734","1808","1878","1946","2015","2092","2166","2242","2314","2390","2466","2538","2613","2681","2754","2829","2904","2980","3057","3130","3199","3265","3336","3409","3484","3555","3618","3692","3763","3836","3911","3985","4055","4135","4203","4280","4359","4429","4500","4572","4647","4723","4793","4861","4928","5004","5075","5142","5214","5279","5349","5422","5492","5565","5633","5704","5780","5856","5929","6005","6075","6144","6216","6286","6361","6433","6507","6577","6650","6717","6786","6857","6924","6990","7066","7134","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 11::smallint, + False::boolean, + 0.0044::real, + 4::integer, + 1106888.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0052251625}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"4","10372","21281","32604","43275","54281","66191","75977","85966","96475","106785","117107","127166","137473","148549","158449","169288","179404","191400","202566","212568","223050","231983","242203","252330","262987","273206","284036","293651","303573","314592","325696","336019","346020","357411","367567","377578","387371","397564","409384","419885","430219","441268","451283","462534","472729","482897","493068","503727","514241","524681","535657","546641","557534","568161","579186","589218","600063","610499","620727","630611","640167","650891","661771","672763","683715","694487","704971","715589","725727","735602","745905","755951","765867","776755","787045","798005","808059","818665","829654","840229","849950","859637","870300","880895","892234","902478","912694","923652","933902","945183","955649","965499","976354","986841","997088","1007946","1018197","1029945","1040884","1049912"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_call_center_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 12::smallint, + False::boolean, + 0.0049::real, + 4::integer, + 6.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.32786667, 0.1994, 0.13533333, 0.13273333, 0.1306, 0.06916667}'::real[], + '{0.21526349}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1","2","3","5","4","6"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_catalog_page_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 13::smallint, + False::boolean, + 0.0049333335::real, + 4::integer, + 5614.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0012666667, 0.0012666667, 0.0012333334, 0.0012, 0.0012, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009}'::real[], + NULL::real[], + '{0.050873112}'::real[], + NULL::real[], + NULL::real[], + E'{"164","5975","2104","135","4000","7906","2144","5962","5966","7944","7992","2111","2149","5954","6016","6032","6043","7900","7908","2053","2075","4051","7954","150","151","160","183","186","2062","2090","2114","4010","4052","4084","5959","6025","7929","7941","116","117","194","2060","2119","4076","4094","5964","5999","6011","6019","7917","7973","118","120","129","163","190","212","2077","2078","2091","2093","2148","2156","4047","4050","4068","4097","5979","6003","6007","6021","6034","7890","7909","7919","7921","7932","7938","7953","7960","141","157","176","182","214","2118","4016","4028","4053","4065","4073","4086","5961","6010","7911","7914","7922","7923","7936","7956"}'::int4[], + E'{"1","29","53","79","106","124","139","154","172","189","205","230","290","340","380","413","614","843","1009","1150","1945","1972","1996","2020","2047","2067","2083","2099","2115","2131","2145","2168","2227","2279","2318","2361","2605","2813","2989","3129","3896","3920","3945","3968","3994","4009","4024","4038","4056","4070","4085","4101","4153","4215","4252","4289","4400","4718","4887","5022","5155","5852","5878","5903","5927","5946","5963","5980","5992","6006","6026","6040","6078","6144","6189","6232","6381","6650","6829","6974","7101","7800","7825","7851","7879","7895","7913","7935","7955","7971","7986","8023","8080","8130","8168","8207","8515","8701","8861","8977","9827"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_mode_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 14::smallint, + False::boolean, + 0.004766667::real, + 4::integer, + 20.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0517, 0.051333334, 0.0507, 0.050466668, 0.0504, 0.050166667, 0.050166667, 0.050066665, 0.049966667, 0.0499, 0.0499, 0.049733333, 0.049333334, 0.0493, 0.049133334, 0.049066667, 0.049066667, 0.04853333, 0.0485, 0.0478}'::real[], + '{0.05016106}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"10","4","5","15","7","14","20","12","9","3","6","2","1","18","8","17","19","16","13","11"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_warehouse_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 15::smallint, + False::boolean, + 0.0047::real, + 4::integer, + 5.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.2037, 0.20163333, 0.19836667, 0.19753334, 0.19406667}'::real[], + '{0.20946348}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"5","4","2","3","1"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_item_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 16::smallint, + False::boolean, + 0.0::real, + 4::integer, + 24934.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334}'::real[], + NULL::real[], + '{0.00087319454}'::real[], + NULL::real[], + NULL::real[], + E'{"2149","4123","7117","12451","15001","19603","20557","21523","22867","27235","55","841","2348","2545","4105","4159","4441","4843","5509","7513","7747","8827","9289","12031","13417","15541","15709","16730","18115","18805","18997","19495","20083","21073","23167","24679","26641"}'::int4[], + E'{"1","320","583","835","1138","1406","1673","1962","2264","2558","2845","3127","3446","3749","4031","4330","4573","4877","5173","5433","5703","5947","6237","6506","6775","7040","7307","7579","7873","8136","8404","8707","8984","9250","9532","9833","10123","10420","10678","10969","11250","11553","11826","12095","12364","12667","12956","13219","13486","13741","14042","14309","14602","14871","15161","15410","15665","15939","16212","16498","16763","17059","17351","17654","17945","18229","18514","18782","19059","19348","19609","19913","20198","20471","20743","21035","21331","21597","21883","22148","22442","22712","22966","23269","23567","23848","24106","24394","24668","24951","25221","25508","25796","26095","26365","26646","26927","27195","27461","27722","28000"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_promo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 17::smallint, + False::boolean, + 0.0049333335::real, + 4::integer, + 357.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0039333333, 0.0036666666, 0.0036333334, 0.0035666667, 0.0035, 0.0035, 0.0035, 0.0035, 0.0034666667}'::real[], + NULL::real[], + '{0.012315235}'::real[], + NULL::real[], + NULL::real[], + E'{"305","89","51","343","11","49","195","258","355"}'::int4[], + E'{"1","4","8","12","16","19","23","26","30","33","37","40","44","47","53","56","60","63","67","70","74","78","81","85","88","92","96","99","102","106","109","113","116","120","123","127","130","134","137","141","144","148","151","155","158","162","165","168","172","175","179","182","186","189","193","197","201","204","208","211","215","218","221","225","228","232","235","239","242","246","249","253","256","261","264","268","271","275","278","282","285","289","293","296","299","303","307","311","314","318","321","325","328","331","335","339","342","346","350","353","357"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_order_number +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 18::smallint, + False::boolean, + 0.0::real, + 8::integer, + -0.23808314::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 412::oid, + 412::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.05413773}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1093","796094","1645931","2488328","3262945","4034487","4856771","5589623","6321306","7127852","7844455","8614283","9422592","10337715","11178214","11967077","12806598","13604549","14347663","15135994","15897089","16779779","17630658","18360193","19209296","19976804","20750598","21564225","22330137","23141252","23995273","24745890","25625704","26406125","27188856","28177645","29033724","29834605","30623466","31397341","32181036","32930216","33726353","34526912","35320855","36048980","36922780","37717474","38626712","39479583","40217298","41019974","41831233","42654275","43505081","44324401","44976357","45709232","46482483","47262545","48002145","48800151","49567190","50315617","51133372","51910262","52699539","53463422","54279944","55035406","55746486","56570321","57449909","58231103","58998945","59766115","60653209","61448393","62271704","63090076","63926111","64814052","65684644","66478632","67319176","68037038","68897841","69676370","70424558","71249378","72010418","72811451","73574543","74362921","75127096","75960745","76739924","77534318","78299599","79159205","79998254"}'::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[]); +-- +-- Table: catalog_sales, Attribute: cs_quantity +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 19::smallint, + False::boolean, + 0.0044::real, + 4::integer, + 100.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0111, 0.0111, 0.011, 0.011, 0.0109, 0.010833333, 0.010833333, 0.010833333, 0.0108, 0.010666667, 0.010666667, 0.0106, 0.010566667, 0.010566667, 0.010533334, 0.010533334, 0.010533334, 0.0105, 0.010466667, 0.010433333, 0.010433333, 0.010366667, 0.010366667, 0.010366667, 0.010366667, 0.010366667, 0.010333333, 0.0103, 0.0103, 0.010266666, 0.010266666, 0.010266666, 0.0102, 0.0102, 0.0102, 0.0102, 0.0101666665, 0.0101666665, 0.0101666665, 0.0101333335, 0.0101333335, 0.0101, 0.0101, 0.010066667, 0.010033334, 0.010033334, 0.010033334, 0.01, 0.01, 0.009966667, 0.009966667, 0.009933333, 0.009933333, 0.009933333, 0.009933333, 0.009933333, 0.0099, 0.0099, 0.009866667, 0.009866667, 0.009833333, 0.009833333, 0.009833333, 0.009833333, 0.0098, 0.0098, 0.009766666, 0.009766666, 0.009733333, 0.009733333, 0.0097, 0.0097, 0.0097, 0.009666666, 0.009666666, 0.009666666, 0.0096, 0.009566667, 0.009533334, 0.009533334, 0.0095, 0.0095, 0.0095, 0.009466667, 0.009333333, 0.009266667, 0.009266667, 0.009233333, 0.009233333, 0.0092, 0.009133333, 0.009133333, 0.0091, 0.008933334, 0.008866667, 0.008833333, 0.0088, 0.0087, 0.0084, 0.0084}'::real[], + '{0.009663152}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"41","52","9","44","27","58","86","89","77","36","80","17","16","42","45","46","83","15","91","12","14","57","67","68","74","96","84","25","64","28","71","82","11","56","60","98","1","6","23","7","95","61","94","47","5","69","72","3","48","70","92","34","54","76","79","81","32","38","62","78","2","13","18","55","37","40","75","100","22","97","4","33","51","8","35","73","88","24","49","87","21","26","53","66","99","39","65","20","93","30","43","90","29","63","85","59","19","50","10","31"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 20::smallint, + False::boolean, + 0.0042333333::real, + 6::integer, + 9853.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.00037631093}'::real[], + NULL::real[], + NULL::real[], + E'{"72.49","24.31","33.82","41.38","61.68","64.83","90.44","10.81","27.94","34.69","63.73","87.62","93.76","94.23"}'::numeric[], + E'{"1.00","1.97","2.96","3.92","4.94","5.97","7.01","7.93","8.86","9.79","10.76","11.74","12.69","13.67","14.71","15.61","16.55","17.55","18.59","19.64","20.69","21.72","22.70","23.70","24.74","25.76","26.74","27.83","28.84","29.88","30.96","31.96","32.90","33.95","34.88","35.82","36.86","37.79","38.78","39.75","40.65","41.59","42.57","43.46","44.53","45.59","46.66","47.73","48.74","49.72","50.69","51.60","52.56","53.41","54.44","55.38","56.44","57.38","58.32","59.33","60.46","61.51","62.59","63.51","64.50","65.52","66.49","67.40","68.34","69.30","70.25","71.22","72.19","73.17","74.18","75.21","76.17","77.18","78.10","79.08","80.07","81.02","81.93","82.86","83.87","84.82","85.83","86.83","87.81","88.79","89.69","90.75","91.71","92.69","93.69","94.73","95.80","96.89","97.92","99.02","100.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 21::smallint, + False::boolean, + 0.0047333334::real, + 6::integer, + 23623.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667}'::real[], + NULL::real[], + '{0.0011046942}'::real[], + NULL::real[], + NULL::real[], + E'{"11.59","52.87","62.87","64.43","87.47","95.88","96.45","99.51"}'::numeric[], + E'{"1.00","3.51","5.35","7.23","9.15","10.91","12.55","14.37","16.10","17.87","19.59","21.31","23.22","24.95","26.59","28.36","30.12","31.92","33.70","35.45","37.37","39.21","40.96","42.63","44.39","46.23","48.04","49.97","52.04","53.81","55.47","57.35","59.13","60.99","62.98","64.76","66.54","68.45","70.35","72.20","74.06","75.90","77.63","79.47","81.31","83.10","84.84","86.86","88.69","90.45","92.15","94.08","95.99","97.69","99.41","101.23","103.18","104.97","107.17","108.94","110.89","112.85","114.87","116.76","119.10","121.18","123.40","125.73","128.23","130.50","132.97","135.31","138.15","140.60","143.29","145.79","148.51","151.34","154.23","157.06","160.08","163.23","166.75","170.63","174.29","177.79","181.55","185.86","189.57","193.79","198.05","202.87","207.95","213.14","219.21","225.93","233.84","241.92","252.53","265.43","299.64"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 22::smallint, + False::boolean, + 0.0046666665::real, + 6::integer, + 14418.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.009733333, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{0.00090382085}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","4.11","1.12","1.14","1.19","1.41","2.07","3.47","0.45","0.86","0.99","1.11","1.66","1.79","2.22","2.36","4.79","5.00","5.07","19.14","0.34","0.77","0.98","1.17","1.38","1.39","1.53","1.60","2.13","2.14","2.41","2.70","2.91","3.55","5.02","0.32","0.61","0.81","1.02","1.20","1.63","1.78","1.83","1.98","2.16","2.57","2.58","2.63","2.71","2.82","3.02","3.07","3.31","3.49","4.09","4.70","5.83","6.20","6.42","6.65","6.71","6.81","7.47","7.73","8.32","8.90","11.94","13.00","23.92","25.86","0.52","0.60","0.68","0.83","0.85","0.90","0.92","1.00","1.03","1.22","1.40","1.42","1.52","1.62","1.70","1.89","1.90","1.92","1.95","1.99","2.08","2.45","2.48","2.80","2.85","2.86","3.05","3.57","3.58","4.26"}'::numeric[], + E'{"0.01","0.65","1.28","1.88","2.49","3.12","3.69","4.24","4.73","5.29","5.72","6.26","6.84","7.36","7.90","8.49","9.12","9.69","10.29","10.91","11.52","12.20","12.88","13.55","14.26","15.04","15.79","16.49","17.27","18.12","18.88","19.69","20.47","21.31","22.14","23.04","23.89","24.71","25.66","26.63","27.57","28.59","29.53","30.53","31.55","32.67","33.80","34.83","35.95","37.16","38.26","39.31","40.43","41.57","42.77","43.90","45.13","46.36","47.81","49.19","50.47","52.07","53.50","55.01","56.52","58.13","59.74","61.42","63.22","65.02","66.74","68.61","70.40","72.18","74.20","76.33","79.00","81.18","83.67","85.79","88.11","90.68","93.43","96.30","99.26","102.27","105.67","109.56","113.32","117.45","121.86","127.22","132.40","138.99","144.98","152.44","160.57","173.02","186.46","208.92","291.96"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_discount_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 23::smallint, + False::boolean, + 0.0044::real, + 6::integer, + 142728.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0095}'::real[], + NULL::real[], + '{-0.004464352}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.17","11.20","20.91","30.80","40.84","51.00","63.78","75.00","87.44","99.94","114.70","128.10","142.35","157.32","174.42","192.54","210.80","230.40","248.40","268.05","290.88","314.16","335.72","359.45","382.80","407.16","434.34","460.80","487.56","514.71","543.62","576.10","607.10","638.58","674.96","708.51","744.12","781.44","816.90","854.24","892.67","937.72","978.12","1024.92","1066.60","1115.40","1163.76","1213.44","1265.92","1319.64","1377.33","1435.50","1492.72","1553.06","1615.12","1676.76","1740.50","1811.01","1879.47","1944.96","2021.00","2099.24","2180.82","2254.08","2338.24","2431.94","2518.37","2613.97","2705.79","2811.90","2915.52","3030.87","3147.78","3268.80","3398.64","3537.80","3693.20","3853.00","4025.84","4178.16","4342.57","4533.75","4713.69","4897.32","5111.40","5372.25","5621.20","5899.18","6182.22","6506.64","6877.80","7259.75","7668.62","8199.00","8717.40","9363.69","10163.70","11203.92","12513.40","14893.36","26922.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=24; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 24::smallint, + False::boolean, + 0.0043666665::real, + 6::integer, + 142257.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.009733333, 0.0002, 0.0002, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.003978702}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","46.08","221.76","229.32","324.00"}'::numeric[], + E'{"0.12","10.50","20.06","29.43","40.50","50.88","62.55","73.71","86.88","99.80","112.70","127.52","143.62","159.84","176.54","195.30","213.76","232.57","250.81","273.00","293.44","314.88","338.10","359.04","380.19","405.00","429.60","451.68","477.47","502.86","527.96","553.70","584.44","614.88","648.96","678.59","714.00","752.49","789.24","832.00","873.60","918.00","961.62","1002.87","1045.32","1088.01","1138.32","1187.80","1240.32","1290.56","1343.52","1398.63","1453.80","1514.52","1579.89","1641.03","1707.15","1777.62","1850.16","1929.60","2006.40","2085.16","2172.12","2258.24","2346.43","2432.08","2522.40","2612.40","2716.00","2822.00","2941.68","3047.40","3167.66","3290.34","3408.50","3542.00","3672.90","3827.25","3964.16","4119.20","4284.36","4443.82","4620.28","4815.00","5049.41","5287.50","5540.15","5817.90","6091.80","6419.70","6763.11","7107.12","7533.20","7984.68","8549.10","9239.68","10028.92","11141.40","12375.32","14442.82","25866.02"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=25; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 25::smallint, + False::boolean, + 0.004466667::real, + 6::integer, + 199389.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0034636194}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.06","33.44","56.88","76.70","95.46","117.98","141.00","166.72","189.80","211.64","240.48","270.13","296.05","322.14","351.56","382.20","408.80","443.17","471.27","503.04","536.48","569.53","605.88","642.30","676.20","713.25","748.00","784.08","822.58","862.92","904.12","944.00","988.12","1033.94","1078.22","1125.57","1174.44","1219.20","1271.47","1321.32","1373.73","1424.13","1473.56","1523.06","1577.80","1632.80","1692.33","1751.88","1804.98","1865.64","1925.04","1986.64","2048.64","2112.36","2177.07","2241.60","2304.72","2377.20","2443.50","2515.50","2594.70","2670.36","2747.52","2824.00","2907.76","2981.60","3064.35","3151.04","3236.05","3335.04","3423.42","3510.24","3609.13","3694.74","3790.59","3900.42","3997.84","4093.60","4201.20","4315.14","4440.32","4580.68","4717.80","4850.32","4981.08","5120.57","5295.40","5446.35","5591.49","5754.84","5939.64","6145.90","6353.16","6573.59","6818.15","7085.50","7369.09","7709.87","8107.01","8627.71","9908.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=26; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 26::smallint, + False::boolean, + 0.0046::real, + 7::integer, + 360309.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0035410712}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.31","59.20","97.76","139.16","175.10","215.86","258.20","301.76","346.30","395.71","441.67","491.37","543.03","588.96","647.90","704.77","761.60","820.05","876.37","931.44","988.52","1051.24","1114.54","1179.42","1241.24","1315.60","1390.35","1465.83","1545.12","1616.40","1698.12","1773.90","1846.20","1925.82","1999.80","2079.66","2167.27","2254.16","2349.06","2439.60","2538.36","2639.88","2745.00","2842.88","2945.84","3061.35","3159.96","3268.20","3385.82","3497.60","3619.28","3731.16","3844.31","3972.32","4086.60","4223.18","4350.00","4491.60","4633.60","4772.85","4900.80","5039.44","5187.14","5331.15","5491.76","5659.20","5821.20","5993.74","6151.74","6324.80","6490.96","6680.54","6873.60","7073.04","7286.40","7516.05","7726.84","7955.22","8181.76","8428.98","8698.56","8945.39","9241.96","9521.28","9816.00","10132.22","10488.06","10859.64","11241.16","11644.83","12054.38","12542.40","13138.72","13710.72","14384.79","15172.80","16106.68","17329.62","18721.00","21017.28","28889.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=27; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 27::smallint, + False::boolean, + 0.004766667::real, + 6::integer, + 21954.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.10706667, 0.00063333334, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333}'::real[], + NULL::real[], + '{0.004360509}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","0.04","0.17","0.02","0.28","0.84","1.06","1.14","0.13","0.14","0.25","0.36","0.79","0.03","0.33","0.34","0.39","0.48","0.90","0.91","1.10","0.08","0.09","0.18","0.42","0.45","0.54","1.25","1.40","1.41","0.07","0.30","0.32","0.50","0.63","0.78","0.93","1.56","1.58","2.01","2.83","4.17","4.23","5.38","0.01","0.05","0.06","0.23","0.35","0.37","0.44","0.51","0.65","0.66","0.69","0.72","0.92","1.07","1.20","1.91","2.25","2.35","2.39","2.49","2.59","2.61","2.84","3.46","5.14","0.11","0.12","0.29","0.31","0.55","0.64","0.86","0.94","0.97","1.04","1.11","1.27","1.34","1.72","1.74","1.82","2.07","2.41","2.63","3.16","3.22","3.31","4.24","4.37","4.50","4.67","6.56","7.04","7.48","9.72","0.20"}'::numeric[], + E'{"0.10","0.76","1.28","1.69","2.10","2.54","3.00","3.45","3.87","4.42","4.93","5.42","5.92","6.50","7.06","7.75","8.39","9.02","9.63","10.39","11.20","12.02","12.86","13.70","14.51","15.26","16.17","17.18","18.15","19.08","20.18","21.20","22.36","23.50","24.63","25.72","26.96","28.39","29.87","31.24","32.78","34.20","35.67","37.38","39.11","41.00","42.83","44.65","46.61","48.72","50.66","53.20","55.29","57.88","60.49","63.18","66.04","69.09","72.25","75.29","78.51","82.02","85.29","89.36","92.98","96.95","101.40","105.70","110.69","116.16","120.93","126.18","131.91","137.88","143.80","151.06","157.08","164.57","172.99","181.14","190.17","200.65","210.92","221.02","232.90","244.78","259.12","273.65","291.32","310.11","330.23","353.23","380.19","411.93","449.37","493.85","546.42","616.37","721.39","893.95","2142.09"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_coupon_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=28; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 28::smallint, + False::boolean, + 0.0052333334::real, + 3::integer, + 6889.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.80296665}'::real[], + NULL::real[], + '{0.6553299}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.01","2.20","4.55","7.28","10.58","14.36","17.92","22.46","25.33","29.09","32.44","36.89","41.40","45.19","49.75","55.22","62.09","68.46","74.86","81.76","91.57","99.10","106.96","114.24","121.21","127.94","137.96","148.71","157.54","170.28","181.68","193.93","204.76","214.01","227.90","241.64","255.16","269.95","283.85","297.98","314.58","330.18","348.86","367.79","387.60","402.79","419.99","435.31","461.47","484.00","509.09","533.90","558.08","588.06","619.44","645.35","672.88","700.29","729.03","760.23","796.67","836.28","873.12","909.36","951.28","1008.91","1061.09","1112.98","1155.96","1201.35","1259.28","1324.66","1399.44","1477.63","1548.31","1632.65","1703.81","1774.10","1847.07","1944.10","2036.97","2136.30","2215.42","2317.48","2479.32","2652.32","2791.40","2968.30","3152.68","3345.17","3578.36","3851.51","4127.20","4451.55","4914.34","5421.31","6009.40","6794.45","7819.40","9995.94","21255.41"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_ship_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=29; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 29::smallint, + False::boolean, + 0.0045::real, + 6::integer, + 81417.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0188, 0.0003, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.0046927556}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","124.80","123.20","39.60","54.00","79.80","138.60","216.72","14.00","23.40","45.60","48.30","73.44","82.80","83.52","128.64","148.50","201.60","369.60"}'::numeric[], + E'{"0.01","5.94","11.44","16.77","22.24","28.70","34.72","40.68","46.76","54.04","61.00","68.16","76.50","85.26","94.55","103.02","111.44","121.44","132.24","143.40","153.90","165.76","177.65","188.67","201.11","212.38","224.93","238.72","252.96","266.76","282.10","299.12","315.56","331.39","347.22","363.12","379.85","399.00","416.25","434.16","453.96","475.60","497.55","521.70","543.90","568.03","592.20","618.64","644.00","669.06","697.92","724.13","755.70","784.09","816.31","849.52","882.75","915.75","950.25","987.00","1022.35","1059.10","1097.07","1144.50","1187.60","1237.04","1284.01","1339.45","1388.34","1443.94","1496.00","1543.70","1598.74","1656.20","1727.70","1794.60","1866.41","1936.12","2007.84","2091.57","2178.28","2270.17","2367.40","2465.85","2573.55","2691.00","2809.66","2948.40","3100.80","3253.56","3417.26","3620.70","3826.12","4070.04","4341.72","4685.14","5057.36","5597.70","6345.93","7552.84","14029.29"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_paid +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=30; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 30::smallint, + False::boolean, + 0.0045666667::real, + 6::integer, + 155617.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.011266666, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.0071978415}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","221.76","267.30"}'::numeric[], + E'{"0.04","6.30","13.46","20.10","27.38","36.00","45.37","54.42","64.17","74.16","84.95","95.83","107.47","120.56","133.68","147.52","161.55","176.09","192.62","209.85","225.68","242.40","260.64","280.40","299.63","319.88","342.68","361.62","383.67","407.20","430.95","452.40","478.20","502.86","526.93","551.28","580.65","609.84","645.84","672.01","705.60","742.28","777.65","819.77","859.65","905.32","946.21","988.00","1030.29","1072.29","1120.20","1169.28","1222.48","1277.88","1335.95","1393.40","1452.30","1510.88","1577.52","1643.88","1712.18","1783.60","1864.20","1941.02","2021.80","2110.48","2194.50","2288.80","2382.00","2480.31","2575.77","2686.53","2796.40","2918.30","3030.33","3153.62","3270.28","3405.85","3555.37","3689.67","3856.30","4006.50","4182.84","4362.48","4551.55","4780.32","5045.92","5298.28","5580.25","5880.00","6219.92","6583.20","6993.36","7441.75","7943.75","8616.00","9434.75","10515.84","11757.96","14014.08","25785.76"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_paid_inc_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=31; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 31::smallint, + False::boolean, + 0.004766667::real, + 6::integer, + 266415.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.011266666}'::real[], + NULL::real[], + '{-0.007137176}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","6.57","13.94","21.03","28.62","37.23","47.06","56.65","66.91","77.14","88.19","99.88","111.66","125.70","139.15","153.96","167.98","183.70","200.51","218.37","234.41","252.12","271.21","292.28","311.64","332.88","354.70","376.40","397.68","423.75","447.30","472.27","496.81","520.51","546.40","573.95","604.97","637.86","669.29","702.85","736.56","771.82","808.78","850.00","894.59","941.49","983.86","1030.60","1072.51","1120.44","1164.50","1218.82","1276.89","1328.94","1392.76","1450.62","1515.35","1577.79","1642.09","1715.87","1785.64","1867.43","1945.94","2025.64","2113.90","2200.02","2292.15","2386.61","2484.22","2590.13","2687.89","2800.02","2917.72","3043.84","3167.64","3291.60","3406.12","3562.87","3712.26","3872.48","4020.94","4187.61","4364.95","4559.15","4755.57","4989.93","5272.48","5532.24","5829.06","6143.38","6489.24","6878.77","7303.39","7746.09","8295.79","9014.30","9837.86","11001.37","12381.74","14679.09","26662.34"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_paid_inc_ship +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=32; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 32::smallint, + False::boolean, + 0.0::real, + 7::integer, + 280640.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0071525415}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"0.00","23.85","47.34","67.95","89.80","110.58","132.44","153.00","179.04","202.51","229.06","255.64","281.80","311.22","340.96","371.09","403.00","434.83","466.69","497.15","530.10","562.00","593.67","628.20","664.69","704.00","739.88","780.85","825.34","866.72","907.27","949.41","994.16","1044.45","1096.50","1144.92","1195.21","1250.15","1305.36","1361.76","1416.36","1475.91","1536.25","1598.70","1665.83","1732.92","1800.90","1873.10","1941.75","2016.72","2092.86","2175.34","2253.86","2345.76","2434.51","2518.72","2608.45","2696.29","2793.56","2894.40","2985.12","3079.88","3181.62","3294.00","3407.10","3528.30","3649.14","3775.68","3899.28","4033.51","4169.60","4307.38","4456.66","4620.28","4793.89","4963.42","5138.76","5318.80","5502.90","5715.60","5907.94","6131.28","6356.80","6629.70","6889.46","7169.33","7478.59","7780.37","8131.05","8498.52","8903.58","9369.99","9838.92","10426.64","11123.84","11986.61","13051.50","14332.97","16169.95","19117.60","36471.09"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_paid_inc_ship_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=33; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 33::smallint, + False::boolean, + 0.0::real, + 7::integer, + 613201.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.00728921}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"0.00","24.55","48.62","69.15","91.91","112.84","135.45","157.97","183.66","207.27","233.71","261.95","289.12","318.33","350.11","381.22","413.11","444.48","477.58","508.92","542.83","576.18","609.45","644.62","682.66","719.94","759.00","801.51","845.42","887.38","930.05","971.99","1022.12","1070.40","1121.18","1175.11","1228.42","1282.74","1334.77","1397.05","1456.76","1508.61","1575.93","1641.47","1709.47","1778.38","1844.93","1917.32","1990.71","2063.03","2147.81","2231.80","2316.78","2402.40","2493.91","2591.15","2678.00","2770.78","2865.32","2974.50","3066.56","3162.22","3269.67","3378.18","3496.07","3622.04","3743.00","3878.25","4003.40","4149.54","4287.78","4434.50","4591.26","4750.74","4944.45","5105.41","5289.66","5467.44","5660.87","5871.93","6090.64","6310.11","6551.52","6808.71","7096.07","7374.30","7678.33","8022.91","8355.36","8765.02","9187.25","9660.31","10158.98","10789.68","11521.51","12322.88","13498.43","14789.11","16663.22","19689.06","37177.23"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_profit +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=34; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 34::smallint, + False::boolean, + 0.0::real, + 6::integer, + 206524.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0003, 0.0002}'::real[], + NULL::real[], + '{-0.0019606797}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","-47.52"}'::numeric[], + E'{"-9478.75","-6317.17","-5427.84","-4811.17","-4310.01","-3964.66","-3670.14","-3411.00","-3196.27","-2980.12","-2792.84","-2624.60","-2471.95","-2325.60","-2192.15","-2061.36","-1940.00","-1830.51","-1735.50","-1637.76","-1537.14","-1452.35","-1375.59","-1298.36","-1224.32","-1155.27","-1092.42","-1022.40","-963.48","-909.46","-846.45","-791.42","-741.60","-693.68","-651.75","-611.00","-571.48","-529.55","-492.82","-458.06","-424.16","-393.25","-361.82","-332.56","-302.38","-277.25","-248.65","-223.78","-199.01","-180.17","-158.72","-138.32","-121.68","-105.41","-89.61","-74.48","-59.72","-46.63","-35.01","-23.56","-13.29","-4.92","3.90","16.20","29.60","44.02","63.55","84.33","106.65","130.83","159.30","193.63","231.83","274.32","317.52","364.48","414.57","470.10","538.53","608.95","685.44","768.20","856.98","953.40","1053.60","1164.76","1294.00","1444.00","1596.00","1771.35","1966.12","2176.68","2427.26","2738.40","3132.80","3548.87","4041.96","4805.58","5798.10","7455.03","16965.90"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: customer, Attribute: c_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 1::smallint, + False::boolean, + 0.0::real, + 4::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.09763528}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"9","21261","42021","62080","82255","103369","125043","144232","165965","190286","211001","230315","251065","272203","292790","312482","334187","353856","373058","396690","415673","436316","456746","480529","502046","524523","546632","568546","589481","610972","631185","654707","675842","698400","718405","739653","760815","781559","803530","825502","846209","866622","888173","908015","929893","950771","971557","991734","1015944","1037799","1059421","1080667","1101711","1122753","1142324","1163272","1183361","1204818","1225216","1247329","1269800","1290928","1313000","1333417","1354039","1374731","1393758","1413066","1434044","1455682","1476112","1499430","1518599","1539394","1559012","1578764","1600604","1620632","1642082","1661234","1681629","1701960","1723759","1745015","1765218","1786153","1808002","1827671","1848579","1869421","1889087","1911370","1931677","1953626","1974278","1994274","2014813","2037922","2058859","2079452","2099872"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_customer_id +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 2::smallint, + False::boolean, + 0.0::real, + 17::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.008318781}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"AAAAAAAAAAABNBAA","AAAAAAAAACGBGAAA","AAAAAAAAAELNKBAA","AAAAAAAAAHEPIBAA","AAAAAAAAAJKFCAAA","AAAAAAAAAMDPPBAA","AAAAAAAAAOPLIAAA","AAAAAAAABBKGGAAA","AAAAAAAABEDPKBAA","AAAAAAAABGMDNAAA","AAAAAAAABJECAAAA","AAAAAAAABMDEJBAA","AAAAAAAABONCCAAA","AAAAAAAACBEIBBAA","AAAAAAAACDPKGBAA","AAAAAAAACGLFEAAA","AAAAAAAACJEIMAAA","AAAAAAAACMCDAAAA","AAAAAAAACOLBDBAA","AAAAAAAADBIDOAAA","AAAAAAAADEGFPBAA","AAAAAAAADGPJIAAA","AAAAAAAADJHBOAAA","AAAAAAAADMAFGAAA","AAAAAAAADOHCCAAA","AAAAAAAAEAOAEBAA","AAAAAAAAEDNGDBAA","AAAAAAAAEGIFIAAA","AAAAAAAAEJAMPBAA","AAAAAAAAELLKDAAA","AAAAAAAAEOCLPAAA","AAAAAAAAFAINOAAA","AAAAAAAAFDBIJBAA","AAAAAAAAFFHIMBAA","AAAAAAAAFHPMHAAA","AAAAAAAAFKIAPBAA","AAAAAAAAFNCOBAAA","AAAAAAAAFPKHLAAA","AAAAAAAAGCDNHAAA","AAAAAAAAGEJHIBAA","AAAAAAAAGHBCCAAA","AAAAAAAAGJJENBAA","AAAAAAAAGMCKCAAA","AAAAAAAAGOMBABAA","AAAAAAAAHBIPLBAA","AAAAAAAAHDPAKAAA","AAAAAAAAHGJCKBAA","AAAAAAAAHJALPAAA","AAAAAAAAHLOFPAAA","AAAAAAAAHOHAAAAA","AAAAAAAAIAOACBAA","AAAAAAAAIDGNKAAA","AAAAAAAAIGCCNBAA","AAAAAAAAIIMJAAAA","AAAAAAAAILNBOBAA","AAAAAAAAIOCOJBAA","AAAAAAAAJAIBNBAA","AAAAAAAAJDBAABAA","AAAAAAAAJFFOFBAA","AAAAAAAAJICEDBAA","AAAAAAAAJKILJBAA","AAAAAAAAJMOJNBAA","AAAAAAAAJPEMKBAA","AAAAAAAAKBMKDBAA","AAAAAAAAKEDLDAAA","AAAAAAAAKGMFDBAA","AAAAAAAAKJJJCBAA","AAAAAAAAKMAFLBAA","AAAAAAAAKOGELBAA","AAAAAAAALAOCABAA","AAAAAAAALDGGLAAA","AAAAAAAALGAJJBAA","AAAAAAAALIJMEAAA","AAAAAAAALKOLOBAA","AAAAAAAALNFAKBAA","AAAAAAAALPKMDBAA","AAAAAAAAMCDMMBAA","AAAAAAAAMELNCBAA","AAAAAAAAMHFNBBAA","AAAAAAAAMJMFPBAA","AAAAAAAAMMGBFAAA","AAAAAAAAMPBPFAAA","AAAAAAAANBJMLAAA","AAAAAAAANECPPBAA","AAAAAAAANHBEAAAA","AAAAAAAANJIOCBAA","AAAAAAAANMDCBAAA","AAAAAAAANPAGFBAA","AAAAAAAAOBIDJBAA","AAAAAAAAODNGFAAA","AAAAAAAAOGECJBAA","AAAAAAAAOINLGAAA","AAAAAAAAOLGCEBAA","AAAAAAAAONPNAAAA","AAAAAAAAPAKLGAAA","AAAAAAAAPDDNKAAA","AAAAAAAAPFNALBAA","AAAAAAAAPIFFFAAA","AAAAAAAAPLABOAAA","AAAAAAAAPNGKCBAA","AAAAAAAAPPPOAAAA"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_current_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 3::smallint, + False::boolean, + 0.036333334::real, + 4::integer, + -0.50137764::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0013170508}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"83","18955","39087","58094","75845","95317","115100","134187","152171","172644","193010","211552","231710","251817","270655","288181","306995","323507","344088","362797","382712","404200","423621","442226","460401","479260","497142","517339","536731","556732","574796","592497","612826","632068","650345","670861","690813","710439","729562","747865","768032","784796","804004","823342","840808","862022","880748","899717","920319","938794","957931","976962","994731","1014023","1033686","1051262","1072185","1092147","1113436","1132849","1151543","1170064","1188829","1208390","1228056","1247895","1268450","1286523","1306787","1325642","1344821","1361249","1380841","1399617","1418271","1436735","1456195","1476598","1496520","1514478","1535680","1554729","1573897","1593768","1614360","1634204","1654338","1672759","1691901","1711514","1731470","1749749","1767712","1787017","1807176","1824761","1843120","1863530","1883265","1901706","1920535"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_current_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 4::smallint, + False::boolean, + 0.0347::real, + 4::integer, + 7192.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.00030779035}'::real[], + NULL::real[], + NULL::real[], + E'{"882","1308","3965","367","666","1327","6987"}'::int4[], + E'{"1","72","141","218","292","372","440","506","579","647","728","799","868","940","1006","1081","1151","1224","1294","1368","1432","1502","1576","1650","1728","1803","1873","1941","2024","2095","2168","2245","2318","2395","2472","2542","2617","2682","2751","2823","2897","2969","3041","3110","3179","3248","3319","3390","3457","3520","3590","3657","3725","3801","3881","3954","4024","4098","4179","4251","4312","4383","4451","4522","4604","4674","4745","4814","4885","4954","5024","5095","5171","5245","5317","5386","5452","5523","5591","5664","5732","5805","5883","5956","6025","6099","6170","6241","6316","6392","6464","6534","6610","6685","6756","6829","6900","6980","7059","7129","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_current_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 5::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.32888332::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0058509638}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"52","10026","21386","32663","42941","53021","65083","75763","86063","96263","107445","117990","127743","138145","147534","158592","168713","178593","188864","199238","210017","220563","231187","241437","252281","263159","273251","284057","295058","305713","315928","326018","336613","346947","357443","368266","378995","388655","399147","410310","419835","429767","442179","452745","463314","473270","483327","494816","505073","515313","525490","536085","546403","556179","567315","577096","587145","597369","608015","619292","629700","640103","651254","661172","671946","681745","691688","702105","712203","721654","733295","743331","753425","764850","774949","785116","795978","806368","817723","827531","838047","849099","859705","870677","881136","891818","902438","912558","922958","933355","943287","953511","964298","974663","985836","996922","1007782","1017952","1029639","1040067","1049984"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_first_shipto_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 6::smallint, + False::boolean, + 0.035633333::real, + 4::integer, + 3649.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665}'::real[], + NULL::real[], + '{-0.0058256034}'::real[], + NULL::real[], + NULL::real[], + E'{"2450039","2451757","2449267","2449566","2449608","2450648","2450973","2451697","2452197"}'::int4[], + E'{"2449028","2449061","2449097","2449131","2449163","2449198","2449239","2449274","2449311","2449346","2449381","2449417","2449457","2449492","2449530","2449568","2449601","2449635","2449669","2449706","2449746","2449780","2449818","2449857","2449893","2449930","2449972","2450009","2450045","2450081","2450118","2450155","2450194","2450228","2450265","2450301","2450337","2450372","2450407","2450444","2450483","2450523","2450560","2450594","2450633","2450672","2450708","2450743","2450779","2450812","2450853","2450890","2450930","2450969","2451005","2451044","2451078","2451114","2451147","2451184","2451221","2451261","2451295","2451334","2451370","2451411","2451449","2451486","2451523","2451560","2451594","2451627","2451664","2451702","2451740","2451774","2451810","2451846","2451879","2451918","2451954","2451991","2452028","2452063","2452099","2452135","2452172","2452207","2452242","2452277","2452312","2452352","2452389","2452429","2452461","2452495","2452530","2452566","2452602","2452640","2452678"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_first_sales_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 7::smallint, + False::boolean, + 0.034733333::real, + 4::integer, + 3650.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665}'::real[], + NULL::real[], + '{-0.008479864}'::real[], + NULL::real[], + NULL::real[], + E'{"2450009","2451727","2449237","2449536","2450618","2450943","2451260","2451667","2452039","2452167"}'::int4[], + E'{"2448998","2449032","2449067","2449101","2449135","2449170","2449209","2449245","2449281","2449317","2449352","2449389","2449428","2449463","2449500","2449537","2449571","2449603","2449637","2449673","2449713","2449747","2449785","2449823","2449859","2449897","2449940","2449977","2450013","2450049","2450084","2450121","2450161","2450196","2450234","2450270","2450306","2450341","2450375","2450412","2450450","2450489","2450526","2450562","2450599","2450638","2450674","2450708","2450743","2450778","2450819","2450854","2450894","2450934","2450971","2451008","2451044","2451079","2451114","2451151","2451188","2451226","2451263","2451301","2451338","2451379","2451417","2451453","2451492","2451528","2451561","2451594","2451629","2451669","2451706","2451741","2451776","2451811","2451845","2451884","2451921","2451957","2451993","2452029","2452067","2452104","2452140","2452175","2452211","2452245","2452281","2452322","2452358","2452398","2452431","2452465","2452501","2452536","2452573","2452610","2452648"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_salutation +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 8::smallint, + False::boolean, + 0.035633333::real, + 4::integer, + 6.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.2827, 0.16666667, 0.166, 0.117466666, 0.11726667, 0.114266664}'::real[], + '{0.19105348}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"Dr.","Mr.","Sir","Miss","Mrs.","Ms."}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_first_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 9::smallint, + False::boolean, + 0.0351::real, + 6::integer, + 2938.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.019733334, 0.0178, 0.0177, 0.014733333, 0.013333334, 0.012866667, 0.011166667, 0.0086, 0.008466667, 0.0082, 0.006, 0.0059666666, 0.0059666666, 0.0055, 0.0055, 0.0053666667, 0.0053, 0.0053, 0.0051, 0.0049666665, 0.0049, 0.0049, 0.0047, 0.0045, 0.0042, 0.004166667, 0.0041333335, 0.0040666666, 0.0039666668, 0.0039333333, 0.0039333333, 0.0038666667, 0.0038666667, 0.0038333333, 0.0038333333, 0.0038, 0.0038, 0.0037333334, 0.0036666666, 0.0035, 0.0035, 0.0034666667, 0.0034333332, 0.0034333332, 0.0033666666, 0.0033666666, 0.0033333334, 0.0031666667, 0.0031, 0.0031, 0.0030666667, 0.003, 0.0029666666, 0.0029666666, 0.0028666668, 0.0028333333, 0.0028333333, 0.0028, 0.0027666667, 0.0027, 0.0027, 0.0026666666, 0.0026333334, 0.0026333334, 0.0026, 0.0026, 0.0025666666, 0.0025666666, 0.0025, 0.0024666667, 0.0024666667, 0.0024333333, 0.0024, 0.0024, 0.0023666667, 0.0023333333, 0.0023333333, 0.0023333333, 0.0022666666, 0.0022333334, 0.0022333334, 0.0022, 0.0022, 0.0022, 0.0021666666, 0.0021666666, 0.0021666666, 0.0021666666, 0.0021666666, 0.0021333334, 0.0020666667, 0.0020666667, 0.0020666667, 0.0020333333, 0.002, 0.0019666667, 0.0019666667, 0.0019333333, 0.0019, 0.0018666667}'::real[], + NULL::real[], + '{0.0041609285}'::real[], + NULL::real[], + NULL::real[], + E'{"John","James","Robert","Michael","David","William","Richard","Joseph","Charles","Thomas","Christopher","Linda","Mark","Daniel","Donald","Jennifer","Elizabeth","George","Barbara","Kenneth","Margaret","Paul","Dorothy","Edward","Susan","Brian","Jason","Lisa","Steven","Gary","Ronald","Anthony","Larry","Karen","Sandra","Helen","Matthew","Nancy","Kevin","Andrew","Eric","Sharon","Donna","Jeffrey","Betty","Timothy","Raymond","Jose","Frank","Jessica","Angela","Ruth","Melissa","Rebecca","Anna","Gloria","Laura","Stephen","Amy","Brenda","Cynthia","Deborah","Pamela","Patrick","Martha","Virginia","Michelle","Sarah","Diane","Joshua","Kimberly","Ann","Arthur","Scott","Douglas","Christine","Gregory","Harold","Katherine","Dennis","Joyce","Alice","Janet","Stephanie","Jerry","Kathleen","Marie","Peter","Theresa","Walter","Albert","Amanda","Teresa","Debra","Jonathan","Fred","Keith","Willie","Gerald","Lori"}'::varchar[], + E'{"Aaron","Adrienne","Alexander","Allyson","Andrea","Anne","April","Audrey","Benjamin","Bessie","Billy","Bradley","Brigitte","Caitlyn","Carlos","Carrie","Cecelia","Charlotte","Christian","Clara","Clifton","Cornelius","Cyrus","Danny","Dawn","Delta","Diana","Dora","Earl","Edna","Elena","Elsie","Erika","Ethel","Evelyn","Fleta","Freddie","Georgia","Glen","Gregorio","Hattie","Henriette","Homer","Ingrid","Jack","Jaleesa","Janis","Jed","Jerome","Jimmie","Joe","Jon","Juan","Julia","Justin","Kathy","Kerry","Kurt","Lavon","Leo","Letitia","Lois","Louis","Luis","Mae","Marco","Marilynn","Martin","Maurice","Melvin","Mike","Mitchell","Naomi","Nicholas","Norma","Oscar","Pauline","Phillip","Rachel","Randy","Renee","Robbie","Roger","Rose","Roy","Sabrina","Sara","Sharlene","Sherry","Stanley","Suzi","Tanya","Terry","Tina","Tonya","Tyrone","Veronica","Viola","Warren","Willian","Zulma"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_last_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 10::smallint, + False::boolean, + 0.033933334::real, + 7::integer, + 4529.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.015133333, 0.011733334, 0.011033333, 0.009233333, 0.008533333, 0.008166667, 0.0059666666, 0.0048666666, 0.0048, 0.0047, 0.0046333335, 0.0046333335, 0.0043666665, 0.0043, 0.0041333335, 0.004, 0.0039666668, 0.0039, 0.0039, 0.0037333334, 0.0036333334, 0.0032666668, 0.0031666667, 0.0031333333, 0.0030666667, 0.003, 0.003, 0.0029, 0.0029, 0.0027666667, 0.0027333333, 0.0027333333, 0.0027, 0.0026333334, 0.0026333334, 0.0026333334, 0.0026, 0.0026, 0.0026, 0.0025666666, 0.0025, 0.0024666667, 0.0024333333, 0.0023666667, 0.0023666667, 0.0023333333, 0.0022, 0.0022, 0.0021333334, 0.0021333334, 0.0021333334, 0.0020666667, 0.0020333333, 0.0019, 0.0019, 0.0018666667, 0.0018666667, 0.0018333333, 0.0018, 0.0017666667, 0.0017666667, 0.0017666667, 0.0017333333, 0.0017333333, 0.0017333333, 0.0017333333, 0.0017, 0.0016666667, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016, 0.0016, 0.0016, 0.0015666666, 0.0015666666, 0.0015333333, 0.0015333333, 0.0015333333, 0.0015333333, 0.0015, 0.0015, 0.0015, 0.0015, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014333334, 0.0014333334, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333}'::real[], + NULL::real[], + '{0.0012389864}'::real[], + NULL::real[], + NULL::real[], + E'{"Smith","Johnson","Williams","Jones","Brown","Davis","Miller","Taylor","Thomas","Jackson","Moore","Wilson","Garcia","Anderson","Martin","Walker","Harris","Martinez","Robinson","Thompson","White","Young","Wright","Lee","Lewis","Hall","King","Rodriguez","Turner","Nelson","Allen","Hill","Roberts","Carter","Clark","Gonzalez","Adams","Hernandez","Scott","Campbell","Lopez","Baker","Green","Bell","Evans","Bailey","Rogers","Torres","Mitchell","Morgan","Stewart","Perez","Edwards","Collins","Sanchez","Morris","Phillips","Gray","Parker","Cox","Reed","Rivera","Brooks","Diaz","Richardson","Watson","Washington","Perry","Murphy","Patterson","Ross","Bryant","Cooper","Kelly","Henderson","Howard","Cook","James","Peterson","Simmons","Long","Mason","Russell","Wood","Gonzales","Murray","Price","Ramirez","Ward","Hughes","Myers","Barnes","Daniels","Harrison","Alexander","Bennett","Ford","Graham","Burns","Powell"}'::varchar[], + E'{"Aaron","Allison","Armstrong","Ayala","Barlow","Baxter","Benson","Black","Bonilla","Boyer","Bright","Burdick","Butler","Cano","Carroll","Chambers","Chinn","Coats","Comer","Correa","Creech","Cupp","Davies","Dent","Donovan","Duffy","Eaton","Enriquez","Farrington","Fink","Flynn","Frank","Fuller","Garrett","Gibson","Golding","Graves","Gross","Hale","Hardaway","Harvey","Heard","Herrera","Hobbs","Holt","Howe","Hunter","Jacobs","Johnston","Keller","Kirby","Kurtz","Larkin","Ledoux","Lindsey","Lowe","Mack","Markley","May","Mccormick","Mcgrath","Mcneil","Mercier","Moffitt","Morrison","Nagel","Nichols","Ocampo","Orozco","Padilla","Patton","Perkins","Pinto","Pratt","Raines","Reece","Rhodes","Ritter","Roman","Ruby","Salinas","Saylor","Seiler","Shepherd","Simpson","Snyder","Sperry","Stephens","Strickland","Sweeney","Thornton","Trejo","Valencia","Vernon","Walls","Weaver","West","Wiley","Winters","Worsham","Zuniga"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_preferred_cust_flag +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 11::smallint, + False::boolean, + 0.03533333::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.49123332, 0.47343335}'::real[], + '{0.4982882}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: customer, Attribute: c_birth_day +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 12::smallint, + False::boolean, + 0.0334::real, + 4::integer, + 31.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0341, 0.0336, 0.0335, 0.033166666, 0.0326, 0.032266665, 0.032233335, 0.0321, 0.031933334, 0.0319, 0.0319, 0.0319, 0.031866666, 0.031833332, 0.031833332, 0.0317, 0.031533334, 0.031533334, 0.0315, 0.031466667, 0.031166667, 0.0311, 0.030966667, 0.030733334, 0.0307, 0.030533334, 0.030066667, 0.029833334, 0.029666666, 0.028233333, 0.019133333}'::real[], + '{0.03440461}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"27","15","26","5","10","23","21","19","14","6","7","18","12","13","24","17","16","22","1","25","8","11","9","3","28","4","29","2","20","30","31"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_birth_month +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 13::smallint, + False::boolean, + 0.0355::real, + 4::integer, + 12.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.08296666, 0.0828, 0.0826, 0.082166664, 0.08143333, 0.08093333, 0.079966664, 0.079733334, 0.079166666, 0.0789, 0.07836667, 0.07546667}'::real[], + '{0.08591734}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3","1","8","7","9","10","5","6","12","4","11","2"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_birth_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 14::smallint, + False::boolean, + 0.036066666::real, + 4::integer, + 69.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0158, 0.015133333, 0.0151, 0.0150666665, 0.014966667, 0.014966667, 0.014966667, 0.014966667, 0.0148, 0.014766667, 0.014733333, 0.0147, 0.0146, 0.0146, 0.014566666, 0.014366667, 0.014366667, 0.014366667, 0.014333333, 0.014333333, 0.0143, 0.014266667, 0.014266667, 0.014266667, 0.014233333, 0.0142, 0.014166667, 0.014166667, 0.014066666, 0.014066666, 0.014033333, 0.014033333, 0.014, 0.013966667, 0.013966667, 0.013966667, 0.013933334, 0.013933334, 0.013933334, 0.013866667, 0.013866667, 0.0138, 0.0138, 0.013733333, 0.013733333, 0.013666667, 0.0136, 0.0135, 0.0135, 0.013466666, 0.0134333335, 0.0134333335, 0.0134, 0.013366667, 0.013366667, 0.013266667, 0.013266667, 0.013266667, 0.013266667, 0.0132, 0.0131, 0.0131, 0.013066667, 0.013066667, 0.013033333, 0.013033333, 0.012933333, 0.012833334, 0.0127}'::real[], + '{0.023301385}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1940","1978","1935","1970","1955","1957","1959","1990","1988","1925","1956","1987","1972","1985","1946","1926","1932","1933","1929","1979","1968","1930","1951","1961","1975","1966","1953","1971","1939","1977","1941","1991","1960","1937","1948","1952","1927","1938","1962","1964","1976","1958","1986","1924","1928","1965","1983","1942","1963","1931","1944","1945","1984","1934","1954","1947","1980","1981","1989","1982","1950","1969","1973","1974","1936","1949","1943","1967","1992"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_birth_country +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 15::smallint, + False::boolean, + 0.035633333::real, + 9::integer, + 211.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.0056666667, 0.0055333334}'::real[], + NULL::real[], + '{0.013934988}'::real[], + NULL::real[], + NULL::real[], + E'{"GEORGIA","GREENLAND"}'::varchar[], + E'{"AFGHANISTAN","ALBANIA","AMERICAN SAMOA","ANGOLA","ANGUILLA","ARGENTINA","ARUBA","AUSTRIA","BAHAMAS","BANGLADESH","BELARUS","BELIZE","BERMUDA","BOLIVIA","BOUVET ISLAND","BRUNEI DARUSSALAM","BURUNDI","CAMBODIA","CANADA","CAYMAN ISLANDS","CHRISTMAS ISLAND","COSTA RICA","CROATIA","CYPRUS","DENMARK","DOMINICA","EGYPT","EQUATORIAL GUINEA","ETHIOPIA","FIJI","FRANCE","FRENCH POLYNESIA","GAMBIA","GHANA","GREECE","GUADELOUPE","GUATEMALA","GUINEA","HAITI","HONDURAS","ICELAND","INDONESIA","IRELAND","ISRAEL","JAMAICA","JERSEY","KAZAKHSTAN","KIRIBATI","KUWAIT","LEBANON","LIBERIA","LITHUANIA","LUXEMBOURG","MALAWI","MALDIVES","MALTA","MARTINIQUE","MAURITIUS","MEXICO","MONACO","MONTENEGRO","MOROCCO","NAMIBIA","NEPAL","NETHERLANDS ANTILLES","NEW ZEALAND","NIGER","NIUE","NORWAY","PALAU","PAPUA NEW GUINEA","PERU","PITCAIRN","PORTUGAL","QATAR","ROMANIA","RWANDA","SAMOA","SAUDI ARABIA","SERBIA","SIERRA LEONE","SLOVAKIA","SOLOMON ISLANDS","SOUTH AFRICA","SRI LANKA","SURINAME","SWEDEN","SYRIAN ARAB REPUBLIC","THAILAND","TOGO","TONGA","TUNISIA","TUVALU","UKRAINE","UNITED KINGDOM","URUGUAY","VANUATU","VIET NAM","WALLIS AND FUTUNA","YEMEN","ZIMBABWE"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_login +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 16::smallint, + False::boolean, + 1.0::real, + 0::integer, + 0.0::real, + 0::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + NULL::real[], + NULL::real[], + NULL::real[], + NULL::real[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_email_address +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 17::smallint, + False::boolean, + 0.03596667::real, + 28::integer, + -0.9640333::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.00065877277}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"Aaron.Allen@QVp8KYxoqS.edu","Albert.Mcnabb@JqFg1Vfr.edu","Allen.Blackmon@rDQezy0Iy.org","Amy.Moore@lIXLGiGxl.com","Angela.Perez@9CODy4qpPeA8HCLX.com","Annie.Anderson@D1dOEV8V7YH.edu","April.Sanchez@MlJE7Jyr1KnbMizt8.com","Barbara.Bird@Bsz4Y8vF.edu","Bennie.Mcdonald@8a.com","Beverly.Armstrong@QKMtgEU.edu","Brady.Pacheco@V3G7zDs.org","Brian.Otto@5Ue35SXHl043P.org","Candy.Cox@BmsyXv426e.edu","Casey.Steele@TkMmIusn.com","Charles.Brito@qPU9PAt6xF.com","Chelsey.Gil@U7R6AeIVeQNbM.org","Christopher.Caraway@baXEFsAXkiXc4H.com","Clarence.Martinez@Tjom5JSSLsiqH.edu","Corinne.Blount@gG8DjsIs77.edu","Dale.Peterson@UP1FQ.com","Danny.Rudd@Qj.edu","David.Hernandez@XvDstf8oVspNVEq9N2ek.edu","Dawn.Washington@UZL4A2cTelj.org","Delorse.Mann@p1.edu","Diane.Ruiz@tq8V3.edu","Dona.Rucker@U5tPkxBoh3Nvvr.edu","Dorothy.Ledoux@6UXxuie.org","Ebony.Straub@O0ny7G.edu","Edwin.Brown@jifz5d3.com","Elizabeth.Rowe@x7a.com","Erica.Stewart@MjVPLVkiTTx1k9xvn.com","Ethel.Bowers@BchSkuO.edu","Felisha.White@4KHiD3EfpI.org","Fred.Burns@YAxMo0quQt02.org","Gaynell.Duran@PP5khP2OBXNnz.edu","Gerald.Olivas@Hs63PKrg.org","Goldie.Costello@74uH9.com","Harold.Mckinney@0Ymy5L.edu","Helene.Lockhart@4guNOhMAJ.org","Howard.Clarkson@KEs7Z6hdVT5d.edu","Jack.Davis@D7dTycb6ort.org","James.Cockrell@5lqoIx4paJn9P.org","James.Richter@7JahtLhEvS.org","Janice.Choate@ItXxi6VjtefUmkF.org","Jeanette.Mathews@mXCyZTs8MaGK9.org","Jennifer.Emerson@LADJl.com","Jerry.Willoughby@4h6L6um1aOm0JTk.edu","Joanna.French@Dn.com","John.Byrd@xAeLnuIQqDO4V.edu","John.Nail@vdm7UXfYYeeR5.org","Jonathan.Cochran@a1YLy7.com","Josephine.Barton@jbuycDaa1Dih2f6TbHs.org","Joshua.Trent@P5VKT8eLAEqph7.org","Julia.Mcneil@UXUiYMm4Rf1r1ysly2.com","Karen.Salmon@hVtuyn2.org","Kathy.Roush@f1.com","Kenneth.Nolen@fXIxCA8ecA7kUe.edu","Kimberly.Ward@UjmN1i5S0HqjOSB6P.org","Larry.Mccollum@KM3A2VsKR51LR7aSC2.edu","Leann.Lindsay@CYHO5.org","Lillian.Gibbons@ex2.edu","Lisa.Kaiser@2.edu","Lorraine.Wasson@fxUN1RDnuPC.com","Lyn.Green@ab9AnRe6OP.edu","Margaret.Childers@I2BJusIOR.org","Marilyn.Cochran@fXUsGKiG2pQn5p.org","Mark.Townsend@QRk6f4vPmjzGsd.edu","Matthew.Brown@BbgxEpsOa2.edu","Melissa.Brown@tU.org","Michael.Evans@na3Fzya.edu","Michael.Vickery@tGpS.edu","Millie.Wood@CYrA5ZCpBUxN.com","Nancy.Hubbard@1Dij5VOarSDD.com","Nicole.Cartwright@XVpmQfap67h39R.edu","Otha.Mathews@Q.edu","Paul.Bernard@l8hNZT.com","Peter.Bean@1hcfjEMbL.com","Rafael.Walker@DdbVsZ48tXFR.org","Raymond.Willis@FuCYxX.org","Richard.Blue@hk6sJl.org","Richard.Walker@QkOyOiijkoT6tALu.org","Robert.Feliciano@zrxHvBIUT1.org","Robert.Schrader@84hFFO.edu","Ronald.Barajas@SmV.edu","Rose.Rivera@nI5i3amDP9e.com","Ruth.Noble@nsRPMH7imQms.edu","Sandra.Ngo@NpRHjOrv.org","Sean.Young@cSmSeTb.edu","Shelly.Prentice@fOdVDfc3l.org","Stephanie.Maupin@1aO67HVBb4t.org","Stuart.Mintz@sCH9lO.com","Tamika.Walker@LypSN7cml.com","Terry.Pence@9V95I2n.edu","Thomas.Logan@62ZLdPqs6.edu","Tina.Fry@ggnu7.com","Troy.Hunt@HEIC1huvlV2.com","Vicky.Smith@7NTjUV1y.com","Walter.Guinn@q0V9yqO.com","William.Biddle@X3bGbi3YEGk.edu","William.Silva@OsUh7.edu","Zulma.Williams@NNUybLiKUcP.com"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_last_review_date +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 18::smallint, + False::boolean, + 0.03643333::real, + 4::integer, + 366.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0033333334, 0.0033333334}'::real[], + NULL::real[], + '{-0.010210618}'::real[], + NULL::real[], + NULL::real[], + E'{"2452342","2452574"}'::int4[], + E'{"2452283","2452286","2452290","2452293","2452297","2452301","2452304","2452308","2452312","2452315","2452318","2452322","2452326","2452329","2452333","2452337","2452341","2452345","2452349","2452352","2452356","2452360","2452363","2452367","2452371","2452374","2452378","2452382","2452386","2452389","2452393","2452397","2452400","2452404","2452408","2452411","2452414","2452418","2452422","2452425","2452429","2452433","2452437","2452440","2452444","2452447","2452451","2452455","2452458","2452462","2452465","2452469","2452473","2452476","2452480","2452483","2452487","2452491","2452494","2452498","2452501","2452505","2452508","2452512","2452515","2452519","2452523","2452527","2452531","2452535","2452538","2452542","2452545","2452549","2452553","2452556","2452560","2452563","2452568","2452571","2452576","2452579","2452583","2452587","2452591","2452594","2452598","2452601","2452605","2452608","2452612","2452616","2452619","2452623","2452626","2452630","2452634","2452638","2452641","2452645","2452648"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 1::smallint, + False::boolean, + 0.0::real, + 4::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2415027","2415771","2416520","2417211","2417903","2418630","2419355","2420088","2420908","2421635","2422337","2423125","2423817","2424576","2425331","2426034","2426734","2427456","2428161","2428886","2429586","2430281","2431030","2431747","2432487","2433188","2433919","2434660","2435416","2436096","2436816","2437551","2438254","2438932","2439677","2440414","2441121","2441884","2442643","2443351","2444066","2444821","2445520","2446305","2447089","2447791","2448548","2449230","2449930","2450652","2451408","2452175","2452928","2453663","2454412","2455152","2455942","2456650","2457349","2458087","2458835","2459531","2460255","2460995","2461677","2462381","2463126","2463880","2464613","2465432","2466146","2466884","2467605","2468353","2469108","2469764","2470509","2471242","2471960","2472732","2473465","2474220","2474963","2475782","2476553","2477254","2477964","2478666","2479406","2480132","2480928","2481630","2482367","2483101","2483817","2484513","2485191","2485905","2486655","2487351","2488066"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_date_id +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 2::smallint, + False::boolean, + 0.0::real, + 17::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.004197001}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"AAAAAAAAAAABFCAA","AAAAAAAAACLOFCAA","AAAAAAAAAFFCFCAA","AAAAAAAAAHNPECAA","AAAAAAAAAKHDFCAA","AAAAAAAAAMPOECAA","AAAAAAAAAPIBFCAA","AAAAAAAABBPBFCAA","AAAAAAAABEFFFCAA","AAAAAAAABGOIFCAA","AAAAAAAABJKKFCAA","AAAAAAAABMDCFCAA","AAAAAAAABONBFCAA","AAAAAAAACBFDFCAA","AAAAAAAACDNAFCAA","AAAAAAAACGHOFCAA","AAAAAAAACJCMFCAA","AAAAAAAACLLAFCAA","AAAAAAAACOBLFCAA","AAAAAAAADAMDFCAA","AAAAAAAADDFPECAA","AAAAAAAADGAOFCAA","AAAAAAAADIKLFCAA","AAAAAAAADLDCFCAA","AAAAAAAADOCDFCAA","AAAAAAAAEAKPECAA","AAAAAAAAEDEAFCAA","AAAAAAAAEFPHFCAA","AAAAAAAAEILJFCAA","AAAAAAAAELGOECAA","AAAAAAAAENOOFCAA","AAAAAAAAFAFPECAA","AAAAAAAAFCPJFCAA","AAAAAAAAFFGHFCAA","AAAAAAAAFHMOECAA","AAAAAAAAFKEKFCAA","AAAAAAAAFMMJFCAA","AAAAAAAAFPCKFCAA","AAAAAAAAGBKJFCAA","AAAAAAAAGEDOECAA","AAAAAAAAGGOAFCAA","AAAAAAAAGJKHFCAA","AAAAAAAAGMEBFCAA","AAAAAAAAGONOFCAA","AAAAAAAAHBJHFCAA","AAAAAAAAHECHFCAA","AAAAAAAAHGLOECAA","AAAAAAAAHJFDFCAA","AAAAAAAAHLOBFCAA","AAAAAAAAHOFIFCAA","AAAAAAAAIANCFCAA","AAAAAAAAIDFPECAA","AAAAAAAAIFMFFCAA","AAAAAAAAIIGHFCAA","AAAAAAAAILABFCAA","AAAAAAAAINJEFCAA","AAAAAAAAJADHFCAA","AAAAAAAAJCLBFCAA","AAAAAAAAJFDCFCAA","AAAAAAAAJHLMFCAA","AAAAAAAAJKDBFCAA","AAAAAAAAJMKOFCAA","AAAAAAAAJPCHFCAA","AAAAAAAAKBMIFCAA","AAAAAAAAKEEPECAA","AAAAAAAAKGODFCAA","AAAAAAAAKJGPECAA","AAAAAAAAKLMAFCAA","AAAAAAAAKOFCFCAA","AAAAAAAALBAAFCAA","AAAAAAAALDKOECAA","AAAAAAAALGBIFCAA","AAAAAAAALIGMFCAA","AAAAAAAALKMOECAA","AAAAAAAALNENFCAA","AAAAAAAALPMOFCAA","AAAAAAAAMCFFFCAA","AAAAAAAAMELFFCAA","AAAAAAAAMHFJFCAA","AAAAAAAAMJOIFCAA","AAAAAAAAMMHDFCAA","AAAAAAAAMPBJFCAA","AAAAAAAANBKMFCAA","AAAAAAAANEHIFCAA","AAAAAAAANGMPECAA","AAAAAAAANJIAFCAA","AAAAAAAANMDDFCAA","AAAAAAAANOPGFCAA","AAAAAAAAOBHNFCAA","AAAAAAAAOEAPFCAA","AAAAAAAAOGKIFCAA","AAAAAAAAOJBGFCAA","AAAAAAAAOLIJFCAA","AAAAAAAAOOALFCAA","AAAAAAAAPAJMFCAA","AAAAAAAAPDCOECAA","AAAAAAAAPFLAFCAA","AAAAAAAAPIECFCAA","AAAAAAAAPKNIFCAA","AAAAAAAAPNFPFCAA","AAAAAAAAPPPOFCAA"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: date_dim, Attribute: d_date +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 3::smallint, + False::boolean, + 0.0::real, + 4::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1095::oid, + 1095::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1900-01-07","1902-01-21","1904-02-09","1905-12-31","1907-11-23","1909-11-19","1911-11-14","1913-11-16","1916-02-14","1918-02-10","1920-01-13","1922-03-11","1924-02-01","1926-03-01","1928-03-25","1930-02-26","1932-01-27","1934-01-18","1935-12-24","1937-12-18","1939-11-18","1941-10-13","1943-11-01","1945-10-18","1947-10-28","1949-09-28","1951-09-29","1953-10-09","1955-11-04","1957-09-14","1959-09-04","1961-09-08","1963-08-12","1965-06-20","1967-07-05","1969-07-11","1971-06-18","1973-07-20","1975-08-18","1977-07-26","1979-07-11","1981-08-04","1983-07-04","1985-08-27","1987-10-20","1989-09-21","1991-10-18","1993-08-30","1995-07-31","1997-07-22","1999-08-17","2001-09-22","2003-10-15","2005-10-19","2007-11-07","2009-11-16","2012-01-15","2013-12-23","2015-11-22","2017-11-29","2019-12-17","2021-11-12","2023-11-06","2025-11-15","2027-09-28","2029-09-01","2031-09-16","2033-10-09","2035-10-12","2038-01-08","2039-12-23","2041-12-30","2043-12-21","2046-01-07","2048-02-01","2049-11-18","2051-12-03","2053-12-05","2055-11-23","2058-01-03","2060-01-06","2062-01-30","2064-02-12","2066-05-11","2068-06-20","2070-05-22","2072-05-01","2074-04-03","2076-04-12","2078-04-08","2080-06-12","2082-05-15","2084-05-21","2086-05-25","2088-05-10","2090-04-06","2092-02-13","2094-01-27","2096-02-16","2098-01-12","2099-12-28"}'::date[], + NULL::date[], + NULL::date[], + NULL::date[], + NULL::date[]); +-- +-- Table: date_dim, Attribute: d_month_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 4::smallint, + False::boolean, + 0.0::real, + 4::integer, + 2400.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00073333335, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"979","1761","198","288","356","445","552","594","751","941","1154","1251"}'::int4[], + E'{"0","24","48","71","94","117","141","164","191","217","239","265","289","314","339","363","386","409","432","458","480","503","528","551","577","601","625","649","675","695","719","743","768","790","814","838","861","885","911","934","959","985","1009","1034","1059","1083","1106","1130","1152","1176","1201","1226","1252","1277","1301","1326","1351","1373","1396","1421","1444","1467","1491","1515","1537","1560","1585","1609","1633","1661","1684","1707","1731","1755","1781","1803","1827","1851","1874","1900","1923","1948","1973","1999","2024","2048","2070","2094","2117","2141","2167","2190","2213","2238","2261","2283","2306","2329","2354","2376","2399"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_week_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 5::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.14316417::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1","108","215","313","412","516","620","724","841","945","1046","1158","1257","1365","1473","1574","1674","1777","1878","1981","2081","2180","2287","2390","2496","2596","2700","2806","2914","3011","3114","3219","3319","3416","3523","3628","3729","3838","3946","4048","4150","4258","4357","4470","4582","4682","4790","4887","4987","5091","5199","5308","5416","5521","5628","5733","5846","5947","6047","6153","6260","6359","6462","6568","6666","6766","6873","6980","7085","7202","7304","7409","7512","7619","7727","7821","7927","8032","8135","8245","8350","8457","8564","8681","8791","8891","8992","9093","9198","9302","9416","9516","9621","9726","9828","9928","10025","10127","10234","10333","10435"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_quarter_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 6::smallint, + False::boolean, + 0.0::real, + 4::integer, + 801.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0018, 0.0018, 0.0017333333}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"141","754","588"}'::int4[], + E'{"1","9","17","25","32","40","48","56","65","73","81","89","97","105","113","121","128","136","145","153","161","169","177","184","192","200","208","216","225","232","240","248","255","263","271","279","287","295","303","311","319","327","335","343","352","359","367","375","383","390","399","407","415","423","431","439","448","456","463","471","480","487","495","503","511","518","526","534","543","551","559","567","575","583","593","600","608","616","624","632","640","648","657","665","674","682","689","697","705","713","721","729","737","745","753","762","769","777","786","793","801"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 7::smallint, + False::boolean, + 0.0::real, + 4::integer, + 200.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0060666665, 0.006, 0.0058333334, 0.0057666665, 0.0056666667}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"1957","2088","1929","1907","2027"}'::int4[], + E'{"1900","1902","1904","1905","1908","1910","1912","1914","1916","1918","1920","1922","1924","1926","1928","1931","1933","1935","1937","1939","1940","1942","1944","1946","1948","1950","1952","1954","1956","1959","1961","1963","1965","1967","1969","1970","1972","1974","1976","1978","1980","1982","1984","1986","1988","1990","1992","1994","1996","1998","2000","2002","2004","2006","2008","2010","2012","2014","2016","2017","2019","2021","2023","2025","2028","2030","2032","2034","2036","2038","2040","2042","2044","2046","2048","2050","2052","2054","2055","2058","2059","2061","2064","2066","2068","2070","2072","2073","2075","2077","2079","2081","2083","2085","2087","2090","2092","2094","2096","2098","2099"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_dow +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 8::smallint, + False::boolean, + 0.0::real, + 4::integer, + 7.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.14473334, 0.14406666, 0.14326666, 0.14316666, 0.14263333, 0.14153333, 0.1406}'::real[], + '{0.13635832}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2","3","1","4","0","6","5"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_moy +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 9::smallint, + False::boolean, + 0.0::real, + 4::integer, + 12.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.085533336, 0.085433334, 0.0849, 0.0846, 0.084366664, 0.08426667, 0.08393333, 0.08316667, 0.0829, 0.082, 0.08183333, 0.07706667}'::real[], + '{0.088353634}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3","5","10","12","1","7","6","8","9","11","4","2"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_dom +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 10::smallint, + False::boolean, + 0.0::real, + 4::integer, + 31.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0351, 0.0338, 0.03376667, 0.033733334, 0.033733334, 0.033633333, 0.033466667, 0.033466667, 0.03313333, 0.0331, 0.032966666, 0.032966666, 0.032966666, 0.0329, 0.032866668, 0.032766666, 0.0327, 0.0326, 0.0325, 0.0325, 0.0324, 0.032366667, 0.032333333, 0.032266665, 0.032133333, 0.032, 0.031533334, 0.030833334, 0.0305, 0.0304, 0.018566666}'::real[], + '{0.03590256}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"13","23","22","1","24","5","7","16","26","21","14","17","28","20","6","2","9","10","12","19","18","8","15","27","4","25","11","30","29","3","31"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_qoy +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 11::smallint, + False::boolean, + 0.0::real, + 4::integer, + 4.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.25106665, 0.25043333, 0.2494, 0.2491}'::real[], + '{0.25712454}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2","3","4","1"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_fy_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 12::smallint, + False::boolean, + 0.0::real, + 4::integer, + 200.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0060666665, 0.006, 0.0058333334, 0.0057666665, 0.0056666667}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"1957","2088","1929","1907","2027"}'::int4[], + E'{"1900","1902","1904","1905","1908","1910","1912","1914","1916","1918","1920","1922","1924","1926","1928","1931","1933","1935","1937","1939","1940","1942","1944","1946","1948","1950","1952","1954","1956","1959","1961","1963","1965","1967","1969","1970","1972","1974","1976","1978","1980","1982","1984","1986","1988","1990","1992","1994","1996","1998","2000","2002","2004","2006","2008","2010","2012","2014","2016","2017","2019","2021","2023","2025","2028","2030","2032","2034","2036","2038","2040","2042","2044","2046","2048","2050","2052","2054","2055","2058","2059","2061","2064","2066","2068","2070","2072","2073","2075","2077","2079","2081","2083","2085","2087","2090","2092","2094","2096","2098","2099"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_fy_quarter_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 13::smallint, + False::boolean, + 0.0::real, + 4::integer, + 801.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0018, 0.0018, 0.0017333333}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"141","754","588"}'::int4[], + E'{"1","9","17","25","32","40","48","56","65","73","81","89","97","105","113","121","128","136","145","153","161","169","177","184","192","200","208","216","225","232","240","248","255","263","271","279","287","295","303","311","319","327","335","343","352","359","367","375","383","390","399","407","415","423","431","439","448","456","463","471","480","487","495","503","511","518","526","534","543","551","559","567","575","583","593","600","608","616","624","632","640","648","657","665","674","682","689","697","705","713","721","729","737","745","753","762","769","777","786","793","801"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_fy_week_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 14::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.14316417::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1","108","215","313","412","516","620","724","841","945","1046","1158","1257","1365","1473","1574","1674","1777","1878","1981","2081","2180","2287","2390","2496","2596","2700","2806","2914","3011","3114","3219","3319","3416","3523","3628","3729","3838","3946","4048","4150","4258","4357","4470","4582","4682","4790","4887","4987","5091","5199","5308","5416","5521","5628","5733","5846","5947","6047","6153","6260","6359","6462","6568","6666","6766","6873","6980","7085","7202","7304","7409","7512","7619","7727","7821","7927","8032","8135","8245","8350","8457","8564","8681","8791","8891","8992","9093","9198","9302","9416","9516","9621","9726","9828","9928","10025","10127","10234","10333","10435"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_day_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 15::smallint, + False::boolean, + 0.0::real, + 8::integer, + 7.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.14473334, 0.14406666, 0.14326666, 0.14316666, 0.14263333, 0.14153333, 0.1406}'::real[], + '{0.14524722}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"Tuesday","Wednesday","Monday","Thursday","Sunday","Saturday","Friday"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: date_dim, Attribute: d_quarter_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 16::smallint, + False::boolean, + 0.0::real, + 7::integer, + 800.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.0017666667, 0.0016666667, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016333334}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"2088Q2","1957Q2","1907Q3","1937Q1","2049Q2","2051Q2","2055Q2","2096Q4"}'::varchar[], + E'{"1900Q1","1902Q1","1904Q1","1905Q4","1908Q1","1910Q1","1912Q1","1913Q4","1916Q1","1918Q1","1920Q1","1922Q1","1924Q1","1926Q1","1928Q1","1930Q1","1931Q4","1933Q4","1935Q4","1938Q1","1940Q1","1941Q4","1943Q4","1945Q4","1947Q4","1949Q3","1951Q3","1953Q3","1955Q4","1957Q4","1959Q4","1961Q4","1963Q4","1965Q3","1967Q3","1969Q3","1971Q3","1973Q3","1975Q3","1977Q3","1979Q2","1981Q2","1983Q2","1985Q2","1987Q3","1989Q3","1991Q3","1993Q2","1995Q2","1997Q1","1999Q2","2001Q2","2003Q2","2005Q2","2007Q2","2009Q2","2011Q3","2013Q2","2015Q2","2017Q2","2019Q2","2021Q1","2023Q1","2025Q1","2027Q1","2028Q4","2030Q4","2032Q4","2034Q4","2037Q1","2039Q1","2041Q1","2043Q1","2045Q1","2046Q4","2049Q1","2051Q1","2053Q3","2055Q4","2057Q4","2059Q4","2061Q4","2063Q4","2065Q4","2068Q1","2070Q1","2072Q1","2073Q4","2075Q4","2077Q4","2079Q4","2081Q4","2083Q4","2085Q4","2087Q4","2090Q1","2091Q4","2093Q4","2095Q4","2098Q1","2099Q4"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: date_dim, Attribute: d_holiday +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 17::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.9912, 0.0088}'::real[], + '{0.9816509}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_weekend +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 18::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.71786666, 0.28213334}'::real[], + '{0.59107685}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_following_holiday +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 19::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.9918333, 0.008166667}'::real[], + '{0.98435473}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_first_dom +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 20::smallint, + False::boolean, + 0.0::real, + 4::integer, + 2400.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00073333335, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"2444818","2468620","2421046","2423786","2425856","2428566","2431822","2433099","2437878","2443661","2450144","2453097"}'::int4[], + E'{"2415021","2415751","2416481","2417181","2417881","2418581","2419311","2420012","2420833","2421626","2422294","2423087","2423817","2424576","2425338","2426068","2426768","2427470","2428169","2428959","2429630","2430330","2431091","2431791","2432583","2433314","2434044","2434775","2435565","2436174","2436904","2437635","2438396","2439066","2439796","2440527","2441226","2441957","2442748","2443449","2444209","2445002","2445732","2446491","2447253","2447983","2448683","2449413","2450084","2450815","2451576","2452335","2453127","2453888","2454619","2455379","2456141","2456810","2457510","2458271","2458971","2459671","2460402","2461132","2461803","2462503","2463264","2463995","2464725","2465576","2466276","2466976","2467707","2468437","2469229","2469898","2470629","2471359","2472059","2472850","2473551","2474311","2475073","2475864","2476626","2477356","2478025","2478755","2479456","2480186","2480978","2481677","2482378","2483138","2483839","2484508","2485208","2485910","2486669","2487340","2488039"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_last_dom +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 21::smallint, + False::boolean, + 0.0::real, + 4::integer, + 2400.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00073333335, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666}'::real[], + NULL::real[], + '{0.99998605}'::real[], + NULL::real[], + NULL::real[], + E'{"2445029","2468892","2421227","2423785","2426098","2428596","2431821","2433279","2438089","2443811","2450203","2453187"}'::int4[], + E'{"2415020","2415930","2416661","2417332","2418061","2418734","2419522","2420195","2420984","2421834","2422505","2423236","2424027","2424756","2425489","2426279","2426889","2427619","2428350","2429139","2429810","2430481","2431271","2432002","2432732","2433463","2434194","2434983","2435715","2436385","2437055","2437786","2438576","2439244","2439977","2440705","2441437","2442166","2442899","2443627","2444360","2445151","2445881","2446671","2447404","2448132","2448864","2449534","2450265","2450995","2451786","2452518","2453308","2454039","2454770","2455559","2456293","2456961","2457691","2458422","2459152","2459882","2460553","2461284","2461953","2462683","2463414","2464203","2464935","2465727","2466457","2467128","2467858","2468648","2469380","2470050","2470780","2471511","2472240","2473031","2473702","2474492","2475224","2476016","2476807","2477477","2478206","2478935","2479607","2480337","2481130","2481857","2482529","2483318","2483990","2484660","2485389","2486059","2486790","2487519","2488372"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_same_day_ly +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 22::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.9988364::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2414662","2415406","2416155","2416846","2417538","2418265","2418990","2419723","2420543","2421270","2421972","2422760","2423452","2424211","2424965","2425669","2426369","2427091","2427796","2428521","2429221","2429916","2430665","2431382","2432122","2432823","2433554","2434295","2435051","2435731","2436451","2437186","2437889","2438567","2439312","2440049","2440756","2441519","2442278","2442986","2443701","2444456","2445155","2445940","2446724","2447426","2448183","2448865","2449565","2450287","2451043","2451810","2452563","2453298","2454047","2454787","2455577","2456285","2456984","2457722","2458470","2459166","2459890","2460630","2461312","2462016","2462761","2463515","2464248","2465067","2465781","2466519","2467240","2467988","2468743","2469399","2470144","2470877","2471595","2472367","2473100","2473855","2474598","2475417","2476187","2476889","2477598","2478301","2479040","2479767","2480562","2481265","2482001","2482736","2483451","2484148","2484826","2485540","2486290","2486986","2487701"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_same_day_lq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 23::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.99268985::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2414935","2415679","2416428","2417119","2417811","2418538","2419263","2419996","2420816","2421543","2422245","2423033","2423725","2424484","2425239","2425942","2426642","2427364","2428069","2428794","2429494","2430189","2430938","2431655","2432395","2433097","2433828","2434568","2435324","2436005","2436725","2437460","2438163","2438842","2439586","2440323","2441031","2441793","2442552","2443260","2443975","2444730","2445429","2446214","2446997","2447700","2448456","2449139","2449839","2450561","2451317","2452084","2452836","2453571","2454320","2455060","2455850","2456558","2457257","2457995","2458743","2459439","2460163","2460903","2461586","2462290","2463035","2463788","2464521","2465340","2466054","2466792","2467513","2468261","2469016","2469672","2470417","2471150","2471868","2472640","2473373","2474128","2474871","2475692","2476462","2477164","2477873","2478576","2479315","2480042","2480837","2481540","2482276","2483011","2483726","2484423","2485099","2485813","2486563","2487259","2487974"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_current_day +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=24; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 24::smallint, + False::boolean, + 0.0::real, + 2::integer, + 1.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{1.0}'::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_current_week +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=25; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 25::smallint, + False::boolean, + 0.0::real, + 2::integer, + 1.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{1.0}'::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_current_month +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=26; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 26::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.9996, 0.0004}'::real[], + '{0.9994385}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_current_quarter +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=27; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 27::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.99873334, 0.0012666667}'::real[], + '{0.9982279}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_current_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=28; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 28::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.99543333, 0.0045666667}'::real[], + '{0.99365747}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: store_sales, Attribute: ss_sold_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 1::smallint, + False::boolean, + 0.044::real, + 4::integer, + 1823.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0015333333, 0.0015, 0.0014666667, 0.0014666667, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011}'::real[], + NULL::real[], + '{-0.0022345192}'::real[], + NULL::real[], + NULL::real[], + E'{"2451534","2452228","2451129","2452240","2451139","2451161","2451546","2452258","2452621","2452589","2452600","2452625","2451137","2451148","2451181","2451896","2452251","2452260","2451178","2451528","2451904","2451909","2452242","2452250","2452628","2452642","2451121","2451134","2451174","2451496","2451864","2451872","2451879","2451910","2452257","2452271","2452592","2451112","2451149","2451525","2451865","2452232","2452277","2452598","2452640","2451127","2451136","2451153","2451177","2451505","2451541","2451851","2451862","2452230","2452238","2452266","2452607","2452609","2452627","2452641","2451142","2451158","2451160","2451491","2451868","2451885","2451887","2452248","2452601","2452606","2452634","2451123","2451125","2451133","2451138","2451144","2451506","2451509","2451529","2451884","2451898","2452219","2452221","2452225","2452246","2452256","2452274","2452597","2452602","2452614","2452623","2451126","2451141","2451154","2451493","2451494","2451497","2451513","2451516","2451526"}'::int4[], + E'{"2450816","2450843","2450874","2450900","2450926","2450953","2450982","2451010","2451033","2451045","2451057","2451070","2451082","2451095","2451107","2451119","2451143","2451157","2451169","2451184","2451213","2451241","2451267","2451294","2451322","2451349","2451372","2451398","2451410","2451423","2451435","2451448","2451460","2451472","2451485","2451499","2451511","2451522","2451536","2451545","2451572","2451600","2451626","2451650","2451679","2451703","2451734","2451760","2451772","2451783","2451795","2451806","2451818","2451830","2451843","2451855","2451867","2451877","2451890","2451901","2451916","2451945","2451974","2451999","2452025","2452053","2452081","2452109","2452129","2452140","2452151","2452163","2452173","2452185","2452195","2452207","2452218","2452233","2452245","2452262","2452275","2452301","2452329","2452358","2452385","2452413","2452437","2452464","2452492","2452504","2452516","2452528","2452540","2452553","2452566","2452578","2452587","2452604","2452617","2452630","2452639"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_sold_time_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 2::smallint, + False::boolean, + 0.04476667::real, + 4::integer, + 42441.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00023333334}'::real[], + NULL::real[], + '{-0.0029273503}'::real[], + NULL::real[], + NULL::real[], + E'{"53826"}'::int4[], + E'{"28802","29544","30512","31386","32305","32816","33250","33722","34146","34599","35052","35511","35964","36268","36566","36863","37172","37485","37828","38121","38401","38684","38983","39275","39560","40075","40557","41068","41530","42041","42524","43017","43474","43957","44423","44910","45389","45848","46343","46755","47169","47614","48001","48403","48805","49181","49610","50080","50477","50759","51068","51365","51655","51931","52218","52524","52799","53101","53418","53732","54105","54884","55780","56713","57597","58420","59372","60285","61221","61506","61795","62076","62374","62681","62967","63254","63580","63859","64159","64441","64733","65144","65590","66065","66523","66923","67434","67869","68271","68722","69211","69656","70119","70604","71096","71498","71944","72815","73678","74590","75597"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_item_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 3::smallint, + False::boolean, + 0.0::real, + 4::integer, + 25013.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0003, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334}'::real[], + NULL::real[], + '{0.000308136}'::real[], + NULL::real[], + NULL::real[], + E'{"18140","1183","1921","10183","13837","16333","22268","26593","27325","2035","3793","4081","4525","5833","8575","9103","9211","9703","10507","11761","12685","13513","14792","15871","15907","15998","17095","17455","19111","20875","21085","21457","22741","24703","24817","26851","26971","27337","27709","27919"}'::int4[], + E'{"1","260","575","888","1162","1441","1707","1975","2264","2523","2847","3115","3368","3650","3951","4214","4523","4827","5071","5329","5587","5894","6181","6496","6776","7024","7312","7591","7855","8113","8398","8682","8957","9245","9530","9823","10114","10405","10699","10959","11247","11525","11781","12061","12360","12613","12889","13190","13453","13731","14017","14294","14575","14877","15152","15457","15733","16015","16291","16579","16861","17155","17437","17702","17984","18247","18519","18783","19092","19380","19642","19943","20221","20467","20723","20995","21311","21596","21870","22136","22427","22700","22970","23261","23533","23805","24082","24344","24628","24932","25220","25519","25800","26063","26331","26591","26879","27151","27422","27705","27999"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 4::smallint, + False::boolean, + 0.043866668::real, + 4::integer, + 1787614.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.002228295}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"17","21786","42607","63355","81931","104851","124188","143682","164679","186368","206598","227797","248026","266122","287862","306345","328795","349339","369849","390012","413705","437205","457764","479231","501632","523614","545267","564653","584588","603322","628035","648054","668479","689551","709515","730333","751340","771680","793540","814237","835667","857070","877179","899789","920597","942338","962762","984964","1006607","1027347","1048659","1070611","1092247","1111106","1131352","1152543","1173197","1192658","1215327","1237528","1259725","1279865","1300200","1324729","1344982","1367029","1388243","1408781","1430858","1451533","1472783","1491853","1512116","1533678","1554248","1577279","1600025","1621228","1641577","1663202","1683219","1704339","1723327","1742744","1763526","1783848","1805196","1826090","1845634","1865356","1885579","1905861","1925869","1946542","1969323","1991449","2012218","2035047","2058343","2079610","2099931"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 5::smallint, + False::boolean, + 0.044433333::real, + 4::integer, + 1889709.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.00950842}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"30","17849","37904","56865","76186","96917","115542","134186","152099","172680","192783","211817","229921","248171","269276","287913","306855","326795","345207","365388","382970","404387","425118","443738","463882","483064","501977","520761","538035","556646","576673","595274","615470","633068","652437","671351","689763","709263","728426","748174","767474","786428","805372","823760","843936","863306","880648","898664","917543","936304","956226","976161","994176","1014253","1033333","1051646","1070542","1089363","1107670","1128460","1147427","1166875","1187090","1205515","1224744","1244031","1263305","1283771","1301649","1319446","1337051","1356966","1373991","1393391","1412686","1433469","1453024","1470147","1488228","1507316","1525606","1543945","1563428","1582932","1601688","1622584","1644497","1663783","1684160","1704534","1724056","1744635","1764898","1783571","1802036","1823303","1844256","1864851","1883445","1902230","1920718"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 6::smallint, + False::boolean, + 0.0444::real, + 4::integer, + 7203.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.0004}'::real[], + NULL::real[], + '{0.0009649638}'::real[], + NULL::real[], + NULL::real[], + E'{"3964","3629"}'::int4[], + E'{"1","77","150","224","302","367","433","498","566","636","710","784","865","941","1013","1088","1170","1244","1323","1388","1461","1536","1606","1672","1735","1809","1876","1952","2024","2098","2172","2244","2307","2379","2456","2534","2602","2673","2742","2818","2892","2971","3037","3111","3186","3257","3327","3396","3472","3543","3613","3687","3768","3845","3910","3981","4050","4116","4188","4251","4325","4393","4463","4541","4613","4685","4755","4830","4903","4980","5052","5126","5195","5262","5335","5402","5469","5534","5604","5673","5747","5823","5891","5960","6032","6112","6185","6259","6335","6407","6479","6552","6629","6696","6762","6836","6906","6982","7054","7128","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 7::smallint, + False::boolean, + 0.0441::real, + 4::integer, + 1054173.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.009495346}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"24","10492","20174","30656","40366","50491","61387","71217","82320","93176","103530","113999","124922","135328","145700","156238","168283","179107","189968","200308","210858","220931","230791","240825","252093","261999","273446","284421","294475","304990","315199","325963","336804","346964","358483","369478","379508","390126","400826","411839","423548","433723","444375","455042","465928","476227","487109","496816","507138","516971","528312","538979","549252","559578","569918","580340","590219","600402","612301","623316","633219","642905","653631","665000","674723","685655","695157","706546","716090","726191","735744","745583","756508","767077","776705","787088","798590","810484","820976","832448","843248","854009","864628","873989","883994","894860","905009","916085","924744","935185","945700","956390","965553","975624","987328","997741","1008137","1018620","1029054","1039248","1049982"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_store_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 8::smallint, + False::boolean, + 0.045766667::real, + 4::integer, + 35.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.029033333, 0.0287, 0.028266666, 0.0282, 0.028066667, 0.028, 0.027966667, 0.027833333, 0.027766667, 0.027666667, 0.027666667, 0.0276, 0.0276, 0.0275, 0.027466666, 0.027433334, 0.027433334, 0.027366666, 0.027366666, 0.0273, 0.027233334, 0.027133333, 0.027066667, 0.027033333, 0.0269, 0.0269, 0.026833333, 0.026733333, 0.0267, 0.026633333, 0.026333334, 0.026066666, 0.026066666, 0.025666667, 0.0247}'::real[], + '{0.025343372}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"19","34","2","61","62","7","32","13","52","4","38","55","56","28","49","1","37","16","67","50","31","64","22","68","20","58","26","46","14","10","25","8","43","40","44"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_promo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 9::smallint, + False::boolean, + 0.04413333::real, + 4::integer, + 357.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0036666666, 0.0036666666, 0.0036333334, 0.0036333334, 0.0035333333, 0.0035, 0.0033666666, 0.0033666666}'::real[], + NULL::real[], + '{0.009066247}'::real[], + NULL::real[], + NULL::real[], + E'{"37","139","81","228","350","223","293","304"}'::int4[], + E'{"1","4","7","11","14","18","21","25","28","32","35","40","43","47","50","54","57","61","64","68","71","75","78","83","86","89","93","96","100","103","107","110","114","118","121","124","128","132","136","140","143","147","150","153","157","160","163","166","170","174","177","180","183","187","190","194","197","201","204","208","211","214","218","221","226","230","234","237","241","245","249","252","256","259","262","266","270","274","277","280","284","288","291","296","300","303","308","311","315","319","322","326","329","332","336","339","343","346","351","354","357"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_ticket_number +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 10::smallint, + False::boolean, + 0.0::real, + 8::integer, + 135837840.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 412::oid, + 412::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.06078869}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"813","1375913","2727072","3857212","5016369","6156850","7386542","8690070","9789582","11044399","12265523","13510184","14717978","15785339","16975428","18197314","19442297","20772509","21903183","23100195","24331207","25452464","26678265","27922018","29143270","30353305","31671176","32953618","34109365","35253703","36385377","37447554","38717221","39999948","41154706","42417922","43652601","44968753","46342094","47459202","48642561","49683656","50998261","52288399","53487733","54680281","55833024","57017267","58237604","59472084","60696465","61996614","63179509","64401202","65651723","66926244","68011538","69269328","70341852","71528693","72651930","73713093","74849544","75928064","77033905","78162650","79324991","80585670","81761102","82828934","84032244","85334532","86494728","87598137","88860063","89922519","91069374","92276218","93495454","94722691","95959052","97146341","98399034","99566170","100766327","101898400","103223735","104414548","105602699","106825065","108029779","109174799","110420663","111591894","112817588","113975952","115181211","116399324","117672963","118888721","119999864"}'::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[]); +-- +-- Table: store_sales, Attribute: ss_quantity +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 11::smallint, + False::boolean, + 0.045466665::real, + 4::integer, + 100.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.010833333, 0.010766666, 0.010766666, 0.010766666, 0.010633334, 0.0106, 0.010566667, 0.0104, 0.0104, 0.0104, 0.0104, 0.010366667, 0.010366667, 0.010366667, 0.0103, 0.010266666, 0.0101666665, 0.0101333335, 0.0101333335, 0.0101, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.01, 0.01, 0.009966667, 0.009966667, 0.009933333, 0.0099, 0.009866667, 0.009833333, 0.0098, 0.009766666, 0.009766666, 0.009766666, 0.009766666, 0.009733333, 0.009733333, 0.009733333, 0.009733333, 0.0097, 0.0097, 0.009666666, 0.009666666, 0.009666666, 0.009633333, 0.0096, 0.0096, 0.0096, 0.0096, 0.009566667, 0.009533334, 0.009533334, 0.0095, 0.0095, 0.009466667, 0.009433334, 0.0094, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009333333, 0.009266667, 0.0092, 0.0092, 0.0092, 0.009133333, 0.009133333, 0.009133333, 0.009133333, 0.0091, 0.0091, 0.0091, 0.0091, 0.0090666665, 0.0090666665, 0.0090333335, 0.009, 0.008966667, 0.008933334, 0.0089, 0.0089, 0.008833333, 0.008666666, 0.008633333, 0.0086, 0.008566666, 0.0084, 0.0084, 0.008366667, 0.008366667, 0.008233333, 0.008233333, 0.0081, 0.0079333335}'::real[], + '{0.0045824465}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"29","7","10","21","27","92","86","5","55","71","81","33","79","93","6","99","40","39","57","32","53","73","84","97","85","90","38","91","12","69","76","41","23","22","37","45","63","44","61","88","100","20","98","26","49","67","14","18","78","87","95","3","31","46","15","36","58","42","64","11","13","50","59","60","68","70","19","54","25","35","66","24","52","56","83","4","16","47","74","80","96","34","51","75","82","30","77","65","28","1","48","9","2","72","43","94","17","89","62","8"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 12::smallint, + False::boolean, + 0.0435::real, + 6::integer, + 9909.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.004772207}'::real[], + NULL::real[], + NULL::real[], + E'{"32.94","43.22","71.68","76.26","91.35","96.72"}'::numeric[], + E'{"1.00","1.97","3.01","4.10","5.06","6.04","7.00","8.01","9.01","9.96","10.88","11.91","12.82","13.84","14.95","15.91","16.85","17.91","18.92","19.94","20.89","22.01","23.08","24.06","25.02","26.03","26.96","27.89","28.91","29.93","30.90","31.93","32.96","33.91","34.98","35.96","36.94","37.90","38.81","39.70","40.61","41.67","42.74","43.73","44.66","45.63","46.59","47.53","48.55","49.54","50.48","51.56","52.62","53.42","54.39","55.28","56.33","57.36","58.37","59.23","60.15","61.15","62.19","63.21","64.16","65.22","66.31","67.27","68.29","69.31","70.23","71.24","72.24","73.25","74.22","75.12","76.09","77.07","78.06","79.07","80.05","81.10","82.08","83.09","84.06","85.12","86.17","87.18","88.23","89.18","90.13","91.20","92.19","93.19","94.14","95.07","95.98","96.91","97.92","98.92","100.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 13::smallint, + False::boolean, + 0.0447::real, + 6::integer, + 16808.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.0003, 0.0003, 0.0003, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667}'::real[], + NULL::real[], + '{-0.00067186705}'::real[], + NULL::real[], + NULL::real[], + E'{"27.24","7.02","96.36","105.63","17.20","33.52","39.04","40.68","48.96","59.81","68.69","76.24","87.92","99.16"}'::numeric[], + E'{"1.00","2.89","4.28","5.87","7.42","8.80","10.10","11.63","12.99","14.42","15.98","17.40","18.87","20.21","21.63","23.04","24.51","25.90","27.36","28.81","30.36","31.81","33.34","34.72","36.09","37.52","38.95","40.43","41.88","43.30","44.81","46.40","47.73","49.18","50.55","52.07","53.40","54.73","56.17","57.55","58.87","60.19","61.77","63.07","64.57","66.02","67.39","68.92","70.40","72.03","73.45","74.87","76.26","77.73","79.03","80.35","81.92","83.32","84.72","86.21","87.59","88.96","90.45","91.78","93.16","94.66","96.19","97.64","98.92","100.52","101.88","103.28","104.72","106.11","107.69","109.21","110.85","112.64","114.53","116.30","118.00","119.87","121.88","123.90","126.04","128.34","130.66","133.07","135.58","137.97","140.53","143.39","146.70","149.95","153.65","157.50","161.61","166.70","172.67","180.23","199.18"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 14::smallint, + False::boolean, + 0.043866668::real, + 6::integer, + 11406.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.008633333, 0.00063333334, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667}'::real[], + NULL::real[], + '{0.00037045707}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","5.56","1.37","1.33","1.74","3.53","1.67","3.48","0.51","5.54","6.41","0.82","1.50","1.72","1.83","1.99","2.02","2.25","3.32","3.84","5.66","12.86","0.97","0.98","1.28","1.62","1.65","1.90","2.00","3.08","4.40","5.92","8.40","8.74","11.16","15.51","0.44","0.57","0.65","0.68","0.75","0.94","1.17","1.20","1.22","1.29","1.32","1.35","1.36","2.08","2.14","2.50","2.78","2.82","2.83","3.09","3.64","3.73","3.82","4.51","4.55","5.22","5.43","6.63","6.69","6.90","7.61","7.63","8.09","9.03","9.09","9.44","9.63","11.42","15.16","0.11","0.21","0.60","0.63","0.66","0.93","1.06","1.10","1.16","1.18","1.25","1.42","1.47","1.76","2.09","2.16","2.18","2.60","2.68","2.74","3.11","3.18","3.26","3.27","3.31"}'::numeric[], + E'{"0.01","0.50","1.00","1.49","2.01","2.44","2.89","3.38","3.80","4.27","4.73","5.13","5.65","6.12","6.56","7.05","7.48","8.02","8.51","9.01","9.57","10.13","10.69","11.20","11.77","12.34","12.88","13.44","14.06","14.61","15.26","15.88","16.54","17.11","17.71","18.35","19.04","19.73","20.46","21.14","21.86","22.67","23.36","24.08","24.87","25.77","26.56","27.30","28.12","28.99","29.85","30.74","31.71","32.63","33.58","34.48","35.42","36.45","37.56","38.53","39.65","40.76","41.86","43.05","44.18","45.37","46.57","47.77","49.08","50.38","51.70","53.17","54.47","55.96","57.34","58.84","60.52","62.13","63.82","65.63","67.20","69.11","71.20","73.12","75.38","77.56","79.86","82.27","85.02","87.88","90.64","93.54","97.22","101.21","105.84","110.61","116.50","123.46","132.30","145.64","193.12"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_discount_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 15::smallint, + False::boolean, + 0.045333333::real, + 3::integer, + 6760.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.7661}'::real[], + NULL::real[], + '{0.6438912}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","1.34","3.72","6.09","8.37","10.99","14.04","16.95","19.44","22.34","24.81","28.43","32.34","35.35","39.39","44.25","49.00","54.54","59.98","65.63","71.63","78.32","84.28","90.37","96.62","104.19","111.32","118.10","126.42","136.18","143.96","153.17","162.16","171.42","182.95","192.33","201.85","211.36","222.74","236.09","252.09","266.81","278.33","292.76","310.46","324.68","340.74","359.05","380.26","398.53","416.30","434.21","455.13","474.14","491.53","516.67","538.59","556.85","586.81","610.95","636.53","667.62","692.38","723.55","756.71","796.95","834.72","868.00","906.95","948.96","993.70","1033.87","1089.17","1132.81","1184.95","1228.29","1281.16","1347.98","1408.84","1480.92","1572.04","1643.21","1731.83","1830.90","1925.89","2022.22","2130.03","2281.99","2428.33","2573.26","2717.71","2913.34","3146.60","3438.96","3740.97","4126.94","4666.03","5274.03","6096.32","7082.14","12922.81"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 16::smallint, + False::boolean, + 0.045333333::real, + 6::integer, + 119811.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0087, 0.00026666667, 0.00023333334, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.00332316}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","25.20","10.92","36.96","469.20"}'::numeric[], + E'{"0.27","8.61","16.80","24.36","33.50","42.56","50.49","61.05","71.40","82.38","93.84","106.14","118.17","131.32","144.00","157.78","172.64","188.16","203.84","220.80","236.84","255.08","271.45","288.48","308.34","327.28","345.73","367.84","387.02","408.00","432.63","453.75","480.22","504.24","530.66","558.80","588.24","616.30","644.76","674.50","704.16","734.58","766.92","802.75","838.24","871.04","910.52","945.76","983.29","1024.86","1063.30","1102.08","1147.38","1190.70","1237.47","1284.12","1331.00","1387.50","1440.24","1503.28","1554.80","1610.95","1676.49","1742.20","1808.00","1867.45","1933.08","2001.48","2087.67","2170.21","2251.53","2342.40","2428.20","2526.36","2617.12","2724.48","2827.24","2944.32","3046.35","3173.12","3294.25","3442.56","3588.09","3734.64","3902.60","4072.80","4240.57","4428.00","4642.32","4906.57","5147.50","5431.50","5743.00","6100.32","6469.35","6901.32","7510.60","8168.50","9050.41","10628.04","17738.88"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 17::smallint, + False::boolean, + 0.044966668::real, + 6::integer, + 207111.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0051949597}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.08","33.20","56.42","79.36","97.98","121.59","144.80","167.70","191.00","218.46","244.03","270.55","299.76","327.80","355.32","384.30","414.52","442.20","475.83","508.95","544.25","578.25","612.36","650.43","688.35","727.92","765.38","803.60","837.20","874.56","916.09","960.94","1003.45","1044.66","1092.25","1140.48","1185.60","1238.61","1289.29","1337.70","1390.55","1444.40","1496.49","1548.16","1605.87","1662.12","1713.60","1764.63","1817.76","1875.30","1937.05","1999.50","2060.11","2128.60","2196.21","2259.76","2326.32","2396.25","2465.40","2539.24","2614.56","2685.00","2761.38","2840.04","2925.35","3015.87","3097.05","3179.52","3263.77","3343.96","3431.34","3528.32","3624.37","3716.85","3814.10","3920.27","4022.88","4127.23","4243.63","4356.48","4476.15","4597.05","4738.23","4865.40","5000.80","5143.91","5291.12","5444.00","5603.10","5773.32","5947.83","6145.55","6364.80","6594.77","6830.75","7087.20","7404.30","7745.95","8124.04","8664.15","9992.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 18::smallint, + False::boolean, + 0.044166666::real, + 7::integer, + 281020.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.005409235}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.37","48.18","81.41","111.00","143.56","176.12","208.48","244.00","277.10","312.00","354.24","397.50","432.81","473.83","514.15","559.74","605.17","653.04","703.08","749.70","793.80","843.72","897.00","950.04","1005.84","1059.20","1111.86","1168.53","1220.78","1273.14","1335.78","1395.80","1464.48","1525.11","1588.62","1662.60","1733.62","1808.00","1876.80","1943.17","2017.47","2095.83","2176.23","2255.84","2332.80","2416.80","2500.54","2583.36","2660.40","2751.20","2841.54","2936.19","3028.06","3126.61","3219.72","3316.14","3407.04","3508.20","3613.50","3714.04","3820.32","3927.70","4045.88","4164.11","4286.55","4404.60","4526.64","4639.62","4772.80","4907.30","5047.20","5174.40","5313.60","5456.64","5608.32","5770.80","5925.96","6098.88","6277.32","6458.50","6637.23","6822.90","7017.40","7216.44","7423.52","7672.96","7894.12","8146.60","8427.82","8709.95","8969.40","9303.91","9642.60","10018.92","10424.34","10892.97","11484.75","12242.88","13182.40","14456.88","19415.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 19::smallint, + False::boolean, + 0.0449::real, + 6::integer, + 18471.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.10456666, 0.0009, 0.00073333335, 0.00073333335, 0.0007, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00063333334, 0.00063333334, 0.00063333334, 0.00063333334, 0.00063333334, 0.0006, 0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.014879999}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","0.01","0.17","0.65","0.13","0.29","0.05","0.08","0.36","0.10","0.27","0.28","0.40","0.45","0.19","0.30","2.24","0.15","0.18","0.21","0.41","3.94","0.14","0.46","0.47","0.52","0.88","1.04","1.51","1.66","0.02","0.12","0.16","0.20","0.25","0.34","0.77","0.96","0.98","1.29","1.92","3.80","0.11","0.32","0.42","0.43","0.51","0.68","0.99","1.05","1.22","1.31","1.36","1.54","1.80","1.90","2.04","2.10","3.32","0.09","0.22","0.44","0.50","0.58","0.66","0.94","1.13","1.15","1.68","2.74","3.78","4.08","8.96","0.04","0.07","0.23","0.33","0.37","0.59","0.69","0.78","0.81","0.82","0.85","0.91","1.08","1.12","1.18","1.26","1.32","1.35","1.50","1.59","1.64","1.76","1.79","2.26","2.83","3.35","3.43"}'::numeric[], + E'{"0.03","0.74","1.20","1.60","2.01","2.39","2.72","3.10","3.50","3.90","4.30","4.72","5.16","5.57","6.04","6.50","7.03","7.58","8.18","8.74","9.36","9.98","10.62","11.27","12.01","12.69","13.39","14.17","14.94","15.73","16.52","17.47","18.36","19.22","20.18","21.05","22.15","23.17","24.17","25.34","26.50","27.68","28.91","30.07","31.25","32.68","34.20","35.59","37.26","38.92","40.45","42.33","44.13","45.79","47.82","49.94","51.93","54.20","56.44","58.78","61.05","63.96","66.70","69.47","72.63","75.56","78.68","82.11","85.62","89.37","92.68","96.79","100.78","105.67","110.09","114.97","120.82","125.97","132.10","138.64","145.86","152.49","159.87","168.58","177.12","186.59","196.23","208.25","220.55","235.45","251.96","267.62","288.25","309.58","335.43","364.88","405.05","457.89","534.84","648.41","1390.48"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_coupon_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 20::smallint, + False::boolean, + 0.045333333::real, + 3::integer, + 6760.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.7661}'::real[], + NULL::real[], + '{0.6438912}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","1.34","3.72","6.09","8.37","10.99","14.04","16.95","19.44","22.34","24.81","28.43","32.34","35.35","39.39","44.25","49.00","54.54","59.98","65.63","71.63","78.32","84.28","90.37","96.62","104.19","111.32","118.10","126.42","136.18","143.96","153.17","162.16","171.42","182.95","192.33","201.85","211.36","222.74","236.09","252.09","266.81","278.33","292.76","310.46","324.68","340.74","359.05","380.26","398.53","416.30","434.21","455.13","474.14","491.53","516.67","538.59","556.85","586.81","610.95","636.53","667.62","692.38","723.55","756.71","796.95","834.72","868.00","906.95","948.96","993.70","1033.87","1089.17","1132.81","1184.95","1228.29","1281.16","1347.98","1408.84","1480.92","1572.04","1643.21","1731.83","1830.90","1925.89","2022.22","2130.03","2281.99","2428.33","2573.26","2717.71","2913.34","3146.60","3438.96","3740.97","4126.94","4666.03","5274.03","6096.32","7082.14","12922.81"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_net_paid +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 21::smallint, + False::boolean, + 0.045033332::real, + 6::integer, + 130231.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.010733333}'::real[], + NULL::real[], + '{-0.003218649}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","5.14","10.18","16.30","21.88","28.60","36.24","44.10","51.49","60.06","68.70","77.69","87.72","97.58","108.51","119.68","131.13","142.74","154.70","167.30","180.87","194.66","210.49","225.68","242.00","258.44","273.14","288.96","307.68","325.44","342.37","363.00","380.16","400.43","423.00","444.15","468.72","492.00","519.68","544.00","572.40","600.96","629.30","656.70","686.28","718.06","749.00","782.88","817.80","854.72","893.10","930.83","967.59","1008.80","1050.42","1093.00","1135.33","1181.62","1229.40","1280.52","1326.28","1383.48","1439.88","1500.29","1556.02","1618.37","1682.20","1751.04","1818.15","1884.06","1955.88","2033.45","2126.88","2215.62","2305.35","2400.96","2495.65","2607.80","2725.97","2838.84","2961.00","3081.25","3215.94","3363.36","3525.20","3685.50","3870.99","4065.12","4264.36","4472.25","4715.82","5020.00","5297.49","5657.44","6056.08","6494.87","7012.56","7766.28","8648.46","10058.40","17738.88"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_net_paid_inc_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 22::smallint, + False::boolean, + 0.04476667::real, + 6::integer, + 216373.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.010666667, 0.0002}'::real[], + NULL::real[], + '{-0.0055286656}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","32.50"}'::numeric[], + E'{"0.04","5.34","10.64","16.84","22.78","29.76","37.54","45.88","53.55","63.01","71.53","81.22","91.04","101.48","113.40","124.84","136.79","148.47","160.74","174.09","189.27","202.53","219.10","235.75","252.63","270.30","284.97","302.27","321.39","339.01","359.73","379.11","399.51","420.01","443.22","467.14","491.68","517.50","543.21","569.64","598.99","628.01","657.79","689.15","718.44","753.62","785.05","818.47","856.64","895.72","934.06","972.23","1014.07","1056.37","1098.32","1143.65","1191.49","1240.73","1292.04","1341.11","1393.32","1450.62","1510.08","1566.98","1629.98","1689.68","1763.67","1840.23","1903.93","1975.54","2049.22","2126.92","2226.03","2316.79","2410.56","2506.52","2616.49","2727.26","2849.57","2970.38","3085.20","3217.68","3363.97","3517.49","3689.45","3858.39","4052.56","4254.30","4465.59","4690.92","4962.17","5234.70","5542.48","5925.61","6319.65","6827.42","7372.02","8128.19","9079.02","10544.85","18803.21"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_net_profit +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 23::smallint, + False::boolean, + 0.043933332::real, + 6::integer, + 164410.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00036666667, 0.0002}'::real[], + NULL::real[], + '{0.0071685645}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","-86.40"}'::numeric[], + E'{"-9756.88","-6515.41","-5668.87","-5123.34","-4724.97","-4368.00","-4064.06","-3808.62","-3576.47","-3373.46","-3174.31","-3012.09","-2859.44","-2725.70","-2593.63","-2458.24","-2337.30","-2214.00","-2107.00","-2001.96","-1904.70","-1816.40","-1727.86","-1642.55","-1561.33","-1494.48","-1420.30","-1356.48","-1294.21","-1224.96","-1162.20","-1101.58","-1048.46","-992.62","-942.72","-898.95","-853.76","-806.47","-765.12","-727.68","-693.00","-655.50","-623.42","-589.44","-557.05","-526.40","-495.72","-462.77","-435.73","-406.64","-378.40","-353.30","-328.97","-301.50","-278.13","-255.75","-233.87","-214.09","-195.96","-178.34","-162.31","-147.92","-132.24","-117.78","-104.00","-89.56","-76.54","-65.12","-54.20","-43.00","-32.46","-23.28","-14.28","-7.00","0.39","9.24","20.91","35.88","53.56","74.70","99.36","127.98","158.51","193.25","233.24","281.96","341.00","404.32","478.86","563.93","661.20","773.80","891.78","1050.06","1209.00","1410.30","1700.48","2034.00","2537.48","3429.36","8262.72"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_sold_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 1::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 1823.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0016, 0.0016, 0.0015333333, 0.0015, 0.0015, 0.0015, 0.0014666667, 0.0014666667, 0.0014333334, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666}'::real[], + NULL::real[], + '{-0.0030525422}'::real[], + NULL::real[], + NULL::real[], + E'{"2451524","2452255","2452593","2451546","2452243","2452632","2451179","2451491","2451545","2451176","2451487","2451860","2451866","2452271","2452626","2451154","2451534","2451536","2452228","2452236","2452592","2452603","2451135","2451495","2451871","2451887","2451901","2451910","2452267","2452605","2451053","2451121","2451177","2451537","2451539","2452220","2452229","2452241","2452261","2452617","2452621","2452630","2451122","2451142","2451143","2451144","2451169","2451174","2451490","2452225","2452234","2452245","2452582","2451150","2451156","2451410","2451505","2451510","2451527","2451543","2451867","2451873","2451881","2452219","2452227","2452248","2452262","2452265","2452272","2452624","2451124","2451129","2451145","2451159","2451161","2451165","2451512","2451532","2451544","2451858","2452247","2452249","2452252","2452266","2452277","2452585","2452589","2452591","2452610","2452612","2451094","2451134","2451139","2451155","2451157","2451166","2451171","2451181","2451521","2451522"}'::int4[], + E'{"2450816","2450841","2450870","2450898","2450927","2450953","2450978","2451005","2451030","2451041","2451052","2451067","2451078","2451090","2451104","2451115","2451127","2451140","2451158","2451173","2451198","2451225","2451253","2451279","2451305","2451336","2451363","2451388","2451405","2451418","2451431","2451444","2451456","2451468","2451480","2451494","2451504","2451516","2451529","2451542","2451574","2451599","2451625","2451654","2451681","2451709","2451736","2451761","2451773","2451785","2451798","2451811","2451824","2451835","2451849","2451857","2451872","2451883","2451893","2451902","2451912","2451938","2451969","2451995","2452023","2452052","2452082","2452108","2452130","2452142","2452153","2452165","2452176","2452188","2452200","2452213","2452226","2452240","2452256","2452270","2452289","2452315","2452345","2452373","2452401","2452429","2452455","2452480","2452497","2452509","2452522","2452534","2452547","2452559","2452571","2452584","2452597","2452607","2452619","2452633","2452642"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_sold_time_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 2::smallint, + False::boolean, + 0.0004::real, + 4::integer, + 72739.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0002}'::real[], + NULL::real[], + '{-0.004440563}'::real[], + NULL::real[], + NULL::real[], + E'{"61224"}'::int4[], + E'{"0","3453","5358","7271","8890","10655","12362","14210","15455","16483","17601","18731","20003","21248","22548","23694","24821","25793","26731","27644","28537","29469","30431","31334","32383","33161","33815","34512","35196","35909","36662","37414","38129","38856","39594","40332","41139","41826","42634","43309","43883","44435","44958","45430","45979","46461","47039","47768","48454","49168","49903","50684","51931","53162","54270","55196","56147","57080","57913","58603","59313","60034","60759","61432","62068","62610","63196","63765","64286","64834","65399","65944","66456","66942","67447","67990","68472","68929","69389","69801","70217","70674","71131","71595","72062","72552","73092","73643","74121","74642","75146","75708","76439","77167","77837","78531","79155","80293","81570","82687","86389"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 3::smallint, + False::boolean, + 0.00033333333::real, + 4::integer, + 1933.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0015333333, 0.0014666667, 0.0013333333, 0.0013, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667}'::real[], + NULL::real[], + '{-0.0028389376}'::real[], + NULL::real[], + NULL::real[], + E'{"2451902","2451188","2451164","2451549","2452285","2451156","2451195","2451918","2451956","2452264","2452636","2452641","2451197","2451870","2452241","2451538","2451539","2452279","2452292","2452608","2452626","2452633","2451146","2451167","2451178","2451537","2451547","2451905","2451923","2452250","2452263","2451133","2451201","2451557","2451563","2451607","2451612","2451975","2451986","2452226","2452273","2452281","2452358","2452657","2451171","2451181","2451489","2451518","2451550","2451569","2451935","2451964","2451965","2451966","2451974","2452219","2452251","2452259","2452260","2452261","2452271","2452280","2452300","2452301","2452302","2452317","2452604","2452652","2452665","2451147","2451161","2451177","2451183","2451187","2451189","2451196","2451229","2451545","2451565","2451573","2451575","2451601","2451904","2451951","2451952","2452265","2452288","2452342","2452629","2452635","2452637","2452639","2452696","2451173","2451174","2451184","2451192","2451202","2451212","2451242"}'::int4[], + E'{"2450823","2450897","2450934","2450961","2450989","2451015","2451043","2451061","2451080","2451098","2451114","2451127","2451140","2451154","2451169","2451191","2451209","2451222","2451235","2451248","2451263","2451281","2451306","2451332","2451361","2451390","2451416","2451438","2451454","2451470","2451485","2451500","2451513","2451526","2451540","2451555","2451568","2451582","2451595","2451611","2451627","2451646","2451668","2451693","2451722","2451751","2451778","2451800","2451819","2451836","2451850","2451863","2451876","2451888","2451900","2451914","2451927","2451940","2451953","2451971","2451990","2452009","2452037","2452064","2452091","2452121","2452146","2452167","2452186","2452203","2452218","2452232","2452246","2452262","2452278","2452295","2452310","2452322","2452335","2452350","2452367","2452385","2452412","2452441","2452470","2452495","2452518","2452538","2452555","2452572","2452587","2452600","2452614","2452625","2452644","2452658","2452670","2452682","2452699","2452719","2452762"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_item_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 4::smallint, + False::boolean, + 0.0::real, + 4::integer, + 25062.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334}'::real[], + NULL::real[], + '{0.0007646001}'::real[], + NULL::real[], + NULL::real[], + E'{"1309","3001","4099","5413","8575","10591","14557","17821","19507","20473","22969","24061","25279","25891","27685"}'::int4[], + E'{"3","292","595","880","1169","1423","1683","1956","2282","2539","2800","3062","3343","3608","3865","4153","4415","4682","4951","5245","5505","5762","6071","6367","6655","6949","7232","7535","7831","8117","8386","8665","8928","9193","9470","9724","10001","10264","10546","10828","11122","11402","11708","11998","12271","12547","12823","13105","13399","13675","13977","14251","14527","14821","15112","15404","15715","16020","16304","16561","16846","17098","17353","17617","17892","18163","18434","18732","19039","19317","19609","19870","20149","20450","20749","21043","21305","21579","21881","22171","22460","22750","23029","23276","23536","23794","24084","24373","24664","24932","25236","25519","25793","26068","26349","26599","26899","27169","27447","27703","28000"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_bill_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 5::smallint, + False::boolean, + 0.0005::real, + 4::integer, + 2118340.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0010770214}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"116","19276","39962","61407","85373","106315","126227","147006","167677","187188","207807","226047","246827","269215","286863","307913","329088","349611","369725","390185","410503","432212","454393","475658","496403","519145","539722","559383","580534","601568","623450","645203","665659","686268","708568","730472","751325","772013","790899","811688","835234","859298","877602","896824","916526","937382","958518","980789","1000789","1022926","1044299","1064876","1087128","1107756","1128946","1150087","1170021","1189394","1210544","1229439","1250913","1270764","1292927","1312446","1334616","1355684","1377519","1397078","1417253","1439187","1460077","1482246","1504744","1525557","1548534","1571550","1593101","1612385","1632941","1652821","1671352","1691730","1714302","1736611","1757116","1778569","1799839","1820986","1843004","1862949","1886606","1909295","1929403","1952006","1972435","1993425","2015871","2037659","2058030","2078476","2099961"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_bill_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 6::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 1963935.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.008824349}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"40","19928","41222","60907","80036","96922","115963","135857","155159","175803","193832","214446","233794","253659","271138","289757","310150","329469","349317","369098","389298","407426","427564","448714","467530","487468","506816","526861","546227","565019","583873","602430","621270","641783","661497","681303","700310","718758","737636","756383","774238","793788","810674","829641","848804","867427","886648","906085","926348","946633","965764","984667","1004930","1025614","1045598","1064240","1084145","1103410","1122730","1141053","1162951","1181651","1200809","1219112","1239681","1256860","1276450","1295516","1315122","1334158","1352740","1370260","1387732","1406685","1424904","1445396","1462767","1481762","1502206","1522443","1540631","1559362","1578315","1599220","1619332","1635595","1652747","1672436","1691569","1710869","1731393","1750861","1769679","1790304","1809446","1827792","1845980","1861792","1881771","1900390","1920682"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_bill_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 7::smallint, + False::boolean, + 0.0004::real, + 4::integer, + 7218.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.0033058901}'::real[], + NULL::real[], + NULL::real[], + E'{"3781","4004","5987","61","843","1723","3981","4638","5516","6255"}'::int4[], + E'{"1","74","151","220","297","366","438","505","572","641","716","798","874","948","1023","1092","1157","1226","1295","1359","1442","1517","1582","1651","1718","1792","1861","1935","2012","2083","2154","2230","2301","2372","2434","2504","2576","2652","2724","2792","2863","2944","3013","3076","3151","3224","3294","3362","3441","3513","3581","3647","3726","3800","3878","3953","4022","4092","4172","4242","4311","4397","4466","4540","4612","4679","4750","4824","4901","4972","5042","5119","5194","5265","5338","5410","5486","5560","5636","5707","5777","5842","5916","5982","6054","6128","6200","6267","6337","6411","6487","6563","6634","6700","6776","6846","6915","6987","7054","7128","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_bill_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 8::smallint, + False::boolean, + 0.00043333333::real, + 4::integer, + 1052357.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0035874592}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"85","9940","19201","29062","39466","49793","60322","70621","81217","91226","101312","111021","121563","131884","142160","151553","162420","173225","183462","193550","204825","215954","226612","236859","247641","257974","268112","278524","289530","301367","312534","323713","334146","344753","354965","366093","376805","387572","399555","409543","419685","430267","441452","451787","461680","472204","482625","492470","503572","513596","523426","533872","543655","554311","565216","576083","586017","596802","607700","617077","626774","637067","646810","658305","668298","678578","689888","699650","709454","719802","731419","742750","753186","764659","775390","785925","795925","806880","817378","827664","838917","850289","860509","871551","882170","892610","902269","911835","922478","933542","944712","955041","966086","976281","986032","996335","1007079","1017272","1027779","1039161","1049977"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 9::smallint, + False::boolean, + 0.00046666668::real, + 4::integer, + 2017265.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0043712403}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"132","20637","42180","65350","82849","103817","124318","145423","166944","187687","208737","230590","251949","273686","293387","311515","330800","353486","374240","393971","413452","433019","454488","476432","498011","518833","539886","561032","582486","602670","621844","644001","664886","685045","704748","725254","746493","768247","789025","809330","830506","851780","873145","893841","916134","939717","961138","980901","1000505","1021471","1041002","1061792","1082164","1105084","1127234","1147741","1168328","1188890","1211298","1233312","1255587","1277390","1297125","1318745","1339393","1359133","1378504","1398143","1419107","1441128","1464282","1484205","1506371","1531184","1554208","1572948","1594637","1616564","1637230","1658766","1679115","1701388","1723406","1741784","1760843","1783047","1803735","1827219","1849463","1870419","1891620","1911234","1930891","1951173","1973089","1994829","2016556","2037533","2057883","2079450","2099912"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 10::smallint, + False::boolean, + 0.0004::real, + 4::integer, + 1696478.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.002879893}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"58","18440","37296","56770","75852","94757","113452","130704","151005","170386","188845","208340","228843","248582","267435","285987","306015","323298","341709","360888","379541","400412","418373","438856","457414","475601","496722","517639","535895","554469","574493","594102","613853","632766","651384","668989","687375","706348","726205","744691","763517","783257","803277","822267","842706","862226","882815","901593","921645","941476","960097","979312","997703","1019580","1040057","1057255","1076091","1095006","1112147","1132100","1151343","1170491","1188950","1206650","1225084","1243585","1261069","1279776","1298943","1318050","1338726","1357162","1375169","1394096","1413110","1433576","1450829","1470097","1488671","1509355","1530203","1549360","1567854","1587699","1610090","1629275","1648075","1668590","1688396","1707068","1725533","1743917","1762980","1780125","1799583","1819263","1838350","1859271","1880426","1901289","1920663"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 11::smallint, + False::boolean, + 0.00033333333::real, + 4::integer, + 7200.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.007957798}'::real[], + NULL::real[], + NULL::real[], + E'{"1687","262","626","3196","3456","3820","5684","5796","5891","5987","6436","6562"}'::int4[], + E'{"1","76","145","212","285","352","423","496","571","640","719","798","867","940","1016","1091","1163","1231","1304","1381","1455","1523","1597","1669","1746","1814","1887","1962","2035","2099","2168","2246","2310","2377","2455","2530","2597","2668","2741","2817","2892","2966","3033","3103","3170","3247","3325","3396","3465","3541","3609","3678","3755","3821","3889","3959","4025","4088","4162","4242","4318","4386","4454","4527","4593","4658","4728","4800","4870","4940","5010","5077","5153","5225","5302","5373","5446","5510","5580","5652","5726","5799","5877","5947","6019","6099","6174","6247","6329","6399","6475","6552","6625","6697","6761","6831","6904","6984","7057","7129","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 12::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 1114224.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.001420308}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"26","11309","20636","30995","41857","51685","61820","71405","82282","92581","103069","114250","123704","133498","144567","155732","164935","175559","186082","196700","207930","217367","227511","237781","248348","259679","269692","279097","289318","300619","311485","321268","331270","341882","352231","361830","372945","383382","393987","405239","415555","427032","438461","448473","459112","470359","481524","492717","502982","513710","524165","534333","544663","554875","565192","576567","586168","598386","608959","620175","629750","639772","650199","660474","671797","681920","692252","703223","713224","723069","733136","744467","754388","765063","775010","786658","796244","807059","817848","828650","839270","851099","861790","871850","883229","894821","905183","915481","925975","936732","947814","958254","967993","977342","988420","998860","1009253","1019245","1029913","1039907","1049935"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_web_page_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 13::smallint, + False::boolean, + 0.00026666667::real, + 4::integer, + 172.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.012433333, 0.012266667, 0.012233334, 0.0122, 0.012133333, 0.012133333, 0.0121, 0.011833333, 0.0117, 0.011633334, 0.0116, 0.0114, 0.0114, 0.011366666, 0.011366666, 0.011166667, 0.0111, 0.0111, 0.0111, 0.011066667, 0.011, 0.011, 0.010966667, 0.010866666, 0.010866666, 0.0108, 0.010733333, 0.010666667, 0.010366667, 0.0101333335, 0.008866667, 0.0079, 0.0078, 0.0075333333, 0.0075, 0.0074333334, 0.0074, 0.0072333333, 0.0071666664, 0.0071333335, 0.0071333335, 0.0071, 0.0070666666, 0.0070666666, 0.007033333, 0.007033333, 0.007, 0.0069, 0.0069, 0.0068333335, 0.0068, 0.0067, 0.0067, 0.006666667, 0.0066333334, 0.0064666667, 0.0063, 0.0061666667, 0.0061, 0.0056666667, 0.005433333, 0.0054, 0.0052, 0.0052, 0.0051666666, 0.005133333, 0.0051, 0.0051, 0.0050666668, 0.0050666668, 0.0050333333, 0.0050333333, 0.0049666665, 0.0049666665, 0.0049333335, 0.0049333335, 0.0049333335, 0.0049333335, 0.0049, 0.004833333, 0.004833333, 0.004833333, 0.0048, 0.0048, 0.004766667, 0.0047, 0.0047, 0.0047, 0.0046666665, 0.0046666665, 0.0046666665, 0.0046333335, 0.0046333335, 0.0046333335, 0.0045666667, 0.0045666667, 0.0045666667, 0.0045666667, 0.0045666667, 0.0045666667}'::real[], + NULL::real[], + '{0.0037705055}'::real[], + NULL::real[], + NULL::real[], + E'{"31","25","103","145","7","163","109","49","151","115","157","55","97","73","169","37","61","79","127","172","91","121","139","1","85","13","67","43","19","133","122","44","116","152","74","68","128","80","26","38","164","2","98","170","62","86","134","32","146","50","92","56","104","20","158","8","140","110","14","130","129","57","89","136","29","87","113","135","112","142","75","99","17","106","35","64","69","125","33","15","46","82","88","155","141","11","39","154","45","83","117","9","77","160","27","59","63","81","94","118"}'::int4[], + E'{"3","3","4","5","6","10","12","16","18","21","22","23","24","28","30","34","40","40","41","47","47","51","52","52","53","54","58","65","65","70","71","71","76","76","84","93","93","95","100","100","101","105","107","107","111","114","119","120","123","124","126","131","132","137","138","143","144","147","148","149","150","153","156","159","161","162","165","166","167","167","171","171"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_web_site_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 14::smallint, + False::boolean, + 0.0003::real, + 4::integer, + 32.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.060833335, 0.059366666, 0.058766667, 0.0585, 0.0584, 0.0576, 0.0549, 0.036, 0.0357, 0.034733333, 0.034666665, 0.034433335, 0.025, 0.0247, 0.024433333, 0.0242, 0.0242, 0.024066666, 0.024033334, 0.023866666, 0.023566667, 0.023533333, 0.023266668, 0.023166666, 0.0231, 0.022766666, 0.022666667, 0.013133333, 0.012033333, 0.011566667, 0.011566667, 0.010933333}'::real[], + '{0.04239957}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"31","7","32","19","1","25","13","2","14","8","26","20","28","22","4","21","23","27","3","9","16","10","17","15","11","5","29","6","24","12","30","18"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_mode_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 15::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 20.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0519, 0.05183333, 0.050966665, 0.050866667, 0.050633334, 0.050566666, 0.050533332, 0.050333332, 0.049933333, 0.049933333, 0.049933333, 0.049833335, 0.049833335, 0.0496, 0.049433332, 0.049233332, 0.0488, 0.0488, 0.048466668, 0.0482}'::real[], + '{0.056176268}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"11","4","17","19","16","5","8","12","6","7","18","2","10","15","9","20","1","3","13","14"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_warehouse_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 16::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 5.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.20156667, 0.20043333, 0.19946666, 0.19943333, 0.19873333}'::real[], + '{0.19803289}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3","4","1","5","2"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_promo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 17::smallint, + False::boolean, + 0.0003::real, + 4::integer, + 357.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0037666666, 0.0037, 0.0035333333, 0.0035333333, 0.0035}'::real[], + NULL::real[], + '{0.005415437}'::real[], + NULL::real[], + NULL::real[], + E'{"169","252","72","118","335"}'::int4[], + E'{"1","4","7","11","15","19","22","26","29","33","36","39","43","47","51","54","58","61","65","68","71","76","79","83","86","89","93","96","100","103","107","110","114","117","122","125","129","132","136","139","143","146","150","153","157","161","164","168","173","176","180","183","187","190","193","197","200","204","208","211","215","218","222","225","229","233","236","240","244","247","251","255","259","262","266","269","273","276","279","283","287","290","294","297","300","304","308","311","315","318","322","325","329","332","337","340","344","347","351","354","357"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_order_number +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 18::smallint, + False::boolean, + 0.0::real, + 8::integer, + 31567772.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 412::oid, + 412::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.06999581}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"121","317641","648578","945597","1288393","1573610","1860492","2157681","2459791","2761260","3028976","3321440","3616466","3914756","4237831","4544558","4833953","5074651","5373885","5669291","6007647","6291071","6582751","6873797","7171514","7488211","7794326","8082653","8395928","8704266","9030833","9316184","9652205","9924686","10207036","10507877","10826653","11124316","11413852","11700753","11996463","12275214","12553434","12843505","13133657","13432219","13722004","14024091","14320895","14620641","14953137","15244476","15539965","15844103","16163890","16449629","16748023","17025956","17343876","17630387","17939341","18239124","18538613","18878347","19178480","19467260","19779045","20065269","20381326","20712670","20992673","21280690","21613312","21911183","22191172","22482391","22796790","23114702","23395001","23716661","24042960","24340548","24628420","24894268","25221472","25528346","25827723","26138822","26441040","26745092","27033424","27319988","27614893","27924604","28205457","28532777","28829016","29120974","29422245","29678171","29997708"}'::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[]); +-- +-- Table: web_sales, Attribute: ws_quantity +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 19::smallint, + False::boolean, + 0.0003::real, + 4::integer, + 100.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0117, 0.011633334, 0.0113, 0.0111, 0.011066667, 0.010933333, 0.010933333, 0.0109, 0.0109, 0.0109, 0.010833333, 0.0108, 0.010766666, 0.0107, 0.010666667, 0.010566667, 0.010466667, 0.010466667, 0.0104, 0.010366667, 0.010366667, 0.010333333, 0.0103, 0.010266666, 0.010266666, 0.010266666, 0.010233333, 0.010233333, 0.010233333, 0.0102, 0.0101666665, 0.0101666665, 0.0101333335, 0.0101333335, 0.0101333335, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010033334, 0.010033334, 0.010033334, 0.010033334, 0.010033334, 0.010033334, 0.01, 0.01, 0.01, 0.009966667, 0.009966667, 0.009933333, 0.0099, 0.0099, 0.009866667, 0.009866667, 0.009866667, 0.009833333, 0.0098, 0.0098, 0.009766666, 0.009766666, 0.009766666, 0.009733333, 0.009733333, 0.0097, 0.0097, 0.0097, 0.0097, 0.009666666, 0.009633333, 0.0096, 0.0096, 0.0096, 0.009566667, 0.009533334, 0.009533334, 0.009533334, 0.009533334, 0.0095, 0.0095, 0.009466667, 0.009466667, 0.0094, 0.0094, 0.0094, 0.009366667, 0.009366667, 0.009366667, 0.009333333, 0.009266667, 0.009233333, 0.0092, 0.009133333, 0.009133333, 0.009, 0.008933334, 0.008666666}'::real[], + '{0.014699079}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"55","56","49","74","6","69","80","42","53","76","82","93","23","10","41","7","26","61","70","73","90","68","40","58","72","78","39","59","71","2","21","34","17","54","84","8","22","24","38","60","75","77","29","33","47","95","96","98","18","52","66","3","64","15","31","83","5","57","87","13","36","67","9","37","79","4","46","1","45","91","92","11","97","30","50","81","43","16","44","48","85","25","100","12","63","20","32","86","19","27","99","35","89","62","65","28","51","14","88","94"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 20::smallint, + False::boolean, + 0.0004::real, + 6::integer, + 9928.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.007165513}'::real[], + NULL::real[], + NULL::real[], + E'{"25.53","30.19","51.31","53.30","55.63","60.00","60.37","72.31","83.48","87.79"}'::numeric[], + E'{"1.00","2.00","3.01","3.99","5.01","5.98","6.90","7.81","8.78","9.77","10.82","11.75","12.73","13.64","14.64","15.70","16.68","17.70","18.55","19.52","20.51","21.47","22.49","23.60","24.61","25.59","26.60","27.68","28.73","29.69","30.74","31.63","32.62","33.59","34.69","35.74","36.73","37.59","38.60","39.62","40.68","41.65","42.59","43.49","44.44","45.41","46.35","47.34","48.33","49.28","50.23","51.18","52.17","53.17","54.21","55.20","56.12","57.20","58.17","59.12","60.16","61.11","62.13","63.13","64.04","65.08","66.03","66.99","67.92","69.02","69.96","71.00","71.88","72.93","73.95","74.98","76.06","77.09","78.09","79.05","79.99","81.05","82.06","83.02","84.06","85.19","86.28","87.20","88.17","89.18","90.18","91.03","92.00","92.96","94.05","94.97","95.97","96.93","97.94","98.99","100.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 21::smallint, + False::boolean, + 0.00026666667::real, + 6::integer, + 23431.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.0003, 0.00026666667}'::real[], + NULL::real[], + '{-0.011709301}'::real[], + NULL::real[], + NULL::real[], + E'{"12.66","82.70","21.34"}'::numeric[], + E'{"1.11","3.63","5.56","7.34","9.01","10.72","12.60","14.50","16.23","17.89","19.83","21.55","23.30","25.17","26.92","28.63","30.25","31.84","33.78","35.57","37.56","39.36","41.23","42.89","44.61","46.36","48.07","50.03","51.95","53.80","55.48","57.36","59.16","60.92","62.83","64.68","66.48","68.14","69.79","71.63","73.63","75.51","77.07","78.85","80.80","82.62","84.47","86.12","88.00","89.88","91.57","93.44","95.26","97.24","99.03","100.89","102.79","104.74","106.47","108.50","110.28","112.13","114.15","116.34","118.35","120.77","122.81","124.89","127.28","129.50","131.92","134.57","136.88","139.32","142.07","144.61","147.18","150.06","152.87","155.83","158.87","161.99","165.25","168.54","172.12","175.74","179.09","183.39","187.67","192.09","197.29","201.65","207.10","212.73","218.60","225.49","232.53","240.48","251.38","266.95","296.85"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 22::smallint, + False::boolean, + 0.00036666667::real, + 6::integer, + 14531.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0104, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.0046185157}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","2.06","2.70","3.03","3.83","3.87","0.80","0.94","3.04","4.70","5.59","11.09","0.70","0.89","1.17","1.28","1.33","1.55","1.81","2.13","2.80","3.51","3.68","3.75","3.77","4.11","4.41","6.03","15.17","0.41","0.72","0.86","1.12","1.21","1.44","1.66","2.24","2.46","2.92","3.38","3.40","3.43","4.23","4.64","4.98","5.48","5.60","5.68","6.12","6.37","6.49","7.58","8.47","11.40","15.80","0.30","0.66","0.71","1.14","1.18","1.32","1.49","1.53","1.70","1.89","2.03","2.05","2.22","2.37","2.43","2.52","2.53","2.78","2.82","2.87","2.88","3.25","3.61","3.67","3.71","3.94","3.95","4.17","4.22","4.59","4.82","4.91","5.07","5.19","5.24","5.64","5.70","6.11","6.53","6.57","6.95","7.00","7.73","7.84","7.99"}'::numeric[], + E'{"0.01","0.60","1.11","1.64","2.20","2.74","3.31","3.91","4.48","5.09","5.63","6.17","6.81","7.45","8.09","8.66","9.30","9.96","10.52","11.12","11.75","12.44","13.09","13.82","14.54","15.25","15.99","16.72","17.50","18.22","19.04","19.87","20.70","21.43","22.29","23.23","24.09","25.02","25.92","26.85","27.82","28.75","29.71","30.71","31.75","32.78","33.78","34.80","35.93","37.02","38.14","39.29","40.43","41.60","42.81","44.07","45.33","46.59","47.86","49.28","50.73","52.22","53.69","55.11","56.86","58.38","60.03","61.68","63.22","65.10","66.78","68.62","70.35","72.19","74.30","76.43","78.67","81.00","83.19","85.26","87.83","90.51","93.08","95.96","98.78","102.09","105.42","109.06","112.87","116.26","120.47","125.09","130.89","136.72","143.90","151.28","160.21","170.24","184.92","205.80","292.81"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_discount_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 23::smallint, + False::boolean, + 0.00023333334::real, + 6::integer, + 143461.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.008966667, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.0031384944}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","47.60","333.00"}'::numeric[], + E'{"0.11","11.18","20.44","31.11","41.86","52.90","64.50","75.24","88.16","100.08","113.88","127.60","141.90","158.13","176.97","194.72","211.91","230.04","247.80","270.20","292.80","314.96","336.26","358.72","384.84","412.08","437.64","462.84","489.06","516.88","547.36","574.47","607.20","636.57","669.28","702.30","740.88","777.49","815.40","855.00","891.48","929.25","969.54","1014.26","1058.88","1106.04","1154.78","1202.30","1251.81","1305.20","1355.86","1412.46","1469.43","1528.56","1594.50","1659.35","1728.00","1792.70","1862.70","1933.38","2005.02","2079.36","2157.40","2242.56","2326.52","2413.80","2503.90","2604.75","2707.31","2815.80","2923.56","3023.16","3143.36","3267.04","3403.08","3542.86","3676.34","3816.00","3975.42","4122.84","4289.29","4480.63","4684.35","4859.40","5062.32","5306.40","5536.80","5796.00","6095.70","6444.80","6772.48","7170.48","7599.34","8105.58","8650.46","9275.07","10054.69","11049.02","12248.28","14374.90","25989.60"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=24; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 24::smallint, + False::boolean, + 0.00033333333::real, + 6::integer, + 145118.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0104, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-3.1174983e-05}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","42.12","43.56"}'::numeric[], + E'{"0.15","11.55","21.09","31.38","41.40","52.47","63.68","75.30","87.36","102.00","115.28","130.23","143.98","161.58","177.08","195.03","212.64","231.77","250.56","270.60","291.64","313.31","336.44","359.92","382.11","408.00","433.65","460.80","487.06","515.16","541.38","569.88","600.62","631.67","663.75","696.96","733.08","770.99","809.00","848.70","887.04","930.69","971.28","1008.54","1054.04","1100.44","1151.97","1201.56","1252.10","1308.53","1366.40","1428.45","1484.64","1537.62","1599.40","1660.56","1730.20","1807.20","1873.92","1944.84","2025.30","2097.54","2180.70","2264.22","2351.00","2447.28","2539.20","2636.70","2733.72","2834.16","2948.78","3067.62","3174.24","3287.79","3403.35","3526.74","3663.90","3815.55","3966.90","4120.92","4294.76","4473.13","4690.56","4881.66","5088.60","5302.54","5533.92","5818.56","6094.50","6392.75","6752.16","7092.90","7519.73","7968.00","8494.71","9116.10","9877.56","10865.55","12247.37","14678.04","25048.32"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=25; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 25::smallint, + False::boolean, + 6.666667e-05::real, + 6::integer, + 196312.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0027050157}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.93","35.43","56.70","76.82","96.60","119.36","142.52","164.70","188.88","216.20","242.60","269.10","293.82","318.16","349.23","379.35","408.51","439.04","467.04","497.98","532.65","566.68","603.20","640.29","677.73","713.32","749.62","785.46","825.12","866.00","906.84","950.49","991.20","1035.40","1086.15","1131.19","1176.84","1221.96","1272.15","1321.00","1365.67","1417.72","1474.75","1528.74","1580.92","1635.13","1688.70","1744.40","1798.35","1854.56","1916.24","1981.60","2043.72","2105.60","2172.12","2249.94","2313.36","2380.16","2454.80","2530.80","2606.81","2680.56","2757.50","2832.83","2910.27","2989.11","3068.24","3147.96","3230.25","3327.77","3416.49","3506.28","3596.71","3686.50","3790.16","3884.76","3987.72","4089.55","4193.84","4304.25","4429.44","4544.01","4671.15","4795.30","4936.88","5074.40","5225.22","5382.29","5548.20","5722.02","5905.20","6111.16","6317.28","6532.92","6787.56","7078.66","7384.50","7726.50","8117.00","8641.90","9964.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=26; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 26::smallint, + False::boolean, + 0.00046666668::real, + 7::integer, + 373627.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0056457715}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3.82","64.44","101.53","139.08","181.44","220.10","260.15","300.40","347.16","399.06","442.80","490.98","543.49","592.36","645.05","702.61","756.24","813.24","866.12","923.12","986.70","1051.75","1114.12","1180.48","1241.10","1306.88","1373.56","1443.48","1522.30","1594.02","1668.20","1759.04","1834.80","1908.80","1995.12","2087.00","2170.48","2274.40","2365.65","2454.60","2553.48","2645.06","2748.90","2856.00","2958.12","3067.00","3175.68","3276.80","3382.95","3504.28","3617.46","3732.75","3852.12","3975.75","4098.27","4220.40","4355.04","4483.16","4613.12","4751.70","4888.73","5040.00","5184.62","5346.00","5487.69","5630.85","5786.64","5954.61","6113.82","6291.90","6477.02","6674.57","6870.24","7079.40","7274.74","7502.88","7699.20","7915.05","8155.70","8392.50","8646.08","8912.73","9191.07","9444.42","9740.49","10052.91","10348.48","10732.50","11116.80","11510.34","11983.48","12501.83","13062.54","13645.80","14316.72","15042.00","15921.12","16966.66","18501.25","20712.09","29685.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=27; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 27::smallint, + False::boolean, + 0.00033333333::real, + 6::integer, + 21995.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.10896666, 0.00066666666, 0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667}'::real[], + NULL::real[], + '{0.004573461}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","0.35","0.50","2.16","0.22","0.26","0.34","1.08","1.53","0.37","0.46","0.52","0.57","0.92","2.29","0.03","0.09","0.12","0.21","0.42","0.43","0.60","0.75","0.04","0.07","0.28","0.32","0.36","0.78","0.87","1.16","1.94","2.24","2.35","3.04","3.72","5.24","0.11","0.27","0.39","0.48","0.53","0.56","0.58","0.69","0.90","1.02","1.07","1.18","1.44","1.72","2.20","2.67","4.41","0.06","0.16","0.25","0.38","0.47","0.77","0.79","0.85","1.01","1.04","1.19","1.23","1.78","1.90","1.91","1.92","2.21","2.60","2.94","4.33","5.60","0.02","0.08","0.18","0.19","0.23","0.24","0.30","0.31","0.49","0.51","0.54","0.55","0.66","0.67","0.81","0.93","1.00","1.14","1.42","1.45","1.56","1.80","1.88","2.26","2.50"}'::numeric[], + E'{"0.01","0.83","1.34","1.75","2.23","2.69","3.10","3.49","3.97","4.43","4.88","5.35","5.90","6.43","7.00","7.69","8.38","8.95","9.70","10.49","11.20","11.89","12.64","13.48","14.34","15.18","16.14","16.99","18.05","19.01","19.99","21.08","22.13","23.33","24.48","25.75","26.99","28.33","29.92","31.37","32.94","34.59","36.09","37.92","39.69","41.47","43.32","45.30","47.20","48.97","50.94","53.17","55.40","57.80","60.19","62.89","65.72","68.28","71.23","74.17","77.49","81.04","84.54","88.21","91.73","95.71","100.03","104.60","109.56","114.83","119.85","125.13","131.38","137.60","144.21","150.45","157.35","164.05","171.91","179.70","189.75","199.15","211.02","222.05","234.00","246.12","259.74","274.59","291.64","309.69","330.12","352.06","377.91","410.73","445.30","487.66","545.67","620.87","718.11","874.66","2139.82"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_coupon_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=28; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 28::smallint, + False::boolean, + 0.00043333333::real, + 3::integer, + 6981.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.8047}'::real[], + NULL::real[], + '{0.6524823}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.07","2.81","5.16","8.29","11.57","14.98","18.25","22.17","25.74","29.25","33.46","38.75","43.09","47.74","52.23","58.18","63.93","69.06","75.54","81.43","90.24","97.41","105.00","112.34","119.93","128.94","139.96","150.39","161.12","170.13","179.08","190.02","204.24","216.80","230.79","242.88","256.72","269.70","285.28","299.98","321.93","337.96","359.92","379.16","398.56","411.26","434.53","456.18","480.99","503.11","534.41","559.69","587.89","615.55","642.62","675.15","706.02","738.29","769.44","805.37","834.44","867.90","910.13","947.74","994.63","1042.05","1081.01","1133.06","1191.03","1244.46","1291.32","1335.46","1389.96","1451.73","1524.48","1590.31","1679.40","1745.45","1825.78","1907.96","2007.12","2097.34","2207.59","2313.09","2431.84","2586.43","2750.05","2882.04","3053.86","3220.08","3468.52","3726.47","4048.99","4401.10","4748.00","5156.34","5788.23","6391.13","7477.72","9404.42","23044.45"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_ship_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=29; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 29::smallint, + False::boolean, + 0.00026666667::real, + 6::integer, + 83043.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.020966666, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.006589469}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","450.80","10.92","48.40","68.40","79.20","93.60","113.40","142.80","6.72","9.18","15.84","16.80","23.10","32.40","37.80","38.22","52.80","84.00","105.30","106.26","111.60","126.00","131.04","143.04","184.80","198.00","216.72","305.76","333.00","369.60"}'::numeric[], + E'{"0.12","6.44","12.04","17.91","23.85","29.60","36.11","42.78","49.62","56.16","63.60","71.04","78.89","87.72","96.00","104.00","113.54","123.20","133.92","145.52","155.25","165.02","176.80","189.20","201.63","213.48","226.80","240.50","253.76","267.85","282.72","298.89","316.10","330.25","346.00","363.00","380.52","400.32","419.76","438.40","457.56","477.96","499.20","523.27","545.37","568.70","592.32","616.00","643.86","672.10","699.48","723.24","752.40","785.46","813.93","846.30","879.06","914.50","948.00","983.84","1020.80","1057.50","1097.25","1140.48","1180.20","1229.80","1277.46","1323.70","1377.74","1434.40","1494.96","1555.07","1608.18","1672.32","1736.04","1799.16","1871.10","1948.48","2020.46","2099.31","2180.40","2270.40","2362.56","2458.14","2562.12","2692.80","2810.50","2931.74","3077.75","3238.31","3432.00","3613.44","3833.20","4076.73","4350.06","4641.78","5042.73","5561.25","6238.65","7336.85","12822.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_paid +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=30; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 30::smallint, + False::boolean, + 0.00043333333::real, + 6::integer, + 155462.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0125, 0.0002}'::real[], + NULL::real[], + '{-0.0023643773}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","43.56"}'::numeric[], + E'{"0.06","6.90","13.40","20.67","28.47","35.91","44.46","53.53","63.00","73.44","83.29","95.48","107.88","119.93","132.34","144.75","160.46","175.10","190.14","206.83","222.10","239.84","258.46","275.49","294.81","315.96","336.50","358.36","379.82","403.62","429.78","456.00","481.00","507.99","534.40","561.61","589.38","619.65","651.00","683.82","717.57","755.54","794.30","830.96","872.19","911.09","954.18","992.44","1035.44","1083.95","1133.73","1186.24","1242.02","1296.12","1352.96","1411.83","1470.70","1528.24","1597.05","1662.45","1734.44","1814.25","1880.05","1954.56","2034.12","2110.08","2198.27","2289.76","2377.50","2475.02","2583.69","2686.32","2791.36","2899.80","3029.56","3156.05","3271.45","3395.25","3526.10","3668.35","3836.05","4007.85","4182.57","4382.49","4602.96","4828.07","5062.08","5308.86","5595.68","5910.43","6219.45","6596.00","7000.70","7489.02","8014.44","8603.82","9384.00","10412.72","11672.78","14217.46","24307.65"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_paid_inc_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=31; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 31::smallint, + False::boolean, + 0.0003::real, + 6::integer, + 246002.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.012466666, 0.0002}'::real[], + NULL::real[], + '{-0.0024806631}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","57.28"}'::numeric[], + E'{"0.06","7.24","14.07","21.63","29.77","37.41","46.45","56.03","66.38","76.71","87.19","99.41","112.52","125.57","138.96","151.61","167.50","182.92","198.36","216.24","231.78","251.32","269.52","288.70","306.76","329.56","350.90","374.93","397.02","422.18","449.02","474.60","501.75","531.09","559.18","587.44","616.28","646.64","680.44","714.49","750.33","786.11","828.41","870.48","912.34","955.22","997.24","1039.57","1083.93","1132.88","1186.06","1237.31","1299.09","1355.29","1409.04","1474.72","1532.54","1592.67","1668.97","1738.60","1815.18","1890.75","1969.95","2046.13","2120.47","2201.72","2290.88","2394.32","2487.04","2585.21","2701.06","2805.79","2915.24","3036.02","3164.89","3298.38","3422.94","3549.84","3672.00","3832.97","4016.75","4182.78","4379.44","4577.43","4811.80","5061.31","5307.67","5555.95","5845.41","6173.76","6521.98","6885.89","7318.05","7810.46","8377.41","8999.04","9828.90","10854.91","12167.98","14819.83","25915.60"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_paid_inc_ship +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=32; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 32::smallint, + False::boolean, + 0.0::real, + 7::integer, + 301791.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0004}'::real[], + NULL::real[], + '{-0.0042563225}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.15","26.90","47.27","66.00","87.66","110.70","130.90","153.36","177.10","200.26","226.76","251.37","278.08","304.01","330.99","360.93","391.74","422.88","454.10","486.85","518.42","554.54","589.68","627.00","662.74","700.56","740.52","781.44","822.39","863.04","903.00","950.37","1000.58","1042.83","1092.42","1141.32","1193.41","1249.05","1308.51","1363.96","1424.64","1479.06","1542.09","1608.99","1672.64","1734.00","1802.29","1875.28","1951.50","2031.12","2099.65","2168.25","2252.68","2350.87","2431.91","2518.02","2615.34","2697.47","2798.23","2897.37","3002.40","3098.34","3202.68","3308.00","3423.75","3542.37","3654.66","3775.98","3909.42","4028.66","4167.30","4309.90","4464.88","4615.84","4766.58","4937.48","5114.56","5268.48","5449.86","5643.55","5859.42","6093.48","6323.40","6589.80","6865.04","7151.04","7471.75","7798.48","8167.15","8545.18","8940.05","9403.24","9923.00","10538.58","11210.00","12020.74","12946.34","14134.36","15809.06","18879.36","36064.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_paid_inc_ship_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=33; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 33::smallint, + False::boolean, + 0.0::real, + 7::integer, + 580101.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0004}'::real[], + NULL::real[], + '{-0.0042436747}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.15","27.32","48.14","67.61","90.21","112.88","134.60","157.01","181.53","205.08","232.37","257.90","285.99","310.90","338.12","369.71","401.62","432.71","466.15","498.29","532.67","568.73","606.20","644.59","677.83","716.94","756.42","802.49","841.36","885.36","929.11","973.55","1022.68","1069.26","1124.40","1170.12","1225.33","1284.57","1342.88","1398.12","1459.13","1514.68","1583.89","1648.82","1714.40","1780.42","1851.90","1924.20","2000.32","2078.12","2156.48","2230.86","2317.75","2412.28","2495.80","2582.42","2677.84","2771.12","2874.03","2977.91","3073.79","3182.59","3288.45","3403.98","3512.75","3630.83","3761.65","3884.79","4011.93","4143.91","4277.61","4436.91","4583.20","4733.60","4884.95","5069.66","5251.05","5427.69","5605.76","5797.65","6025.63","6250.68","6502.49","6751.35","7071.69","7353.10","7674.41","8024.66","8431.89","8815.18","9204.22","9715.49","10211.19","10847.31","11539.04","12347.17","13354.05","14622.68","16369.05","19567.99","38203.82"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_profit +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=34; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 34::smallint, + False::boolean, + 0.0::real, + 6::integer, + 206397.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333}'::real[], + NULL::real[], + '{-0.009154078}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"-9828.00","-6282.88","-5353.36","-4759.04","-4327.14","-3980.40","-3689.38","-3415.01","-3200.70","-2979.08","-2776.62","-2608.96","-2449.44","-2301.84","-2164.10","-2041.05","-1931.67","-1824.00","-1713.27","-1605.45","-1519.20","-1432.56","-1351.42","-1271.98","-1193.64","-1123.08","-1053.59","-994.98","-939.75","-874.80","-825.28","-773.60","-726.24","-683.34","-636.68","-597.28","-559.37","-523.79","-486.00","-449.68","-416.64","-383.24","-353.70","-325.01","-296.56","-271.44","-246.81","-222.48","-199.76","-177.30","-156.21","-138.71","-119.47","-102.79","-85.56","-72.32","-58.00","-46.02","-34.44","-22.62","-11.88","-1.54","7.80","20.24","33.81","49.02","66.06","87.48","111.15","138.51","166.66","197.05","235.56","273.56","316.31","364.32","415.57","472.36","537.60","604.77","677.15","764.42","854.28","951.99","1064.31","1176.00","1306.32","1449.60","1614.67","1788.28","1984.00","2213.82","2467.72","2782.77","3119.84","3508.34","4027.92","4724.10","5672.52","7345.81","15055.16"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Query text +-- + set search_path=cte_bug,public; + set gp_cte_sharing = on; + explain(costs off) + with year_total as ( + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2) + year_total + ,'s' sale_type + from cte_bug.customer + ,cte_bug.store_sales + ,cte_bug.date_dim + where c_customer_sk = ss_customer_sk + and ss_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum((((cs_ext_list_price-cs_ext_wholesale_cost-cs_ext_discount_amt)+cs_ext_sales_price)/2) + ) year_total + ,'c' sale_type + from cte_bug.customer + ,cte_bug.catalog_sales + ,cte_bug.date_dim + where c_customer_sk = cs_bill_customer_sk + and cs_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum((((ws_ext_list_price-ws_ext_wholesale_cost-ws_ext_discount_amt)+ws_ext_sales_price)/2) + ) year_total + ,'w' sale_type + from cte_bug.customer + ,cte_bug.web_sales + ,cte_bug.date_dim + where c_customer_sk = ws_bill_customer_sk + and ws_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + ) + select + t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_login + from year_total t_s_firstyear + ,year_total t_s_secyear + ,year_total t_c_firstyear + ,year_total t_c_secyear + ,year_total t_w_firstyear + ,year_total t_w_secyear + where t_s_secyear.customer_id = t_s_firstyear.customer_id + and t_s_firstyear.customer_id = t_c_secyear.customer_id + and t_s_firstyear.customer_id = t_c_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_secyear.customer_id + and t_s_firstyear.sale_type = 's' + and t_c_firstyear.sale_type = 'c' + and t_w_firstyear.sale_type = 'w' + and t_s_secyear.sale_type = 's' + and t_c_secyear.sale_type = 'c' + and t_w_secyear.sale_type = 'w' + and t_s_firstyear.dyear = 2001 + and t_s_secyear.dyear = 2001+1 + and t_c_firstyear.dyear = 2001 + and t_c_secyear.dyear = 2001+1 + and t_w_firstyear.dyear = 2001 + and t_w_secyear.dyear = 2001+1 + and t_s_firstyear.year_total > 0 + and t_c_firstyear.year_total > 0 + and t_w_firstyear.year_total > 0 + and case when t_c_firstyear.year_total > 0 then + t_c_secyear.year_total / t_c_firstyear.year_total else null end > case + when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / + t_s_firstyear.year_total else null end + and case when t_c_firstyear.year_total > 0 then + t_c_secyear.year_total / t_c_firstyear.year_total else null end > case + when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / + t_w_firstyear.year_total else null end + order by t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_login + limit 100; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit + -> Gather Motion 3:1 (slice1; segments: 3) + Merge Key: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_login + -> Limit + -> Sort + Sort Key: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_login + -> Hash Join + Hash Cond: ((t_c_secyear.customer_id)::text = (t_s_secyear.customer_id)::text) + Join Filter: (CASE WHEN (t_c_firstyear.year_total > '0'::numeric) THEN (t_c_secyear.year_total / t_c_firstyear.year_total) ELSE NULL::numeric END > CASE WHEN (t_s_firstyear.year_total > '0'::numeric) THEN (t_s_secyear.year_total / t_s_firstyear.year_total) ELSE NULL::numeric END) + -> Hash Join + Hash Cond: ((t_c_secyear.customer_id)::text = (t_w_firstyear.customer_id)::text) + Join Filter: (CASE WHEN (t_c_firstyear.year_total > '0'::numeric) THEN (t_c_secyear.year_total / t_c_firstyear.year_total) ELSE NULL::numeric END > CASE WHEN (t_w_firstyear.year_total > '0'::numeric) THEN (t_w_secyear.year_total / t_w_firstyear.year_total) ELSE NULL::numeric END) + -> Hash Join + Hash Cond: ((t_c_firstyear.customer_id)::text = (t_c_secyear.customer_id)::text) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: t_c_firstyear.customer_id + -> Subquery Scan on t_c_firstyear + Filter: ((t_c_firstyear.year_total > '0'::numeric) AND (t_c_firstyear.sale_type = 'c'::text) AND (t_c_firstyear.dyear = 2001)) + -> Shared Scan (share slice:id 2:0) + -> Hash + -> Redistribute Motion 3:3 (slice3; segments: 3) + Hash Key: t_c_secyear.customer_id + -> Subquery Scan on t_c_secyear + Filter: ((t_c_secyear.sale_type = 'c'::text) AND (t_c_secyear.dyear = 2002)) + -> Shared Scan (share slice:id 3:0) + -> Hash + -> Hash Join + Hash Cond: ((t_w_firstyear.customer_id)::text = (t_w_secyear.customer_id)::text) + -> Redistribute Motion 3:3 (slice4; segments: 3) + Hash Key: t_w_firstyear.customer_id + -> Subquery Scan on t_w_firstyear + Filter: ((t_w_firstyear.year_total > '0'::numeric) AND (t_w_firstyear.sale_type = 'w'::text) AND (t_w_firstyear.dyear = 2001)) + -> Shared Scan (share slice:id 4:0) + -> Hash + -> Redistribute Motion 3:3 (slice5; segments: 3) + Hash Key: t_w_secyear.customer_id + -> Subquery Scan on t_w_secyear + Filter: ((t_w_secyear.sale_type = 'w'::text) AND (t_w_secyear.dyear = 2002)) + -> Shared Scan (share slice:id 5:0) + -> Hash + -> Redistribute Motion 3:3 (slice6; segments: 3) + Hash Key: t_s_secyear.customer_id + -> Hash Join + Hash Cond: ((t_s_firstyear.customer_id)::text = (t_s_secyear.customer_id)::text) + -> Broadcast Motion 3:3 (slice7; segments: 3) + -> Subquery Scan on t_s_firstyear + Filter: ((t_s_firstyear.year_total > '0'::numeric) AND (t_s_firstyear.sale_type = 's'::text) AND (t_s_firstyear.dyear = 2001)) + -> Shared Scan (share slice:id 7:0) + -> Hash + -> Subquery Scan on t_s_secyear + Filter: ((t_s_secyear.sale_type = 's'::text) AND (t_s_secyear.dyear = 2002)) + -> Shared Scan (share slice:id 6:0) + -> Append + -> HashAggregate + Group Key: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year + -> Redistribute Motion 3:3 (slice8; segments: 3) + Hash Key: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year + -> Hash Join + Hash Cond: (store_sales.ss_customer_sk = customer.c_customer_sk) + -> Hash Join + Hash Cond: (store_sales.ss_sold_date_sk = date_dim.d_date_sk) + -> Seq Scan on store_sales + -> Hash + -> Broadcast Motion 3:3 (slice9; segments: 3) + -> Seq Scan on date_dim + -> Hash + -> Broadcast Motion 3:3 (slice10; segments: 3) + -> Seq Scan on customer + -> HashAggregate + Group Key: customer_1.c_customer_id, customer_1.c_first_name, customer_1.c_last_name, customer_1.c_preferred_cust_flag, customer_1.c_birth_country, customer_1.c_login, customer_1.c_email_address, date_dim_1.d_year + -> Redistribute Motion 3:3 (slice11; segments: 3) + Hash Key: customer_1.c_customer_id, customer_1.c_first_name, customer_1.c_last_name, customer_1.c_preferred_cust_flag, customer_1.c_birth_country, customer_1.c_login, customer_1.c_email_address, date_dim_1.d_year + -> Hash Join + Hash Cond: (catalog_sales.cs_bill_customer_sk = customer_1.c_customer_sk) + -> Hash Join + Hash Cond: (catalog_sales.cs_sold_date_sk = date_dim_1.d_date_sk) + -> Seq Scan on catalog_sales + -> Hash + -> Broadcast Motion 3:3 (slice12; segments: 3) + -> Seq Scan on date_dim date_dim_1 + -> Hash + -> Broadcast Motion 3:3 (slice13; segments: 3) + -> Seq Scan on customer customer_1 + -> HashAggregate + Group Key: customer_2.c_customer_id, customer_2.c_first_name, customer_2.c_last_name, customer_2.c_preferred_cust_flag, customer_2.c_birth_country, customer_2.c_login, customer_2.c_email_address, date_dim_2.d_year + -> Redistribute Motion 3:3 (slice14; segments: 3) + Hash Key: customer_2.c_customer_id, customer_2.c_first_name, customer_2.c_last_name, customer_2.c_preferred_cust_flag, customer_2.c_birth_country, customer_2.c_login, customer_2.c_email_address, date_dim_2.d_year + -> Hash Join + Hash Cond: (web_sales.ws_sold_date_sk = date_dim_2.d_date_sk) + -> Hash Join + Hash Cond: (web_sales.ws_bill_customer_sk = customer_2.c_customer_sk) + -> Seq Scan on web_sales + -> Hash + -> Broadcast Motion 3:3 (slice15; segments: 3) + -> Seq Scan on customer customer_2 + -> Hash + -> Broadcast Motion 3:3 (slice16; segments: 3) + -> Seq Scan on date_dim date_dim_2 + Optimizer: Postgres query optimizer +(99 rows) + diff --git a/src/test/regress/expected/tpcds_q04_optimizer.out b/src/test/regress/expected/tpcds_q04_optimizer.out new file mode 100644 index 00000000000..d0d3b7688ef --- /dev/null +++ b/src/test/regress/expected/tpcds_q04_optimizer.out @@ -0,0 +1,5572 @@ +CREATE SCHEMA cte_bug; +SET gp_default_storage_options = ''; +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); + set_config +------------ + +(1 row) + +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; +SET default_tablespace = ''; +SET default_table_access_method = ao_column; +-- +-- Name: catalog_sales; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.catalog_sales; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.catalog_sales; + ^ +CREATE TABLE cte_bug.catalog_sales ( + cs_sold_date_sk integer, + cs_sold_time_sk integer, + cs_ship_date_sk integer, + cs_bill_customer_sk integer, + cs_bill_cdemo_sk integer, + cs_bill_hdemo_sk integer, + cs_bill_addr_sk integer, + cs_ship_customer_sk integer, + cs_ship_cdemo_sk integer, + cs_ship_hdemo_sk integer, + cs_ship_addr_sk integer, + cs_call_center_sk integer, + cs_catalog_page_sk integer, + cs_ship_mode_sk integer, + cs_warehouse_sk integer, + cs_item_sk integer NOT NULL, + cs_promo_sk integer, + cs_order_number bigint NOT NULL, + cs_quantity integer, + cs_wholesale_cost numeric(7,2), + cs_list_price numeric(7,2), + cs_sales_price numeric(7,2), + cs_ext_discount_amt numeric(7,2), + cs_ext_sales_price numeric(7,2), + cs_ext_wholesale_cost numeric(7,2), + cs_ext_list_price numeric(7,2), + cs_ext_tax numeric(7,2), + cs_coupon_amt numeric(7,2), + cs_ext_ship_cost numeric(7,2), + cs_net_paid numeric(7,2), + cs_net_paid_inc_tax numeric(7,2), + cs_net_paid_inc_ship numeric(7,2), + cs_net_paid_inc_ship_tax numeric(7,2), + cs_net_profit numeric(7,2), + COLUMN cs_sold_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_sold_time_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_call_center_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_catalog_page_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_mode_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_warehouse_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_item_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_promo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_order_number ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_quantity ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_discount_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_coupon_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_ship_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid_inc_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid_inc_ship ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid_inc_ship_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_profit ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (cs_item_sk); +-- +-- Name: customer; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.customer; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.customer; + ^ +CREATE TABLE cte_bug.customer ( + c_customer_sk integer NOT NULL, + c_customer_id character varying(16) NOT NULL, + c_current_cdemo_sk integer, + c_current_hdemo_sk integer, + c_current_addr_sk integer, + c_first_shipto_date_sk integer, + c_first_sales_date_sk integer, + c_salutation character varying(10), + c_first_name character varying(20), + c_last_name character varying(30), + c_preferred_cust_flag character(1), + c_birth_day integer, + c_birth_month integer, + c_birth_year integer, + c_birth_country character varying(20), + c_login character varying(13), + c_email_address character varying(50), + c_last_review_date integer, + COLUMN c_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_customer_id ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_current_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_current_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_current_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_first_shipto_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_first_sales_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_salutation ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_first_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_last_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_preferred_cust_flag ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_day ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_month ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_country ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_login ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_email_address ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_last_review_date ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (c_customer_sk); +-- +-- Name: date_dim; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.date_dim; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.date_dim; + ^ +CREATE TABLE cte_bug.date_dim ( + d_date_sk integer NOT NULL, + d_date_id character varying(16) NOT NULL, + d_date date, + d_month_seq integer, + d_week_seq integer, + d_quarter_seq integer, + d_year integer, + d_dow integer, + d_moy integer, + d_dom integer, + d_qoy integer, + d_fy_year integer, + d_fy_quarter_seq integer, + d_fy_week_seq integer, + d_day_name character varying(9), + d_quarter_name character varying(6), + d_holiday character(1), + d_weekend character(1), + d_following_holiday character(1), + d_first_dom integer, + d_last_dom integer, + d_same_day_ly integer, + d_same_day_lq integer, + d_current_day character(1), + d_current_week character(1), + d_current_month character(1), + d_current_quarter character(1), + d_current_year character(1), + COLUMN d_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_date_id ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_date ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_month_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_week_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_quarter_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_dow ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_moy ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_dom ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_qoy ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_fy_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_fy_quarter_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_fy_week_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_day_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_quarter_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_holiday ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_weekend ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_following_holiday ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_first_dom ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_last_dom ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_same_day_ly ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_same_day_lq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_day ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_week ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_month ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_quarter ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (d_date_sk); +-- +-- Name: store_sales; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.store_sales; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.store_sales; + ^ +CREATE TABLE cte_bug.store_sales ( + ss_sold_date_sk integer, + ss_sold_time_sk integer, + ss_item_sk integer NOT NULL, + ss_customer_sk integer, + ss_cdemo_sk integer, + ss_hdemo_sk integer, + ss_addr_sk integer, + ss_store_sk integer, + ss_promo_sk integer, + ss_ticket_number bigint NOT NULL, + ss_quantity integer, + ss_wholesale_cost numeric(7,2), + ss_list_price numeric(7,2), + ss_sales_price numeric(7,2), + ss_ext_discount_amt numeric(7,2), + ss_ext_sales_price numeric(7,2), + ss_ext_wholesale_cost numeric(7,2), + ss_ext_list_price numeric(7,2), + ss_ext_tax numeric(7,2), + ss_coupon_amt numeric(7,2), + ss_net_paid numeric(7,2), + ss_net_paid_inc_tax numeric(7,2), + ss_net_profit numeric(7,2), + COLUMN ss_sold_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_sold_time_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_item_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_store_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_promo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ticket_number ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_quantity ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_discount_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_coupon_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_net_paid ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_net_paid_inc_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_net_profit ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (ss_item_sk); +-- +-- Name: web_sales; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.web_sales; +ERROR: syntax error at or near "EXITS" +LINE 1: DROP TABLE IF EXITS cte_bug.web_sales; + ^ +CREATE TABLE cte_bug.web_sales ( + ws_sold_date_sk integer, + ws_sold_time_sk integer, + ws_ship_date_sk integer, + ws_item_sk integer NOT NULL, + ws_bill_customer_sk integer, + ws_bill_cdemo_sk integer, + ws_bill_hdemo_sk integer, + ws_bill_addr_sk integer, + ws_ship_customer_sk integer, + ws_ship_cdemo_sk integer, + ws_ship_hdemo_sk integer, + ws_ship_addr_sk integer, + ws_web_page_sk integer, + ws_web_site_sk integer, + ws_ship_mode_sk integer, + ws_warehouse_sk integer, + ws_promo_sk integer, + ws_order_number bigint NOT NULL, + ws_quantity integer, + ws_wholesale_cost numeric(7,2), + ws_list_price numeric(7,2), + ws_sales_price numeric(7,2), + ws_ext_discount_amt numeric(7,2), + ws_ext_sales_price numeric(7,2), + ws_ext_wholesale_cost numeric(7,2), + ws_ext_list_price numeric(7,2), + ws_ext_tax numeric(7,2), + ws_coupon_amt numeric(7,2), + ws_ext_ship_cost numeric(7,2), + ws_net_paid numeric(7,2), + ws_net_paid_inc_tax numeric(7,2), + ws_net_paid_inc_ship numeric(7,2), + ws_net_paid_inc_ship_tax numeric(7,2), + ws_net_profit numeric(7,2), + COLUMN ws_sold_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_sold_time_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_item_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_web_page_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_web_site_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_mode_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_warehouse_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_promo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_order_number ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_quantity ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_discount_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_coupon_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_ship_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid_inc_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid_inc_ship ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid_inc_ship_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_profit ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (ws_item_sk); +-- +-- Apache Cloudberry database dump complete +-- +-- +-- Allow system table modifications +-- +set allow_system_table_mods=true; +-- Table: catalog_sales +UPDATE pg_class +SET + relpages = 1497467::int, + reltuples = 720015040.0::real, + relallvisible = 0::int +WHERE relname = 'catalog_sales' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- Table: date_dim +UPDATE pg_class +SET + relpages = 40::int, + reltuples = 73049.0::real, + relallvisible = 0::int +WHERE relname = 'date_dim' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- Table: customer +UPDATE pg_class +SET + relpages = 2870::int, + reltuples = 2100000.0::real, + relallvisible = 0::int +WHERE relname = 'customer' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- Table: store_sales +UPDATE pg_class +SET + relpages = 1930653::int, + reltuples = 1439977500.0::real, + relallvisible = 0::int +WHERE relname = 'store_sales' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- Table: web_sales +UPDATE pg_class +SET + relpages = 736204::int, + reltuples = 360014100.0::real, + relallvisible = 0::int +WHERE relname = 'web_sales' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); +-- +-- Table: catalog_sales, Attribute: cs_sold_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 1::smallint, + False::boolean, + 0.0046333335::real, + 4::integer, + 1836.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0017666667, 0.0015666666, 0.0015666666, 0.0015, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014333334, 0.0014333334, 0.0014333334, 0.0014333334, 0.0014, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666}'::real[], + NULL::real[], + '{0.054781195}'::real[], + NULL::real[], + NULL::real[], + E'{"2452618","2451872","2451875","2451537","2451130","2451869","2451873","2451891","2451908","2452223","2452613","2451169","2451486","2451513","2451904","2451163","2451173","2451541","2451885","2451177","2451504","2451876","2451884","2452249","2452264","2452587","2452606","2451138","2451146","2451158","2451491","2451523","2451536","2451540","2451544","2451883","2451899","2452217","2452222","2452248","2452593","2451535","2451864","2451874","2451894","2451896","2452230","2452588","2452597","2451156","2451505","2451514","2452247","2452259","2452269","2452585","2452627","2451150","2451157","2451166","2451171","2451512","2451515","2451519","2451526","2451881","2451886","2451893","2452232","2452254","2452265","2452576","2452583","2452609","2452612","2452616","2452630","2451132","2451136","2451522","2451529","2451887","2452220","2452235","2452498","2452594","2452595","2452601","2452620","2452624","2451029","2451131","2451133","2451139","2451147","2451170","2451525","2451532","2451856","2451858"}'::int4[], + E'{"2450815","2450843","2450872","2450902","2450927","2450954","2450982","2451010","2451032","2451043","2451055","2451066","2451078","2451090","2451102","2451116","2451125","2451142","2451153","2451165","2451181","2451211","2451241","2451266","2451295","2451323","2451348","2451375","2451397","2451409","2451421","2451434","2451446","2451458","2451471","2451483","2451494","2451506","2451520","2451539","2451563","2451589","2451616","2451645","2451670","2451696","2451724","2451754","2451768","2451782","2451795","2451807","2451818","2451831","2451842","2451853","2451865","2451879","2451898","2451910","2451933","2451960","2451990","2452016","2452042","2452069","2452097","2452122","2452135","2452147","2452158","2452169","2452182","2452195","2452207","2452218","2452231","2452242","2452255","2452267","2452278","2452309","2452340","2452369","2452396","2452424","2452450","2452480","2452497","2452509","2452521","2452533","2452544","2452556","2452568","2452582","2452599","2452610","2452625","2452636","2452654"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_sold_time_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 2::smallint, + False::boolean, + 0.005::real, + 4::integer, + 72297.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0002}'::real[], + NULL::real[], + '{0.0112536065}'::real[], + NULL::real[], + NULL::real[], + E'{"44417"}'::int4[], + E'{"19","3608","5437","7239","9103","10773","12524","14298","15582","16852","17926","19155","20275","21514","22764","24007","25186","26042","26962","27910","28794","29659","30546","31449","32213","32885","33617","34346","35082","35807","36509","37180","37892","38557","39244","39936","40721","41398","42183","42868","43569","44109","44624","45170","45703","46274","46759","47492","48133","48850","49628","50310","51472","52776","53993","54839","55874","56759","57696","58416","59123","59800","60516","61221","61836","62429","62989","63592","64155","64738","65238","65703","66205","66700","67247","67791","68275","68782","69195","69611","70077","70485","70923","71369","71847","72304","72827","73342","73877","74404","74966","75510","76220","76902","77680","78437","79149","80343","81522","82791","86392"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 3::smallint, + False::boolean, + 0.0052::real, + 4::integer, + 1914.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0015333333, 0.0014, 0.0013666666, 0.0013666666, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001}'::real[], + NULL::real[], + '{0.0545705}'::real[], + NULL::real[], + NULL::real[], + E'{"2451918","2451182","2451209","2452278","2451544","2451907","2452252","2452639","2452648","2452659","2451207","2452590","2451205","2451541","2451559","2451183","2451549","2451909","2451910","2451911","2451933","2452260","2452262","2452624","2452634","2452637","2451906","2451914","2452233","2452242","2452265","2452270","2451121","2451180","2451192","2451526","2451565","2451575","2451896","2451897","2451899","2451912","2451936","2452245","2452618","2452626","2452653","2451161","2451173","2451174","2451191","2451478","2451528","2451555","2451915","2451927","2452261","2452269","2452281","2452290","2452629","2452633","2452643","2451162","2451164","2451185","2451548","2451550","2451584","2451929","2451940","2452236","2452283","2452608","2452654","2451165","2451168","2451481","2451511","2451517","2451553","2451582","2451889","2451917","2452294","2452632","2452641","2452642","2452647","2452660","2451123","2451178","2451184","2451204","2451491","2451512","2451513","2451516","2451520","2451538"}'::int4[], + E'{"2450821","2450886","2450917","2450945","2450976","2451006","2451032","2451056","2451073","2451088","2451101","2451114","2451128","2451140","2451151","2451166","2451186","2451199","2451214","2451227","2451241","2451259","2451286","2451317","2451344","2451370","2451397","2451421","2451439","2451456","2451470","2451484","2451497","2451510","2451529","2451542","2451561","2451573","2451588","2451603","2451620","2451643","2451671","2451698","2451724","2451752","2451777","2451799","2451817","2451830","2451844","2451858","2451870","2451880","2451892","2451908","2451926","2451941","2451953","2451966","2451982","2452002","2452032","2452056","2452083","2452113","2452139","2452159","2452176","2452190","2452204","2452217","2452229","2452244","2452257","2452274","2452287","2452301","2452312","2452325","2452341","2452360","2452392","2452421","2452448","2452475","2452504","2452523","2452541","2452555","2452569","2452581","2452594","2452606","2452617","2452631","2452651","2452666","2452678","2452695","2452742"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_bill_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 4::smallint, + False::boolean, + 0.0047333334::real, + 4::integer, + 2076691.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.009644499}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"83","19255","38469","57334","77660","100353","121648","142864","164380","186732","206072","225376","246600","266629","288115","310326","332043","353860","375080","398568","418154","439646","461654","482840","506162","528559","549467","568302","588542","608968","630692","650223","671210","692175","713622","734326","754624","775800","798038","818056","841239","862315","882803","902700","923351","943590","963503","984723","1007978","1026125","1047160","1067477","1087789","1107171","1127082","1149889","1169435","1192194","1212249","1233291","1254464","1277232","1298034","1319408","1340687","1361652","1382794","1402582","1423476","1446047","1468226","1490417","1512333","1534704","1553629","1572989","1592634","1611613","1630695","1653622","1674063","1694178","1714594","1736071","1758421","1781336","1801193","1823164","1844186","1864368","1883410","1905171","1926138","1948282","1969988","1992903","2014079","2034696","2056865","2078611","2099787"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_bill_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 5::smallint, + False::boolean, + 0.005133333::real, + 4::integer, + 2250439.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0031504256}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"302","18541","37466","54463","73740","92424","112008","130967","151053","169555","190110","209507","228068","249282","268918","288605","307024","325774","343640","360630","381214","401158","419575","438762","458312","478977","498196","516757","537388","556845","575435","593167","612925","631535","649867","668933","688696","708123","729225","748554","766895","786505","806811","825215","844584","864169","883774","902048","921519","939325","959048","977470","995552","1013270","1032128","1049619","1069099","1089358","1107492","1124109","1143285","1161705","1180858","1201502","1221860","1240948","1262383","1281164","1299986","1317873","1338886","1358783","1378683","1398812","1417832","1435737","1456539","1476597","1496447","1515429","1535261","1554963","1573327","1591123","1612033","1630239","1650833","1669983","1688937","1707342","1727798","1746079","1764329","1783178","1803869","1823803","1842989","1862762","1881322","1901969","1920750"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_bill_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 6::smallint, + False::boolean, + 0.0045666667::real, + 4::integer, + 7211.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.000111478614}'::real[], + NULL::real[], + NULL::real[], + E'{"952","3639","822","1878","3522","3566","4915","5053","5336"}'::int4[], + E'{"1","69","138","207","278","358","430","510","587","655","728","798","869","942","1011","1079","1148","1221","1293","1363","1436","1515","1590","1658","1727","1796","1869","1943","2011","2089","2164","2238","2309","2383","2458","2534","2607","2674","2744","2820","2896","2971","3050","3121","3192","3259","3330","3406","3478","3554","3622","3693","3766","3837","3910","3986","4059","4136","4203","4276","4352","4423","4495","4568","4638","4711","4786","4851","4924","4995","5071","5139","5209","5275","5348","5419","5491","5562","5630","5702","5783","5855","5928","6005","6074","6145","6221","6287","6362","6437","6509","6581","6652","6718","6791","6859","6925","6992","7067","7135","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_bill_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 7::smallint, + False::boolean, + 0.0049666665::real, + 4::integer, + 1046873.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.010069353}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"4","11125","22235","33070","44034","54814","66903","76551","86436","96499","107386","117375","127737","138201","149160","158550","169352","179553","191448","202662","213153","223343","232616","242533","253489","263641","274314","284608","294503","305542","316693","327046","337213","348029","358708","369038","379092","389216","399404","411658","421481","431880","442318","452462","463687","473855","484589","494142","504812","515093","525984","536447","546801","557909","568809","579887","590134","600989","611895","621827","631620","641611","653140","664172","674648","685363","696406","706802","717628","727362","737815","748416","758649","768984","779629","790315","800549","811382","821988","832542","842239","852925","861542","872217","882338","893425","903652","914043","925124","935145","946703","957135","966844","978263","987914","998584","1009037","1019530","1030620","1041099","1049900"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 8::smallint, + False::boolean, + 0.0044::real, + 4::integer, + 1988803.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.012593937}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"112","19457","38552","56966","77106","98752","120684","141455","163448","185974","205916","225714","246798","267145","288778","309669","331415","352688","373910","396777","417012","437984","458412","480601","503081","525455","546630","566430","585396","605761","627797","647297","667174","689078","710793","730789","751531","771586","793233","812933","836114","858314","878748","899241","919733","940900","960199","982017","1005759","1024900","1046467","1067416","1087759","1107005","1127271","1149614","1169010","1191761","1212083","1233029","1254014","1275851","1297280","1318761","1339872","1360476","1383115","1402788","1422877","1446083","1468587","1490686","1513016","1535950","1556692","1575347","1593894","1613402","1634582","1657027","1677173","1698221","1719408","1739440","1762772","1784881","1805037","1826722","1847883","1868042","1887771","1909652","1929728","1951115","1972152","1994703","2015691","2036799","2059398","2079650","2099910"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 9::smallint, + False::boolean, + 0.0047::real, + 4::integer, + 2111792.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0029372792}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"302","18991","38051","55457","73906","92142","111203","130054","150524","168838","188615","208305","226780","247275","267002","286332","305964","323539","341623","359088","378908","398275","417006","435648","456039","475587","494530","514681","534729","554637","572188","589663","608849","627139","645797","665116","684344","704227","724342","743953","761704","781964","800445","819537","838906","859432","878743","896384","916344","935630","954106","974012","992877","1010876","1030092","1047512","1067272","1087763","1106244","1123512","1143152","1162252","1181423","1201399","1221079","1241127","1262335","1281211","1300282","1317917","1338913","1359409","1379678","1399509","1419706","1437833","1458212","1478319","1498253","1517308","1537216","1555785","1574809","1593715","1614555","1632477","1652767","1671255","1689246","1707832","1727015","1745671","1764329","1783647","1803713","1823176","1843528","1863426","1881885","1901131","1920750"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 10::smallint, + False::boolean, + 0.0045::real, + 4::integer, + 7216.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00046666668, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{-0.0024474491}'::real[], + NULL::real[], + NULL::real[], + E'{"3639","952","4257","822","1910","4081","4594","4618","4915"}'::int4[], + E'{"1","73","142","207","280","358","430","508","582","649","721","795","869","944","1014","1083","1154","1229","1300","1373","1444","1523","1596","1662","1734","1808","1878","1946","2015","2092","2166","2242","2314","2390","2466","2538","2613","2681","2754","2829","2904","2980","3057","3130","3199","3265","3336","3409","3484","3555","3618","3692","3763","3836","3911","3985","4055","4135","4203","4280","4359","4429","4500","4572","4647","4723","4793","4861","4928","5004","5075","5142","5214","5279","5349","5422","5492","5565","5633","5704","5780","5856","5929","6005","6075","6144","6216","6286","6361","6433","6507","6577","6650","6717","6786","6857","6924","6990","7066","7134","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 11::smallint, + False::boolean, + 0.0044::real, + 4::integer, + 1106888.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0052251625}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"4","10372","21281","32604","43275","54281","66191","75977","85966","96475","106785","117107","127166","137473","148549","158449","169288","179404","191400","202566","212568","223050","231983","242203","252330","262987","273206","284036","293651","303573","314592","325696","336019","346020","357411","367567","377578","387371","397564","409384","419885","430219","441268","451283","462534","472729","482897","493068","503727","514241","524681","535657","546641","557534","568161","579186","589218","600063","610499","620727","630611","640167","650891","661771","672763","683715","694487","704971","715589","725727","735602","745905","755951","765867","776755","787045","798005","808059","818665","829654","840229","849950","859637","870300","880895","892234","902478","912694","923652","933902","945183","955649","965499","976354","986841","997088","1007946","1018197","1029945","1040884","1049912"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_call_center_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 12::smallint, + False::boolean, + 0.0049::real, + 4::integer, + 6.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.32786667, 0.1994, 0.13533333, 0.13273333, 0.1306, 0.06916667}'::real[], + '{0.21526349}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1","2","3","5","4","6"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_catalog_page_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 13::smallint, + False::boolean, + 0.0049333335::real, + 4::integer, + 5614.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0012666667, 0.0012666667, 0.0012333334, 0.0012, 0.0012, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009}'::real[], + NULL::real[], + '{0.050873112}'::real[], + NULL::real[], + NULL::real[], + E'{"164","5975","2104","135","4000","7906","2144","5962","5966","7944","7992","2111","2149","5954","6016","6032","6043","7900","7908","2053","2075","4051","7954","150","151","160","183","186","2062","2090","2114","4010","4052","4084","5959","6025","7929","7941","116","117","194","2060","2119","4076","4094","5964","5999","6011","6019","7917","7973","118","120","129","163","190","212","2077","2078","2091","2093","2148","2156","4047","4050","4068","4097","5979","6003","6007","6021","6034","7890","7909","7919","7921","7932","7938","7953","7960","141","157","176","182","214","2118","4016","4028","4053","4065","4073","4086","5961","6010","7911","7914","7922","7923","7936","7956"}'::int4[], + E'{"1","29","53","79","106","124","139","154","172","189","205","230","290","340","380","413","614","843","1009","1150","1945","1972","1996","2020","2047","2067","2083","2099","2115","2131","2145","2168","2227","2279","2318","2361","2605","2813","2989","3129","3896","3920","3945","3968","3994","4009","4024","4038","4056","4070","4085","4101","4153","4215","4252","4289","4400","4718","4887","5022","5155","5852","5878","5903","5927","5946","5963","5980","5992","6006","6026","6040","6078","6144","6189","6232","6381","6650","6829","6974","7101","7800","7825","7851","7879","7895","7913","7935","7955","7971","7986","8023","8080","8130","8168","8207","8515","8701","8861","8977","9827"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_ship_mode_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 14::smallint, + False::boolean, + 0.004766667::real, + 4::integer, + 20.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0517, 0.051333334, 0.0507, 0.050466668, 0.0504, 0.050166667, 0.050166667, 0.050066665, 0.049966667, 0.0499, 0.0499, 0.049733333, 0.049333334, 0.0493, 0.049133334, 0.049066667, 0.049066667, 0.04853333, 0.0485, 0.0478}'::real[], + '{0.05016106}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"10","4","5","15","7","14","20","12","9","3","6","2","1","18","8","17","19","16","13","11"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_warehouse_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 15::smallint, + False::boolean, + 0.0047::real, + 4::integer, + 5.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.2037, 0.20163333, 0.19836667, 0.19753334, 0.19406667}'::real[], + '{0.20946348}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"5","4","2","3","1"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_item_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 16::smallint, + False::boolean, + 0.0::real, + 4::integer, + 24934.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334}'::real[], + NULL::real[], + '{0.00087319454}'::real[], + NULL::real[], + NULL::real[], + E'{"2149","4123","7117","12451","15001","19603","20557","21523","22867","27235","55","841","2348","2545","4105","4159","4441","4843","5509","7513","7747","8827","9289","12031","13417","15541","15709","16730","18115","18805","18997","19495","20083","21073","23167","24679","26641"}'::int4[], + E'{"1","320","583","835","1138","1406","1673","1962","2264","2558","2845","3127","3446","3749","4031","4330","4573","4877","5173","5433","5703","5947","6237","6506","6775","7040","7307","7579","7873","8136","8404","8707","8984","9250","9532","9833","10123","10420","10678","10969","11250","11553","11826","12095","12364","12667","12956","13219","13486","13741","14042","14309","14602","14871","15161","15410","15665","15939","16212","16498","16763","17059","17351","17654","17945","18229","18514","18782","19059","19348","19609","19913","20198","20471","20743","21035","21331","21597","21883","22148","22442","22712","22966","23269","23567","23848","24106","24394","24668","24951","25221","25508","25796","26095","26365","26646","26927","27195","27461","27722","28000"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_promo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 17::smallint, + False::boolean, + 0.0049333335::real, + 4::integer, + 357.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0039333333, 0.0036666666, 0.0036333334, 0.0035666667, 0.0035, 0.0035, 0.0035, 0.0035, 0.0034666667}'::real[], + NULL::real[], + '{0.012315235}'::real[], + NULL::real[], + NULL::real[], + E'{"305","89","51","343","11","49","195","258","355"}'::int4[], + E'{"1","4","8","12","16","19","23","26","30","33","37","40","44","47","53","56","60","63","67","70","74","78","81","85","88","92","96","99","102","106","109","113","116","120","123","127","130","134","137","141","144","148","151","155","158","162","165","168","172","175","179","182","186","189","193","197","201","204","208","211","215","218","221","225","228","232","235","239","242","246","249","253","256","261","264","268","271","275","278","282","285","289","293","296","299","303","307","311","314","318","321","325","328","331","335","339","342","346","350","353","357"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_order_number +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 18::smallint, + False::boolean, + 0.0::real, + 8::integer, + -0.23808314::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 412::oid, + 412::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.05413773}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1093","796094","1645931","2488328","3262945","4034487","4856771","5589623","6321306","7127852","7844455","8614283","9422592","10337715","11178214","11967077","12806598","13604549","14347663","15135994","15897089","16779779","17630658","18360193","19209296","19976804","20750598","21564225","22330137","23141252","23995273","24745890","25625704","26406125","27188856","28177645","29033724","29834605","30623466","31397341","32181036","32930216","33726353","34526912","35320855","36048980","36922780","37717474","38626712","39479583","40217298","41019974","41831233","42654275","43505081","44324401","44976357","45709232","46482483","47262545","48002145","48800151","49567190","50315617","51133372","51910262","52699539","53463422","54279944","55035406","55746486","56570321","57449909","58231103","58998945","59766115","60653209","61448393","62271704","63090076","63926111","64814052","65684644","66478632","67319176","68037038","68897841","69676370","70424558","71249378","72010418","72811451","73574543","74362921","75127096","75960745","76739924","77534318","78299599","79159205","79998254"}'::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[]); +-- +-- Table: catalog_sales, Attribute: cs_quantity +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 19::smallint, + False::boolean, + 0.0044::real, + 4::integer, + 100.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0111, 0.0111, 0.011, 0.011, 0.0109, 0.010833333, 0.010833333, 0.010833333, 0.0108, 0.010666667, 0.010666667, 0.0106, 0.010566667, 0.010566667, 0.010533334, 0.010533334, 0.010533334, 0.0105, 0.010466667, 0.010433333, 0.010433333, 0.010366667, 0.010366667, 0.010366667, 0.010366667, 0.010366667, 0.010333333, 0.0103, 0.0103, 0.010266666, 0.010266666, 0.010266666, 0.0102, 0.0102, 0.0102, 0.0102, 0.0101666665, 0.0101666665, 0.0101666665, 0.0101333335, 0.0101333335, 0.0101, 0.0101, 0.010066667, 0.010033334, 0.010033334, 0.010033334, 0.01, 0.01, 0.009966667, 0.009966667, 0.009933333, 0.009933333, 0.009933333, 0.009933333, 0.009933333, 0.0099, 0.0099, 0.009866667, 0.009866667, 0.009833333, 0.009833333, 0.009833333, 0.009833333, 0.0098, 0.0098, 0.009766666, 0.009766666, 0.009733333, 0.009733333, 0.0097, 0.0097, 0.0097, 0.009666666, 0.009666666, 0.009666666, 0.0096, 0.009566667, 0.009533334, 0.009533334, 0.0095, 0.0095, 0.0095, 0.009466667, 0.009333333, 0.009266667, 0.009266667, 0.009233333, 0.009233333, 0.0092, 0.009133333, 0.009133333, 0.0091, 0.008933334, 0.008866667, 0.008833333, 0.0088, 0.0087, 0.0084, 0.0084}'::real[], + '{0.009663152}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"41","52","9","44","27","58","86","89","77","36","80","17","16","42","45","46","83","15","91","12","14","57","67","68","74","96","84","25","64","28","71","82","11","56","60","98","1","6","23","7","95","61","94","47","5","69","72","3","48","70","92","34","54","76","79","81","32","38","62","78","2","13","18","55","37","40","75","100","22","97","4","33","51","8","35","73","88","24","49","87","21","26","53","66","99","39","65","20","93","30","43","90","29","63","85","59","19","50","10","31"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: catalog_sales, Attribute: cs_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 20::smallint, + False::boolean, + 0.0042333333::real, + 6::integer, + 9853.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.00037631093}'::real[], + NULL::real[], + NULL::real[], + E'{"72.49","24.31","33.82","41.38","61.68","64.83","90.44","10.81","27.94","34.69","63.73","87.62","93.76","94.23"}'::numeric[], + E'{"1.00","1.97","2.96","3.92","4.94","5.97","7.01","7.93","8.86","9.79","10.76","11.74","12.69","13.67","14.71","15.61","16.55","17.55","18.59","19.64","20.69","21.72","22.70","23.70","24.74","25.76","26.74","27.83","28.84","29.88","30.96","31.96","32.90","33.95","34.88","35.82","36.86","37.79","38.78","39.75","40.65","41.59","42.57","43.46","44.53","45.59","46.66","47.73","48.74","49.72","50.69","51.60","52.56","53.41","54.44","55.38","56.44","57.38","58.32","59.33","60.46","61.51","62.59","63.51","64.50","65.52","66.49","67.40","68.34","69.30","70.25","71.22","72.19","73.17","74.18","75.21","76.17","77.18","78.10","79.08","80.07","81.02","81.93","82.86","83.87","84.82","85.83","86.83","87.81","88.79","89.69","90.75","91.71","92.69","93.69","94.73","95.80","96.89","97.92","99.02","100.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 21::smallint, + False::boolean, + 0.0047333334::real, + 6::integer, + 23623.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667}'::real[], + NULL::real[], + '{0.0011046942}'::real[], + NULL::real[], + NULL::real[], + E'{"11.59","52.87","62.87","64.43","87.47","95.88","96.45","99.51"}'::numeric[], + E'{"1.00","3.51","5.35","7.23","9.15","10.91","12.55","14.37","16.10","17.87","19.59","21.31","23.22","24.95","26.59","28.36","30.12","31.92","33.70","35.45","37.37","39.21","40.96","42.63","44.39","46.23","48.04","49.97","52.04","53.81","55.47","57.35","59.13","60.99","62.98","64.76","66.54","68.45","70.35","72.20","74.06","75.90","77.63","79.47","81.31","83.10","84.84","86.86","88.69","90.45","92.15","94.08","95.99","97.69","99.41","101.23","103.18","104.97","107.17","108.94","110.89","112.85","114.87","116.76","119.10","121.18","123.40","125.73","128.23","130.50","132.97","135.31","138.15","140.60","143.29","145.79","148.51","151.34","154.23","157.06","160.08","163.23","166.75","170.63","174.29","177.79","181.55","185.86","189.57","193.79","198.05","202.87","207.95","213.14","219.21","225.93","233.84","241.92","252.53","265.43","299.64"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 22::smallint, + False::boolean, + 0.0046666665::real, + 6::integer, + 14418.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.009733333, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{0.00090382085}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","4.11","1.12","1.14","1.19","1.41","2.07","3.47","0.45","0.86","0.99","1.11","1.66","1.79","2.22","2.36","4.79","5.00","5.07","19.14","0.34","0.77","0.98","1.17","1.38","1.39","1.53","1.60","2.13","2.14","2.41","2.70","2.91","3.55","5.02","0.32","0.61","0.81","1.02","1.20","1.63","1.78","1.83","1.98","2.16","2.57","2.58","2.63","2.71","2.82","3.02","3.07","3.31","3.49","4.09","4.70","5.83","6.20","6.42","6.65","6.71","6.81","7.47","7.73","8.32","8.90","11.94","13.00","23.92","25.86","0.52","0.60","0.68","0.83","0.85","0.90","0.92","1.00","1.03","1.22","1.40","1.42","1.52","1.62","1.70","1.89","1.90","1.92","1.95","1.99","2.08","2.45","2.48","2.80","2.85","2.86","3.05","3.57","3.58","4.26"}'::numeric[], + E'{"0.01","0.65","1.28","1.88","2.49","3.12","3.69","4.24","4.73","5.29","5.72","6.26","6.84","7.36","7.90","8.49","9.12","9.69","10.29","10.91","11.52","12.20","12.88","13.55","14.26","15.04","15.79","16.49","17.27","18.12","18.88","19.69","20.47","21.31","22.14","23.04","23.89","24.71","25.66","26.63","27.57","28.59","29.53","30.53","31.55","32.67","33.80","34.83","35.95","37.16","38.26","39.31","40.43","41.57","42.77","43.90","45.13","46.36","47.81","49.19","50.47","52.07","53.50","55.01","56.52","58.13","59.74","61.42","63.22","65.02","66.74","68.61","70.40","72.18","74.20","76.33","79.00","81.18","83.67","85.79","88.11","90.68","93.43","96.30","99.26","102.27","105.67","109.56","113.32","117.45","121.86","127.22","132.40","138.99","144.98","152.44","160.57","173.02","186.46","208.92","291.96"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_discount_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 23::smallint, + False::boolean, + 0.0044::real, + 6::integer, + 142728.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0095}'::real[], + NULL::real[], + '{-0.004464352}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.17","11.20","20.91","30.80","40.84","51.00","63.78","75.00","87.44","99.94","114.70","128.10","142.35","157.32","174.42","192.54","210.80","230.40","248.40","268.05","290.88","314.16","335.72","359.45","382.80","407.16","434.34","460.80","487.56","514.71","543.62","576.10","607.10","638.58","674.96","708.51","744.12","781.44","816.90","854.24","892.67","937.72","978.12","1024.92","1066.60","1115.40","1163.76","1213.44","1265.92","1319.64","1377.33","1435.50","1492.72","1553.06","1615.12","1676.76","1740.50","1811.01","1879.47","1944.96","2021.00","2099.24","2180.82","2254.08","2338.24","2431.94","2518.37","2613.97","2705.79","2811.90","2915.52","3030.87","3147.78","3268.80","3398.64","3537.80","3693.20","3853.00","4025.84","4178.16","4342.57","4533.75","4713.69","4897.32","5111.40","5372.25","5621.20","5899.18","6182.22","6506.64","6877.80","7259.75","7668.62","8199.00","8717.40","9363.69","10163.70","11203.92","12513.40","14893.36","26922.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=24; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 24::smallint, + False::boolean, + 0.0043666665::real, + 6::integer, + 142257.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.009733333, 0.0002, 0.0002, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.003978702}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","46.08","221.76","229.32","324.00"}'::numeric[], + E'{"0.12","10.50","20.06","29.43","40.50","50.88","62.55","73.71","86.88","99.80","112.70","127.52","143.62","159.84","176.54","195.30","213.76","232.57","250.81","273.00","293.44","314.88","338.10","359.04","380.19","405.00","429.60","451.68","477.47","502.86","527.96","553.70","584.44","614.88","648.96","678.59","714.00","752.49","789.24","832.00","873.60","918.00","961.62","1002.87","1045.32","1088.01","1138.32","1187.80","1240.32","1290.56","1343.52","1398.63","1453.80","1514.52","1579.89","1641.03","1707.15","1777.62","1850.16","1929.60","2006.40","2085.16","2172.12","2258.24","2346.43","2432.08","2522.40","2612.40","2716.00","2822.00","2941.68","3047.40","3167.66","3290.34","3408.50","3542.00","3672.90","3827.25","3964.16","4119.20","4284.36","4443.82","4620.28","4815.00","5049.41","5287.50","5540.15","5817.90","6091.80","6419.70","6763.11","7107.12","7533.20","7984.68","8549.10","9239.68","10028.92","11141.40","12375.32","14442.82","25866.02"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=25; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 25::smallint, + False::boolean, + 0.004466667::real, + 6::integer, + 199389.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0034636194}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.06","33.44","56.88","76.70","95.46","117.98","141.00","166.72","189.80","211.64","240.48","270.13","296.05","322.14","351.56","382.20","408.80","443.17","471.27","503.04","536.48","569.53","605.88","642.30","676.20","713.25","748.00","784.08","822.58","862.92","904.12","944.00","988.12","1033.94","1078.22","1125.57","1174.44","1219.20","1271.47","1321.32","1373.73","1424.13","1473.56","1523.06","1577.80","1632.80","1692.33","1751.88","1804.98","1865.64","1925.04","1986.64","2048.64","2112.36","2177.07","2241.60","2304.72","2377.20","2443.50","2515.50","2594.70","2670.36","2747.52","2824.00","2907.76","2981.60","3064.35","3151.04","3236.05","3335.04","3423.42","3510.24","3609.13","3694.74","3790.59","3900.42","3997.84","4093.60","4201.20","4315.14","4440.32","4580.68","4717.80","4850.32","4981.08","5120.57","5295.40","5446.35","5591.49","5754.84","5939.64","6145.90","6353.16","6573.59","6818.15","7085.50","7369.09","7709.87","8107.01","8627.71","9908.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=26; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 26::smallint, + False::boolean, + 0.0046::real, + 7::integer, + 360309.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0035410712}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.31","59.20","97.76","139.16","175.10","215.86","258.20","301.76","346.30","395.71","441.67","491.37","543.03","588.96","647.90","704.77","761.60","820.05","876.37","931.44","988.52","1051.24","1114.54","1179.42","1241.24","1315.60","1390.35","1465.83","1545.12","1616.40","1698.12","1773.90","1846.20","1925.82","1999.80","2079.66","2167.27","2254.16","2349.06","2439.60","2538.36","2639.88","2745.00","2842.88","2945.84","3061.35","3159.96","3268.20","3385.82","3497.60","3619.28","3731.16","3844.31","3972.32","4086.60","4223.18","4350.00","4491.60","4633.60","4772.85","4900.80","5039.44","5187.14","5331.15","5491.76","5659.20","5821.20","5993.74","6151.74","6324.80","6490.96","6680.54","6873.60","7073.04","7286.40","7516.05","7726.84","7955.22","8181.76","8428.98","8698.56","8945.39","9241.96","9521.28","9816.00","10132.22","10488.06","10859.64","11241.16","11644.83","12054.38","12542.40","13138.72","13710.72","14384.79","15172.80","16106.68","17329.62","18721.00","21017.28","28889.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=27; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 27::smallint, + False::boolean, + 0.004766667::real, + 6::integer, + 21954.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.10706667, 0.00063333334, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333}'::real[], + NULL::real[], + '{0.004360509}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","0.04","0.17","0.02","0.28","0.84","1.06","1.14","0.13","0.14","0.25","0.36","0.79","0.03","0.33","0.34","0.39","0.48","0.90","0.91","1.10","0.08","0.09","0.18","0.42","0.45","0.54","1.25","1.40","1.41","0.07","0.30","0.32","0.50","0.63","0.78","0.93","1.56","1.58","2.01","2.83","4.17","4.23","5.38","0.01","0.05","0.06","0.23","0.35","0.37","0.44","0.51","0.65","0.66","0.69","0.72","0.92","1.07","1.20","1.91","2.25","2.35","2.39","2.49","2.59","2.61","2.84","3.46","5.14","0.11","0.12","0.29","0.31","0.55","0.64","0.86","0.94","0.97","1.04","1.11","1.27","1.34","1.72","1.74","1.82","2.07","2.41","2.63","3.16","3.22","3.31","4.24","4.37","4.50","4.67","6.56","7.04","7.48","9.72","0.20"}'::numeric[], + E'{"0.10","0.76","1.28","1.69","2.10","2.54","3.00","3.45","3.87","4.42","4.93","5.42","5.92","6.50","7.06","7.75","8.39","9.02","9.63","10.39","11.20","12.02","12.86","13.70","14.51","15.26","16.17","17.18","18.15","19.08","20.18","21.20","22.36","23.50","24.63","25.72","26.96","28.39","29.87","31.24","32.78","34.20","35.67","37.38","39.11","41.00","42.83","44.65","46.61","48.72","50.66","53.20","55.29","57.88","60.49","63.18","66.04","69.09","72.25","75.29","78.51","82.02","85.29","89.36","92.98","96.95","101.40","105.70","110.69","116.16","120.93","126.18","131.91","137.88","143.80","151.06","157.08","164.57","172.99","181.14","190.17","200.65","210.92","221.02","232.90","244.78","259.12","273.65","291.32","310.11","330.23","353.23","380.19","411.93","449.37","493.85","546.42","616.37","721.39","893.95","2142.09"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_coupon_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=28; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 28::smallint, + False::boolean, + 0.0052333334::real, + 3::integer, + 6889.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.80296665}'::real[], + NULL::real[], + '{0.6553299}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.01","2.20","4.55","7.28","10.58","14.36","17.92","22.46","25.33","29.09","32.44","36.89","41.40","45.19","49.75","55.22","62.09","68.46","74.86","81.76","91.57","99.10","106.96","114.24","121.21","127.94","137.96","148.71","157.54","170.28","181.68","193.93","204.76","214.01","227.90","241.64","255.16","269.95","283.85","297.98","314.58","330.18","348.86","367.79","387.60","402.79","419.99","435.31","461.47","484.00","509.09","533.90","558.08","588.06","619.44","645.35","672.88","700.29","729.03","760.23","796.67","836.28","873.12","909.36","951.28","1008.91","1061.09","1112.98","1155.96","1201.35","1259.28","1324.66","1399.44","1477.63","1548.31","1632.65","1703.81","1774.10","1847.07","1944.10","2036.97","2136.30","2215.42","2317.48","2479.32","2652.32","2791.40","2968.30","3152.68","3345.17","3578.36","3851.51","4127.20","4451.55","4914.34","5421.31","6009.40","6794.45","7819.40","9995.94","21255.41"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_ext_ship_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=29; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 29::smallint, + False::boolean, + 0.0045::real, + 6::integer, + 81417.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0188, 0.0003, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.0046927556}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","124.80","123.20","39.60","54.00","79.80","138.60","216.72","14.00","23.40","45.60","48.30","73.44","82.80","83.52","128.64","148.50","201.60","369.60"}'::numeric[], + E'{"0.01","5.94","11.44","16.77","22.24","28.70","34.72","40.68","46.76","54.04","61.00","68.16","76.50","85.26","94.55","103.02","111.44","121.44","132.24","143.40","153.90","165.76","177.65","188.67","201.11","212.38","224.93","238.72","252.96","266.76","282.10","299.12","315.56","331.39","347.22","363.12","379.85","399.00","416.25","434.16","453.96","475.60","497.55","521.70","543.90","568.03","592.20","618.64","644.00","669.06","697.92","724.13","755.70","784.09","816.31","849.52","882.75","915.75","950.25","987.00","1022.35","1059.10","1097.07","1144.50","1187.60","1237.04","1284.01","1339.45","1388.34","1443.94","1496.00","1543.70","1598.74","1656.20","1727.70","1794.60","1866.41","1936.12","2007.84","2091.57","2178.28","2270.17","2367.40","2465.85","2573.55","2691.00","2809.66","2948.40","3100.80","3253.56","3417.26","3620.70","3826.12","4070.04","4341.72","4685.14","5057.36","5597.70","6345.93","7552.84","14029.29"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_paid +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=30; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 30::smallint, + False::boolean, + 0.0045666667::real, + 6::integer, + 155617.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.011266666, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.0071978415}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","221.76","267.30"}'::numeric[], + E'{"0.04","6.30","13.46","20.10","27.38","36.00","45.37","54.42","64.17","74.16","84.95","95.83","107.47","120.56","133.68","147.52","161.55","176.09","192.62","209.85","225.68","242.40","260.64","280.40","299.63","319.88","342.68","361.62","383.67","407.20","430.95","452.40","478.20","502.86","526.93","551.28","580.65","609.84","645.84","672.01","705.60","742.28","777.65","819.77","859.65","905.32","946.21","988.00","1030.29","1072.29","1120.20","1169.28","1222.48","1277.88","1335.95","1393.40","1452.30","1510.88","1577.52","1643.88","1712.18","1783.60","1864.20","1941.02","2021.80","2110.48","2194.50","2288.80","2382.00","2480.31","2575.77","2686.53","2796.40","2918.30","3030.33","3153.62","3270.28","3405.85","3555.37","3689.67","3856.30","4006.50","4182.84","4362.48","4551.55","4780.32","5045.92","5298.28","5580.25","5880.00","6219.92","6583.20","6993.36","7441.75","7943.75","8616.00","9434.75","10515.84","11757.96","14014.08","25785.76"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_paid_inc_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=31; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 31::smallint, + False::boolean, + 0.004766667::real, + 6::integer, + 266415.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.011266666}'::real[], + NULL::real[], + '{-0.007137176}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","6.57","13.94","21.03","28.62","37.23","47.06","56.65","66.91","77.14","88.19","99.88","111.66","125.70","139.15","153.96","167.98","183.70","200.51","218.37","234.41","252.12","271.21","292.28","311.64","332.88","354.70","376.40","397.68","423.75","447.30","472.27","496.81","520.51","546.40","573.95","604.97","637.86","669.29","702.85","736.56","771.82","808.78","850.00","894.59","941.49","983.86","1030.60","1072.51","1120.44","1164.50","1218.82","1276.89","1328.94","1392.76","1450.62","1515.35","1577.79","1642.09","1715.87","1785.64","1867.43","1945.94","2025.64","2113.90","2200.02","2292.15","2386.61","2484.22","2590.13","2687.89","2800.02","2917.72","3043.84","3167.64","3291.60","3406.12","3562.87","3712.26","3872.48","4020.94","4187.61","4364.95","4559.15","4755.57","4989.93","5272.48","5532.24","5829.06","6143.38","6489.24","6878.77","7303.39","7746.09","8295.79","9014.30","9837.86","11001.37","12381.74","14679.09","26662.34"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_paid_inc_ship +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=32; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 32::smallint, + False::boolean, + 0.0::real, + 7::integer, + 280640.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0071525415}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"0.00","23.85","47.34","67.95","89.80","110.58","132.44","153.00","179.04","202.51","229.06","255.64","281.80","311.22","340.96","371.09","403.00","434.83","466.69","497.15","530.10","562.00","593.67","628.20","664.69","704.00","739.88","780.85","825.34","866.72","907.27","949.41","994.16","1044.45","1096.50","1144.92","1195.21","1250.15","1305.36","1361.76","1416.36","1475.91","1536.25","1598.70","1665.83","1732.92","1800.90","1873.10","1941.75","2016.72","2092.86","2175.34","2253.86","2345.76","2434.51","2518.72","2608.45","2696.29","2793.56","2894.40","2985.12","3079.88","3181.62","3294.00","3407.10","3528.30","3649.14","3775.68","3899.28","4033.51","4169.60","4307.38","4456.66","4620.28","4793.89","4963.42","5138.76","5318.80","5502.90","5715.60","5907.94","6131.28","6356.80","6629.70","6889.46","7169.33","7478.59","7780.37","8131.05","8498.52","8903.58","9369.99","9838.92","10426.64","11123.84","11986.61","13051.50","14332.97","16169.95","19117.60","36471.09"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_paid_inc_ship_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=33; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 33::smallint, + False::boolean, + 0.0::real, + 7::integer, + 613201.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.00728921}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"0.00","24.55","48.62","69.15","91.91","112.84","135.45","157.97","183.66","207.27","233.71","261.95","289.12","318.33","350.11","381.22","413.11","444.48","477.58","508.92","542.83","576.18","609.45","644.62","682.66","719.94","759.00","801.51","845.42","887.38","930.05","971.99","1022.12","1070.40","1121.18","1175.11","1228.42","1282.74","1334.77","1397.05","1456.76","1508.61","1575.93","1641.47","1709.47","1778.38","1844.93","1917.32","1990.71","2063.03","2147.81","2231.80","2316.78","2402.40","2493.91","2591.15","2678.00","2770.78","2865.32","2974.50","3066.56","3162.22","3269.67","3378.18","3496.07","3622.04","3743.00","3878.25","4003.40","4149.54","4287.78","4434.50","4591.26","4750.74","4944.45","5105.41","5289.66","5467.44","5660.87","5871.93","6090.64","6310.11","6551.52","6808.71","7096.07","7374.30","7678.33","8022.91","8355.36","8765.02","9187.25","9660.31","10158.98","10789.68","11521.51","12322.88","13498.43","14789.11","16663.22","19689.06","37177.23"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: catalog_sales, Attribute: cs_net_profit +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=34; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 34::smallint, + False::boolean, + 0.0::real, + 6::integer, + 206524.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0003, 0.0002}'::real[], + NULL::real[], + '{-0.0019606797}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","-47.52"}'::numeric[], + E'{"-9478.75","-6317.17","-5427.84","-4811.17","-4310.01","-3964.66","-3670.14","-3411.00","-3196.27","-2980.12","-2792.84","-2624.60","-2471.95","-2325.60","-2192.15","-2061.36","-1940.00","-1830.51","-1735.50","-1637.76","-1537.14","-1452.35","-1375.59","-1298.36","-1224.32","-1155.27","-1092.42","-1022.40","-963.48","-909.46","-846.45","-791.42","-741.60","-693.68","-651.75","-611.00","-571.48","-529.55","-492.82","-458.06","-424.16","-393.25","-361.82","-332.56","-302.38","-277.25","-248.65","-223.78","-199.01","-180.17","-158.72","-138.32","-121.68","-105.41","-89.61","-74.48","-59.72","-46.63","-35.01","-23.56","-13.29","-4.92","3.90","16.20","29.60","44.02","63.55","84.33","106.65","130.83","159.30","193.63","231.83","274.32","317.52","364.48","414.57","470.10","538.53","608.95","685.44","768.20","856.98","953.40","1053.60","1164.76","1294.00","1444.00","1596.00","1771.35","1966.12","2176.68","2427.26","2738.40","3132.80","3548.87","4041.96","4805.58","5798.10","7455.03","16965.90"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: customer, Attribute: c_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 1::smallint, + False::boolean, + 0.0::real, + 4::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.09763528}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"9","21261","42021","62080","82255","103369","125043","144232","165965","190286","211001","230315","251065","272203","292790","312482","334187","353856","373058","396690","415673","436316","456746","480529","502046","524523","546632","568546","589481","610972","631185","654707","675842","698400","718405","739653","760815","781559","803530","825502","846209","866622","888173","908015","929893","950771","971557","991734","1015944","1037799","1059421","1080667","1101711","1122753","1142324","1163272","1183361","1204818","1225216","1247329","1269800","1290928","1313000","1333417","1354039","1374731","1393758","1413066","1434044","1455682","1476112","1499430","1518599","1539394","1559012","1578764","1600604","1620632","1642082","1661234","1681629","1701960","1723759","1745015","1765218","1786153","1808002","1827671","1848579","1869421","1889087","1911370","1931677","1953626","1974278","1994274","2014813","2037922","2058859","2079452","2099872"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_customer_id +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 2::smallint, + False::boolean, + 0.0::real, + 17::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.008318781}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"AAAAAAAAAAABNBAA","AAAAAAAAACGBGAAA","AAAAAAAAAELNKBAA","AAAAAAAAAHEPIBAA","AAAAAAAAAJKFCAAA","AAAAAAAAAMDPPBAA","AAAAAAAAAOPLIAAA","AAAAAAAABBKGGAAA","AAAAAAAABEDPKBAA","AAAAAAAABGMDNAAA","AAAAAAAABJECAAAA","AAAAAAAABMDEJBAA","AAAAAAAABONCCAAA","AAAAAAAACBEIBBAA","AAAAAAAACDPKGBAA","AAAAAAAACGLFEAAA","AAAAAAAACJEIMAAA","AAAAAAAACMCDAAAA","AAAAAAAACOLBDBAA","AAAAAAAADBIDOAAA","AAAAAAAADEGFPBAA","AAAAAAAADGPJIAAA","AAAAAAAADJHBOAAA","AAAAAAAADMAFGAAA","AAAAAAAADOHCCAAA","AAAAAAAAEAOAEBAA","AAAAAAAAEDNGDBAA","AAAAAAAAEGIFIAAA","AAAAAAAAEJAMPBAA","AAAAAAAAELLKDAAA","AAAAAAAAEOCLPAAA","AAAAAAAAFAINOAAA","AAAAAAAAFDBIJBAA","AAAAAAAAFFHIMBAA","AAAAAAAAFHPMHAAA","AAAAAAAAFKIAPBAA","AAAAAAAAFNCOBAAA","AAAAAAAAFPKHLAAA","AAAAAAAAGCDNHAAA","AAAAAAAAGEJHIBAA","AAAAAAAAGHBCCAAA","AAAAAAAAGJJENBAA","AAAAAAAAGMCKCAAA","AAAAAAAAGOMBABAA","AAAAAAAAHBIPLBAA","AAAAAAAAHDPAKAAA","AAAAAAAAHGJCKBAA","AAAAAAAAHJALPAAA","AAAAAAAAHLOFPAAA","AAAAAAAAHOHAAAAA","AAAAAAAAIAOACBAA","AAAAAAAAIDGNKAAA","AAAAAAAAIGCCNBAA","AAAAAAAAIIMJAAAA","AAAAAAAAILNBOBAA","AAAAAAAAIOCOJBAA","AAAAAAAAJAIBNBAA","AAAAAAAAJDBAABAA","AAAAAAAAJFFOFBAA","AAAAAAAAJICEDBAA","AAAAAAAAJKILJBAA","AAAAAAAAJMOJNBAA","AAAAAAAAJPEMKBAA","AAAAAAAAKBMKDBAA","AAAAAAAAKEDLDAAA","AAAAAAAAKGMFDBAA","AAAAAAAAKJJJCBAA","AAAAAAAAKMAFLBAA","AAAAAAAAKOGELBAA","AAAAAAAALAOCABAA","AAAAAAAALDGGLAAA","AAAAAAAALGAJJBAA","AAAAAAAALIJMEAAA","AAAAAAAALKOLOBAA","AAAAAAAALNFAKBAA","AAAAAAAALPKMDBAA","AAAAAAAAMCDMMBAA","AAAAAAAAMELNCBAA","AAAAAAAAMHFNBBAA","AAAAAAAAMJMFPBAA","AAAAAAAAMMGBFAAA","AAAAAAAAMPBPFAAA","AAAAAAAANBJMLAAA","AAAAAAAANECPPBAA","AAAAAAAANHBEAAAA","AAAAAAAANJIOCBAA","AAAAAAAANMDCBAAA","AAAAAAAANPAGFBAA","AAAAAAAAOBIDJBAA","AAAAAAAAODNGFAAA","AAAAAAAAOGECJBAA","AAAAAAAAOINLGAAA","AAAAAAAAOLGCEBAA","AAAAAAAAONPNAAAA","AAAAAAAAPAKLGAAA","AAAAAAAAPDDNKAAA","AAAAAAAAPFNALBAA","AAAAAAAAPIFFFAAA","AAAAAAAAPLABOAAA","AAAAAAAAPNGKCBAA","AAAAAAAAPPPOAAAA"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_current_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 3::smallint, + False::boolean, + 0.036333334::real, + 4::integer, + -0.50137764::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0013170508}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"83","18955","39087","58094","75845","95317","115100","134187","152171","172644","193010","211552","231710","251817","270655","288181","306995","323507","344088","362797","382712","404200","423621","442226","460401","479260","497142","517339","536731","556732","574796","592497","612826","632068","650345","670861","690813","710439","729562","747865","768032","784796","804004","823342","840808","862022","880748","899717","920319","938794","957931","976962","994731","1014023","1033686","1051262","1072185","1092147","1113436","1132849","1151543","1170064","1188829","1208390","1228056","1247895","1268450","1286523","1306787","1325642","1344821","1361249","1380841","1399617","1418271","1436735","1456195","1476598","1496520","1514478","1535680","1554729","1573897","1593768","1614360","1634204","1654338","1672759","1691901","1711514","1731470","1749749","1767712","1787017","1807176","1824761","1843120","1863530","1883265","1901706","1920535"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_current_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 4::smallint, + False::boolean, + 0.0347::real, + 4::integer, + 7192.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.00030779035}'::real[], + NULL::real[], + NULL::real[], + E'{"882","1308","3965","367","666","1327","6987"}'::int4[], + E'{"1","72","141","218","292","372","440","506","579","647","728","799","868","940","1006","1081","1151","1224","1294","1368","1432","1502","1576","1650","1728","1803","1873","1941","2024","2095","2168","2245","2318","2395","2472","2542","2617","2682","2751","2823","2897","2969","3041","3110","3179","3248","3319","3390","3457","3520","3590","3657","3725","3801","3881","3954","4024","4098","4179","4251","4312","4383","4451","4522","4604","4674","4745","4814","4885","4954","5024","5095","5171","5245","5317","5386","5452","5523","5591","5664","5732","5805","5883","5956","6025","6099","6170","6241","6316","6392","6464","6534","6610","6685","6756","6829","6900","6980","7059","7129","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_current_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 5::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.32888332::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0058509638}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"52","10026","21386","32663","42941","53021","65083","75763","86063","96263","107445","117990","127743","138145","147534","158592","168713","178593","188864","199238","210017","220563","231187","241437","252281","263159","273251","284057","295058","305713","315928","326018","336613","346947","357443","368266","378995","388655","399147","410310","419835","429767","442179","452745","463314","473270","483327","494816","505073","515313","525490","536085","546403","556179","567315","577096","587145","597369","608015","619292","629700","640103","651254","661172","671946","681745","691688","702105","712203","721654","733295","743331","753425","764850","774949","785116","795978","806368","817723","827531","838047","849099","859705","870677","881136","891818","902438","912558","922958","933355","943287","953511","964298","974663","985836","996922","1007782","1017952","1029639","1040067","1049984"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_first_shipto_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 6::smallint, + False::boolean, + 0.035633333::real, + 4::integer, + 3649.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665}'::real[], + NULL::real[], + '{-0.0058256034}'::real[], + NULL::real[], + NULL::real[], + E'{"2450039","2451757","2449267","2449566","2449608","2450648","2450973","2451697","2452197"}'::int4[], + E'{"2449028","2449061","2449097","2449131","2449163","2449198","2449239","2449274","2449311","2449346","2449381","2449417","2449457","2449492","2449530","2449568","2449601","2449635","2449669","2449706","2449746","2449780","2449818","2449857","2449893","2449930","2449972","2450009","2450045","2450081","2450118","2450155","2450194","2450228","2450265","2450301","2450337","2450372","2450407","2450444","2450483","2450523","2450560","2450594","2450633","2450672","2450708","2450743","2450779","2450812","2450853","2450890","2450930","2450969","2451005","2451044","2451078","2451114","2451147","2451184","2451221","2451261","2451295","2451334","2451370","2451411","2451449","2451486","2451523","2451560","2451594","2451627","2451664","2451702","2451740","2451774","2451810","2451846","2451879","2451918","2451954","2451991","2452028","2452063","2452099","2452135","2452172","2452207","2452242","2452277","2452312","2452352","2452389","2452429","2452461","2452495","2452530","2452566","2452602","2452640","2452678"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_first_sales_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 7::smallint, + False::boolean, + 0.034733333::real, + 4::integer, + 3650.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665}'::real[], + NULL::real[], + '{-0.008479864}'::real[], + NULL::real[], + NULL::real[], + E'{"2450009","2451727","2449237","2449536","2450618","2450943","2451260","2451667","2452039","2452167"}'::int4[], + E'{"2448998","2449032","2449067","2449101","2449135","2449170","2449209","2449245","2449281","2449317","2449352","2449389","2449428","2449463","2449500","2449537","2449571","2449603","2449637","2449673","2449713","2449747","2449785","2449823","2449859","2449897","2449940","2449977","2450013","2450049","2450084","2450121","2450161","2450196","2450234","2450270","2450306","2450341","2450375","2450412","2450450","2450489","2450526","2450562","2450599","2450638","2450674","2450708","2450743","2450778","2450819","2450854","2450894","2450934","2450971","2451008","2451044","2451079","2451114","2451151","2451188","2451226","2451263","2451301","2451338","2451379","2451417","2451453","2451492","2451528","2451561","2451594","2451629","2451669","2451706","2451741","2451776","2451811","2451845","2451884","2451921","2451957","2451993","2452029","2452067","2452104","2452140","2452175","2452211","2452245","2452281","2452322","2452358","2452398","2452431","2452465","2452501","2452536","2452573","2452610","2452648"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_salutation +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 8::smallint, + False::boolean, + 0.035633333::real, + 4::integer, + 6.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.2827, 0.16666667, 0.166, 0.117466666, 0.11726667, 0.114266664}'::real[], + '{0.19105348}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"Dr.","Mr.","Sir","Miss","Mrs.","Ms."}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_first_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 9::smallint, + False::boolean, + 0.0351::real, + 6::integer, + 2938.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.019733334, 0.0178, 0.0177, 0.014733333, 0.013333334, 0.012866667, 0.011166667, 0.0086, 0.008466667, 0.0082, 0.006, 0.0059666666, 0.0059666666, 0.0055, 0.0055, 0.0053666667, 0.0053, 0.0053, 0.0051, 0.0049666665, 0.0049, 0.0049, 0.0047, 0.0045, 0.0042, 0.004166667, 0.0041333335, 0.0040666666, 0.0039666668, 0.0039333333, 0.0039333333, 0.0038666667, 0.0038666667, 0.0038333333, 0.0038333333, 0.0038, 0.0038, 0.0037333334, 0.0036666666, 0.0035, 0.0035, 0.0034666667, 0.0034333332, 0.0034333332, 0.0033666666, 0.0033666666, 0.0033333334, 0.0031666667, 0.0031, 0.0031, 0.0030666667, 0.003, 0.0029666666, 0.0029666666, 0.0028666668, 0.0028333333, 0.0028333333, 0.0028, 0.0027666667, 0.0027, 0.0027, 0.0026666666, 0.0026333334, 0.0026333334, 0.0026, 0.0026, 0.0025666666, 0.0025666666, 0.0025, 0.0024666667, 0.0024666667, 0.0024333333, 0.0024, 0.0024, 0.0023666667, 0.0023333333, 0.0023333333, 0.0023333333, 0.0022666666, 0.0022333334, 0.0022333334, 0.0022, 0.0022, 0.0022, 0.0021666666, 0.0021666666, 0.0021666666, 0.0021666666, 0.0021666666, 0.0021333334, 0.0020666667, 0.0020666667, 0.0020666667, 0.0020333333, 0.002, 0.0019666667, 0.0019666667, 0.0019333333, 0.0019, 0.0018666667}'::real[], + NULL::real[], + '{0.0041609285}'::real[], + NULL::real[], + NULL::real[], + E'{"John","James","Robert","Michael","David","William","Richard","Joseph","Charles","Thomas","Christopher","Linda","Mark","Daniel","Donald","Jennifer","Elizabeth","George","Barbara","Kenneth","Margaret","Paul","Dorothy","Edward","Susan","Brian","Jason","Lisa","Steven","Gary","Ronald","Anthony","Larry","Karen","Sandra","Helen","Matthew","Nancy","Kevin","Andrew","Eric","Sharon","Donna","Jeffrey","Betty","Timothy","Raymond","Jose","Frank","Jessica","Angela","Ruth","Melissa","Rebecca","Anna","Gloria","Laura","Stephen","Amy","Brenda","Cynthia","Deborah","Pamela","Patrick","Martha","Virginia","Michelle","Sarah","Diane","Joshua","Kimberly","Ann","Arthur","Scott","Douglas","Christine","Gregory","Harold","Katherine","Dennis","Joyce","Alice","Janet","Stephanie","Jerry","Kathleen","Marie","Peter","Theresa","Walter","Albert","Amanda","Teresa","Debra","Jonathan","Fred","Keith","Willie","Gerald","Lori"}'::varchar[], + E'{"Aaron","Adrienne","Alexander","Allyson","Andrea","Anne","April","Audrey","Benjamin","Bessie","Billy","Bradley","Brigitte","Caitlyn","Carlos","Carrie","Cecelia","Charlotte","Christian","Clara","Clifton","Cornelius","Cyrus","Danny","Dawn","Delta","Diana","Dora","Earl","Edna","Elena","Elsie","Erika","Ethel","Evelyn","Fleta","Freddie","Georgia","Glen","Gregorio","Hattie","Henriette","Homer","Ingrid","Jack","Jaleesa","Janis","Jed","Jerome","Jimmie","Joe","Jon","Juan","Julia","Justin","Kathy","Kerry","Kurt","Lavon","Leo","Letitia","Lois","Louis","Luis","Mae","Marco","Marilynn","Martin","Maurice","Melvin","Mike","Mitchell","Naomi","Nicholas","Norma","Oscar","Pauline","Phillip","Rachel","Randy","Renee","Robbie","Roger","Rose","Roy","Sabrina","Sara","Sharlene","Sherry","Stanley","Suzi","Tanya","Terry","Tina","Tonya","Tyrone","Veronica","Viola","Warren","Willian","Zulma"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_last_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 10::smallint, + False::boolean, + 0.033933334::real, + 7::integer, + 4529.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.015133333, 0.011733334, 0.011033333, 0.009233333, 0.008533333, 0.008166667, 0.0059666666, 0.0048666666, 0.0048, 0.0047, 0.0046333335, 0.0046333335, 0.0043666665, 0.0043, 0.0041333335, 0.004, 0.0039666668, 0.0039, 0.0039, 0.0037333334, 0.0036333334, 0.0032666668, 0.0031666667, 0.0031333333, 0.0030666667, 0.003, 0.003, 0.0029, 0.0029, 0.0027666667, 0.0027333333, 0.0027333333, 0.0027, 0.0026333334, 0.0026333334, 0.0026333334, 0.0026, 0.0026, 0.0026, 0.0025666666, 0.0025, 0.0024666667, 0.0024333333, 0.0023666667, 0.0023666667, 0.0023333333, 0.0022, 0.0022, 0.0021333334, 0.0021333334, 0.0021333334, 0.0020666667, 0.0020333333, 0.0019, 0.0019, 0.0018666667, 0.0018666667, 0.0018333333, 0.0018, 0.0017666667, 0.0017666667, 0.0017666667, 0.0017333333, 0.0017333333, 0.0017333333, 0.0017333333, 0.0017, 0.0016666667, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016, 0.0016, 0.0016, 0.0015666666, 0.0015666666, 0.0015333333, 0.0015333333, 0.0015333333, 0.0015333333, 0.0015, 0.0015, 0.0015, 0.0015, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014333334, 0.0014333334, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333}'::real[], + NULL::real[], + '{0.0012389864}'::real[], + NULL::real[], + NULL::real[], + E'{"Smith","Johnson","Williams","Jones","Brown","Davis","Miller","Taylor","Thomas","Jackson","Moore","Wilson","Garcia","Anderson","Martin","Walker","Harris","Martinez","Robinson","Thompson","White","Young","Wright","Lee","Lewis","Hall","King","Rodriguez","Turner","Nelson","Allen","Hill","Roberts","Carter","Clark","Gonzalez","Adams","Hernandez","Scott","Campbell","Lopez","Baker","Green","Bell","Evans","Bailey","Rogers","Torres","Mitchell","Morgan","Stewart","Perez","Edwards","Collins","Sanchez","Morris","Phillips","Gray","Parker","Cox","Reed","Rivera","Brooks","Diaz","Richardson","Watson","Washington","Perry","Murphy","Patterson","Ross","Bryant","Cooper","Kelly","Henderson","Howard","Cook","James","Peterson","Simmons","Long","Mason","Russell","Wood","Gonzales","Murray","Price","Ramirez","Ward","Hughes","Myers","Barnes","Daniels","Harrison","Alexander","Bennett","Ford","Graham","Burns","Powell"}'::varchar[], + E'{"Aaron","Allison","Armstrong","Ayala","Barlow","Baxter","Benson","Black","Bonilla","Boyer","Bright","Burdick","Butler","Cano","Carroll","Chambers","Chinn","Coats","Comer","Correa","Creech","Cupp","Davies","Dent","Donovan","Duffy","Eaton","Enriquez","Farrington","Fink","Flynn","Frank","Fuller","Garrett","Gibson","Golding","Graves","Gross","Hale","Hardaway","Harvey","Heard","Herrera","Hobbs","Holt","Howe","Hunter","Jacobs","Johnston","Keller","Kirby","Kurtz","Larkin","Ledoux","Lindsey","Lowe","Mack","Markley","May","Mccormick","Mcgrath","Mcneil","Mercier","Moffitt","Morrison","Nagel","Nichols","Ocampo","Orozco","Padilla","Patton","Perkins","Pinto","Pratt","Raines","Reece","Rhodes","Ritter","Roman","Ruby","Salinas","Saylor","Seiler","Shepherd","Simpson","Snyder","Sperry","Stephens","Strickland","Sweeney","Thornton","Trejo","Valencia","Vernon","Walls","Weaver","West","Wiley","Winters","Worsham","Zuniga"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_preferred_cust_flag +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 11::smallint, + False::boolean, + 0.03533333::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.49123332, 0.47343335}'::real[], + '{0.4982882}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: customer, Attribute: c_birth_day +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 12::smallint, + False::boolean, + 0.0334::real, + 4::integer, + 31.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0341, 0.0336, 0.0335, 0.033166666, 0.0326, 0.032266665, 0.032233335, 0.0321, 0.031933334, 0.0319, 0.0319, 0.0319, 0.031866666, 0.031833332, 0.031833332, 0.0317, 0.031533334, 0.031533334, 0.0315, 0.031466667, 0.031166667, 0.0311, 0.030966667, 0.030733334, 0.0307, 0.030533334, 0.030066667, 0.029833334, 0.029666666, 0.028233333, 0.019133333}'::real[], + '{0.03440461}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"27","15","26","5","10","23","21","19","14","6","7","18","12","13","24","17","16","22","1","25","8","11","9","3","28","4","29","2","20","30","31"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_birth_month +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 13::smallint, + False::boolean, + 0.0355::real, + 4::integer, + 12.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.08296666, 0.0828, 0.0826, 0.082166664, 0.08143333, 0.08093333, 0.079966664, 0.079733334, 0.079166666, 0.0789, 0.07836667, 0.07546667}'::real[], + '{0.08591734}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3","1","8","7","9","10","5","6","12","4","11","2"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_birth_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 14::smallint, + False::boolean, + 0.036066666::real, + 4::integer, + 69.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0158, 0.015133333, 0.0151, 0.0150666665, 0.014966667, 0.014966667, 0.014966667, 0.014966667, 0.0148, 0.014766667, 0.014733333, 0.0147, 0.0146, 0.0146, 0.014566666, 0.014366667, 0.014366667, 0.014366667, 0.014333333, 0.014333333, 0.0143, 0.014266667, 0.014266667, 0.014266667, 0.014233333, 0.0142, 0.014166667, 0.014166667, 0.014066666, 0.014066666, 0.014033333, 0.014033333, 0.014, 0.013966667, 0.013966667, 0.013966667, 0.013933334, 0.013933334, 0.013933334, 0.013866667, 0.013866667, 0.0138, 0.0138, 0.013733333, 0.013733333, 0.013666667, 0.0136, 0.0135, 0.0135, 0.013466666, 0.0134333335, 0.0134333335, 0.0134, 0.013366667, 0.013366667, 0.013266667, 0.013266667, 0.013266667, 0.013266667, 0.0132, 0.0131, 0.0131, 0.013066667, 0.013066667, 0.013033333, 0.013033333, 0.012933333, 0.012833334, 0.0127}'::real[], + '{0.023301385}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1940","1978","1935","1970","1955","1957","1959","1990","1988","1925","1956","1987","1972","1985","1946","1926","1932","1933","1929","1979","1968","1930","1951","1961","1975","1966","1953","1971","1939","1977","1941","1991","1960","1937","1948","1952","1927","1938","1962","1964","1976","1958","1986","1924","1928","1965","1983","1942","1963","1931","1944","1945","1984","1934","1954","1947","1980","1981","1989","1982","1950","1969","1973","1974","1936","1949","1943","1967","1992"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: customer, Attribute: c_birth_country +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 15::smallint, + False::boolean, + 0.035633333::real, + 9::integer, + 211.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.0056666667, 0.0055333334}'::real[], + NULL::real[], + '{0.013934988}'::real[], + NULL::real[], + NULL::real[], + E'{"GEORGIA","GREENLAND"}'::varchar[], + E'{"AFGHANISTAN","ALBANIA","AMERICAN SAMOA","ANGOLA","ANGUILLA","ARGENTINA","ARUBA","AUSTRIA","BAHAMAS","BANGLADESH","BELARUS","BELIZE","BERMUDA","BOLIVIA","BOUVET ISLAND","BRUNEI DARUSSALAM","BURUNDI","CAMBODIA","CANADA","CAYMAN ISLANDS","CHRISTMAS ISLAND","COSTA RICA","CROATIA","CYPRUS","DENMARK","DOMINICA","EGYPT","EQUATORIAL GUINEA","ETHIOPIA","FIJI","FRANCE","FRENCH POLYNESIA","GAMBIA","GHANA","GREECE","GUADELOUPE","GUATEMALA","GUINEA","HAITI","HONDURAS","ICELAND","INDONESIA","IRELAND","ISRAEL","JAMAICA","JERSEY","KAZAKHSTAN","KIRIBATI","KUWAIT","LEBANON","LIBERIA","LITHUANIA","LUXEMBOURG","MALAWI","MALDIVES","MALTA","MARTINIQUE","MAURITIUS","MEXICO","MONACO","MONTENEGRO","MOROCCO","NAMIBIA","NEPAL","NETHERLANDS ANTILLES","NEW ZEALAND","NIGER","NIUE","NORWAY","PALAU","PAPUA NEW GUINEA","PERU","PITCAIRN","PORTUGAL","QATAR","ROMANIA","RWANDA","SAMOA","SAUDI ARABIA","SERBIA","SIERRA LEONE","SLOVAKIA","SOLOMON ISLANDS","SOUTH AFRICA","SRI LANKA","SURINAME","SWEDEN","SYRIAN ARAB REPUBLIC","THAILAND","TOGO","TONGA","TUNISIA","TUVALU","UKRAINE","UNITED KINGDOM","URUGUAY","VANUATU","VIET NAM","WALLIS AND FUTUNA","YEMEN","ZIMBABWE"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_login +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 16::smallint, + False::boolean, + 1.0::real, + 0::integer, + 0.0::real, + 0::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + NULL::real[], + NULL::real[], + NULL::real[], + NULL::real[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_email_address +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 17::smallint, + False::boolean, + 0.03596667::real, + 28::integer, + -0.9640333::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.00065877277}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"Aaron.Allen@QVp8KYxoqS.edu","Albert.Mcnabb@JqFg1Vfr.edu","Allen.Blackmon@rDQezy0Iy.org","Amy.Moore@lIXLGiGxl.com","Angela.Perez@9CODy4qpPeA8HCLX.com","Annie.Anderson@D1dOEV8V7YH.edu","April.Sanchez@MlJE7Jyr1KnbMizt8.com","Barbara.Bird@Bsz4Y8vF.edu","Bennie.Mcdonald@8a.com","Beverly.Armstrong@QKMtgEU.edu","Brady.Pacheco@V3G7zDs.org","Brian.Otto@5Ue35SXHl043P.org","Candy.Cox@BmsyXv426e.edu","Casey.Steele@TkMmIusn.com","Charles.Brito@qPU9PAt6xF.com","Chelsey.Gil@U7R6AeIVeQNbM.org","Christopher.Caraway@baXEFsAXkiXc4H.com","Clarence.Martinez@Tjom5JSSLsiqH.edu","Corinne.Blount@gG8DjsIs77.edu","Dale.Peterson@UP1FQ.com","Danny.Rudd@Qj.edu","David.Hernandez@XvDstf8oVspNVEq9N2ek.edu","Dawn.Washington@UZL4A2cTelj.org","Delorse.Mann@p1.edu","Diane.Ruiz@tq8V3.edu","Dona.Rucker@U5tPkxBoh3Nvvr.edu","Dorothy.Ledoux@6UXxuie.org","Ebony.Straub@O0ny7G.edu","Edwin.Brown@jifz5d3.com","Elizabeth.Rowe@x7a.com","Erica.Stewart@MjVPLVkiTTx1k9xvn.com","Ethel.Bowers@BchSkuO.edu","Felisha.White@4KHiD3EfpI.org","Fred.Burns@YAxMo0quQt02.org","Gaynell.Duran@PP5khP2OBXNnz.edu","Gerald.Olivas@Hs63PKrg.org","Goldie.Costello@74uH9.com","Harold.Mckinney@0Ymy5L.edu","Helene.Lockhart@4guNOhMAJ.org","Howard.Clarkson@KEs7Z6hdVT5d.edu","Jack.Davis@D7dTycb6ort.org","James.Cockrell@5lqoIx4paJn9P.org","James.Richter@7JahtLhEvS.org","Janice.Choate@ItXxi6VjtefUmkF.org","Jeanette.Mathews@mXCyZTs8MaGK9.org","Jennifer.Emerson@LADJl.com","Jerry.Willoughby@4h6L6um1aOm0JTk.edu","Joanna.French@Dn.com","John.Byrd@xAeLnuIQqDO4V.edu","John.Nail@vdm7UXfYYeeR5.org","Jonathan.Cochran@a1YLy7.com","Josephine.Barton@jbuycDaa1Dih2f6TbHs.org","Joshua.Trent@P5VKT8eLAEqph7.org","Julia.Mcneil@UXUiYMm4Rf1r1ysly2.com","Karen.Salmon@hVtuyn2.org","Kathy.Roush@f1.com","Kenneth.Nolen@fXIxCA8ecA7kUe.edu","Kimberly.Ward@UjmN1i5S0HqjOSB6P.org","Larry.Mccollum@KM3A2VsKR51LR7aSC2.edu","Leann.Lindsay@CYHO5.org","Lillian.Gibbons@ex2.edu","Lisa.Kaiser@2.edu","Lorraine.Wasson@fxUN1RDnuPC.com","Lyn.Green@ab9AnRe6OP.edu","Margaret.Childers@I2BJusIOR.org","Marilyn.Cochran@fXUsGKiG2pQn5p.org","Mark.Townsend@QRk6f4vPmjzGsd.edu","Matthew.Brown@BbgxEpsOa2.edu","Melissa.Brown@tU.org","Michael.Evans@na3Fzya.edu","Michael.Vickery@tGpS.edu","Millie.Wood@CYrA5ZCpBUxN.com","Nancy.Hubbard@1Dij5VOarSDD.com","Nicole.Cartwright@XVpmQfap67h39R.edu","Otha.Mathews@Q.edu","Paul.Bernard@l8hNZT.com","Peter.Bean@1hcfjEMbL.com","Rafael.Walker@DdbVsZ48tXFR.org","Raymond.Willis@FuCYxX.org","Richard.Blue@hk6sJl.org","Richard.Walker@QkOyOiijkoT6tALu.org","Robert.Feliciano@zrxHvBIUT1.org","Robert.Schrader@84hFFO.edu","Ronald.Barajas@SmV.edu","Rose.Rivera@nI5i3amDP9e.com","Ruth.Noble@nsRPMH7imQms.edu","Sandra.Ngo@NpRHjOrv.org","Sean.Young@cSmSeTb.edu","Shelly.Prentice@fOdVDfc3l.org","Stephanie.Maupin@1aO67HVBb4t.org","Stuart.Mintz@sCH9lO.com","Tamika.Walker@LypSN7cml.com","Terry.Pence@9V95I2n.edu","Thomas.Logan@62ZLdPqs6.edu","Tina.Fry@ggnu7.com","Troy.Hunt@HEIC1huvlV2.com","Vicky.Smith@7NTjUV1y.com","Walter.Guinn@q0V9yqO.com","William.Biddle@X3bGbi3YEGk.edu","William.Silva@OsUh7.edu","Zulma.Williams@NNUybLiKUcP.com"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: customer, Attribute: c_last_review_date +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 18::smallint, + False::boolean, + 0.03643333::real, + 4::integer, + 366.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0033333334, 0.0033333334}'::real[], + NULL::real[], + '{-0.010210618}'::real[], + NULL::real[], + NULL::real[], + E'{"2452342","2452574"}'::int4[], + E'{"2452283","2452286","2452290","2452293","2452297","2452301","2452304","2452308","2452312","2452315","2452318","2452322","2452326","2452329","2452333","2452337","2452341","2452345","2452349","2452352","2452356","2452360","2452363","2452367","2452371","2452374","2452378","2452382","2452386","2452389","2452393","2452397","2452400","2452404","2452408","2452411","2452414","2452418","2452422","2452425","2452429","2452433","2452437","2452440","2452444","2452447","2452451","2452455","2452458","2452462","2452465","2452469","2452473","2452476","2452480","2452483","2452487","2452491","2452494","2452498","2452501","2452505","2452508","2452512","2452515","2452519","2452523","2452527","2452531","2452535","2452538","2452542","2452545","2452549","2452553","2452556","2452560","2452563","2452568","2452571","2452576","2452579","2452583","2452587","2452591","2452594","2452598","2452601","2452605","2452608","2452612","2452616","2452619","2452623","2452626","2452630","2452634","2452638","2452641","2452645","2452648"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 1::smallint, + False::boolean, + 0.0::real, + 4::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2415027","2415771","2416520","2417211","2417903","2418630","2419355","2420088","2420908","2421635","2422337","2423125","2423817","2424576","2425331","2426034","2426734","2427456","2428161","2428886","2429586","2430281","2431030","2431747","2432487","2433188","2433919","2434660","2435416","2436096","2436816","2437551","2438254","2438932","2439677","2440414","2441121","2441884","2442643","2443351","2444066","2444821","2445520","2446305","2447089","2447791","2448548","2449230","2449930","2450652","2451408","2452175","2452928","2453663","2454412","2455152","2455942","2456650","2457349","2458087","2458835","2459531","2460255","2460995","2461677","2462381","2463126","2463880","2464613","2465432","2466146","2466884","2467605","2468353","2469108","2469764","2470509","2471242","2471960","2472732","2473465","2474220","2474963","2475782","2476553","2477254","2477964","2478666","2479406","2480132","2480928","2481630","2482367","2483101","2483817","2484513","2485191","2485905","2486655","2487351","2488066"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_date_id +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 2::smallint, + False::boolean, + 0.0::real, + 17::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.004197001}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"AAAAAAAAAAABFCAA","AAAAAAAAACLOFCAA","AAAAAAAAAFFCFCAA","AAAAAAAAAHNPECAA","AAAAAAAAAKHDFCAA","AAAAAAAAAMPOECAA","AAAAAAAAAPIBFCAA","AAAAAAAABBPBFCAA","AAAAAAAABEFFFCAA","AAAAAAAABGOIFCAA","AAAAAAAABJKKFCAA","AAAAAAAABMDCFCAA","AAAAAAAABONBFCAA","AAAAAAAACBFDFCAA","AAAAAAAACDNAFCAA","AAAAAAAACGHOFCAA","AAAAAAAACJCMFCAA","AAAAAAAACLLAFCAA","AAAAAAAACOBLFCAA","AAAAAAAADAMDFCAA","AAAAAAAADDFPECAA","AAAAAAAADGAOFCAA","AAAAAAAADIKLFCAA","AAAAAAAADLDCFCAA","AAAAAAAADOCDFCAA","AAAAAAAAEAKPECAA","AAAAAAAAEDEAFCAA","AAAAAAAAEFPHFCAA","AAAAAAAAEILJFCAA","AAAAAAAAELGOECAA","AAAAAAAAENOOFCAA","AAAAAAAAFAFPECAA","AAAAAAAAFCPJFCAA","AAAAAAAAFFGHFCAA","AAAAAAAAFHMOECAA","AAAAAAAAFKEKFCAA","AAAAAAAAFMMJFCAA","AAAAAAAAFPCKFCAA","AAAAAAAAGBKJFCAA","AAAAAAAAGEDOECAA","AAAAAAAAGGOAFCAA","AAAAAAAAGJKHFCAA","AAAAAAAAGMEBFCAA","AAAAAAAAGONOFCAA","AAAAAAAAHBJHFCAA","AAAAAAAAHECHFCAA","AAAAAAAAHGLOECAA","AAAAAAAAHJFDFCAA","AAAAAAAAHLOBFCAA","AAAAAAAAHOFIFCAA","AAAAAAAAIANCFCAA","AAAAAAAAIDFPECAA","AAAAAAAAIFMFFCAA","AAAAAAAAIIGHFCAA","AAAAAAAAILABFCAA","AAAAAAAAINJEFCAA","AAAAAAAAJADHFCAA","AAAAAAAAJCLBFCAA","AAAAAAAAJFDCFCAA","AAAAAAAAJHLMFCAA","AAAAAAAAJKDBFCAA","AAAAAAAAJMKOFCAA","AAAAAAAAJPCHFCAA","AAAAAAAAKBMIFCAA","AAAAAAAAKEEPECAA","AAAAAAAAKGODFCAA","AAAAAAAAKJGPECAA","AAAAAAAAKLMAFCAA","AAAAAAAAKOFCFCAA","AAAAAAAALBAAFCAA","AAAAAAAALDKOECAA","AAAAAAAALGBIFCAA","AAAAAAAALIGMFCAA","AAAAAAAALKMOECAA","AAAAAAAALNENFCAA","AAAAAAAALPMOFCAA","AAAAAAAAMCFFFCAA","AAAAAAAAMELFFCAA","AAAAAAAAMHFJFCAA","AAAAAAAAMJOIFCAA","AAAAAAAAMMHDFCAA","AAAAAAAAMPBJFCAA","AAAAAAAANBKMFCAA","AAAAAAAANEHIFCAA","AAAAAAAANGMPECAA","AAAAAAAANJIAFCAA","AAAAAAAANMDDFCAA","AAAAAAAANOPGFCAA","AAAAAAAAOBHNFCAA","AAAAAAAAOEAPFCAA","AAAAAAAAOGKIFCAA","AAAAAAAAOJBGFCAA","AAAAAAAAOLIJFCAA","AAAAAAAAOOALFCAA","AAAAAAAAPAJMFCAA","AAAAAAAAPDCOECAA","AAAAAAAAPFLAFCAA","AAAAAAAAPIECFCAA","AAAAAAAAPKNIFCAA","AAAAAAAAPNFPFCAA","AAAAAAAAPPPOFCAA"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: date_dim, Attribute: d_date +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 3::smallint, + False::boolean, + 0.0::real, + 4::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1095::oid, + 1095::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1900-01-07","1902-01-21","1904-02-09","1905-12-31","1907-11-23","1909-11-19","1911-11-14","1913-11-16","1916-02-14","1918-02-10","1920-01-13","1922-03-11","1924-02-01","1926-03-01","1928-03-25","1930-02-26","1932-01-27","1934-01-18","1935-12-24","1937-12-18","1939-11-18","1941-10-13","1943-11-01","1945-10-18","1947-10-28","1949-09-28","1951-09-29","1953-10-09","1955-11-04","1957-09-14","1959-09-04","1961-09-08","1963-08-12","1965-06-20","1967-07-05","1969-07-11","1971-06-18","1973-07-20","1975-08-18","1977-07-26","1979-07-11","1981-08-04","1983-07-04","1985-08-27","1987-10-20","1989-09-21","1991-10-18","1993-08-30","1995-07-31","1997-07-22","1999-08-17","2001-09-22","2003-10-15","2005-10-19","2007-11-07","2009-11-16","2012-01-15","2013-12-23","2015-11-22","2017-11-29","2019-12-17","2021-11-12","2023-11-06","2025-11-15","2027-09-28","2029-09-01","2031-09-16","2033-10-09","2035-10-12","2038-01-08","2039-12-23","2041-12-30","2043-12-21","2046-01-07","2048-02-01","2049-11-18","2051-12-03","2053-12-05","2055-11-23","2058-01-03","2060-01-06","2062-01-30","2064-02-12","2066-05-11","2068-06-20","2070-05-22","2072-05-01","2074-04-03","2076-04-12","2078-04-08","2080-06-12","2082-05-15","2084-05-21","2086-05-25","2088-05-10","2090-04-06","2092-02-13","2094-01-27","2096-02-16","2098-01-12","2099-12-28"}'::date[], + NULL::date[], + NULL::date[], + NULL::date[], + NULL::date[]); +-- +-- Table: date_dim, Attribute: d_month_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 4::smallint, + False::boolean, + 0.0::real, + 4::integer, + 2400.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00073333335, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"979","1761","198","288","356","445","552","594","751","941","1154","1251"}'::int4[], + E'{"0","24","48","71","94","117","141","164","191","217","239","265","289","314","339","363","386","409","432","458","480","503","528","551","577","601","625","649","675","695","719","743","768","790","814","838","861","885","911","934","959","985","1009","1034","1059","1083","1106","1130","1152","1176","1201","1226","1252","1277","1301","1326","1351","1373","1396","1421","1444","1467","1491","1515","1537","1560","1585","1609","1633","1661","1684","1707","1731","1755","1781","1803","1827","1851","1874","1900","1923","1948","1973","1999","2024","2048","2070","2094","2117","2141","2167","2190","2213","2238","2261","2283","2306","2329","2354","2376","2399"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_week_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 5::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.14316417::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1","108","215","313","412","516","620","724","841","945","1046","1158","1257","1365","1473","1574","1674","1777","1878","1981","2081","2180","2287","2390","2496","2596","2700","2806","2914","3011","3114","3219","3319","3416","3523","3628","3729","3838","3946","4048","4150","4258","4357","4470","4582","4682","4790","4887","4987","5091","5199","5308","5416","5521","5628","5733","5846","5947","6047","6153","6260","6359","6462","6568","6666","6766","6873","6980","7085","7202","7304","7409","7512","7619","7727","7821","7927","8032","8135","8245","8350","8457","8564","8681","8791","8891","8992","9093","9198","9302","9416","9516","9621","9726","9828","9928","10025","10127","10234","10333","10435"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_quarter_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 6::smallint, + False::boolean, + 0.0::real, + 4::integer, + 801.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0018, 0.0018, 0.0017333333}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"141","754","588"}'::int4[], + E'{"1","9","17","25","32","40","48","56","65","73","81","89","97","105","113","121","128","136","145","153","161","169","177","184","192","200","208","216","225","232","240","248","255","263","271","279","287","295","303","311","319","327","335","343","352","359","367","375","383","390","399","407","415","423","431","439","448","456","463","471","480","487","495","503","511","518","526","534","543","551","559","567","575","583","593","600","608","616","624","632","640","648","657","665","674","682","689","697","705","713","721","729","737","745","753","762","769","777","786","793","801"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 7::smallint, + False::boolean, + 0.0::real, + 4::integer, + 200.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0060666665, 0.006, 0.0058333334, 0.0057666665, 0.0056666667}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"1957","2088","1929","1907","2027"}'::int4[], + E'{"1900","1902","1904","1905","1908","1910","1912","1914","1916","1918","1920","1922","1924","1926","1928","1931","1933","1935","1937","1939","1940","1942","1944","1946","1948","1950","1952","1954","1956","1959","1961","1963","1965","1967","1969","1970","1972","1974","1976","1978","1980","1982","1984","1986","1988","1990","1992","1994","1996","1998","2000","2002","2004","2006","2008","2010","2012","2014","2016","2017","2019","2021","2023","2025","2028","2030","2032","2034","2036","2038","2040","2042","2044","2046","2048","2050","2052","2054","2055","2058","2059","2061","2064","2066","2068","2070","2072","2073","2075","2077","2079","2081","2083","2085","2087","2090","2092","2094","2096","2098","2099"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_dow +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 8::smallint, + False::boolean, + 0.0::real, + 4::integer, + 7.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.14473334, 0.14406666, 0.14326666, 0.14316666, 0.14263333, 0.14153333, 0.1406}'::real[], + '{0.13635832}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2","3","1","4","0","6","5"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_moy +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 9::smallint, + False::boolean, + 0.0::real, + 4::integer, + 12.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.085533336, 0.085433334, 0.0849, 0.0846, 0.084366664, 0.08426667, 0.08393333, 0.08316667, 0.0829, 0.082, 0.08183333, 0.07706667}'::real[], + '{0.088353634}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3","5","10","12","1","7","6","8","9","11","4","2"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_dom +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 10::smallint, + False::boolean, + 0.0::real, + 4::integer, + 31.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0351, 0.0338, 0.03376667, 0.033733334, 0.033733334, 0.033633333, 0.033466667, 0.033466667, 0.03313333, 0.0331, 0.032966666, 0.032966666, 0.032966666, 0.0329, 0.032866668, 0.032766666, 0.0327, 0.0326, 0.0325, 0.0325, 0.0324, 0.032366667, 0.032333333, 0.032266665, 0.032133333, 0.032, 0.031533334, 0.030833334, 0.0305, 0.0304, 0.018566666}'::real[], + '{0.03590256}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"13","23","22","1","24","5","7","16","26","21","14","17","28","20","6","2","9","10","12","19","18","8","15","27","4","25","11","30","29","3","31"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_qoy +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 11::smallint, + False::boolean, + 0.0::real, + 4::integer, + 4.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.25106665, 0.25043333, 0.2494, 0.2491}'::real[], + '{0.25712454}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2","3","4","1"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_fy_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 12::smallint, + False::boolean, + 0.0::real, + 4::integer, + 200.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0060666665, 0.006, 0.0058333334, 0.0057666665, 0.0056666667}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"1957","2088","1929","1907","2027"}'::int4[], + E'{"1900","1902","1904","1905","1908","1910","1912","1914","1916","1918","1920","1922","1924","1926","1928","1931","1933","1935","1937","1939","1940","1942","1944","1946","1948","1950","1952","1954","1956","1959","1961","1963","1965","1967","1969","1970","1972","1974","1976","1978","1980","1982","1984","1986","1988","1990","1992","1994","1996","1998","2000","2002","2004","2006","2008","2010","2012","2014","2016","2017","2019","2021","2023","2025","2028","2030","2032","2034","2036","2038","2040","2042","2044","2046","2048","2050","2052","2054","2055","2058","2059","2061","2064","2066","2068","2070","2072","2073","2075","2077","2079","2081","2083","2085","2087","2090","2092","2094","2096","2098","2099"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_fy_quarter_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 13::smallint, + False::boolean, + 0.0::real, + 4::integer, + 801.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0018, 0.0018, 0.0017333333}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"141","754","588"}'::int4[], + E'{"1","9","17","25","32","40","48","56","65","73","81","89","97","105","113","121","128","136","145","153","161","169","177","184","192","200","208","216","225","232","240","248","255","263","271","279","287","295","303","311","319","327","335","343","352","359","367","375","383","390","399","407","415","423","431","439","448","456","463","471","480","487","495","503","511","518","526","534","543","551","559","567","575","583","593","600","608","616","624","632","640","648","657","665","674","682","689","697","705","713","721","729","737","745","753","762","769","777","786","793","801"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_fy_week_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 14::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.14316417::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1","108","215","313","412","516","620","724","841","945","1046","1158","1257","1365","1473","1574","1674","1777","1878","1981","2081","2180","2287","2390","2496","2596","2700","2806","2914","3011","3114","3219","3319","3416","3523","3628","3729","3838","3946","4048","4150","4258","4357","4470","4582","4682","4790","4887","4987","5091","5199","5308","5416","5521","5628","5733","5846","5947","6047","6153","6260","6359","6462","6568","6666","6766","6873","6980","7085","7202","7304","7409","7512","7619","7727","7821","7927","8032","8135","8245","8350","8457","8564","8681","8791","8891","8992","9093","9198","9302","9416","9516","9621","9726","9828","9928","10025","10127","10234","10333","10435"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_day_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 15::smallint, + False::boolean, + 0.0::real, + 8::integer, + 7.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.14473334, 0.14406666, 0.14326666, 0.14316666, 0.14263333, 0.14153333, 0.1406}'::real[], + '{0.14524722}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"Tuesday","Wednesday","Monday","Thursday","Sunday","Saturday","Friday"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: date_dim, Attribute: d_quarter_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 16::smallint, + False::boolean, + 0.0::real, + 7::integer, + 800.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.0017666667, 0.0016666667, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016333334}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"2088Q2","1957Q2","1907Q3","1937Q1","2049Q2","2051Q2","2055Q2","2096Q4"}'::varchar[], + E'{"1900Q1","1902Q1","1904Q1","1905Q4","1908Q1","1910Q1","1912Q1","1913Q4","1916Q1","1918Q1","1920Q1","1922Q1","1924Q1","1926Q1","1928Q1","1930Q1","1931Q4","1933Q4","1935Q4","1938Q1","1940Q1","1941Q4","1943Q4","1945Q4","1947Q4","1949Q3","1951Q3","1953Q3","1955Q4","1957Q4","1959Q4","1961Q4","1963Q4","1965Q3","1967Q3","1969Q3","1971Q3","1973Q3","1975Q3","1977Q3","1979Q2","1981Q2","1983Q2","1985Q2","1987Q3","1989Q3","1991Q3","1993Q2","1995Q2","1997Q1","1999Q2","2001Q2","2003Q2","2005Q2","2007Q2","2009Q2","2011Q3","2013Q2","2015Q2","2017Q2","2019Q2","2021Q1","2023Q1","2025Q1","2027Q1","2028Q4","2030Q4","2032Q4","2034Q4","2037Q1","2039Q1","2041Q1","2043Q1","2045Q1","2046Q4","2049Q1","2051Q1","2053Q3","2055Q4","2057Q4","2059Q4","2061Q4","2063Q4","2065Q4","2068Q1","2070Q1","2072Q1","2073Q4","2075Q4","2077Q4","2079Q4","2081Q4","2083Q4","2085Q4","2087Q4","2090Q1","2091Q4","2093Q4","2095Q4","2098Q1","2099Q4"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); +-- +-- Table: date_dim, Attribute: d_holiday +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 17::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.9912, 0.0088}'::real[], + '{0.9816509}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_weekend +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 18::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.71786666, 0.28213334}'::real[], + '{0.59107685}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_following_holiday +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 19::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.9918333, 0.008166667}'::real[], + '{0.98435473}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_first_dom +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 20::smallint, + False::boolean, + 0.0::real, + 4::integer, + 2400.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00073333335, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"2444818","2468620","2421046","2423786","2425856","2428566","2431822","2433099","2437878","2443661","2450144","2453097"}'::int4[], + E'{"2415021","2415751","2416481","2417181","2417881","2418581","2419311","2420012","2420833","2421626","2422294","2423087","2423817","2424576","2425338","2426068","2426768","2427470","2428169","2428959","2429630","2430330","2431091","2431791","2432583","2433314","2434044","2434775","2435565","2436174","2436904","2437635","2438396","2439066","2439796","2440527","2441226","2441957","2442748","2443449","2444209","2445002","2445732","2446491","2447253","2447983","2448683","2449413","2450084","2450815","2451576","2452335","2453127","2453888","2454619","2455379","2456141","2456810","2457510","2458271","2458971","2459671","2460402","2461132","2461803","2462503","2463264","2463995","2464725","2465576","2466276","2466976","2467707","2468437","2469229","2469898","2470629","2471359","2472059","2472850","2473551","2474311","2475073","2475864","2476626","2477356","2478025","2478755","2479456","2480186","2480978","2481677","2482378","2483138","2483839","2484508","2485208","2485910","2486669","2487340","2488039"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_last_dom +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 21::smallint, + False::boolean, + 0.0::real, + 4::integer, + 2400.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00073333335, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666}'::real[], + NULL::real[], + '{0.99998605}'::real[], + NULL::real[], + NULL::real[], + E'{"2445029","2468892","2421227","2423785","2426098","2428596","2431821","2433279","2438089","2443811","2450203","2453187"}'::int4[], + E'{"2415020","2415930","2416661","2417332","2418061","2418734","2419522","2420195","2420984","2421834","2422505","2423236","2424027","2424756","2425489","2426279","2426889","2427619","2428350","2429139","2429810","2430481","2431271","2432002","2432732","2433463","2434194","2434983","2435715","2436385","2437055","2437786","2438576","2439244","2439977","2440705","2441437","2442166","2442899","2443627","2444360","2445151","2445881","2446671","2447404","2448132","2448864","2449534","2450265","2450995","2451786","2452518","2453308","2454039","2454770","2455559","2456293","2456961","2457691","2458422","2459152","2459882","2460553","2461284","2461953","2462683","2463414","2464203","2464935","2465727","2466457","2467128","2467858","2468648","2469380","2470050","2470780","2471511","2472240","2473031","2473702","2474492","2475224","2476016","2476807","2477477","2478206","2478935","2479607","2480337","2481130","2481857","2482529","2483318","2483990","2484660","2485389","2486059","2486790","2487519","2488372"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_same_day_ly +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 22::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.9988364::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2414662","2415406","2416155","2416846","2417538","2418265","2418990","2419723","2420543","2421270","2421972","2422760","2423452","2424211","2424965","2425669","2426369","2427091","2427796","2428521","2429221","2429916","2430665","2431382","2432122","2432823","2433554","2434295","2435051","2435731","2436451","2437186","2437889","2438567","2439312","2440049","2440756","2441519","2442278","2442986","2443701","2444456","2445155","2445940","2446724","2447426","2448183","2448865","2449565","2450287","2451043","2451810","2452563","2453298","2454047","2454787","2455577","2456285","2456984","2457722","2458470","2459166","2459890","2460630","2461312","2462016","2462761","2463515","2464248","2465067","2465781","2466519","2467240","2467988","2468743","2469399","2470144","2470877","2471595","2472367","2473100","2473855","2474598","2475417","2476187","2476889","2477598","2478301","2479040","2479767","2480562","2481265","2482001","2482736","2483451","2484148","2484826","2485540","2486290","2486986","2487701"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_same_day_lq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 23::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.99268985::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2414935","2415679","2416428","2417119","2417811","2418538","2419263","2419996","2420816","2421543","2422245","2423033","2423725","2424484","2425239","2425942","2426642","2427364","2428069","2428794","2429494","2430189","2430938","2431655","2432395","2433097","2433828","2434568","2435324","2436005","2436725","2437460","2438163","2438842","2439586","2440323","2441031","2441793","2442552","2443260","2443975","2444730","2445429","2446214","2446997","2447700","2448456","2449139","2449839","2450561","2451317","2452084","2452836","2453571","2454320","2455060","2455850","2456558","2457257","2457995","2458743","2459439","2460163","2460903","2461586","2462290","2463035","2463788","2464521","2465340","2466054","2466792","2467513","2468261","2469016","2469672","2470417","2471150","2471868","2472640","2473373","2474128","2474871","2475692","2476462","2477164","2477873","2478576","2479315","2480042","2480837","2481540","2482276","2483011","2483726","2484423","2485099","2485813","2486563","2487259","2487974"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: date_dim, Attribute: d_current_day +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=24; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 24::smallint, + False::boolean, + 0.0::real, + 2::integer, + 1.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{1.0}'::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_current_week +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=25; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 25::smallint, + False::boolean, + 0.0::real, + 2::integer, + 1.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{1.0}'::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_current_month +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=26; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 26::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.9996, 0.0004}'::real[], + '{0.9994385}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_current_quarter +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=27; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 27::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.99873334, 0.0012666667}'::real[], + '{0.9982279}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: date_dim, Attribute: d_current_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=28; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 28::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.99543333, 0.0045666667}'::real[], + '{0.99365747}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); +-- +-- Table: store_sales, Attribute: ss_sold_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 1::smallint, + False::boolean, + 0.044::real, + 4::integer, + 1823.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0015333333, 0.0015, 0.0014666667, 0.0014666667, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011}'::real[], + NULL::real[], + '{-0.0022345192}'::real[], + NULL::real[], + NULL::real[], + E'{"2451534","2452228","2451129","2452240","2451139","2451161","2451546","2452258","2452621","2452589","2452600","2452625","2451137","2451148","2451181","2451896","2452251","2452260","2451178","2451528","2451904","2451909","2452242","2452250","2452628","2452642","2451121","2451134","2451174","2451496","2451864","2451872","2451879","2451910","2452257","2452271","2452592","2451112","2451149","2451525","2451865","2452232","2452277","2452598","2452640","2451127","2451136","2451153","2451177","2451505","2451541","2451851","2451862","2452230","2452238","2452266","2452607","2452609","2452627","2452641","2451142","2451158","2451160","2451491","2451868","2451885","2451887","2452248","2452601","2452606","2452634","2451123","2451125","2451133","2451138","2451144","2451506","2451509","2451529","2451884","2451898","2452219","2452221","2452225","2452246","2452256","2452274","2452597","2452602","2452614","2452623","2451126","2451141","2451154","2451493","2451494","2451497","2451513","2451516","2451526"}'::int4[], + E'{"2450816","2450843","2450874","2450900","2450926","2450953","2450982","2451010","2451033","2451045","2451057","2451070","2451082","2451095","2451107","2451119","2451143","2451157","2451169","2451184","2451213","2451241","2451267","2451294","2451322","2451349","2451372","2451398","2451410","2451423","2451435","2451448","2451460","2451472","2451485","2451499","2451511","2451522","2451536","2451545","2451572","2451600","2451626","2451650","2451679","2451703","2451734","2451760","2451772","2451783","2451795","2451806","2451818","2451830","2451843","2451855","2451867","2451877","2451890","2451901","2451916","2451945","2451974","2451999","2452025","2452053","2452081","2452109","2452129","2452140","2452151","2452163","2452173","2452185","2452195","2452207","2452218","2452233","2452245","2452262","2452275","2452301","2452329","2452358","2452385","2452413","2452437","2452464","2452492","2452504","2452516","2452528","2452540","2452553","2452566","2452578","2452587","2452604","2452617","2452630","2452639"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_sold_time_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 2::smallint, + False::boolean, + 0.04476667::real, + 4::integer, + 42441.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00023333334}'::real[], + NULL::real[], + '{-0.0029273503}'::real[], + NULL::real[], + NULL::real[], + E'{"53826"}'::int4[], + E'{"28802","29544","30512","31386","32305","32816","33250","33722","34146","34599","35052","35511","35964","36268","36566","36863","37172","37485","37828","38121","38401","38684","38983","39275","39560","40075","40557","41068","41530","42041","42524","43017","43474","43957","44423","44910","45389","45848","46343","46755","47169","47614","48001","48403","48805","49181","49610","50080","50477","50759","51068","51365","51655","51931","52218","52524","52799","53101","53418","53732","54105","54884","55780","56713","57597","58420","59372","60285","61221","61506","61795","62076","62374","62681","62967","63254","63580","63859","64159","64441","64733","65144","65590","66065","66523","66923","67434","67869","68271","68722","69211","69656","70119","70604","71096","71498","71944","72815","73678","74590","75597"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_item_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 3::smallint, + False::boolean, + 0.0::real, + 4::integer, + 25013.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0003, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334}'::real[], + NULL::real[], + '{0.000308136}'::real[], + NULL::real[], + NULL::real[], + E'{"18140","1183","1921","10183","13837","16333","22268","26593","27325","2035","3793","4081","4525","5833","8575","9103","9211","9703","10507","11761","12685","13513","14792","15871","15907","15998","17095","17455","19111","20875","21085","21457","22741","24703","24817","26851","26971","27337","27709","27919"}'::int4[], + E'{"1","260","575","888","1162","1441","1707","1975","2264","2523","2847","3115","3368","3650","3951","4214","4523","4827","5071","5329","5587","5894","6181","6496","6776","7024","7312","7591","7855","8113","8398","8682","8957","9245","9530","9823","10114","10405","10699","10959","11247","11525","11781","12061","12360","12613","12889","13190","13453","13731","14017","14294","14575","14877","15152","15457","15733","16015","16291","16579","16861","17155","17437","17702","17984","18247","18519","18783","19092","19380","19642","19943","20221","20467","20723","20995","21311","21596","21870","22136","22427","22700","22970","23261","23533","23805","24082","24344","24628","24932","25220","25519","25800","26063","26331","26591","26879","27151","27422","27705","27999"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 4::smallint, + False::boolean, + 0.043866668::real, + 4::integer, + 1787614.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.002228295}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"17","21786","42607","63355","81931","104851","124188","143682","164679","186368","206598","227797","248026","266122","287862","306345","328795","349339","369849","390012","413705","437205","457764","479231","501632","523614","545267","564653","584588","603322","628035","648054","668479","689551","709515","730333","751340","771680","793540","814237","835667","857070","877179","899789","920597","942338","962762","984964","1006607","1027347","1048659","1070611","1092247","1111106","1131352","1152543","1173197","1192658","1215327","1237528","1259725","1279865","1300200","1324729","1344982","1367029","1388243","1408781","1430858","1451533","1472783","1491853","1512116","1533678","1554248","1577279","1600025","1621228","1641577","1663202","1683219","1704339","1723327","1742744","1763526","1783848","1805196","1826090","1845634","1865356","1885579","1905861","1925869","1946542","1969323","1991449","2012218","2035047","2058343","2079610","2099931"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 5::smallint, + False::boolean, + 0.044433333::real, + 4::integer, + 1889709.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.00950842}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"30","17849","37904","56865","76186","96917","115542","134186","152099","172680","192783","211817","229921","248171","269276","287913","306855","326795","345207","365388","382970","404387","425118","443738","463882","483064","501977","520761","538035","556646","576673","595274","615470","633068","652437","671351","689763","709263","728426","748174","767474","786428","805372","823760","843936","863306","880648","898664","917543","936304","956226","976161","994176","1014253","1033333","1051646","1070542","1089363","1107670","1128460","1147427","1166875","1187090","1205515","1224744","1244031","1263305","1283771","1301649","1319446","1337051","1356966","1373991","1393391","1412686","1433469","1453024","1470147","1488228","1507316","1525606","1543945","1563428","1582932","1601688","1622584","1644497","1663783","1684160","1704534","1724056","1744635","1764898","1783571","1802036","1823303","1844256","1864851","1883445","1902230","1920718"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 6::smallint, + False::boolean, + 0.0444::real, + 4::integer, + 7203.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.0004}'::real[], + NULL::real[], + '{0.0009649638}'::real[], + NULL::real[], + NULL::real[], + E'{"3964","3629"}'::int4[], + E'{"1","77","150","224","302","367","433","498","566","636","710","784","865","941","1013","1088","1170","1244","1323","1388","1461","1536","1606","1672","1735","1809","1876","1952","2024","2098","2172","2244","2307","2379","2456","2534","2602","2673","2742","2818","2892","2971","3037","3111","3186","3257","3327","3396","3472","3543","3613","3687","3768","3845","3910","3981","4050","4116","4188","4251","4325","4393","4463","4541","4613","4685","4755","4830","4903","4980","5052","5126","5195","5262","5335","5402","5469","5534","5604","5673","5747","5823","5891","5960","6032","6112","6185","6259","6335","6407","6479","6552","6629","6696","6762","6836","6906","6982","7054","7128","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 7::smallint, + False::boolean, + 0.0441::real, + 4::integer, + 1054173.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.009495346}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"24","10492","20174","30656","40366","50491","61387","71217","82320","93176","103530","113999","124922","135328","145700","156238","168283","179107","189968","200308","210858","220931","230791","240825","252093","261999","273446","284421","294475","304990","315199","325963","336804","346964","358483","369478","379508","390126","400826","411839","423548","433723","444375","455042","465928","476227","487109","496816","507138","516971","528312","538979","549252","559578","569918","580340","590219","600402","612301","623316","633219","642905","653631","665000","674723","685655","695157","706546","716090","726191","735744","745583","756508","767077","776705","787088","798590","810484","820976","832448","843248","854009","864628","873989","883994","894860","905009","916085","924744","935185","945700","956390","965553","975624","987328","997741","1008137","1018620","1029054","1039248","1049982"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_store_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 8::smallint, + False::boolean, + 0.045766667::real, + 4::integer, + 35.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.029033333, 0.0287, 0.028266666, 0.0282, 0.028066667, 0.028, 0.027966667, 0.027833333, 0.027766667, 0.027666667, 0.027666667, 0.0276, 0.0276, 0.0275, 0.027466666, 0.027433334, 0.027433334, 0.027366666, 0.027366666, 0.0273, 0.027233334, 0.027133333, 0.027066667, 0.027033333, 0.0269, 0.0269, 0.026833333, 0.026733333, 0.0267, 0.026633333, 0.026333334, 0.026066666, 0.026066666, 0.025666667, 0.0247}'::real[], + '{0.025343372}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"19","34","2","61","62","7","32","13","52","4","38","55","56","28","49","1","37","16","67","50","31","64","22","68","20","58","26","46","14","10","25","8","43","40","44"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_promo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 9::smallint, + False::boolean, + 0.04413333::real, + 4::integer, + 357.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0036666666, 0.0036666666, 0.0036333334, 0.0036333334, 0.0035333333, 0.0035, 0.0033666666, 0.0033666666}'::real[], + NULL::real[], + '{0.009066247}'::real[], + NULL::real[], + NULL::real[], + E'{"37","139","81","228","350","223","293","304"}'::int4[], + E'{"1","4","7","11","14","18","21","25","28","32","35","40","43","47","50","54","57","61","64","68","71","75","78","83","86","89","93","96","100","103","107","110","114","118","121","124","128","132","136","140","143","147","150","153","157","160","163","166","170","174","177","180","183","187","190","194","197","201","204","208","211","214","218","221","226","230","234","237","241","245","249","252","256","259","262","266","270","274","277","280","284","288","291","296","300","303","308","311","315","319","322","326","329","332","336","339","343","346","351","354","357"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_ticket_number +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 10::smallint, + False::boolean, + 0.0::real, + 8::integer, + 135837840.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 412::oid, + 412::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.06078869}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"813","1375913","2727072","3857212","5016369","6156850","7386542","8690070","9789582","11044399","12265523","13510184","14717978","15785339","16975428","18197314","19442297","20772509","21903183","23100195","24331207","25452464","26678265","27922018","29143270","30353305","31671176","32953618","34109365","35253703","36385377","37447554","38717221","39999948","41154706","42417922","43652601","44968753","46342094","47459202","48642561","49683656","50998261","52288399","53487733","54680281","55833024","57017267","58237604","59472084","60696465","61996614","63179509","64401202","65651723","66926244","68011538","69269328","70341852","71528693","72651930","73713093","74849544","75928064","77033905","78162650","79324991","80585670","81761102","82828934","84032244","85334532","86494728","87598137","88860063","89922519","91069374","92276218","93495454","94722691","95959052","97146341","98399034","99566170","100766327","101898400","103223735","104414548","105602699","106825065","108029779","109174799","110420663","111591894","112817588","113975952","115181211","116399324","117672963","118888721","119999864"}'::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[]); +-- +-- Table: store_sales, Attribute: ss_quantity +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 11::smallint, + False::boolean, + 0.045466665::real, + 4::integer, + 100.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.010833333, 0.010766666, 0.010766666, 0.010766666, 0.010633334, 0.0106, 0.010566667, 0.0104, 0.0104, 0.0104, 0.0104, 0.010366667, 0.010366667, 0.010366667, 0.0103, 0.010266666, 0.0101666665, 0.0101333335, 0.0101333335, 0.0101, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.01, 0.01, 0.009966667, 0.009966667, 0.009933333, 0.0099, 0.009866667, 0.009833333, 0.0098, 0.009766666, 0.009766666, 0.009766666, 0.009766666, 0.009733333, 0.009733333, 0.009733333, 0.009733333, 0.0097, 0.0097, 0.009666666, 0.009666666, 0.009666666, 0.009633333, 0.0096, 0.0096, 0.0096, 0.0096, 0.009566667, 0.009533334, 0.009533334, 0.0095, 0.0095, 0.009466667, 0.009433334, 0.0094, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009333333, 0.009266667, 0.0092, 0.0092, 0.0092, 0.009133333, 0.009133333, 0.009133333, 0.009133333, 0.0091, 0.0091, 0.0091, 0.0091, 0.0090666665, 0.0090666665, 0.0090333335, 0.009, 0.008966667, 0.008933334, 0.0089, 0.0089, 0.008833333, 0.008666666, 0.008633333, 0.0086, 0.008566666, 0.0084, 0.0084, 0.008366667, 0.008366667, 0.008233333, 0.008233333, 0.0081, 0.0079333335}'::real[], + '{0.0045824465}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"29","7","10","21","27","92","86","5","55","71","81","33","79","93","6","99","40","39","57","32","53","73","84","97","85","90","38","91","12","69","76","41","23","22","37","45","63","44","61","88","100","20","98","26","49","67","14","18","78","87","95","3","31","46","15","36","58","42","64","11","13","50","59","60","68","70","19","54","25","35","66","24","52","56","83","4","16","47","74","80","96","34","51","75","82","30","77","65","28","1","48","9","2","72","43","94","17","89","62","8"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: store_sales, Attribute: ss_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 12::smallint, + False::boolean, + 0.0435::real, + 6::integer, + 9909.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.004772207}'::real[], + NULL::real[], + NULL::real[], + E'{"32.94","43.22","71.68","76.26","91.35","96.72"}'::numeric[], + E'{"1.00","1.97","3.01","4.10","5.06","6.04","7.00","8.01","9.01","9.96","10.88","11.91","12.82","13.84","14.95","15.91","16.85","17.91","18.92","19.94","20.89","22.01","23.08","24.06","25.02","26.03","26.96","27.89","28.91","29.93","30.90","31.93","32.96","33.91","34.98","35.96","36.94","37.90","38.81","39.70","40.61","41.67","42.74","43.73","44.66","45.63","46.59","47.53","48.55","49.54","50.48","51.56","52.62","53.42","54.39","55.28","56.33","57.36","58.37","59.23","60.15","61.15","62.19","63.21","64.16","65.22","66.31","67.27","68.29","69.31","70.23","71.24","72.24","73.25","74.22","75.12","76.09","77.07","78.06","79.07","80.05","81.10","82.08","83.09","84.06","85.12","86.17","87.18","88.23","89.18","90.13","91.20","92.19","93.19","94.14","95.07","95.98","96.91","97.92","98.92","100.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 13::smallint, + False::boolean, + 0.0447::real, + 6::integer, + 16808.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.0003, 0.0003, 0.0003, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667}'::real[], + NULL::real[], + '{-0.00067186705}'::real[], + NULL::real[], + NULL::real[], + E'{"27.24","7.02","96.36","105.63","17.20","33.52","39.04","40.68","48.96","59.81","68.69","76.24","87.92","99.16"}'::numeric[], + E'{"1.00","2.89","4.28","5.87","7.42","8.80","10.10","11.63","12.99","14.42","15.98","17.40","18.87","20.21","21.63","23.04","24.51","25.90","27.36","28.81","30.36","31.81","33.34","34.72","36.09","37.52","38.95","40.43","41.88","43.30","44.81","46.40","47.73","49.18","50.55","52.07","53.40","54.73","56.17","57.55","58.87","60.19","61.77","63.07","64.57","66.02","67.39","68.92","70.40","72.03","73.45","74.87","76.26","77.73","79.03","80.35","81.92","83.32","84.72","86.21","87.59","88.96","90.45","91.78","93.16","94.66","96.19","97.64","98.92","100.52","101.88","103.28","104.72","106.11","107.69","109.21","110.85","112.64","114.53","116.30","118.00","119.87","121.88","123.90","126.04","128.34","130.66","133.07","135.58","137.97","140.53","143.39","146.70","149.95","153.65","157.50","161.61","166.70","172.67","180.23","199.18"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 14::smallint, + False::boolean, + 0.043866668::real, + 6::integer, + 11406.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.008633333, 0.00063333334, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667}'::real[], + NULL::real[], + '{0.00037045707}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","5.56","1.37","1.33","1.74","3.53","1.67","3.48","0.51","5.54","6.41","0.82","1.50","1.72","1.83","1.99","2.02","2.25","3.32","3.84","5.66","12.86","0.97","0.98","1.28","1.62","1.65","1.90","2.00","3.08","4.40","5.92","8.40","8.74","11.16","15.51","0.44","0.57","0.65","0.68","0.75","0.94","1.17","1.20","1.22","1.29","1.32","1.35","1.36","2.08","2.14","2.50","2.78","2.82","2.83","3.09","3.64","3.73","3.82","4.51","4.55","5.22","5.43","6.63","6.69","6.90","7.61","7.63","8.09","9.03","9.09","9.44","9.63","11.42","15.16","0.11","0.21","0.60","0.63","0.66","0.93","1.06","1.10","1.16","1.18","1.25","1.42","1.47","1.76","2.09","2.16","2.18","2.60","2.68","2.74","3.11","3.18","3.26","3.27","3.31"}'::numeric[], + E'{"0.01","0.50","1.00","1.49","2.01","2.44","2.89","3.38","3.80","4.27","4.73","5.13","5.65","6.12","6.56","7.05","7.48","8.02","8.51","9.01","9.57","10.13","10.69","11.20","11.77","12.34","12.88","13.44","14.06","14.61","15.26","15.88","16.54","17.11","17.71","18.35","19.04","19.73","20.46","21.14","21.86","22.67","23.36","24.08","24.87","25.77","26.56","27.30","28.12","28.99","29.85","30.74","31.71","32.63","33.58","34.48","35.42","36.45","37.56","38.53","39.65","40.76","41.86","43.05","44.18","45.37","46.57","47.77","49.08","50.38","51.70","53.17","54.47","55.96","57.34","58.84","60.52","62.13","63.82","65.63","67.20","69.11","71.20","73.12","75.38","77.56","79.86","82.27","85.02","87.88","90.64","93.54","97.22","101.21","105.84","110.61","116.50","123.46","132.30","145.64","193.12"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_discount_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 15::smallint, + False::boolean, + 0.045333333::real, + 3::integer, + 6760.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.7661}'::real[], + NULL::real[], + '{0.6438912}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","1.34","3.72","6.09","8.37","10.99","14.04","16.95","19.44","22.34","24.81","28.43","32.34","35.35","39.39","44.25","49.00","54.54","59.98","65.63","71.63","78.32","84.28","90.37","96.62","104.19","111.32","118.10","126.42","136.18","143.96","153.17","162.16","171.42","182.95","192.33","201.85","211.36","222.74","236.09","252.09","266.81","278.33","292.76","310.46","324.68","340.74","359.05","380.26","398.53","416.30","434.21","455.13","474.14","491.53","516.67","538.59","556.85","586.81","610.95","636.53","667.62","692.38","723.55","756.71","796.95","834.72","868.00","906.95","948.96","993.70","1033.87","1089.17","1132.81","1184.95","1228.29","1281.16","1347.98","1408.84","1480.92","1572.04","1643.21","1731.83","1830.90","1925.89","2022.22","2130.03","2281.99","2428.33","2573.26","2717.71","2913.34","3146.60","3438.96","3740.97","4126.94","4666.03","5274.03","6096.32","7082.14","12922.81"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 16::smallint, + False::boolean, + 0.045333333::real, + 6::integer, + 119811.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0087, 0.00026666667, 0.00023333334, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.00332316}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","25.20","10.92","36.96","469.20"}'::numeric[], + E'{"0.27","8.61","16.80","24.36","33.50","42.56","50.49","61.05","71.40","82.38","93.84","106.14","118.17","131.32","144.00","157.78","172.64","188.16","203.84","220.80","236.84","255.08","271.45","288.48","308.34","327.28","345.73","367.84","387.02","408.00","432.63","453.75","480.22","504.24","530.66","558.80","588.24","616.30","644.76","674.50","704.16","734.58","766.92","802.75","838.24","871.04","910.52","945.76","983.29","1024.86","1063.30","1102.08","1147.38","1190.70","1237.47","1284.12","1331.00","1387.50","1440.24","1503.28","1554.80","1610.95","1676.49","1742.20","1808.00","1867.45","1933.08","2001.48","2087.67","2170.21","2251.53","2342.40","2428.20","2526.36","2617.12","2724.48","2827.24","2944.32","3046.35","3173.12","3294.25","3442.56","3588.09","3734.64","3902.60","4072.80","4240.57","4428.00","4642.32","4906.57","5147.50","5431.50","5743.00","6100.32","6469.35","6901.32","7510.60","8168.50","9050.41","10628.04","17738.88"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 17::smallint, + False::boolean, + 0.044966668::real, + 6::integer, + 207111.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0051949597}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.08","33.20","56.42","79.36","97.98","121.59","144.80","167.70","191.00","218.46","244.03","270.55","299.76","327.80","355.32","384.30","414.52","442.20","475.83","508.95","544.25","578.25","612.36","650.43","688.35","727.92","765.38","803.60","837.20","874.56","916.09","960.94","1003.45","1044.66","1092.25","1140.48","1185.60","1238.61","1289.29","1337.70","1390.55","1444.40","1496.49","1548.16","1605.87","1662.12","1713.60","1764.63","1817.76","1875.30","1937.05","1999.50","2060.11","2128.60","2196.21","2259.76","2326.32","2396.25","2465.40","2539.24","2614.56","2685.00","2761.38","2840.04","2925.35","3015.87","3097.05","3179.52","3263.77","3343.96","3431.34","3528.32","3624.37","3716.85","3814.10","3920.27","4022.88","4127.23","4243.63","4356.48","4476.15","4597.05","4738.23","4865.40","5000.80","5143.91","5291.12","5444.00","5603.10","5773.32","5947.83","6145.55","6364.80","6594.77","6830.75","7087.20","7404.30","7745.95","8124.04","8664.15","9992.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 18::smallint, + False::boolean, + 0.044166666::real, + 7::integer, + 281020.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.005409235}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.37","48.18","81.41","111.00","143.56","176.12","208.48","244.00","277.10","312.00","354.24","397.50","432.81","473.83","514.15","559.74","605.17","653.04","703.08","749.70","793.80","843.72","897.00","950.04","1005.84","1059.20","1111.86","1168.53","1220.78","1273.14","1335.78","1395.80","1464.48","1525.11","1588.62","1662.60","1733.62","1808.00","1876.80","1943.17","2017.47","2095.83","2176.23","2255.84","2332.80","2416.80","2500.54","2583.36","2660.40","2751.20","2841.54","2936.19","3028.06","3126.61","3219.72","3316.14","3407.04","3508.20","3613.50","3714.04","3820.32","3927.70","4045.88","4164.11","4286.55","4404.60","4526.64","4639.62","4772.80","4907.30","5047.20","5174.40","5313.60","5456.64","5608.32","5770.80","5925.96","6098.88","6277.32","6458.50","6637.23","6822.90","7017.40","7216.44","7423.52","7672.96","7894.12","8146.60","8427.82","8709.95","8969.40","9303.91","9642.60","10018.92","10424.34","10892.97","11484.75","12242.88","13182.40","14456.88","19415.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_ext_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 19::smallint, + False::boolean, + 0.0449::real, + 6::integer, + 18471.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.10456666, 0.0009, 0.00073333335, 0.00073333335, 0.0007, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00063333334, 0.00063333334, 0.00063333334, 0.00063333334, 0.00063333334, 0.0006, 0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.014879999}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","0.01","0.17","0.65","0.13","0.29","0.05","0.08","0.36","0.10","0.27","0.28","0.40","0.45","0.19","0.30","2.24","0.15","0.18","0.21","0.41","3.94","0.14","0.46","0.47","0.52","0.88","1.04","1.51","1.66","0.02","0.12","0.16","0.20","0.25","0.34","0.77","0.96","0.98","1.29","1.92","3.80","0.11","0.32","0.42","0.43","0.51","0.68","0.99","1.05","1.22","1.31","1.36","1.54","1.80","1.90","2.04","2.10","3.32","0.09","0.22","0.44","0.50","0.58","0.66","0.94","1.13","1.15","1.68","2.74","3.78","4.08","8.96","0.04","0.07","0.23","0.33","0.37","0.59","0.69","0.78","0.81","0.82","0.85","0.91","1.08","1.12","1.18","1.26","1.32","1.35","1.50","1.59","1.64","1.76","1.79","2.26","2.83","3.35","3.43"}'::numeric[], + E'{"0.03","0.74","1.20","1.60","2.01","2.39","2.72","3.10","3.50","3.90","4.30","4.72","5.16","5.57","6.04","6.50","7.03","7.58","8.18","8.74","9.36","9.98","10.62","11.27","12.01","12.69","13.39","14.17","14.94","15.73","16.52","17.47","18.36","19.22","20.18","21.05","22.15","23.17","24.17","25.34","26.50","27.68","28.91","30.07","31.25","32.68","34.20","35.59","37.26","38.92","40.45","42.33","44.13","45.79","47.82","49.94","51.93","54.20","56.44","58.78","61.05","63.96","66.70","69.47","72.63","75.56","78.68","82.11","85.62","89.37","92.68","96.79","100.78","105.67","110.09","114.97","120.82","125.97","132.10","138.64","145.86","152.49","159.87","168.58","177.12","186.59","196.23","208.25","220.55","235.45","251.96","267.62","288.25","309.58","335.43","364.88","405.05","457.89","534.84","648.41","1390.48"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_coupon_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 20::smallint, + False::boolean, + 0.045333333::real, + 3::integer, + 6760.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.7661}'::real[], + NULL::real[], + '{0.6438912}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","1.34","3.72","6.09","8.37","10.99","14.04","16.95","19.44","22.34","24.81","28.43","32.34","35.35","39.39","44.25","49.00","54.54","59.98","65.63","71.63","78.32","84.28","90.37","96.62","104.19","111.32","118.10","126.42","136.18","143.96","153.17","162.16","171.42","182.95","192.33","201.85","211.36","222.74","236.09","252.09","266.81","278.33","292.76","310.46","324.68","340.74","359.05","380.26","398.53","416.30","434.21","455.13","474.14","491.53","516.67","538.59","556.85","586.81","610.95","636.53","667.62","692.38","723.55","756.71","796.95","834.72","868.00","906.95","948.96","993.70","1033.87","1089.17","1132.81","1184.95","1228.29","1281.16","1347.98","1408.84","1480.92","1572.04","1643.21","1731.83","1830.90","1925.89","2022.22","2130.03","2281.99","2428.33","2573.26","2717.71","2913.34","3146.60","3438.96","3740.97","4126.94","4666.03","5274.03","6096.32","7082.14","12922.81"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_net_paid +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 21::smallint, + False::boolean, + 0.045033332::real, + 6::integer, + 130231.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.010733333}'::real[], + NULL::real[], + '{-0.003218649}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","5.14","10.18","16.30","21.88","28.60","36.24","44.10","51.49","60.06","68.70","77.69","87.72","97.58","108.51","119.68","131.13","142.74","154.70","167.30","180.87","194.66","210.49","225.68","242.00","258.44","273.14","288.96","307.68","325.44","342.37","363.00","380.16","400.43","423.00","444.15","468.72","492.00","519.68","544.00","572.40","600.96","629.30","656.70","686.28","718.06","749.00","782.88","817.80","854.72","893.10","930.83","967.59","1008.80","1050.42","1093.00","1135.33","1181.62","1229.40","1280.52","1326.28","1383.48","1439.88","1500.29","1556.02","1618.37","1682.20","1751.04","1818.15","1884.06","1955.88","2033.45","2126.88","2215.62","2305.35","2400.96","2495.65","2607.80","2725.97","2838.84","2961.00","3081.25","3215.94","3363.36","3525.20","3685.50","3870.99","4065.12","4264.36","4472.25","4715.82","5020.00","5297.49","5657.44","6056.08","6494.87","7012.56","7766.28","8648.46","10058.40","17738.88"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_net_paid_inc_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 22::smallint, + False::boolean, + 0.04476667::real, + 6::integer, + 216373.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.010666667, 0.0002}'::real[], + NULL::real[], + '{-0.0055286656}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","32.50"}'::numeric[], + E'{"0.04","5.34","10.64","16.84","22.78","29.76","37.54","45.88","53.55","63.01","71.53","81.22","91.04","101.48","113.40","124.84","136.79","148.47","160.74","174.09","189.27","202.53","219.10","235.75","252.63","270.30","284.97","302.27","321.39","339.01","359.73","379.11","399.51","420.01","443.22","467.14","491.68","517.50","543.21","569.64","598.99","628.01","657.79","689.15","718.44","753.62","785.05","818.47","856.64","895.72","934.06","972.23","1014.07","1056.37","1098.32","1143.65","1191.49","1240.73","1292.04","1341.11","1393.32","1450.62","1510.08","1566.98","1629.98","1689.68","1763.67","1840.23","1903.93","1975.54","2049.22","2126.92","2226.03","2316.79","2410.56","2506.52","2616.49","2727.26","2849.57","2970.38","3085.20","3217.68","3363.97","3517.49","3689.45","3858.39","4052.56","4254.30","4465.59","4690.92","4962.17","5234.70","5542.48","5925.61","6319.65","6827.42","7372.02","8128.19","9079.02","10544.85","18803.21"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: store_sales, Attribute: ss_net_profit +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 23::smallint, + False::boolean, + 0.043933332::real, + 6::integer, + 164410.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00036666667, 0.0002}'::real[], + NULL::real[], + '{0.0071685645}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","-86.40"}'::numeric[], + E'{"-9756.88","-6515.41","-5668.87","-5123.34","-4724.97","-4368.00","-4064.06","-3808.62","-3576.47","-3373.46","-3174.31","-3012.09","-2859.44","-2725.70","-2593.63","-2458.24","-2337.30","-2214.00","-2107.00","-2001.96","-1904.70","-1816.40","-1727.86","-1642.55","-1561.33","-1494.48","-1420.30","-1356.48","-1294.21","-1224.96","-1162.20","-1101.58","-1048.46","-992.62","-942.72","-898.95","-853.76","-806.47","-765.12","-727.68","-693.00","-655.50","-623.42","-589.44","-557.05","-526.40","-495.72","-462.77","-435.73","-406.64","-378.40","-353.30","-328.97","-301.50","-278.13","-255.75","-233.87","-214.09","-195.96","-178.34","-162.31","-147.92","-132.24","-117.78","-104.00","-89.56","-76.54","-65.12","-54.20","-43.00","-32.46","-23.28","-14.28","-7.00","0.39","9.24","20.91","35.88","53.56","74.70","99.36","127.98","158.51","193.25","233.24","281.96","341.00","404.32","478.86","563.93","661.20","773.80","891.78","1050.06","1209.00","1410.30","1700.48","2034.00","2537.48","3429.36","8262.72"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_sold_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 1::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 1823.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0016, 0.0016, 0.0015333333, 0.0015, 0.0015, 0.0015, 0.0014666667, 0.0014666667, 0.0014333334, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666}'::real[], + NULL::real[], + '{-0.0030525422}'::real[], + NULL::real[], + NULL::real[], + E'{"2451524","2452255","2452593","2451546","2452243","2452632","2451179","2451491","2451545","2451176","2451487","2451860","2451866","2452271","2452626","2451154","2451534","2451536","2452228","2452236","2452592","2452603","2451135","2451495","2451871","2451887","2451901","2451910","2452267","2452605","2451053","2451121","2451177","2451537","2451539","2452220","2452229","2452241","2452261","2452617","2452621","2452630","2451122","2451142","2451143","2451144","2451169","2451174","2451490","2452225","2452234","2452245","2452582","2451150","2451156","2451410","2451505","2451510","2451527","2451543","2451867","2451873","2451881","2452219","2452227","2452248","2452262","2452265","2452272","2452624","2451124","2451129","2451145","2451159","2451161","2451165","2451512","2451532","2451544","2451858","2452247","2452249","2452252","2452266","2452277","2452585","2452589","2452591","2452610","2452612","2451094","2451134","2451139","2451155","2451157","2451166","2451171","2451181","2451521","2451522"}'::int4[], + E'{"2450816","2450841","2450870","2450898","2450927","2450953","2450978","2451005","2451030","2451041","2451052","2451067","2451078","2451090","2451104","2451115","2451127","2451140","2451158","2451173","2451198","2451225","2451253","2451279","2451305","2451336","2451363","2451388","2451405","2451418","2451431","2451444","2451456","2451468","2451480","2451494","2451504","2451516","2451529","2451542","2451574","2451599","2451625","2451654","2451681","2451709","2451736","2451761","2451773","2451785","2451798","2451811","2451824","2451835","2451849","2451857","2451872","2451883","2451893","2451902","2451912","2451938","2451969","2451995","2452023","2452052","2452082","2452108","2452130","2452142","2452153","2452165","2452176","2452188","2452200","2452213","2452226","2452240","2452256","2452270","2452289","2452315","2452345","2452373","2452401","2452429","2452455","2452480","2452497","2452509","2452522","2452534","2452547","2452559","2452571","2452584","2452597","2452607","2452619","2452633","2452642"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_sold_time_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 2::smallint, + False::boolean, + 0.0004::real, + 4::integer, + 72739.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0002}'::real[], + NULL::real[], + '{-0.004440563}'::real[], + NULL::real[], + NULL::real[], + E'{"61224"}'::int4[], + E'{"0","3453","5358","7271","8890","10655","12362","14210","15455","16483","17601","18731","20003","21248","22548","23694","24821","25793","26731","27644","28537","29469","30431","31334","32383","33161","33815","34512","35196","35909","36662","37414","38129","38856","39594","40332","41139","41826","42634","43309","43883","44435","44958","45430","45979","46461","47039","47768","48454","49168","49903","50684","51931","53162","54270","55196","56147","57080","57913","58603","59313","60034","60759","61432","62068","62610","63196","63765","64286","64834","65399","65944","66456","66942","67447","67990","68472","68929","69389","69801","70217","70674","71131","71595","72062","72552","73092","73643","74121","74642","75146","75708","76439","77167","77837","78531","79155","80293","81570","82687","86389"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 3::smallint, + False::boolean, + 0.00033333333::real, + 4::integer, + 1933.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0015333333, 0.0014666667, 0.0013333333, 0.0013, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667}'::real[], + NULL::real[], + '{-0.0028389376}'::real[], + NULL::real[], + NULL::real[], + E'{"2451902","2451188","2451164","2451549","2452285","2451156","2451195","2451918","2451956","2452264","2452636","2452641","2451197","2451870","2452241","2451538","2451539","2452279","2452292","2452608","2452626","2452633","2451146","2451167","2451178","2451537","2451547","2451905","2451923","2452250","2452263","2451133","2451201","2451557","2451563","2451607","2451612","2451975","2451986","2452226","2452273","2452281","2452358","2452657","2451171","2451181","2451489","2451518","2451550","2451569","2451935","2451964","2451965","2451966","2451974","2452219","2452251","2452259","2452260","2452261","2452271","2452280","2452300","2452301","2452302","2452317","2452604","2452652","2452665","2451147","2451161","2451177","2451183","2451187","2451189","2451196","2451229","2451545","2451565","2451573","2451575","2451601","2451904","2451951","2451952","2452265","2452288","2452342","2452629","2452635","2452637","2452639","2452696","2451173","2451174","2451184","2451192","2451202","2451212","2451242"}'::int4[], + E'{"2450823","2450897","2450934","2450961","2450989","2451015","2451043","2451061","2451080","2451098","2451114","2451127","2451140","2451154","2451169","2451191","2451209","2451222","2451235","2451248","2451263","2451281","2451306","2451332","2451361","2451390","2451416","2451438","2451454","2451470","2451485","2451500","2451513","2451526","2451540","2451555","2451568","2451582","2451595","2451611","2451627","2451646","2451668","2451693","2451722","2451751","2451778","2451800","2451819","2451836","2451850","2451863","2451876","2451888","2451900","2451914","2451927","2451940","2451953","2451971","2451990","2452009","2452037","2452064","2452091","2452121","2452146","2452167","2452186","2452203","2452218","2452232","2452246","2452262","2452278","2452295","2452310","2452322","2452335","2452350","2452367","2452385","2452412","2452441","2452470","2452495","2452518","2452538","2452555","2452572","2452587","2452600","2452614","2452625","2452644","2452658","2452670","2452682","2452699","2452719","2452762"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_item_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 4::smallint, + False::boolean, + 0.0::real, + 4::integer, + 25062.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334}'::real[], + NULL::real[], + '{0.0007646001}'::real[], + NULL::real[], + NULL::real[], + E'{"1309","3001","4099","5413","8575","10591","14557","17821","19507","20473","22969","24061","25279","25891","27685"}'::int4[], + E'{"3","292","595","880","1169","1423","1683","1956","2282","2539","2800","3062","3343","3608","3865","4153","4415","4682","4951","5245","5505","5762","6071","6367","6655","6949","7232","7535","7831","8117","8386","8665","8928","9193","9470","9724","10001","10264","10546","10828","11122","11402","11708","11998","12271","12547","12823","13105","13399","13675","13977","14251","14527","14821","15112","15404","15715","16020","16304","16561","16846","17098","17353","17617","17892","18163","18434","18732","19039","19317","19609","19870","20149","20450","20749","21043","21305","21579","21881","22171","22460","22750","23029","23276","23536","23794","24084","24373","24664","24932","25236","25519","25793","26068","26349","26599","26899","27169","27447","27703","28000"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_bill_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 5::smallint, + False::boolean, + 0.0005::real, + 4::integer, + 2118340.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0010770214}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"116","19276","39962","61407","85373","106315","126227","147006","167677","187188","207807","226047","246827","269215","286863","307913","329088","349611","369725","390185","410503","432212","454393","475658","496403","519145","539722","559383","580534","601568","623450","645203","665659","686268","708568","730472","751325","772013","790899","811688","835234","859298","877602","896824","916526","937382","958518","980789","1000789","1022926","1044299","1064876","1087128","1107756","1128946","1150087","1170021","1189394","1210544","1229439","1250913","1270764","1292927","1312446","1334616","1355684","1377519","1397078","1417253","1439187","1460077","1482246","1504744","1525557","1548534","1571550","1593101","1612385","1632941","1652821","1671352","1691730","1714302","1736611","1757116","1778569","1799839","1820986","1843004","1862949","1886606","1909295","1929403","1952006","1972435","1993425","2015871","2037659","2058030","2078476","2099961"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_bill_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 6::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 1963935.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.008824349}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"40","19928","41222","60907","80036","96922","115963","135857","155159","175803","193832","214446","233794","253659","271138","289757","310150","329469","349317","369098","389298","407426","427564","448714","467530","487468","506816","526861","546227","565019","583873","602430","621270","641783","661497","681303","700310","718758","737636","756383","774238","793788","810674","829641","848804","867427","886648","906085","926348","946633","965764","984667","1004930","1025614","1045598","1064240","1084145","1103410","1122730","1141053","1162951","1181651","1200809","1219112","1239681","1256860","1276450","1295516","1315122","1334158","1352740","1370260","1387732","1406685","1424904","1445396","1462767","1481762","1502206","1522443","1540631","1559362","1578315","1599220","1619332","1635595","1652747","1672436","1691569","1710869","1731393","1750861","1769679","1790304","1809446","1827792","1845980","1861792","1881771","1900390","1920682"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_bill_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 7::smallint, + False::boolean, + 0.0004::real, + 4::integer, + 7218.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.0033058901}'::real[], + NULL::real[], + NULL::real[], + E'{"3781","4004","5987","61","843","1723","3981","4638","5516","6255"}'::int4[], + E'{"1","74","151","220","297","366","438","505","572","641","716","798","874","948","1023","1092","1157","1226","1295","1359","1442","1517","1582","1651","1718","1792","1861","1935","2012","2083","2154","2230","2301","2372","2434","2504","2576","2652","2724","2792","2863","2944","3013","3076","3151","3224","3294","3362","3441","3513","3581","3647","3726","3800","3878","3953","4022","4092","4172","4242","4311","4397","4466","4540","4612","4679","4750","4824","4901","4972","5042","5119","5194","5265","5338","5410","5486","5560","5636","5707","5777","5842","5916","5982","6054","6128","6200","6267","6337","6411","6487","6563","6634","6700","6776","6846","6915","6987","7054","7128","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_bill_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 8::smallint, + False::boolean, + 0.00043333333::real, + 4::integer, + 1052357.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0035874592}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"85","9940","19201","29062","39466","49793","60322","70621","81217","91226","101312","111021","121563","131884","142160","151553","162420","173225","183462","193550","204825","215954","226612","236859","247641","257974","268112","278524","289530","301367","312534","323713","334146","344753","354965","366093","376805","387572","399555","409543","419685","430267","441452","451787","461680","472204","482625","492470","503572","513596","523426","533872","543655","554311","565216","576083","586017","596802","607700","617077","626774","637067","646810","658305","668298","678578","689888","699650","709454","719802","731419","742750","753186","764659","775390","785925","795925","806880","817378","827664","838917","850289","860509","871551","882170","892610","902269","911835","922478","933542","944712","955041","966086","976281","986032","996335","1007079","1017272","1027779","1039161","1049977"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 9::smallint, + False::boolean, + 0.00046666668::real, + 4::integer, + 2017265.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0043712403}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"132","20637","42180","65350","82849","103817","124318","145423","166944","187687","208737","230590","251949","273686","293387","311515","330800","353486","374240","393971","413452","433019","454488","476432","498011","518833","539886","561032","582486","602670","621844","644001","664886","685045","704748","725254","746493","768247","789025","809330","830506","851780","873145","893841","916134","939717","961138","980901","1000505","1021471","1041002","1061792","1082164","1105084","1127234","1147741","1168328","1188890","1211298","1233312","1255587","1277390","1297125","1318745","1339393","1359133","1378504","1398143","1419107","1441128","1464282","1484205","1506371","1531184","1554208","1572948","1594637","1616564","1637230","1658766","1679115","1701388","1723406","1741784","1760843","1783047","1803735","1827219","1849463","1870419","1891620","1911234","1930891","1951173","1973089","1994829","2016556","2037533","2057883","2079450","2099912"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 10::smallint, + False::boolean, + 0.0004::real, + 4::integer, + 1696478.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.002879893}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"58","18440","37296","56770","75852","94757","113452","130704","151005","170386","188845","208340","228843","248582","267435","285987","306015","323298","341709","360888","379541","400412","418373","438856","457414","475601","496722","517639","535895","554469","574493","594102","613853","632766","651384","668989","687375","706348","726205","744691","763517","783257","803277","822267","842706","862226","882815","901593","921645","941476","960097","979312","997703","1019580","1040057","1057255","1076091","1095006","1112147","1132100","1151343","1170491","1188950","1206650","1225084","1243585","1261069","1279776","1298943","1318050","1338726","1357162","1375169","1394096","1413110","1433576","1450829","1470097","1488671","1509355","1530203","1549360","1567854","1587699","1610090","1629275","1648075","1668590","1688396","1707068","1725533","1743917","1762980","1780125","1799583","1819263","1838350","1859271","1880426","1901289","1920663"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 11::smallint, + False::boolean, + 0.00033333333::real, + 4::integer, + 7200.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.007957798}'::real[], + NULL::real[], + NULL::real[], + E'{"1687","262","626","3196","3456","3820","5684","5796","5891","5987","6436","6562"}'::int4[], + E'{"1","76","145","212","285","352","423","496","571","640","719","798","867","940","1016","1091","1163","1231","1304","1381","1455","1523","1597","1669","1746","1814","1887","1962","2035","2099","2168","2246","2310","2377","2455","2530","2597","2668","2741","2817","2892","2966","3033","3103","3170","3247","3325","3396","3465","3541","3609","3678","3755","3821","3889","3959","4025","4088","4162","4242","4318","4386","4454","4527","4593","4658","4728","4800","4870","4940","5010","5077","5153","5225","5302","5373","5446","5510","5580","5652","5726","5799","5877","5947","6019","6099","6174","6247","6329","6399","6475","6552","6625","6697","6761","6831","6904","6984","7057","7129","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 12::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 1114224.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.001420308}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"26","11309","20636","30995","41857","51685","61820","71405","82282","92581","103069","114250","123704","133498","144567","155732","164935","175559","186082","196700","207930","217367","227511","237781","248348","259679","269692","279097","289318","300619","311485","321268","331270","341882","352231","361830","372945","383382","393987","405239","415555","427032","438461","448473","459112","470359","481524","492717","502982","513710","524165","534333","544663","554875","565192","576567","586168","598386","608959","620175","629750","639772","650199","660474","671797","681920","692252","703223","713224","723069","733136","744467","754388","765063","775010","786658","796244","807059","817848","828650","839270","851099","861790","871850","883229","894821","905183","915481","925975","936732","947814","958254","967993","977342","988420","998860","1009253","1019245","1029913","1039907","1049935"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_web_page_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 13::smallint, + False::boolean, + 0.00026666667::real, + 4::integer, + 172.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.012433333, 0.012266667, 0.012233334, 0.0122, 0.012133333, 0.012133333, 0.0121, 0.011833333, 0.0117, 0.011633334, 0.0116, 0.0114, 0.0114, 0.011366666, 0.011366666, 0.011166667, 0.0111, 0.0111, 0.0111, 0.011066667, 0.011, 0.011, 0.010966667, 0.010866666, 0.010866666, 0.0108, 0.010733333, 0.010666667, 0.010366667, 0.0101333335, 0.008866667, 0.0079, 0.0078, 0.0075333333, 0.0075, 0.0074333334, 0.0074, 0.0072333333, 0.0071666664, 0.0071333335, 0.0071333335, 0.0071, 0.0070666666, 0.0070666666, 0.007033333, 0.007033333, 0.007, 0.0069, 0.0069, 0.0068333335, 0.0068, 0.0067, 0.0067, 0.006666667, 0.0066333334, 0.0064666667, 0.0063, 0.0061666667, 0.0061, 0.0056666667, 0.005433333, 0.0054, 0.0052, 0.0052, 0.0051666666, 0.005133333, 0.0051, 0.0051, 0.0050666668, 0.0050666668, 0.0050333333, 0.0050333333, 0.0049666665, 0.0049666665, 0.0049333335, 0.0049333335, 0.0049333335, 0.0049333335, 0.0049, 0.004833333, 0.004833333, 0.004833333, 0.0048, 0.0048, 0.004766667, 0.0047, 0.0047, 0.0047, 0.0046666665, 0.0046666665, 0.0046666665, 0.0046333335, 0.0046333335, 0.0046333335, 0.0045666667, 0.0045666667, 0.0045666667, 0.0045666667, 0.0045666667, 0.0045666667}'::real[], + NULL::real[], + '{0.0037705055}'::real[], + NULL::real[], + NULL::real[], + E'{"31","25","103","145","7","163","109","49","151","115","157","55","97","73","169","37","61","79","127","172","91","121","139","1","85","13","67","43","19","133","122","44","116","152","74","68","128","80","26","38","164","2","98","170","62","86","134","32","146","50","92","56","104","20","158","8","140","110","14","130","129","57","89","136","29","87","113","135","112","142","75","99","17","106","35","64","69","125","33","15","46","82","88","155","141","11","39","154","45","83","117","9","77","160","27","59","63","81","94","118"}'::int4[], + E'{"3","3","4","5","6","10","12","16","18","21","22","23","24","28","30","34","40","40","41","47","47","51","52","52","53","54","58","65","65","70","71","71","76","76","84","93","93","95","100","100","101","105","107","107","111","114","119","120","123","124","126","131","132","137","138","143","144","147","148","149","150","153","156","159","161","162","165","166","167","167","171","171"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_web_site_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 14::smallint, + False::boolean, + 0.0003::real, + 4::integer, + 32.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.060833335, 0.059366666, 0.058766667, 0.0585, 0.0584, 0.0576, 0.0549, 0.036, 0.0357, 0.034733333, 0.034666665, 0.034433335, 0.025, 0.0247, 0.024433333, 0.0242, 0.0242, 0.024066666, 0.024033334, 0.023866666, 0.023566667, 0.023533333, 0.023266668, 0.023166666, 0.0231, 0.022766666, 0.022666667, 0.013133333, 0.012033333, 0.011566667, 0.011566667, 0.010933333}'::real[], + '{0.04239957}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"31","7","32","19","1","25","13","2","14","8","26","20","28","22","4","21","23","27","3","9","16","10","17","15","11","5","29","6","24","12","30","18"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_ship_mode_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 15::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 20.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0519, 0.05183333, 0.050966665, 0.050866667, 0.050633334, 0.050566666, 0.050533332, 0.050333332, 0.049933333, 0.049933333, 0.049933333, 0.049833335, 0.049833335, 0.0496, 0.049433332, 0.049233332, 0.0488, 0.0488, 0.048466668, 0.0482}'::real[], + '{0.056176268}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"11","4","17","19","16","5","8","12","6","7","18","2","10","15","9","20","1","3","13","14"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_warehouse_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 16::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 5.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.20156667, 0.20043333, 0.19946666, 0.19943333, 0.19873333}'::real[], + '{0.19803289}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3","4","1","5","2"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_promo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 17::smallint, + False::boolean, + 0.0003::real, + 4::integer, + 357.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0037666666, 0.0037, 0.0035333333, 0.0035333333, 0.0035}'::real[], + NULL::real[], + '{0.005415437}'::real[], + NULL::real[], + NULL::real[], + E'{"169","252","72","118","335"}'::int4[], + E'{"1","4","7","11","15","19","22","26","29","33","36","39","43","47","51","54","58","61","65","68","71","76","79","83","86","89","93","96","100","103","107","110","114","117","122","125","129","132","136","139","143","146","150","153","157","161","164","168","173","176","180","183","187","190","193","197","200","204","208","211","215","218","222","225","229","233","236","240","244","247","251","255","259","262","266","269","273","276","279","283","287","290","294","297","300","304","308","311","315","318","322","325","329","332","337","340","344","347","351","354","357"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_order_number +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 18::smallint, + False::boolean, + 0.0::real, + 8::integer, + 31567772.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 412::oid, + 412::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.06999581}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"121","317641","648578","945597","1288393","1573610","1860492","2157681","2459791","2761260","3028976","3321440","3616466","3914756","4237831","4544558","4833953","5074651","5373885","5669291","6007647","6291071","6582751","6873797","7171514","7488211","7794326","8082653","8395928","8704266","9030833","9316184","9652205","9924686","10207036","10507877","10826653","11124316","11413852","11700753","11996463","12275214","12553434","12843505","13133657","13432219","13722004","14024091","14320895","14620641","14953137","15244476","15539965","15844103","16163890","16449629","16748023","17025956","17343876","17630387","17939341","18239124","18538613","18878347","19178480","19467260","19779045","20065269","20381326","20712670","20992673","21280690","21613312","21911183","22191172","22482391","22796790","23114702","23395001","23716661","24042960","24340548","24628420","24894268","25221472","25528346","25827723","26138822","26441040","26745092","27033424","27319988","27614893","27924604","28205457","28532777","28829016","29120974","29422245","29678171","29997708"}'::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[]); +-- +-- Table: web_sales, Attribute: ws_quantity +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 19::smallint, + False::boolean, + 0.0003::real, + 4::integer, + 100.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0117, 0.011633334, 0.0113, 0.0111, 0.011066667, 0.010933333, 0.010933333, 0.0109, 0.0109, 0.0109, 0.010833333, 0.0108, 0.010766666, 0.0107, 0.010666667, 0.010566667, 0.010466667, 0.010466667, 0.0104, 0.010366667, 0.010366667, 0.010333333, 0.0103, 0.010266666, 0.010266666, 0.010266666, 0.010233333, 0.010233333, 0.010233333, 0.0102, 0.0101666665, 0.0101666665, 0.0101333335, 0.0101333335, 0.0101333335, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010033334, 0.010033334, 0.010033334, 0.010033334, 0.010033334, 0.010033334, 0.01, 0.01, 0.01, 0.009966667, 0.009966667, 0.009933333, 0.0099, 0.0099, 0.009866667, 0.009866667, 0.009866667, 0.009833333, 0.0098, 0.0098, 0.009766666, 0.009766666, 0.009766666, 0.009733333, 0.009733333, 0.0097, 0.0097, 0.0097, 0.0097, 0.009666666, 0.009633333, 0.0096, 0.0096, 0.0096, 0.009566667, 0.009533334, 0.009533334, 0.009533334, 0.009533334, 0.0095, 0.0095, 0.009466667, 0.009466667, 0.0094, 0.0094, 0.0094, 0.009366667, 0.009366667, 0.009366667, 0.009333333, 0.009266667, 0.009233333, 0.0092, 0.009133333, 0.009133333, 0.009, 0.008933334, 0.008666666}'::real[], + '{0.014699079}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"55","56","49","74","6","69","80","42","53","76","82","93","23","10","41","7","26","61","70","73","90","68","40","58","72","78","39","59","71","2","21","34","17","54","84","8","22","24","38","60","75","77","29","33","47","95","96","98","18","52","66","3","64","15","31","83","5","57","87","13","36","67","9","37","79","4","46","1","45","91","92","11","97","30","50","81","43","16","44","48","85","25","100","12","63","20","32","86","19","27","99","35","89","62","65","28","51","14","88","94"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); +-- +-- Table: web_sales, Attribute: ws_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 20::smallint, + False::boolean, + 0.0004::real, + 6::integer, + 9928.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.007165513}'::real[], + NULL::real[], + NULL::real[], + E'{"25.53","30.19","51.31","53.30","55.63","60.00","60.37","72.31","83.48","87.79"}'::numeric[], + E'{"1.00","2.00","3.01","3.99","5.01","5.98","6.90","7.81","8.78","9.77","10.82","11.75","12.73","13.64","14.64","15.70","16.68","17.70","18.55","19.52","20.51","21.47","22.49","23.60","24.61","25.59","26.60","27.68","28.73","29.69","30.74","31.63","32.62","33.59","34.69","35.74","36.73","37.59","38.60","39.62","40.68","41.65","42.59","43.49","44.44","45.41","46.35","47.34","48.33","49.28","50.23","51.18","52.17","53.17","54.21","55.20","56.12","57.20","58.17","59.12","60.16","61.11","62.13","63.13","64.04","65.08","66.03","66.99","67.92","69.02","69.96","71.00","71.88","72.93","73.95","74.98","76.06","77.09","78.09","79.05","79.99","81.05","82.06","83.02","84.06","85.19","86.28","87.20","88.17","89.18","90.18","91.03","92.00","92.96","94.05","94.97","95.97","96.93","97.94","98.99","100.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 21::smallint, + False::boolean, + 0.00026666667::real, + 6::integer, + 23431.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.0003, 0.00026666667}'::real[], + NULL::real[], + '{-0.011709301}'::real[], + NULL::real[], + NULL::real[], + E'{"12.66","82.70","21.34"}'::numeric[], + E'{"1.11","3.63","5.56","7.34","9.01","10.72","12.60","14.50","16.23","17.89","19.83","21.55","23.30","25.17","26.92","28.63","30.25","31.84","33.78","35.57","37.56","39.36","41.23","42.89","44.61","46.36","48.07","50.03","51.95","53.80","55.48","57.36","59.16","60.92","62.83","64.68","66.48","68.14","69.79","71.63","73.63","75.51","77.07","78.85","80.80","82.62","84.47","86.12","88.00","89.88","91.57","93.44","95.26","97.24","99.03","100.89","102.79","104.74","106.47","108.50","110.28","112.13","114.15","116.34","118.35","120.77","122.81","124.89","127.28","129.50","131.92","134.57","136.88","139.32","142.07","144.61","147.18","150.06","152.87","155.83","158.87","161.99","165.25","168.54","172.12","175.74","179.09","183.39","187.67","192.09","197.29","201.65","207.10","212.73","218.60","225.49","232.53","240.48","251.38","266.95","296.85"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 22::smallint, + False::boolean, + 0.00036666667::real, + 6::integer, + 14531.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0104, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.0046185157}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","2.06","2.70","3.03","3.83","3.87","0.80","0.94","3.04","4.70","5.59","11.09","0.70","0.89","1.17","1.28","1.33","1.55","1.81","2.13","2.80","3.51","3.68","3.75","3.77","4.11","4.41","6.03","15.17","0.41","0.72","0.86","1.12","1.21","1.44","1.66","2.24","2.46","2.92","3.38","3.40","3.43","4.23","4.64","4.98","5.48","5.60","5.68","6.12","6.37","6.49","7.58","8.47","11.40","15.80","0.30","0.66","0.71","1.14","1.18","1.32","1.49","1.53","1.70","1.89","2.03","2.05","2.22","2.37","2.43","2.52","2.53","2.78","2.82","2.87","2.88","3.25","3.61","3.67","3.71","3.94","3.95","4.17","4.22","4.59","4.82","4.91","5.07","5.19","5.24","5.64","5.70","6.11","6.53","6.57","6.95","7.00","7.73","7.84","7.99"}'::numeric[], + E'{"0.01","0.60","1.11","1.64","2.20","2.74","3.31","3.91","4.48","5.09","5.63","6.17","6.81","7.45","8.09","8.66","9.30","9.96","10.52","11.12","11.75","12.44","13.09","13.82","14.54","15.25","15.99","16.72","17.50","18.22","19.04","19.87","20.70","21.43","22.29","23.23","24.09","25.02","25.92","26.85","27.82","28.75","29.71","30.71","31.75","32.78","33.78","34.80","35.93","37.02","38.14","39.29","40.43","41.60","42.81","44.07","45.33","46.59","47.86","49.28","50.73","52.22","53.69","55.11","56.86","58.38","60.03","61.68","63.22","65.10","66.78","68.62","70.35","72.19","74.30","76.43","78.67","81.00","83.19","85.26","87.83","90.51","93.08","95.96","98.78","102.09","105.42","109.06","112.87","116.26","120.47","125.09","130.89","136.72","143.90","151.28","160.21","170.24","184.92","205.80","292.81"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_discount_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 23::smallint, + False::boolean, + 0.00023333334::real, + 6::integer, + 143461.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.008966667, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.0031384944}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","47.60","333.00"}'::numeric[], + E'{"0.11","11.18","20.44","31.11","41.86","52.90","64.50","75.24","88.16","100.08","113.88","127.60","141.90","158.13","176.97","194.72","211.91","230.04","247.80","270.20","292.80","314.96","336.26","358.72","384.84","412.08","437.64","462.84","489.06","516.88","547.36","574.47","607.20","636.57","669.28","702.30","740.88","777.49","815.40","855.00","891.48","929.25","969.54","1014.26","1058.88","1106.04","1154.78","1202.30","1251.81","1305.20","1355.86","1412.46","1469.43","1528.56","1594.50","1659.35","1728.00","1792.70","1862.70","1933.38","2005.02","2079.36","2157.40","2242.56","2326.52","2413.80","2503.90","2604.75","2707.31","2815.80","2923.56","3023.16","3143.36","3267.04","3403.08","3542.86","3676.34","3816.00","3975.42","4122.84","4289.29","4480.63","4684.35","4859.40","5062.32","5306.40","5536.80","5796.00","6095.70","6444.80","6772.48","7170.48","7599.34","8105.58","8650.46","9275.07","10054.69","11049.02","12248.28","14374.90","25989.60"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=24; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 24::smallint, + False::boolean, + 0.00033333333::real, + 6::integer, + 145118.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0104, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-3.1174983e-05}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","42.12","43.56"}'::numeric[], + E'{"0.15","11.55","21.09","31.38","41.40","52.47","63.68","75.30","87.36","102.00","115.28","130.23","143.98","161.58","177.08","195.03","212.64","231.77","250.56","270.60","291.64","313.31","336.44","359.92","382.11","408.00","433.65","460.80","487.06","515.16","541.38","569.88","600.62","631.67","663.75","696.96","733.08","770.99","809.00","848.70","887.04","930.69","971.28","1008.54","1054.04","1100.44","1151.97","1201.56","1252.10","1308.53","1366.40","1428.45","1484.64","1537.62","1599.40","1660.56","1730.20","1807.20","1873.92","1944.84","2025.30","2097.54","2180.70","2264.22","2351.00","2447.28","2539.20","2636.70","2733.72","2834.16","2948.78","3067.62","3174.24","3287.79","3403.35","3526.74","3663.90","3815.55","3966.90","4120.92","4294.76","4473.13","4690.56","4881.66","5088.60","5302.54","5533.92","5818.56","6094.50","6392.75","6752.16","7092.90","7519.73","7968.00","8494.71","9116.10","9877.56","10865.55","12247.37","14678.04","25048.32"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=25; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 25::smallint, + False::boolean, + 6.666667e-05::real, + 6::integer, + 196312.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0027050157}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.93","35.43","56.70","76.82","96.60","119.36","142.52","164.70","188.88","216.20","242.60","269.10","293.82","318.16","349.23","379.35","408.51","439.04","467.04","497.98","532.65","566.68","603.20","640.29","677.73","713.32","749.62","785.46","825.12","866.00","906.84","950.49","991.20","1035.40","1086.15","1131.19","1176.84","1221.96","1272.15","1321.00","1365.67","1417.72","1474.75","1528.74","1580.92","1635.13","1688.70","1744.40","1798.35","1854.56","1916.24","1981.60","2043.72","2105.60","2172.12","2249.94","2313.36","2380.16","2454.80","2530.80","2606.81","2680.56","2757.50","2832.83","2910.27","2989.11","3068.24","3147.96","3230.25","3327.77","3416.49","3506.28","3596.71","3686.50","3790.16","3884.76","3987.72","4089.55","4193.84","4304.25","4429.44","4544.01","4671.15","4795.30","4936.88","5074.40","5225.22","5382.29","5548.20","5722.02","5905.20","6111.16","6317.28","6532.92","6787.56","7078.66","7384.50","7726.50","8117.00","8641.90","9964.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=26; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 26::smallint, + False::boolean, + 0.00046666668::real, + 7::integer, + 373627.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0056457715}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3.82","64.44","101.53","139.08","181.44","220.10","260.15","300.40","347.16","399.06","442.80","490.98","543.49","592.36","645.05","702.61","756.24","813.24","866.12","923.12","986.70","1051.75","1114.12","1180.48","1241.10","1306.88","1373.56","1443.48","1522.30","1594.02","1668.20","1759.04","1834.80","1908.80","1995.12","2087.00","2170.48","2274.40","2365.65","2454.60","2553.48","2645.06","2748.90","2856.00","2958.12","3067.00","3175.68","3276.80","3382.95","3504.28","3617.46","3732.75","3852.12","3975.75","4098.27","4220.40","4355.04","4483.16","4613.12","4751.70","4888.73","5040.00","5184.62","5346.00","5487.69","5630.85","5786.64","5954.61","6113.82","6291.90","6477.02","6674.57","6870.24","7079.40","7274.74","7502.88","7699.20","7915.05","8155.70","8392.50","8646.08","8912.73","9191.07","9444.42","9740.49","10052.91","10348.48","10732.50","11116.80","11510.34","11983.48","12501.83","13062.54","13645.80","14316.72","15042.00","15921.12","16966.66","18501.25","20712.09","29685.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=27; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 27::smallint, + False::boolean, + 0.00033333333::real, + 6::integer, + 21995.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.10896666, 0.00066666666, 0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667}'::real[], + NULL::real[], + '{0.004573461}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","0.35","0.50","2.16","0.22","0.26","0.34","1.08","1.53","0.37","0.46","0.52","0.57","0.92","2.29","0.03","0.09","0.12","0.21","0.42","0.43","0.60","0.75","0.04","0.07","0.28","0.32","0.36","0.78","0.87","1.16","1.94","2.24","2.35","3.04","3.72","5.24","0.11","0.27","0.39","0.48","0.53","0.56","0.58","0.69","0.90","1.02","1.07","1.18","1.44","1.72","2.20","2.67","4.41","0.06","0.16","0.25","0.38","0.47","0.77","0.79","0.85","1.01","1.04","1.19","1.23","1.78","1.90","1.91","1.92","2.21","2.60","2.94","4.33","5.60","0.02","0.08","0.18","0.19","0.23","0.24","0.30","0.31","0.49","0.51","0.54","0.55","0.66","0.67","0.81","0.93","1.00","1.14","1.42","1.45","1.56","1.80","1.88","2.26","2.50"}'::numeric[], + E'{"0.01","0.83","1.34","1.75","2.23","2.69","3.10","3.49","3.97","4.43","4.88","5.35","5.90","6.43","7.00","7.69","8.38","8.95","9.70","10.49","11.20","11.89","12.64","13.48","14.34","15.18","16.14","16.99","18.05","19.01","19.99","21.08","22.13","23.33","24.48","25.75","26.99","28.33","29.92","31.37","32.94","34.59","36.09","37.92","39.69","41.47","43.32","45.30","47.20","48.97","50.94","53.17","55.40","57.80","60.19","62.89","65.72","68.28","71.23","74.17","77.49","81.04","84.54","88.21","91.73","95.71","100.03","104.60","109.56","114.83","119.85","125.13","131.38","137.60","144.21","150.45","157.35","164.05","171.91","179.70","189.75","199.15","211.02","222.05","234.00","246.12","259.74","274.59","291.64","309.69","330.12","352.06","377.91","410.73","445.30","487.66","545.67","620.87","718.11","874.66","2139.82"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_coupon_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=28; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 28::smallint, + False::boolean, + 0.00043333333::real, + 3::integer, + 6981.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.8047}'::real[], + NULL::real[], + '{0.6524823}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.07","2.81","5.16","8.29","11.57","14.98","18.25","22.17","25.74","29.25","33.46","38.75","43.09","47.74","52.23","58.18","63.93","69.06","75.54","81.43","90.24","97.41","105.00","112.34","119.93","128.94","139.96","150.39","161.12","170.13","179.08","190.02","204.24","216.80","230.79","242.88","256.72","269.70","285.28","299.98","321.93","337.96","359.92","379.16","398.56","411.26","434.53","456.18","480.99","503.11","534.41","559.69","587.89","615.55","642.62","675.15","706.02","738.29","769.44","805.37","834.44","867.90","910.13","947.74","994.63","1042.05","1081.01","1133.06","1191.03","1244.46","1291.32","1335.46","1389.96","1451.73","1524.48","1590.31","1679.40","1745.45","1825.78","1907.96","2007.12","2097.34","2207.59","2313.09","2431.84","2586.43","2750.05","2882.04","3053.86","3220.08","3468.52","3726.47","4048.99","4401.10","4748.00","5156.34","5788.23","6391.13","7477.72","9404.42","23044.45"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_ext_ship_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=29; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 29::smallint, + False::boolean, + 0.00026666667::real, + 6::integer, + 83043.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.020966666, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.006589469}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","450.80","10.92","48.40","68.40","79.20","93.60","113.40","142.80","6.72","9.18","15.84","16.80","23.10","32.40","37.80","38.22","52.80","84.00","105.30","106.26","111.60","126.00","131.04","143.04","184.80","198.00","216.72","305.76","333.00","369.60"}'::numeric[], + E'{"0.12","6.44","12.04","17.91","23.85","29.60","36.11","42.78","49.62","56.16","63.60","71.04","78.89","87.72","96.00","104.00","113.54","123.20","133.92","145.52","155.25","165.02","176.80","189.20","201.63","213.48","226.80","240.50","253.76","267.85","282.72","298.89","316.10","330.25","346.00","363.00","380.52","400.32","419.76","438.40","457.56","477.96","499.20","523.27","545.37","568.70","592.32","616.00","643.86","672.10","699.48","723.24","752.40","785.46","813.93","846.30","879.06","914.50","948.00","983.84","1020.80","1057.50","1097.25","1140.48","1180.20","1229.80","1277.46","1323.70","1377.74","1434.40","1494.96","1555.07","1608.18","1672.32","1736.04","1799.16","1871.10","1948.48","2020.46","2099.31","2180.40","2270.40","2362.56","2458.14","2562.12","2692.80","2810.50","2931.74","3077.75","3238.31","3432.00","3613.44","3833.20","4076.73","4350.06","4641.78","5042.73","5561.25","6238.65","7336.85","12822.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_paid +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=30; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 30::smallint, + False::boolean, + 0.00043333333::real, + 6::integer, + 155462.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0125, 0.0002}'::real[], + NULL::real[], + '{-0.0023643773}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","43.56"}'::numeric[], + E'{"0.06","6.90","13.40","20.67","28.47","35.91","44.46","53.53","63.00","73.44","83.29","95.48","107.88","119.93","132.34","144.75","160.46","175.10","190.14","206.83","222.10","239.84","258.46","275.49","294.81","315.96","336.50","358.36","379.82","403.62","429.78","456.00","481.00","507.99","534.40","561.61","589.38","619.65","651.00","683.82","717.57","755.54","794.30","830.96","872.19","911.09","954.18","992.44","1035.44","1083.95","1133.73","1186.24","1242.02","1296.12","1352.96","1411.83","1470.70","1528.24","1597.05","1662.45","1734.44","1814.25","1880.05","1954.56","2034.12","2110.08","2198.27","2289.76","2377.50","2475.02","2583.69","2686.32","2791.36","2899.80","3029.56","3156.05","3271.45","3395.25","3526.10","3668.35","3836.05","4007.85","4182.57","4382.49","4602.96","4828.07","5062.08","5308.86","5595.68","5910.43","6219.45","6596.00","7000.70","7489.02","8014.44","8603.82","9384.00","10412.72","11672.78","14217.46","24307.65"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_paid_inc_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=31; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 31::smallint, + False::boolean, + 0.0003::real, + 6::integer, + 246002.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.012466666, 0.0002}'::real[], + NULL::real[], + '{-0.0024806631}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","57.28"}'::numeric[], + E'{"0.06","7.24","14.07","21.63","29.77","37.41","46.45","56.03","66.38","76.71","87.19","99.41","112.52","125.57","138.96","151.61","167.50","182.92","198.36","216.24","231.78","251.32","269.52","288.70","306.76","329.56","350.90","374.93","397.02","422.18","449.02","474.60","501.75","531.09","559.18","587.44","616.28","646.64","680.44","714.49","750.33","786.11","828.41","870.48","912.34","955.22","997.24","1039.57","1083.93","1132.88","1186.06","1237.31","1299.09","1355.29","1409.04","1474.72","1532.54","1592.67","1668.97","1738.60","1815.18","1890.75","1969.95","2046.13","2120.47","2201.72","2290.88","2394.32","2487.04","2585.21","2701.06","2805.79","2915.24","3036.02","3164.89","3298.38","3422.94","3549.84","3672.00","3832.97","4016.75","4182.78","4379.44","4577.43","4811.80","5061.31","5307.67","5555.95","5845.41","6173.76","6521.98","6885.89","7318.05","7810.46","8377.41","8999.04","9828.90","10854.91","12167.98","14819.83","25915.60"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_paid_inc_ship +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=32; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 32::smallint, + False::boolean, + 0.0::real, + 7::integer, + 301791.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0004}'::real[], + NULL::real[], + '{-0.0042563225}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.15","26.90","47.27","66.00","87.66","110.70","130.90","153.36","177.10","200.26","226.76","251.37","278.08","304.01","330.99","360.93","391.74","422.88","454.10","486.85","518.42","554.54","589.68","627.00","662.74","700.56","740.52","781.44","822.39","863.04","903.00","950.37","1000.58","1042.83","1092.42","1141.32","1193.41","1249.05","1308.51","1363.96","1424.64","1479.06","1542.09","1608.99","1672.64","1734.00","1802.29","1875.28","1951.50","2031.12","2099.65","2168.25","2252.68","2350.87","2431.91","2518.02","2615.34","2697.47","2798.23","2897.37","3002.40","3098.34","3202.68","3308.00","3423.75","3542.37","3654.66","3775.98","3909.42","4028.66","4167.30","4309.90","4464.88","4615.84","4766.58","4937.48","5114.56","5268.48","5449.86","5643.55","5859.42","6093.48","6323.40","6589.80","6865.04","7151.04","7471.75","7798.48","8167.15","8545.18","8940.05","9403.24","9923.00","10538.58","11210.00","12020.74","12946.34","14134.36","15809.06","18879.36","36064.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_paid_inc_ship_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=33; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 33::smallint, + False::boolean, + 0.0::real, + 7::integer, + 580101.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0004}'::real[], + NULL::real[], + '{-0.0042436747}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.15","27.32","48.14","67.61","90.21","112.88","134.60","157.01","181.53","205.08","232.37","257.90","285.99","310.90","338.12","369.71","401.62","432.71","466.15","498.29","532.67","568.73","606.20","644.59","677.83","716.94","756.42","802.49","841.36","885.36","929.11","973.55","1022.68","1069.26","1124.40","1170.12","1225.33","1284.57","1342.88","1398.12","1459.13","1514.68","1583.89","1648.82","1714.40","1780.42","1851.90","1924.20","2000.32","2078.12","2156.48","2230.86","2317.75","2412.28","2495.80","2582.42","2677.84","2771.12","2874.03","2977.91","3073.79","3182.59","3288.45","3403.98","3512.75","3630.83","3761.65","3884.79","4011.93","4143.91","4277.61","4436.91","4583.20","4733.60","4884.95","5069.66","5251.05","5427.69","5605.76","5797.65","6025.63","6250.68","6502.49","6751.35","7071.69","7353.10","7674.41","8024.66","8431.89","8815.18","9204.22","9715.49","10211.19","10847.31","11539.04","12347.17","13354.05","14622.68","16369.05","19567.99","38203.82"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Table: web_sales, Attribute: ws_net_profit +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=34; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 34::smallint, + False::boolean, + 0.0::real, + 6::integer, + 206397.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333}'::real[], + NULL::real[], + '{-0.009154078}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"-9828.00","-6282.88","-5353.36","-4759.04","-4327.14","-3980.40","-3689.38","-3415.01","-3200.70","-2979.08","-2776.62","-2608.96","-2449.44","-2301.84","-2164.10","-2041.05","-1931.67","-1824.00","-1713.27","-1605.45","-1519.20","-1432.56","-1351.42","-1271.98","-1193.64","-1123.08","-1053.59","-994.98","-939.75","-874.80","-825.28","-773.60","-726.24","-683.34","-636.68","-597.28","-559.37","-523.79","-486.00","-449.68","-416.64","-383.24","-353.70","-325.01","-296.56","-271.44","-246.81","-222.48","-199.76","-177.30","-156.21","-138.71","-119.47","-102.79","-85.56","-72.32","-58.00","-46.02","-34.44","-22.62","-11.88","-1.54","7.80","20.24","33.81","49.02","66.06","87.48","111.15","138.51","166.66","197.05","235.56","273.56","316.31","364.32","415.57","472.36","537.60","604.77","677.15","764.42","854.28","951.99","1064.31","1176.00","1306.32","1449.60","1614.67","1788.28","1984.00","2213.82","2467.72","2782.77","3119.84","3508.34","4027.92","4724.10","5672.52","7345.81","15055.16"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); +-- +-- Query text +-- + set search_path=cte_bug,public; + set gp_cte_sharing = on; + explain(costs off) + with year_total as ( + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2) + year_total + ,'s' sale_type + from cte_bug.customer + ,cte_bug.store_sales + ,cte_bug.date_dim + where c_customer_sk = ss_customer_sk + and ss_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum((((cs_ext_list_price-cs_ext_wholesale_cost-cs_ext_discount_amt)+cs_ext_sales_price)/2) + ) year_total + ,'c' sale_type + from cte_bug.customer + ,cte_bug.catalog_sales + ,cte_bug.date_dim + where c_customer_sk = cs_bill_customer_sk + and cs_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum((((ws_ext_list_price-ws_ext_wholesale_cost-ws_ext_discount_amt)+ws_ext_sales_price)/2) + ) year_total + ,'w' sale_type + from cte_bug.customer + ,cte_bug.web_sales + ,cte_bug.date_dim + where c_customer_sk = ws_bill_customer_sk + and ws_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + ) + select + t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_login + from year_total t_s_firstyear + ,year_total t_s_secyear + ,year_total t_c_firstyear + ,year_total t_c_secyear + ,year_total t_w_firstyear + ,year_total t_w_secyear + where t_s_secyear.customer_id = t_s_firstyear.customer_id + and t_s_firstyear.customer_id = t_c_secyear.customer_id + and t_s_firstyear.customer_id = t_c_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_secyear.customer_id + and t_s_firstyear.sale_type = 's' + and t_c_firstyear.sale_type = 'c' + and t_w_firstyear.sale_type = 'w' + and t_s_secyear.sale_type = 's' + and t_c_secyear.sale_type = 'c' + and t_w_secyear.sale_type = 'w' + and t_s_firstyear.dyear = 2001 + and t_s_secyear.dyear = 2001+1 + and t_c_firstyear.dyear = 2001 + and t_c_secyear.dyear = 2001+1 + and t_w_firstyear.dyear = 2001 + and t_w_secyear.dyear = 2001+1 + and t_s_firstyear.year_total > 0 + and t_c_firstyear.year_total > 0 + and t_w_firstyear.year_total > 0 + and case when t_c_firstyear.year_total > 0 then + t_c_secyear.year_total / t_c_firstyear.year_total else null end > case + when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / + t_s_firstyear.year_total else null end + and case when t_c_firstyear.year_total > 0 then + t_c_secyear.year_total / t_c_firstyear.year_total else null end > case + when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / + t_w_firstyear.year_total else null end + order by t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_login + limit 100; + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Merge Key: share0_ref7.c_customer_id, share0_ref7.c_first_name, share0_ref7.c_last_name, share0_ref7.c_login + -> Sort + Sort Key: share0_ref7.c_customer_id, share0_ref7.c_first_name, share0_ref7.c_last_name, share0_ref7.c_login + -> Sequence + -> Shared Scan (share slice:id 1:0) + -> Append + -> Result + Filter: (((('s'::text) = 's'::text) AND (date_dim.d_year = 2001) AND ((sum(((((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost) - store_sales.ss_ext_discount_amt) + store_sales.ss_ext_sales_price) / '2'::numeric))) > '0'::numeric)) OR ((('s'::text) = 's'::text) AND (date_dim.d_year = 2002)) OR ((('s'::text) = 'c'::text) AND (date_dim.d_year = 2001) AND ((sum(((((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost) - store_sales.ss_ext_discount_amt) + store_sales.ss_ext_sales_price) / '2'::numeric))) > '0'::numeric)) OR ((('s'::text) = 'c'::text) AND (date_dim.d_year = 2002)) OR ((('s'::text) = 'w'::text) AND (date_dim.d_year = 2001) AND ((sum(((((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost) - store_sales.ss_ext_discount_amt) + store_sales.ss_ext_sales_price) / '2'::numeric))) > '0'::numeric)) OR ((('s'::text) = 'w'::text) AND (date_dim.d_year = 2002))) + -> Finalize HashAggregate + Group Key: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year + -> Streaming Partial HashAggregate + Group Key: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year + -> Hash Join + Hash Cond: (store_sales.ss_customer_sk = customer.c_customer_sk) + -> Redistribute Motion 3:3 (slice3; segments: 3) + Hash Key: store_sales.ss_customer_sk + -> Hash Join + Hash Cond: (store_sales.ss_sold_date_sk = date_dim.d_date_sk) + -> Seq Scan on store_sales + -> Hash + -> Broadcast Motion 3:3 (slice4; segments: 3) + -> Seq Scan on date_dim + Filter: ((d_year = 2001) OR (d_year = 2002)) + -> Hash + -> Seq Scan on customer + -> Result + Filter: (((('c'::text) = 's'::text) AND (date_dim_1.d_year = 2001) AND ((sum(((((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost) - catalog_sales.cs_ext_discount_amt) + catalog_sales.cs_ext_sales_price) / '2'::numeric))) > '0'::numeric)) OR ((('c'::text) = 's'::text) AND (date_dim_1.d_year = 2002)) OR ((('c'::text) = 'c'::text) AND (date_dim_1.d_year = 2001) AND ((sum(((((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost) - catalog_sales.cs_ext_discount_amt) + catalog_sales.cs_ext_sales_price) / '2'::numeric))) > '0'::numeric)) OR ((('c'::text) = 'c'::text) AND (date_dim_1.d_year = 2002)) OR ((('c'::text) = 'w'::text) AND (date_dim_1.d_year = 2001) AND ((sum(((((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost) - catalog_sales.cs_ext_discount_amt) + catalog_sales.cs_ext_sales_price) / '2'::numeric))) > '0'::numeric)) OR ((('c'::text) = 'w'::text) AND (date_dim_1.d_year = 2002))) + -> Finalize HashAggregate + Group Key: customer_1.c_customer_id, customer_1.c_first_name, customer_1.c_last_name, customer_1.c_preferred_cust_flag, customer_1.c_birth_country, customer_1.c_login, customer_1.c_email_address, date_dim_1.d_year + -> Redistribute Motion 3:3 (slice5; segments: 3) + Hash Key: customer_1.c_customer_id, customer_1.c_first_name, customer_1.c_last_name, customer_1.c_preferred_cust_flag, customer_1.c_birth_country, customer_1.c_login, customer_1.c_email_address, date_dim_1.d_year + -> Streaming Partial HashAggregate + Group Key: customer_1.c_customer_id, customer_1.c_first_name, customer_1.c_last_name, customer_1.c_preferred_cust_flag, customer_1.c_birth_country, customer_1.c_login, customer_1.c_email_address, date_dim_1.d_year + -> Hash Join + Hash Cond: (catalog_sales.cs_bill_customer_sk = customer_1.c_customer_sk) + -> Redistribute Motion 3:3 (slice6; segments: 3) + Hash Key: catalog_sales.cs_bill_customer_sk + -> Hash Join + Hash Cond: (catalog_sales.cs_sold_date_sk = date_dim_1.d_date_sk) + -> Seq Scan on catalog_sales + -> Hash + -> Broadcast Motion 3:3 (slice7; segments: 3) + -> Seq Scan on date_dim date_dim_1 + Filter: ((d_year = 2001) OR (d_year = 2002)) + -> Hash + -> Seq Scan on customer customer_1 + -> Result + Filter: (((('w'::text) = 's'::text) AND (date_dim_2.d_year = 2001) AND ((sum(((((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost) - web_sales.ws_ext_discount_amt) + web_sales.ws_ext_sales_price) / '2'::numeric))) > '0'::numeric)) OR ((('w'::text) = 's'::text) AND (date_dim_2.d_year = 2002)) OR ((('w'::text) = 'c'::text) AND (date_dim_2.d_year = 2001) AND ((sum(((((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost) - web_sales.ws_ext_discount_amt) + web_sales.ws_ext_sales_price) / '2'::numeric))) > '0'::numeric)) OR ((('w'::text) = 'c'::text) AND (date_dim_2.d_year = 2002)) OR ((('w'::text) = 'w'::text) AND (date_dim_2.d_year = 2001) AND ((sum(((((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost) - web_sales.ws_ext_discount_amt) + web_sales.ws_ext_sales_price) / '2'::numeric))) > '0'::numeric)) OR ((('w'::text) = 'w'::text) AND (date_dim_2.d_year = 2002))) + -> Finalize HashAggregate + Group Key: customer_2.c_customer_id, customer_2.c_first_name, customer_2.c_last_name, customer_2.c_preferred_cust_flag, customer_2.c_birth_country, customer_2.c_login, customer_2.c_email_address, date_dim_2.d_year + -> Redistribute Motion 3:3 (slice8; segments: 3) + Hash Key: customer_2.c_customer_id, customer_2.c_first_name, customer_2.c_last_name, customer_2.c_preferred_cust_flag, customer_2.c_birth_country, customer_2.c_login, customer_2.c_email_address, date_dim_2.d_year + -> Streaming Partial HashAggregate + Group Key: customer_2.c_customer_id, customer_2.c_first_name, customer_2.c_last_name, customer_2.c_preferred_cust_flag, customer_2.c_birth_country, customer_2.c_login, customer_2.c_email_address, date_dim_2.d_year + -> Hash Join + Hash Cond: (web_sales.ws_bill_customer_sk = customer_2.c_customer_sk) + -> Redistribute Motion 3:3 (slice9; segments: 3) + Hash Key: web_sales.ws_bill_customer_sk + -> Hash Join + Hash Cond: (web_sales.ws_sold_date_sk = date_dim_2.d_date_sk) + -> Seq Scan on web_sales + -> Hash + -> Broadcast Motion 3:3 (slice10; segments: 3) + -> Seq Scan on date_dim date_dim_2 + Filter: ((d_year = 2001) OR (d_year = 2002)) + -> Hash + -> Seq Scan on customer customer_2 + -> Redistribute Motion 1:3 (slice11) + -> Limit + -> Gather Motion 3:1 (slice12; segments: 3) + Merge Key: share0_ref7.c_customer_id, share0_ref7.c_first_name, share0_ref7.c_last_name, share0_ref7.c_login + -> Limit + -> Sort + Sort Key: share0_ref7.c_customer_id, share0_ref7.c_first_name, share0_ref7.c_last_name, share0_ref7.c_login + -> Hash Join + Hash Cond: ((share0_ref7.c_customer_id)::text = (share0_ref2.c_customer_id)::text) + Join Filter: (CASE WHEN (share0_ref5.sum > '0'::numeric) THEN (share0_ref6.sum / share0_ref5.sum) ELSE NULL::numeric END > CASE WHEN (share0_ref2.sum > '0'::numeric) THEN (share0_ref7.sum / share0_ref2.sum) ELSE NULL::numeric END) + -> Hash Join + Hash Cond: ((share0_ref7.c_customer_id)::text = (share0_ref5.c_customer_id)::text) + -> Redistribute Motion 3:3 (slice13; segments: 3) + Hash Key: share0_ref7.c_customer_id + -> Result + Filter: ((share0_ref7.sale_type = 's'::text) AND (share0_ref7.d_year = 2002)) + -> Shared Scan (share slice:id 13:0) + -> Hash + -> Hash Join + Hash Cond: ((share0_ref5.c_customer_id)::text = (share0_ref3.c_customer_id)::text) + Join Filter: (CASE WHEN (share0_ref5.sum > '0'::numeric) THEN (share0_ref6.sum / share0_ref5.sum) ELSE NULL::numeric END > CASE WHEN (share0_ref4.sum > '0'::numeric) THEN (share0_ref3.sum / share0_ref4.sum) ELSE NULL::numeric END) + -> Hash Join + Hash Cond: ((share0_ref5.c_customer_id)::text = (share0_ref4.c_customer_id)::text) + -> Hash Join + Hash Cond: ((share0_ref6.c_customer_id)::text = (share0_ref5.c_customer_id)::text) + -> Redistribute Motion 3:3 (slice14; segments: 3) + Hash Key: share0_ref6.c_customer_id + -> Result + Filter: ((share0_ref6.sale_type = 'c'::text) AND (share0_ref6.d_year = 2002)) + -> Shared Scan (share slice:id 14:0) + -> Hash + -> Redistribute Motion 3:3 (slice15; segments: 3) + Hash Key: share0_ref5.c_customer_id + -> Result + Filter: ((share0_ref5.sale_type = 'c'::text) AND (share0_ref5.d_year = 2001) AND (share0_ref5.sum > '0'::numeric)) + -> Shared Scan (share slice:id 15:0) + -> Hash + -> Redistribute Motion 3:3 (slice16; segments: 3) + Hash Key: share0_ref4.c_customer_id + -> Result + Filter: ((share0_ref4.sale_type = 'w'::text) AND (share0_ref4.d_year = 2001) AND (share0_ref4.sum > '0'::numeric)) + -> Shared Scan (share slice:id 16:0) + -> Hash + -> Redistribute Motion 3:3 (slice17; segments: 3) + Hash Key: share0_ref3.c_customer_id + -> Result + Filter: ((share0_ref3.sale_type = 'w'::text) AND (share0_ref3.d_year = 2002)) + -> Shared Scan (share slice:id 17:0) + -> Hash + -> Redistribute Motion 3:3 (slice18; segments: 3) + Hash Key: share0_ref2.c_customer_id + -> Result + Filter: ((share0_ref2.sale_type = 's'::text) AND (share0_ref2.d_year = 2001) AND (share0_ref2.sum > '0'::numeric)) + -> Shared Scan (share slice:id 18:0) + Optimizer: GPORCA +(125 rows) + diff --git a/src/test/regress/greenplum_schedule b/src/test/regress/greenplum_schedule index 0bf96b38a50..37594732def 100755 --- a/src/test/regress/greenplum_schedule +++ b/src/test/regress/greenplum_schedule @@ -202,6 +202,9 @@ test: rpt rpt_joins rpt_tpch rpt_returning test: bfv_cte test: bfv_joins bfv_subquery bfv_planner bfv_legacy bfv_temp bfv_dml +# test tpcds query 04 +test: tpcds_q04 + test: qp_olap_mdqa qp_misc gp_recursive_cte qp_dml_joins qp_skew qp_select partition_prune_opfamily gp_tsrf qp_join_union_all qp_join_universal qp_rowsecurity qp_query_params qp_full_join test: qp_misc_jiras qp_with_clause qp_executor qp_olap_windowerr qp_olap_window qp_derived_table qp_bitmapscan qp_dropped_cols diff --git a/src/test/regress/sql/tpcds_q04.sql b/src/test/regress/sql/tpcds_q04.sql new file mode 100644 index 00000000000..eaa50502e81 --- /dev/null +++ b/src/test/regress/sql/tpcds_q04.sql @@ -0,0 +1,5591 @@ +CREATE SCHEMA cte_bug; + +SET gp_default_storage_options = ''; +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = ao_column; + +-- +-- Name: catalog_sales; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.catalog_sales; + +CREATE TABLE cte_bug.catalog_sales ( + cs_sold_date_sk integer, + cs_sold_time_sk integer, + cs_ship_date_sk integer, + cs_bill_customer_sk integer, + cs_bill_cdemo_sk integer, + cs_bill_hdemo_sk integer, + cs_bill_addr_sk integer, + cs_ship_customer_sk integer, + cs_ship_cdemo_sk integer, + cs_ship_hdemo_sk integer, + cs_ship_addr_sk integer, + cs_call_center_sk integer, + cs_catalog_page_sk integer, + cs_ship_mode_sk integer, + cs_warehouse_sk integer, + cs_item_sk integer NOT NULL, + cs_promo_sk integer, + cs_order_number bigint NOT NULL, + cs_quantity integer, + cs_wholesale_cost numeric(7,2), + cs_list_price numeric(7,2), + cs_sales_price numeric(7,2), + cs_ext_discount_amt numeric(7,2), + cs_ext_sales_price numeric(7,2), + cs_ext_wholesale_cost numeric(7,2), + cs_ext_list_price numeric(7,2), + cs_ext_tax numeric(7,2), + cs_coupon_amt numeric(7,2), + cs_ext_ship_cost numeric(7,2), + cs_net_paid numeric(7,2), + cs_net_paid_inc_tax numeric(7,2), + cs_net_paid_inc_ship numeric(7,2), + cs_net_paid_inc_ship_tax numeric(7,2), + cs_net_profit numeric(7,2), + COLUMN cs_sold_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_sold_time_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_bill_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_call_center_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_catalog_page_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ship_mode_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_warehouse_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_item_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_promo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_order_number ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_quantity ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_discount_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_coupon_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_ext_ship_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid_inc_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid_inc_ship ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_paid_inc_ship_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN cs_net_profit ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (cs_item_sk); + + +-- +-- Name: customer; Type: TABLE; Schema: cte_bug; Owner: - +-- + +DROP TABLE IF EXITS cte_bug.customer; + +CREATE TABLE cte_bug.customer ( + c_customer_sk integer NOT NULL, + c_customer_id character varying(16) NOT NULL, + c_current_cdemo_sk integer, + c_current_hdemo_sk integer, + c_current_addr_sk integer, + c_first_shipto_date_sk integer, + c_first_sales_date_sk integer, + c_salutation character varying(10), + c_first_name character varying(20), + c_last_name character varying(30), + c_preferred_cust_flag character(1), + c_birth_day integer, + c_birth_month integer, + c_birth_year integer, + c_birth_country character varying(20), + c_login character varying(13), + c_email_address character varying(50), + c_last_review_date integer, + COLUMN c_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_customer_id ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_current_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_current_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_current_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_first_shipto_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_first_sales_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_salutation ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_first_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_last_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_preferred_cust_flag ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_day ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_month ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_birth_country ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_login ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_email_address ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN c_last_review_date ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (c_customer_sk); + + +-- +-- Name: date_dim; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.date_dim; + +CREATE TABLE cte_bug.date_dim ( + d_date_sk integer NOT NULL, + d_date_id character varying(16) NOT NULL, + d_date date, + d_month_seq integer, + d_week_seq integer, + d_quarter_seq integer, + d_year integer, + d_dow integer, + d_moy integer, + d_dom integer, + d_qoy integer, + d_fy_year integer, + d_fy_quarter_seq integer, + d_fy_week_seq integer, + d_day_name character varying(9), + d_quarter_name character varying(6), + d_holiday character(1), + d_weekend character(1), + d_following_holiday character(1), + d_first_dom integer, + d_last_dom integer, + d_same_day_ly integer, + d_same_day_lq integer, + d_current_day character(1), + d_current_week character(1), + d_current_month character(1), + d_current_quarter character(1), + d_current_year character(1), + COLUMN d_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_date_id ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_date ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_month_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_week_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_quarter_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_dow ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_moy ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_dom ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_qoy ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_fy_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_fy_quarter_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_fy_week_seq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_day_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_quarter_name ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_holiday ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_weekend ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_following_holiday ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_first_dom ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_last_dom ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_same_day_ly ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_same_day_lq ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_day ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_week ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_month ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_quarter ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN d_current_year ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (d_date_sk); + + +-- +-- Name: store_sales; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.store_sales; + +CREATE TABLE cte_bug.store_sales ( + ss_sold_date_sk integer, + ss_sold_time_sk integer, + ss_item_sk integer NOT NULL, + ss_customer_sk integer, + ss_cdemo_sk integer, + ss_hdemo_sk integer, + ss_addr_sk integer, + ss_store_sk integer, + ss_promo_sk integer, + ss_ticket_number bigint NOT NULL, + ss_quantity integer, + ss_wholesale_cost numeric(7,2), + ss_list_price numeric(7,2), + ss_sales_price numeric(7,2), + ss_ext_discount_amt numeric(7,2), + ss_ext_sales_price numeric(7,2), + ss_ext_wholesale_cost numeric(7,2), + ss_ext_list_price numeric(7,2), + ss_ext_tax numeric(7,2), + ss_coupon_amt numeric(7,2), + ss_net_paid numeric(7,2), + ss_net_paid_inc_tax numeric(7,2), + ss_net_profit numeric(7,2), + COLUMN ss_sold_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_sold_time_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_item_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_store_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_promo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ticket_number ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_quantity ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_discount_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_ext_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_coupon_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_net_paid ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_net_paid_inc_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ss_net_profit ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (ss_item_sk); + + +-- +-- Name: web_sales; Type: TABLE; Schema: cte_bug; Owner: - +-- +DROP TABLE IF EXITS cte_bug.web_sales; + +CREATE TABLE cte_bug.web_sales ( + ws_sold_date_sk integer, + ws_sold_time_sk integer, + ws_ship_date_sk integer, + ws_item_sk integer NOT NULL, + ws_bill_customer_sk integer, + ws_bill_cdemo_sk integer, + ws_bill_hdemo_sk integer, + ws_bill_addr_sk integer, + ws_ship_customer_sk integer, + ws_ship_cdemo_sk integer, + ws_ship_hdemo_sk integer, + ws_ship_addr_sk integer, + ws_web_page_sk integer, + ws_web_site_sk integer, + ws_ship_mode_sk integer, + ws_warehouse_sk integer, + ws_promo_sk integer, + ws_order_number bigint NOT NULL, + ws_quantity integer, + ws_wholesale_cost numeric(7,2), + ws_list_price numeric(7,2), + ws_sales_price numeric(7,2), + ws_ext_discount_amt numeric(7,2), + ws_ext_sales_price numeric(7,2), + ws_ext_wholesale_cost numeric(7,2), + ws_ext_list_price numeric(7,2), + ws_ext_tax numeric(7,2), + ws_coupon_amt numeric(7,2), + ws_ext_ship_cost numeric(7,2), + ws_net_paid numeric(7,2), + ws_net_paid_inc_tax numeric(7,2), + ws_net_paid_inc_ship numeric(7,2), + ws_net_paid_inc_ship_tax numeric(7,2), + ws_net_profit numeric(7,2), + COLUMN ws_sold_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_sold_time_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_date_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_item_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_bill_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_customer_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_cdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_hdemo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_addr_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_web_page_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_web_site_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ship_mode_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_warehouse_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_promo_sk ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_order_number ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_quantity ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_discount_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_sales_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_wholesale_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_list_price ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_coupon_amt ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_ext_ship_cost ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid_inc_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid_inc_ship ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_paid_inc_ship_tax ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576), + COLUMN ws_net_profit ENCODING (compresstype=zstd,compresslevel=5,blocksize=1048576) +) +WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel='5', blocksize='1048576') DISTRIBUTED BY (ws_item_sk); + + +-- +-- Apache Cloudberry database dump complete +-- + + +-- +-- Allow system table modifications +-- +set allow_system_table_mods=true; + +-- Table: catalog_sales +UPDATE pg_class +SET + relpages = 1497467::int, + reltuples = 720015040.0::real, + relallvisible = 0::int +WHERE relname = 'catalog_sales' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); + +-- Table: date_dim +UPDATE pg_class +SET + relpages = 40::int, + reltuples = 73049.0::real, + relallvisible = 0::int +WHERE relname = 'date_dim' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); + +-- Table: customer +UPDATE pg_class +SET + relpages = 2870::int, + reltuples = 2100000.0::real, + relallvisible = 0::int +WHERE relname = 'customer' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); + +-- Table: store_sales +UPDATE pg_class +SET + relpages = 1930653::int, + reltuples = 1439977500.0::real, + relallvisible = 0::int +WHERE relname = 'store_sales' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); + +-- Table: web_sales +UPDATE pg_class +SET + relpages = 736204::int, + reltuples = 360014100.0::real, + relallvisible = 0::int +WHERE relname = 'web_sales' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'cte_bug'); + +-- +-- Table: catalog_sales, Attribute: cs_sold_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 1::smallint, + False::boolean, + 0.0046333335::real, + 4::integer, + 1836.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0017666667, 0.0015666666, 0.0015666666, 0.0015, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014333334, 0.0014333334, 0.0014333334, 0.0014333334, 0.0014, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666}'::real[], + NULL::real[], + '{0.054781195}'::real[], + NULL::real[], + NULL::real[], + E'{"2452618","2451872","2451875","2451537","2451130","2451869","2451873","2451891","2451908","2452223","2452613","2451169","2451486","2451513","2451904","2451163","2451173","2451541","2451885","2451177","2451504","2451876","2451884","2452249","2452264","2452587","2452606","2451138","2451146","2451158","2451491","2451523","2451536","2451540","2451544","2451883","2451899","2452217","2452222","2452248","2452593","2451535","2451864","2451874","2451894","2451896","2452230","2452588","2452597","2451156","2451505","2451514","2452247","2452259","2452269","2452585","2452627","2451150","2451157","2451166","2451171","2451512","2451515","2451519","2451526","2451881","2451886","2451893","2452232","2452254","2452265","2452576","2452583","2452609","2452612","2452616","2452630","2451132","2451136","2451522","2451529","2451887","2452220","2452235","2452498","2452594","2452595","2452601","2452620","2452624","2451029","2451131","2451133","2451139","2451147","2451170","2451525","2451532","2451856","2451858"}'::int4[], + E'{"2450815","2450843","2450872","2450902","2450927","2450954","2450982","2451010","2451032","2451043","2451055","2451066","2451078","2451090","2451102","2451116","2451125","2451142","2451153","2451165","2451181","2451211","2451241","2451266","2451295","2451323","2451348","2451375","2451397","2451409","2451421","2451434","2451446","2451458","2451471","2451483","2451494","2451506","2451520","2451539","2451563","2451589","2451616","2451645","2451670","2451696","2451724","2451754","2451768","2451782","2451795","2451807","2451818","2451831","2451842","2451853","2451865","2451879","2451898","2451910","2451933","2451960","2451990","2452016","2452042","2452069","2452097","2452122","2452135","2452147","2452158","2452169","2452182","2452195","2452207","2452218","2452231","2452242","2452255","2452267","2452278","2452309","2452340","2452369","2452396","2452424","2452450","2452480","2452497","2452509","2452521","2452533","2452544","2452556","2452568","2452582","2452599","2452610","2452625","2452636","2452654"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_sold_time_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 2::smallint, + False::boolean, + 0.005::real, + 4::integer, + 72297.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0002}'::real[], + NULL::real[], + '{0.0112536065}'::real[], + NULL::real[], + NULL::real[], + E'{"44417"}'::int4[], + E'{"19","3608","5437","7239","9103","10773","12524","14298","15582","16852","17926","19155","20275","21514","22764","24007","25186","26042","26962","27910","28794","29659","30546","31449","32213","32885","33617","34346","35082","35807","36509","37180","37892","38557","39244","39936","40721","41398","42183","42868","43569","44109","44624","45170","45703","46274","46759","47492","48133","48850","49628","50310","51472","52776","53993","54839","55874","56759","57696","58416","59123","59800","60516","61221","61836","62429","62989","63592","64155","64738","65238","65703","66205","66700","67247","67791","68275","68782","69195","69611","70077","70485","70923","71369","71847","72304","72827","73342","73877","74404","74966","75510","76220","76902","77680","78437","79149","80343","81522","82791","86392"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_ship_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 3::smallint, + False::boolean, + 0.0052::real, + 4::integer, + 1914.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0015333333, 0.0014, 0.0013666666, 0.0013666666, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001}'::real[], + NULL::real[], + '{0.0545705}'::real[], + NULL::real[], + NULL::real[], + E'{"2451918","2451182","2451209","2452278","2451544","2451907","2452252","2452639","2452648","2452659","2451207","2452590","2451205","2451541","2451559","2451183","2451549","2451909","2451910","2451911","2451933","2452260","2452262","2452624","2452634","2452637","2451906","2451914","2452233","2452242","2452265","2452270","2451121","2451180","2451192","2451526","2451565","2451575","2451896","2451897","2451899","2451912","2451936","2452245","2452618","2452626","2452653","2451161","2451173","2451174","2451191","2451478","2451528","2451555","2451915","2451927","2452261","2452269","2452281","2452290","2452629","2452633","2452643","2451162","2451164","2451185","2451548","2451550","2451584","2451929","2451940","2452236","2452283","2452608","2452654","2451165","2451168","2451481","2451511","2451517","2451553","2451582","2451889","2451917","2452294","2452632","2452641","2452642","2452647","2452660","2451123","2451178","2451184","2451204","2451491","2451512","2451513","2451516","2451520","2451538"}'::int4[], + E'{"2450821","2450886","2450917","2450945","2450976","2451006","2451032","2451056","2451073","2451088","2451101","2451114","2451128","2451140","2451151","2451166","2451186","2451199","2451214","2451227","2451241","2451259","2451286","2451317","2451344","2451370","2451397","2451421","2451439","2451456","2451470","2451484","2451497","2451510","2451529","2451542","2451561","2451573","2451588","2451603","2451620","2451643","2451671","2451698","2451724","2451752","2451777","2451799","2451817","2451830","2451844","2451858","2451870","2451880","2451892","2451908","2451926","2451941","2451953","2451966","2451982","2452002","2452032","2452056","2452083","2452113","2452139","2452159","2452176","2452190","2452204","2452217","2452229","2452244","2452257","2452274","2452287","2452301","2452312","2452325","2452341","2452360","2452392","2452421","2452448","2452475","2452504","2452523","2452541","2452555","2452569","2452581","2452594","2452606","2452617","2452631","2452651","2452666","2452678","2452695","2452742"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_bill_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 4::smallint, + False::boolean, + 0.0047333334::real, + 4::integer, + 2076691.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.009644499}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"83","19255","38469","57334","77660","100353","121648","142864","164380","186732","206072","225376","246600","266629","288115","310326","332043","353860","375080","398568","418154","439646","461654","482840","506162","528559","549467","568302","588542","608968","630692","650223","671210","692175","713622","734326","754624","775800","798038","818056","841239","862315","882803","902700","923351","943590","963503","984723","1007978","1026125","1047160","1067477","1087789","1107171","1127082","1149889","1169435","1192194","1212249","1233291","1254464","1277232","1298034","1319408","1340687","1361652","1382794","1402582","1423476","1446047","1468226","1490417","1512333","1534704","1553629","1572989","1592634","1611613","1630695","1653622","1674063","1694178","1714594","1736071","1758421","1781336","1801193","1823164","1844186","1864368","1883410","1905171","1926138","1948282","1969988","1992903","2014079","2034696","2056865","2078611","2099787"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_bill_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 5::smallint, + False::boolean, + 0.005133333::real, + 4::integer, + 2250439.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0031504256}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"302","18541","37466","54463","73740","92424","112008","130967","151053","169555","190110","209507","228068","249282","268918","288605","307024","325774","343640","360630","381214","401158","419575","438762","458312","478977","498196","516757","537388","556845","575435","593167","612925","631535","649867","668933","688696","708123","729225","748554","766895","786505","806811","825215","844584","864169","883774","902048","921519","939325","959048","977470","995552","1013270","1032128","1049619","1069099","1089358","1107492","1124109","1143285","1161705","1180858","1201502","1221860","1240948","1262383","1281164","1299986","1317873","1338886","1358783","1378683","1398812","1417832","1435737","1456539","1476597","1496447","1515429","1535261","1554963","1573327","1591123","1612033","1630239","1650833","1669983","1688937","1707342","1727798","1746079","1764329","1783178","1803869","1823803","1842989","1862762","1881322","1901969","1920750"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_bill_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 6::smallint, + False::boolean, + 0.0045666667::real, + 4::integer, + 7211.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.000111478614}'::real[], + NULL::real[], + NULL::real[], + E'{"952","3639","822","1878","3522","3566","4915","5053","5336"}'::int4[], + E'{"1","69","138","207","278","358","430","510","587","655","728","798","869","942","1011","1079","1148","1221","1293","1363","1436","1515","1590","1658","1727","1796","1869","1943","2011","2089","2164","2238","2309","2383","2458","2534","2607","2674","2744","2820","2896","2971","3050","3121","3192","3259","3330","3406","3478","3554","3622","3693","3766","3837","3910","3986","4059","4136","4203","4276","4352","4423","4495","4568","4638","4711","4786","4851","4924","4995","5071","5139","5209","5275","5348","5419","5491","5562","5630","5702","5783","5855","5928","6005","6074","6145","6221","6287","6362","6437","6509","6581","6652","6718","6791","6859","6925","6992","7067","7135","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_bill_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 7::smallint, + False::boolean, + 0.0049666665::real, + 4::integer, + 1046873.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.010069353}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"4","11125","22235","33070","44034","54814","66903","76551","86436","96499","107386","117375","127737","138201","149160","158550","169352","179553","191448","202662","213153","223343","232616","242533","253489","263641","274314","284608","294503","305542","316693","327046","337213","348029","358708","369038","379092","389216","399404","411658","421481","431880","442318","452462","463687","473855","484589","494142","504812","515093","525984","536447","546801","557909","568809","579887","590134","600989","611895","621827","631620","641611","653140","664172","674648","685363","696406","706802","717628","727362","737815","748416","758649","768984","779629","790315","800549","811382","821988","832542","842239","852925","861542","872217","882338","893425","903652","914043","925124","935145","946703","957135","966844","978263","987914","998584","1009037","1019530","1030620","1041099","1049900"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_ship_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 8::smallint, + False::boolean, + 0.0044::real, + 4::integer, + 1988803.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.012593937}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"112","19457","38552","56966","77106","98752","120684","141455","163448","185974","205916","225714","246798","267145","288778","309669","331415","352688","373910","396777","417012","437984","458412","480601","503081","525455","546630","566430","585396","605761","627797","647297","667174","689078","710793","730789","751531","771586","793233","812933","836114","858314","878748","899241","919733","940900","960199","982017","1005759","1024900","1046467","1067416","1087759","1107005","1127271","1149614","1169010","1191761","1212083","1233029","1254014","1275851","1297280","1318761","1339872","1360476","1383115","1402788","1422877","1446083","1468587","1490686","1513016","1535950","1556692","1575347","1593894","1613402","1634582","1657027","1677173","1698221","1719408","1739440","1762772","1784881","1805037","1826722","1847883","1868042","1887771","1909652","1929728","1951115","1972152","1994703","2015691","2036799","2059398","2079650","2099910"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_ship_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 9::smallint, + False::boolean, + 0.0047::real, + 4::integer, + 2111792.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0029372792}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"302","18991","38051","55457","73906","92142","111203","130054","150524","168838","188615","208305","226780","247275","267002","286332","305964","323539","341623","359088","378908","398275","417006","435648","456039","475587","494530","514681","534729","554637","572188","589663","608849","627139","645797","665116","684344","704227","724342","743953","761704","781964","800445","819537","838906","859432","878743","896384","916344","935630","954106","974012","992877","1010876","1030092","1047512","1067272","1087763","1106244","1123512","1143152","1162252","1181423","1201399","1221079","1241127","1262335","1281211","1300282","1317917","1338913","1359409","1379678","1399509","1419706","1437833","1458212","1478319","1498253","1517308","1537216","1555785","1574809","1593715","1614555","1632477","1652767","1671255","1689246","1707832","1727015","1745671","1764329","1783647","1803713","1823176","1843528","1863426","1881885","1901131","1920750"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_ship_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 10::smallint, + False::boolean, + 0.0045::real, + 4::integer, + 7216.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00046666668, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{-0.0024474491}'::real[], + NULL::real[], + NULL::real[], + E'{"3639","952","4257","822","1910","4081","4594","4618","4915"}'::int4[], + E'{"1","73","142","207","280","358","430","508","582","649","721","795","869","944","1014","1083","1154","1229","1300","1373","1444","1523","1596","1662","1734","1808","1878","1946","2015","2092","2166","2242","2314","2390","2466","2538","2613","2681","2754","2829","2904","2980","3057","3130","3199","3265","3336","3409","3484","3555","3618","3692","3763","3836","3911","3985","4055","4135","4203","4280","4359","4429","4500","4572","4647","4723","4793","4861","4928","5004","5075","5142","5214","5279","5349","5422","5492","5565","5633","5704","5780","5856","5929","6005","6075","6144","6216","6286","6361","6433","6507","6577","6650","6717","6786","6857","6924","6990","7066","7134","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_ship_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 11::smallint, + False::boolean, + 0.0044::real, + 4::integer, + 1106888.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0052251625}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"4","10372","21281","32604","43275","54281","66191","75977","85966","96475","106785","117107","127166","137473","148549","158449","169288","179404","191400","202566","212568","223050","231983","242203","252330","262987","273206","284036","293651","303573","314592","325696","336019","346020","357411","367567","377578","387371","397564","409384","419885","430219","441268","451283","462534","472729","482897","493068","503727","514241","524681","535657","546641","557534","568161","579186","589218","600063","610499","620727","630611","640167","650891","661771","672763","683715","694487","704971","715589","725727","735602","745905","755951","765867","776755","787045","798005","808059","818665","829654","840229","849950","859637","870300","880895","892234","902478","912694","923652","933902","945183","955649","965499","976354","986841","997088","1007946","1018197","1029945","1040884","1049912"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_call_center_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 12::smallint, + False::boolean, + 0.0049::real, + 4::integer, + 6.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.32786667, 0.1994, 0.13533333, 0.13273333, 0.1306, 0.06916667}'::real[], + '{0.21526349}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1","2","3","5","4","6"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_catalog_page_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 13::smallint, + False::boolean, + 0.0049333335::real, + 4::integer, + 5614.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0012666667, 0.0012666667, 0.0012333334, 0.0012, 0.0012, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.00093333336, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009, 0.0009}'::real[], + NULL::real[], + '{0.050873112}'::real[], + NULL::real[], + NULL::real[], + E'{"164","5975","2104","135","4000","7906","2144","5962","5966","7944","7992","2111","2149","5954","6016","6032","6043","7900","7908","2053","2075","4051","7954","150","151","160","183","186","2062","2090","2114","4010","4052","4084","5959","6025","7929","7941","116","117","194","2060","2119","4076","4094","5964","5999","6011","6019","7917","7973","118","120","129","163","190","212","2077","2078","2091","2093","2148","2156","4047","4050","4068","4097","5979","6003","6007","6021","6034","7890","7909","7919","7921","7932","7938","7953","7960","141","157","176","182","214","2118","4016","4028","4053","4065","4073","4086","5961","6010","7911","7914","7922","7923","7936","7956"}'::int4[], + E'{"1","29","53","79","106","124","139","154","172","189","205","230","290","340","380","413","614","843","1009","1150","1945","1972","1996","2020","2047","2067","2083","2099","2115","2131","2145","2168","2227","2279","2318","2361","2605","2813","2989","3129","3896","3920","3945","3968","3994","4009","4024","4038","4056","4070","4085","4101","4153","4215","4252","4289","4400","4718","4887","5022","5155","5852","5878","5903","5927","5946","5963","5980","5992","6006","6026","6040","6078","6144","6189","6232","6381","6650","6829","6974","7101","7800","7825","7851","7879","7895","7913","7935","7955","7971","7986","8023","8080","8130","8168","8207","8515","8701","8861","8977","9827"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_ship_mode_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 14::smallint, + False::boolean, + 0.004766667::real, + 4::integer, + 20.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0517, 0.051333334, 0.0507, 0.050466668, 0.0504, 0.050166667, 0.050166667, 0.050066665, 0.049966667, 0.0499, 0.0499, 0.049733333, 0.049333334, 0.0493, 0.049133334, 0.049066667, 0.049066667, 0.04853333, 0.0485, 0.0478}'::real[], + '{0.05016106}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"10","4","5","15","7","14","20","12","9","3","6","2","1","18","8","17","19","16","13","11"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_warehouse_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 15::smallint, + False::boolean, + 0.0047::real, + 4::integer, + 5.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.2037, 0.20163333, 0.19836667, 0.19753334, 0.19406667}'::real[], + '{0.20946348}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"5","4","2","3","1"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_item_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 16::smallint, + False::boolean, + 0.0::real, + 4::integer, + 24934.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334}'::real[], + NULL::real[], + '{0.00087319454}'::real[], + NULL::real[], + NULL::real[], + E'{"2149","4123","7117","12451","15001","19603","20557","21523","22867","27235","55","841","2348","2545","4105","4159","4441","4843","5509","7513","7747","8827","9289","12031","13417","15541","15709","16730","18115","18805","18997","19495","20083","21073","23167","24679","26641"}'::int4[], + E'{"1","320","583","835","1138","1406","1673","1962","2264","2558","2845","3127","3446","3749","4031","4330","4573","4877","5173","5433","5703","5947","6237","6506","6775","7040","7307","7579","7873","8136","8404","8707","8984","9250","9532","9833","10123","10420","10678","10969","11250","11553","11826","12095","12364","12667","12956","13219","13486","13741","14042","14309","14602","14871","15161","15410","15665","15939","16212","16498","16763","17059","17351","17654","17945","18229","18514","18782","19059","19348","19609","19913","20198","20471","20743","21035","21331","21597","21883","22148","22442","22712","22966","23269","23567","23848","24106","24394","24668","24951","25221","25508","25796","26095","26365","26646","26927","27195","27461","27722","28000"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_promo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 17::smallint, + False::boolean, + 0.0049333335::real, + 4::integer, + 357.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0039333333, 0.0036666666, 0.0036333334, 0.0035666667, 0.0035, 0.0035, 0.0035, 0.0035, 0.0034666667}'::real[], + NULL::real[], + '{0.012315235}'::real[], + NULL::real[], + NULL::real[], + E'{"305","89","51","343","11","49","195","258","355"}'::int4[], + E'{"1","4","8","12","16","19","23","26","30","33","37","40","44","47","53","56","60","63","67","70","74","78","81","85","88","92","96","99","102","106","109","113","116","120","123","127","130","134","137","141","144","148","151","155","158","162","165","168","172","175","179","182","186","189","193","197","201","204","208","211","215","218","221","225","228","232","235","239","242","246","249","253","256","261","264","268","271","275","278","282","285","289","293","296","299","303","307","311","314","318","321","325","328","331","335","339","342","346","350","353","357"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_order_number +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 18::smallint, + False::boolean, + 0.0::real, + 8::integer, + -0.23808314::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 412::oid, + 412::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.05413773}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1093","796094","1645931","2488328","3262945","4034487","4856771","5589623","6321306","7127852","7844455","8614283","9422592","10337715","11178214","11967077","12806598","13604549","14347663","15135994","15897089","16779779","17630658","18360193","19209296","19976804","20750598","21564225","22330137","23141252","23995273","24745890","25625704","26406125","27188856","28177645","29033724","29834605","30623466","31397341","32181036","32930216","33726353","34526912","35320855","36048980","36922780","37717474","38626712","39479583","40217298","41019974","41831233","42654275","43505081","44324401","44976357","45709232","46482483","47262545","48002145","48800151","49567190","50315617","51133372","51910262","52699539","53463422","54279944","55035406","55746486","56570321","57449909","58231103","58998945","59766115","60653209","61448393","62271704","63090076","63926111","64814052","65684644","66478632","67319176","68037038","68897841","69676370","70424558","71249378","72010418","72811451","73574543","74362921","75127096","75960745","76739924","77534318","78299599","79159205","79998254"}'::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[]); + +-- +-- Table: catalog_sales, Attribute: cs_quantity +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 19::smallint, + False::boolean, + 0.0044::real, + 4::integer, + 100.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0111, 0.0111, 0.011, 0.011, 0.0109, 0.010833333, 0.010833333, 0.010833333, 0.0108, 0.010666667, 0.010666667, 0.0106, 0.010566667, 0.010566667, 0.010533334, 0.010533334, 0.010533334, 0.0105, 0.010466667, 0.010433333, 0.010433333, 0.010366667, 0.010366667, 0.010366667, 0.010366667, 0.010366667, 0.010333333, 0.0103, 0.0103, 0.010266666, 0.010266666, 0.010266666, 0.0102, 0.0102, 0.0102, 0.0102, 0.0101666665, 0.0101666665, 0.0101666665, 0.0101333335, 0.0101333335, 0.0101, 0.0101, 0.010066667, 0.010033334, 0.010033334, 0.010033334, 0.01, 0.01, 0.009966667, 0.009966667, 0.009933333, 0.009933333, 0.009933333, 0.009933333, 0.009933333, 0.0099, 0.0099, 0.009866667, 0.009866667, 0.009833333, 0.009833333, 0.009833333, 0.009833333, 0.0098, 0.0098, 0.009766666, 0.009766666, 0.009733333, 0.009733333, 0.0097, 0.0097, 0.0097, 0.009666666, 0.009666666, 0.009666666, 0.0096, 0.009566667, 0.009533334, 0.009533334, 0.0095, 0.0095, 0.0095, 0.009466667, 0.009333333, 0.009266667, 0.009266667, 0.009233333, 0.009233333, 0.0092, 0.009133333, 0.009133333, 0.0091, 0.008933334, 0.008866667, 0.008833333, 0.0088, 0.0087, 0.0084, 0.0084}'::real[], + '{0.009663152}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"41","52","9","44","27","58","86","89","77","36","80","17","16","42","45","46","83","15","91","12","14","57","67","68","74","96","84","25","64","28","71","82","11","56","60","98","1","6","23","7","95","61","94","47","5","69","72","3","48","70","92","34","54","76","79","81","32","38","62","78","2","13","18","55","37","40","75","100","22","97","4","33","51","8","35","73","88","24","49","87","21","26","53","66","99","39","65","20","93","30","43","90","29","63","85","59","19","50","10","31"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: catalog_sales, Attribute: cs_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 20::smallint, + False::boolean, + 0.0042333333::real, + 6::integer, + 9853.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.00037631093}'::real[], + NULL::real[], + NULL::real[], + E'{"72.49","24.31","33.82","41.38","61.68","64.83","90.44","10.81","27.94","34.69","63.73","87.62","93.76","94.23"}'::numeric[], + E'{"1.00","1.97","2.96","3.92","4.94","5.97","7.01","7.93","8.86","9.79","10.76","11.74","12.69","13.67","14.71","15.61","16.55","17.55","18.59","19.64","20.69","21.72","22.70","23.70","24.74","25.76","26.74","27.83","28.84","29.88","30.96","31.96","32.90","33.95","34.88","35.82","36.86","37.79","38.78","39.75","40.65","41.59","42.57","43.46","44.53","45.59","46.66","47.73","48.74","49.72","50.69","51.60","52.56","53.41","54.44","55.38","56.44","57.38","58.32","59.33","60.46","61.51","62.59","63.51","64.50","65.52","66.49","67.40","68.34","69.30","70.25","71.22","72.19","73.17","74.18","75.21","76.17","77.18","78.10","79.08","80.07","81.02","81.93","82.86","83.87","84.82","85.83","86.83","87.81","88.79","89.69","90.75","91.71","92.69","93.69","94.73","95.80","96.89","97.92","99.02","100.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 21::smallint, + False::boolean, + 0.0047333334::real, + 6::integer, + 23623.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667}'::real[], + NULL::real[], + '{0.0011046942}'::real[], + NULL::real[], + NULL::real[], + E'{"11.59","52.87","62.87","64.43","87.47","95.88","96.45","99.51"}'::numeric[], + E'{"1.00","3.51","5.35","7.23","9.15","10.91","12.55","14.37","16.10","17.87","19.59","21.31","23.22","24.95","26.59","28.36","30.12","31.92","33.70","35.45","37.37","39.21","40.96","42.63","44.39","46.23","48.04","49.97","52.04","53.81","55.47","57.35","59.13","60.99","62.98","64.76","66.54","68.45","70.35","72.20","74.06","75.90","77.63","79.47","81.31","83.10","84.84","86.86","88.69","90.45","92.15","94.08","95.99","97.69","99.41","101.23","103.18","104.97","107.17","108.94","110.89","112.85","114.87","116.76","119.10","121.18","123.40","125.73","128.23","130.50","132.97","135.31","138.15","140.60","143.29","145.79","148.51","151.34","154.23","157.06","160.08","163.23","166.75","170.63","174.29","177.79","181.55","185.86","189.57","193.79","198.05","202.87","207.95","213.14","219.21","225.93","233.84","241.92","252.53","265.43","299.64"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 22::smallint, + False::boolean, + 0.0046666665::real, + 6::integer, + 14418.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.009733333, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{0.00090382085}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","4.11","1.12","1.14","1.19","1.41","2.07","3.47","0.45","0.86","0.99","1.11","1.66","1.79","2.22","2.36","4.79","5.00","5.07","19.14","0.34","0.77","0.98","1.17","1.38","1.39","1.53","1.60","2.13","2.14","2.41","2.70","2.91","3.55","5.02","0.32","0.61","0.81","1.02","1.20","1.63","1.78","1.83","1.98","2.16","2.57","2.58","2.63","2.71","2.82","3.02","3.07","3.31","3.49","4.09","4.70","5.83","6.20","6.42","6.65","6.71","6.81","7.47","7.73","8.32","8.90","11.94","13.00","23.92","25.86","0.52","0.60","0.68","0.83","0.85","0.90","0.92","1.00","1.03","1.22","1.40","1.42","1.52","1.62","1.70","1.89","1.90","1.92","1.95","1.99","2.08","2.45","2.48","2.80","2.85","2.86","3.05","3.57","3.58","4.26"}'::numeric[], + E'{"0.01","0.65","1.28","1.88","2.49","3.12","3.69","4.24","4.73","5.29","5.72","6.26","6.84","7.36","7.90","8.49","9.12","9.69","10.29","10.91","11.52","12.20","12.88","13.55","14.26","15.04","15.79","16.49","17.27","18.12","18.88","19.69","20.47","21.31","22.14","23.04","23.89","24.71","25.66","26.63","27.57","28.59","29.53","30.53","31.55","32.67","33.80","34.83","35.95","37.16","38.26","39.31","40.43","41.57","42.77","43.90","45.13","46.36","47.81","49.19","50.47","52.07","53.50","55.01","56.52","58.13","59.74","61.42","63.22","65.02","66.74","68.61","70.40","72.18","74.20","76.33","79.00","81.18","83.67","85.79","88.11","90.68","93.43","96.30","99.26","102.27","105.67","109.56","113.32","117.45","121.86","127.22","132.40","138.99","144.98","152.44","160.57","173.02","186.46","208.92","291.96"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_ext_discount_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 23::smallint, + False::boolean, + 0.0044::real, + 6::integer, + 142728.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0095}'::real[], + NULL::real[], + '{-0.004464352}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.17","11.20","20.91","30.80","40.84","51.00","63.78","75.00","87.44","99.94","114.70","128.10","142.35","157.32","174.42","192.54","210.80","230.40","248.40","268.05","290.88","314.16","335.72","359.45","382.80","407.16","434.34","460.80","487.56","514.71","543.62","576.10","607.10","638.58","674.96","708.51","744.12","781.44","816.90","854.24","892.67","937.72","978.12","1024.92","1066.60","1115.40","1163.76","1213.44","1265.92","1319.64","1377.33","1435.50","1492.72","1553.06","1615.12","1676.76","1740.50","1811.01","1879.47","1944.96","2021.00","2099.24","2180.82","2254.08","2338.24","2431.94","2518.37","2613.97","2705.79","2811.90","2915.52","3030.87","3147.78","3268.80","3398.64","3537.80","3693.20","3853.00","4025.84","4178.16","4342.57","4533.75","4713.69","4897.32","5111.40","5372.25","5621.20","5899.18","6182.22","6506.64","6877.80","7259.75","7668.62","8199.00","8717.40","9363.69","10163.70","11203.92","12513.40","14893.36","26922.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_ext_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=24; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 24::smallint, + False::boolean, + 0.0043666665::real, + 6::integer, + 142257.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.009733333, 0.0002, 0.0002, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.003978702}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","46.08","221.76","229.32","324.00"}'::numeric[], + E'{"0.12","10.50","20.06","29.43","40.50","50.88","62.55","73.71","86.88","99.80","112.70","127.52","143.62","159.84","176.54","195.30","213.76","232.57","250.81","273.00","293.44","314.88","338.10","359.04","380.19","405.00","429.60","451.68","477.47","502.86","527.96","553.70","584.44","614.88","648.96","678.59","714.00","752.49","789.24","832.00","873.60","918.00","961.62","1002.87","1045.32","1088.01","1138.32","1187.80","1240.32","1290.56","1343.52","1398.63","1453.80","1514.52","1579.89","1641.03","1707.15","1777.62","1850.16","1929.60","2006.40","2085.16","2172.12","2258.24","2346.43","2432.08","2522.40","2612.40","2716.00","2822.00","2941.68","3047.40","3167.66","3290.34","3408.50","3542.00","3672.90","3827.25","3964.16","4119.20","4284.36","4443.82","4620.28","4815.00","5049.41","5287.50","5540.15","5817.90","6091.80","6419.70","6763.11","7107.12","7533.20","7984.68","8549.10","9239.68","10028.92","11141.40","12375.32","14442.82","25866.02"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_ext_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=25; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 25::smallint, + False::boolean, + 0.004466667::real, + 6::integer, + 199389.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0034636194}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.06","33.44","56.88","76.70","95.46","117.98","141.00","166.72","189.80","211.64","240.48","270.13","296.05","322.14","351.56","382.20","408.80","443.17","471.27","503.04","536.48","569.53","605.88","642.30","676.20","713.25","748.00","784.08","822.58","862.92","904.12","944.00","988.12","1033.94","1078.22","1125.57","1174.44","1219.20","1271.47","1321.32","1373.73","1424.13","1473.56","1523.06","1577.80","1632.80","1692.33","1751.88","1804.98","1865.64","1925.04","1986.64","2048.64","2112.36","2177.07","2241.60","2304.72","2377.20","2443.50","2515.50","2594.70","2670.36","2747.52","2824.00","2907.76","2981.60","3064.35","3151.04","3236.05","3335.04","3423.42","3510.24","3609.13","3694.74","3790.59","3900.42","3997.84","4093.60","4201.20","4315.14","4440.32","4580.68","4717.80","4850.32","4981.08","5120.57","5295.40","5446.35","5591.49","5754.84","5939.64","6145.90","6353.16","6573.59","6818.15","7085.50","7369.09","7709.87","8107.01","8627.71","9908.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_ext_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=26; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 26::smallint, + False::boolean, + 0.0046::real, + 7::integer, + 360309.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0035410712}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.31","59.20","97.76","139.16","175.10","215.86","258.20","301.76","346.30","395.71","441.67","491.37","543.03","588.96","647.90","704.77","761.60","820.05","876.37","931.44","988.52","1051.24","1114.54","1179.42","1241.24","1315.60","1390.35","1465.83","1545.12","1616.40","1698.12","1773.90","1846.20","1925.82","1999.80","2079.66","2167.27","2254.16","2349.06","2439.60","2538.36","2639.88","2745.00","2842.88","2945.84","3061.35","3159.96","3268.20","3385.82","3497.60","3619.28","3731.16","3844.31","3972.32","4086.60","4223.18","4350.00","4491.60","4633.60","4772.85","4900.80","5039.44","5187.14","5331.15","5491.76","5659.20","5821.20","5993.74","6151.74","6324.80","6490.96","6680.54","6873.60","7073.04","7286.40","7516.05","7726.84","7955.22","8181.76","8428.98","8698.56","8945.39","9241.96","9521.28","9816.00","10132.22","10488.06","10859.64","11241.16","11644.83","12054.38","12542.40","13138.72","13710.72","14384.79","15172.80","16106.68","17329.62","18721.00","21017.28","28889.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_ext_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=27; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 27::smallint, + False::boolean, + 0.004766667::real, + 6::integer, + 21954.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.10706667, 0.00063333334, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333}'::real[], + NULL::real[], + '{0.004360509}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","0.04","0.17","0.02","0.28","0.84","1.06","1.14","0.13","0.14","0.25","0.36","0.79","0.03","0.33","0.34","0.39","0.48","0.90","0.91","1.10","0.08","0.09","0.18","0.42","0.45","0.54","1.25","1.40","1.41","0.07","0.30","0.32","0.50","0.63","0.78","0.93","1.56","1.58","2.01","2.83","4.17","4.23","5.38","0.01","0.05","0.06","0.23","0.35","0.37","0.44","0.51","0.65","0.66","0.69","0.72","0.92","1.07","1.20","1.91","2.25","2.35","2.39","2.49","2.59","2.61","2.84","3.46","5.14","0.11","0.12","0.29","0.31","0.55","0.64","0.86","0.94","0.97","1.04","1.11","1.27","1.34","1.72","1.74","1.82","2.07","2.41","2.63","3.16","3.22","3.31","4.24","4.37","4.50","4.67","6.56","7.04","7.48","9.72","0.20"}'::numeric[], + E'{"0.10","0.76","1.28","1.69","2.10","2.54","3.00","3.45","3.87","4.42","4.93","5.42","5.92","6.50","7.06","7.75","8.39","9.02","9.63","10.39","11.20","12.02","12.86","13.70","14.51","15.26","16.17","17.18","18.15","19.08","20.18","21.20","22.36","23.50","24.63","25.72","26.96","28.39","29.87","31.24","32.78","34.20","35.67","37.38","39.11","41.00","42.83","44.65","46.61","48.72","50.66","53.20","55.29","57.88","60.49","63.18","66.04","69.09","72.25","75.29","78.51","82.02","85.29","89.36","92.98","96.95","101.40","105.70","110.69","116.16","120.93","126.18","131.91","137.88","143.80","151.06","157.08","164.57","172.99","181.14","190.17","200.65","210.92","221.02","232.90","244.78","259.12","273.65","291.32","310.11","330.23","353.23","380.19","411.93","449.37","493.85","546.42","616.37","721.39","893.95","2142.09"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_coupon_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=28; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 28::smallint, + False::boolean, + 0.0052333334::real, + 3::integer, + 6889.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.80296665}'::real[], + NULL::real[], + '{0.6553299}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.01","2.20","4.55","7.28","10.58","14.36","17.92","22.46","25.33","29.09","32.44","36.89","41.40","45.19","49.75","55.22","62.09","68.46","74.86","81.76","91.57","99.10","106.96","114.24","121.21","127.94","137.96","148.71","157.54","170.28","181.68","193.93","204.76","214.01","227.90","241.64","255.16","269.95","283.85","297.98","314.58","330.18","348.86","367.79","387.60","402.79","419.99","435.31","461.47","484.00","509.09","533.90","558.08","588.06","619.44","645.35","672.88","700.29","729.03","760.23","796.67","836.28","873.12","909.36","951.28","1008.91","1061.09","1112.98","1155.96","1201.35","1259.28","1324.66","1399.44","1477.63","1548.31","1632.65","1703.81","1774.10","1847.07","1944.10","2036.97","2136.30","2215.42","2317.48","2479.32","2652.32","2791.40","2968.30","3152.68","3345.17","3578.36","3851.51","4127.20","4451.55","4914.34","5421.31","6009.40","6794.45","7819.40","9995.94","21255.41"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_ext_ship_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=29; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 29::smallint, + False::boolean, + 0.0045::real, + 6::integer, + 81417.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0188, 0.0003, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.0046927556}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","124.80","123.20","39.60","54.00","79.80","138.60","216.72","14.00","23.40","45.60","48.30","73.44","82.80","83.52","128.64","148.50","201.60","369.60"}'::numeric[], + E'{"0.01","5.94","11.44","16.77","22.24","28.70","34.72","40.68","46.76","54.04","61.00","68.16","76.50","85.26","94.55","103.02","111.44","121.44","132.24","143.40","153.90","165.76","177.65","188.67","201.11","212.38","224.93","238.72","252.96","266.76","282.10","299.12","315.56","331.39","347.22","363.12","379.85","399.00","416.25","434.16","453.96","475.60","497.55","521.70","543.90","568.03","592.20","618.64","644.00","669.06","697.92","724.13","755.70","784.09","816.31","849.52","882.75","915.75","950.25","987.00","1022.35","1059.10","1097.07","1144.50","1187.60","1237.04","1284.01","1339.45","1388.34","1443.94","1496.00","1543.70","1598.74","1656.20","1727.70","1794.60","1866.41","1936.12","2007.84","2091.57","2178.28","2270.17","2367.40","2465.85","2573.55","2691.00","2809.66","2948.40","3100.80","3253.56","3417.26","3620.70","3826.12","4070.04","4341.72","4685.14","5057.36","5597.70","6345.93","7552.84","14029.29"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_net_paid +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=30; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 30::smallint, + False::boolean, + 0.0045666667::real, + 6::integer, + 155617.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.011266666, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.0071978415}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","221.76","267.30"}'::numeric[], + E'{"0.04","6.30","13.46","20.10","27.38","36.00","45.37","54.42","64.17","74.16","84.95","95.83","107.47","120.56","133.68","147.52","161.55","176.09","192.62","209.85","225.68","242.40","260.64","280.40","299.63","319.88","342.68","361.62","383.67","407.20","430.95","452.40","478.20","502.86","526.93","551.28","580.65","609.84","645.84","672.01","705.60","742.28","777.65","819.77","859.65","905.32","946.21","988.00","1030.29","1072.29","1120.20","1169.28","1222.48","1277.88","1335.95","1393.40","1452.30","1510.88","1577.52","1643.88","1712.18","1783.60","1864.20","1941.02","2021.80","2110.48","2194.50","2288.80","2382.00","2480.31","2575.77","2686.53","2796.40","2918.30","3030.33","3153.62","3270.28","3405.85","3555.37","3689.67","3856.30","4006.50","4182.84","4362.48","4551.55","4780.32","5045.92","5298.28","5580.25","5880.00","6219.92","6583.20","6993.36","7441.75","7943.75","8616.00","9434.75","10515.84","11757.96","14014.08","25785.76"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_net_paid_inc_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=31; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 31::smallint, + False::boolean, + 0.004766667::real, + 6::integer, + 266415.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.011266666}'::real[], + NULL::real[], + '{-0.007137176}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","6.57","13.94","21.03","28.62","37.23","47.06","56.65","66.91","77.14","88.19","99.88","111.66","125.70","139.15","153.96","167.98","183.70","200.51","218.37","234.41","252.12","271.21","292.28","311.64","332.88","354.70","376.40","397.68","423.75","447.30","472.27","496.81","520.51","546.40","573.95","604.97","637.86","669.29","702.85","736.56","771.82","808.78","850.00","894.59","941.49","983.86","1030.60","1072.51","1120.44","1164.50","1218.82","1276.89","1328.94","1392.76","1450.62","1515.35","1577.79","1642.09","1715.87","1785.64","1867.43","1945.94","2025.64","2113.90","2200.02","2292.15","2386.61","2484.22","2590.13","2687.89","2800.02","2917.72","3043.84","3167.64","3291.60","3406.12","3562.87","3712.26","3872.48","4020.94","4187.61","4364.95","4559.15","4755.57","4989.93","5272.48","5532.24","5829.06","6143.38","6489.24","6878.77","7303.39","7746.09","8295.79","9014.30","9837.86","11001.37","12381.74","14679.09","26662.34"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_net_paid_inc_ship +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=32; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 32::smallint, + False::boolean, + 0.0::real, + 7::integer, + 280640.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0071525415}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"0.00","23.85","47.34","67.95","89.80","110.58","132.44","153.00","179.04","202.51","229.06","255.64","281.80","311.22","340.96","371.09","403.00","434.83","466.69","497.15","530.10","562.00","593.67","628.20","664.69","704.00","739.88","780.85","825.34","866.72","907.27","949.41","994.16","1044.45","1096.50","1144.92","1195.21","1250.15","1305.36","1361.76","1416.36","1475.91","1536.25","1598.70","1665.83","1732.92","1800.90","1873.10","1941.75","2016.72","2092.86","2175.34","2253.86","2345.76","2434.51","2518.72","2608.45","2696.29","2793.56","2894.40","2985.12","3079.88","3181.62","3294.00","3407.10","3528.30","3649.14","3775.68","3899.28","4033.51","4169.60","4307.38","4456.66","4620.28","4793.89","4963.42","5138.76","5318.80","5502.90","5715.60","5907.94","6131.28","6356.80","6629.70","6889.46","7169.33","7478.59","7780.37","8131.05","8498.52","8903.58","9369.99","9838.92","10426.64","11123.84","11986.61","13051.50","14332.97","16169.95","19117.60","36471.09"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_net_paid_inc_ship_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=33; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 33::smallint, + False::boolean, + 0.0::real, + 7::integer, + 613201.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.00728921}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"0.00","24.55","48.62","69.15","91.91","112.84","135.45","157.97","183.66","207.27","233.71","261.95","289.12","318.33","350.11","381.22","413.11","444.48","477.58","508.92","542.83","576.18","609.45","644.62","682.66","719.94","759.00","801.51","845.42","887.38","930.05","971.99","1022.12","1070.40","1121.18","1175.11","1228.42","1282.74","1334.77","1397.05","1456.76","1508.61","1575.93","1641.47","1709.47","1778.38","1844.93","1917.32","1990.71","2063.03","2147.81","2231.80","2316.78","2402.40","2493.91","2591.15","2678.00","2770.78","2865.32","2974.50","3066.56","3162.22","3269.67","3378.18","3496.07","3622.04","3743.00","3878.25","4003.40","4149.54","4287.78","4434.50","4591.26","4750.74","4944.45","5105.41","5289.66","5467.44","5660.87","5871.93","6090.64","6310.11","6551.52","6808.71","7096.07","7374.30","7678.33","8022.91","8355.36","8765.02","9187.25","9660.31","10158.98","10789.68","11521.51","12322.88","13498.43","14789.11","16663.22","19689.06","37177.23"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: catalog_sales, Attribute: cs_net_profit +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.catalog_sales'::regclass AND staattnum=34; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.catalog_sales'::regclass, + 34::smallint, + False::boolean, + 0.0::real, + 6::integer, + 206524.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0003, 0.0002}'::real[], + NULL::real[], + '{-0.0019606797}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","-47.52"}'::numeric[], + E'{"-9478.75","-6317.17","-5427.84","-4811.17","-4310.01","-3964.66","-3670.14","-3411.00","-3196.27","-2980.12","-2792.84","-2624.60","-2471.95","-2325.60","-2192.15","-2061.36","-1940.00","-1830.51","-1735.50","-1637.76","-1537.14","-1452.35","-1375.59","-1298.36","-1224.32","-1155.27","-1092.42","-1022.40","-963.48","-909.46","-846.45","-791.42","-741.60","-693.68","-651.75","-611.00","-571.48","-529.55","-492.82","-458.06","-424.16","-393.25","-361.82","-332.56","-302.38","-277.25","-248.65","-223.78","-199.01","-180.17","-158.72","-138.32","-121.68","-105.41","-89.61","-74.48","-59.72","-46.63","-35.01","-23.56","-13.29","-4.92","3.90","16.20","29.60","44.02","63.55","84.33","106.65","130.83","159.30","193.63","231.83","274.32","317.52","364.48","414.57","470.10","538.53","608.95","685.44","768.20","856.98","953.40","1053.60","1164.76","1294.00","1444.00","1596.00","1771.35","1966.12","2176.68","2427.26","2738.40","3132.80","3548.87","4041.96","4805.58","5798.10","7455.03","16965.90"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: customer, Attribute: c_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 1::smallint, + False::boolean, + 0.0::real, + 4::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.09763528}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"9","21261","42021","62080","82255","103369","125043","144232","165965","190286","211001","230315","251065","272203","292790","312482","334187","353856","373058","396690","415673","436316","456746","480529","502046","524523","546632","568546","589481","610972","631185","654707","675842","698400","718405","739653","760815","781559","803530","825502","846209","866622","888173","908015","929893","950771","971557","991734","1015944","1037799","1059421","1080667","1101711","1122753","1142324","1163272","1183361","1204818","1225216","1247329","1269800","1290928","1313000","1333417","1354039","1374731","1393758","1413066","1434044","1455682","1476112","1499430","1518599","1539394","1559012","1578764","1600604","1620632","1642082","1661234","1681629","1701960","1723759","1745015","1765218","1786153","1808002","1827671","1848579","1869421","1889087","1911370","1931677","1953626","1974278","1994274","2014813","2037922","2058859","2079452","2099872"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: customer, Attribute: c_customer_id +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 2::smallint, + False::boolean, + 0.0::real, + 17::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.008318781}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"AAAAAAAAAAABNBAA","AAAAAAAAACGBGAAA","AAAAAAAAAELNKBAA","AAAAAAAAAHEPIBAA","AAAAAAAAAJKFCAAA","AAAAAAAAAMDPPBAA","AAAAAAAAAOPLIAAA","AAAAAAAABBKGGAAA","AAAAAAAABEDPKBAA","AAAAAAAABGMDNAAA","AAAAAAAABJECAAAA","AAAAAAAABMDEJBAA","AAAAAAAABONCCAAA","AAAAAAAACBEIBBAA","AAAAAAAACDPKGBAA","AAAAAAAACGLFEAAA","AAAAAAAACJEIMAAA","AAAAAAAACMCDAAAA","AAAAAAAACOLBDBAA","AAAAAAAADBIDOAAA","AAAAAAAADEGFPBAA","AAAAAAAADGPJIAAA","AAAAAAAADJHBOAAA","AAAAAAAADMAFGAAA","AAAAAAAADOHCCAAA","AAAAAAAAEAOAEBAA","AAAAAAAAEDNGDBAA","AAAAAAAAEGIFIAAA","AAAAAAAAEJAMPBAA","AAAAAAAAELLKDAAA","AAAAAAAAEOCLPAAA","AAAAAAAAFAINOAAA","AAAAAAAAFDBIJBAA","AAAAAAAAFFHIMBAA","AAAAAAAAFHPMHAAA","AAAAAAAAFKIAPBAA","AAAAAAAAFNCOBAAA","AAAAAAAAFPKHLAAA","AAAAAAAAGCDNHAAA","AAAAAAAAGEJHIBAA","AAAAAAAAGHBCCAAA","AAAAAAAAGJJENBAA","AAAAAAAAGMCKCAAA","AAAAAAAAGOMBABAA","AAAAAAAAHBIPLBAA","AAAAAAAAHDPAKAAA","AAAAAAAAHGJCKBAA","AAAAAAAAHJALPAAA","AAAAAAAAHLOFPAAA","AAAAAAAAHOHAAAAA","AAAAAAAAIAOACBAA","AAAAAAAAIDGNKAAA","AAAAAAAAIGCCNBAA","AAAAAAAAIIMJAAAA","AAAAAAAAILNBOBAA","AAAAAAAAIOCOJBAA","AAAAAAAAJAIBNBAA","AAAAAAAAJDBAABAA","AAAAAAAAJFFOFBAA","AAAAAAAAJICEDBAA","AAAAAAAAJKILJBAA","AAAAAAAAJMOJNBAA","AAAAAAAAJPEMKBAA","AAAAAAAAKBMKDBAA","AAAAAAAAKEDLDAAA","AAAAAAAAKGMFDBAA","AAAAAAAAKJJJCBAA","AAAAAAAAKMAFLBAA","AAAAAAAAKOGELBAA","AAAAAAAALAOCABAA","AAAAAAAALDGGLAAA","AAAAAAAALGAJJBAA","AAAAAAAALIJMEAAA","AAAAAAAALKOLOBAA","AAAAAAAALNFAKBAA","AAAAAAAALPKMDBAA","AAAAAAAAMCDMMBAA","AAAAAAAAMELNCBAA","AAAAAAAAMHFNBBAA","AAAAAAAAMJMFPBAA","AAAAAAAAMMGBFAAA","AAAAAAAAMPBPFAAA","AAAAAAAANBJMLAAA","AAAAAAAANECPPBAA","AAAAAAAANHBEAAAA","AAAAAAAANJIOCBAA","AAAAAAAANMDCBAAA","AAAAAAAANPAGFBAA","AAAAAAAAOBIDJBAA","AAAAAAAAODNGFAAA","AAAAAAAAOGECJBAA","AAAAAAAAOINLGAAA","AAAAAAAAOLGCEBAA","AAAAAAAAONPNAAAA","AAAAAAAAPAKLGAAA","AAAAAAAAPDDNKAAA","AAAAAAAAPFNALBAA","AAAAAAAAPIFFFAAA","AAAAAAAAPLABOAAA","AAAAAAAAPNGKCBAA","AAAAAAAAPPPOAAAA"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: customer, Attribute: c_current_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 3::smallint, + False::boolean, + 0.036333334::real, + 4::integer, + -0.50137764::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0013170508}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"83","18955","39087","58094","75845","95317","115100","134187","152171","172644","193010","211552","231710","251817","270655","288181","306995","323507","344088","362797","382712","404200","423621","442226","460401","479260","497142","517339","536731","556732","574796","592497","612826","632068","650345","670861","690813","710439","729562","747865","768032","784796","804004","823342","840808","862022","880748","899717","920319","938794","957931","976962","994731","1014023","1033686","1051262","1072185","1092147","1113436","1132849","1151543","1170064","1188829","1208390","1228056","1247895","1268450","1286523","1306787","1325642","1344821","1361249","1380841","1399617","1418271","1436735","1456195","1476598","1496520","1514478","1535680","1554729","1573897","1593768","1614360","1634204","1654338","1672759","1691901","1711514","1731470","1749749","1767712","1787017","1807176","1824761","1843120","1863530","1883265","1901706","1920535"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: customer, Attribute: c_current_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 4::smallint, + False::boolean, + 0.0347::real, + 4::integer, + 7192.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.00030779035}'::real[], + NULL::real[], + NULL::real[], + E'{"882","1308","3965","367","666","1327","6987"}'::int4[], + E'{"1","72","141","218","292","372","440","506","579","647","728","799","868","940","1006","1081","1151","1224","1294","1368","1432","1502","1576","1650","1728","1803","1873","1941","2024","2095","2168","2245","2318","2395","2472","2542","2617","2682","2751","2823","2897","2969","3041","3110","3179","3248","3319","3390","3457","3520","3590","3657","3725","3801","3881","3954","4024","4098","4179","4251","4312","4383","4451","4522","4604","4674","4745","4814","4885","4954","5024","5095","5171","5245","5317","5386","5452","5523","5591","5664","5732","5805","5883","5956","6025","6099","6170","6241","6316","6392","6464","6534","6610","6685","6756","6829","6900","6980","7059","7129","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: customer, Attribute: c_current_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 5::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.32888332::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0058509638}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"52","10026","21386","32663","42941","53021","65083","75763","86063","96263","107445","117990","127743","138145","147534","158592","168713","178593","188864","199238","210017","220563","231187","241437","252281","263159","273251","284057","295058","305713","315928","326018","336613","346947","357443","368266","378995","388655","399147","410310","419835","429767","442179","452745","463314","473270","483327","494816","505073","515313","525490","536085","546403","556179","567315","577096","587145","597369","608015","619292","629700","640103","651254","661172","671946","681745","691688","702105","712203","721654","733295","743331","753425","764850","774949","785116","795978","806368","817723","827531","838047","849099","859705","870677","881136","891818","902438","912558","922958","933355","943287","953511","964298","974663","985836","996922","1007782","1017952","1029639","1040067","1049984"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: customer, Attribute: c_first_shipto_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 6::smallint, + False::boolean, + 0.035633333::real, + 4::integer, + 3649.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665}'::real[], + NULL::real[], + '{-0.0058256034}'::real[], + NULL::real[], + NULL::real[], + E'{"2450039","2451757","2449267","2449566","2449608","2450648","2450973","2451697","2452197"}'::int4[], + E'{"2449028","2449061","2449097","2449131","2449163","2449198","2449239","2449274","2449311","2449346","2449381","2449417","2449457","2449492","2449530","2449568","2449601","2449635","2449669","2449706","2449746","2449780","2449818","2449857","2449893","2449930","2449972","2450009","2450045","2450081","2450118","2450155","2450194","2450228","2450265","2450301","2450337","2450372","2450407","2450444","2450483","2450523","2450560","2450594","2450633","2450672","2450708","2450743","2450779","2450812","2450853","2450890","2450930","2450969","2451005","2451044","2451078","2451114","2451147","2451184","2451221","2451261","2451295","2451334","2451370","2451411","2451449","2451486","2451523","2451560","2451594","2451627","2451664","2451702","2451740","2451774","2451810","2451846","2451879","2451918","2451954","2451991","2452028","2452063","2452099","2452135","2452172","2452207","2452242","2452277","2452312","2452352","2452389","2452429","2452461","2452495","2452530","2452566","2452602","2452640","2452678"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: customer, Attribute: c_first_sales_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 7::smallint, + False::boolean, + 0.034733333::real, + 4::integer, + 3650.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665}'::real[], + NULL::real[], + '{-0.008479864}'::real[], + NULL::real[], + NULL::real[], + E'{"2450009","2451727","2449237","2449536","2450618","2450943","2451260","2451667","2452039","2452167"}'::int4[], + E'{"2448998","2449032","2449067","2449101","2449135","2449170","2449209","2449245","2449281","2449317","2449352","2449389","2449428","2449463","2449500","2449537","2449571","2449603","2449637","2449673","2449713","2449747","2449785","2449823","2449859","2449897","2449940","2449977","2450013","2450049","2450084","2450121","2450161","2450196","2450234","2450270","2450306","2450341","2450375","2450412","2450450","2450489","2450526","2450562","2450599","2450638","2450674","2450708","2450743","2450778","2450819","2450854","2450894","2450934","2450971","2451008","2451044","2451079","2451114","2451151","2451188","2451226","2451263","2451301","2451338","2451379","2451417","2451453","2451492","2451528","2451561","2451594","2451629","2451669","2451706","2451741","2451776","2451811","2451845","2451884","2451921","2451957","2451993","2452029","2452067","2452104","2452140","2452175","2452211","2452245","2452281","2452322","2452358","2452398","2452431","2452465","2452501","2452536","2452573","2452610","2452648"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: customer, Attribute: c_salutation +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 8::smallint, + False::boolean, + 0.035633333::real, + 4::integer, + 6.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.2827, 0.16666667, 0.166, 0.117466666, 0.11726667, 0.114266664}'::real[], + '{0.19105348}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"Dr.","Mr.","Sir","Miss","Mrs.","Ms."}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: customer, Attribute: c_first_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 9::smallint, + False::boolean, + 0.0351::real, + 6::integer, + 2938.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.019733334, 0.0178, 0.0177, 0.014733333, 0.013333334, 0.012866667, 0.011166667, 0.0086, 0.008466667, 0.0082, 0.006, 0.0059666666, 0.0059666666, 0.0055, 0.0055, 0.0053666667, 0.0053, 0.0053, 0.0051, 0.0049666665, 0.0049, 0.0049, 0.0047, 0.0045, 0.0042, 0.004166667, 0.0041333335, 0.0040666666, 0.0039666668, 0.0039333333, 0.0039333333, 0.0038666667, 0.0038666667, 0.0038333333, 0.0038333333, 0.0038, 0.0038, 0.0037333334, 0.0036666666, 0.0035, 0.0035, 0.0034666667, 0.0034333332, 0.0034333332, 0.0033666666, 0.0033666666, 0.0033333334, 0.0031666667, 0.0031, 0.0031, 0.0030666667, 0.003, 0.0029666666, 0.0029666666, 0.0028666668, 0.0028333333, 0.0028333333, 0.0028, 0.0027666667, 0.0027, 0.0027, 0.0026666666, 0.0026333334, 0.0026333334, 0.0026, 0.0026, 0.0025666666, 0.0025666666, 0.0025, 0.0024666667, 0.0024666667, 0.0024333333, 0.0024, 0.0024, 0.0023666667, 0.0023333333, 0.0023333333, 0.0023333333, 0.0022666666, 0.0022333334, 0.0022333334, 0.0022, 0.0022, 0.0022, 0.0021666666, 0.0021666666, 0.0021666666, 0.0021666666, 0.0021666666, 0.0021333334, 0.0020666667, 0.0020666667, 0.0020666667, 0.0020333333, 0.002, 0.0019666667, 0.0019666667, 0.0019333333, 0.0019, 0.0018666667}'::real[], + NULL::real[], + '{0.0041609285}'::real[], + NULL::real[], + NULL::real[], + E'{"John","James","Robert","Michael","David","William","Richard","Joseph","Charles","Thomas","Christopher","Linda","Mark","Daniel","Donald","Jennifer","Elizabeth","George","Barbara","Kenneth","Margaret","Paul","Dorothy","Edward","Susan","Brian","Jason","Lisa","Steven","Gary","Ronald","Anthony","Larry","Karen","Sandra","Helen","Matthew","Nancy","Kevin","Andrew","Eric","Sharon","Donna","Jeffrey","Betty","Timothy","Raymond","Jose","Frank","Jessica","Angela","Ruth","Melissa","Rebecca","Anna","Gloria","Laura","Stephen","Amy","Brenda","Cynthia","Deborah","Pamela","Patrick","Martha","Virginia","Michelle","Sarah","Diane","Joshua","Kimberly","Ann","Arthur","Scott","Douglas","Christine","Gregory","Harold","Katherine","Dennis","Joyce","Alice","Janet","Stephanie","Jerry","Kathleen","Marie","Peter","Theresa","Walter","Albert","Amanda","Teresa","Debra","Jonathan","Fred","Keith","Willie","Gerald","Lori"}'::varchar[], + E'{"Aaron","Adrienne","Alexander","Allyson","Andrea","Anne","April","Audrey","Benjamin","Bessie","Billy","Bradley","Brigitte","Caitlyn","Carlos","Carrie","Cecelia","Charlotte","Christian","Clara","Clifton","Cornelius","Cyrus","Danny","Dawn","Delta","Diana","Dora","Earl","Edna","Elena","Elsie","Erika","Ethel","Evelyn","Fleta","Freddie","Georgia","Glen","Gregorio","Hattie","Henriette","Homer","Ingrid","Jack","Jaleesa","Janis","Jed","Jerome","Jimmie","Joe","Jon","Juan","Julia","Justin","Kathy","Kerry","Kurt","Lavon","Leo","Letitia","Lois","Louis","Luis","Mae","Marco","Marilynn","Martin","Maurice","Melvin","Mike","Mitchell","Naomi","Nicholas","Norma","Oscar","Pauline","Phillip","Rachel","Randy","Renee","Robbie","Roger","Rose","Roy","Sabrina","Sara","Sharlene","Sherry","Stanley","Suzi","Tanya","Terry","Tina","Tonya","Tyrone","Veronica","Viola","Warren","Willian","Zulma"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: customer, Attribute: c_last_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 10::smallint, + False::boolean, + 0.033933334::real, + 7::integer, + 4529.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.015133333, 0.011733334, 0.011033333, 0.009233333, 0.008533333, 0.008166667, 0.0059666666, 0.0048666666, 0.0048, 0.0047, 0.0046333335, 0.0046333335, 0.0043666665, 0.0043, 0.0041333335, 0.004, 0.0039666668, 0.0039, 0.0039, 0.0037333334, 0.0036333334, 0.0032666668, 0.0031666667, 0.0031333333, 0.0030666667, 0.003, 0.003, 0.0029, 0.0029, 0.0027666667, 0.0027333333, 0.0027333333, 0.0027, 0.0026333334, 0.0026333334, 0.0026333334, 0.0026, 0.0026, 0.0026, 0.0025666666, 0.0025, 0.0024666667, 0.0024333333, 0.0023666667, 0.0023666667, 0.0023333333, 0.0022, 0.0022, 0.0021333334, 0.0021333334, 0.0021333334, 0.0020666667, 0.0020333333, 0.0019, 0.0019, 0.0018666667, 0.0018666667, 0.0018333333, 0.0018, 0.0017666667, 0.0017666667, 0.0017666667, 0.0017333333, 0.0017333333, 0.0017333333, 0.0017333333, 0.0017, 0.0016666667, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016, 0.0016, 0.0016, 0.0015666666, 0.0015666666, 0.0015333333, 0.0015333333, 0.0015333333, 0.0015333333, 0.0015, 0.0015, 0.0015, 0.0015, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014666667, 0.0014333334, 0.0014333334, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333}'::real[], + NULL::real[], + '{0.0012389864}'::real[], + NULL::real[], + NULL::real[], + E'{"Smith","Johnson","Williams","Jones","Brown","Davis","Miller","Taylor","Thomas","Jackson","Moore","Wilson","Garcia","Anderson","Martin","Walker","Harris","Martinez","Robinson","Thompson","White","Young","Wright","Lee","Lewis","Hall","King","Rodriguez","Turner","Nelson","Allen","Hill","Roberts","Carter","Clark","Gonzalez","Adams","Hernandez","Scott","Campbell","Lopez","Baker","Green","Bell","Evans","Bailey","Rogers","Torres","Mitchell","Morgan","Stewart","Perez","Edwards","Collins","Sanchez","Morris","Phillips","Gray","Parker","Cox","Reed","Rivera","Brooks","Diaz","Richardson","Watson","Washington","Perry","Murphy","Patterson","Ross","Bryant","Cooper","Kelly","Henderson","Howard","Cook","James","Peterson","Simmons","Long","Mason","Russell","Wood","Gonzales","Murray","Price","Ramirez","Ward","Hughes","Myers","Barnes","Daniels","Harrison","Alexander","Bennett","Ford","Graham","Burns","Powell"}'::varchar[], + E'{"Aaron","Allison","Armstrong","Ayala","Barlow","Baxter","Benson","Black","Bonilla","Boyer","Bright","Burdick","Butler","Cano","Carroll","Chambers","Chinn","Coats","Comer","Correa","Creech","Cupp","Davies","Dent","Donovan","Duffy","Eaton","Enriquez","Farrington","Fink","Flynn","Frank","Fuller","Garrett","Gibson","Golding","Graves","Gross","Hale","Hardaway","Harvey","Heard","Herrera","Hobbs","Holt","Howe","Hunter","Jacobs","Johnston","Keller","Kirby","Kurtz","Larkin","Ledoux","Lindsey","Lowe","Mack","Markley","May","Mccormick","Mcgrath","Mcneil","Mercier","Moffitt","Morrison","Nagel","Nichols","Ocampo","Orozco","Padilla","Patton","Perkins","Pinto","Pratt","Raines","Reece","Rhodes","Ritter","Roman","Ruby","Salinas","Saylor","Seiler","Shepherd","Simpson","Snyder","Sperry","Stephens","Strickland","Sweeney","Thornton","Trejo","Valencia","Vernon","Walls","Weaver","West","Wiley","Winters","Worsham","Zuniga"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: customer, Attribute: c_preferred_cust_flag +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 11::smallint, + False::boolean, + 0.03533333::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.49123332, 0.47343335}'::real[], + '{0.4982882}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); + +-- +-- Table: customer, Attribute: c_birth_day +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 12::smallint, + False::boolean, + 0.0334::real, + 4::integer, + 31.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0341, 0.0336, 0.0335, 0.033166666, 0.0326, 0.032266665, 0.032233335, 0.0321, 0.031933334, 0.0319, 0.0319, 0.0319, 0.031866666, 0.031833332, 0.031833332, 0.0317, 0.031533334, 0.031533334, 0.0315, 0.031466667, 0.031166667, 0.0311, 0.030966667, 0.030733334, 0.0307, 0.030533334, 0.030066667, 0.029833334, 0.029666666, 0.028233333, 0.019133333}'::real[], + '{0.03440461}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"27","15","26","5","10","23","21","19","14","6","7","18","12","13","24","17","16","22","1","25","8","11","9","3","28","4","29","2","20","30","31"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: customer, Attribute: c_birth_month +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 13::smallint, + False::boolean, + 0.0355::real, + 4::integer, + 12.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.08296666, 0.0828, 0.0826, 0.082166664, 0.08143333, 0.08093333, 0.079966664, 0.079733334, 0.079166666, 0.0789, 0.07836667, 0.07546667}'::real[], + '{0.08591734}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3","1","8","7","9","10","5","6","12","4","11","2"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: customer, Attribute: c_birth_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 14::smallint, + False::boolean, + 0.036066666::real, + 4::integer, + 69.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0158, 0.015133333, 0.0151, 0.0150666665, 0.014966667, 0.014966667, 0.014966667, 0.014966667, 0.0148, 0.014766667, 0.014733333, 0.0147, 0.0146, 0.0146, 0.014566666, 0.014366667, 0.014366667, 0.014366667, 0.014333333, 0.014333333, 0.0143, 0.014266667, 0.014266667, 0.014266667, 0.014233333, 0.0142, 0.014166667, 0.014166667, 0.014066666, 0.014066666, 0.014033333, 0.014033333, 0.014, 0.013966667, 0.013966667, 0.013966667, 0.013933334, 0.013933334, 0.013933334, 0.013866667, 0.013866667, 0.0138, 0.0138, 0.013733333, 0.013733333, 0.013666667, 0.0136, 0.0135, 0.0135, 0.013466666, 0.0134333335, 0.0134333335, 0.0134, 0.013366667, 0.013366667, 0.013266667, 0.013266667, 0.013266667, 0.013266667, 0.0132, 0.0131, 0.0131, 0.013066667, 0.013066667, 0.013033333, 0.013033333, 0.012933333, 0.012833334, 0.0127}'::real[], + '{0.023301385}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1940","1978","1935","1970","1955","1957","1959","1990","1988","1925","1956","1987","1972","1985","1946","1926","1932","1933","1929","1979","1968","1930","1951","1961","1975","1966","1953","1971","1939","1977","1941","1991","1960","1937","1948","1952","1927","1938","1962","1964","1976","1958","1986","1924","1928","1965","1983","1942","1963","1931","1944","1945","1984","1934","1954","1947","1980","1981","1989","1982","1950","1969","1973","1974","1936","1949","1943","1967","1992"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: customer, Attribute: c_birth_country +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 15::smallint, + False::boolean, + 0.035633333::real, + 9::integer, + 211.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.0056666667, 0.0055333334}'::real[], + NULL::real[], + '{0.013934988}'::real[], + NULL::real[], + NULL::real[], + E'{"GEORGIA","GREENLAND"}'::varchar[], + E'{"AFGHANISTAN","ALBANIA","AMERICAN SAMOA","ANGOLA","ANGUILLA","ARGENTINA","ARUBA","AUSTRIA","BAHAMAS","BANGLADESH","BELARUS","BELIZE","BERMUDA","BOLIVIA","BOUVET ISLAND","BRUNEI DARUSSALAM","BURUNDI","CAMBODIA","CANADA","CAYMAN ISLANDS","CHRISTMAS ISLAND","COSTA RICA","CROATIA","CYPRUS","DENMARK","DOMINICA","EGYPT","EQUATORIAL GUINEA","ETHIOPIA","FIJI","FRANCE","FRENCH POLYNESIA","GAMBIA","GHANA","GREECE","GUADELOUPE","GUATEMALA","GUINEA","HAITI","HONDURAS","ICELAND","INDONESIA","IRELAND","ISRAEL","JAMAICA","JERSEY","KAZAKHSTAN","KIRIBATI","KUWAIT","LEBANON","LIBERIA","LITHUANIA","LUXEMBOURG","MALAWI","MALDIVES","MALTA","MARTINIQUE","MAURITIUS","MEXICO","MONACO","MONTENEGRO","MOROCCO","NAMIBIA","NEPAL","NETHERLANDS ANTILLES","NEW ZEALAND","NIGER","NIUE","NORWAY","PALAU","PAPUA NEW GUINEA","PERU","PITCAIRN","PORTUGAL","QATAR","ROMANIA","RWANDA","SAMOA","SAUDI ARABIA","SERBIA","SIERRA LEONE","SLOVAKIA","SOLOMON ISLANDS","SOUTH AFRICA","SRI LANKA","SURINAME","SWEDEN","SYRIAN ARAB REPUBLIC","THAILAND","TOGO","TONGA","TUNISIA","TUVALU","UKRAINE","UNITED KINGDOM","URUGUAY","VANUATU","VIET NAM","WALLIS AND FUTUNA","YEMEN","ZIMBABWE"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: customer, Attribute: c_login +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 16::smallint, + False::boolean, + 1.0::real, + 0::integer, + 0.0::real, + 0::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + NULL::real[], + NULL::real[], + NULL::real[], + NULL::real[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: customer, Attribute: c_email_address +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 17::smallint, + False::boolean, + 0.03596667::real, + 28::integer, + -0.9640333::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.00065877277}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"Aaron.Allen@QVp8KYxoqS.edu","Albert.Mcnabb@JqFg1Vfr.edu","Allen.Blackmon@rDQezy0Iy.org","Amy.Moore@lIXLGiGxl.com","Angela.Perez@9CODy4qpPeA8HCLX.com","Annie.Anderson@D1dOEV8V7YH.edu","April.Sanchez@MlJE7Jyr1KnbMizt8.com","Barbara.Bird@Bsz4Y8vF.edu","Bennie.Mcdonald@8a.com","Beverly.Armstrong@QKMtgEU.edu","Brady.Pacheco@V3G7zDs.org","Brian.Otto@5Ue35SXHl043P.org","Candy.Cox@BmsyXv426e.edu","Casey.Steele@TkMmIusn.com","Charles.Brito@qPU9PAt6xF.com","Chelsey.Gil@U7R6AeIVeQNbM.org","Christopher.Caraway@baXEFsAXkiXc4H.com","Clarence.Martinez@Tjom5JSSLsiqH.edu","Corinne.Blount@gG8DjsIs77.edu","Dale.Peterson@UP1FQ.com","Danny.Rudd@Qj.edu","David.Hernandez@XvDstf8oVspNVEq9N2ek.edu","Dawn.Washington@UZL4A2cTelj.org","Delorse.Mann@p1.edu","Diane.Ruiz@tq8V3.edu","Dona.Rucker@U5tPkxBoh3Nvvr.edu","Dorothy.Ledoux@6UXxuie.org","Ebony.Straub@O0ny7G.edu","Edwin.Brown@jifz5d3.com","Elizabeth.Rowe@x7a.com","Erica.Stewart@MjVPLVkiTTx1k9xvn.com","Ethel.Bowers@BchSkuO.edu","Felisha.White@4KHiD3EfpI.org","Fred.Burns@YAxMo0quQt02.org","Gaynell.Duran@PP5khP2OBXNnz.edu","Gerald.Olivas@Hs63PKrg.org","Goldie.Costello@74uH9.com","Harold.Mckinney@0Ymy5L.edu","Helene.Lockhart@4guNOhMAJ.org","Howard.Clarkson@KEs7Z6hdVT5d.edu","Jack.Davis@D7dTycb6ort.org","James.Cockrell@5lqoIx4paJn9P.org","James.Richter@7JahtLhEvS.org","Janice.Choate@ItXxi6VjtefUmkF.org","Jeanette.Mathews@mXCyZTs8MaGK9.org","Jennifer.Emerson@LADJl.com","Jerry.Willoughby@4h6L6um1aOm0JTk.edu","Joanna.French@Dn.com","John.Byrd@xAeLnuIQqDO4V.edu","John.Nail@vdm7UXfYYeeR5.org","Jonathan.Cochran@a1YLy7.com","Josephine.Barton@jbuycDaa1Dih2f6TbHs.org","Joshua.Trent@P5VKT8eLAEqph7.org","Julia.Mcneil@UXUiYMm4Rf1r1ysly2.com","Karen.Salmon@hVtuyn2.org","Kathy.Roush@f1.com","Kenneth.Nolen@fXIxCA8ecA7kUe.edu","Kimberly.Ward@UjmN1i5S0HqjOSB6P.org","Larry.Mccollum@KM3A2VsKR51LR7aSC2.edu","Leann.Lindsay@CYHO5.org","Lillian.Gibbons@ex2.edu","Lisa.Kaiser@2.edu","Lorraine.Wasson@fxUN1RDnuPC.com","Lyn.Green@ab9AnRe6OP.edu","Margaret.Childers@I2BJusIOR.org","Marilyn.Cochran@fXUsGKiG2pQn5p.org","Mark.Townsend@QRk6f4vPmjzGsd.edu","Matthew.Brown@BbgxEpsOa2.edu","Melissa.Brown@tU.org","Michael.Evans@na3Fzya.edu","Michael.Vickery@tGpS.edu","Millie.Wood@CYrA5ZCpBUxN.com","Nancy.Hubbard@1Dij5VOarSDD.com","Nicole.Cartwright@XVpmQfap67h39R.edu","Otha.Mathews@Q.edu","Paul.Bernard@l8hNZT.com","Peter.Bean@1hcfjEMbL.com","Rafael.Walker@DdbVsZ48tXFR.org","Raymond.Willis@FuCYxX.org","Richard.Blue@hk6sJl.org","Richard.Walker@QkOyOiijkoT6tALu.org","Robert.Feliciano@zrxHvBIUT1.org","Robert.Schrader@84hFFO.edu","Ronald.Barajas@SmV.edu","Rose.Rivera@nI5i3amDP9e.com","Ruth.Noble@nsRPMH7imQms.edu","Sandra.Ngo@NpRHjOrv.org","Sean.Young@cSmSeTb.edu","Shelly.Prentice@fOdVDfc3l.org","Stephanie.Maupin@1aO67HVBb4t.org","Stuart.Mintz@sCH9lO.com","Tamika.Walker@LypSN7cml.com","Terry.Pence@9V95I2n.edu","Thomas.Logan@62ZLdPqs6.edu","Tina.Fry@ggnu7.com","Troy.Hunt@HEIC1huvlV2.com","Vicky.Smith@7NTjUV1y.com","Walter.Guinn@q0V9yqO.com","William.Biddle@X3bGbi3YEGk.edu","William.Silva@OsUh7.edu","Zulma.Williams@NNUybLiKUcP.com"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: customer, Attribute: c_last_review_date +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.customer'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.customer'::regclass, + 18::smallint, + False::boolean, + 0.03643333::real, + 4::integer, + 366.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0033333334, 0.0033333334}'::real[], + NULL::real[], + '{-0.010210618}'::real[], + NULL::real[], + NULL::real[], + E'{"2452342","2452574"}'::int4[], + E'{"2452283","2452286","2452290","2452293","2452297","2452301","2452304","2452308","2452312","2452315","2452318","2452322","2452326","2452329","2452333","2452337","2452341","2452345","2452349","2452352","2452356","2452360","2452363","2452367","2452371","2452374","2452378","2452382","2452386","2452389","2452393","2452397","2452400","2452404","2452408","2452411","2452414","2452418","2452422","2452425","2452429","2452433","2452437","2452440","2452444","2452447","2452451","2452455","2452458","2452462","2452465","2452469","2452473","2452476","2452480","2452483","2452487","2452491","2452494","2452498","2452501","2452505","2452508","2452512","2452515","2452519","2452523","2452527","2452531","2452535","2452538","2452542","2452545","2452549","2452553","2452556","2452560","2452563","2452568","2452571","2452576","2452579","2452583","2452587","2452591","2452594","2452598","2452601","2452605","2452608","2452612","2452616","2452619","2452623","2452626","2452630","2452634","2452638","2452641","2452645","2452648"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 1::smallint, + False::boolean, + 0.0::real, + 4::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2415027","2415771","2416520","2417211","2417903","2418630","2419355","2420088","2420908","2421635","2422337","2423125","2423817","2424576","2425331","2426034","2426734","2427456","2428161","2428886","2429586","2430281","2431030","2431747","2432487","2433188","2433919","2434660","2435416","2436096","2436816","2437551","2438254","2438932","2439677","2440414","2441121","2441884","2442643","2443351","2444066","2444821","2445520","2446305","2447089","2447791","2448548","2449230","2449930","2450652","2451408","2452175","2452928","2453663","2454412","2455152","2455942","2456650","2457349","2458087","2458835","2459531","2460255","2460995","2461677","2462381","2463126","2463880","2464613","2465432","2466146","2466884","2467605","2468353","2469108","2469764","2470509","2471242","2471960","2472732","2473465","2474220","2474963","2475782","2476553","2477254","2477964","2478666","2479406","2480132","2480928","2481630","2482367","2483101","2483817","2484513","2485191","2485905","2486655","2487351","2488066"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_date_id +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 2::smallint, + False::boolean, + 0.0::real, + 17::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.004197001}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"AAAAAAAAAAABFCAA","AAAAAAAAACLOFCAA","AAAAAAAAAFFCFCAA","AAAAAAAAAHNPECAA","AAAAAAAAAKHDFCAA","AAAAAAAAAMPOECAA","AAAAAAAAAPIBFCAA","AAAAAAAABBPBFCAA","AAAAAAAABEFFFCAA","AAAAAAAABGOIFCAA","AAAAAAAABJKKFCAA","AAAAAAAABMDCFCAA","AAAAAAAABONBFCAA","AAAAAAAACBFDFCAA","AAAAAAAACDNAFCAA","AAAAAAAACGHOFCAA","AAAAAAAACJCMFCAA","AAAAAAAACLLAFCAA","AAAAAAAACOBLFCAA","AAAAAAAADAMDFCAA","AAAAAAAADDFPECAA","AAAAAAAADGAOFCAA","AAAAAAAADIKLFCAA","AAAAAAAADLDCFCAA","AAAAAAAADOCDFCAA","AAAAAAAAEAKPECAA","AAAAAAAAEDEAFCAA","AAAAAAAAEFPHFCAA","AAAAAAAAEILJFCAA","AAAAAAAAELGOECAA","AAAAAAAAENOOFCAA","AAAAAAAAFAFPECAA","AAAAAAAAFCPJFCAA","AAAAAAAAFFGHFCAA","AAAAAAAAFHMOECAA","AAAAAAAAFKEKFCAA","AAAAAAAAFMMJFCAA","AAAAAAAAFPCKFCAA","AAAAAAAAGBKJFCAA","AAAAAAAAGEDOECAA","AAAAAAAAGGOAFCAA","AAAAAAAAGJKHFCAA","AAAAAAAAGMEBFCAA","AAAAAAAAGONOFCAA","AAAAAAAAHBJHFCAA","AAAAAAAAHECHFCAA","AAAAAAAAHGLOECAA","AAAAAAAAHJFDFCAA","AAAAAAAAHLOBFCAA","AAAAAAAAHOFIFCAA","AAAAAAAAIANCFCAA","AAAAAAAAIDFPECAA","AAAAAAAAIFMFFCAA","AAAAAAAAIIGHFCAA","AAAAAAAAILABFCAA","AAAAAAAAINJEFCAA","AAAAAAAAJADHFCAA","AAAAAAAAJCLBFCAA","AAAAAAAAJFDCFCAA","AAAAAAAAJHLMFCAA","AAAAAAAAJKDBFCAA","AAAAAAAAJMKOFCAA","AAAAAAAAJPCHFCAA","AAAAAAAAKBMIFCAA","AAAAAAAAKEEPECAA","AAAAAAAAKGODFCAA","AAAAAAAAKJGPECAA","AAAAAAAAKLMAFCAA","AAAAAAAAKOFCFCAA","AAAAAAAALBAAFCAA","AAAAAAAALDKOECAA","AAAAAAAALGBIFCAA","AAAAAAAALIGMFCAA","AAAAAAAALKMOECAA","AAAAAAAALNENFCAA","AAAAAAAALPMOFCAA","AAAAAAAAMCFFFCAA","AAAAAAAAMELFFCAA","AAAAAAAAMHFJFCAA","AAAAAAAAMJOIFCAA","AAAAAAAAMMHDFCAA","AAAAAAAAMPBJFCAA","AAAAAAAANBKMFCAA","AAAAAAAANEHIFCAA","AAAAAAAANGMPECAA","AAAAAAAANJIAFCAA","AAAAAAAANMDDFCAA","AAAAAAAANOPGFCAA","AAAAAAAAOBHNFCAA","AAAAAAAAOEAPFCAA","AAAAAAAAOGKIFCAA","AAAAAAAAOJBGFCAA","AAAAAAAAOLIJFCAA","AAAAAAAAOOALFCAA","AAAAAAAAPAJMFCAA","AAAAAAAAPDCOECAA","AAAAAAAAPFLAFCAA","AAAAAAAAPIECFCAA","AAAAAAAAPKNIFCAA","AAAAAAAAPNFPFCAA","AAAAAAAAPPPOFCAA"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: date_dim, Attribute: d_date +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 3::smallint, + False::boolean, + 0.0::real, + 4::integer, + -1.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1095::oid, + 1095::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1900-01-07","1902-01-21","1904-02-09","1905-12-31","1907-11-23","1909-11-19","1911-11-14","1913-11-16","1916-02-14","1918-02-10","1920-01-13","1922-03-11","1924-02-01","1926-03-01","1928-03-25","1930-02-26","1932-01-27","1934-01-18","1935-12-24","1937-12-18","1939-11-18","1941-10-13","1943-11-01","1945-10-18","1947-10-28","1949-09-28","1951-09-29","1953-10-09","1955-11-04","1957-09-14","1959-09-04","1961-09-08","1963-08-12","1965-06-20","1967-07-05","1969-07-11","1971-06-18","1973-07-20","1975-08-18","1977-07-26","1979-07-11","1981-08-04","1983-07-04","1985-08-27","1987-10-20","1989-09-21","1991-10-18","1993-08-30","1995-07-31","1997-07-22","1999-08-17","2001-09-22","2003-10-15","2005-10-19","2007-11-07","2009-11-16","2012-01-15","2013-12-23","2015-11-22","2017-11-29","2019-12-17","2021-11-12","2023-11-06","2025-11-15","2027-09-28","2029-09-01","2031-09-16","2033-10-09","2035-10-12","2038-01-08","2039-12-23","2041-12-30","2043-12-21","2046-01-07","2048-02-01","2049-11-18","2051-12-03","2053-12-05","2055-11-23","2058-01-03","2060-01-06","2062-01-30","2064-02-12","2066-05-11","2068-06-20","2070-05-22","2072-05-01","2074-04-03","2076-04-12","2078-04-08","2080-06-12","2082-05-15","2084-05-21","2086-05-25","2088-05-10","2090-04-06","2092-02-13","2094-01-27","2096-02-16","2098-01-12","2099-12-28"}'::date[], + NULL::date[], + NULL::date[], + NULL::date[], + NULL::date[]); + +-- +-- Table: date_dim, Attribute: d_month_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 4::smallint, + False::boolean, + 0.0::real, + 4::integer, + 2400.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00073333335, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"979","1761","198","288","356","445","552","594","751","941","1154","1251"}'::int4[], + E'{"0","24","48","71","94","117","141","164","191","217","239","265","289","314","339","363","386","409","432","458","480","503","528","551","577","601","625","649","675","695","719","743","768","790","814","838","861","885","911","934","959","985","1009","1034","1059","1083","1106","1130","1152","1176","1201","1226","1252","1277","1301","1326","1351","1373","1396","1421","1444","1467","1491","1515","1537","1560","1585","1609","1633","1661","1684","1707","1731","1755","1781","1803","1827","1851","1874","1900","1923","1948","1973","1999","2024","2048","2070","2094","2117","2141","2167","2190","2213","2238","2261","2283","2306","2329","2354","2376","2399"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_week_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 5::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.14316417::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1","108","215","313","412","516","620","724","841","945","1046","1158","1257","1365","1473","1574","1674","1777","1878","1981","2081","2180","2287","2390","2496","2596","2700","2806","2914","3011","3114","3219","3319","3416","3523","3628","3729","3838","3946","4048","4150","4258","4357","4470","4582","4682","4790","4887","4987","5091","5199","5308","5416","5521","5628","5733","5846","5947","6047","6153","6260","6359","6462","6568","6666","6766","6873","6980","7085","7202","7304","7409","7512","7619","7727","7821","7927","8032","8135","8245","8350","8457","8564","8681","8791","8891","8992","9093","9198","9302","9416","9516","9621","9726","9828","9928","10025","10127","10234","10333","10435"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_quarter_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 6::smallint, + False::boolean, + 0.0::real, + 4::integer, + 801.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0018, 0.0018, 0.0017333333}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"141","754","588"}'::int4[], + E'{"1","9","17","25","32","40","48","56","65","73","81","89","97","105","113","121","128","136","145","153","161","169","177","184","192","200","208","216","225","232","240","248","255","263","271","279","287","295","303","311","319","327","335","343","352","359","367","375","383","390","399","407","415","423","431","439","448","456","463","471","480","487","495","503","511","518","526","534","543","551","559","567","575","583","593","600","608","616","624","632","640","648","657","665","674","682","689","697","705","713","721","729","737","745","753","762","769","777","786","793","801"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 7::smallint, + False::boolean, + 0.0::real, + 4::integer, + 200.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0060666665, 0.006, 0.0058333334, 0.0057666665, 0.0056666667}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"1957","2088","1929","1907","2027"}'::int4[], + E'{"1900","1902","1904","1905","1908","1910","1912","1914","1916","1918","1920","1922","1924","1926","1928","1931","1933","1935","1937","1939","1940","1942","1944","1946","1948","1950","1952","1954","1956","1959","1961","1963","1965","1967","1969","1970","1972","1974","1976","1978","1980","1982","1984","1986","1988","1990","1992","1994","1996","1998","2000","2002","2004","2006","2008","2010","2012","2014","2016","2017","2019","2021","2023","2025","2028","2030","2032","2034","2036","2038","2040","2042","2044","2046","2048","2050","2052","2054","2055","2058","2059","2061","2064","2066","2068","2070","2072","2073","2075","2077","2079","2081","2083","2085","2087","2090","2092","2094","2096","2098","2099"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_dow +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 8::smallint, + False::boolean, + 0.0::real, + 4::integer, + 7.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.14473334, 0.14406666, 0.14326666, 0.14316666, 0.14263333, 0.14153333, 0.1406}'::real[], + '{0.13635832}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2","3","1","4","0","6","5"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_moy +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 9::smallint, + False::boolean, + 0.0::real, + 4::integer, + 12.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.085533336, 0.085433334, 0.0849, 0.0846, 0.084366664, 0.08426667, 0.08393333, 0.08316667, 0.0829, 0.082, 0.08183333, 0.07706667}'::real[], + '{0.088353634}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3","5","10","12","1","7","6","8","9","11","4","2"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_dom +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 10::smallint, + False::boolean, + 0.0::real, + 4::integer, + 31.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0351, 0.0338, 0.03376667, 0.033733334, 0.033733334, 0.033633333, 0.033466667, 0.033466667, 0.03313333, 0.0331, 0.032966666, 0.032966666, 0.032966666, 0.0329, 0.032866668, 0.032766666, 0.0327, 0.0326, 0.0325, 0.0325, 0.0324, 0.032366667, 0.032333333, 0.032266665, 0.032133333, 0.032, 0.031533334, 0.030833334, 0.0305, 0.0304, 0.018566666}'::real[], + '{0.03590256}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"13","23","22","1","24","5","7","16","26","21","14","17","28","20","6","2","9","10","12","19","18","8","15","27","4","25","11","30","29","3","31"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_qoy +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 11::smallint, + False::boolean, + 0.0::real, + 4::integer, + 4.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.25106665, 0.25043333, 0.2494, 0.2491}'::real[], + '{0.25712454}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2","3","4","1"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_fy_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 12::smallint, + False::boolean, + 0.0::real, + 4::integer, + 200.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0060666665, 0.006, 0.0058333334, 0.0057666665, 0.0056666667}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"1957","2088","1929","1907","2027"}'::int4[], + E'{"1900","1902","1904","1905","1908","1910","1912","1914","1916","1918","1920","1922","1924","1926","1928","1931","1933","1935","1937","1939","1940","1942","1944","1946","1948","1950","1952","1954","1956","1959","1961","1963","1965","1967","1969","1970","1972","1974","1976","1978","1980","1982","1984","1986","1988","1990","1992","1994","1996","1998","2000","2002","2004","2006","2008","2010","2012","2014","2016","2017","2019","2021","2023","2025","2028","2030","2032","2034","2036","2038","2040","2042","2044","2046","2048","2050","2052","2054","2055","2058","2059","2061","2064","2066","2068","2070","2072","2073","2075","2077","2079","2081","2083","2085","2087","2090","2092","2094","2096","2098","2099"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_fy_quarter_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 13::smallint, + False::boolean, + 0.0::real, + 4::integer, + 801.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0018, 0.0018, 0.0017333333}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"141","754","588"}'::int4[], + E'{"1","9","17","25","32","40","48","56","65","73","81","89","97","105","113","121","128","136","145","153","161","169","177","184","192","200","208","216","225","232","240","248","255","263","271","279","287","295","303","311","319","327","335","343","352","359","367","375","383","390","399","407","415","423","431","439","448","456","463","471","480","487","495","503","511","518","526","534","543","551","559","567","575","583","593","600","608","616","624","632","640","648","657","665","674","682","689","697","705","713","721","729","737","745","753","762","769","777","786","793","801"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_fy_week_seq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 14::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.14316417::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1","108","215","313","412","516","620","724","841","945","1046","1158","1257","1365","1473","1574","1674","1777","1878","1981","2081","2180","2287","2390","2496","2596","2700","2806","2914","3011","3114","3219","3319","3416","3523","3628","3729","3838","3946","4048","4150","4258","4357","4470","4582","4682","4790","4887","4987","5091","5199","5308","5416","5521","5628","5733","5846","5947","6047","6153","6260","6359","6462","6568","6666","6766","6873","6980","7085","7202","7304","7409","7512","7619","7727","7821","7927","8032","8135","8245","8350","8457","8564","8681","8791","8891","8992","9093","9198","9302","9416","9516","9621","9726","9828","9928","10025","10127","10234","10333","10435"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_day_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 15::smallint, + False::boolean, + 0.0::real, + 8::integer, + 7.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.14473334, 0.14406666, 0.14326666, 0.14316666, 0.14263333, 0.14153333, 0.1406}'::real[], + '{0.14524722}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"Tuesday","Wednesday","Monday","Thursday","Sunday","Saturday","Friday"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: date_dim, Attribute: d_quarter_name +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 16::smallint, + False::boolean, + 0.0::real, + 7::integer, + 800.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 98::oid, + 664::oid, + 664::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + '{0.0017666667, 0.0016666667, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016333334, 0.0016333334}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"2088Q2","1957Q2","1907Q3","1937Q1","2049Q2","2051Q2","2055Q2","2096Q4"}'::varchar[], + E'{"1900Q1","1902Q1","1904Q1","1905Q4","1908Q1","1910Q1","1912Q1","1913Q4","1916Q1","1918Q1","1920Q1","1922Q1","1924Q1","1926Q1","1928Q1","1930Q1","1931Q4","1933Q4","1935Q4","1938Q1","1940Q1","1941Q4","1943Q4","1945Q4","1947Q4","1949Q3","1951Q3","1953Q3","1955Q4","1957Q4","1959Q4","1961Q4","1963Q4","1965Q3","1967Q3","1969Q3","1971Q3","1973Q3","1975Q3","1977Q3","1979Q2","1981Q2","1983Q2","1985Q2","1987Q3","1989Q3","1991Q3","1993Q2","1995Q2","1997Q1","1999Q2","2001Q2","2003Q2","2005Q2","2007Q2","2009Q2","2011Q3","2013Q2","2015Q2","2017Q2","2019Q2","2021Q1","2023Q1","2025Q1","2027Q1","2028Q4","2030Q4","2032Q4","2034Q4","2037Q1","2039Q1","2041Q1","2043Q1","2045Q1","2046Q4","2049Q1","2051Q1","2053Q3","2055Q4","2057Q4","2059Q4","2061Q4","2063Q4","2065Q4","2068Q1","2070Q1","2072Q1","2073Q4","2075Q4","2077Q4","2079Q4","2081Q4","2083Q4","2085Q4","2087Q4","2090Q1","2091Q4","2093Q4","2095Q4","2098Q1","2099Q4"}'::varchar[], + NULL::varchar[], + NULL::varchar[], + NULL::varchar[]); + +-- +-- Table: date_dim, Attribute: d_holiday +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 17::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.9912, 0.0088}'::real[], + '{0.9816509}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); + +-- +-- Table: date_dim, Attribute: d_weekend +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 18::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.71786666, 0.28213334}'::real[], + '{0.59107685}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); + +-- +-- Table: date_dim, Attribute: d_following_holiday +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 19::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.9918333, 0.008166667}'::real[], + '{0.98435473}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); + +-- +-- Table: date_dim, Attribute: d_first_dom +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 20::smallint, + False::boolean, + 0.0::real, + 4::integer, + 2400.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00073333335, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666}'::real[], + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + E'{"2444818","2468620","2421046","2423786","2425856","2428566","2431822","2433099","2437878","2443661","2450144","2453097"}'::int4[], + E'{"2415021","2415751","2416481","2417181","2417881","2418581","2419311","2420012","2420833","2421626","2422294","2423087","2423817","2424576","2425338","2426068","2426768","2427470","2428169","2428959","2429630","2430330","2431091","2431791","2432583","2433314","2434044","2434775","2435565","2436174","2436904","2437635","2438396","2439066","2439796","2440527","2441226","2441957","2442748","2443449","2444209","2445002","2445732","2446491","2447253","2447983","2448683","2449413","2450084","2450815","2451576","2452335","2453127","2453888","2454619","2455379","2456141","2456810","2457510","2458271","2458971","2459671","2460402","2461132","2461803","2462503","2463264","2463995","2464725","2465576","2466276","2466976","2467707","2468437","2469229","2469898","2470629","2471359","2472059","2472850","2473551","2474311","2475073","2475864","2476626","2477356","2478025","2478755","2479456","2480186","2480978","2481677","2482378","2483138","2483839","2484508","2485208","2485910","2486669","2487340","2488039"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_last_dom +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 21::smallint, + False::boolean, + 0.0::real, + 4::integer, + 2400.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00073333335, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666, 0.00066666666}'::real[], + NULL::real[], + '{0.99998605}'::real[], + NULL::real[], + NULL::real[], + E'{"2445029","2468892","2421227","2423785","2426098","2428596","2431821","2433279","2438089","2443811","2450203","2453187"}'::int4[], + E'{"2415020","2415930","2416661","2417332","2418061","2418734","2419522","2420195","2420984","2421834","2422505","2423236","2424027","2424756","2425489","2426279","2426889","2427619","2428350","2429139","2429810","2430481","2431271","2432002","2432732","2433463","2434194","2434983","2435715","2436385","2437055","2437786","2438576","2439244","2439977","2440705","2441437","2442166","2442899","2443627","2444360","2445151","2445881","2446671","2447404","2448132","2448864","2449534","2450265","2450995","2451786","2452518","2453308","2454039","2454770","2455559","2456293","2456961","2457691","2458422","2459152","2459882","2460553","2461284","2461953","2462683","2463414","2464203","2464935","2465727","2466457","2467128","2467858","2468648","2469380","2470050","2470780","2471511","2472240","2473031","2473702","2474492","2475224","2476016","2476807","2477477","2478206","2478935","2479607","2480337","2481130","2481857","2482529","2483318","2483990","2484660","2485389","2486059","2486790","2487519","2488372"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_same_day_ly +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 22::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.9988364::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2414662","2415406","2416155","2416846","2417538","2418265","2418990","2419723","2420543","2421270","2421972","2422760","2423452","2424211","2424965","2425669","2426369","2427091","2427796","2428521","2429221","2429916","2430665","2431382","2432122","2432823","2433554","2434295","2435051","2435731","2436451","2437186","2437889","2438567","2439312","2440049","2440756","2441519","2442278","2442986","2443701","2444456","2445155","2445940","2446724","2447426","2448183","2448865","2449565","2450287","2451043","2451810","2452563","2453298","2454047","2454787","2455577","2456285","2456984","2457722","2458470","2459166","2459890","2460630","2461312","2462016","2462761","2463515","2464248","2465067","2465781","2466519","2467240","2467988","2468743","2469399","2470144","2470877","2471595","2472367","2473100","2473855","2474598","2475417","2476187","2476889","2477598","2478301","2479040","2479767","2480562","2481265","2482001","2482736","2483451","2484148","2484826","2485540","2486290","2486986","2487701"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_same_day_lq +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 23::smallint, + False::boolean, + 0.0::real, + 4::integer, + -0.99268985::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"2414935","2415679","2416428","2417119","2417811","2418538","2419263","2419996","2420816","2421543","2422245","2423033","2423725","2424484","2425239","2425942","2426642","2427364","2428069","2428794","2429494","2430189","2430938","2431655","2432395","2433097","2433828","2434568","2435324","2436005","2436725","2437460","2438163","2438842","2439586","2440323","2441031","2441793","2442552","2443260","2443975","2444730","2445429","2446214","2446997","2447700","2448456","2449139","2449839","2450561","2451317","2452084","2452836","2453571","2454320","2455060","2455850","2456558","2457257","2457995","2458743","2459439","2460163","2460903","2461586","2462290","2463035","2463788","2464521","2465340","2466054","2466792","2467513","2468261","2469016","2469672","2470417","2471150","2471868","2472640","2473373","2474128","2474871","2475692","2476462","2477164","2477873","2478576","2479315","2480042","2480837","2481540","2482276","2483011","2483726","2484423","2485099","2485813","2486563","2487259","2487974"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: date_dim, Attribute: d_current_day +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=24; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 24::smallint, + False::boolean, + 0.0::real, + 2::integer, + 1.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{1.0}'::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); + +-- +-- Table: date_dim, Attribute: d_current_week +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=25; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 25::smallint, + False::boolean, + 0.0::real, + 2::integer, + 1.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{1.0}'::real[], + '{1.0}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); + +-- +-- Table: date_dim, Attribute: d_current_month +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=26; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 26::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.9996, 0.0004}'::real[], + '{0.9994385}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); + +-- +-- Table: date_dim, Attribute: d_current_quarter +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=27; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 27::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.99873334, 0.0012666667}'::real[], + '{0.9982279}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); + +-- +-- Table: date_dim, Attribute: d_current_year +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.date_dim'::regclass AND staattnum=28; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.date_dim'::regclass, + 28::smallint, + False::boolean, + 0.0::real, + 2::integer, + 2.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1054::oid, + 1058::oid, + 0::oid, + 0::oid, + 0::oid, + 100::oid, + 100::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.99543333, 0.0045666667}'::real[], + '{0.99365747}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"N","Y"}'::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[], + NULL::bpchar[]); + +-- +-- Table: store_sales, Attribute: ss_sold_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 1::smallint, + False::boolean, + 0.044::real, + 4::integer, + 1823.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0015333333, 0.0015, 0.0014666667, 0.0014666667, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011}'::real[], + NULL::real[], + '{-0.0022345192}'::real[], + NULL::real[], + NULL::real[], + E'{"2451534","2452228","2451129","2452240","2451139","2451161","2451546","2452258","2452621","2452589","2452600","2452625","2451137","2451148","2451181","2451896","2452251","2452260","2451178","2451528","2451904","2451909","2452242","2452250","2452628","2452642","2451121","2451134","2451174","2451496","2451864","2451872","2451879","2451910","2452257","2452271","2452592","2451112","2451149","2451525","2451865","2452232","2452277","2452598","2452640","2451127","2451136","2451153","2451177","2451505","2451541","2451851","2451862","2452230","2452238","2452266","2452607","2452609","2452627","2452641","2451142","2451158","2451160","2451491","2451868","2451885","2451887","2452248","2452601","2452606","2452634","2451123","2451125","2451133","2451138","2451144","2451506","2451509","2451529","2451884","2451898","2452219","2452221","2452225","2452246","2452256","2452274","2452597","2452602","2452614","2452623","2451126","2451141","2451154","2451493","2451494","2451497","2451513","2451516","2451526"}'::int4[], + E'{"2450816","2450843","2450874","2450900","2450926","2450953","2450982","2451010","2451033","2451045","2451057","2451070","2451082","2451095","2451107","2451119","2451143","2451157","2451169","2451184","2451213","2451241","2451267","2451294","2451322","2451349","2451372","2451398","2451410","2451423","2451435","2451448","2451460","2451472","2451485","2451499","2451511","2451522","2451536","2451545","2451572","2451600","2451626","2451650","2451679","2451703","2451734","2451760","2451772","2451783","2451795","2451806","2451818","2451830","2451843","2451855","2451867","2451877","2451890","2451901","2451916","2451945","2451974","2451999","2452025","2452053","2452081","2452109","2452129","2452140","2452151","2452163","2452173","2452185","2452195","2452207","2452218","2452233","2452245","2452262","2452275","2452301","2452329","2452358","2452385","2452413","2452437","2452464","2452492","2452504","2452516","2452528","2452540","2452553","2452566","2452578","2452587","2452604","2452617","2452630","2452639"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_sold_time_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 2::smallint, + False::boolean, + 0.04476667::real, + 4::integer, + 42441.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00023333334}'::real[], + NULL::real[], + '{-0.0029273503}'::real[], + NULL::real[], + NULL::real[], + E'{"53826"}'::int4[], + E'{"28802","29544","30512","31386","32305","32816","33250","33722","34146","34599","35052","35511","35964","36268","36566","36863","37172","37485","37828","38121","38401","38684","38983","39275","39560","40075","40557","41068","41530","42041","42524","43017","43474","43957","44423","44910","45389","45848","46343","46755","47169","47614","48001","48403","48805","49181","49610","50080","50477","50759","51068","51365","51655","51931","52218","52524","52799","53101","53418","53732","54105","54884","55780","56713","57597","58420","59372","60285","61221","61506","61795","62076","62374","62681","62967","63254","63580","63859","64159","64441","64733","65144","65590","66065","66523","66923","67434","67869","68271","68722","69211","69656","70119","70604","71096","71498","71944","72815","73678","74590","75597"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_item_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 3::smallint, + False::boolean, + 0.0::real, + 4::integer, + 25013.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0003, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334}'::real[], + NULL::real[], + '{0.000308136}'::real[], + NULL::real[], + NULL::real[], + E'{"18140","1183","1921","10183","13837","16333","22268","26593","27325","2035","3793","4081","4525","5833","8575","9103","9211","9703","10507","11761","12685","13513","14792","15871","15907","15998","17095","17455","19111","20875","21085","21457","22741","24703","24817","26851","26971","27337","27709","27919"}'::int4[], + E'{"1","260","575","888","1162","1441","1707","1975","2264","2523","2847","3115","3368","3650","3951","4214","4523","4827","5071","5329","5587","5894","6181","6496","6776","7024","7312","7591","7855","8113","8398","8682","8957","9245","9530","9823","10114","10405","10699","10959","11247","11525","11781","12061","12360","12613","12889","13190","13453","13731","14017","14294","14575","14877","15152","15457","15733","16015","16291","16579","16861","17155","17437","17702","17984","18247","18519","18783","19092","19380","19642","19943","20221","20467","20723","20995","21311","21596","21870","22136","22427","22700","22970","23261","23533","23805","24082","24344","24628","24932","25220","25519","25800","26063","26331","26591","26879","27151","27422","27705","27999"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 4::smallint, + False::boolean, + 0.043866668::real, + 4::integer, + 1787614.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.002228295}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"17","21786","42607","63355","81931","104851","124188","143682","164679","186368","206598","227797","248026","266122","287862","306345","328795","349339","369849","390012","413705","437205","457764","479231","501632","523614","545267","564653","584588","603322","628035","648054","668479","689551","709515","730333","751340","771680","793540","814237","835667","857070","877179","899789","920597","942338","962762","984964","1006607","1027347","1048659","1070611","1092247","1111106","1131352","1152543","1173197","1192658","1215327","1237528","1259725","1279865","1300200","1324729","1344982","1367029","1388243","1408781","1430858","1451533","1472783","1491853","1512116","1533678","1554248","1577279","1600025","1621228","1641577","1663202","1683219","1704339","1723327","1742744","1763526","1783848","1805196","1826090","1845634","1865356","1885579","1905861","1925869","1946542","1969323","1991449","2012218","2035047","2058343","2079610","2099931"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 5::smallint, + False::boolean, + 0.044433333::real, + 4::integer, + 1889709.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.00950842}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"30","17849","37904","56865","76186","96917","115542","134186","152099","172680","192783","211817","229921","248171","269276","287913","306855","326795","345207","365388","382970","404387","425118","443738","463882","483064","501977","520761","538035","556646","576673","595274","615470","633068","652437","671351","689763","709263","728426","748174","767474","786428","805372","823760","843936","863306","880648","898664","917543","936304","956226","976161","994176","1014253","1033333","1051646","1070542","1089363","1107670","1128460","1147427","1166875","1187090","1205515","1224744","1244031","1263305","1283771","1301649","1319446","1337051","1356966","1373991","1393391","1412686","1433469","1453024","1470147","1488228","1507316","1525606","1543945","1563428","1582932","1601688","1622584","1644497","1663783","1684160","1704534","1724056","1744635","1764898","1783571","1802036","1823303","1844256","1864851","1883445","1902230","1920718"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 6::smallint, + False::boolean, + 0.0444::real, + 4::integer, + 7203.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.0004}'::real[], + NULL::real[], + '{0.0009649638}'::real[], + NULL::real[], + NULL::real[], + E'{"3964","3629"}'::int4[], + E'{"1","77","150","224","302","367","433","498","566","636","710","784","865","941","1013","1088","1170","1244","1323","1388","1461","1536","1606","1672","1735","1809","1876","1952","2024","2098","2172","2244","2307","2379","2456","2534","2602","2673","2742","2818","2892","2971","3037","3111","3186","3257","3327","3396","3472","3543","3613","3687","3768","3845","3910","3981","4050","4116","4188","4251","4325","4393","4463","4541","4613","4685","4755","4830","4903","4980","5052","5126","5195","5262","5335","5402","5469","5534","5604","5673","5747","5823","5891","5960","6032","6112","6185","6259","6335","6407","6479","6552","6629","6696","6762","6836","6906","6982","7054","7128","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 7::smallint, + False::boolean, + 0.0441::real, + 4::integer, + 1054173.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.009495346}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"24","10492","20174","30656","40366","50491","61387","71217","82320","93176","103530","113999","124922","135328","145700","156238","168283","179107","189968","200308","210858","220931","230791","240825","252093","261999","273446","284421","294475","304990","315199","325963","336804","346964","358483","369478","379508","390126","400826","411839","423548","433723","444375","455042","465928","476227","487109","496816","507138","516971","528312","538979","549252","559578","569918","580340","590219","600402","612301","623316","633219","642905","653631","665000","674723","685655","695157","706546","716090","726191","735744","745583","756508","767077","776705","787088","798590","810484","820976","832448","843248","854009","864628","873989","883994","894860","905009","916085","924744","935185","945700","956390","965553","975624","987328","997741","1008137","1018620","1029054","1039248","1049982"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_store_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 8::smallint, + False::boolean, + 0.045766667::real, + 4::integer, + 35.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.029033333, 0.0287, 0.028266666, 0.0282, 0.028066667, 0.028, 0.027966667, 0.027833333, 0.027766667, 0.027666667, 0.027666667, 0.0276, 0.0276, 0.0275, 0.027466666, 0.027433334, 0.027433334, 0.027366666, 0.027366666, 0.0273, 0.027233334, 0.027133333, 0.027066667, 0.027033333, 0.0269, 0.0269, 0.026833333, 0.026733333, 0.0267, 0.026633333, 0.026333334, 0.026066666, 0.026066666, 0.025666667, 0.0247}'::real[], + '{0.025343372}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"19","34","2","61","62","7","32","13","52","4","38","55","56","28","49","1","37","16","67","50","31","64","22","68","20","58","26","46","14","10","25","8","43","40","44"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_promo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 9::smallint, + False::boolean, + 0.04413333::real, + 4::integer, + 357.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0036666666, 0.0036666666, 0.0036333334, 0.0036333334, 0.0035333333, 0.0035, 0.0033666666, 0.0033666666}'::real[], + NULL::real[], + '{0.009066247}'::real[], + NULL::real[], + NULL::real[], + E'{"37","139","81","228","350","223","293","304"}'::int4[], + E'{"1","4","7","11","14","18","21","25","28","32","35","40","43","47","50","54","57","61","64","68","71","75","78","83","86","89","93","96","100","103","107","110","114","118","121","124","128","132","136","140","143","147","150","153","157","160","163","166","170","174","177","180","183","187","190","194","197","201","204","208","211","214","218","221","226","230","234","237","241","245","249","252","256","259","262","266","270","274","277","280","284","288","291","296","300","303","308","311","315","319","322","326","329","332","336","339","343","346","351","354","357"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_ticket_number +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 10::smallint, + False::boolean, + 0.0::real, + 8::integer, + 135837840.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 412::oid, + 412::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.06078869}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"813","1375913","2727072","3857212","5016369","6156850","7386542","8690070","9789582","11044399","12265523","13510184","14717978","15785339","16975428","18197314","19442297","20772509","21903183","23100195","24331207","25452464","26678265","27922018","29143270","30353305","31671176","32953618","34109365","35253703","36385377","37447554","38717221","39999948","41154706","42417922","43652601","44968753","46342094","47459202","48642561","49683656","50998261","52288399","53487733","54680281","55833024","57017267","58237604","59472084","60696465","61996614","63179509","64401202","65651723","66926244","68011538","69269328","70341852","71528693","72651930","73713093","74849544","75928064","77033905","78162650","79324991","80585670","81761102","82828934","84032244","85334532","86494728","87598137","88860063","89922519","91069374","92276218","93495454","94722691","95959052","97146341","98399034","99566170","100766327","101898400","103223735","104414548","105602699","106825065","108029779","109174799","110420663","111591894","112817588","113975952","115181211","116399324","117672963","118888721","119999864"}'::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[]); + +-- +-- Table: store_sales, Attribute: ss_quantity +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 11::smallint, + False::boolean, + 0.045466665::real, + 4::integer, + 100.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.010833333, 0.010766666, 0.010766666, 0.010766666, 0.010633334, 0.0106, 0.010566667, 0.0104, 0.0104, 0.0104, 0.0104, 0.010366667, 0.010366667, 0.010366667, 0.0103, 0.010266666, 0.0101666665, 0.0101333335, 0.0101333335, 0.0101, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.01, 0.01, 0.009966667, 0.009966667, 0.009933333, 0.0099, 0.009866667, 0.009833333, 0.0098, 0.009766666, 0.009766666, 0.009766666, 0.009766666, 0.009733333, 0.009733333, 0.009733333, 0.009733333, 0.0097, 0.0097, 0.009666666, 0.009666666, 0.009666666, 0.009633333, 0.0096, 0.0096, 0.0096, 0.0096, 0.009566667, 0.009533334, 0.009533334, 0.0095, 0.0095, 0.009466667, 0.009433334, 0.0094, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009366667, 0.009333333, 0.009266667, 0.0092, 0.0092, 0.0092, 0.009133333, 0.009133333, 0.009133333, 0.009133333, 0.0091, 0.0091, 0.0091, 0.0091, 0.0090666665, 0.0090666665, 0.0090333335, 0.009, 0.008966667, 0.008933334, 0.0089, 0.0089, 0.008833333, 0.008666666, 0.008633333, 0.0086, 0.008566666, 0.0084, 0.0084, 0.008366667, 0.008366667, 0.008233333, 0.008233333, 0.0081, 0.0079333335}'::real[], + '{0.0045824465}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"29","7","10","21","27","92","86","5","55","71","81","33","79","93","6","99","40","39","57","32","53","73","84","97","85","90","38","91","12","69","76","41","23","22","37","45","63","44","61","88","100","20","98","26","49","67","14","18","78","87","95","3","31","46","15","36","58","42","64","11","13","50","59","60","68","70","19","54","25","35","66","24","52","56","83","4","16","47","74","80","96","34","51","75","82","30","77","65","28","1","48","9","2","72","43","94","17","89","62","8"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: store_sales, Attribute: ss_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 12::smallint, + False::boolean, + 0.0435::real, + 6::integer, + 9909.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.004772207}'::real[], + NULL::real[], + NULL::real[], + E'{"32.94","43.22","71.68","76.26","91.35","96.72"}'::numeric[], + E'{"1.00","1.97","3.01","4.10","5.06","6.04","7.00","8.01","9.01","9.96","10.88","11.91","12.82","13.84","14.95","15.91","16.85","17.91","18.92","19.94","20.89","22.01","23.08","24.06","25.02","26.03","26.96","27.89","28.91","29.93","30.90","31.93","32.96","33.91","34.98","35.96","36.94","37.90","38.81","39.70","40.61","41.67","42.74","43.73","44.66","45.63","46.59","47.53","48.55","49.54","50.48","51.56","52.62","53.42","54.39","55.28","56.33","57.36","58.37","59.23","60.15","61.15","62.19","63.21","64.16","65.22","66.31","67.27","68.29","69.31","70.23","71.24","72.24","73.25","74.22","75.12","76.09","77.07","78.06","79.07","80.05","81.10","82.08","83.09","84.06","85.12","86.17","87.18","88.23","89.18","90.13","91.20","92.19","93.19","94.14","95.07","95.98","96.91","97.92","98.92","100.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 13::smallint, + False::boolean, + 0.0447::real, + 6::integer, + 16808.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.0003, 0.0003, 0.0003, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667, 0.00026666667}'::real[], + NULL::real[], + '{-0.00067186705}'::real[], + NULL::real[], + NULL::real[], + E'{"27.24","7.02","96.36","105.63","17.20","33.52","39.04","40.68","48.96","59.81","68.69","76.24","87.92","99.16"}'::numeric[], + E'{"1.00","2.89","4.28","5.87","7.42","8.80","10.10","11.63","12.99","14.42","15.98","17.40","18.87","20.21","21.63","23.04","24.51","25.90","27.36","28.81","30.36","31.81","33.34","34.72","36.09","37.52","38.95","40.43","41.88","43.30","44.81","46.40","47.73","49.18","50.55","52.07","53.40","54.73","56.17","57.55","58.87","60.19","61.77","63.07","64.57","66.02","67.39","68.92","70.40","72.03","73.45","74.87","76.26","77.73","79.03","80.35","81.92","83.32","84.72","86.21","87.59","88.96","90.45","91.78","93.16","94.66","96.19","97.64","98.92","100.52","101.88","103.28","104.72","106.11","107.69","109.21","110.85","112.64","114.53","116.30","118.00","119.87","121.88","123.90","126.04","128.34","130.66","133.07","135.58","137.97","140.53","143.39","146.70","149.95","153.65","157.50","161.61","166.70","172.67","180.23","199.18"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 14::smallint, + False::boolean, + 0.043866668::real, + 6::integer, + 11406.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.008633333, 0.00063333334, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667}'::real[], + NULL::real[], + '{0.00037045707}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","5.56","1.37","1.33","1.74","3.53","1.67","3.48","0.51","5.54","6.41","0.82","1.50","1.72","1.83","1.99","2.02","2.25","3.32","3.84","5.66","12.86","0.97","0.98","1.28","1.62","1.65","1.90","2.00","3.08","4.40","5.92","8.40","8.74","11.16","15.51","0.44","0.57","0.65","0.68","0.75","0.94","1.17","1.20","1.22","1.29","1.32","1.35","1.36","2.08","2.14","2.50","2.78","2.82","2.83","3.09","3.64","3.73","3.82","4.51","4.55","5.22","5.43","6.63","6.69","6.90","7.61","7.63","8.09","9.03","9.09","9.44","9.63","11.42","15.16","0.11","0.21","0.60","0.63","0.66","0.93","1.06","1.10","1.16","1.18","1.25","1.42","1.47","1.76","2.09","2.16","2.18","2.60","2.68","2.74","3.11","3.18","3.26","3.27","3.31"}'::numeric[], + E'{"0.01","0.50","1.00","1.49","2.01","2.44","2.89","3.38","3.80","4.27","4.73","5.13","5.65","6.12","6.56","7.05","7.48","8.02","8.51","9.01","9.57","10.13","10.69","11.20","11.77","12.34","12.88","13.44","14.06","14.61","15.26","15.88","16.54","17.11","17.71","18.35","19.04","19.73","20.46","21.14","21.86","22.67","23.36","24.08","24.87","25.77","26.56","27.30","28.12","28.99","29.85","30.74","31.71","32.63","33.58","34.48","35.42","36.45","37.56","38.53","39.65","40.76","41.86","43.05","44.18","45.37","46.57","47.77","49.08","50.38","51.70","53.17","54.47","55.96","57.34","58.84","60.52","62.13","63.82","65.63","67.20","69.11","71.20","73.12","75.38","77.56","79.86","82.27","85.02","87.88","90.64","93.54","97.22","101.21","105.84","110.61","116.50","123.46","132.30","145.64","193.12"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_ext_discount_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 15::smallint, + False::boolean, + 0.045333333::real, + 3::integer, + 6760.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.7661}'::real[], + NULL::real[], + '{0.6438912}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","1.34","3.72","6.09","8.37","10.99","14.04","16.95","19.44","22.34","24.81","28.43","32.34","35.35","39.39","44.25","49.00","54.54","59.98","65.63","71.63","78.32","84.28","90.37","96.62","104.19","111.32","118.10","126.42","136.18","143.96","153.17","162.16","171.42","182.95","192.33","201.85","211.36","222.74","236.09","252.09","266.81","278.33","292.76","310.46","324.68","340.74","359.05","380.26","398.53","416.30","434.21","455.13","474.14","491.53","516.67","538.59","556.85","586.81","610.95","636.53","667.62","692.38","723.55","756.71","796.95","834.72","868.00","906.95","948.96","993.70","1033.87","1089.17","1132.81","1184.95","1228.29","1281.16","1347.98","1408.84","1480.92","1572.04","1643.21","1731.83","1830.90","1925.89","2022.22","2130.03","2281.99","2428.33","2573.26","2717.71","2913.34","3146.60","3438.96","3740.97","4126.94","4666.03","5274.03","6096.32","7082.14","12922.81"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_ext_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 16::smallint, + False::boolean, + 0.045333333::real, + 6::integer, + 119811.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0087, 0.00026666667, 0.00023333334, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.00332316}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","25.20","10.92","36.96","469.20"}'::numeric[], + E'{"0.27","8.61","16.80","24.36","33.50","42.56","50.49","61.05","71.40","82.38","93.84","106.14","118.17","131.32","144.00","157.78","172.64","188.16","203.84","220.80","236.84","255.08","271.45","288.48","308.34","327.28","345.73","367.84","387.02","408.00","432.63","453.75","480.22","504.24","530.66","558.80","588.24","616.30","644.76","674.50","704.16","734.58","766.92","802.75","838.24","871.04","910.52","945.76","983.29","1024.86","1063.30","1102.08","1147.38","1190.70","1237.47","1284.12","1331.00","1387.50","1440.24","1503.28","1554.80","1610.95","1676.49","1742.20","1808.00","1867.45","1933.08","2001.48","2087.67","2170.21","2251.53","2342.40","2428.20","2526.36","2617.12","2724.48","2827.24","2944.32","3046.35","3173.12","3294.25","3442.56","3588.09","3734.64","3902.60","4072.80","4240.57","4428.00","4642.32","4906.57","5147.50","5431.50","5743.00","6100.32","6469.35","6901.32","7510.60","8168.50","9050.41","10628.04","17738.88"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_ext_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 17::smallint, + False::boolean, + 0.044966668::real, + 6::integer, + 207111.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0051949597}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.08","33.20","56.42","79.36","97.98","121.59","144.80","167.70","191.00","218.46","244.03","270.55","299.76","327.80","355.32","384.30","414.52","442.20","475.83","508.95","544.25","578.25","612.36","650.43","688.35","727.92","765.38","803.60","837.20","874.56","916.09","960.94","1003.45","1044.66","1092.25","1140.48","1185.60","1238.61","1289.29","1337.70","1390.55","1444.40","1496.49","1548.16","1605.87","1662.12","1713.60","1764.63","1817.76","1875.30","1937.05","1999.50","2060.11","2128.60","2196.21","2259.76","2326.32","2396.25","2465.40","2539.24","2614.56","2685.00","2761.38","2840.04","2925.35","3015.87","3097.05","3179.52","3263.77","3343.96","3431.34","3528.32","3624.37","3716.85","3814.10","3920.27","4022.88","4127.23","4243.63","4356.48","4476.15","4597.05","4738.23","4865.40","5000.80","5143.91","5291.12","5444.00","5603.10","5773.32","5947.83","6145.55","6364.80","6594.77","6830.75","7087.20","7404.30","7745.95","8124.04","8664.15","9992.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_ext_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 18::smallint, + False::boolean, + 0.044166666::real, + 7::integer, + 281020.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.005409235}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.37","48.18","81.41","111.00","143.56","176.12","208.48","244.00","277.10","312.00","354.24","397.50","432.81","473.83","514.15","559.74","605.17","653.04","703.08","749.70","793.80","843.72","897.00","950.04","1005.84","1059.20","1111.86","1168.53","1220.78","1273.14","1335.78","1395.80","1464.48","1525.11","1588.62","1662.60","1733.62","1808.00","1876.80","1943.17","2017.47","2095.83","2176.23","2255.84","2332.80","2416.80","2500.54","2583.36","2660.40","2751.20","2841.54","2936.19","3028.06","3126.61","3219.72","3316.14","3407.04","3508.20","3613.50","3714.04","3820.32","3927.70","4045.88","4164.11","4286.55","4404.60","4526.64","4639.62","4772.80","4907.30","5047.20","5174.40","5313.60","5456.64","5608.32","5770.80","5925.96","6098.88","6277.32","6458.50","6637.23","6822.90","7017.40","7216.44","7423.52","7672.96","7894.12","8146.60","8427.82","8709.95","8969.40","9303.91","9642.60","10018.92","10424.34","10892.97","11484.75","12242.88","13182.40","14456.88","19415.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_ext_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 19::smallint, + False::boolean, + 0.0449::real, + 6::integer, + 18471.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.10456666, 0.0009, 0.00073333335, 0.00073333335, 0.0007, 0.0007, 0.00066666666, 0.00066666666, 0.00066666666, 0.00063333334, 0.00063333334, 0.00063333334, 0.00063333334, 0.00063333334, 0.0006, 0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.014879999}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","0.01","0.17","0.65","0.13","0.29","0.05","0.08","0.36","0.10","0.27","0.28","0.40","0.45","0.19","0.30","2.24","0.15","0.18","0.21","0.41","3.94","0.14","0.46","0.47","0.52","0.88","1.04","1.51","1.66","0.02","0.12","0.16","0.20","0.25","0.34","0.77","0.96","0.98","1.29","1.92","3.80","0.11","0.32","0.42","0.43","0.51","0.68","0.99","1.05","1.22","1.31","1.36","1.54","1.80","1.90","2.04","2.10","3.32","0.09","0.22","0.44","0.50","0.58","0.66","0.94","1.13","1.15","1.68","2.74","3.78","4.08","8.96","0.04","0.07","0.23","0.33","0.37","0.59","0.69","0.78","0.81","0.82","0.85","0.91","1.08","1.12","1.18","1.26","1.32","1.35","1.50","1.59","1.64","1.76","1.79","2.26","2.83","3.35","3.43"}'::numeric[], + E'{"0.03","0.74","1.20","1.60","2.01","2.39","2.72","3.10","3.50","3.90","4.30","4.72","5.16","5.57","6.04","6.50","7.03","7.58","8.18","8.74","9.36","9.98","10.62","11.27","12.01","12.69","13.39","14.17","14.94","15.73","16.52","17.47","18.36","19.22","20.18","21.05","22.15","23.17","24.17","25.34","26.50","27.68","28.91","30.07","31.25","32.68","34.20","35.59","37.26","38.92","40.45","42.33","44.13","45.79","47.82","49.94","51.93","54.20","56.44","58.78","61.05","63.96","66.70","69.47","72.63","75.56","78.68","82.11","85.62","89.37","92.68","96.79","100.78","105.67","110.09","114.97","120.82","125.97","132.10","138.64","145.86","152.49","159.87","168.58","177.12","186.59","196.23","208.25","220.55","235.45","251.96","267.62","288.25","309.58","335.43","364.88","405.05","457.89","534.84","648.41","1390.48"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_coupon_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 20::smallint, + False::boolean, + 0.045333333::real, + 3::integer, + 6760.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.7661}'::real[], + NULL::real[], + '{0.6438912}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","1.34","3.72","6.09","8.37","10.99","14.04","16.95","19.44","22.34","24.81","28.43","32.34","35.35","39.39","44.25","49.00","54.54","59.98","65.63","71.63","78.32","84.28","90.37","96.62","104.19","111.32","118.10","126.42","136.18","143.96","153.17","162.16","171.42","182.95","192.33","201.85","211.36","222.74","236.09","252.09","266.81","278.33","292.76","310.46","324.68","340.74","359.05","380.26","398.53","416.30","434.21","455.13","474.14","491.53","516.67","538.59","556.85","586.81","610.95","636.53","667.62","692.38","723.55","756.71","796.95","834.72","868.00","906.95","948.96","993.70","1033.87","1089.17","1132.81","1184.95","1228.29","1281.16","1347.98","1408.84","1480.92","1572.04","1643.21","1731.83","1830.90","1925.89","2022.22","2130.03","2281.99","2428.33","2573.26","2717.71","2913.34","3146.60","3438.96","3740.97","4126.94","4666.03","5274.03","6096.32","7082.14","12922.81"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_net_paid +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 21::smallint, + False::boolean, + 0.045033332::real, + 6::integer, + 130231.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.010733333}'::real[], + NULL::real[], + '{-0.003218649}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.04","5.14","10.18","16.30","21.88","28.60","36.24","44.10","51.49","60.06","68.70","77.69","87.72","97.58","108.51","119.68","131.13","142.74","154.70","167.30","180.87","194.66","210.49","225.68","242.00","258.44","273.14","288.96","307.68","325.44","342.37","363.00","380.16","400.43","423.00","444.15","468.72","492.00","519.68","544.00","572.40","600.96","629.30","656.70","686.28","718.06","749.00","782.88","817.80","854.72","893.10","930.83","967.59","1008.80","1050.42","1093.00","1135.33","1181.62","1229.40","1280.52","1326.28","1383.48","1439.88","1500.29","1556.02","1618.37","1682.20","1751.04","1818.15","1884.06","1955.88","2033.45","2126.88","2215.62","2305.35","2400.96","2495.65","2607.80","2725.97","2838.84","2961.00","3081.25","3215.94","3363.36","3525.20","3685.50","3870.99","4065.12","4264.36","4472.25","4715.82","5020.00","5297.49","5657.44","6056.08","6494.87","7012.56","7766.28","8648.46","10058.40","17738.88"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_net_paid_inc_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 22::smallint, + False::boolean, + 0.04476667::real, + 6::integer, + 216373.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.010666667, 0.0002}'::real[], + NULL::real[], + '{-0.0055286656}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","32.50"}'::numeric[], + E'{"0.04","5.34","10.64","16.84","22.78","29.76","37.54","45.88","53.55","63.01","71.53","81.22","91.04","101.48","113.40","124.84","136.79","148.47","160.74","174.09","189.27","202.53","219.10","235.75","252.63","270.30","284.97","302.27","321.39","339.01","359.73","379.11","399.51","420.01","443.22","467.14","491.68","517.50","543.21","569.64","598.99","628.01","657.79","689.15","718.44","753.62","785.05","818.47","856.64","895.72","934.06","972.23","1014.07","1056.37","1098.32","1143.65","1191.49","1240.73","1292.04","1341.11","1393.32","1450.62","1510.08","1566.98","1629.98","1689.68","1763.67","1840.23","1903.93","1975.54","2049.22","2126.92","2226.03","2316.79","2410.56","2506.52","2616.49","2727.26","2849.57","2970.38","3085.20","3217.68","3363.97","3517.49","3689.45","3858.39","4052.56","4254.30","4465.59","4690.92","4962.17","5234.70","5542.48","5925.61","6319.65","6827.42","7372.02","8128.19","9079.02","10544.85","18803.21"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: store_sales, Attribute: ss_net_profit +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.store_sales'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.store_sales'::regclass, + 23::smallint, + False::boolean, + 0.043933332::real, + 6::integer, + 164410.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00036666667, 0.0002}'::real[], + NULL::real[], + '{0.0071685645}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","-86.40"}'::numeric[], + E'{"-9756.88","-6515.41","-5668.87","-5123.34","-4724.97","-4368.00","-4064.06","-3808.62","-3576.47","-3373.46","-3174.31","-3012.09","-2859.44","-2725.70","-2593.63","-2458.24","-2337.30","-2214.00","-2107.00","-2001.96","-1904.70","-1816.40","-1727.86","-1642.55","-1561.33","-1494.48","-1420.30","-1356.48","-1294.21","-1224.96","-1162.20","-1101.58","-1048.46","-992.62","-942.72","-898.95","-853.76","-806.47","-765.12","-727.68","-693.00","-655.50","-623.42","-589.44","-557.05","-526.40","-495.72","-462.77","-435.73","-406.64","-378.40","-353.30","-328.97","-301.50","-278.13","-255.75","-233.87","-214.09","-195.96","-178.34","-162.31","-147.92","-132.24","-117.78","-104.00","-89.56","-76.54","-65.12","-54.20","-43.00","-32.46","-23.28","-14.28","-7.00","0.39","9.24","20.91","35.88","53.56","74.70","99.36","127.98","158.51","193.25","233.24","281.96","341.00","404.32","478.86","563.93","661.20","773.80","891.78","1050.06","1209.00","1410.30","1700.48","2034.00","2537.48","3429.36","8262.72"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_sold_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=1; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 1::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 1823.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0016, 0.0016, 0.0015333333, 0.0015, 0.0015, 0.0015, 0.0014666667, 0.0014666667, 0.0014333334, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013666666, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013333333, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0013, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011666666}'::real[], + NULL::real[], + '{-0.0030525422}'::real[], + NULL::real[], + NULL::real[], + E'{"2451524","2452255","2452593","2451546","2452243","2452632","2451179","2451491","2451545","2451176","2451487","2451860","2451866","2452271","2452626","2451154","2451534","2451536","2452228","2452236","2452592","2452603","2451135","2451495","2451871","2451887","2451901","2451910","2452267","2452605","2451053","2451121","2451177","2451537","2451539","2452220","2452229","2452241","2452261","2452617","2452621","2452630","2451122","2451142","2451143","2451144","2451169","2451174","2451490","2452225","2452234","2452245","2452582","2451150","2451156","2451410","2451505","2451510","2451527","2451543","2451867","2451873","2451881","2452219","2452227","2452248","2452262","2452265","2452272","2452624","2451124","2451129","2451145","2451159","2451161","2451165","2451512","2451532","2451544","2451858","2452247","2452249","2452252","2452266","2452277","2452585","2452589","2452591","2452610","2452612","2451094","2451134","2451139","2451155","2451157","2451166","2451171","2451181","2451521","2451522"}'::int4[], + E'{"2450816","2450841","2450870","2450898","2450927","2450953","2450978","2451005","2451030","2451041","2451052","2451067","2451078","2451090","2451104","2451115","2451127","2451140","2451158","2451173","2451198","2451225","2451253","2451279","2451305","2451336","2451363","2451388","2451405","2451418","2451431","2451444","2451456","2451468","2451480","2451494","2451504","2451516","2451529","2451542","2451574","2451599","2451625","2451654","2451681","2451709","2451736","2451761","2451773","2451785","2451798","2451811","2451824","2451835","2451849","2451857","2451872","2451883","2451893","2451902","2451912","2451938","2451969","2451995","2452023","2452052","2452082","2452108","2452130","2452142","2452153","2452165","2452176","2452188","2452200","2452213","2452226","2452240","2452256","2452270","2452289","2452315","2452345","2452373","2452401","2452429","2452455","2452480","2452497","2452509","2452522","2452534","2452547","2452559","2452571","2452584","2452597","2452607","2452619","2452633","2452642"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_sold_time_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=2; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 2::smallint, + False::boolean, + 0.0004::real, + 4::integer, + 72739.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0002}'::real[], + NULL::real[], + '{-0.004440563}'::real[], + NULL::real[], + NULL::real[], + E'{"61224"}'::int4[], + E'{"0","3453","5358","7271","8890","10655","12362","14210","15455","16483","17601","18731","20003","21248","22548","23694","24821","25793","26731","27644","28537","29469","30431","31334","32383","33161","33815","34512","35196","35909","36662","37414","38129","38856","39594","40332","41139","41826","42634","43309","43883","44435","44958","45430","45979","46461","47039","47768","48454","49168","49903","50684","51931","53162","54270","55196","56147","57080","57913","58603","59313","60034","60759","61432","62068","62610","63196","63765","64286","64834","65399","65944","66456","66942","67447","67990","68472","68929","69389","69801","70217","70674","71131","71595","72062","72552","73092","73643","74121","74642","75146","75708","76439","77167","77837","78531","79155","80293","81570","82687","86389"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_ship_date_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=3; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 3::smallint, + False::boolean, + 0.00033333333::real, + 4::integer, + 1933.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0015333333, 0.0014666667, 0.0013333333, 0.0013, 0.0012666667, 0.0012333334, 0.0012333334, 0.0012, 0.0012, 0.0012, 0.0012, 0.0012, 0.0011666666, 0.0011666666, 0.0011666666, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011333333, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0011, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010666667, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.0010333334, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667, 0.0009666667}'::real[], + NULL::real[], + '{-0.0028389376}'::real[], + NULL::real[], + NULL::real[], + E'{"2451902","2451188","2451164","2451549","2452285","2451156","2451195","2451918","2451956","2452264","2452636","2452641","2451197","2451870","2452241","2451538","2451539","2452279","2452292","2452608","2452626","2452633","2451146","2451167","2451178","2451537","2451547","2451905","2451923","2452250","2452263","2451133","2451201","2451557","2451563","2451607","2451612","2451975","2451986","2452226","2452273","2452281","2452358","2452657","2451171","2451181","2451489","2451518","2451550","2451569","2451935","2451964","2451965","2451966","2451974","2452219","2452251","2452259","2452260","2452261","2452271","2452280","2452300","2452301","2452302","2452317","2452604","2452652","2452665","2451147","2451161","2451177","2451183","2451187","2451189","2451196","2451229","2451545","2451565","2451573","2451575","2451601","2451904","2451951","2451952","2452265","2452288","2452342","2452629","2452635","2452637","2452639","2452696","2451173","2451174","2451184","2451192","2451202","2451212","2451242"}'::int4[], + E'{"2450823","2450897","2450934","2450961","2450989","2451015","2451043","2451061","2451080","2451098","2451114","2451127","2451140","2451154","2451169","2451191","2451209","2451222","2451235","2451248","2451263","2451281","2451306","2451332","2451361","2451390","2451416","2451438","2451454","2451470","2451485","2451500","2451513","2451526","2451540","2451555","2451568","2451582","2451595","2451611","2451627","2451646","2451668","2451693","2451722","2451751","2451778","2451800","2451819","2451836","2451850","2451863","2451876","2451888","2451900","2451914","2451927","2451940","2451953","2451971","2451990","2452009","2452037","2452064","2452091","2452121","2452146","2452167","2452186","2452203","2452218","2452232","2452246","2452262","2452278","2452295","2452310","2452322","2452335","2452350","2452367","2452385","2452412","2452441","2452470","2452495","2452518","2452538","2452555","2452572","2452587","2452600","2452614","2452625","2452644","2452658","2452670","2452682","2452699","2452719","2452762"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_item_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=4; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 4::smallint, + False::boolean, + 0.0::real, + 4::integer, + 25062.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334}'::real[], + NULL::real[], + '{0.0007646001}'::real[], + NULL::real[], + NULL::real[], + E'{"1309","3001","4099","5413","8575","10591","14557","17821","19507","20473","22969","24061","25279","25891","27685"}'::int4[], + E'{"3","292","595","880","1169","1423","1683","1956","2282","2539","2800","3062","3343","3608","3865","4153","4415","4682","4951","5245","5505","5762","6071","6367","6655","6949","7232","7535","7831","8117","8386","8665","8928","9193","9470","9724","10001","10264","10546","10828","11122","11402","11708","11998","12271","12547","12823","13105","13399","13675","13977","14251","14527","14821","15112","15404","15715","16020","16304","16561","16846","17098","17353","17617","17892","18163","18434","18732","19039","19317","19609","19870","20149","20450","20749","21043","21305","21579","21881","22171","22460","22750","23029","23276","23536","23794","24084","24373","24664","24932","25236","25519","25793","26068","26349","26599","26899","27169","27447","27703","28000"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_bill_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=5; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 5::smallint, + False::boolean, + 0.0005::real, + 4::integer, + 2118340.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0010770214}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"116","19276","39962","61407","85373","106315","126227","147006","167677","187188","207807","226047","246827","269215","286863","307913","329088","349611","369725","390185","410503","432212","454393","475658","496403","519145","539722","559383","580534","601568","623450","645203","665659","686268","708568","730472","751325","772013","790899","811688","835234","859298","877602","896824","916526","937382","958518","980789","1000789","1022926","1044299","1064876","1087128","1107756","1128946","1150087","1170021","1189394","1210544","1229439","1250913","1270764","1292927","1312446","1334616","1355684","1377519","1397078","1417253","1439187","1460077","1482246","1504744","1525557","1548534","1571550","1593101","1612385","1632941","1652821","1671352","1691730","1714302","1736611","1757116","1778569","1799839","1820986","1843004","1862949","1886606","1909295","1929403","1952006","1972435","1993425","2015871","2037659","2058030","2078476","2099961"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_bill_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=6; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 6::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 1963935.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.008824349}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"40","19928","41222","60907","80036","96922","115963","135857","155159","175803","193832","214446","233794","253659","271138","289757","310150","329469","349317","369098","389298","407426","427564","448714","467530","487468","506816","526861","546227","565019","583873","602430","621270","641783","661497","681303","700310","718758","737636","756383","774238","793788","810674","829641","848804","867427","886648","906085","926348","946633","965764","984667","1004930","1025614","1045598","1064240","1084145","1103410","1122730","1141053","1162951","1181651","1200809","1219112","1239681","1256860","1276450","1295516","1315122","1334158","1352740","1370260","1387732","1406685","1424904","1445396","1462767","1481762","1502206","1522443","1540631","1559362","1578315","1599220","1619332","1635595","1652747","1672436","1691569","1710869","1731393","1750861","1769679","1790304","1809446","1827792","1845980","1861792","1881771","1900390","1920682"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_bill_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=7; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 7::smallint, + False::boolean, + 0.0004::real, + 4::integer, + 7218.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.0033058901}'::real[], + NULL::real[], + NULL::real[], + E'{"3781","4004","5987","61","843","1723","3981","4638","5516","6255"}'::int4[], + E'{"1","74","151","220","297","366","438","505","572","641","716","798","874","948","1023","1092","1157","1226","1295","1359","1442","1517","1582","1651","1718","1792","1861","1935","2012","2083","2154","2230","2301","2372","2434","2504","2576","2652","2724","2792","2863","2944","3013","3076","3151","3224","3294","3362","3441","3513","3581","3647","3726","3800","3878","3953","4022","4092","4172","4242","4311","4397","4466","4540","4612","4679","4750","4824","4901","4972","5042","5119","5194","5265","5338","5410","5486","5560","5636","5707","5777","5842","5916","5982","6054","6128","6200","6267","6337","6411","6487","6563","6634","6700","6776","6846","6915","6987","7054","7128","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_bill_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=8; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 8::smallint, + False::boolean, + 0.00043333333::real, + 4::integer, + 1052357.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.0035874592}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"85","9940","19201","29062","39466","49793","60322","70621","81217","91226","101312","111021","121563","131884","142160","151553","162420","173225","183462","193550","204825","215954","226612","236859","247641","257974","268112","278524","289530","301367","312534","323713","334146","344753","354965","366093","376805","387572","399555","409543","419685","430267","441452","451787","461680","472204","482625","492470","503572","513596","523426","533872","543655","554311","565216","576083","586017","596802","607700","617077","626774","637067","646810","658305","668298","678578","689888","699650","709454","719802","731419","742750","753186","764659","775390","785925","795925","806880","817378","827664","838917","850289","860509","871551","882170","892610","902269","911835","922478","933542","944712","955041","966086","976281","986032","996335","1007079","1017272","1027779","1039161","1049977"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_ship_customer_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=9; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 9::smallint, + False::boolean, + 0.00046666668::real, + 4::integer, + 2017265.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0043712403}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"132","20637","42180","65350","82849","103817","124318","145423","166944","187687","208737","230590","251949","273686","293387","311515","330800","353486","374240","393971","413452","433019","454488","476432","498011","518833","539886","561032","582486","602670","621844","644001","664886","685045","704748","725254","746493","768247","789025","809330","830506","851780","873145","893841","916134","939717","961138","980901","1000505","1021471","1041002","1061792","1082164","1105084","1127234","1147741","1168328","1188890","1211298","1233312","1255587","1277390","1297125","1318745","1339393","1359133","1378504","1398143","1419107","1441128","1464282","1484205","1506371","1531184","1554208","1572948","1594637","1616564","1637230","1658766","1679115","1701388","1723406","1741784","1760843","1783047","1803735","1827219","1849463","1870419","1891620","1911234","1930891","1951173","1973089","1994829","2016556","2037533","2057883","2079450","2099912"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_ship_cdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=10; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 10::smallint, + False::boolean, + 0.0004::real, + 4::integer, + 1696478.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.002879893}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"58","18440","37296","56770","75852","94757","113452","130704","151005","170386","188845","208340","228843","248582","267435","285987","306015","323298","341709","360888","379541","400412","418373","438856","457414","475601","496722","517639","535895","554469","574493","594102","613853","632766","651384","668989","687375","706348","726205","744691","763517","783257","803277","822267","842706","862226","882815","901593","921645","941476","960097","979312","997703","1019580","1040057","1057255","1076091","1095006","1112147","1132100","1151343","1170491","1188950","1206650","1225084","1243585","1261069","1279776","1298943","1318050","1338726","1357162","1375169","1394096","1413110","1433576","1450829","1470097","1488671","1509355","1530203","1549360","1567854","1587699","1610090","1629275","1648075","1668590","1688396","1707068","1725533","1743917","1762980","1780125","1799583","1819263","1838350","1859271","1880426","1901289","1920663"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_ship_hdemo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=11; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 11::smallint, + False::boolean, + 0.00033333333::real, + 4::integer, + 7200.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004}'::real[], + NULL::real[], + '{0.007957798}'::real[], + NULL::real[], + NULL::real[], + E'{"1687","262","626","3196","3456","3820","5684","5796","5891","5987","6436","6562"}'::int4[], + E'{"1","76","145","212","285","352","423","496","571","640","719","798","867","940","1016","1091","1163","1231","1304","1381","1455","1523","1597","1669","1746","1814","1887","1962","2035","2099","2168","2246","2310","2377","2455","2530","2597","2668","2741","2817","2892","2966","3033","3103","3170","3247","3325","3396","3465","3541","3609","3678","3755","3821","3889","3959","4025","4088","4162","4242","4318","4386","4454","4527","4593","4658","4728","4800","4870","4940","5010","5077","5153","5225","5302","5373","5446","5510","5580","5652","5726","5799","5877","5947","6019","6099","6174","6247","6329","6399","6475","6552","6625","6697","6761","6831","6904","6984","7057","7129","7200"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_ship_addr_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=12; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 12::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 1114224.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.001420308}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"26","11309","20636","30995","41857","51685","61820","71405","82282","92581","103069","114250","123704","133498","144567","155732","164935","175559","186082","196700","207930","217367","227511","237781","248348","259679","269692","279097","289318","300619","311485","321268","331270","341882","352231","361830","372945","383382","393987","405239","415555","427032","438461","448473","459112","470359","481524","492717","502982","513710","524165","534333","544663","554875","565192","576567","586168","598386","608959","620175","629750","639772","650199","660474","671797","681920","692252","703223","713224","723069","733136","744467","754388","765063","775010","786658","796244","807059","817848","828650","839270","851099","861790","871850","883229","894821","905183","915481","925975","936732","947814","958254","967993","977342","988420","998860","1009253","1019245","1029913","1039907","1049935"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_web_page_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=13; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 13::smallint, + False::boolean, + 0.00026666667::real, + 4::integer, + 172.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.012433333, 0.012266667, 0.012233334, 0.0122, 0.012133333, 0.012133333, 0.0121, 0.011833333, 0.0117, 0.011633334, 0.0116, 0.0114, 0.0114, 0.011366666, 0.011366666, 0.011166667, 0.0111, 0.0111, 0.0111, 0.011066667, 0.011, 0.011, 0.010966667, 0.010866666, 0.010866666, 0.0108, 0.010733333, 0.010666667, 0.010366667, 0.0101333335, 0.008866667, 0.0079, 0.0078, 0.0075333333, 0.0075, 0.0074333334, 0.0074, 0.0072333333, 0.0071666664, 0.0071333335, 0.0071333335, 0.0071, 0.0070666666, 0.0070666666, 0.007033333, 0.007033333, 0.007, 0.0069, 0.0069, 0.0068333335, 0.0068, 0.0067, 0.0067, 0.006666667, 0.0066333334, 0.0064666667, 0.0063, 0.0061666667, 0.0061, 0.0056666667, 0.005433333, 0.0054, 0.0052, 0.0052, 0.0051666666, 0.005133333, 0.0051, 0.0051, 0.0050666668, 0.0050666668, 0.0050333333, 0.0050333333, 0.0049666665, 0.0049666665, 0.0049333335, 0.0049333335, 0.0049333335, 0.0049333335, 0.0049, 0.004833333, 0.004833333, 0.004833333, 0.0048, 0.0048, 0.004766667, 0.0047, 0.0047, 0.0047, 0.0046666665, 0.0046666665, 0.0046666665, 0.0046333335, 0.0046333335, 0.0046333335, 0.0045666667, 0.0045666667, 0.0045666667, 0.0045666667, 0.0045666667, 0.0045666667}'::real[], + NULL::real[], + '{0.0037705055}'::real[], + NULL::real[], + NULL::real[], + E'{"31","25","103","145","7","163","109","49","151","115","157","55","97","73","169","37","61","79","127","172","91","121","139","1","85","13","67","43","19","133","122","44","116","152","74","68","128","80","26","38","164","2","98","170","62","86","134","32","146","50","92","56","104","20","158","8","140","110","14","130","129","57","89","136","29","87","113","135","112","142","75","99","17","106","35","64","69","125","33","15","46","82","88","155","141","11","39","154","45","83","117","9","77","160","27","59","63","81","94","118"}'::int4[], + E'{"3","3","4","5","6","10","12","16","18","21","22","23","24","28","30","34","40","40","41","47","47","51","52","52","53","54","58","65","65","70","71","71","76","76","84","93","93","95","100","100","101","105","107","107","111","114","119","120","123","124","126","131","132","137","138","143","144","147","148","149","150","153","156","159","161","162","165","166","167","167","171","171"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_web_site_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=14; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 14::smallint, + False::boolean, + 0.0003::real, + 4::integer, + 32.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.060833335, 0.059366666, 0.058766667, 0.0585, 0.0584, 0.0576, 0.0549, 0.036, 0.0357, 0.034733333, 0.034666665, 0.034433335, 0.025, 0.0247, 0.024433333, 0.0242, 0.0242, 0.024066666, 0.024033334, 0.023866666, 0.023566667, 0.023533333, 0.023266668, 0.023166666, 0.0231, 0.022766666, 0.022666667, 0.013133333, 0.012033333, 0.011566667, 0.011566667, 0.010933333}'::real[], + '{0.04239957}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"31","7","32","19","1","25","13","2","14","8","26","20","28","22","4","21","23","27","3","9","16","10","17","15","11","5","29","6","24","12","30","18"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_ship_mode_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=15; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 15::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 20.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0519, 0.05183333, 0.050966665, 0.050866667, 0.050633334, 0.050566666, 0.050533332, 0.050333332, 0.049933333, 0.049933333, 0.049933333, 0.049833335, 0.049833335, 0.0496, 0.049433332, 0.049233332, 0.0488, 0.0488, 0.048466668, 0.0482}'::real[], + '{0.056176268}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"11","4","17","19","16","5","8","12","6","7","18","2","10","15","9","20","1","3","13","14"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_warehouse_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=16; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 16::smallint, + False::boolean, + 0.00036666667::real, + 4::integer, + 5.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.20156667, 0.20043333, 0.19946666, 0.19943333, 0.19873333}'::real[], + '{0.19803289}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3","4","1","5","2"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_promo_sk +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=17; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 17::smallint, + False::boolean, + 0.0003::real, + 4::integer, + 357.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0037666666, 0.0037, 0.0035333333, 0.0035333333, 0.0035}'::real[], + NULL::real[], + '{0.005415437}'::real[], + NULL::real[], + NULL::real[], + E'{"169","252","72","118","335"}'::int4[], + E'{"1","4","7","11","15","19","22","26","29","33","36","39","43","47","51","54","58","61","65","68","71","76","79","83","86","89","93","96","100","103","107","110","114","117","122","125","129","132","136","139","143","146","150","153","157","161","164","168","173","176","180","183","187","190","193","197","200","204","208","211","215","218","222","225","229","233","236","240","244","247","251","255","259","262","266","269","273","276","279","283","287","290","294","297","300","304","308","311","315","318","322","325","329","332","337","340","344","347","351","354","357"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_order_number +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=18; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 18::smallint, + False::boolean, + 0.0::real, + 8::integer, + 31567772.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 412::oid, + 412::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{0.06999581}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"121","317641","648578","945597","1288393","1573610","1860492","2157681","2459791","2761260","3028976","3321440","3616466","3914756","4237831","4544558","4833953","5074651","5373885","5669291","6007647","6291071","6582751","6873797","7171514","7488211","7794326","8082653","8395928","8704266","9030833","9316184","9652205","9924686","10207036","10507877","10826653","11124316","11413852","11700753","11996463","12275214","12553434","12843505","13133657","13432219","13722004","14024091","14320895","14620641","14953137","15244476","15539965","15844103","16163890","16449629","16748023","17025956","17343876","17630387","17939341","18239124","18538613","18878347","19178480","19467260","19779045","20065269","20381326","20712670","20992673","21280690","21613312","21911183","22191172","22482391","22796790","23114702","23395001","23716661","24042960","24340548","24628420","24894268","25221472","25528346","25827723","26138822","26441040","26745092","27033424","27319988","27614893","27924604","28205457","28532777","28829016","29120974","29422245","29678171","29997708"}'::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[], + NULL::int8[]); + +-- +-- Table: web_sales, Attribute: ws_quantity +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=19; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 19::smallint, + False::boolean, + 0.0003::real, + 4::integer, + 100.0::real, + 1::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 96::oid, + 97::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0117, 0.011633334, 0.0113, 0.0111, 0.011066667, 0.010933333, 0.010933333, 0.0109, 0.0109, 0.0109, 0.010833333, 0.0108, 0.010766666, 0.0107, 0.010666667, 0.010566667, 0.010466667, 0.010466667, 0.0104, 0.010366667, 0.010366667, 0.010333333, 0.0103, 0.010266666, 0.010266666, 0.010266666, 0.010233333, 0.010233333, 0.010233333, 0.0102, 0.0101666665, 0.0101666665, 0.0101333335, 0.0101333335, 0.0101333335, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010066667, 0.010033334, 0.010033334, 0.010033334, 0.010033334, 0.010033334, 0.010033334, 0.01, 0.01, 0.01, 0.009966667, 0.009966667, 0.009933333, 0.0099, 0.0099, 0.009866667, 0.009866667, 0.009866667, 0.009833333, 0.0098, 0.0098, 0.009766666, 0.009766666, 0.009766666, 0.009733333, 0.009733333, 0.0097, 0.0097, 0.0097, 0.0097, 0.009666666, 0.009633333, 0.0096, 0.0096, 0.0096, 0.009566667, 0.009533334, 0.009533334, 0.009533334, 0.009533334, 0.0095, 0.0095, 0.009466667, 0.009466667, 0.0094, 0.0094, 0.0094, 0.009366667, 0.009366667, 0.009366667, 0.009333333, 0.009266667, 0.009233333, 0.0092, 0.009133333, 0.009133333, 0.009, 0.008933334, 0.008666666}'::real[], + '{0.014699079}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"55","56","49","74","6","69","80","42","53","76","82","93","23","10","41","7","26","61","70","73","90","68","40","58","72","78","39","59","71","2","21","34","17","54","84","8","22","24","38","60","75","77","29","33","47","95","96","98","18","52","66","3","64","15","31","83","5","57","87","13","36","67","9","37","79","4","46","1","45","91","92","11","97","30","50","81","43","16","44","48","85","25","100","12","63","20","32","86","19","27","99","35","89","62","65","28","51","14","88","94"}'::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[], + NULL::int4[]); + +-- +-- Table: web_sales, Attribute: ws_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=20; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 20::smallint, + False::boolean, + 0.0004::real, + 6::integer, + 9928.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.007165513}'::real[], + NULL::real[], + NULL::real[], + E'{"25.53","30.19","51.31","53.30","55.63","60.00","60.37","72.31","83.48","87.79"}'::numeric[], + E'{"1.00","2.00","3.01","3.99","5.01","5.98","6.90","7.81","8.78","9.77","10.82","11.75","12.73","13.64","14.64","15.70","16.68","17.70","18.55","19.52","20.51","21.47","22.49","23.60","24.61","25.59","26.60","27.68","28.73","29.69","30.74","31.63","32.62","33.59","34.69","35.74","36.73","37.59","38.60","39.62","40.68","41.65","42.59","43.49","44.44","45.41","46.35","47.34","48.33","49.28","50.23","51.18","52.17","53.17","54.21","55.20","56.12","57.20","58.17","59.12","60.16","61.11","62.13","63.13","64.04","65.08","66.03","66.99","67.92","69.02","69.96","71.00","71.88","72.93","73.95","74.98","76.06","77.09","78.09","79.05","79.99","81.05","82.06","83.02","84.06","85.19","86.28","87.20","88.17","89.18","90.18","91.03","92.00","92.96","94.05","94.97","95.97","96.93","97.94","98.99","100.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=21; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 21::smallint, + False::boolean, + 0.00026666667::real, + 6::integer, + 23431.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333, 0.0003, 0.00026666667}'::real[], + NULL::real[], + '{-0.011709301}'::real[], + NULL::real[], + NULL::real[], + E'{"12.66","82.70","21.34"}'::numeric[], + E'{"1.11","3.63","5.56","7.34","9.01","10.72","12.60","14.50","16.23","17.89","19.83","21.55","23.30","25.17","26.92","28.63","30.25","31.84","33.78","35.57","37.56","39.36","41.23","42.89","44.61","46.36","48.07","50.03","51.95","53.80","55.48","57.36","59.16","60.92","62.83","64.68","66.48","68.14","69.79","71.63","73.63","75.51","77.07","78.85","80.80","82.62","84.47","86.12","88.00","89.88","91.57","93.44","95.26","97.24","99.03","100.89","102.79","104.74","106.47","108.50","110.28","112.13","114.15","116.34","118.35","120.77","122.81","124.89","127.28","129.50","131.92","134.57","136.88","139.32","142.07","144.61","147.18","150.06","152.87","155.83","158.87","161.99","165.25","168.54","172.12","175.74","179.09","183.39","187.67","192.09","197.29","201.65","207.10","212.73","218.60","225.49","232.53","240.48","251.38","266.95","296.85"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=22; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 22::smallint, + False::boolean, + 0.00036666667::real, + 6::integer, + 14531.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0104, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333, 0.00033333333}'::real[], + NULL::real[], + '{-0.0046185157}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","2.06","2.70","3.03","3.83","3.87","0.80","0.94","3.04","4.70","5.59","11.09","0.70","0.89","1.17","1.28","1.33","1.55","1.81","2.13","2.80","3.51","3.68","3.75","3.77","4.11","4.41","6.03","15.17","0.41","0.72","0.86","1.12","1.21","1.44","1.66","2.24","2.46","2.92","3.38","3.40","3.43","4.23","4.64","4.98","5.48","5.60","5.68","6.12","6.37","6.49","7.58","8.47","11.40","15.80","0.30","0.66","0.71","1.14","1.18","1.32","1.49","1.53","1.70","1.89","2.03","2.05","2.22","2.37","2.43","2.52","2.53","2.78","2.82","2.87","2.88","3.25","3.61","3.67","3.71","3.94","3.95","4.17","4.22","4.59","4.82","4.91","5.07","5.19","5.24","5.64","5.70","6.11","6.53","6.57","6.95","7.00","7.73","7.84","7.99"}'::numeric[], + E'{"0.01","0.60","1.11","1.64","2.20","2.74","3.31","3.91","4.48","5.09","5.63","6.17","6.81","7.45","8.09","8.66","9.30","9.96","10.52","11.12","11.75","12.44","13.09","13.82","14.54","15.25","15.99","16.72","17.50","18.22","19.04","19.87","20.70","21.43","22.29","23.23","24.09","25.02","25.92","26.85","27.82","28.75","29.71","30.71","31.75","32.78","33.78","34.80","35.93","37.02","38.14","39.29","40.43","41.60","42.81","44.07","45.33","46.59","47.86","49.28","50.73","52.22","53.69","55.11","56.86","58.38","60.03","61.68","63.22","65.10","66.78","68.62","70.35","72.19","74.30","76.43","78.67","81.00","83.19","85.26","87.83","90.51","93.08","95.96","98.78","102.09","105.42","109.06","112.87","116.26","120.47","125.09","130.89","136.72","143.90","151.28","160.21","170.24","184.92","205.80","292.81"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_ext_discount_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=23; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 23::smallint, + False::boolean, + 0.00023333334::real, + 6::integer, + 143461.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.008966667, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.0031384944}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","47.60","333.00"}'::numeric[], + E'{"0.11","11.18","20.44","31.11","41.86","52.90","64.50","75.24","88.16","100.08","113.88","127.60","141.90","158.13","176.97","194.72","211.91","230.04","247.80","270.20","292.80","314.96","336.26","358.72","384.84","412.08","437.64","462.84","489.06","516.88","547.36","574.47","607.20","636.57","669.28","702.30","740.88","777.49","815.40","855.00","891.48","929.25","969.54","1014.26","1058.88","1106.04","1154.78","1202.30","1251.81","1305.20","1355.86","1412.46","1469.43","1528.56","1594.50","1659.35","1728.00","1792.70","1862.70","1933.38","2005.02","2079.36","2157.40","2242.56","2326.52","2413.80","2503.90","2604.75","2707.31","2815.80","2923.56","3023.16","3143.36","3267.04","3403.08","3542.86","3676.34","3816.00","3975.42","4122.84","4289.29","4480.63","4684.35","4859.40","5062.32","5306.40","5536.80","5796.00","6095.70","6444.80","6772.48","7170.48","7599.34","8105.58","8650.46","9275.07","10054.69","11049.02","12248.28","14374.90","25989.60"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_ext_sales_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=24; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 24::smallint, + False::boolean, + 0.00033333333::real, + 6::integer, + 145118.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0104, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-3.1174983e-05}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","42.12","43.56"}'::numeric[], + E'{"0.15","11.55","21.09","31.38","41.40","52.47","63.68","75.30","87.36","102.00","115.28","130.23","143.98","161.58","177.08","195.03","212.64","231.77","250.56","270.60","291.64","313.31","336.44","359.92","382.11","408.00","433.65","460.80","487.06","515.16","541.38","569.88","600.62","631.67","663.75","696.96","733.08","770.99","809.00","848.70","887.04","930.69","971.28","1008.54","1054.04","1100.44","1151.97","1201.56","1252.10","1308.53","1366.40","1428.45","1484.64","1537.62","1599.40","1660.56","1730.20","1807.20","1873.92","1944.84","2025.30","2097.54","2180.70","2264.22","2351.00","2447.28","2539.20","2636.70","2733.72","2834.16","2948.78","3067.62","3174.24","3287.79","3403.35","3526.74","3663.90","3815.55","3966.90","4120.92","4294.76","4473.13","4690.56","4881.66","5088.60","5302.54","5533.92","5818.56","6094.50","6392.75","6752.16","7092.90","7519.73","7968.00","8494.71","9116.10","9877.56","10865.55","12247.37","14678.04","25048.32"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_ext_wholesale_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=25; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 25::smallint, + False::boolean, + 6.666667e-05::real, + 6::integer, + 196312.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0027050157}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"1.93","35.43","56.70","76.82","96.60","119.36","142.52","164.70","188.88","216.20","242.60","269.10","293.82","318.16","349.23","379.35","408.51","439.04","467.04","497.98","532.65","566.68","603.20","640.29","677.73","713.32","749.62","785.46","825.12","866.00","906.84","950.49","991.20","1035.40","1086.15","1131.19","1176.84","1221.96","1272.15","1321.00","1365.67","1417.72","1474.75","1528.74","1580.92","1635.13","1688.70","1744.40","1798.35","1854.56","1916.24","1981.60","2043.72","2105.60","2172.12","2249.94","2313.36","2380.16","2454.80","2530.80","2606.81","2680.56","2757.50","2832.83","2910.27","2989.11","3068.24","3147.96","3230.25","3327.77","3416.49","3506.28","3596.71","3686.50","3790.16","3884.76","3987.72","4089.55","4193.84","4304.25","4429.44","4544.01","4671.15","4795.30","4936.88","5074.40","5225.22","5382.29","5548.20","5722.02","5905.20","6111.16","6317.28","6532.92","6787.56","7078.66","7384.50","7726.50","8117.00","8641.90","9964.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_ext_list_price +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=26; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 26::smallint, + False::boolean, + 0.00046666668::real, + 7::integer, + 373627.0::real, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 0::smallint, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + NULL::real[], + '{-0.0056457715}'::real[], + NULL::real[], + NULL::real[], + NULL::real[], + E'{"3.82","64.44","101.53","139.08","181.44","220.10","260.15","300.40","347.16","399.06","442.80","490.98","543.49","592.36","645.05","702.61","756.24","813.24","866.12","923.12","986.70","1051.75","1114.12","1180.48","1241.10","1306.88","1373.56","1443.48","1522.30","1594.02","1668.20","1759.04","1834.80","1908.80","1995.12","2087.00","2170.48","2274.40","2365.65","2454.60","2553.48","2645.06","2748.90","2856.00","2958.12","3067.00","3175.68","3276.80","3382.95","3504.28","3617.46","3732.75","3852.12","3975.75","4098.27","4220.40","4355.04","4483.16","4613.12","4751.70","4888.73","5040.00","5184.62","5346.00","5487.69","5630.85","5786.64","5954.61","6113.82","6291.90","6477.02","6674.57","6870.24","7079.40","7274.74","7502.88","7699.20","7915.05","8155.70","8392.50","8646.08","8912.73","9191.07","9444.42","9740.49","10052.91","10348.48","10732.50","11116.80","11510.34","11983.48","12501.83","13062.54","13645.80","14316.72","15042.00","15921.12","16966.66","18501.25","20712.09","29685.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_ext_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=27; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 27::smallint, + False::boolean, + 0.00033333333::real, + 6::integer, + 21995.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.10896666, 0.00066666666, 0.0006, 0.0006, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00056666665, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.00053333334, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00046666668, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.00043333333, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.0004, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667, 0.00036666667}'::real[], + NULL::real[], + '{0.004573461}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","0.35","0.50","2.16","0.22","0.26","0.34","1.08","1.53","0.37","0.46","0.52","0.57","0.92","2.29","0.03","0.09","0.12","0.21","0.42","0.43","0.60","0.75","0.04","0.07","0.28","0.32","0.36","0.78","0.87","1.16","1.94","2.24","2.35","3.04","3.72","5.24","0.11","0.27","0.39","0.48","0.53","0.56","0.58","0.69","0.90","1.02","1.07","1.18","1.44","1.72","2.20","2.67","4.41","0.06","0.16","0.25","0.38","0.47","0.77","0.79","0.85","1.01","1.04","1.19","1.23","1.78","1.90","1.91","1.92","2.21","2.60","2.94","4.33","5.60","0.02","0.08","0.18","0.19","0.23","0.24","0.30","0.31","0.49","0.51","0.54","0.55","0.66","0.67","0.81","0.93","1.00","1.14","1.42","1.45","1.56","1.80","1.88","2.26","2.50"}'::numeric[], + E'{"0.01","0.83","1.34","1.75","2.23","2.69","3.10","3.49","3.97","4.43","4.88","5.35","5.90","6.43","7.00","7.69","8.38","8.95","9.70","10.49","11.20","11.89","12.64","13.48","14.34","15.18","16.14","16.99","18.05","19.01","19.99","21.08","22.13","23.33","24.48","25.75","26.99","28.33","29.92","31.37","32.94","34.59","36.09","37.92","39.69","41.47","43.32","45.30","47.20","48.97","50.94","53.17","55.40","57.80","60.19","62.89","65.72","68.28","71.23","74.17","77.49","81.04","84.54","88.21","91.73","95.71","100.03","104.60","109.56","114.83","119.85","125.13","131.38","137.60","144.21","150.45","157.35","164.05","171.91","179.70","189.75","199.15","211.02","222.05","234.00","246.12","259.74","274.59","291.64","309.69","330.12","352.06","377.91","410.73","445.30","487.66","545.67","620.87","718.11","874.66","2139.82"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_coupon_amt +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=28; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 28::smallint, + False::boolean, + 0.00043333333::real, + 3::integer, + 6981.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.8047}'::real[], + NULL::real[], + '{0.6524823}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.07","2.81","5.16","8.29","11.57","14.98","18.25","22.17","25.74","29.25","33.46","38.75","43.09","47.74","52.23","58.18","63.93","69.06","75.54","81.43","90.24","97.41","105.00","112.34","119.93","128.94","139.96","150.39","161.12","170.13","179.08","190.02","204.24","216.80","230.79","242.88","256.72","269.70","285.28","299.98","321.93","337.96","359.92","379.16","398.56","411.26","434.53","456.18","480.99","503.11","534.41","559.69","587.89","615.55","642.62","675.15","706.02","738.29","769.44","805.37","834.44","867.90","910.13","947.74","994.63","1042.05","1081.01","1133.06","1191.03","1244.46","1291.32","1335.46","1389.96","1451.73","1524.48","1590.31","1679.40","1745.45","1825.78","1907.96","2007.12","2097.34","2207.59","2313.09","2431.84","2586.43","2750.05","2882.04","3053.86","3220.08","3468.52","3726.47","4048.99","4401.10","4748.00","5156.34","5788.23","6391.13","7477.72","9404.42","23044.45"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_ext_ship_cost +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=29; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 29::smallint, + False::boolean, + 0.00026666667::real, + 6::integer, + 83043.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.020966666, 0.00026666667, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.00023333334, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002, 0.0002}'::real[], + NULL::real[], + '{-0.006589469}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","450.80","10.92","48.40","68.40","79.20","93.60","113.40","142.80","6.72","9.18","15.84","16.80","23.10","32.40","37.80","38.22","52.80","84.00","105.30","106.26","111.60","126.00","131.04","143.04","184.80","198.00","216.72","305.76","333.00","369.60"}'::numeric[], + E'{"0.12","6.44","12.04","17.91","23.85","29.60","36.11","42.78","49.62","56.16","63.60","71.04","78.89","87.72","96.00","104.00","113.54","123.20","133.92","145.52","155.25","165.02","176.80","189.20","201.63","213.48","226.80","240.50","253.76","267.85","282.72","298.89","316.10","330.25","346.00","363.00","380.52","400.32","419.76","438.40","457.56","477.96","499.20","523.27","545.37","568.70","592.32","616.00","643.86","672.10","699.48","723.24","752.40","785.46","813.93","846.30","879.06","914.50","948.00","983.84","1020.80","1057.50","1097.25","1140.48","1180.20","1229.80","1277.46","1323.70","1377.74","1434.40","1494.96","1555.07","1608.18","1672.32","1736.04","1799.16","1871.10","1948.48","2020.46","2099.31","2180.40","2270.40","2362.56","2458.14","2562.12","2692.80","2810.50","2931.74","3077.75","3238.31","3432.00","3613.44","3833.20","4076.73","4350.06","4641.78","5042.73","5561.25","6238.65","7336.85","12822.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_net_paid +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=30; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 30::smallint, + False::boolean, + 0.00043333333::real, + 6::integer, + 155462.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0125, 0.0002}'::real[], + NULL::real[], + '{-0.0023643773}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","43.56"}'::numeric[], + E'{"0.06","6.90","13.40","20.67","28.47","35.91","44.46","53.53","63.00","73.44","83.29","95.48","107.88","119.93","132.34","144.75","160.46","175.10","190.14","206.83","222.10","239.84","258.46","275.49","294.81","315.96","336.50","358.36","379.82","403.62","429.78","456.00","481.00","507.99","534.40","561.61","589.38","619.65","651.00","683.82","717.57","755.54","794.30","830.96","872.19","911.09","954.18","992.44","1035.44","1083.95","1133.73","1186.24","1242.02","1296.12","1352.96","1411.83","1470.70","1528.24","1597.05","1662.45","1734.44","1814.25","1880.05","1954.56","2034.12","2110.08","2198.27","2289.76","2377.50","2475.02","2583.69","2686.32","2791.36","2899.80","3029.56","3156.05","3271.45","3395.25","3526.10","3668.35","3836.05","4007.85","4182.57","4382.49","4602.96","4828.07","5062.08","5308.86","5595.68","5910.43","6219.45","6596.00","7000.70","7489.02","8014.44","8603.82","9384.00","10412.72","11672.78","14217.46","24307.65"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_net_paid_inc_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=31; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 31::smallint, + False::boolean, + 0.0003::real, + 6::integer, + 246002.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.012466666, 0.0002}'::real[], + NULL::real[], + '{-0.0024806631}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00","57.28"}'::numeric[], + E'{"0.06","7.24","14.07","21.63","29.77","37.41","46.45","56.03","66.38","76.71","87.19","99.41","112.52","125.57","138.96","151.61","167.50","182.92","198.36","216.24","231.78","251.32","269.52","288.70","306.76","329.56","350.90","374.93","397.02","422.18","449.02","474.60","501.75","531.09","559.18","587.44","616.28","646.64","680.44","714.49","750.33","786.11","828.41","870.48","912.34","955.22","997.24","1039.57","1083.93","1132.88","1186.06","1237.31","1299.09","1355.29","1409.04","1474.72","1532.54","1592.67","1668.97","1738.60","1815.18","1890.75","1969.95","2046.13","2120.47","2201.72","2290.88","2394.32","2487.04","2585.21","2701.06","2805.79","2915.24","3036.02","3164.89","3298.38","3422.94","3549.84","3672.00","3832.97","4016.75","4182.78","4379.44","4577.43","4811.80","5061.31","5307.67","5555.95","5845.41","6173.76","6521.98","6885.89","7318.05","7810.46","8377.41","8999.04","9828.90","10854.91","12167.98","14819.83","25915.60"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_net_paid_inc_ship +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=32; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 32::smallint, + False::boolean, + 0.0::real, + 7::integer, + 301791.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0004}'::real[], + NULL::real[], + '{-0.0042563225}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.15","26.90","47.27","66.00","87.66","110.70","130.90","153.36","177.10","200.26","226.76","251.37","278.08","304.01","330.99","360.93","391.74","422.88","454.10","486.85","518.42","554.54","589.68","627.00","662.74","700.56","740.52","781.44","822.39","863.04","903.00","950.37","1000.58","1042.83","1092.42","1141.32","1193.41","1249.05","1308.51","1363.96","1424.64","1479.06","1542.09","1608.99","1672.64","1734.00","1802.29","1875.28","1951.50","2031.12","2099.65","2168.25","2252.68","2350.87","2431.91","2518.02","2615.34","2697.47","2798.23","2897.37","3002.40","3098.34","3202.68","3308.00","3423.75","3542.37","3654.66","3775.98","3909.42","4028.66","4167.30","4309.90","4464.88","4615.84","4766.58","4937.48","5114.56","5268.48","5449.86","5643.55","5859.42","6093.48","6323.40","6589.80","6865.04","7151.04","7471.75","7798.48","8167.15","8545.18","8940.05","9403.24","9923.00","10538.58","11210.00","12020.74","12946.34","14134.36","15809.06","18879.36","36064.00"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_net_paid_inc_ship_tax +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=33; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 33::smallint, + False::boolean, + 0.0::real, + 7::integer, + 580101.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.0004}'::real[], + NULL::real[], + '{-0.0042436747}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"0.15","27.32","48.14","67.61","90.21","112.88","134.60","157.01","181.53","205.08","232.37","257.90","285.99","310.90","338.12","369.71","401.62","432.71","466.15","498.29","532.67","568.73","606.20","644.59","677.83","716.94","756.42","802.49","841.36","885.36","929.11","973.55","1022.68","1069.26","1124.40","1170.12","1225.33","1284.57","1342.88","1398.12","1459.13","1514.68","1583.89","1648.82","1714.40","1780.42","1851.90","1924.20","2000.32","2078.12","2156.48","2230.86","2317.75","2412.28","2495.80","2582.42","2677.84","2771.12","2874.03","2977.91","3073.79","3182.59","3288.45","3403.98","3512.75","3630.83","3761.65","3884.79","4011.93","4143.91","4277.61","4436.91","4583.20","4733.60","4884.95","5069.66","5251.05","5427.69","5605.76","5797.65","6025.63","6250.68","6502.49","6751.35","7071.69","7353.10","7674.41","8024.66","8431.89","8815.18","9204.22","9715.49","10211.19","10847.31","11539.04","12347.17","13354.05","14622.68","16369.05","19567.99","38203.82"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + +-- +-- Table: web_sales, Attribute: ws_net_profit +-- +-- DELETE FROM pg_statistic WHERE starelid='cte_bug.web_sales'::regclass AND staattnum=34; +INSERT INTO pg_statistic VALUES ( + 'cte_bug.web_sales'::regclass, + 34::smallint, + False::boolean, + 0.0::real, + 6::integer, + 206397.0::real, + 1::smallint, + 2::smallint, + 3::smallint, + 0::smallint, + 0::smallint, + 1752::oid, + 1754::oid, + 1754::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + 0::oid, + '{0.00033333333}'::real[], + NULL::real[], + '{-0.009154078}'::real[], + NULL::real[], + NULL::real[], + E'{"0.00"}'::numeric[], + E'{"-9828.00","-6282.88","-5353.36","-4759.04","-4327.14","-3980.40","-3689.38","-3415.01","-3200.70","-2979.08","-2776.62","-2608.96","-2449.44","-2301.84","-2164.10","-2041.05","-1931.67","-1824.00","-1713.27","-1605.45","-1519.20","-1432.56","-1351.42","-1271.98","-1193.64","-1123.08","-1053.59","-994.98","-939.75","-874.80","-825.28","-773.60","-726.24","-683.34","-636.68","-597.28","-559.37","-523.79","-486.00","-449.68","-416.64","-383.24","-353.70","-325.01","-296.56","-271.44","-246.81","-222.48","-199.76","-177.30","-156.21","-138.71","-119.47","-102.79","-85.56","-72.32","-58.00","-46.02","-34.44","-22.62","-11.88","-1.54","7.80","20.24","33.81","49.02","66.06","87.48","111.15","138.51","166.66","197.05","235.56","273.56","316.31","364.32","415.57","472.36","537.60","604.77","677.15","764.42","854.28","951.99","1064.31","1176.00","1306.32","1449.60","1614.67","1788.28","1984.00","2213.82","2467.72","2782.77","3119.84","3508.34","4027.92","4724.10","5672.52","7345.81","15055.16"}'::numeric[], + NULL::numeric[], + NULL::numeric[], + NULL::numeric[]); + + +-- +-- Query text +-- + + set search_path=cte_bug,public; + set gp_cte_sharing = on; + + explain(costs off) + with year_total as ( + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2) + year_total + ,'s' sale_type + from cte_bug.customer + ,cte_bug.store_sales + ,cte_bug.date_dim + where c_customer_sk = ss_customer_sk + and ss_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum((((cs_ext_list_price-cs_ext_wholesale_cost-cs_ext_discount_amt)+cs_ext_sales_price)/2) + ) year_total + ,'c' sale_type + from cte_bug.customer + ,cte_bug.catalog_sales + ,cte_bug.date_dim + where c_customer_sk = cs_bill_customer_sk + and cs_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum((((ws_ext_list_price-ws_ext_wholesale_cost-ws_ext_discount_amt)+ws_ext_sales_price)/2) + ) year_total + ,'w' sale_type + from cte_bug.customer + ,cte_bug.web_sales + ,cte_bug.date_dim + where c_customer_sk = ws_bill_customer_sk + and ws_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + ) + select + t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_login + from year_total t_s_firstyear + ,year_total t_s_secyear + ,year_total t_c_firstyear + ,year_total t_c_secyear + ,year_total t_w_firstyear + ,year_total t_w_secyear + where t_s_secyear.customer_id = t_s_firstyear.customer_id + and t_s_firstyear.customer_id = t_c_secyear.customer_id + and t_s_firstyear.customer_id = t_c_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_secyear.customer_id + and t_s_firstyear.sale_type = 's' + and t_c_firstyear.sale_type = 'c' + and t_w_firstyear.sale_type = 'w' + and t_s_secyear.sale_type = 's' + and t_c_secyear.sale_type = 'c' + and t_w_secyear.sale_type = 'w' + and t_s_firstyear.dyear = 2001 + and t_s_secyear.dyear = 2001+1 + and t_c_firstyear.dyear = 2001 + and t_c_secyear.dyear = 2001+1 + and t_w_firstyear.dyear = 2001 + and t_w_secyear.dyear = 2001+1 + and t_s_firstyear.year_total > 0 + and t_c_firstyear.year_total > 0 + and t_w_firstyear.year_total > 0 + and case when t_c_firstyear.year_total > 0 then + t_c_secyear.year_total / t_c_firstyear.year_total else null end > case + when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / + t_s_firstyear.year_total else null end + and case when t_c_firstyear.year_total > 0 then + t_c_secyear.year_total / t_c_firstyear.year_total else null end > case + when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / + t_w_firstyear.year_total else null end + order by t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_login + limit 100; From 2e26d6e896c68e0d7f37e439b71c9c547a397178 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Wed, 20 Aug 2025 20:30:51 +0000 Subject: [PATCH 122/260] Fix: initialize FuncExpr.is_tablefunc to false In simplify_function(), switched to using makeFuncExpr() to construct a FuncExpr node instead of manually allocating it on the stack. This avoids passing an invalid pointer to prosupport routines. Also explicitly initialize the new is_tablefunc field in makeFuncExpr to false. Without initialization, the field contained random values, which could lead to unpredictable behavior during expression simplification. --- src/backend/nodes/copyfuncs.c | 2 +- src/backend/nodes/makefuncs.c | 1 + src/backend/nodes/outfuncs.c | 2 +- src/backend/nodes/readfuncs.c | 3 +-- src/backend/optimizer/util/clauses.c | 22 ++++++++-------------- 5 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 7dcead7c499..3a9fd32741d 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -2203,8 +2203,8 @@ _copyFuncExpr(const FuncExpr *from) COPY_SCALAR_FIELD(funccollid); COPY_SCALAR_FIELD(inputcollid); COPY_NODE_FIELD(args); - COPY_SCALAR_FIELD(is_tablefunc); COPY_LOCATION_FIELD(location); + COPY_SCALAR_FIELD(is_tablefunc); return newnode; } diff --git a/src/backend/nodes/makefuncs.c b/src/backend/nodes/makefuncs.c index 946cdfa6717..fcb37bfd8da 100644 --- a/src/backend/nodes/makefuncs.c +++ b/src/backend/nodes/makefuncs.c @@ -534,6 +534,7 @@ makeFuncExpr(Oid funcid, Oid rettype, List *args, funcexpr->inputcollid = inputcollid; funcexpr->args = args; funcexpr->location = -1; + funcexpr->is_tablefunc = false; return funcexpr; } diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 6b21ff93654..b27ca507c65 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -1469,8 +1469,8 @@ _outFuncExpr(StringInfo str, const FuncExpr *node) WRITE_OID_FIELD(funccollid); WRITE_OID_FIELD(inputcollid); WRITE_NODE_FIELD(args); - WRITE_BOOL_FIELD(is_tablefunc); /* GPDB */ WRITE_LOCATION_FIELD(location); + WRITE_BOOL_FIELD(is_tablefunc); /* GPDB */ } static void diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index cfe4c8d1d01..5f1bbacfa91 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -749,9 +749,8 @@ _readFuncExpr(void) READ_OID_FIELD(funccollid); READ_OID_FIELD(inputcollid); READ_NODE_FIELD(args); - READ_BOOL_FIELD(is_tablefunc); /* GPDB */ READ_LOCATION_FIELD(location); - + READ_BOOL_FIELD(is_tablefunc); /* GPDB */ READ_DONE(); } diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 1fd03a05e87..2669f2c3017 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -4153,29 +4153,23 @@ simplify_function(Oid funcid, Oid result_type, int32 result_typmod, * function is actually being invoked. */ SupportRequestSimplify req; - FuncExpr fexpr; - - fexpr.xpr.type = T_FuncExpr; - fexpr.funcid = funcid; - fexpr.funcresulttype = result_type; - fexpr.funcretset = func_form->proretset; - fexpr.funcvariadic = funcvariadic; - fexpr.funcformat = COERCE_EXPLICIT_CALL; - fexpr.funccollid = result_collid; - fexpr.inputcollid = input_collid; - fexpr.args = args; - fexpr.location = -1; + FuncExpr *fexpr = makeFuncExpr(funcid, result_type, args, + result_collid, input_collid, + COERCE_EXPLICIT_CALL); + + fexpr->funcvariadic = funcvariadic; + fexpr->funcretset = func_form->proretset; req.type = T_SupportRequestSimplify; req.root = context->root; - req.fcall = &fexpr; + req.fcall = fexpr; newexpr = (Expr *) DatumGetPointer(OidFunctionCall1(func_form->prosupport, PointerGetDatum(&req))); /* catch a possible API misunderstanding */ - Assert(newexpr != (Expr *) &fexpr); + Assert(newexpr != (Expr *) fexpr); } if (!newexpr && allow_non_const) From ca3f03927768c391a73c013eb1238612c12dad85 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Wed, 20 Aug 2025 02:05:57 +0000 Subject: [PATCH 123/260] ORCA: reject functions with prosupport in DXL translation ORCA does not currently implement PostgreSQL's prosupport mechanism. Support functions (prosupport) provide planner-time optimization hints in the upstream planner, but ORCA has no equivalent logic. To avoid incorrect query plans, functions with prosupport are now rejected during DXL translation. --- .../expected/misc_functions_optimizer.out | 50 +++++++++-------- src/backend/gpopt/gpdbwrappers.cpp | 25 +++++++++ .../translate/CTranslatorRelcacheToDXL.cpp | 17 ++++++ src/include/gpopt/gpdbwrappers.h | 6 +++ .../expected/misc_functions_optimizer.out | 54 +++++++++---------- 5 files changed, 98 insertions(+), 54 deletions(-) diff --git a/contrib/pax_storage/src/test/regress/expected/misc_functions_optimizer.out b/contrib/pax_storage/src/test/regress/expected/misc_functions_optimizer.out index 8cdcba95fb1..56138548e88 100644 --- a/contrib/pax_storage/src/test/regress/expected/misc_functions_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/misc_functions_optimizer.out @@ -235,7 +235,7 @@ WHERE my_int_eq(a.unique2, 42); -> Hash -> Seq Scan on tenk1 a Filter: my_int_eq(unique2, 42) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (8 rows) -- With support function that knows it's int4eq, we get a different plan @@ -243,17 +243,16 @@ ALTER FUNCTION my_int_eq(int, int) SUPPORT test_support_func; EXPLAIN (COSTS OFF) SELECT * FROM tenk1 a JOIN tenk1 b ON a.unique1 = b.unique1 WHERE my_int_eq(a.unique2, 42); - QUERY PLAN ------------------------------------------------------- + QUERY PLAN +------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) - -> Hash Join - Hash Cond: (b.unique1 = a.unique1) - -> Seq Scan on tenk1 b - -> Hash - -> Seq Scan on tenk1 a - Filter: my_int_eq(unique2, 42) - Optimizer: Pivotal Optimizer (GPORCA) -(8 rows) + -> Nested Loop + -> Seq Scan on tenk1 a + Filter: my_int_eq(unique2, 42) + -> Index Scan using tenk1_unique1 on tenk1 b + Index Cond: (unique1 = a.unique1) + Optimizer: Postgres query optimizer +(7 rows) -- Also test non-default rowcount estimate CREATE FUNCTION my_gen_series(int, int) RETURNS SETOF integer @@ -262,27 +261,26 @@ CREATE FUNCTION my_gen_series(int, int) RETURNS SETOF integer SUPPORT test_support_func; EXPLAIN (COSTS OFF) SELECT * FROM tenk1 a JOIN my_gen_series(1,1000) g ON a.unique1 = g; - QUERY PLAN ------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) -> Hash Join - Hash Cond: (a.unique1 = my_gen_series.my_gen_series) - -> Seq Scan on tenk1 a + Hash Cond: (g.g = a.unique1) + -> Function Scan on my_gen_series g -> Hash - -> Function Scan on my_gen_series - Optimizer: Pivotal Optimizer (GPORCA) + -> Seq Scan on tenk1 a + Optimizer: Postgres query optimizer (7 rows) EXPLAIN (COSTS OFF) SELECT * FROM tenk1 a JOIN my_gen_series(1,5) g ON a.unique1 = g; - QUERY PLAN ------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) - -> Hash Join - Hash Cond: (a.unique1 = my_gen_series.my_gen_series) - -> Seq Scan on tenk1 a - -> Hash - -> Function Scan on my_gen_series - Optimizer: Pivotal Optimizer (GPORCA) -(7 rows) + -> Nested Loop + -> Function Scan on my_gen_series g + -> Index Scan using tenk1_unique1 on tenk1 a + Index Cond: (unique1 = g.g) + Optimizer: Postgres query optimizer +(6 rows) diff --git a/src/backend/gpopt/gpdbwrappers.cpp b/src/backend/gpopt/gpdbwrappers.cpp index 1deb53883d5..4e636a0c653 100644 --- a/src/backend/gpopt/gpdbwrappers.cpp +++ b/src/backend/gpopt/gpdbwrappers.cpp @@ -49,6 +49,7 @@ extern "C" { #include "partitioning/partdesc.h" #include "storage/lmgr.h" #include "utils/fmgroids.h" +#include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/partcache.h" } @@ -346,6 +347,30 @@ gpdb::FuncStability(Oid funcid) return '\0'; } +RegProcedure +gpdb::FuncSupport(Oid funcid) +{ + GP_WRAP_START; + { + /* catalog tables: pg_proc */ + return get_func_support(funcid); + } + GP_WRAP_END; + return InvalidOid; +} + +Oid +gpdb::FuncNamespace(Oid funcid) +{ + GP_WRAP_START; + { + /* catalog tables: pg_proc */ + return get_func_namespace(funcid); + } + GP_WRAP_END; + return InvalidOid; +} + char gpdb::FuncExecLocation(Oid funcid) { diff --git a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp index d0d57338b78..469d69fb60f 100644 --- a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp +++ b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp @@ -20,6 +20,7 @@ extern "C" { #include "catalog/heap.h" #include "catalog/namespace.h" #include "catalog/pg_am.h" +#include "catalog/pg_namespace.h" #include "catalog/pg_proc.h" #include "catalog/pg_statistic.h" #include "catalog/pg_statistic_ext.h" @@ -1437,6 +1438,22 @@ CTranslatorRelcacheToDXL::LookupFuncProps( *stability = GetFuncStability(gpdb::FuncStability(func_oid)); + RegProcedure prosupport = gpdb::FuncSupport(func_oid); + if (OidIsValid(prosupport)) + { + /* + CBDB_FIXME: + Check if function is NOT in pg_catalog namespace + Functions outside pg_catalog are likely extension functions that unsupported yet. + */ + Oid func_namespace = gpdb::FuncNamespace(func_oid); + if (func_namespace != PG_CATALOG_NAMESPACE) + { + GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiQuery2DXLUnsupportedFeature, + GPOS_WSZ_LIT("extension functions with prosupport unsupported")); + } + } + if (gpdb::FuncExecLocation(func_oid) != PROEXECLOCATION_ANY) { GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiQuery2DXLUnsupportedFeature, diff --git a/src/include/gpopt/gpdbwrappers.h b/src/include/gpopt/gpdbwrappers.h index fe387e471c0..261cd28b5f0 100644 --- a/src/include/gpopt/gpdbwrappers.h +++ b/src/include/gpopt/gpdbwrappers.h @@ -338,6 +338,12 @@ bool IsFuncNDVPreserving(Oid funcid); // stability property of given function char FuncStability(Oid funcid); +// support function of given function +RegProcedure FuncSupport(Oid funcid); + +// namespace of given function +Oid FuncNamespace(Oid funcid); + // exec location property of given function char FuncExecLocation(Oid funcid); diff --git a/src/test/regress/expected/misc_functions_optimizer.out b/src/test/regress/expected/misc_functions_optimizer.out index f5187fad45b..e5723fea5f3 100644 --- a/src/test/regress/expected/misc_functions_optimizer.out +++ b/src/test/regress/expected/misc_functions_optimizer.out @@ -256,8 +256,8 @@ CREATE FUNCTION my_int_eq(int, int) RETURNS bool EXPLAIN (COSTS OFF) SELECT * FROM tenk1 a JOIN tenk1 b ON a.unique1 = b.unique1 WHERE my_int_eq(a.unique2, 42); - QUERY PLAN ------------------------------------------------------- + QUERY PLAN +---------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) -> Hash Join Hash Cond: (b.unique1 = a.unique1) @@ -265,7 +265,7 @@ WHERE my_int_eq(a.unique2, 42); -> Hash -> Seq Scan on tenk1 a Filter: my_int_eq(unique2, 42) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (8 rows) -- With support function that knows it's int4eq, we get a different plan @@ -273,17 +273,16 @@ ALTER FUNCTION my_int_eq(int, int) SUPPORT test_support_func; EXPLAIN (COSTS OFF) SELECT * FROM tenk1 a JOIN tenk1 b ON a.unique1 = b.unique1 WHERE my_int_eq(a.unique2, 42); - QUERY PLAN ------------------------------------------------------- + QUERY PLAN +------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) - -> Hash Join - Hash Cond: (b.unique1 = a.unique1) - -> Seq Scan on tenk1 b - -> Hash - -> Seq Scan on tenk1 a - Filter: my_int_eq(unique2, 42) - Optimizer: Pivotal Optimizer (GPORCA) -(8 rows) + -> Nested Loop + -> Seq Scan on tenk1 a + Filter: my_int_eq(unique2, 42) + -> Index Scan using tenk1_unique1 on tenk1 b + Index Cond: (unique1 = a.unique1) + Optimizer: Postgres query optimizer +(7 rows) -- Also test non-default rowcount estimate CREATE FUNCTION my_gen_series(int, int) RETURNS SETOF integer @@ -292,27 +291,26 @@ CREATE FUNCTION my_gen_series(int, int) RETURNS SETOF integer SUPPORT test_support_func; EXPLAIN (COSTS OFF) SELECT * FROM tenk1 a JOIN my_gen_series(1,1000) g ON a.unique1 = g; - QUERY PLAN ------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) -> Hash Join - Hash Cond: (a.unique1 = my_gen_series.my_gen_series) - -> Seq Scan on tenk1 a + Hash Cond: (g.g = a.unique1) + -> Function Scan on my_gen_series g -> Hash - -> Function Scan on my_gen_series - Optimizer: Pivotal Optimizer (GPORCA) + -> Seq Scan on tenk1 a + Optimizer: Postgres query optimizer (7 rows) EXPLAIN (COSTS OFF) SELECT * FROM tenk1 a JOIN my_gen_series(1,10) g ON a.unique1 = g; - QUERY PLAN ------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) - -> Hash Join - Hash Cond: (a.unique1 = my_gen_series.my_gen_series) - -> Seq Scan on tenk1 a - -> Hash - -> Function Scan on my_gen_series - Optimizer: Pivotal Optimizer (GPORCA) -(7 rows) + -> Nested Loop + -> Function Scan on my_gen_series g + -> Index Scan using tenk1_unique1 on tenk1 a + Index Cond: (unique1 = g.g) + Optimizer: Postgres query optimizer +(6 rows) From 42a23ebde89a0acf37a827ca60f336f7aefb8f32 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Thu, 21 Aug 2025 07:48:47 +0800 Subject: [PATCH 124/260] Fix move semantics misuse and unhide Equals() overload - In pax_storage, remove unnecessary std::move when returning a std::unique_ptr from GetGroupStatsInfo(). Returning directly avoids warnings and redundant moves. - In gporca/gpos, bring CWStringBase::Equals(const WCHAR*) into scope in CWStringConst to prevent it from being hidden by the derived class overload. --- contrib/pax_storage/src/cpp/storage/micro_partition.cc | 2 +- src/backend/gporca/libgpos/include/gpos/string/CWStringConst.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/contrib/pax_storage/src/cpp/storage/micro_partition.cc b/contrib/pax_storage/src/cpp/storage/micro_partition.cc index 57004d7d3b8..ead41b41f34 100644 --- a/contrib/pax_storage/src/cpp/storage/micro_partition.cc +++ b/contrib/pax_storage/src/cpp/storage/micro_partition.cc @@ -91,7 +91,7 @@ size_t MicroPartitionReaderProxy::GetTupleCountsInGroup(size_t group_index) { std::unique_ptr MicroPartitionReaderProxy::GetGroupStatsInfo(size_t group_index) { - return std::move(reader_->GetGroupStatsInfo(group_index)); + return reader_->GetGroupStatsInfo(group_index); } std::unique_ptr diff --git a/src/backend/gporca/libgpos/include/gpos/string/CWStringConst.h b/src/backend/gporca/libgpos/include/gpos/string/CWStringConst.h index 448dd34e29b..96421a5b6bb 100644 --- a/src/backend/gporca/libgpos/include/gpos/string/CWStringConst.h +++ b/src/backend/gporca/libgpos/include/gpos/string/CWStringConst.h @@ -57,6 +57,9 @@ class CWStringConst : public CWStringBase // checks whether the string is byte-wise equal to another string BOOL Equals(const CWStringBase *str) const override; + + // bring base class Equals(const WCHAR*) into scope to avoid hiding + using CWStringBase::Equals; }; } // namespace gpos From 53a6afe1222055aff2925be7f3ed948853cfe102 Mon Sep 17 00:00:00 2001 From: zhangyue Date: Thu, 21 Aug 2025 13:19:53 +0800 Subject: [PATCH 125/260] Fix double free issue in alterResgroupCallback during io_limit cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We need to handle two scenarios: 1. When caps.io_limit differs from oldCaps.io_limit β€” this corresponds to the RESGROUP_LIMIT_TYPE_IO_LIMIT case. 2. When caps.io_limit is equal to oldCaps.io_limit β€” this applies to all other cases. The original code causes a double free issue in the second scenario ("other cases"). --- src/backend/commands/resgroupcmds.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/backend/commands/resgroupcmds.c b/src/backend/commands/resgroupcmds.c index 5c319e85b11..f6ee4fefc34 100644 --- a/src/backend/commands/resgroupcmds.c +++ b/src/backend/commands/resgroupcmds.c @@ -1093,10 +1093,23 @@ alterResgroupCallback(XactEvent event, void *arg) if (event == XACT_EVENT_COMMIT) ResGroupAlterOnCommit(callbackCtx); + /* + * Free io_limit resources allocated in AlterResourceGroup(). + * + * We need to handle two cases: + * 1. caps.io_limit != oldCaps.io_limit: case RESGROUP_LIMIT_TYPE_IO_LIMIT + * 2. caps.io_limit == oldCaps.io_limit: other cases + * + * The pointer comparison (oldCaps.io_limit != caps.io_limit) is crucial to + * avoid double free errors. When "other cases", both pointers might + * reference the same memory location, so we only free oldCaps.io_limit if + * it's different from caps.io_limit. + */ if (callbackCtx->caps.io_limit != NIL) cgroupOpsRoutine->freeio(callbackCtx->caps.io_limit); - if (callbackCtx->caps.io_limit != NIL) + if (callbackCtx->oldCaps.io_limit != NIL && + callbackCtx->oldCaps.io_limit != callbackCtx->caps.io_limit) cgroupOpsRoutine->freeio(callbackCtx->oldCaps.io_limit); pfree(callbackCtx); From ca8fcd7cf51b919acaf311273355d8810a62817a Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Sat, 23 Aug 2025 01:01:12 +0800 Subject: [PATCH 126/260] Fix: Preserve relid and cdbpolicy in make_grouping_rel make_grouping_rel() failed to set the relid and cdbpolicy fields in the grouped_rel it constructs. As a result, extensions using create_upper_paths_hook could see uninitialized values and crash when accessing these fields. The fix is to propagate the values from input_rel, so that grouped_rel carries the same relid and distribution policy as its input. This ensures that hooks and subsequent planner logic can safely rely on them. --- src/backend/optimizer/plan/planner.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 5ecb8695205..5abd5ca8709 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -4263,6 +4263,8 @@ make_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel, grouped_rel->useridiscurrent = input_rel->useridiscurrent; grouped_rel->fdwroutine = input_rel->fdwroutine; grouped_rel->exec_location = input_rel->exec_location; + grouped_rel->cdbpolicy = input_rel->cdbpolicy; + grouped_rel->relid = input_rel->relid; return grouped_rel; } From 3c2846682659d8616b57ddd860d07ef806c381e6 Mon Sep 17 00:00:00 2001 From: "Lei (Alexandra) Wang" Date: Tue, 8 Nov 2022 14:50:51 -0800 Subject: [PATCH 127/260] Implement pg_get_expr() for subpartition template (#14288) Implement pg_get_expr() for subpartition template Co-authored-by: Ashwin Agrawal --- src/backend/utils/adt/ruleutils.c | 154 ++++++++++++ .../regress/expected/AOCO_Compression.out | 48 ++++ src/test/regress/expected/bfv_partition.out | 222 +++++++++--------- .../regress/expected/column_compression.out | 30 ++- src/test/regress/expected/partition.out | 62 ++--- .../regress/expected/partition_optimizer.out | 62 ++--- src/test/regress/sql/AOCO_Compression.sql | 9 +- src/test/regress/sql/bfv_partition.sql | 60 ++--- src/test/regress/sql/column_compression.sql | 10 +- src/test/regress/sql/partition.sql | 14 +- 10 files changed, 456 insertions(+), 215 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index cbfc3d184d2..cdbd27d4d95 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -53,6 +53,7 @@ #include "nodes/pathnodes.h" #include "optimizer/optimizer.h" #include "parser/parse_agg.h" +#include "parser/parse_expr.h" #include "parser/parse_func.h" #include "parser/parse_node.h" #include "parser/parse_oper.h" @@ -9696,6 +9697,159 @@ get_rule_expr(Node *node, deparse_context *context, } break; + case T_GpPartitionDefinition: + { + GpPartitionDefinition *def = (GpPartitionDefinition*)node; + ListCell *lc; + char *sep = ""; + ParseState *pstate = make_parsestate(NULL); + + if (def->isTemplate) + appendStringInfo(buf, "SUBPARTITION TEMPLATE("); + + foreach(lc, def->partDefElems) + { + if (IsA(lfirst(lc), GpPartDefElem)) + { + GpPartDefElem *elem = lfirst_node(GpPartDefElem, lc); + + if (elem->colencs) + elog(ERROR, "Partition specific ENCODING clause not supported yet"); + + appendStringInfoString(buf, sep); + sep = ", "; + if (elem->partName) + { + if (elem->isDefault) + appendStringInfo(buf, "DEFAULT SUBPARTITION %s", elem->partName); + else + appendStringInfo(buf, "SUBPARTITION %s", elem->partName); + } + + if (elem->boundSpec) + { + switch (nodeTag(elem->boundSpec)) + { + case T_GpPartitionRangeSpec: + { + GpPartitionRangeSpec *rspec = + (GpPartitionRangeSpec *) elem->boundSpec; + if (rspec->partStart) + { + Node *val = transformExpr(pstate, + (Node *)linitial(rspec->partStart->val), EXPR_KIND_VALUES); + Assert(rspec->partStart->edge == + PART_EDGE_INCLUSIVE); + appendStringInfo(buf, " START ("); + get_rule_expr(val, context, true); + appendStringInfo(buf, ")"); + } + if (rspec->partEnd) + { + Node *val = transformExpr(pstate, + (Node *)linitial(rspec->partEnd->val), EXPR_KIND_VALUES); + Assert(rspec->partEnd->edge == + PART_EDGE_EXCLUSIVE); + appendStringInfo(buf, " END ("); + get_rule_expr(val, context, true); + appendStringInfo(buf, ")"); + } + if (rspec->partEvery) + { + Node *val = transformExpr(pstate, + (Node *)linitial(rspec->partEvery), EXPR_KIND_VALUES); + + appendStringInfo(buf, " Every ("); + get_rule_expr(val, context, true); + appendStringInfo(buf, ")"); + } + } + break; + case T_GpPartitionListSpec: + { + GpPartitionListSpec *lspec = (GpPartitionListSpec *) elem->boundSpec; + ListCell *cell; + + appendStringInfoString(buf, " VALUES ("); + sep = ""; + foreach(cell, lspec->partValues) + { + Node *val = transformExpr(pstate, (Node *)linitial(lfirst(cell)), EXPR_KIND_VALUES); + + Assert(list_length(lfirst(cell)) == 1); + appendStringInfoString(buf, sep); + get_rule_expr(val, context, -1); + sep = ", "; + } + appendStringInfoChar(buf, ')'); + } + break; + default: + elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); + } + } + if (elem->options) + { + ListCell *cell; + + appendStringInfoString(buf, sep); + appendStringInfoString(buf, " WITH ("); + if (elem->accessMethod) + { + if (pg_strcasecmp(elem->accessMethod, "ao_row") != 0) + { + appendStringInfoString(buf, "appendonly=true, orientation=row"); + sep = ", "; + } + else if (pg_strcasecmp(elem->accessMethod, "ao_column") != 0) + { + appendStringInfoString(buf, "appendonly=true, orientation=column"); + sep = ", "; + } + } + foreach (cell, elem->options) + { + DefElem *el = lfirst_node(DefElem, cell); + char *arg; + + appendStringInfoString(buf, sep); + appendStringInfo(buf, "%s=", el->defname); + appendStringInfo(buf, "%s", arg = defGetString(el)); + sep = ", "; + } + appendStringInfoChar(buf, ')'); + } + } + else if (IsA(lfirst(lc), ColumnReferenceStorageDirective)) + { + ListCell *cell; + ColumnReferenceStorageDirective *crsd = lfirst_node(ColumnReferenceStorageDirective, lc); + + appendStringInfoString(buf, sep); + if (crsd->deflt) + appendStringInfo(buf, "DEFAULT COLUMN ENCODING ("); + else + appendStringInfo(buf, "COLUMN %s ENCODING (", crsd->column); + + sep = ""; + foreach(cell, crsd->encoding) + { + DefElem *el = lfirst_node(DefElem, cell); + char *arg; + + appendStringInfoString(buf, sep); + appendStringInfo(buf, "%s=", el->defname); + appendStringInfo(buf, "%s", arg = defGetString(el)); + sep = ", "; + } + appendStringInfo(buf, ")"); + } + } + if (def->isTemplate) + appendStringInfo(buf, ")"); + } + break; + default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); break; diff --git a/src/test/regress/expected/AOCO_Compression.out b/src/test/regress/expected/AOCO_Compression.out index f8e1c6164a9..adfcafab56f 100644 --- a/src/test/regress/expected/AOCO_Compression.out +++ b/src/test/regress/expected/AOCO_Compression.out @@ -459,6 +459,12 @@ CREATE TABLE co_cr_sub_partzlib8192_1 COLUMN a1 encoding (compresstype = zlib), COLUMN a5 ENCODING (compresstype=zlib,compresslevel=1, blocksize=8192), DEFAULT COLUMN ENCODING (compresstype=zlib,compresslevel=1,blocksize=8192)) (start(1) end(5000) every(1000)); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_cr_sub_partzlib8192_1'::regclass; + level | pg_get_expr +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION df_sp, SUBPARTITION sp1 VALUES ('M'), SUBPARTITION sp2 VALUES ('F'), COLUMN a2 ENCODING (compresstype=zlib, compresslevel=1, blocksize=8192), COLUMN a1 ENCODING (compresstype=zlib), COLUMN a5 ENCODING (compresstype=zlib, compresslevel=1, blocksize=8192), DEFAULT COLUMN ENCODING (compresstype=zlib, compresslevel=1, blocksize=8192)) +(1 row) + -- -- Create Indexes -- @@ -472,6 +478,12 @@ INSERT INTO co_cr_sub_partzlib8192_1(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13, ANALYZE co_cr_sub_partzlib8192_1; --Create Uncompressed table of same schema definition CREATE TABLE co_cr_sub_partzlib8192_1_uncompr(id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int) WITH (appendonly=true, orientation=column) distributed randomly Partition by range(a1) Subpartition by list(a2) subpartition template ( subpartition sp1 values('M') , subpartition sp2 values('F') ) (start(1) end(5000) every(1000)) ; +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_cr_sub_partzlib8192_1_uncompr'::regclass; + level | pg_get_expr +-------+------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(SUBPARTITION sp1 VALUES ('M'), SUBPARTITION sp2 VALUES ('F')) +(1 row) + -- -- Insert to uncompressed table -- @@ -844,6 +856,12 @@ CREATE TABLE co_cr_sub_partzlib8192_1_2 COLUMN a1 encoding (compresstype = zlib), COLUMN a5 ENCODING (compresstype=zlib,compresslevel=1, blocksize=8192), DEFAULT COLUMN ENCODING (compresstype=zlib,compresslevel=1,blocksize=8192)) (partition p1 values('F'), partition p2 values ('M')); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_cr_sub_partzlib8192_1_2'::regclass; + level | pg_get_expr +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION df_sp, START (1) END (5000) Every (1000), COLUMN a2 ENCODING (compresstype=zlib, compresslevel=1, blocksize=8192), COLUMN a1 ENCODING (compresstype=zlib), COLUMN a5 ENCODING (compresstype=zlib, compresslevel=1, blocksize=8192), DEFAULT COLUMN ENCODING (compresstype=zlib, compresslevel=1, blocksize=8192)) +(1 row) + -- -- Create Indexes -- @@ -1283,6 +1301,12 @@ CREATE TABLE co_wt_sub_partrle_type8192_1 (id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int ) WITH (appendonly=true, orientation=column) distributed randomly Partition by range(a1) Subpartition by list(a2) subpartition template ( default subpartition df_sp, subpartition sp1 values('M') , subpartition sp2 values('F') WITH (appendonly=true, orientation=column,compresstype=rle_type,compresslevel=1,blocksize=8192)) (start(1) end(5000) every(1000) ); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_wt_sub_partrle_type8192_1'::regclass; + level | pg_get_expr +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION df_sp, SUBPARTITION sp1 VALUES ('M'), SUBPARTITION sp2 VALUES ('F'), WITH (appendonly=true, orientation=row, compresstype=rle_type, compresslevel=1, blocksize=8192)) +(1 row) + -- -- Create Indexes -- @@ -1296,6 +1320,12 @@ INSERT INTO co_wt_sub_partrle_type8192_1(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12, ANALYZE co_wt_sub_partrle_type8192_1; --Create Uncompressed table of same schema definition CREATE TABLE co_wt_sub_partrle_type8192_1_uncompr(id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int) WITH (appendonly=true, orientation=column) distributed randomly Partition by range(a1) Subpartition by list(a2) subpartition template ( subpartition sp1 values('M') , subpartition sp2 values('F') ) (start(1) end(5000) every(1000)) ; +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_wt_sub_partrle_type8192_1_uncompr'::regclass; + level | pg_get_expr +-------+------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(SUBPARTITION sp1 VALUES ('M'), SUBPARTITION sp2 VALUES ('F')) +(1 row) + -- -- Insert to uncompressed table -- @@ -1668,6 +1698,12 @@ CREATE TABLE co_wt_sub_partrle_type8192_1_2 (id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int ) WITH (appendonly=true, orientation=column) distributed randomly Partition by list(a2) Subpartition by range(a1) subpartition template (default subpartition df_sp, start(1) end(5000) every(1000) WITH (appendonly=true, orientation=column,compresstype=rle_type,compresslevel=1,blocksize=8192)) (partition p1 values ('M'), partition p2 values ('F')); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_wt_sub_partrle_type8192_1_2'::regclass; + level | pg_get_expr +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION df_sp, START (1) END (5000) Every (1000), WITH (appendonly=true, orientation=row, compresstype=rle_type, compresslevel=1, blocksize=8192)) +(1 row) + -- -- Create Indexes -- @@ -2111,6 +2147,12 @@ CREATE TABLE ao_wt_sub_partzlib8192_5 (id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int ) WITH (appendonly=true, orientation=row) distributed randomly Partition by range(a1) Subpartition by list(a2) subpartition template ( default subpartition df_sp, subpartition sp1 values('M') , subpartition sp2 values('F') WITH (appendonly=true, orientation=row,compresstype=zlib,compresslevel=5,blocksize=8192)) (start(1) end(5000) every(1000) ); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ao_wt_sub_partzlib8192_5'::regclass; + level | pg_get_expr +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION df_sp, SUBPARTITION sp1 VALUES ('M'), SUBPARTITION sp2 VALUES ('F'), WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5, blocksize=8192)) +(1 row) + -- -- Create Indexes -- @@ -2505,6 +2547,12 @@ CREATE TABLE ao_wt_sub_partzlib8192_5_2 (id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int ) WITH (appendonly=true, orientation=row) distributed randomly Partition by list(a2) Subpartition by range(a1) subpartition template (default subpartition df_sp, start(1) end(5000) every(1000) WITH (appendonly=true, orientation=row,compresstype=zlib,compresslevel=5,blocksize=8192)) (partition p1 values ('M'), partition p2 values ('F')); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ao_wt_sub_partzlib8192_5_2'::regclass; + level | pg_get_expr +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION df_sp, START (1) END (5000) Every (1000), WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5, blocksize=8192)) +(1 row) + -- -- Create Indexes -- diff --git a/src/test/regress/expected/bfv_partition.out b/src/test/regress/expected/bfv_partition.out index ec180b9855f..c159a5c28df 100644 --- a/src/test/regress/expected/bfv_partition.out +++ b/src/test/regress/expected/bfv_partition.out @@ -2239,18 +2239,18 @@ ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (`); ERROR: syntax error at or near "`" LINE 1: ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (`); ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 216}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 252}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName europe :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "europe" :location 291}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+---------------------------------------------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia'), SUBPARTITION europe VALUES ('europe')) (1 row) set client_min_messages='warning'; drop schema qa147 cascade; reset client_min_messages; -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); - relid | level | template --------+-------+---------- +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); + relid | level | pg_get_expr +-------+-------+------------- (0 rows) -- Mix-Match for Alter subpartition template @@ -2268,18 +2268,18 @@ SUBPARTITION TEMPLATE EVERY (INTERVAL '1 month') ); -- Clear TEMPLATE ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE (); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template --------+-------+---------- +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +-------+-------+------------- (0 rows) -- This will overwrite previous subpartition template ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template -------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +------------+-------+------------------------------------------------------------------------------------------- + qa147sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia')) (1 row) -- Invalid subpartition @@ -2293,10 +2293,10 @@ ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ERROR: invalid boundary specification for LIST partition LINE 2: ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END... ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template -------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +------------+-------+------------------------------------------------------------------------------------------- + qa147sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia')) (1 row) -- Mix and Match RANGE/LIST . Expect to Error @@ -2307,10 +2307,10 @@ SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') ERROR: invalid boundary specification for LIST partition LINE 4: SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END... ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template -------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +------------+-------+------------------------------------------------------------------------------------------- + qa147sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia')) (1 row) -- Mix and Match RANGE/LIST . Expect to Error @@ -2321,10 +2321,10 @@ SUBPARTITION usa1 VALUES('usa')); ERROR: invalid boundary specification for LIST partition LINE 3: SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END... ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template -------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 110}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +------------+-------+------------------------------------------------------------------------------------------- + qa147sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia')) (1 row) drop table qa147sales; @@ -2343,26 +2343,26 @@ SUBPARTITION TEMPLATE PARTITION europe VALUES ('europe') ); -- Clear TEMPLATE ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE (); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template --------+-------+---------- +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +-------+-------+------------- (0 rows) -- This will overwrite previous subpartition template ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2008-02-01') EXCLUSIVE ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template -------------+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-02-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery <>} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +------------+-------+----------------------------------------------------------------------------------------------- + qa147sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('02-01-2008'::date)) (1 row) ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 month') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template -------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +------------+-------+--------------------------------------------------------------------------------------------------------------------------- + qa147sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('01-01-2009'::date) Every ('@ 1 mon'::interval)) (1 row) -- Invalid subpartition template @@ -2371,10 +2371,10 @@ ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ERROR: invalid boundary specification for RANGE partition LINE 2: ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ... ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template -------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +------------+-------+--------------------------------------------------------------------------------------------------------------------------- + qa147sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('01-01-2009'::date) Every ('@ 1 mon'::interval)) (1 row) -- Mix and Match RANGE/LIST . Expect to Error @@ -2385,10 +2385,10 @@ SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') ERROR: invalid boundary specification for RANGE partition LINE 3: SUBPARTITION usa1 VALUES('usa'), ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template -------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +------------+-------+--------------------------------------------------------------------------------------------------------------------------- + qa147sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('01-01-2009'::date) Every ('@ 1 mon'::interval)) (1 row) -- Mix and Match RANGE/LIST . Expect to Error @@ -2399,16 +2399,16 @@ SUBPARTITION usa1 VALUES('usa')); ERROR: invalid boundary specification for RANGE partition LINE 4: SUBPARTITION usa1 VALUES('usa')); ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; - relid | level | template -------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 82} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 77} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 116} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 111} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 156} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 147} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; + relid | level | pg_get_expr +------------+-------+--------------------------------------------------------------------------------------------------------------------------- + qa147sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('01-01-2009'::date) Every ('@ 1 mon'::interval)) (1 row) drop table qa147sales; -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); - relid | level | template --------+-------+---------- +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); + relid | level | pg_get_expr +-------+-------+------------- (0 rows) -- Now with Schema @@ -2428,18 +2428,18 @@ SUBPARTITION TEMPLATE EVERY (INTERVAL '1 month') ); -- Clear TEMPLATE ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------+-------+---------- +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------+-------+------------- (0 rows) -- This will overwrite previous subpartition template ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia')) (1 row) -- Invalid subpartition @@ -2453,10 +2453,10 @@ ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ERROR: invalid boundary specification for LIST partition LINE 2: ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END... ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia')) (1 row) -- Mix and Match RANGE/LIST . Expect to Error @@ -2467,10 +2467,10 @@ SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') ERROR: invalid boundary specification for LIST partition LINE 4: SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END... ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia')) (1 row) -- Mix and Match RANGE/LIST . Expect to Error @@ -2481,17 +2481,17 @@ SUBPARTITION usa1 VALUES('usa')); ERROR: invalid boundary specification for LIST partition LINE 3: SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END... ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usa :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "usa" :location 77}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName asia :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "asia" :location 111}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia')) (1 row) DROP SCHEMA qa147 cascade; NOTICE: drop cascades to table qa147.sales -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); - relid | level | template --------+-------+---------- +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); + relid | level | pg_get_expr +-------+-------+------------- (0 rows) CREATE SCHEMA qa147; @@ -2510,26 +2510,26 @@ SUBPARTITION TEMPLATE PARTITION europe VALUES ('europe') ); -- Clear TEMPLATE ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------+-------+---------- +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------+-------+------------- (0 rows) -- This will overwrite previous subpartition template ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2008-02-01') EXCLUSIVE ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-02-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery <>} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+----------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('02-01-2008'::date)) (1 row) ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 month') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+--------------------------------------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('01-01-2009'::date) Every ('@ 1 mon'::interval)) (1 row) -- Invalid subpartition template @@ -2538,10 +2538,10 @@ ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ERROR: invalid boundary specification for RANGE partition LINE 2: ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ... ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+--------------------------------------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('01-01-2009'::date) Every ('@ 1 mon'::interval)) (1 row) -- Mix and Match RANGE/LIST . Expect to Error @@ -2552,10 +2552,10 @@ SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') ERROR: invalid boundary specification for RANGE partition LINE 3: SUBPARTITION usa1 VALUES('usa'), ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+--------------------------------------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('01-01-2009'::date) Every ('@ 1 mon'::interval)) (1 row) -- Mix and Match RANGE/LIST . Expect to Error @@ -2566,17 +2566,17 @@ SUBPARTITION usa1 VALUES('usa')); ERROR: invalid boundary specification for RANGE partition LINE 4: SUBPARTITION usa1 VALUES('usa')); ^ -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; - relid | level | template --------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - qa147.sales | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName usam1 :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2008-01-01" :location 83} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 78} :location -1}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2009-01-01" :location 117} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 112} :location -1}) :edge 2} :partEvery ({TYPECAST :arg {A_CONST :val "\1\ month" :location 157} :typeName {TYPENAME :names ("pg_catalog" "interval") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 148} :location -1})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; + relid | level | pg_get_expr +-------------+-------+--------------------------------------------------------------------------------------------------------------------------- + qa147.sales | 1 | SUBPARTITION TEMPLATE(SUBPARTITION usam1 START ('01-01-2008'::date) END ('01-01-2009'::date) Every ('@ 1 mon'::interval)) (1 row) drop schema qa147 cascade; NOTICE: drop cascades to table qa147.sales -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); - relid | level | template --------+-------+---------- +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); + relid | level | pg_get_expr +-------+-------+------------- (0 rows) set gp_autostats_mode=on_change; @@ -2701,10 +2701,10 @@ alter table partsupp_def set subpartition template( subpartition aaa start(400) -- If we want to use the new subpartition template, we have to drop the default partition first, and then readd the default partition -- Note 2: We do not support this function yet, but if we are able to split default partition with default subpartition, would we -- be using the subpartition template to definte the "new" partition or the existing one. -select relid::regclass, level, template from gp_partition_template where relid = 'partsupp_def'::regclass; - relid | level | template ---------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - partsupp_def | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName aaa :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 400 :location 75}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 600 :location 85}) :edge 2} :partEvery ({A_CONST :val 100 :location 96})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'partsupp_def'::regclass; + relid | level | pg_get_expr +--------------+-------+--------------------------------------------------------------------------- + partsupp_def | 1 | SUBPARTITION TEMPLATE(SUBPARTITION aaa START (400) END (600) Every (100)) (1 row) alter table partsup_def add partition f1 start(0) end (300) every(100); @@ -2727,10 +2727,10 @@ NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'ps_pa HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. alter table partsupp_def2 set subpartition template(); alter table partsupp_def2 set subpartition template( subpartition aaa start(400) end (600) every(100) ); -select relid::regclass, level, template from gp_partition_template where relid = 'partsupp_def2'::regclass; - relid | level | template ----------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - partsupp_def2 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName aaa :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 400 :location 76}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 600 :location 86}) :edge 2} :partEvery ({A_CONST :val 100 :location 97})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'partsupp_def2'::regclass; + relid | level | pg_get_expr +---------------+-------+--------------------------------------------------------------------------- + partsupp_def2 | 1 | SUBPARTITION TEMPLATE(SUBPARTITION aaa START (400) END (600) Every (100)) (1 row) drop table partsupp_def; @@ -3011,9 +3011,9 @@ drop table partition_cleanup1; drop schema partition_999 cascade; NOTICE: drop cascades to table partition_cleanup2 -- These should be empty -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); - relid | level | template --------+-------+---------- +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); + relid | level | pg_get_expr +-------+-------+------------- (0 rows) -- diff --git a/src/test/regress/expected/column_compression.out b/src/test/regress/expected/column_compression.out index 148f73ddb91..b2edc54ddc3 100644 --- a/src/test/regress/expected/column_compression.out +++ b/src/test/regress/expected/column_compression.out @@ -765,6 +765,12 @@ execute ccddlcheck; ccddl_1_prt_p2_2_prt_sp1 | l | 4 | {compresstype=zlib,compresslevel=1,blocksize=32768} (20 rows) +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ccddl'::regclass; + level | pg_get_expr +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(SUBPARTITION sp1 VALUES (1, 2, 3, 4, 5), COLUMN i ENCODING (compresstype=zlib), COLUMN j ENCODING (compresstype=rle_type), COLUMN k ENCODING (compresstype=zlib), COLUMN l ENCODING (compresstype=zlib)) +(1 row) + insert into ccddl select 1, (i % 19) + 1, ((i+3) % 5) + 1, i+3 from generate_series(1, 100) i; select * from ccddl; i | j | k | l @@ -1227,6 +1233,12 @@ execute ccddlcheck; ccddl_1_prt_p1_2_prt_sp1 | j | 2 | {compresstype=rle_type,compresslevel=1,blocksize=32768} (6 rows) +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ccddl'::regclass; + level | pg_get_expr +-------+---------------------------------------------------------------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(SUBPARTITION sp1 START (1) END (20), COLUMN i ENCODING (compresstype=zlib), COLUMN j ENCODING (compresstype=rle_type)) +(1 row) + alter table ccddl alter partition p1 split partition sp1 at (10) into (partition sp2, partition sp3); execute ccddlcheck; relname | attname | filenum | attoptions @@ -1304,6 +1316,13 @@ execute ccddlcheck; ccddl_1_prt_1_2_prt_1_3_prt_usa | region | 5 | {compresstype=rle_type,compresslevel=1,blocksize=32768} (20 rows) +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ccddl'::regclass; + level | pg_get_expr +-------+-------------------------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE( START (1) END (13), COLUMN month ENCODING (compresstype=rle_type)) + 2 | SUBPARTITION TEMPLATE(SUBPARTITION usa VALUES ('usa'), COLUMN region ENCODING (compresstype=rle_type)) +(2 rows) + -- Ensure we can read and write insert into ccddl select 1, 2008, 1, 2, 'usa' from generate_series(1, 100); select * from ccddl; @@ -1624,6 +1643,12 @@ execute ccddlcheck; ccddl_1_prt_newp_2_prt_sp1 | j | 3 | {compresstype=zlib,compresslevel=1,blocksize=32768} (33 rows) +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ccddl'::regclass; + level | pg_get_expr +-------+------------------------------------------------------------------------------------------------- + 1 | SUBPARTITION TEMPLATE(SUBPARTITION sp1 VALUES (1), DEFAULT COLUMN ENCODING (compresstype=zlib)) +(1 row) + drop table ccddl; ----------------------------------------------------------------------- -- Partitioning support @@ -1641,8 +1666,9 @@ encoding(compresstype=sdf2sdf)); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'i' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. ERROR: unknown compresstype "sdf2sdf" --- We don't support partition element specific encoding clauses in subpartition --- templates as we have no place to store them. +-- Historically we don't support partition element specific encoding clauses in +-- subpartition templates as we didn't have place to store them. We now have +-- place to store them if we want to, but for now we keep this door closed create table a (i int, j int) with (appendonly=true, orientation=column) partition by range(i) subpartition by range(j) subpartition template(start(1) end(10) default column encoding (compresstype=zlib), diff --git a/src/test/regress/expected/partition.out b/src/test/regress/expected/partition.out index ae7dc6b2b2a..1e70e47b872 100755 --- a/src/test/regress/expected/partition.out +++ b/src/test/regress/expected/partition.out @@ -2314,9 +2314,9 @@ DETAIL: Partition key of the failing row contains (i) = (5). drop table bar_p; -- Drop should not leave anything lingering for bar_p or its -- subpartitions in pg_partition* catalog tables. -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); - relid | level | template --------+-------+---------- +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); + relid | level | pg_get_expr +-------+-------+------------- (0 rows) -- MPP-4172 @@ -2437,28 +2437,28 @@ select relid::regclass, level from gp_partition_template where relid = 'rank_set alter table rank_settemp set subpartition template (default subpartition def2); -- def2 is there -select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass; - relid | level | template ---------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'rank_settemp'::regclass; + relid | level | pg_get_expr +--------------+-------+-------------------------------------------------- + rank_settemp | 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION def2) (1 row) alter table rank_settemp set subpartition template (default subpartition def2); -- Should still be there -select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass; - relid | level | template ---------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'rank_settemp'::regclass; + relid | level | pg_get_expr +--------------+-------+-------------------------------------------------- + rank_settemp | 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION def2) (1 row) alter table rank_settemp set subpartition template (start (date '2006-01-01') with (appendonly=true)); alter table rank_settemp add partition f1 values ('N'); alter table rank_settemp set subpartition template (start (date '2007-01-01') with (appendonly=true, compresslevel=5)); alter table rank_settemp add partition f2 values ('C'); -select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass; - relid | level | template ---------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1} :partEnd <> :partEvery <>} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'rank_settemp'::regclass; + relid | level | pg_get_expr +--------------+-------+------------------------------------------------------------------------------------------------------------------ + rank_settemp | 1 | SUBPARTITION TEMPLATE( START ('01-01-2007'::date), WITH (appendonly=true, orientation=column, compresslevel=5)) (1 row) drop table rank_settemp; @@ -3593,12 +3593,12 @@ subpartition l2 values (6,7,8,9,10) ); alter table mpp5992 set subpartition template (subpartition l1 values (1,2,3), subpartition l2 values (4,5,6), subpartition l3 values (7,8,9,10)); -select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass; - relid | level | template ----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} - mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} - mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'mpp5992'::regclass; + relid | level | pg_get_expr +---------+-------+--------------------------------------------------------------------------------------------------------------------------------- + mpp5992 | 1 | SUBPARTITION TEMPLATE(SUBPARTITION l1 VALUES (1, 2, 3), SUBPARTITION l2 VALUES (4, 5, 6), SUBPARTITION l3 VALUES (7, 8, 9, 10)) + mpp5992 | 3 | SUBPARTITION TEMPLATE(SUBPARTITION lll1 VALUES ('M'), SUBPARTITION lll2 VALUES ('F')) + mpp5992 | 2 | SUBPARTITION TEMPLATE(SUBPARTITION ll1 VALUES ('Engineering'), SUBPARTITION ll2 VALUES ('QA')) (3 rows) -- Now we can add a new partition @@ -3847,12 +3847,12 @@ select relname, relam, pg_get_expr(relpartbound, oid) from pg_class where relnam mpp5992_1_prt_foo3_2_prt_l3_3_prt_ll2_4_prt_lll2 | 7024 | FOR VALUES IN ('F') (112 rows) -select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass; - relid | level | template ----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} - mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} - mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'mpp5992'::regclass; + relid | level | pg_get_expr +---------+-------+--------------------------------------------------------------------------------------------------------------------------------- + mpp5992 | 1 | SUBPARTITION TEMPLATE(SUBPARTITION l1 VALUES (1, 2, 3), SUBPARTITION l2 VALUES (4, 5, 6), SUBPARTITION l3 VALUES (7, 8, 9, 10)) + mpp5992 | 3 | SUBPARTITION TEMPLATE(SUBPARTITION lll1 VALUES ('M'), SUBPARTITION lll2 VALUES ('F')) + mpp5992 | 2 | SUBPARTITION TEMPLATE(SUBPARTITION ll1 VALUES ('Engineering'), SUBPARTITION ll2 VALUES ('QA')) (3 rows) -- MPP-10223: split subpartitions @@ -4051,10 +4051,10 @@ subpartition template (start (1) end (10) every (1)) (start (20) end (30) every (1)); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -select relid::regclass, level, template from gp_partition_template where relid = 'MPP10480'::regclass; - relid | level | template -----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2} :partEvery ({A_CONST :val 1 :location 141})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'MPP10480'::regclass; + relid | level | pg_get_expr +----------+-------+------------------------------------------------------ + mpp10480 | 1 | SUBPARTITION TEMPLATE( START (1) END (10) Every (1)) (1 row) -- MPP-10421: fix SPLIT of partitions with PRIMARY KEY constraint/indexes diff --git a/src/test/regress/expected/partition_optimizer.out b/src/test/regress/expected/partition_optimizer.out index 8e738bb508b..c237e41bcad 100755 --- a/src/test/regress/expected/partition_optimizer.out +++ b/src/test/regress/expected/partition_optimizer.out @@ -2315,9 +2315,9 @@ DETAIL: Partition key of the failing row contains (i) = (5). drop table bar_p; -- Drop should not leave anything lingering for bar_p or its -- subpartitions in pg_partition* catalog tables. -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); - relid | level | template --------+-------+---------- +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); + relid | level | pg_get_expr +-------+-------+------------- (0 rows) -- MPP-4172 @@ -2438,28 +2438,28 @@ select relid::regclass, level from gp_partition_template where relid = 'rank_set alter table rank_settemp set subpartition template (default subpartition def2); -- def2 is there -select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass; - relid | level | template ---------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'rank_settemp'::regclass; + relid | level | pg_get_expr +--------------+-------+-------------------------------------------------- + rank_settemp | 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION def2) (1 row) alter table rank_settemp set subpartition template (default subpartition def2); -- Should still be there -select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass; - relid | level | template ---------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName def2 :boundSpec <> :subSpec <> :isDefault true :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'rank_settemp'::regclass; + relid | level | pg_get_expr +--------------+-------+-------------------------------------------------- + rank_settemp | 1 | SUBPARTITION TEMPLATE(DEFAULT SUBPARTITION def2) (1 row) alter table rank_settemp set subpartition template (start (date '2006-01-01') with (appendonly=true)); alter table rank_settemp add partition f1 values ('N'); alter table rank_settemp set subpartition template (start (date '2007-01-01') with (appendonly=true, compresslevel=5)); alter table rank_settemp add partition f2 values ('C'); -select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass; - relid | level | template ---------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - rank_settemp | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({TYPECAST :arg {A_CONST :val "\2007-01-01" :location 64} :typeName {TYPENAME :names ("date") :typeOid 0 :setof false :pct_type false :typmods <> :typemod -1 :arrayBounds <> :location 59} :location -1}) :edge 1} :partEnd <> :partEvery <>} :subSpec <> :isDefault false :options ({DEFELEM :defnamespace <> :defname compresslevel :arg 5 :defaction 0 :location 101}) :accessMethod ao_row :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'rank_settemp'::regclass; + relid | level | pg_get_expr +--------------+-------+------------------------------------------------------------------------------------------------------------------ + rank_settemp | 1 | SUBPARTITION TEMPLATE( START ('01-01-2007'::date), WITH (appendonly=true, orientation=column, compresslevel=5)) (1 row) drop table rank_settemp; @@ -3594,12 +3594,12 @@ subpartition l2 values (6,7,8,9,10) ); alter table mpp5992 set subpartition template (subpartition l1 values (1,2,3), subpartition l2 values (4,5,6), subpartition l3 values (7,8,9,10)); -select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass; - relid | level | template ----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} - mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} - mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'mpp5992'::regclass; + relid | level | pg_get_expr +---------+-------+--------------------------------------------------------------------------------------------------------------------------------- + mpp5992 | 1 | SUBPARTITION TEMPLATE(SUBPARTITION l1 VALUES (1, 2, 3), SUBPARTITION l2 VALUES (4, 5, 6), SUBPARTITION l3 VALUES (7, 8, 9, 10)) + mpp5992 | 3 | SUBPARTITION TEMPLATE(SUBPARTITION lll1 VALUES ('M'), SUBPARTITION lll2 VALUES ('F')) + mpp5992 | 2 | SUBPARTITION TEMPLATE(SUBPARTITION ll1 VALUES ('Engineering'), SUBPARTITION ll2 VALUES ('QA')) (3 rows) -- Now we can add a new partition @@ -3848,12 +3848,12 @@ select relname, relam, pg_get_expr(relpartbound, oid) from pg_class where relnam mpp5992_1_prt_foo3_2_prt_l3_3_prt_ll2_4_prt_lll2 | 7024 | FOR VALUES IN ('F') (112 rows) -select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass; - relid | level | template ----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - mpp5992 | 3 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName lll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "M" :location 133}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName lll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "F" :location 165}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} - mpp5992 | 2 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName ll1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "Engineering" :location 108}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName ll2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val "QA" :location 149}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} - mpp5992 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName l1 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 1 :location 72}) ({A_CONST :val 2 :location 74}) ({A_CONST :val 3 :location 76}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l2 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 4 :location 105}) ({A_CONST :val 5 :location 107}) ({A_CONST :val 6 :location 109}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>} {GPPARTDEFELEM :partName l3 :boundSpec {GPPARTITIONLISTSPEC :partValues (({A_CONST :val 7 :location 137}) ({A_CONST :val 8 :location 139}) ({A_CONST :val 9 :location 141}) ({A_CONST :val 10 :location 143}))} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'mpp5992'::regclass; + relid | level | pg_get_expr +---------+-------+--------------------------------------------------------------------------------------------------------------------------------- + mpp5992 | 1 | SUBPARTITION TEMPLATE(SUBPARTITION l1 VALUES (1, 2, 3), SUBPARTITION l2 VALUES (4, 5, 6), SUBPARTITION l3 VALUES (7, 8, 9, 10)) + mpp5992 | 3 | SUBPARTITION TEMPLATE(SUBPARTITION lll1 VALUES ('M'), SUBPARTITION lll2 VALUES ('F')) + mpp5992 | 2 | SUBPARTITION TEMPLATE(SUBPARTITION ll1 VALUES ('Engineering'), SUBPARTITION ll2 VALUES ('QA')) (3 rows) -- MPP-10223: split subpartitions @@ -4052,10 +4052,10 @@ subpartition template (start (1) end (10) every (1)) (start (20) end (30) every (1)); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -select relid::regclass, level, template from gp_partition_template where relid = 'MPP10480'::regclass; - relid | level | template -----------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - mpp10480 | 1 | {GPPARTITIONDEFINITION :partDefElems ({GPPARTDEFELEM :partName <> :boundSpec {GPPARTITIONRANGESPEC :partStart {GPPARTITIONRANGEITEM :val ({A_CONST :val 1 :location 122}) :edge 1} :partEnd {GPPARTITIONRANGEITEM :val ({A_CONST :val 10 :location 130}) :edge 2} :partEvery ({A_CONST :val 1 :location 141})} :subSpec <> :isDefault false :options <> :accessMethod <> :tablespacename <> :colencs <>}) :encClauses <> :isTemplate true} +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'MPP10480'::regclass; + relid | level | pg_get_expr +----------+-------+------------------------------------------------------ + mpp10480 | 1 | SUBPARTITION TEMPLATE( START (1) END (10) Every (1)) (1 row) -- MPP-10421: fix SPLIT of partitions with PRIMARY KEY constraint/indexes diff --git a/src/test/regress/sql/AOCO_Compression.sql b/src/test/regress/sql/AOCO_Compression.sql index fe7ac125103..9bc25350de0 100644 --- a/src/test/regress/sql/AOCO_Compression.sql +++ b/src/test/regress/sql/AOCO_Compression.sql @@ -381,7 +381,7 @@ CREATE TABLE co_cr_sub_partzlib8192_1 COLUMN a1 encoding (compresstype = zlib), COLUMN a5 ENCODING (compresstype=zlib,compresslevel=1, blocksize=8192), DEFAULT COLUMN ENCODING (compresstype=zlib,compresslevel=1,blocksize=8192)) (start(1) end(5000) every(1000)); - +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_cr_sub_partzlib8192_1'::regclass; -- -- Create Indexes -- @@ -400,6 +400,7 @@ ANALYZE co_cr_sub_partzlib8192_1; --Create Uncompressed table of same schema definition CREATE TABLE co_cr_sub_partzlib8192_1_uncompr(id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int) WITH (appendonly=true, orientation=column) distributed randomly Partition by range(a1) Subpartition by list(a2) subpartition template ( subpartition sp1 values('M') , subpartition sp2 values('F') ) (start(1) end(5000) every(1000)) ; +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_cr_sub_partzlib8192_1_uncompr'::regclass; -- -- Insert to uncompressed table @@ -531,6 +532,7 @@ CREATE TABLE co_cr_sub_partzlib8192_1_2 COLUMN a1 encoding (compresstype = zlib), COLUMN a5 ENCODING (compresstype=zlib,compresslevel=1, blocksize=8192), DEFAULT COLUMN ENCODING (compresstype=zlib,compresslevel=1,blocksize=8192)) (partition p1 values('F'), partition p2 values ('M')); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_cr_sub_partzlib8192_1_2'::regclass; -- -- Create Indexes @@ -681,6 +683,7 @@ CREATE TABLE co_wt_sub_partrle_type8192_1 (id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int ) WITH (appendonly=true, orientation=column) distributed randomly Partition by range(a1) Subpartition by list(a2) subpartition template ( default subpartition df_sp, subpartition sp1 values('M') , subpartition sp2 values('F') WITH (appendonly=true, orientation=column,compresstype=rle_type,compresslevel=1,blocksize=8192)) (start(1) end(5000) every(1000) ); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_wt_sub_partrle_type8192_1'::regclass; -- -- Create Indexes @@ -702,6 +705,7 @@ ANALYZE co_wt_sub_partrle_type8192_1; --Create Uncompressed table of same schema definition CREATE TABLE co_wt_sub_partrle_type8192_1_uncompr(id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int) WITH (appendonly=true, orientation=column) distributed randomly Partition by range(a1) Subpartition by list(a2) subpartition template ( subpartition sp1 values('M') , subpartition sp2 values('F') ) (start(1) end(5000) every(1000)) ; +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_wt_sub_partrle_type8192_1_uncompr'::regclass; -- -- Insert to uncompressed table @@ -829,6 +833,7 @@ CREATE TABLE co_wt_sub_partrle_type8192_1_2 (id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int ) WITH (appendonly=true, orientation=column) distributed randomly Partition by list(a2) Subpartition by range(a1) subpartition template (default subpartition df_sp, start(1) end(5000) every(1000) WITH (appendonly=true, orientation=column,compresstype=rle_type,compresslevel=1,blocksize=8192)) (partition p1 values ('M'), partition p2 values ('F')); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'co_wt_sub_partrle_type8192_1_2'::regclass; -- -- Create Indexes @@ -981,6 +986,7 @@ CREATE TABLE ao_wt_sub_partzlib8192_5 (id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int ) WITH (appendonly=true, orientation=row) distributed randomly Partition by range(a1) Subpartition by list(a2) subpartition template ( default subpartition df_sp, subpartition sp1 values('M') , subpartition sp2 values('F') WITH (appendonly=true, orientation=row,compresstype=zlib,compresslevel=5,blocksize=8192)) (start(1) end(5000) every(1000) ); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ao_wt_sub_partzlib8192_5'::regclass; -- -- Create Indexes @@ -1128,6 +1134,7 @@ CREATE TABLE ao_wt_sub_partzlib8192_5_2 (id SERIAL,a1 int,a2 char(5),a3 numeric,a4 boolean DEFAULT false ,a5 char DEFAULT 'd',a6 text,a7 timestamp,a8 character varying(705),a9 bigint,a10 date,a11 varchar(600),a12 text,a13 decimal,a14 real,a15 bigint,a16 int4 ,a17 bytea,a18 timestamp with time zone,a19 timetz,a20 path,a21 box,a22 macaddr,a23 interval,a24 character varying(800),a25 lseg,a26 point,a27 double precision,a28 circle,a29 int4,a30 numeric(8),a31 polygon,a32 date,a33 real,a34 money,a35 cidr,a36 inet,a37 time,a38 text,a39 bit,a40 bit varying(5),a41 smallint,a42 int ) WITH (appendonly=true, orientation=row) distributed randomly Partition by list(a2) Subpartition by range(a1) subpartition template (default subpartition df_sp, start(1) end(5000) every(1000) WITH (appendonly=true, orientation=row,compresstype=zlib,compresslevel=5,blocksize=8192)) (partition p1 values ('M'), partition p2 values ('F')); +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ao_wt_sub_partzlib8192_5_2'::regclass; -- -- Create Indexes diff --git a/src/test/regress/sql/bfv_partition.sql b/src/test/regress/sql/bfv_partition.sql index bf705af1285..cc2b8989f43 100644 --- a/src/test/regress/sql/bfv_partition.sql +++ b/src/test/regress/sql/bfv_partition.sql @@ -1207,13 +1207,13 @@ ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (|); ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (~); ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (`); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; set client_min_messages='warning'; drop schema qa147 cascade; reset client_min_messages; -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); -- Mix-Match for Alter subpartition template CREATE TABLE qa147sales (trans_id int, date date, amount @@ -1231,29 +1231,29 @@ SUBPARTITION TEMPLATE -- Clear TEMPLATE ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE (); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; -- This will overwrite previous subpartition template ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; -- Invalid subpartition ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2008-02-01') EXCLUSIVE ); ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 month') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; -- Mix and Match RANGE/LIST . Expect to Error ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa1 VALUES('usa'), SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') EXCLUSIVE); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; -- Mix and Match RANGE/LIST . Expect to Error ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') EXCLUSIVE, SUBPARTITION usa1 VALUES('usa')); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; drop table qa147sales; @@ -1273,33 +1273,33 @@ SUBPARTITION TEMPLATE -- Clear TEMPLATE ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE (); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; -- This will overwrite previous subpartition template ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2008-02-01') EXCLUSIVE ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 month') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; -- Invalid subpartition template ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; -- Mix and Match RANGE/LIST . Expect to Error ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa1 VALUES('usa'), SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') EXCLUSIVE); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; -- Mix and Match RANGE/LIST . Expect to Error ALTER TABLE qa147sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') EXCLUSIVE, SUBPARTITION usa1 VALUES('usa')); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147sales'::regclass; drop table qa147sales; -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); -- Now with Schema -- Mix-Match for Alter subpartition template in a schema @@ -1319,32 +1319,32 @@ SUBPARTITION TEMPLATE -- Clear TEMPLATE ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; -- This will overwrite previous subpartition template ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; -- Invalid subpartition ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2008-02-01') EXCLUSIVE ); ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 month') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; -- Mix and Match RANGE/LIST . Expect to Error ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa1 VALUES('usa'), SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') EXCLUSIVE); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; -- Mix and Match RANGE/LIST . Expect to Error ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') EXCLUSIVE, SUBPARTITION usa1 VALUES('usa')); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; DROP SCHEMA qa147 cascade; -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); CREATE SCHEMA qa147; CREATE TABLE qa147.sales (trans_id int, date date, amount @@ -1363,33 +1363,33 @@ SUBPARTITION TEMPLATE -- Clear TEMPLATE ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE (); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; -- This will overwrite previous subpartition template ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2008-02-01') EXCLUSIVE ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usam1 start (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 month') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; -- Invalid subpartition template ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia') ); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; -- Mix and Match RANGE/LIST . Expect to Error ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usa1 VALUES('usa'), SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') EXCLUSIVE); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; -- Mix and Match RANGE/LIST . Expect to Error ALTER TABLE qa147.sales SET SUBPARTITION TEMPLATE ( SUBPARTITION usadate start (date '2008-01-01') INCLUSIVE END(date '2009-01-01') EXCLUSIVE, SUBPARTITION usa1 VALUES('usa')); -select relid::regclass, level, template from gp_partition_template where relid = 'qa147.sales'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'qa147.sales'::regclass; drop schema qa147 cascade; -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); set gp_autostats_mode=on_change; set gp_autostats_on_change_threshold=100; @@ -1474,7 +1474,7 @@ alter table partsupp_def set subpartition template( subpartition aaa start(400) -- Note 2: We do not support this function yet, but if we are able to split default partition with default subpartition, would we -- be using the subpartition template to definte the "new" partition or the existing one. -select relid::regclass, level, template from gp_partition_template where relid = 'partsupp_def'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'partsupp_def'::regclass; alter table partsup_def add partition f1 start(0) end (300) every(100); @@ -1494,7 +1494,7 @@ subpartition template alter table partsupp_def2 set subpartition template(); alter table partsupp_def2 set subpartition template( subpartition aaa start(400) end (600) every(100) ); -select relid::regclass, level, template from gp_partition_template where relid = 'partsupp_def2'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'partsupp_def2'::regclass; drop table partsupp_def; drop table partsupp_def2; @@ -1618,7 +1618,7 @@ drop table partition_cleanup1; drop schema partition_999 cascade; -- These should be empty -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); -- diff --git a/src/test/regress/sql/column_compression.sql b/src/test/regress/sql/column_compression.sql index 5849a935d3a..4f70667fedd 100644 --- a/src/test/regress/sql/column_compression.sql +++ b/src/test/regress/sql/column_compression.sql @@ -287,6 +287,7 @@ partition by range(j) ); execute ccddlcheck; +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ccddl'::regclass; insert into ccddl select 1, (i % 19) + 1, ((i+3) % 5) + 1, i+3 from generate_series(1, 100) i; @@ -367,6 +368,7 @@ subpartition template (subpartition sp1 start(1) end(20), (partition p1 start(1) end(20)); execute ccddlcheck; +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ccddl'::regclass; alter table ccddl alter partition p1 split partition sp1 at (10) into (partition sp2, partition sp3); execute ccddlcheck; @@ -400,6 +402,7 @@ CREATE TABLE ccddl (id int, year int, month int, day int, region text) ) ( START (2008) END (2010) ); execute ccddlcheck; +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ccddl'::regclass; -- Ensure we can read and write insert into ccddl select 1, 2008, 1, 2, 'usa' from generate_series(1, 100); @@ -512,6 +515,8 @@ alter table ccddl add partition newp with (appendonly=true, orientation=column); execute ccddlcheck; +SELECT level, pg_get_expr(template, relid) from gp_partition_template t WHERE t.relid = 'ccddl'::regclass; + drop table ccddl; ----------------------------------------------------------------------- @@ -527,8 +532,9 @@ create table gg (i int, k int) with (appendonly=true, orientation=column) partition by range(k) (partition p1 start(1) end(2), column i encoding(compresstype=sdf2sdf)); --- We don't support partition element specific encoding clauses in subpartition --- templates as we have no place to store them. +-- Historically we don't support partition element specific encoding clauses in +-- subpartition templates as we didn't have place to store them. We now have +-- place to store them if we want to, but for now we keep this door closed create table a (i int, j int) with (appendonly=true, orientation=column) partition by range(i) subpartition by range(j) subpartition template(start(1) end(10) default column encoding (compresstype=zlib), diff --git a/src/test/regress/sql/partition.sql b/src/test/regress/sql/partition.sql index f3d9c8f0acf..445b1cda74b 100644 --- a/src/test/regress/sql/partition.sql +++ b/src/test/regress/sql/partition.sql @@ -1549,7 +1549,7 @@ insert into bar_p values(5, 5); drop table bar_p; -- Drop should not leave anything lingering for bar_p or its -- subpartitions in pg_partition* catalog tables. -select relid, level, template from gp_partition_template where not exists (select oid from pg_class where oid = relid); +select relid, level, pg_get_expr(template, relid) from gp_partition_template where not exists (select oid from pg_class where oid = relid); -- MPP-4172 -- should fail @@ -1664,11 +1664,11 @@ select relid::regclass, level from gp_partition_template where relid = 'rank_set alter table rank_settemp set subpartition template (default subpartition def2); -- def2 is there -select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'rank_settemp'::regclass; alter table rank_settemp set subpartition template (default subpartition def2); -- Should still be there -select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'rank_settemp'::regclass; alter table rank_settemp set subpartition template (start (date '2006-01-01') with (appendonly=true)); @@ -1676,7 +1676,7 @@ alter table rank_settemp add partition f1 values ('N'); alter table rank_settemp set subpartition template (start (date '2007-01-01') with (appendonly=true, compresslevel=5)); alter table rank_settemp add partition f2 values ('C'); -select relid::regclass, level, template from gp_partition_template where relid = 'rank_settemp'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'rank_settemp'::regclass; drop table rank_settemp; @@ -2381,7 +2381,7 @@ subpartition l2 values (6,7,8,9,10) ); alter table mpp5992 set subpartition template (subpartition l1 values (1,2,3), subpartition l2 values (4,5,6), subpartition l3 values (7,8,9,10)); -select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'mpp5992'::regclass; -- Now we can add a new partition alter table mpp5992 @@ -2400,7 +2400,7 @@ start (date '2013-01-01') end (date '2014-01-01') WITH (appendonly=true); select * from pg_partition_tree('mpp5992'); select relname, relam, pg_get_expr(relpartbound, oid) from pg_class where relname like 'mpp5992%'; -select relid::regclass, level, template from gp_partition_template where relid = 'mpp5992'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'mpp5992'::regclass; -- MPP-10223: split subpartitions CREATE TABLE MPP10223pk @@ -2544,7 +2544,7 @@ subpartition by range(d) subpartition template (start (1) end (10) every (1)) (start (20) end (30) every (1)); -select relid::regclass, level, template from gp_partition_template where relid = 'MPP10480'::regclass; +select relid::regclass, level, pg_get_expr(template, relid) from gp_partition_template where relid = 'MPP10480'::regclass; -- MPP-10421: fix SPLIT of partitions with PRIMARY KEY constraint/indexes CREATE TABLE mpp10321a From fadf8d2121cc32b4cd62af40f269f28d6f3272cf Mon Sep 17 00:00:00 2001 From: hanwei Date: Fri, 29 Aug 2025 09:56:47 +0800 Subject: [PATCH 128/260] Fix dangling pointer issue when mix data from diffrent ORCA caches When execute many sql statements in a session, it maybe panic. Cause a kind of cache will refer another cache, but another cache's entries will be evicted over time and lead to dangling pointer. So deep copy is sometimes neccesary. --- src/backend/gpopt/translate/CTranslatorScalarToDXL.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/gpopt/translate/CTranslatorScalarToDXL.cpp b/src/backend/gpopt/translate/CTranslatorScalarToDXL.cpp index 83afda566bf..7256409eb54 100644 --- a/src/backend/gpopt/translate/CTranslatorScalarToDXL.cpp +++ b/src/backend/gpopt/translate/CTranslatorScalarToDXL.cpp @@ -542,7 +542,7 @@ CTranslatorScalarToDXL::CreateScalarCmpFromOpExpr( const CWStringConst *str = GetDXLArrayCmpType(mdid); CDXLScalarComp *dxlop = GPOS_NEW(m_mp) CDXLScalarComp( - m_mp, mdid, GPOS_NEW(m_mp) CWStringConst(str->GetBuffer())); + m_mp, mdid, GPOS_NEW(m_mp) CWStringConst(m_mp, str->GetBuffer())); // create the DXL node holding the scalar comparison operator CDXLNode *dxlnode = GPOS_NEW(m_mp) CDXLNode(m_mp, dxlop); @@ -592,7 +592,7 @@ CTranslatorScalarToDXL::TranslateOpExprToDXL( CDXLScalarOpExpr *dxlop = GPOS_NEW(m_mp) CDXLScalarOpExpr(m_mp, mdid, return_type_mdid, - GPOS_NEW(m_mp) CWStringConst(str->GetBuffer())); + GPOS_NEW(m_mp) CWStringConst(m_mp, str->GetBuffer())); // create the DXL node holding the scalar opexpr CDXLNode *dxlnode = GPOS_NEW(m_mp) CDXLNode(m_mp, dxlop); @@ -702,7 +702,7 @@ CTranslatorScalarToDXL::CreateScalarArrayCompFromExpr( m_mp, GPOS_NEW(m_mp) CMDIdGPDB(IMDId::EmdidGeneral, scalar_array_op_expr->opno), - GPOS_NEW(m_mp) CWStringConst(op_name->GetBuffer()), type); + GPOS_NEW(m_mp) CWStringConst(m_mp, op_name->GetBuffer()), type); // create the DXL node holding the scalar opexpr CDXLNode *dxlnode = GPOS_NEW(m_mp) CDXLNode(m_mp, dxlop); From 53e7baff12e2e1f3c6a1e8131e9ab72242398a8b Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Fri, 29 Aug 2025 12:03:17 +0000 Subject: [PATCH 129/260] PAX: Adapter the capacity of column by GUC The initial size of pax column is hard-coded to 2048. It may consume much memory for all pax columns when the inserted table is a large partition table. For extream example, the partition table has 2000+ leaf-partition tables, and each table has 300 columns. The writer backend will writes 600000+ columns in the same time. The initial capacity of column will affect the memory usage greatly. When the GUC pax_max_tuples_per_group is low, the large initial size will cause high memory usage that most of them is wasted. --- contrib/pax_storage/src/cpp/storage/columns/pax_column.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column.h b/contrib/pax_storage/src/cpp/storage/columns/pax_column.h index b713dbc73fb..45c78bc0de0 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_column.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column.h @@ -46,7 +46,7 @@ namespace pax { -#define DEFAULT_CAPACITY 2048 +#define DEFAULT_CAPACITY MIN(2048, MAX(16, MAXALIGN(pax::pax_max_tuples_per_group))) // Used to mapping pg_type enum PaxColumnTypeInMem { From a17d3cd91ee4f26324f8f14f43d5600f67abf77d Mon Sep 17 00:00:00 2001 From: Xun Gong Date: Wed, 3 Sep 2025 11:29:41 +0800 Subject: [PATCH 130/260] feat: use ColumnEncoding_Kind_DIRECT_DELTA as default in offset stream (#1337) * feat: use ColumnEncoding_Kind_DIRECT_DELTA as default in offset stream Optimize performance of variable-length column offsets by switching from Zstd to delta encoding. This approach better compresses incremental integer sequences, cutting disk space by more than half while maintaining performance. The following is a comparison of file sizes for different encoding methods on TPC-DS 20G: Name PAX(ZSTD) AOCS_SIZE PAX(Delta) PAX SIZE / AOCS * 100% call_center 12 kB 231 kB 10185 bytes 4.31% catalog_page 499 kB 653 kB 393 kB 60.18% catalog_returns 240 MB 171 MB 178 MB 104.09% catalog_sales 3033 MB 1837 MB 1977 MB 107.63% customer 16 MB 12 MB 12 MB 100.00% customer_address 7008 kB 3161 kB 3115 kB 98.54% customer_demographics 28 MB 8164 kB 9292 kB 113.82% date_dim 3193 kB 1406 kB 1249 kB 88.85% household_demographics 42 kB 248 kB 28 kB 11.29% income_band 1239 bytes 225 kB 1239 bytes 0.54% inventory 36 MB 71 MB 36 MB 50.70% item 3084 kB 2479 kB 2227 kB 89.84% promotion 27 kB 239 kB 18 kB 7.53% reason 2730 bytes 226 kB 2280 bytes 0.99% ship_mode 3894 bytes 227 kB 3315 bytes 1.43% store 23 kB 239 kB 18 kB 7.53% store_returns 400 MB 265 MB 277 MB 104.53% store_sales 4173 MB 2384 MB 2554 MB 107.12% time_dim 1702 kB 819 kB 627 kB 76.56% warehouse 5394 bytes 227 kB 4698 bytes 2.02% web_page 21 kB 236 kB 14 kB 5.93% web_returns 116 MB 83 MB 85 MB 102.41% web_sales 1513 MB 908 MB 982 MB 108.15% --- contrib/pax_storage/.gitignore | 1 + contrib/pax_storage/src/cpp/cmake/pax.cmake | 1 + .../src/cpp/cmake/pax_format.cmake | 1 + contrib/pax_storage/src/cpp/pax_gbench.cc | 302 ++++++++++- contrib/pax_storage/src/cpp/pax_gbench.h | 72 +++ .../cpp/storage/columns/pax_column_test.cc | 15 +- .../cpp/storage/columns/pax_compress_bench.cc | 421 +++++++++++++++ .../src/cpp/storage/columns/pax_decoding.cc | 3 +- .../cpp/storage/columns/pax_delta_encoding.cc | 511 ++++++++++++++++++ .../cpp/storage/columns/pax_delta_encoding.h | 135 +++++ .../columns/pax_delta_encoding_test.cc | 339 ++++++++++++ .../cpp/storage/columns/pax_dict_encoding.h | 15 +- .../src/cpp/storage/columns/pax_encoding.cc | 4 +- .../src/cpp/storage/columns/pax_encoding.h | 2 + .../columns/pax_encoding_non_fixed_column.cc | 88 ++- .../columns/pax_encoding_non_fixed_column.h | 3 + .../cpp/storage/columns/pax_encoding_test.cc | 92 ++++ .../cpp/storage/columns/pax_rlev2_encoding.h | 4 + .../columns/pax_vec_encoding_column.cc | 2 +- .../storage/columns/pax_vec_encoding_column.h | 3 + .../src/cpp/storage/micro_partition.h | 1 - .../src/cpp/storage/orc/orc_writer.cc | 18 +- contrib/pax_storage/src/cpp/storage/pax.cc | 22 +- .../pax_storage/src/cpp/storage/pax_defined.h | 2 +- .../src/test/regress/expected/gp_toolkit.out | 2 +- 25 files changed, 1989 insertions(+), 70 deletions(-) create mode 100644 contrib/pax_storage/src/cpp/pax_gbench.h create mode 100644 contrib/pax_storage/src/cpp/storage/columns/pax_compress_bench.cc create mode 100644 contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.cc create mode 100644 contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.h create mode 100644 contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding_test.cc diff --git a/contrib/pax_storage/.gitignore b/contrib/pax_storage/.gitignore index 51a328f84e0..87aa2a4a742 100644 --- a/contrib/pax_storage/.gitignore +++ b/contrib/pax_storage/.gitignore @@ -12,6 +12,7 @@ Thumbs.db # Temp files dir +bench_data .tmp/** build*/** results/** diff --git a/contrib/pax_storage/src/cpp/cmake/pax.cmake b/contrib/pax_storage/src/cpp/cmake/pax.cmake index 71775bac2dd..099a66f30d8 100644 --- a/contrib/pax_storage/src/cpp/cmake/pax.cmake +++ b/contrib/pax_storage/src/cpp/cmake/pax.cmake @@ -51,6 +51,7 @@ set(pax_storage_src storage/columns/pax_dict_encoding.cc storage/columns/pax_decoding.cc storage/columns/pax_encoding.cc + storage/columns/pax_delta_encoding.cc storage/columns/pax_rlev2_decoding.cc storage/columns/pax_rlev2_encoding.cc storage/columns/pax_vec_bitpacked_column.cc diff --git a/contrib/pax_storage/src/cpp/cmake/pax_format.cmake b/contrib/pax_storage/src/cpp/cmake/pax_format.cmake index 4bdc25671f9..5a12185a0e6 100644 --- a/contrib/pax_storage/src/cpp/cmake/pax_format.cmake +++ b/contrib/pax_storage/src/cpp/cmake/pax_format.cmake @@ -41,6 +41,7 @@ set(pax_storage_src storage/columns/pax_dict_encoding.cc storage/columns/pax_decoding.cc storage/columns/pax_encoding.cc + storage/columns/pax_delta_encoding.cc storage/columns/pax_rlev2_decoding.cc storage/columns/pax_rlev2_encoding.cc storage/columns/pax_vec_column.cc diff --git a/contrib/pax_storage/src/cpp/pax_gbench.cc b/contrib/pax_storage/src/cpp/pax_gbench.cc index 82dbaaa7bb2..b6a0ecb0c76 100644 --- a/contrib/pax_storage/src/cpp/pax_gbench.cc +++ b/contrib/pax_storage/src/cpp/pax_gbench.cc @@ -25,12 +25,310 @@ *------------------------------------------------------------------------- */ +#include "pax_gbench.h" + +#include "comm/cbdb_api.h" + #include -static void example_benchmark(benchmark::State &state) { +#include +#include +#include + +#include "access/paxc_rel_options.h" +#include "comm/cbdb_wrappers.h" +#include "cpp-stub/src/stub.h" +#include "storage/micro_partition_iterator.h" +#include "storage/pax.h" +#include "storage/strategy.h" + +namespace pax::bench { + +// Create memory context for benchmark +void CreateMemoryContext() { + MemoryContext test_memory_context = AllocSetContextCreate( + (MemoryContext)NULL, "TestMemoryContext", 80 * 1024 * 1024, + 80 * 1024 * 1024, 80 * 1024 * 1024); + MemoryContextSwitchTo(test_memory_context); +} + +// Global registry +class BenchmarkRegistry { + private: + std::vector init_functions_; + std::vector cleanup_functions_; + bool initialized_ = false; + + public: + void RegisterInitFunction(InitFunction func) { + init_functions_.push_back(func); + } + + void RegisterCleanupFunction(CleanupFunction func) { + cleanup_functions_.push_back(func); + } + + void RunAllInitFunctions() { + if (initialized_) return; + + printf("Running PAX Benchmark Suite...\n"); + printf("Initializing all benchmark modules...\n\n"); + + for (const auto &func : init_functions_) { + func(); + } + initialized_ = true; + } + + void RunAllCleanupFunctions() { + if (!initialized_) return; + + printf("\nCleaning up all benchmark modules...\n"); + + // Cleanup functions executed in reverse order + for (auto it = cleanup_functions_.rbegin(); it != cleanup_functions_.rend(); + ++it) { + (*it)(); + } + initialized_ = false; + } +}; + +// Global registry access function +BenchmarkRegistry &GetBenchmarkRegistry() { + static BenchmarkRegistry instance; + return instance; +} + +// Registration functions +void RegisterBenchmarkInit(InitFunction func) { + GetBenchmarkRegistry().RegisterInitFunction(func); +} + +void RegisterBenchmarkCleanup(CleanupFunction func) { + GetBenchmarkRegistry().RegisterCleanupFunction(func); +} + +// Global Mock functions for benchmark framework +bool MockMinMaxGetStrategyProcinfo(Oid, Oid, Oid *, FmgrInfo *, + StrategyNumber) { + return false; +} + +int32 MockGetFastSequences(Oid) { + static int32 mock_id = 0; + return mock_id++; +} + +void MockInsertMicroPartitionPlaceHolder(Oid, int) {} +void MockDeleteMicroPartitionEntry(Oid, Snapshot, int) {} +void MockExecStoreVirtualTuple(TupleTableSlot *) {} + +std::string MockBuildPaxDirectoryPath(RelFileNode rnode, BackendId backend_id) { + // Create a simple file path for benchmarks + return std::string("./bench_data"); +} + +std::vector MockGetMinMaxColumnIndexes(Relation) { + return std::vector(); +} + +std::vector MockBloomFilterColumnIndexes(Relation) { + return std::vector(); +} + +std::vector> MockGetRelEncodingOptions( + Relation relation) { + std::vector> encoding_opts; + + // Get number of columns from relation + int num_columns = 10; // default for benchmark + if (relation && relation->rd_att) { + num_columns = relation->rd_att->natts; + } + + // Create encoding options for each column (NO_ENCODED, 0) + for (int i = 0; i < num_columns; i++) { + encoding_opts.emplace_back( + std::make_tuple(ColumnEncoding_Kind_NO_ENCODED, 0)); + } + + return encoding_opts; +} + +// Mock TupleDescInitEntry that doesn't rely on SYSCACHE +void MockTupleDescInitEntry(TupleDesc desc, AttrNumber attributeNumber, + const char *attributeName, Oid oidtypeid, + int32 typmod, int attdim) { + // Basic validation + if (attributeNumber < 1 || attributeNumber > desc->natts) { + return; + } + + Form_pg_attribute att = TupleDescAttr(desc, attributeNumber - 1); + + // Set basic attribute properties + namestrcpy(&(att->attname), attributeName); + att->atttypid = oidtypeid; + att->atttypmod = typmod; + att->attndims = attdim; + att->attnum = attributeNumber; + att->attnotnull = false; + att->atthasdef = false; + att->attidentity = '\0'; + att->attgenerated = '\0'; + att->attisdropped = false; + att->attislocal = true; + att->attinhcount = 0; + att->attcollation = InvalidOid; + + // Set type-specific properties based on OID (hardcoded for common types) + switch (oidtypeid) { + case INT2OID: // smallint + att->attlen = 2; + att->attalign = 's'; + att->attstorage = 'p'; + att->attbyval = true; + break; + case INT4OID: // integer + att->attlen = 4; + att->attalign = 'i'; + att->attstorage = TYPSTORAGE_PLAIN; + att->attbyval = true; + break; + case INT8OID: // bigint + att->attlen = 8; + att->attalign = 'd'; + att->attstorage = TYPSTORAGE_PLAIN; + att->attbyval = FLOAT8PASSBYVAL; + break; + case FLOAT8OID: // double precision + att->attlen = 8; + att->attalign = 'd'; + att->attstorage = 'p'; + att->attbyval = FLOAT8PASSBYVAL; + break; + case BOOLOID: // boolean + att->attlen = 1; + att->attalign = 'c'; + att->attstorage = 'p'; + att->attbyval = true; + break; + case TEXTOID: // text + att->attlen = -1; + att->attalign = 'i'; + att->attstorage = TYPSTORAGE_PLAIN; + att->attbyval = false; + att->attcollation = DEFAULT_COLLATION_OID; + break; + case NUMERICOID: // numeric + att->attlen = -1; + att->attalign = TYPALIGN_INT; + att->attstorage = TYPSTORAGE_PLAIN; + att->attbyval = false; + break; + case TIMESTAMPOID: // timestamp + att->attlen = 8; + att->attalign = 'd'; + att->attstorage = TYPSTORAGE_PLAIN; + att->attbyval = FLOAT8PASSBYVAL; + break; + default: + // Default values for unknown types + att->attlen = -1; + att->attalign = 'i'; + att->attstorage = 'p'; + att->attbyval = false; + break; + } +} + +// Global initialization function for general benchmark framework +void GlobalBenchmarkInit() { + static bool global_initialized = false; + if (global_initialized) return; + + printf("Initializing PAX benchmark framework...\n"); + + // Initialize memory context + MemoryContextInit(); + + // Setup global Mock functions + static std::unique_ptr stub_global = std::make_unique(); + + stub_global->set(MinMaxGetPgStrategyProcinfo, MockMinMaxGetStrategyProcinfo); + stub_global->set(CPaxGetFastSequences, MockGetFastSequences); + stub_global->set(cbdb::BuildPaxDirectoryPath, MockBuildPaxDirectoryPath); + stub_global->set(cbdb::InsertMicroPartitionPlaceHolder, + MockInsertMicroPartitionPlaceHolder); + stub_global->set(cbdb::DeleteMicroPartitionEntry, + MockDeleteMicroPartitionEntry); + stub_global->set(cbdb::GetMinMaxColumnIndexes, MockGetMinMaxColumnIndexes); + stub_global->set(cbdb::GetBloomFilterColumnIndexes, + MockBloomFilterColumnIndexes); + stub_global->set(cbdb::GetRelEncodingOptions, MockGetRelEncodingOptions); + stub_global->set(ExecStoreVirtualTuple, MockExecStoreVirtualTuple); + stub_global->set(TupleDescInitEntry, MockTupleDescInitEntry); + + // Create basic test directory + system("mkdir -p ./bench_data"); + + global_initialized = true; + printf("PAX benchmark framework initialized.\n"); +} + +// Global cleanup function for general benchmark framework +void GlobalBenchmarkCleanup() { + printf("Cleaning up PAX benchmark framework...\n"); + + // Clean up test directory + // system("rm -rf ./bench_data"); + + // Reset memory context + if (TopMemoryContext) { + MemoryContextReset(TopMemoryContext); + } + + printf("PAX benchmark framework cleaned up.\n"); +} + +// Example benchmark test +static void example_benchmark(::benchmark::State &state) { for (auto _ : state) { + // Empty example test } } BENCHMARK(example_benchmark); -BENCHMARK_MAIN(); \ No newline at end of file +} // namespace pax::benchmark + +// Global cleanup function (C-style for atexit) +static void cleanup_all() { + pax::bench::GetBenchmarkRegistry().RunAllCleanupFunctions(); + pax::bench::GlobalBenchmarkCleanup(); +} + +// Main entry function +int main(int argc, char **argv) { + // Register global cleanup function + std::atexit(cleanup_all); + + // Global initialization + pax::bench::GlobalBenchmarkInit(); + + // Run all registered initialization functions + pax::bench::GetBenchmarkRegistry().RunAllInitFunctions(); + + // Initialize benchmark framework + ::benchmark::Initialize(&argc, argv); + if (::benchmark::ReportUnrecognizedArguments(argc, argv)) return 1; + + printf("\n=== Starting PAX Benchmark Suite ===\n"); + printf("Use --benchmark_filter= to run specific tests\n"); + printf("Use --benchmark_list_tests to see all available tests\n\n"); + + // Run benchmark + ::benchmark::RunSpecifiedBenchmarks(); + + return 0; +} \ No newline at end of file diff --git a/contrib/pax_storage/src/cpp/pax_gbench.h b/contrib/pax_storage/src/cpp/pax_gbench.h new file mode 100644 index 00000000000..44376022693 --- /dev/null +++ b/contrib/pax_storage/src/cpp/pax_gbench.h @@ -0,0 +1,72 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * pax_gbench.h + * + * IDENTIFICATION + * contrib/pax_storage/src/cpp/pax_gbench.h + * + *------------------------------------------------------------------------- + */ + +#pragma once + +#include +#include + +namespace pax { + +namespace bench { + +// Generic initialization and cleanup function types +using InitFunction = std::function; +using CleanupFunction = std::function; + +// Create memory context for benchmark +extern void CreateMemoryContext(); + +// Forward declaration +class BenchmarkRegistry; + +// Global registry access function +BenchmarkRegistry &GetBenchmarkRegistry(); + +// Global initialization and cleanup functions +void GlobalBenchmarkInit(); +void GlobalBenchmarkCleanup(); + +// Registration functions (implemented in pax_gbench.cc) +void RegisterBenchmarkInit(InitFunction func); +void RegisterBenchmarkCleanup(CleanupFunction func); + +} // namespace benchmark +} // namespace pax + +// Convenient registration macros +#define REGISTER_BENCHMARK_INIT(func) \ + static bool BENCHMARK_INIT_##__COUNTER__ = []() { \ + pax::bench::RegisterBenchmarkInit(func); \ + return true; \ + }() + +#define REGISTER_BENCHMARK_CLEANUP(func) \ + static bool BENCHMARK_CLEANUP_##__COUNTER__ = []() { \ + pax::bench::RegisterBenchmarkCleanup(func); \ + return true; \ + }() diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc index dfd346ef615..b26fdff65bf 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc @@ -697,7 +697,6 @@ TEST_P(PaxNonFixedColumnCompressTest, auto number = ::testing::get<0>(GetParam()); auto kind = ::testing::get<1>(GetParam()); auto verify_range = ::testing::get<2>(GetParam()); - auto enable_offsets_encoding = ::testing::get<2>(GetParam()); const size_t number_of_rows = 1024; PaxEncoder::EncodingOption encoding_option; @@ -705,10 +704,9 @@ TEST_P(PaxNonFixedColumnCompressTest, encoding_option.compress_level = 5; encoding_option.is_sign = true; - if (enable_offsets_encoding) { - encoding_option.offsets_encode_type = kind; - encoding_option.offsets_compress_level = 5; - } + encoding_option.offsets_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + encoding_option.offsets_compress_level = 5; non_fixed_column = new PaxNonFixedEncodingColumn( number_of_rows, number_of_rows, std::move(encoding_option)); @@ -744,10 +742,9 @@ TEST_P(PaxNonFixedColumnCompressTest, decoding_option.is_sign = true; decoding_option.compress_level = 5; - if (enable_offsets_encoding) { - decoding_option.offsets_encode_type = kind; - decoding_option.offsets_compress_level = 5; - } + decoding_option.offsets_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + decoding_option.offsets_compress_level = 5; auto non_fixed_column_for_read = new PaxNonFixedEncodingColumn( number_of_rows * number, sizeof(int32) * number_of_rows, diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_compress_bench.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_compress_bench.cc new file mode 100644 index 00000000000..0a792601e99 --- /dev/null +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_compress_bench.cc @@ -0,0 +1,421 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * pax_compress_bench.cc + * + * IDENTIFICATION + * contrib/pax_storage/src/cpp/storage/columns/pax_compress_bench.cc + * + *------------------------------------------------------------------------- + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "comm/cbdb_wrappers.h" +#include "comm/pax_memory.h" +#include "pax_gbench.h" +#include "storage/columns/pax_compress.h" +#include "storage/columns/pax_decoding.h" +#include "storage/columns/pax_delta_encoding.h" +#include "storage/columns/pax_rlev2_encoding.h" +#include "storage/pax_buffer.h" + +namespace pax::bench { + +namespace { + +// Test data and prebuilt buffers for decode/decompress benchmarks +static const size_t kCount = 1024 * 1024; +static std::vector g_offsets; +static std::unique_ptr g_raw_bytes; +static size_t g_raw_len = 0; + +static std::vector g_rle_encoded; +static size_t g_rle_len = 0; + +static std::vector g_delta_encoded; +static size_t g_delta_len = 0; + +static std::unique_ptr g_zstd_compressed; +static size_t g_zstd_len = 0; + +static std::shared_ptr g_zstd; + +// Simple helpers for bench data persistence +static void EnsureDirExists(const char *dir_path) { + if (mkdir(dir_path, 0755) != 0) { + if (errno != EEXIST) { + std::cerr << "Failed to create directory: " << dir_path << std::endl; + std::abort(); + } + } +} + +static bool ReadWholeFile(const char *path, std::vector &out) { + std::ifstream in(path, std::ios::binary); + if (!in.is_open()) return false; + in.seekg(0, std::ios::end); + std::streampos size = in.tellg(); + if (size <= 0) return false; + out.resize(static_cast(size)); + in.seekg(0, std::ios::beg); + in.read(out.data(), size); + return static_cast(in); +} + +static bool ReadWholeFile(const char *path, std::unique_ptr &out, + size_t &out_len) { + std::ifstream in(path, std::ios::binary); + if (!in.is_open()) return false; + in.seekg(0, std::ios::end); + std::streampos size = in.tellg(); + if (size <= 0) return false; + out_len = static_cast(size); + out = std::make_unique(out_len); + in.seekg(0, std::ios::beg); + in.read(out.get(), size); + return static_cast(in); +} + +static void WriteWholeFile(const char *path, const char *data, size_t len) { + std::ofstream out(path, std::ios::binary | std::ios::trunc); + if (!out.is_open()) { + std::cerr << "Failed to open file for write: " << path << std::endl; + std::abort(); + } + out.write(data, static_cast(len)); + if (!out) { + std::cerr << "Failed to write file: " << path << std::endl; + std::abort(); + } +} + +static const char *kBenchDataDir = "bench_data"; +static const char *kRLEV2Path = "bench_data/rle_v2_u32.bin"; +static const char *kDeltaPath = "bench_data/delta_u32.bin"; +static const char *kZSTDPath = "bench_data/zstd_u32.bin"; +static const char *kRawPath = "bench_data/raw_u32.bin"; + +static std::vector GenerateMonotonicOffsets(size_t n, uint32_t seed) { + std::vector offsets; + offsets.resize(n); + offsets[0] = 0; + std::mt19937 rng(seed); + std::uniform_int_distribution step_dist(1, 256); + for (size_t i = 1; i < n; ++i) { + offsets[i] = offsets[i - 1] + static_cast(step_dist(rng)); + } + return offsets; +} + +// Lazily ensure raw bytes are available (prefer loading from disk) +static void EnsureRawData() { + if (g_raw_len != 0 && g_raw_bytes) return; + EnsureDirExists(kBenchDataDir); + std::vector raw_from_file; + if (ReadWholeFile(kRawPath, raw_from_file)) { + g_raw_len = raw_from_file.size(); + g_raw_bytes = std::make_unique(g_raw_len); + std::memcpy(g_raw_bytes.get(), raw_from_file.data(), g_raw_len); + return; + } + // Fallback: generate and persist + g_offsets = GenerateMonotonicOffsets(kCount, /*seed=*/12345); + g_raw_len = g_offsets.size() * sizeof(uint32_t); + g_raw_bytes = std::make_unique(g_raw_len); + std::memcpy(g_raw_bytes.get(), g_offsets.data(), g_raw_len); + WriteWholeFile(kRawPath, g_raw_bytes.get(), g_raw_len); +} + +// Lazily ensure RLEv2 encoded buffer exists (load or build from raw) +static void EnsureRleEncoded() { + if (g_rle_len != 0 && !g_rle_encoded.empty()) return; + EnsureDirExists(kBenchDataDir); + if (ReadWholeFile(kRLEV2Path, g_rle_encoded)) { + g_rle_len = g_rle_encoded.size(); + return; + } + EnsureRawData(); + PaxEncoder::EncodingOption enc_opt; + enc_opt.column_encode_type = ColumnEncoding_Kind_RLE_V2; + enc_opt.is_sign = false; + + PaxOrcEncoder rle_encoder(enc_opt); + auto rle_out = std::make_shared>(g_raw_len); + rle_encoder.SetDataBuffer(rle_out); + // encode directly from raw bytes to avoid depending on g_offsets + size_t count = g_raw_len / sizeof(uint32_t); + const uint32_t *vals = reinterpret_cast(g_raw_bytes.get()); + for (size_t i = 0; i < count; ++i) { + uint32_t v = vals[i]; + rle_encoder.Append(reinterpret_cast(&v), sizeof(uint32_t)); + } + rle_encoder.Flush(); + + g_rle_len = rle_encoder.GetBufferSize(); + g_rle_encoded.assign(rle_encoder.GetBuffer(), + rle_encoder.GetBuffer() + g_rle_len); + WriteWholeFile(kRLEV2Path, g_rle_encoded.data(), g_rle_len); +} + +// Lazily ensure Delta encoded buffer exists (load or build from raw) +static void EnsureDeltaEncoded() { + if (g_delta_len != 0 && !g_delta_encoded.empty()) return; + EnsureDirExists(kBenchDataDir); + if (ReadWholeFile(kDeltaPath, g_delta_encoded)) { + g_delta_len = g_delta_encoded.size(); + return; + } + EnsureRawData(); + PaxEncoder::EncodingOption enc_opt; + enc_opt.is_sign = false; + // type not used by PaxDeltaEncoder + PaxDeltaEncoder delta_encoder(enc_opt); + auto delta_out = std::make_shared>(g_raw_len); + delta_encoder.SetDataBuffer(delta_out); + // Encode whole array in one shot + delta_encoder.Append(g_raw_bytes.get(), g_raw_len); + delta_encoder.Flush(); + + g_delta_len = delta_encoder.GetBufferSize(); + g_delta_encoded.assign(delta_encoder.GetBuffer(), + delta_encoder.GetBuffer() + g_delta_len); + WriteWholeFile(kDeltaPath, g_delta_encoded.data(), g_delta_len); +} + +// Lazily ensure ZSTD compressed buffer exists (load or build from raw) +static void EnsureZstdCompressed() { + EnsureDirExists(kBenchDataDir); + if (!g_zstd) { + g_zstd = + PaxCompressor::CreateBlockCompressor(ColumnEncoding_Kind_COMPRESS_ZSTD); + if (!g_zstd) { + std::cerr << "Failed to create ZSTD compressor" << std::endl; + std::abort(); + } + } + if (g_zstd_len != 0 && g_zstd_compressed) return; + if (ReadWholeFile(kZSTDPath, g_zstd_compressed, g_zstd_len)) { + return; + } + EnsureRawData(); + size_t bound = g_zstd->GetCompressBound(g_raw_len); + g_zstd_compressed = std::make_unique(bound); + g_zstd_len = g_zstd->Compress(g_zstd_compressed.get(), bound, + g_raw_bytes.get(), g_raw_len, /*lvl=*/5); + if (g_zstd->IsError(g_zstd_len) || g_zstd_len == 0) { + std::cerr << "ZSTD one-time compress failed" << std::endl; + std::abort(); + } + WriteWholeFile(kZSTDPath, g_zstd_compressed.get(), g_zstd_len); +} + +static void PrepareOnce() { + pax::bench::CreateMemoryContext(); + EnsureDirExists(kBenchDataDir); +} + +static void CleanupBenchData() { + const char *files[] = {kRLEV2Path, kDeltaPath, kZSTDPath, kRawPath}; + for (const char *p : files) { + std::remove(p); + } + + rmdir(kBenchDataDir); +} + +} // namespace + +// Register module init with gbench framework +REGISTER_BENCHMARK_INIT(PrepareOnce); +REGISTER_BENCHMARK_CLEANUP(CleanupBenchData); + +// RLEv2 encode benchmark +static void BM_RLEV2_Encode(::benchmark::State &state) { + // Prepare raw data only; no encoded buffers are created here + EnsureRawData(); + for (auto _ : state) { + PaxEncoder::EncodingOption enc_opt; + enc_opt.column_encode_type = ColumnEncoding_Kind_RLE_V2; + enc_opt.is_sign = false; + + PaxOrcEncoder encoder(enc_opt); + auto out = std::make_shared>(g_raw_len); + encoder.SetDataBuffer(out); + + size_t count = g_raw_len / sizeof(uint32_t); + const uint32_t *vals = + reinterpret_cast(g_raw_bytes.get()); + for (size_t i = 0; i < count; ++i) { + uint32_t v = vals[i]; + encoder.Append(reinterpret_cast(&v), sizeof(uint32_t)); + } + encoder.Flush(); + g_rle_len = encoder.GetBufferSize(); + benchmark::DoNotOptimize(encoder.GetBuffer()); + benchmark::ClobberMemory(); + } + state.SetBytesProcessed(static_cast(state.iterations()) * + static_cast(g_raw_len)); + state.counters["raw_kb"] = + benchmark::Counter(static_cast(g_raw_len) / (1024.0)); + state.counters["rle_kb"] = + benchmark::Counter(static_cast(g_rle_len) / (1024.0)); +} +BENCHMARK(BM_RLEV2_Encode); + +// RLEv2 decode benchmark +static void BM_RLEV2_Decode(::benchmark::State &state) { + // Ensure we have raw size and encoded buffer ready (prefer from disk) + EnsureRawData(); + EnsureRleEncoded(); + for (auto _ : state) { + PaxDecoder::DecodingOption dec_opt; + dec_opt.column_encode_type = ColumnEncoding_Kind_RLE_V2; + dec_opt.is_sign = false; + + auto decoder = PaxDecoder::CreateDecoder(dec_opt); + auto out = std::make_shared>(g_raw_len); + decoder->SetSrcBuffer(g_rle_encoded.data(), g_rle_len); + decoder->SetDataBuffer(out); + size_t n = decoder->Decoding(); + benchmark::DoNotOptimize(n); + benchmark::ClobberMemory(); + } + state.SetBytesProcessed(static_cast(state.iterations()) * + static_cast(g_raw_len)); +} +BENCHMARK(BM_RLEV2_Decode); + +// Delta encode benchmark +static void BM_Delta_Encode(::benchmark::State &state) { + EnsureRawData(); + for (auto _ : state) { + PaxEncoder::EncodingOption enc_opt; + enc_opt.is_sign = false; + PaxDeltaEncoder encoder(enc_opt); + auto out = std::make_shared>(g_raw_len); + encoder.SetDataBuffer(out); + encoder.Append(g_raw_bytes.get(), g_raw_len); + encoder.Flush(); + g_delta_len = encoder.GetBufferSize(); + benchmark::DoNotOptimize(encoder.GetBuffer()); + benchmark::ClobberMemory(); + } + state.SetBytesProcessed(static_cast(state.iterations()) * + static_cast(g_raw_len)); + state.counters["delta_kb"] = + benchmark::Counter(static_cast(g_delta_len) / (1024.0)); +} +BENCHMARK(BM_Delta_Encode); + +// Delta decode benchmark +static void BM_Delta_Decode(::benchmark::State &state) { + EnsureRawData(); + EnsureDeltaEncoded(); + for (auto _ : state) { + PaxDecoder::DecodingOption dec_opt; + dec_opt.is_sign = false; + dec_opt.column_encode_type = ColumnEncoding_Kind_DIRECT_DELTA; + PaxDeltaDecoder decoder(dec_opt); + auto out = std::make_shared>(g_raw_len); + decoder.SetSrcBuffer(g_delta_encoded.data(), g_delta_len); + decoder.SetDataBuffer(out); + size_t n = decoder.Decoding(); + if (n != g_raw_len / sizeof(uint32_t) && out->Used() != g_raw_len) { + std::cerr << "Delta decode failed, n: " << n + << ", g_raw_len: " << g_raw_len + << ", g_delta_len: " << g_delta_len + << ", out: Used: " << out->Used() << std::endl; + std::abort(); + } + + if (memcmp(out->GetBuffer(), g_raw_bytes.get(), g_raw_len) != 0) { + std::cerr << "Delta decode failed, out: " << out->GetBuffer() + << ", g_raw_bytes: " << g_raw_bytes.get() << std::endl; + std::abort(); + } + + benchmark::DoNotOptimize(n); + benchmark::ClobberMemory(); + } + state.SetBytesProcessed(static_cast(state.iterations()) * + static_cast(g_raw_len)); +} +BENCHMARK(BM_Delta_Decode); + +// ZSTD compress benchmark +static void BM_ZSTD_Compress(::benchmark::State &state) { + EnsureRawData(); + if (!g_zstd) { + g_zstd = + PaxCompressor::CreateBlockCompressor(ColumnEncoding_Kind_COMPRESS_ZSTD); + if (!g_zstd) { + std::cerr << "Failed to create ZSTD compressor" << std::endl; + std::abort(); + } + } + size_t bound = g_zstd->GetCompressBound(g_raw_len); + std::unique_ptr dst(new char[bound]); + for (auto _ : state) { + size_t n = g_zstd->Compress(dst.get(), bound, g_raw_bytes.get(), g_raw_len, + /*lvl=*/5); + g_zstd_len = n; + benchmark::DoNotOptimize(n); + benchmark::ClobberMemory(); + } + state.SetBytesProcessed(static_cast(state.iterations()) * + static_cast(g_raw_len)); + state.counters["zstd_kb"] = + benchmark::Counter(static_cast(g_zstd_len) / (1024.0)); +} +BENCHMARK(BM_ZSTD_Compress); + +// ZSTD decompress benchmark +static void BM_ZSTD_Decompress(::benchmark::State &state) { + EnsureRawData(); + EnsureZstdCompressed(); + std::unique_ptr dst(new char[g_raw_len]); + for (auto _ : state) { + size_t n = g_zstd->Decompress(dst.get(), g_raw_len, g_zstd_compressed.get(), + g_zstd_len); + benchmark::DoNotOptimize(n); + benchmark::ClobberMemory(); + } + state.SetBytesProcessed(static_cast(state.iterations()) * + static_cast(g_raw_len)); +} +BENCHMARK(BM_ZSTD_Decompress); + +} // namespace pax::bench diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_decoding.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_decoding.cc index 7ba0fcd6768..0e15ec52088 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_decoding.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_decoding.cc @@ -31,6 +31,7 @@ #include "comm/pax_memory.h" #include "storage/columns/pax_dict_encoding.h" #include "storage/columns/pax_rlev2_decoding.h" +#include "storage/columns/pax_delta_encoding.h" namespace pax { @@ -47,7 +48,7 @@ std::shared_ptr PaxDecoder::CreateDecoder(const DecodingOption &deco break; } case ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA: { - /// TODO(jiaqizho) support it + decoder = std::make_shared>(decoder_options); break; } case ColumnEncoding_Kind::ColumnEncoding_Kind_DICTIONARY: { diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.cc new file mode 100644 index 00000000000..3f4b5341c4a --- /dev/null +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.cc @@ -0,0 +1,511 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * pax_delta_encoding.cc + * + * IDENTIFICATION + * contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.cc + * + *------------------------------------------------------------------------- + */ +#include "storage/columns/pax_delta_encoding.h" + +#include +#include +#include + +namespace pax { + +// delta bitpack encoder +template +PaxDeltaEncoder::PaxDeltaEncoder(const EncodingOption &encoder_options) + : PaxEncoder(encoder_options) {} + +template +void PaxDeltaEncoder::Append(char *data, size_t size) { + CBDB_CHECK(!has_append_, cbdb::CException::kExTypeAbort, + fmt("PaxDeltaEncoder::Append only support Append Once")); + has_append_ = true; + + auto T_data = reinterpret_cast(data); + auto T_data_len = size / sizeof(T); + Encode(T_data, T_data_len); +} + +inline uint8_t NumBitsAllowZero(uint32_t value) { + if (value == 0) return 0; + uint8_t bits = 0; + while (value) { + bits++; + value >>= 1; + } + return bits; +} + +// Fast bit width calculation (0 -> 0) +inline static uint8_t FastNumBits(uint32_t v) { +#if defined(__GNUC__) || defined(__clang__) + return v == 0 ? 0 : static_cast(32 - __builtin_clz(v)); +#else + uint8_t bits = 0; + while (v) { + ++bits; + v >>= 1; + } + return bits; +#endif +} + +// 64-bit bit writer based on raw pointer (writes to reserved DataBuffer range) +struct BitWriter64Ptr { + uint8_t *out; + size_t index; + uint64_t bit_buffer; + uint32_t bit_count; + + BitWriter64Ptr(uint8_t *p) : out(p), index(0), bit_buffer(0), bit_count(0) {} + + inline void Append(uint32_t value, uint8_t width) { + if (width == 0) return; + bit_buffer |= (static_cast(value) << bit_count); + bit_count += width; + while (bit_count >= 8) { + out[index++] = static_cast(bit_buffer & 0xFF); + bit_buffer >>= 8; + bit_count -= 8; + } + } + + inline void FlushToByte() { + if (bit_count > 0) { + out[index++] = static_cast(bit_buffer & 0xFF); + bit_buffer = 0; + bit_count = 0; + } + } +}; + +// 64-bit bit reader based on raw pointer (limited to specified payload bytes) +struct BitReader64Ptr { + const uint8_t *in; + size_t size; + size_t index; + uint64_t bit_buffer; + uint32_t bit_count; + + BitReader64Ptr(const uint8_t *p, size_t len) + : in(p), size(len), index(0), bit_buffer(0), bit_count(0) {} + + inline void Ensure(uint32_t need_bits) { + while (bit_count < need_bits && index < size) { + bit_buffer |= (static_cast(in[index]) << bit_count); + ++index; + bit_count += 8; + } + } + + inline uint32_t Read(uint8_t width) { + if (width == 0) return 0; + Ensure(width); + uint32_t result; + if (width == 32) + result = static_cast(bit_buffer & 0xFFFFFFFFull); + else + result = static_cast(bit_buffer & ((1ull << width) - 1)); + bit_buffer >>= width; + bit_count -= width; + return result; + } + + inline void AlignToByte() { + uint32_t drop = bit_count % 8; + if (drop) { + bit_buffer >>= drop; + bit_count -= drop; + } + } +}; + +/* +Overall layout: + DeltaBlockHeader (struct, fixed-size) + - uint32 value_per_block + - uint32 values_per_mini_block + - uint32 total_count + T first_value + [Repeated Block until total_count is exhausted] + - uint32 min_delta + - uint8 bit_widths[ mini_blocks_per_block ] + - uint8 payload[computed from bit_widths] + // bit-packed adjusted deltas, mini-block by mini-block + // within a block: bits are written MSB-first, end aligned to byte +*/ + +template +size_t PaxDeltaEncoder::GetBoundSize(size_t src_len) const { + size_t value_count = src_len / sizeof(T); + size_t block_count = (value_count + value_per_block_ - 1) / value_per_block_; + /* header + first_value + block_count * (min_delta + bit_widths ) + * + payload was eliminated to value_count*/ + return sizeof(DeltaBlockHeader) + sizeof(T) + + block_count * (sizeof(uint32) + mini_blocks_per_block_) + value_count; +} + +template +void PaxDeltaEncoder::Encode(T *data, size_t count) { + // Estimate allocation: by element byte count, sufficient to accommodate + // header and bit stream + if (result_buffer_->Capacity() < + count * sizeof(T) + sizeof(DeltaBlockHeader) + sizeof(T)) { + result_buffer_->ReSize(count * sizeof(T) + sizeof(DeltaBlockHeader) + + sizeof(T)); + } + + DeltaBlockHeader header; + header.value_per_block = value_per_block_; + header.values_per_mini_block = values_per_mini_block_; + header.total_count = count; + // add delta block header + result_buffer_->Write(reinterpret_cast(&header), sizeof(header)); + result_buffer_->Brush(sizeof(header)); + // add base value + result_buffer_->Write(reinterpret_cast(&data[0]), sizeof(data[0])); + result_buffer_->Brush(sizeof(data[0])); + + size_t values_emitted = 1; + T previous_value = data[0]; + + while (values_emitted < count) { + uint32_t values_in_block = std::min( + value_per_block_, static_cast(count - values_emitted)); + + if (deltas_scratch_.size() < values_in_block) { + deltas_scratch_.resize(values_in_block); + } + uint32_t *deltas = deltas_scratch_.data(); + uint32_t min_delta = UINT32_MAX; + uint32_t mini_max[mini_blocks_per_block_] = {0}; + + for (uint32_t i = 0; i < values_in_block; ++i) { + T current = data[values_emitted + i]; + uint32_t delta = static_cast(current - previous_value); + deltas[i] = delta; + previous_value = current; + if (delta < min_delta) min_delta = delta; + uint32_t mini_index = i / values_per_mini_block_; + if (delta > mini_max[mini_index]) mini_max[mini_index] = delta; + } + + // write block header: min_delta later + uint8_t bit_widths[mini_blocks_per_block_] = {0}; + uint64_t total_bits = 0; + for (uint32_t i = 0; i < mini_blocks_per_block_; ++i) { + uint32_t start = i * values_per_mini_block_; + if (start >= values_in_block) { + bit_widths[i] = 0; + continue; + } + uint32_t adjusted_max = mini_max[i] - min_delta; + uint8_t w = FastNumBits(adjusted_max); + bit_widths[i] = w; + uint32_t end = std::min(start + values_per_mini_block_, values_in_block); + total_bits += static_cast(w) * (end - start); + } + uint32_t payload_bytes = static_cast((total_bits + 7) / 8); + + size_t need_size = + payload_bytes + mini_blocks_per_block_ + sizeof(min_delta); + + // Grows the buffer to be at least need_size bytes. To avoid frequent + // resizing, the new capacity is calculated as the maximum of (current + // capacity * 1.5) or (current capacity + need_size). + if (result_buffer_->Available() < need_size) { + size_t inc_size = need_size > (result_buffer_->Capacity() * 0.5) + ? need_size + : result_buffer_->Capacity() * 0.5; + result_buffer_->ReSize(result_buffer_->Capacity() + inc_size); + } + + // write block header: min_delta + result_buffer_->Write(reinterpret_cast(&min_delta), + sizeof(min_delta)); + result_buffer_->Brush(sizeof(min_delta)); + + // write bit_widths + result_buffer_->Write(reinterpret_cast(bit_widths), + mini_blocks_per_block_); + result_buffer_->Brush(mini_blocks_per_block_); + + uint8_t *payload_ptr = + reinterpret_cast(result_buffer_->GetAvailableBuffer()); + BitWriter64Ptr bw(payload_ptr); + for (uint32_t i = 0; i < mini_blocks_per_block_; ++i) { + uint32_t start = i * values_per_mini_block_; + if (start >= values_in_block) break; + uint32_t end = std::min(start + values_per_mini_block_, values_in_block); + uint8_t w = bit_widths[i]; + if (w == 0) continue; + for (uint32_t j = start; j < end; ++j) { + uint32_t adjusted = deltas[j] - min_delta; + bw.Append(adjusted, w); + } + } + bw.FlushToByte(); + result_buffer_->Brush(payload_bytes); + + values_emitted += values_in_block; + } +} + +template +bool PaxDeltaEncoder::SupportAppendNull() const { + return false; +} + +template +void PaxDeltaEncoder::Flush() { + // do nothing +} + +// Specialized reading of one mini-block and batch writing results +// (BitReader64Ptr) +template +inline void ReadMiniBlockSpecializedPtr(BitReader64Ptr &br, T *out_values, + T ¤t_value, uint32_t count_in_mb, + uint32_t min_delta, uint8_t w) { + switch (w) { + case 0: { + for (uint32_t j = 0; j < count_in_mb; ++j) { + current_value = + static_cast(static_cast(current_value) + min_delta); + out_values[j] = current_value; + } + return; + } + case 8: { + for (uint32_t j = 0; j < count_in_mb; ++j) { + uint32_t adjusted = br.Read(8); + current_value = static_cast(static_cast(current_value) + + adjusted + min_delta); + out_values[j] = current_value; + } + return; + } + case 16: { + for (uint32_t j = 0; j < count_in_mb; ++j) { + uint32_t adjusted = br.Read(16); + current_value = static_cast(static_cast(current_value) + + adjusted + min_delta); + out_values[j] = current_value; + } + return; + } + case 32: { + for (uint32_t j = 0; j < count_in_mb; ++j) { + uint32_t adjusted = br.Read(32); + current_value = static_cast(static_cast(current_value) + + adjusted + min_delta); + out_values[j] = current_value; + } + return; + } + default: { + uint32_t j = 0; + const uint32_t n4 = count_in_mb & ~3u; + for (; j < n4; j += 4) { + uint32_t a0 = br.Read(w); + uint32_t a1 = br.Read(w); + uint32_t a2 = br.Read(w); + uint32_t a3 = br.Read(w); + current_value = static_cast(static_cast(current_value) + + a0 + min_delta); + out_values[j] = current_value; + current_value = static_cast(static_cast(current_value) + + a1 + min_delta); + out_values[j + 1] = current_value; + current_value = static_cast(static_cast(current_value) + + a2 + min_delta); + out_values[j + 2] = current_value; + current_value = static_cast(static_cast(current_value) + + a3 + min_delta); + out_values[j + 3] = current_value; + } + for (; j < count_in_mb; ++j) { + uint32_t a = br.Read(w); + current_value = static_cast(static_cast(current_value) + + a + min_delta); + out_values[j] = current_value; + } + return; + } + } +} + +// Specialized reading of one mini-block and batch writing results +template +PaxDeltaDecoder::PaxDeltaDecoder( + const PaxDecoder::DecodingOption &encoder_options) + : PaxDecoder(encoder_options), + data_buffer_(nullptr), + result_buffer_(nullptr) { + CBDB_CHECK(encoder_options.column_encode_type == + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA, + cbdb::CException::kExTypeAbort, + fmt("PaxDeltaDecoder only support DIRECT_DELTA encoding")); + // TODO: if sign is true, should use zigzag encoding, now use delta encoding + // for offsets in non-fixed columns + CBDB_CHECK(encoder_options.is_sign == false, + cbdb::CException::kExTypeUnImplements, + fmt("PaxDeltaDecoder is not supported for signed data, " + "will support zigzag later")); +} + +template +PaxDecoder *PaxDeltaDecoder::SetSrcBuffer(char *data, size_t data_len) { + if (data) { + data_buffer_ = + std::make_shared>(data, data_len, false, false); + data_buffer_->Brush(data_len); + } + return this; +} + +template +PaxDecoder *PaxDeltaDecoder::SetDataBuffer( + std::shared_ptr> result_buffer) { + result_buffer_ = result_buffer; + return this; +} + +template +const char *PaxDeltaDecoder::GetBuffer() const { + return result_buffer_ ? result_buffer_->GetBuffer() : nullptr; +} + +template +size_t PaxDeltaDecoder::GetBufferSize() const { + return result_buffer_ ? result_buffer_->Used() : 0; +} + +template +size_t PaxDeltaDecoder::Next(const char * /*not_null*/) { + CBDB_RAISE(cbdb::CException::kExTypeUnImplements); +} + +template +size_t PaxDeltaDecoder::Decoding() { + if (!data_buffer_) return 0; + Assert(result_buffer_); + + const uint8_t *p = + reinterpret_cast(data_buffer_->GetBuffer()); + uint32_t remaining = static_cast(data_buffer_->Used()); + + // read header: values_per_block, values_per_mini_block_, total_count, + // first_value + DeltaBlockHeader header; + std::memcpy(&header, p, sizeof(header)); + p += sizeof(header); + remaining -= sizeof(header); + uint32_t values_per_block = header.value_per_block; + uint32_t values_per_mini_block_ = header.values_per_mini_block; + uint32_t total_count = header.total_count; + + T first_value; + std::memcpy(&first_value, p, sizeof(T)); + p += sizeof(T); + remaining -= sizeof(T); + + // reserve output buffer + if (result_buffer_->Capacity() < total_count * sizeof(T)) { + result_buffer_->ReSize(total_count * sizeof(T)); + } + + // write first value + T current_value = static_cast(first_value); + result_buffer_->Write(reinterpret_cast(¤t_value), sizeof(T)); + result_buffer_->Brush(sizeof(T)); + uint32_t decoded = 1; + + const uint32_t mini_blocks_per_block_ = + values_per_block / values_per_mini_block_; + + while (decoded < total_count && remaining > 0) { + uint32_t min_delta; + std::memcpy(&min_delta, p, sizeof(min_delta)); + p += sizeof(min_delta); + remaining -= sizeof(min_delta); + + if (remaining < mini_blocks_per_block_) break; + + uint8_t bit_widths[mini_blocks_per_block_] = {0}; + for (uint32_t i = 0; i < mini_blocks_per_block_; ++i) { + bit_widths[i] = *p++; + --remaining; + } + + uint32_t values_in_block = + std::min(values_per_block, total_count - decoded); + + // read payload: initialize reader with remaining bytes; we'll compute + // consumed + BitReader64Ptr br(p, remaining); + + for (uint32_t i = 0; i < mini_blocks_per_block_ && decoded < total_count; + ++i) { + uint32_t start = i * values_per_mini_block_; + if (start >= values_in_block) break; + uint32_t end = std::min(start + values_per_mini_block_, values_in_block); + uint32_t cnt = end - start; + uint8_t w = bit_widths[i]; + + T *out_base = reinterpret_cast(result_buffer_->GetAvailableBuffer()); + ReadMiniBlockSpecializedPtr(br, out_base, current_value, cnt, + min_delta, w); + result_buffer_->Brush(cnt * sizeof(T)); + decoded += cnt; + } + + br.AlignToByte(); + + size_t consumed = br.index; + p += consumed; + remaining -= consumed; + } + + Assert(result_buffer_->Used() == total_count * sizeof(T)); + + return result_buffer_->Used(); +} + +template +size_t PaxDeltaDecoder::Decoding(const char * /*not_null*/, + size_t /*not_null_len*/) { + CBDB_RAISE(cbdb::CException::kExTypeUnImplements); +} + +template class PaxDeltaEncoder; +template class PaxDeltaDecoder; +// Add explicit instantiations for signed integral types used by CreateDecoder +template class PaxDeltaDecoder; +template class PaxDeltaDecoder; +template class PaxDeltaDecoder; +template class PaxDeltaDecoder; + +} // namespace pax \ No newline at end of file diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.h b/contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.h new file mode 100644 index 00000000000..7f2251201bf --- /dev/null +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.h @@ -0,0 +1,135 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * pax_delta_encoding.h + * + * IDENTIFICATION + * contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding.h + * + *------------------------------------------------------------------------- + */ +#pragma once + +#include "storage/columns/pax_encoding.h" +#include "storage/columns/pax_decoding.h" +#include + +namespace pax { + +struct BitReader64 { + const uint8_t*& p; + uint32_t& remaining; + uint64_t bit_buffer = 0; + uint32_t bit_count = 0; + + BitReader64(const uint8_t*& ptr, uint32_t& size) : p(ptr), remaining(size) {} + + inline void Ensure(uint32_t need_bits) { + while (bit_count < need_bits && remaining > 0) { + bit_buffer |= (static_cast(*p) << bit_count); + ++p; + --remaining; + bit_count += 8; + } + } + + inline uint32_t Read(uint8_t width) { + if (width == 0) return 0; + Ensure(width); + uint32_t result; + if (width == 32) { + result = static_cast(bit_buffer & 0xFFFFFFFFull); + } else { + result = static_cast(bit_buffer & ((1ull << width) - 1)); + } + bit_buffer >>= width; + bit_count -= width; + return result; + } + + inline void AlignToByte() { + uint32_t drop = bit_count % 8; + if (drop) { + bit_buffer >>= drop; + bit_count -= drop; + } + } +}; + +struct DeltaBlockHeader { + uint32_t value_per_block; + uint32_t values_per_mini_block; + uint32_t total_count; +}; + +template +class PaxDeltaEncoder : public PaxEncoder { + public: + explicit PaxDeltaEncoder(const EncodingOption &encoder_options); + + virtual void Append(char *data, size_t size) override; + + virtual bool SupportAppendNull() const override; + + virtual void Flush() override; + + virtual size_t GetBoundSize(size_t src_len) const override; + + private: + + void Encode(T *data, size_t size); + + private: + static constexpr uint32_t value_per_block_ = 128; + static constexpr uint32_t mini_blocks_per_block_ = 4; + static constexpr uint32_t values_per_mini_block_ = + value_per_block_ / mini_blocks_per_block_; + + private: + bool has_append_ = false; + // Reusable working buffer to avoid per-block allocations during encoding + std::vector deltas_scratch_; +}; + +template +class PaxDeltaDecoder : public PaxDecoder { + public: + explicit PaxDeltaDecoder(const PaxDecoder::DecodingOption &encoder_options); + + virtual PaxDecoder *SetSrcBuffer(char *data, size_t data_len) override; + + virtual PaxDecoder *SetDataBuffer( + std::shared_ptr> result_buffer) override; + + virtual size_t Next(const char *not_null) override; + + virtual size_t Decoding() override; + + virtual size_t Decoding(const char *not_null, size_t not_null_len) override; + + virtual const char *GetBuffer() const override; + + virtual size_t GetBufferSize() const override; + + private: + std::shared_ptr> data_buffer_; + std::shared_ptr> result_buffer_; +}; + +} // namespace pax \ No newline at end of file diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding_test.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding_test.cc new file mode 100644 index 00000000000..031563381ee --- /dev/null +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding_test.cc @@ -0,0 +1,339 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * pax_delta_encoding_test.cc + * + * IDENTIFICATION + * contrib/pax_storage/src/cpp/storage/columns/pax_delta_encoding_test.cc + * + *------------------------------------------------------------------------- + */ + +#include "storage/columns/pax_delta_encoding.h" + +#include +#include + +#include "comm/gtest_wrappers.h" +#include "pax_gtest_helper.h" + +namespace pax { + +class PaxDeltaEncodingTest : public ::testing::Test { + protected: + void SetUp() override { + // Create encoding options + encoding_options_.column_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + encoding_options_.is_sign = false; + + // Create decoding options + decoding_options_.column_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + decoding_options_.is_sign = false; + } + + void TearDown() override {} + + // Fast bit width calculation (0 -> 0) + inline uint8_t FastNumBits(uint32_t v) { +#if defined(__GNUC__) || defined(__clang__) + return v == 0 ? 0 : static_cast(32 - __builtin_clz(v)); +#else + uint8_t bits = 0; + while (v) { + ++bits; + v >>= 1; + } + return bits; +#endif + } + + // Helper function to encode and decode data + template + std::vector EncodeAndDecode(const std::vector &input) { + // Create encoder + PaxDeltaEncoder encoder(encoding_options_); + + size_t bound_size = encoder.GetBoundSize(input.size() * sizeof(T)); + + encoder.SetDataBuffer(std::make_shared>(bound_size)); + + // Encode data + encoder.Append(reinterpret_cast(const_cast(input.data())), + input.size() * sizeof(T)); + + // Get encoded buffer + const char *encoded_data = encoder.GetBuffer(); + size_t encoded_size = encoder.GetBufferSize(); + + // Create decoder + PaxDeltaDecoder decoder(decoding_options_); + + // Set source buffer + decoder.SetSrcBuffer(const_cast(encoded_data), encoded_size); + + // Create result buffer + auto result_buffer = + std::make_shared>(input.size() * sizeof(T)); + decoder.SetDataBuffer(result_buffer); + + // Decode + size_t decoded_size = decoder.Decoding(); + + // Convert result back to vector + const T *decoded_data = reinterpret_cast(decoder.GetBuffer()); + size_t count = decoded_size / sizeof(T); + + return std::vector(decoded_data, decoded_data + count); + } + + PaxEncoder::EncodingOption encoding_options_; + PaxDecoder::DecodingOption decoding_options_; +}; + +// Test basic functionality +TEST_F(PaxDeltaEncodingTest, BasicEncodeDecode) { + std::vector input = {1, 2, 3, 4, 5}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test example from documentation - consecutive sequence +TEST_F(PaxDeltaEncodingTest, ConsecutiveSequence) { + std::vector input = {1, 2, 3, 4, 5}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); + + // Verify deltas would be [1, 1, 1, 1] with min_delta = 1 + // and adjusted deltas [0, 0, 0, 0] with bit_width = 0 +} + +// Test example from documentation - sequence with variation +TEST_F(PaxDeltaEncodingTest, SequenceWithVariation) { + std::vector input = {7, 5, 3, 1, 2, 3, 4, 5}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); + + // Verify deltas would be [-2, -2, -2, 1, 1, 1, 1] with min_delta = -2 + // Since we cast to uint32, -2 becomes a large positive number + // adjusted deltas would be [0, 0, 0, 3, 3, 3, 3] with bit_width = 2 +} + +// Test single value +TEST_F(PaxDeltaEncodingTest, SingleValue) { + std::vector input = {42}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test two values +TEST_F(PaxDeltaEncodingTest, TwoValues) { + std::vector input = {10, 15}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test large values +TEST_F(PaxDeltaEncodingTest, LargeValues) { + std::vector input = {1000000, 1000001, 1000002, 1000003}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test values with large deltas +TEST_F(PaxDeltaEncodingTest, LargeDeltas) { + std::vector input = {1, 1000, 2000, 3000}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test full block (128 values) +TEST_F(PaxDeltaEncodingTest, FullBlock) { + std::vector input; + for (uint32_t i = 0; i < 128; ++i) { + input.push_back(i); + } + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test multiple blocks +TEST_F(PaxDeltaEncodingTest, MultipleBlocks) { + std::vector input; + for (uint32_t i = 0; i < 250; ++i) { + input.push_back(i); + } + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test random data +TEST_F(PaxDeltaEncodingTest, RandomData) { + std::mt19937 gen(12345); + std::uniform_int_distribution dis(0, 1000000); + + std::vector input; + for (int i = 0; i < 100; ++i) { + input.push_back(dis(gen)); + } + + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test payload size calculation +TEST_F(PaxDeltaEncodingTest, PayloadSizeCalculation) { + std::vector input = { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 56, 63, 89}; + // Test the specific example: deltas [0,0,0,0,0,0,0,0,...,0,22,6,25] with + // bit_width 0,5,0,0 + + PaxDeltaEncoder encoder(encoding_options_); + size_t bound_size = encoder.GetBoundSize(input.size() * sizeof(uint32_t)); + encoder.SetDataBuffer(std::make_shared>(bound_size)); + encoder.Append(reinterpret_cast(input.data()), + input.size() * sizeof(uint32_t)); + + // Verify the encoded data structure manually + const char *encoded_data = encoder.GetBuffer(); + size_t encoded_size = encoder.GetBufferSize(); + + EXPECT_GT(encoded_size, 0); + + // Parse the encoded data + const uint8_t *p = reinterpret_cast(encoded_data); + + // Read header + DeltaBlockHeader header; + std::memcpy(&header, p, sizeof(header)); + p += sizeof(header); + + EXPECT_EQ(header.value_per_block, 128); + EXPECT_EQ(header.values_per_mini_block, 32); + EXPECT_EQ(header.total_count, input.size()); + + // Read first value + uint32_t first_value; + std::memcpy(&first_value, p, sizeof(first_value)); + p += sizeof(first_value); + EXPECT_EQ(first_value, 1); + + // Read block data + uint32_t min_delta; + std::memcpy(&min_delta, p, sizeof(min_delta)); + p += sizeof(min_delta); + + // Read allbit widths + uint8_t bit_widths[4]; + for (int i = 0; i < 4; ++i) { + bit_widths[i] = *p++; + } + + // bit_widths should be [0, 6, 0, 0] + ASSERT_EQ(bit_widths[0], 0); + ASSERT_EQ(bit_widths[1], 5); + ASSERT_EQ(bit_widths[2], 0); + ASSERT_EQ(bit_widths[3], 0); + + // Compute payload size from bit_widths and counts + uint32_t values_in_block = + input.size() - 1; // we constructed input with 35 deltas in first block + uint64_t total_bits = 0; + for (uint32_t i = 0; i < 4; ++i) { + uint32_t start = i * 32; + if (start >= values_in_block) break; + uint32_t end = std::min(start + 32u, values_in_block); + uint8_t w = bit_widths[i]; + total_bits += static_cast(w) * (end - start); + } + uint32_t payload_size = static_cast((total_bits + 7) / 8); + + // For this example, we expect payload_size = 2 bytes + EXPECT_EQ(payload_size, 2); + + // Assert payload bitmap is correct + uint8_t payload[4]; + std::memcpy(payload, p, 4); + p += 4; + + // payload should be LSB-Last, value is(22,6,25) + // [0b10110, 0b00110, 0b11001] + EXPECT_EQ(payload[0], 0b11010110); + EXPECT_EQ(payload[1], 0b01100100); +} + +// Test bit width calculation helper +TEST_F(PaxDeltaEncodingTest, BitWidthCalculation) { + EXPECT_EQ(FastNumBits(0), 0); + EXPECT_EQ(FastNumBits(1), 1); + EXPECT_EQ(FastNumBits(2), 2); + EXPECT_EQ(FastNumBits(3), 2); + EXPECT_EQ(FastNumBits(4), 3); + EXPECT_EQ(FastNumBits(7), 3); + EXPECT_EQ(FastNumBits(8), 4); + EXPECT_EQ(FastNumBits(15), 4); + EXPECT_EQ(FastNumBits(16), 5); + EXPECT_EQ(FastNumBits(255), 8); + EXPECT_EQ(FastNumBits(256), 9); +} + +// Test zero deltas (all same values) +TEST_F(PaxDeltaEncodingTest, ZeroDeltas) { + std::vector input = {42, 42, 42, 42, 42}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test decreasing sequence (negative deltas) +TEST_F(PaxDeltaEncodingTest, DecreasingSequence) { + std::vector input = {100, 90, 80, 70, 60}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test mixed pattern +TEST_F(PaxDeltaEncodingTest, MixedPattern) { + std::vector input = {10, 20, 15, 25, 5, 30, 1, 35}; + auto output = EncodeAndDecode(input); + EXPECT_EQ(input, output); +} + +// Test empty input (edge case) +TEST_F(PaxDeltaEncodingTest, EmptyInput) { + std::vector input = {}; + // This should handle gracefully or throw expected exception + // For now, let's skip this test until we clarify expected behavior +} + +// Test different data types +TEST_F(PaxDeltaEncodingTest, DifferentTypes) { + // Test int32_t (with non-negative values) + std::vector input32 = {1, 2, 3, 4, 5}; + auto output32 = EncodeAndDecode(input32); + EXPECT_EQ(input32, output32); +} + +} // namespace pax + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_dict_encoding.h b/contrib/pax_storage/src/cpp/storage/columns/pax_dict_encoding.h index e552fa7a55a..38f3ba217db 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_dict_encoding.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_dict_encoding.h @@ -53,6 +53,10 @@ class PaxDictEncoder final : public PaxEncoder { void Flush() override; + size_t GetBoundSize(size_t src_len) const override { + CBDB_RAISE(cbdb::CException::kExTypeUnImplements); + } + private: size_t AppendInternal(char *data, size_t len); @@ -89,7 +93,8 @@ class PaxDictDecoder final : public PaxDecoder { PaxDecoder *SetSrcBuffer(char *data, size_t data_len) override; - PaxDecoder *SetDataBuffer(std::shared_ptr> result_buffer) override; + PaxDecoder *SetDataBuffer( + std::shared_ptr> result_buffer) override; const char *GetBuffer() const override; @@ -121,8 +126,8 @@ class PaxDictDecoder final : public PaxDecoder { buffer = src_buff->GetBuffer(); - index_buffer = - std::make_shared>((int32 *)buffer, head.indexsz, false, false); + index_buffer = std::make_shared>( + (int32 *)buffer, head.indexsz, false, false); index_buffer->BrushAll(); desc_buffer = std::make_shared>( @@ -130,8 +135,8 @@ class PaxDictDecoder final : public PaxDecoder { false); desc_buffer->BrushAll(); - entry_buffer = std::make_shared>(buffer + head.indexsz, head.dictsz, - false, false); + entry_buffer = std::make_shared>( + buffer + head.indexsz, head.dictsz, false, false); entry_buffer->BrushAll(); return std::make_tuple(index_buffer, entry_buffer, desc_buffer); diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding.cc index 3a354ceec8d..b11b2b7b6bd 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding.cc @@ -33,6 +33,7 @@ #include "comm/pax_memory.h" #include "storage/columns/pax_dict_encoding.h" #include "storage/columns/pax_rlev2_encoding.h" +#include "storage/columns/pax_delta_encoding.h" namespace pax { @@ -56,8 +57,7 @@ std::shared_ptr PaxEncoder::CreateStreamingEncoder( break; } case ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA: { - // TODO(jiaqizho): support direct delta encoding - // not support yet, then direct return a nullptr(means no encoding) + encoder = std::make_shared>(encoder_options); break; } case ColumnEncoding_Kind::ColumnEncoding_Kind_DEF_ENCODED: { diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding.h b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding.h index 362e68caa13..465c7bf0600 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding.h @@ -75,6 +75,8 @@ class PaxEncoder { virtual size_t GetBufferSize() const; + virtual size_t GetBoundSize(size_t src_len) const = 0; + /** * steaming encoder * diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc index 25b6d2f1d6d..90060050236 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc @@ -59,21 +59,37 @@ void PaxNonFixedEncodingColumn::InitEncoder() { } void PaxNonFixedEncodingColumn::InitOffsetStreamCompressor() { - Assert(encoder_options_.offsets_encode_type != - ColumnEncoding_Kind::ColumnEncoding_Kind_DEF_ENCODED); - offsets_compressor_ = PaxCompressor::CreateBlockCompressor( - encoder_options_.offsets_encode_type); + Assert(encoder_options_.offsets_encode_type == + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA); + SetOffsetsEncodeType(encoder_options_.offsets_encode_type); SetOffsetsCompressLevel(encoder_options_.offsets_compress_level); + + PaxEncoder::EncodingOption opt = encoder_options_; + opt.column_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + opt.is_sign = false; + // offsets are fixed-width, do not enable non_fixed streaming restriction + offsets_encoder_ = PaxEncoder::CreateStreamingEncoder(opt, false); } void PaxNonFixedEncodingColumn::InitOffsetStreamDecompressor() { Assert(decoder_options_.offsets_encode_type != ColumnEncoding_Kind::ColumnEncoding_Kind_DEF_ENCODED); - offsets_compressor_ = PaxCompressor::CreateBlockCompressor( - decoder_options_.offsets_encode_type); SetOffsetsEncodeType(decoder_options_.offsets_encode_type); SetOffsetsCompressLevel(decoder_options_.offsets_compress_level); + + if (decoder_options_.offsets_encode_type == + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA) { + PaxDecoder::DecodingOption temp_opt = decoder_options_; + temp_opt.column_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + temp_opt.is_sign = false; + offsets_decoder_ = PaxDecoder::CreateDecoder(temp_opt); + } else { + offsets_compressor_ = PaxCompressor::CreateBlockCompressor( + decoder_options_.offsets_encode_type); + } } void PaxNonFixedEncodingColumn::InitDecoder() { @@ -169,9 +185,13 @@ void PaxNonFixedEncodingColumn::Set(std::shared_ptr> data, auto offsets_decompress = [&]() { Assert(!compress_route_); - Assert(offsets_compressor_); + Assert(offsets_compressor_ || offsets_decoder_); + + if (offsets->Used() == 0) { + return; + } - if (offsets->Used() != 0) { + if (offsets_compressor_) { auto d_size = offsets_compressor_->Decompress( PaxNonFixedColumn::offsets_->Start(), PaxNonFixedColumn::offsets_->Capacity(), offsets->Start(), @@ -182,22 +202,36 @@ void PaxNonFixedEncodingColumn::Set(std::shared_ptr> data, fmt("Decompress failed, %s", compressor_->ErrorName(d_size))); } PaxNonFixedColumn::offsets_->Brush(d_size); + return; + } + + if (offsets_decoder_) { + // Decode offsets using encoder for int32 stream + shared_offsets_data_ = std::make_shared>( + PaxNonFixedColumn::offsets_->Start(), + PaxNonFixedColumn::offsets_->Capacity(), false, false); + offsets_decoder_->SetDataBuffer(shared_offsets_data_); + offsets_decoder_->SetSrcBuffer(offsets->Start(), offsets->Used()); + offsets_decoder_->Decoding(); + PaxNonFixedColumn::offsets_->Brush(shared_offsets_data_->Used()); + return; } }; exist_decoder = compressor_ || decoder_; + bool has_offsets_processor = offsets_compressor_ || offsets_decoder_; - if (exist_decoder && offsets_compressor_) { + if (exist_decoder && has_offsets_processor) { data_decompress(); offsets_decompress(); PaxNonFixedColumn::estimated_size_ = total_size; PaxNonFixedColumn::next_offsets_ = -1; - } else if (exist_decoder && !offsets_compressor_) { + } else if (exist_decoder && !has_offsets_processor) { data_decompress(); PaxNonFixedColumn::offsets_ = offsets; PaxNonFixedColumn::estimated_size_ = total_size; PaxNonFixedColumn::next_offsets_ = -1; - } else if (!exist_decoder && offsets_compressor_) { + } else if (!exist_decoder && has_offsets_processor) { PaxNonFixedColumn::data_ = data; offsets_decompress(); PaxNonFixedColumn::estimated_size_ = total_size; @@ -278,17 +312,17 @@ std::pair PaxNonFixedEncodingColumn::GetOffsetBuffer( AppendLastOffset(); } - if (offsets_compressor_ && compress_route_) { - if (shared_offsets_data_) { - return std::make_pair(shared_offsets_data_->Start(), - shared_offsets_data_->Used()); - } + if (shared_offsets_data_) { + return std::make_pair(shared_offsets_data_->Start(), + shared_offsets_data_->Used()); + } - if (PaxNonFixedColumn::offsets_->Used() == 0) { - // should never append last offset again - return PaxNonFixedColumn::GetOffsetBuffer(false); - } + if (PaxNonFixedColumn::offsets_->Used() == 0) { + // should never append last offset again + return PaxNonFixedColumn::GetOffsetBuffer(false); + } + if (offsets_compressor_ && compress_route_) { size_t bound_size = offsets_compressor_->GetCompressBound( PaxNonFixedColumn::offsets_->Used()); shared_offsets_data_ = std::make_shared>(bound_size); @@ -308,6 +342,20 @@ std::pair PaxNonFixedEncodingColumn::GetOffsetBuffer( shared_offsets_data_->Used()); } + if (offsets_encoder_ && compress_route_) { + // For delta encoder, allocate a buffer sized by raw bytes for safety + size_t bound_size = offsets_encoder_->GetBoundSize(offsets_->Used()); + shared_offsets_data_ = std::make_shared>(bound_size); + offsets_encoder_->SetDataBuffer(shared_offsets_data_); + + // Encode entire offsets buffer as a single stream + offsets_encoder_->Append(offsets_->Start(), offsets_->Used()); + offsets_encoder_->Flush(); + + return std::make_pair(shared_offsets_data_->Start(), + shared_offsets_data_->Used()); + } + // no compress or uncompressed // should never append last offset again return PaxNonFixedColumn::GetOffsetBuffer(false); diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h index b4e956cfe4a..06b60d02ac2 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h @@ -83,6 +83,9 @@ class PaxNonFixedEncodingColumn : public PaxNonFixedColumn { std::shared_ptr> shared_data_; std::shared_ptr offsets_compressor_; + // Optional encoder/decoder for offsets stream (alternative to compression) + std::shared_ptr offsets_encoder_; + std::shared_ptr offsets_decoder_; std::shared_ptr> shared_offsets_data_; }; diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_test.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_test.cc index 5fa7fb7153c..b3a7ec59458 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_test.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_test.cc @@ -1361,4 +1361,96 @@ TEST_F(PaxEncodingTest, TestEncodingWithAllNULL) { ASSERT_EQ(n_read, shared_dst_data->Used()); } +TEST_F(PaxEncodingTest, TestPaxDeltaEncodingBasic) { + std::vector data_vec{100, 101, 102, 105, 106, 110, 120, 121}; + auto shared_data = std::make_shared>(1024); + auto shared_dst_data = std::make_shared>(1024); + + PaxEncoder::EncodingOption encoder_options; + encoder_options.column_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + encoder_options.is_sign = false; + auto encoder = PaxEncoder::CreateStreamingEncoder(encoder_options); + + ASSERT_TRUE(encoder); + encoder->SetDataBuffer(shared_data); + encoder->Append(reinterpret_cast(data_vec.data()), data_vec.size() * sizeof(uint32_t)); + encoder->Flush(); + + ASSERT_NE(encoder->GetBuffer(), nullptr); + ASSERT_GT(encoder->GetBufferSize(), 0UL); + + PaxDecoder::DecodingOption decoder_options; + decoder_options.column_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + decoder_options.is_sign = false; + + auto decoder = PaxDecoder::CreateDecoder(decoder_options); + ASSERT_TRUE(decoder); + decoder->SetSrcBuffer(shared_data->GetBuffer(), shared_data->Used()); + + decoder->SetDataBuffer(shared_dst_data); + decoder->Decoding(); + + ASSERT_EQ(shared_dst_data->Used(), data_vec.size() * sizeof(int32)); + + auto result_dst_data = std::make_shared>( + reinterpret_cast(shared_dst_data->Start()), + shared_dst_data->Used(), false, false); + + for (size_t i = 0; i < data_vec.size(); ++i) { + ASSERT_EQ((*result_dst_data)[i], static_cast(data_vec[i])); + } +} + +TEST_F(PaxEncodingTest, TestPaxDeltaEncodingRoundTripRandom) { + const size_t n = 1000; + std::vector data_vec(n); + std::mt19937 rng(12345); + std::uniform_int_distribution base_dist(0, 100); + std::uniform_int_distribution step_dist(0, 5); + + data_vec[0] = base_dist(rng); + for (size_t i = 1; i < n; ++i) { + data_vec[i] = data_vec[i - 1] + step_dist(rng); + } + + auto shared_data = std::make_shared>(n * sizeof(uint32_t)); + auto shared_dst_data = std::make_shared>(n * sizeof(uint32_t)); + + PaxEncoder::EncodingOption encoder_options; + encoder_options.column_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + encoder_options.is_sign = false; + auto encoder = PaxEncoder::CreateStreamingEncoder(encoder_options); + + ASSERT_TRUE(encoder); + encoder->SetDataBuffer(shared_data); + + encoder->Append(reinterpret_cast(data_vec.data()), data_vec.size() * sizeof(uint32_t)); + encoder->Flush(); + + PaxDecoder::DecodingOption decoder_options; + decoder_options.column_encode_type = + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA; + decoder_options.is_sign = false; + + auto decoder = PaxDecoder::CreateDecoder(decoder_options); + ASSERT_TRUE(decoder); + decoder->SetSrcBuffer(shared_data->GetBuffer(), shared_data->Used()); + + decoder->SetDataBuffer(shared_dst_data); + decoder->Decoding(); + + ASSERT_EQ(shared_dst_data->Used(), data_vec.size() * sizeof(int32)); + + auto result_dst_data = std::make_shared>( + reinterpret_cast(shared_dst_data->Start()), + shared_dst_data->Used(), false, false); + + for (size_t i = 0; i < data_vec.size(); ++i) { + ASSERT_EQ((*result_dst_data)[i], static_cast(data_vec[i])); + } +} + } // namespace pax::tests diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_rlev2_encoding.h b/contrib/pax_storage/src/cpp/storage/columns/pax_rlev2_encoding.h index 7d021a1f1cf..f2197258b69 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_rlev2_encoding.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_rlev2_encoding.h @@ -49,6 +49,10 @@ class PaxOrcEncoder final : public PaxEncoder { void Flush() override; + size_t GetBoundSize(size_t src_len) const override { + CBDB_RAISE(cbdb::CException::kExTypeUnImplements); + } + private: struct EncoderContext { bool is_sign; diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_vec_encoding_column.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_vec_encoding_column.cc index aaf514f5926..8f3aafae2c4 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_vec_encoding_column.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_vec_encoding_column.cc @@ -348,7 +348,7 @@ void PaxVecNonFixedEncodingColumn::Set( PaxVecNonFixedColumn::estimated_size_ = total_size; PaxVecNonFixedColumn::next_offsets_ = -1; } else { // (!compressor_ && !offsets_compressor_) - PaxVecNonFixedColumn::Set(data, offsets_, total_size, non_null_rows); + PaxVecNonFixedColumn::Set(data, offsets, total_size, non_null_rows); } } diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_vec_encoding_column.h b/contrib/pax_storage/src/cpp/storage/columns/pax_vec_encoding_column.h index 4362312a5a9..524ddca261a 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_vec_encoding_column.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_vec_encoding_column.h @@ -112,6 +112,9 @@ class PaxVecNonFixedEncodingColumn : public PaxVecNonFixedColumn { std::shared_ptr> shared_data_; std::shared_ptr offsets_compressor_; + // Optional encoder/decoder for offsets stream (alternative to compression) + std::shared_ptr offsets_encoder_; + std::shared_ptr offsets_decoder_; std::shared_ptr> shared_offsets_data_; }; diff --git a/contrib/pax_storage/src/cpp/storage/micro_partition.h b/contrib/pax_storage/src/cpp/storage/micro_partition.h index 77d61462ad4..56d85b46a74 100644 --- a/contrib/pax_storage/src/cpp/storage/micro_partition.h +++ b/contrib/pax_storage/src/cpp/storage/micro_partition.h @@ -58,7 +58,6 @@ class MicroPartitionWriter { RelFileNode node; bool need_wal = false; std::vector> encoding_opts; - std::pair offsets_encoding_opts; std::vector enable_min_max_col_idxs; std::vector enable_bf_col_idxs; diff --git a/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc b/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc index 63413a2239d..6c8d49502e5 100644 --- a/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc +++ b/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc @@ -104,7 +104,6 @@ static std::unique_ptr BuildColumns( const std::vector &types, const TupleDesc desc, const std::vector> &column_encoding_types, - const std::pair &offsets_encoding_types, const PaxStorageFormat &storage_format) { std::unique_ptr columns; bool is_vec; @@ -125,14 +124,7 @@ static std::unique_ptr BuildColumns( encoding_option.is_sign = true; encoding_option.compress_level = std::get<1>(column_encoding_types[i]); - if (offsets_encoding_types.first == ColumnEncoding_Kind_DEF_ENCODED) { - // default value of offsets_stream is zstd - encoding_option.offsets_encode_type = ColumnEncoding_Kind_COMPRESS_ZSTD; - encoding_option.offsets_compress_level = 5; - } else { - encoding_option.offsets_encode_type = offsets_encoding_types.first; - encoding_option.offsets_compress_level = offsets_encoding_types.second; - } + encoding_option.offsets_encode_type = ColumnEncoding_Kind_DIRECT_DELTA; switch (type) { case (pax::porc::proto::Type_Kind::Type_Kind_STRING): { @@ -241,10 +233,9 @@ OrcWriter::OrcWriter( Assert(writer_options.rel_tuple_desc->natts == static_cast(column_types.size())); - pax_columns_ = BuildColumns(column_types_, writer_options.rel_tuple_desc, - writer_options.encoding_opts, - writer_options.offsets_encoding_opts, - writer_options.storage_format); + pax_columns_ = + BuildColumns(column_types_, writer_options.rel_tuple_desc, + writer_options.encoding_opts, writer_options.storage_format); summary_.rel_oid = writer_options.rel_oid; summary_.block_id = writer_options.block_id; @@ -300,7 +291,6 @@ void OrcWriter::Flush() { new_columns = BuildColumns(column_types_, writer_options_.rel_tuple_desc, writer_options_.encoding_opts, - writer_options_.offsets_encoding_opts, writer_options_.storage_format); for (size_t i = 0; i < column_types_.size(); ++i) { diff --git a/contrib/pax_storage/src/cpp/storage/pax.cc b/contrib/pax_storage/src/cpp/storage/pax.cc index ab10387c76c..c8d29bbb6ce 100644 --- a/contrib/pax_storage/src/cpp/storage/pax.cc +++ b/contrib/pax_storage/src/cpp/storage/pax.cc @@ -200,8 +200,6 @@ std::unique_ptr TableWriter::CreateMicroPartitionWriter( options.file_name = std::move(file_path); options.encoding_opts = GetRelEncodingOptions(); options.storage_format = GetStorageFormat(); - options.offsets_encoding_opts = std::make_pair( - PAX_OFFSETS_DEFAULT_COMPRESSTYPE, PAX_OFFSETS_DEFAULT_COMPRESSLEVEL); options.enable_min_max_col_idxs = GetMinMaxColumnIndexes(); options.enable_bf_col_idxs = GetBloomFilterColumnIndexes(); @@ -261,8 +259,8 @@ void TableWriter::InitOptionsCaches() { } void TableWriter::Open() { - rel_path_ = cbdb::BuildPaxDirectoryPath( - relation_->rd_node, relation_->rd_backend); + rel_path_ = + cbdb::BuildPaxDirectoryPath(relation_->rd_node, relation_->rd_backend); InitOptionsCaches(); @@ -509,8 +507,8 @@ void TableReader::OpenFile() { if (it.GetExistToast()) { // must exist the file in disk - toast_file = file_system_->Open(it.GetFileName() + TOAST_FILE_SUFFIX, - fs::kReadMode); + toast_file = + file_system_->Open(it.GetFileName() + TOAST_FILE_SUFFIX, fs::kReadMode); } reader_ = MicroPartitionFileFactory::CreateMicroPartitionReader( @@ -588,8 +586,7 @@ void TableDeleter::DeleteWithVisibilityMap( std::unique_ptr visi_bitmap; auto catalog_update = pax::PaxCatalogUpdater::Begin(rel_); - auto rel_path = cbdb::BuildPaxDirectoryPath( - rel_->rd_node, rel_->rd_backend); + auto rel_path = cbdb::BuildPaxDirectoryPath(rel_->rd_node, rel_->rd_backend); min_max_col_idxs = cbdb::GetMinMaxColumnIndexes(rel_); stats_updater_projection->SetColumnProjection(min_max_col_idxs, @@ -662,11 +659,10 @@ void TableDeleter::DeleteWithVisibilityMap( // TODO: update stats and visimap all in one catalog update // Update the stats in pax aux table // Notice that: PAX won't update the stats in group - UpdateStatsInAuxTable(catalog_update, micro_partition_metadata, - std::make_shared(visi_bitmap->Raw()), - min_max_col_idxs, - cbdb::GetBloomFilterColumnIndexes(rel_), - stats_updater_projection); + UpdateStatsInAuxTable( + catalog_update, micro_partition_metadata, + std::make_shared(visi_bitmap->Raw()), min_max_col_idxs, + cbdb::GetBloomFilterColumnIndexes(rel_), stats_updater_projection); // write pg_pax_blocks_oid catalog_update.UpdateVisimap(block_id, visimap_file_name); diff --git a/contrib/pax_storage/src/cpp/storage/pax_defined.h b/contrib/pax_storage/src/cpp/storage/pax_defined.h index b4ce1115af8..5315797ea3a 100644 --- a/contrib/pax_storage/src/cpp/storage/pax_defined.h +++ b/contrib/pax_storage/src/cpp/storage/pax_defined.h @@ -39,7 +39,7 @@ namespace pax { #define BITS_TO_BYTES(bits) (((bits) + 7) / 8) #define PAX_OFFSETS_DEFAULT_COMPRESSTYPE \ - ColumnEncoding_Kind::ColumnEncoding_Kind_COMPRESS_ZSTD + ColumnEncoding_Kind::ColumnEncoding_Kind_DIRECT_DELTA #define PAX_OFFSETS_DEFAULT_COMPRESSLEVEL 5 #define COLUMN_STORAGE_FORMAT_IS_VEC(column) \ diff --git a/contrib/pax_storage/src/test/regress/expected/gp_toolkit.out b/contrib/pax_storage/src/test/regress/expected/gp_toolkit.out index 336354081af..745db42283a 100644 --- a/contrib/pax_storage/src/test/regress/expected/gp_toolkit.out +++ b/contrib/pax_storage/src/test/regress/expected/gp_toolkit.out @@ -304,7 +304,7 @@ update pg_statistic set stawidth=2034567890 where starelid = 'wide_width_test':: select btdrelpages, btdexppages from gp_toolkit.gp_bloat_expected_pages where btdrelid='wide_width_test'::regclass; btdrelpages | btdexppages -------------+------------- - 4 | 3104504228 + 1 | 3104504228 (1 row) select * from gp_toolkit.gp_bloat_diag WHERE bdinspname <> 'pg_catalog'; From 9cee06e43fe2bf9bfe32f382c9e052c1c527a891 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Thu, 4 Sep 2025 17:34:16 +0800 Subject: [PATCH 131/260] PAX: Support LZ4 compression for table columns (#1344) * PAX: Support LZ4 compression for table columns PAX only support zlib and zstd compression for column values. This commit add lz4 support for pax table columns. * map compress level to acceleration for lz4 * strict acceleration to range [0, 3] * add macro control --- .../src/cpp/access/paxc_rel_options.cc | 4 ++++ .../pax_storage/src/cpp/access/paxc_rel_options.h | 1 + .../src/cpp/storage/columns/pax_column_test.cc | 6 ++++++ .../src/cpp/storage/columns/pax_compress.cc | 15 ++++++++++++--- .../pax_storage/src/cpp/storage/proto/pax.proto | 1 + 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/contrib/pax_storage/src/cpp/access/paxc_rel_options.cc b/contrib/pax_storage/src/cpp/access/paxc_rel_options.cc index 647cb5743cf..5de1b14cd97 100644 --- a/contrib/pax_storage/src/cpp/access/paxc_rel_options.cc +++ b/contrib/pax_storage/src/cpp/access/paxc_rel_options.cc @@ -50,6 +50,10 @@ static const relopt_compress_type_mapping kSelfRelCompressMap[] = { pax::ColumnEncoding_Kind::ColumnEncoding_Kind_COMPRESS_ZSTD}, {ColumnEncoding_Kind_COMPRESS_ZLIB_STR, pax::ColumnEncoding_Kind::ColumnEncoding_Kind_COMPRESS_ZLIB}, +#ifdef USE_LZ4 + {ColumnEncoding_Kind_COMPRESS_LZ4_STR, + pax::ColumnEncoding_Kind::ColumnEncoding_Kind_COMPRESS_LZ4}, +#endif }; typedef struct { diff --git a/contrib/pax_storage/src/cpp/access/paxc_rel_options.h b/contrib/pax_storage/src/cpp/access/paxc_rel_options.h index 4e813f38c40..e6c29363ab1 100644 --- a/contrib/pax_storage/src/cpp/access/paxc_rel_options.h +++ b/contrib/pax_storage/src/cpp/access/paxc_rel_options.h @@ -41,6 +41,7 @@ namespace paxc { #define ColumnEncoding_Kind_DICTIONARY_STR "dict" #define ColumnEncoding_Kind_COMPRESS_ZSTD_STR "zstd" #define ColumnEncoding_Kind_COMPRESS_ZLIB_STR "zlib" +#define ColumnEncoding_Kind_COMPRESS_LZ4_STR "lz4" #define STORAGE_FORMAT_TYPE_PORC "porc" #define STORAGE_FORMAT_TYPE_PORC_VEC "porc_vec" diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc index b26fdff65bf..f39e453cfee 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc @@ -798,6 +798,9 @@ INSTANTIATE_TEST_SUITE_P( PaxColumnEncodingTestCombine, PaxColumnCompressTest, testing::Combine(testing::Values(16, 32, 64), testing::Values(ColumnEncoding_Kind_NO_ENCODED, +#ifdef USE_LZ4 + ColumnEncoding_Kind_COMPRESS_LZ4, +#endif ColumnEncoding_Kind_COMPRESS_ZSTD, ColumnEncoding_Kind_COMPRESS_ZLIB))); @@ -805,6 +808,9 @@ INSTANTIATE_TEST_SUITE_P( PaxColumnEncodingTestCombine, PaxNonFixedColumnCompressTest, testing::Combine(testing::Values(16, 32, 64), testing::Values(ColumnEncoding_Kind_NO_ENCODED, +#ifdef USE_LZ4 + ColumnEncoding_Kind_COMPRESS_LZ4, +#endif ColumnEncoding_Kind_COMPRESS_ZSTD, ColumnEncoding_Kind_COMPRESS_ZLIB), testing::Values(true, false), diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_compress.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_compress.cc index 87a34cbb6d7..f4bae52ea7d 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_compress.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_compress.cc @@ -50,6 +50,12 @@ std::shared_ptr PaxCompressor::CreateBlockCompressor( compressor = std::make_shared(); break; } +#ifdef USE_LZ4 + case ColumnEncoding_Kind::ColumnEncoding_Kind_COMPRESS_LZ4: { + compressor = std::make_shared(); + break; + } +#endif case ColumnEncoding_Kind::ColumnEncoding_Kind_DEF_ENCODED: { CBDB_RAISE(cbdb::CException::ExType::kExTypeLogicError, fmt("Invalid compress type %d", @@ -230,9 +236,12 @@ size_t PaxLZ4Compressor::GetCompressBound(size_t src_len) { } size_t PaxLZ4Compressor::Compress(void *dst_buff, size_t dst_cap, - void *src_buff, size_t src_len, int /*lvl*/) { - return LZ4_compress_default((char *)src_buff, (char *)dst_buff, src_len, - dst_cap); + void *src_buff, size_t src_len, int lvl) { + // acceleration affects compression speed, the larger acceleration value, + // the less compression ratio. + int acceleration = (20 - lvl) / 6; + return LZ4_compress_fast((char *)src_buff, (char *)dst_buff, src_len, + dst_cap, acceleration); } size_t PaxLZ4Compressor::Decompress(void *dst_buff, size_t dst_len, diff --git a/contrib/pax_storage/src/cpp/storage/proto/pax.proto b/contrib/pax_storage/src/cpp/storage/proto/pax.proto index 3e25710027d..765d3e0f8a5 100644 --- a/contrib/pax_storage/src/cpp/storage/proto/pax.proto +++ b/contrib/pax_storage/src/cpp/storage/proto/pax.proto @@ -37,6 +37,7 @@ message ColumnEncoding { COMPRESS_ZLIB = 4; // use ZLIB to compress DICTIONARY = 5; // use dict-endoing + COMPRESS_LZ4 = 6; // use lz4 to compress } optional Kind kind = 1; From d14f552ea15dde0cbcb3980c5fcba697780f65e1 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Wed, 3 Sep 2025 00:12:43 +0800 Subject: [PATCH 132/260] Fix compilation with --disable-orca Remove the USE_ORCA ifdef around OptimizerOptions. The struct is required regardless of ORCA support, and the conditional caused compilation failures when configured with --disable-orca. --- src/include/optimizer/orcaopt.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/include/optimizer/orcaopt.h b/src/include/optimizer/orcaopt.h index 2bb5395875c..4a045b632c0 100644 --- a/src/include/optimizer/orcaopt.h +++ b/src/include/optimizer/orcaopt.h @@ -29,13 +29,11 @@ #include "pg_config.h" -#ifdef USE_ORCA typedef struct OptimizerOptions { bool create_vectorization_plan; } OptimizerOptions; -#endif #endif /* ORCA_H */ From 8e9b2c32f4320611c059b673abcad8ee33c2af93 Mon Sep 17 00:00:00 2001 From: liushengsong Date: Wed, 27 Aug 2025 15:09:14 +0800 Subject: [PATCH 133/260] Fix: if tableam implement relation_acquire_sample_rows, then just use it --- src/backend/commands/analyze.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 265155b065b..cfe249d5957 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -1643,9 +1643,13 @@ gp_acquire_sample_rows_func(Relation onerel, int elevel, totalrows, totaldeadrows); } - if (RelationIsAppendOptimized(onerel)) + /* + * if relation_acquire_sample_rows exist, we use it directly. + * Otherwise, use the acquire_sample_rows by default. + */ + if (onerel->rd_tableam->relation_acquire_sample_rows) return table_relation_acquire_sample_rows(onerel, elevel, rows, - targrows, totalrows, totaldeadrows); + targrows, totalrows, totaldeadrows); return acquire_sample_rows(onerel, elevel, rows, targrows, totalrows, totaldeadrows); From baf7494b98460fbeb2ba9460b4054ff9a2de4e61 Mon Sep 17 00:00:00 2001 From: HuSen8891 Date: Fri, 29 Aug 2025 18:20:35 +0800 Subject: [PATCH 134/260] Fix: quick exit in dumptuples if query execution is finished If QueryFinishPending is set when query is running into dumptuples, the tuplecontext is reset but memtuples are not cumsumed. When query is running into dumptuples again, tuplesort_sort_memtuples will access these memtuples, and the memory allocated in tuplecontext is already freed, this will cause invalid memory access. To avoid this situation, do nothing in dumptuples if QueryFinishPending is set. --- src/backend/utils/sort/tuplesort.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index d3978ca987d..5a5415d4452 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -3232,6 +3232,14 @@ dumptuples(Tuplesortstate *state, bool alltuples) !alltuples) return; + /* + * do nothing if we are told to finish execution. + */ + if (QueryFinishPending) + { + return; + } + /* * Final call might require no sorting, in rare cases where we just so * happen to have previously LACKMEM()'d at the point where exactly all From b46c10d76fdc581a058860c530d9dd9f013d9476 Mon Sep 17 00:00:00 2001 From: Huansong Fu Date: Mon, 20 Mar 2023 14:29:50 -0700 Subject: [PATCH 135/260] Fix names of pg_stat_all_tables|indexes We used to not have a very clear naming guideline for the existing 'pg_%' system views and the MPP versions of them. As an example, we renamed PG's pg_stat_all_tables and pg_stat_all_indexes to have an '_internal' appendix, and used their original names to collect aggregated results from all segments (commit e6f93033289e). However, with the previous commit, we now let all existing PG system views to have their original names, while add corresponding 'gp_%' views for the non-aggregated results from all segments, and 'gp_%_summary' views for aggregated results from all segments. Therefore, we now revert pg_stat_all_tables and pg_stat_all_indexes back to their original definitions, which just collect stats from a single segment. Then, we add them to sytem_views_gp.in to produce gp_stat_all_tables and gp_stat_all_indexes which collect non-aggregated results from all segments. Finally, we rename the aggregate version of those views to be gp_stat_all_tables_summary and gp_stat_all_indexes_summary. Because views pg_stat_user_tables and pg_stat_user_indexes use the above sumary views, we have to add _summary views for these two views as well. We will add _summary for other system views later. Modify regress test accordingly. --- src/backend/catalog/system_views.sql | 34 ++++++--- src/backend/catalog/system_views_gp.in | 2 + src/test/regress/expected/pg_stat.out | 16 ++-- .../regress/input/pgstat_qd_tabstat.source | 76 +++++++++---------- .../regress/output/pgstat_qd_tabstat.source | 76 +++++++++---------- src/test/regress/sql/pg_stat.sql | 16 ++-- 6 files changed, 116 insertions(+), 104 deletions(-) diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index d5b7b81e8a2..4b8c9c0df43 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -660,7 +660,7 @@ REVOKE EXECUTE ON FUNCTION pg_get_backend_memory_contexts() FROM PUBLIC; -- Statistics views -CREATE VIEW pg_stat_all_tables_internal AS +CREATE VIEW pg_stat_all_tables AS SELECT C.oid AS relid, N.nspname AS schemaname, @@ -694,7 +694,7 @@ CREATE VIEW pg_stat_all_tables_internal AS -- Gather data from segments on user tables, and use data on coordinator on system tables. -CREATE VIEW pg_stat_all_tables AS +CREATE VIEW gp_stat_all_tables_summary AS SELECT s.relid, s.schemaname, @@ -745,7 +745,7 @@ FROM max(analyze_count) as analyze_count, max(autoanalyze_count) as autoanalyze_count FROM - gp_dist_random('pg_stat_all_tables_internal') allt + gp_dist_random('pg_stat_all_tables') allt inner join pg_class c on allt.relid = c.oid left outer join gp_distribution_policy d @@ -763,9 +763,9 @@ FROM SELECT * FROM - pg_stat_all_tables_internal + pg_stat_all_tables WHERE - relid < 16384) m, pg_stat_all_tables_internal s + relid < 16384) m, pg_stat_all_tables s WHERE m.relid = s.relid; CREATE VIEW pg_stat_xact_all_tables AS @@ -815,7 +815,12 @@ CREATE VIEW pg_stat_user_tables AS -- since we don't have segments. -- We create a new view for single node mode. CREATE VIEW pg_stat_user_tables_single_node AS - SELECT * FROM pg_stat_all_tables_internal + SELECT * FROM pg_stat_all_tables + WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND + schemaname !~ '^pg_toast'; + +CREATE VIEW gp_stat_user_tables_summary AS + SELECT * FROM gp_stat_all_tables_summary WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND schemaname !~ '^pg_toast'; @@ -859,7 +864,7 @@ CREATE VIEW pg_statio_user_tables AS WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND schemaname !~ '^pg_toast'; -CREATE VIEW pg_stat_all_indexes_internal AS +CREATE VIEW pg_stat_all_indexes AS SELECT C.oid AS relid, I.oid AS indexrelid, @@ -877,7 +882,7 @@ CREATE VIEW pg_stat_all_indexes_internal AS -- Gather data from segments on user tables, and use data on coordinator on system tables. -CREATE VIEW pg_stat_all_indexes AS +CREATE VIEW gp_stat_all_indexes_summary AS SELECT s.relid, s.indexrelid, @@ -898,7 +903,7 @@ FROM sum(idx_tup_read) as idx_tup_read, sum(idx_tup_fetch) as idx_tup_fetch FROM - gp_dist_random('pg_stat_all_indexes_internal') + gp_dist_random('pg_stat_all_indexes') WHERE relid >= 16384 GROUP BY relid, indexrelid, schemaname, relname, indexrelname @@ -908,10 +913,10 @@ FROM SELECT * FROM - pg_stat_all_indexes_internal + pg_stat_all_indexes WHERE - relid < 16384) m, pg_stat_all_indexes_internal s -WHERE m.indexrelid = s.indexrelid; + relid < 16384) m, pg_stat_all_indexes s +WHERE m.relid = s.relid; CREATE VIEW pg_stat_sys_indexes AS SELECT * FROM pg_stat_all_indexes @@ -923,6 +928,11 @@ CREATE VIEW pg_stat_user_indexes AS WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND schemaname !~ '^pg_toast'; +CREATE VIEW gp_stat_user_indexes_summary AS + SELECT * FROM gp_stat_all_indexes_summary + WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND + schemaname !~ '^pg_toast'; + CREATE VIEW pg_statio_all_indexes AS SELECT C.oid AS relid, diff --git a/src/backend/catalog/system_views_gp.in b/src/backend/catalog/system_views_gp.in index d46dde3191e..cd865cea662 100644 --- a/src/backend/catalog/system_views_gp.in +++ b/src/backend/catalog/system_views_gp.in @@ -9,6 +9,8 @@ pg_replication_origin_status pg_replication_slots pg_settings pg_stat_activity +pg_stat_all_indexes +pg_stat_all_tables pg_stat_archiver pg_stat_bgwriter #pg_stat_database diff --git a/src/test/regress/expected/pg_stat.out b/src/test/regress/expected/pg_stat.out index 80e4e4ff132..8c2b2e81d32 100644 --- a/src/test/regress/expected/pg_stat.out +++ b/src/test/regress/expected/pg_stat.out @@ -5,7 +5,7 @@ create table pg_stat_test(a int); select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup -from pg_stat_all_tables where relname = 'pg_stat_test'; +from gp_stat_all_tables_summary where relname = 'pg_stat_test'; schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup ------------+--------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------ public | pg_stat_test | 0 | 0 | | | 0 | 0 | 0 | 0 | 0 | 0 @@ -14,7 +14,7 @@ from pg_stat_all_tables where relname = 'pg_stat_test'; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup -from pg_stat_user_tables where relname = 'pg_stat_test'; +from gp_stat_user_tables_summary where relname = 'pg_stat_test'; schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup ------------+--------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------ public | pg_stat_test | 0 | 0 | | | 0 | 0 | 0 | 0 | 0 | 0 @@ -22,14 +22,14 @@ from pg_stat_user_tables where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_all_indexes where relname = 'pg_stat_test'; +from gp_stat_all_indexes_summary where relname = 'pg_stat_test'; schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch ------------+---------+--------------+----------+--------------+--------------- (0 rows) select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_user_indexes where relname = 'pg_stat_test'; +from gp_stat_user_indexes_summary where relname = 'pg_stat_test'; schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch ------------+---------+--------------+----------+--------------+--------------- (0 rows) @@ -63,7 +63,7 @@ reset enable_seqscan; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze -from pg_stat_all_tables where relname = 'pg_stat_test'; +from gp_stat_all_tables_summary where relname = 'pg_stat_test'; schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze ------------+--------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------+--------------------- public | pg_stat_test | 12 | 391 | 1 | 0 | 110 | 0 | 19 | 0 | 91 | 19 | 129 @@ -72,7 +72,7 @@ from pg_stat_all_tables where relname = 'pg_stat_test'; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze -from pg_stat_user_tables where relname = 'pg_stat_test'; +from gp_stat_user_tables_summary where relname = 'pg_stat_test'; schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze ------------+--------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------+--------------------- public | pg_stat_test | 12 | 391 | 1 | 0 | 110 | 0 | 19 | 0 | 91 | 19 | 129 @@ -80,7 +80,7 @@ from pg_stat_user_tables where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_all_indexes where relname = 'pg_stat_test'; +from gp_stat_all_indexes_summary where relname = 'pg_stat_test'; schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch ------------+--------------+--------------------------+----------+--------------+--------------- public | pg_stat_test | pg_stat_user_table_index | 1 | 1 | 0 @@ -88,7 +88,7 @@ from pg_stat_all_indexes where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_user_indexes where relname = 'pg_stat_test'; +from gp_stat_user_indexes_summary where relname = 'pg_stat_test'; schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch ------------+--------------+--------------------------+----------+--------------+--------------- public | pg_stat_test | pg_stat_user_table_index | 1 | 1 | 0 diff --git a/src/test/regress/input/pgstat_qd_tabstat.source b/src/test/regress/input/pgstat_qd_tabstat.source index 0fb8c0ccb71..e9f76ccf0d6 100644 --- a/src/test/regress/input/pgstat_qd_tabstat.source +++ b/src/test/regress/input/pgstat_qd_tabstat.source @@ -10,7 +10,7 @@ copy table_for_docopy (i, j) from stdin; 3 hello3 \. select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_docopy'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_docopy'::regclass; CREATE TABLE data_tbl (a int,b char) distributed by (a); INSERT INTO data_tbl values(1,'1'); @@ -21,7 +21,7 @@ COPY data_tbl TO '/tmp/data_tbl.csv' on segment; create table copy_on_segment (a int,b char); COPY copy_on_segment from '/tmp/data_tbl.csv' on segment log errors segment reject limit 3 rows; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'copy_on_segment'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'copy_on_segment'::regclass; -- Test pgstat table stat in initplan on QD @@ -34,26 +34,26 @@ copy table_for_initplan (i, j, k) from stdin; explain (costs off) with updated AS (update table_for_initplan set k = 33 where i = 3 returning k) select table_for_initplan.*, (select sum(k) from updated) from table_for_initplan; with updated AS (update table_for_initplan set k = 33 where i = 3 returning k) select table_for_initplan.*, (select sum(k) from updated) from table_for_initplan; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_initplan'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_initplan'::regclass; -- Test pgstat table stat in CTAS on QD create table table_for_ctas with (autovacuum_enabled=false) as select i, 'hello' || i from generate_series(1, 100) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_ctas'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_ctas'::regclass; select i, 'hello' || i into table_for_insert_into from generate_series(1, 100) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_insert_into'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_insert_into'::regclass; -- Test pgstat table stat in ALTER TABLE SET DISTRIBUTED BY on QD create table table_for_set_distributed_by(i int, j varchar) distributed by (i); insert into table_for_set_distributed_by select i, 'hello' || i from generate_series(1, 333) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_set_distributed_by'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_set_distributed_by'::regclass; alter table table_for_set_distributed_by set distributed by (j); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_set_distributed_by'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_set_distributed_by'::regclass; -- Test pgstat table stat in execution of funciton on QD @@ -68,7 +68,7 @@ $$ language plpgsql volatile; select update_table_for_function(); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_function'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_function'::regclass; -- Test pgstat table stat in ALTER TABLE EXPAND TABLE on QD; @@ -78,11 +78,11 @@ create table table_for_expand(i int, j varchar) distributed by (i); insert into table_for_expand select i, 'hello' || i from generate_series(1, 333) f(i); select count(distinct gp_segment_id) from table_for_expand; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_expand'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_expand'::regclass; alter table table_for_expand expand table; select count(distinct gp_segment_id) from table_for_expand; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_expand'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_expand'::regclass; select gp_debug_reset_create_table_default_numsegments(); @@ -103,7 +103,7 @@ update table_for_iud set j = 'heroes never die' where i >= 300; release savepoint level3; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_iud'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_iud'::regclass; begin; savepoint level1; @@ -120,14 +120,14 @@ rollback to savepoint level3; delete from table_for_iud where i <= 200; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_iud'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_iud'::regclass; -- Test pgstat table stat in TRUNCATE on QD create table table_for_truncate(i int, j varchar) distributed by (i); insert into table_for_truncate select i, 'hello' || i from generate_series(1, 777) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_truncate'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_truncate'::regclass; begin; savepoint level1; savepoint level2; @@ -141,12 +141,12 @@ delete from table_for_truncate where i >= 700; update table_for_truncate set j = 'D' where i <= 200; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate'::regclass; create table table_for_truncate_abort(i int, j varchar) distributed by (i); insert into table_for_truncate_abort select i, 'hello' || i from generate_series(1, 777) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate_abort'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate_abort'::regclass; begin; savepoint level1; savepoint level2; @@ -160,7 +160,7 @@ delete from table_for_truncate_abort where i < 700; update table_for_truncate_abort set j = 'D' where i >= 200; rollback; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate_abort'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate_abort'::regclass; -- Test pgstat table stat for partition table on QD @@ -171,17 +171,17 @@ PARTITION BY RANGE (rank) DEFAULT PARTITION extra ); insert into rankpart select i, i % 10, i from generate_series(1, 1000)i; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; begin; delete from rankpart where id <= 100; rollback; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; copy rankpart (id, rank, product) from stdin; 1001 1 1001 @@ -196,8 +196,8 @@ copy rankpart (id, rank, product) from stdin; 1010 6 1010 \. select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; begin; update rankpart set rank = 1 where id > 1005; @@ -209,9 +209,9 @@ release savepoint level2; rollback to savepoint level1; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; begin; savepoint level1_1; @@ -219,9 +219,9 @@ insert into rankpart select i, i % 10, i from generate_series(2001, 3000)i; insert into rankpart select i, i % 10, i from generate_series(3001, 4000)i; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; -- Test pgstat matview stat with distributed policy. @@ -229,11 +229,11 @@ create table base_table(i int, j int, z int ) distributed by (i); insert into base_table select i,i,i from generate_series(1, 100) i; create materialized view mt as select * from base_table where z>=50; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; insert into base_table select i,i,i from generate_series(1, 100) i; refresh materialized view mt; select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; -- pg_stat_all_tables collects gpstats across segments select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; @@ -245,11 +245,11 @@ create table base_table(i int, j int, z int ) distributed replicated; insert into base_table select i,i,i from generate_series(1, 100) i; create materialized view mt as select * from base_table where z>=50 distributed replicated; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; insert into base_table select i,i,i from generate_series(1, 100) i; refresh materialized view mt; select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; -- pg_stat_all_tables collects gpstats across segments select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; @@ -263,15 +263,15 @@ insert into tabstat_ao select 1,1; delete from tabstat_ao; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select count(*) from pg_stat_all_tables +select count(*) from gp_stat_all_tables_summary where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass) OR relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass) OR relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins from pg_stat_all_tables where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); -select n_tup_ins from pg_stat_all_tables where relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); -select n_tup_ins from pg_stat_all_tables where relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); drop table tabstat_ao; diff --git a/src/test/regress/output/pgstat_qd_tabstat.source b/src/test/regress/output/pgstat_qd_tabstat.source index ca612e18b9c..591f262f7c5 100644 --- a/src/test/regress/output/pgstat_qd_tabstat.source +++ b/src/test/regress/output/pgstat_qd_tabstat.source @@ -10,7 +10,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_docopy'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_docopy'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 3 | 0 | 0 | 0 | 3 | 0 | 3 @@ -32,7 +32,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'copy_on_segment'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'copy_on_segment'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 4 | 0 | 0 | 0 | 4 | 0 | 4 @@ -70,7 +70,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_initplan'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_initplan'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 3 | 1 | 0 | 0 | 3 | 1 | 4 @@ -86,7 +86,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_ctas'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_ctas'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 0 | 0 | 100 | 0 | 100 @@ -101,7 +101,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_insert_into'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_insert_into'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 0 | 0 | 100 | 0 | 100 @@ -116,7 +116,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_set_distributed_by'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_set_distributed_by'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 0 | 0 | 333 | 0 | 333 @@ -129,7 +129,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_set_distributed_by'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_set_distributed_by'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 0 | 0 | 333 | 0 | 333 @@ -157,7 +157,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_function'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_function'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 200 | 0 | 133 | 200 | 533 @@ -185,7 +185,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_expand'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_expand'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 0 | 0 | 333 | 0 | 333 @@ -204,7 +204,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_expand'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_expand'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 0 | 0 | 333 | 0 | 333 @@ -238,7 +238,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_iud'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_iud'::regclass; n_live_tup | n_dead_tup ------------+------------ 333 | 34 @@ -264,7 +264,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_iud'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_iud'::regclass; n_live_tup | n_dead_tup ------------+------------ 133 | 713 @@ -279,7 +279,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_truncate'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_truncate'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 777 | 0 | 0 | 0 | 777 | 0 | 777 @@ -303,7 +303,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate'::regclass; n_live_tup | n_dead_tup ------------+------------ 699 | 301 @@ -317,7 +317,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate_abort'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate_abort'::regclass; n_live_tup | n_dead_tup ------------+------------ 777 | 0 @@ -341,7 +341,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate_abort'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate_abort'::regclass; n_live_tup | n_dead_tup ------------+------------ 777 | 223 @@ -360,19 +360,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 500 | 0 | 0 | 0 | 500 | 0 | 500 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 400 | 0 | 0 | 0 | 400 | 0 | 400 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 0 | 0 | 100 | 0 | 100 @@ -387,19 +387,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 500 | 0 | 50 | 0 | 500 | 0 | 500 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 400 | 0 | 40 | 0 | 400 | 0 | 400 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 10 | 0 | 100 | 0 | 100 @@ -412,13 +412,13 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 505 | 0 | 50 | 0 | 505 | 0 | 505 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 405 | 0 | 40 | 0 | 405 | 0 | 405 @@ -439,19 +439,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 510 | 0 | 55 | 0 | 510 | 0 | 510 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 410 | 0 | 50 | 0 | 400 | 10 | 410 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 10 | 0 | 100 | 0 | 100 @@ -468,19 +468,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 1510 | 0 | 55 | 0 | 1510 | 0 | 1510 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 1210 | 0 | 50 | 0 | 1200 | 10 | 1210 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 300 | 0 | 10 | 0 | 300 | 0 | 300 @@ -498,7 +498,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 51 | 0 | 0 | 0 | 51 | 0 | 51 @@ -514,7 +514,7 @@ select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat( (3 rows) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 153 | 0 | 0 | 0 | 102 | 0 | 153 @@ -539,7 +539,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 51 | 0 | 0 | 0 | 51 | 0 | 51 @@ -555,7 +555,7 @@ select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat( (3 rows) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 153 | 0 | 0 | 0 | 102 | 0 | 153 @@ -580,7 +580,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select count(*) from pg_stat_all_tables +select count(*) from gp_stat_all_tables_summary where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass) OR relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass) @@ -596,19 +596,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins from pg_stat_all_tables where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); n_tup_ins ----------- 1 (1 row) -select n_tup_ins from pg_stat_all_tables where relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); n_tup_ins ----------- 1 (1 row) -select n_tup_ins from pg_stat_all_tables where relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); n_tup_ins ----------- 1 diff --git a/src/test/regress/sql/pg_stat.sql b/src/test/regress/sql/pg_stat.sql index d9fc37850b0..383a9149186 100644 --- a/src/test/regress/sql/pg_stat.sql +++ b/src/test/regress/sql/pg_stat.sql @@ -6,17 +6,17 @@ create table pg_stat_test(a int); select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup -from pg_stat_all_tables where relname = 'pg_stat_test'; +from gp_stat_all_tables_summary where relname = 'pg_stat_test'; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup -from pg_stat_user_tables where relname = 'pg_stat_test'; +from gp_stat_user_tables_summary where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_all_indexes where relname = 'pg_stat_test'; +from gp_stat_all_indexes_summary where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_user_indexes where relname = 'pg_stat_test'; +from gp_stat_user_indexes_summary where relname = 'pg_stat_test'; begin; -- make analyze same transcation with insert to avoid double the pgstat causes by unorder message read. insert into pg_stat_test select * from generate_series(1, 100); @@ -42,17 +42,17 @@ reset enable_seqscan; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze -from pg_stat_all_tables where relname = 'pg_stat_test'; +from gp_stat_all_tables_summary where relname = 'pg_stat_test'; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze -from pg_stat_user_tables where relname = 'pg_stat_test'; +from gp_stat_user_tables_summary where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_all_indexes where relname = 'pg_stat_test'; +from gp_stat_all_indexes_summary where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_user_indexes where relname = 'pg_stat_test'; +from gp_stat_user_indexes_summary where relname = 'pg_stat_test'; reset optimizer; reset max_parallel_workers_per_gather; From c1d8bb78226e94e04123994d2418a68d94300587 Mon Sep 17 00:00:00 2001 From: Alexandra Wang Date: Thu, 27 Apr 2023 16:53:32 -0700 Subject: [PATCH 136/260] Add gp_stat_progress_%_summary system views Added the following views: gp_stat_progress_vacuum_summary gp_stat_progress_analyze_summary gp_stat_progress_cluster_summary gp_stat_progress_create_index_summary Also replaced pg_stat_progress_* views with gp_stat_progress_* views for existing tests. --- src/backend/catalog/Makefile | 3 +- .../catalog/system_views_gp_summary.sql | 109 ++++++++++ src/backend/commands/analyze.c | 1 + src/bin/initdb/initdb.c | 6 +- src/include/catalog/catversion.h | 2 +- .../isolation2/expected/analyze_progress.out | 95 +++++++++ .../expected/ao_index_build_progress.out | 88 ++++++-- .../expected/vacuum_progress_row.out | 189 +++++++++++------- src/test/isolation2/isolation2_schedule | 1 + src/test/isolation2/sql/analyze_progress.sql | 42 ++++ .../sql/ao_index_build_progress.sql | 44 ++-- src/test/isolation2/sql/setup.sql | 21 ++ .../isolation2/sql/vacuum_progress_row.sql | 168 +++++----------- 13 files changed, 538 insertions(+), 231 deletions(-) create mode 100644 src/backend/catalog/system_views_gp_summary.sql create mode 100644 src/test/isolation2/expected/analyze_progress.out create mode 100644 src/test/isolation2/sql/analyze_progress.sql diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile index 260bd608d50..f1a0251e1cb 100644 --- a/src/backend/catalog/Makefile +++ b/src/backend/catalog/Makefile @@ -201,6 +201,7 @@ endif $(INSTALL_DATA) $(srcdir)/system_functions.sql '$(DESTDIR)$(datadir)/system_functions.sql' $(INSTALL_DATA) $(srcdir)/system_views.sql '$(DESTDIR)$(datadir)/system_views.sql' $(INSTALL_DATA) $(srcdir)/$(GP_SYSVIEW_SQL) '$(DESTDIR)$(datadir)/$(GP_SYSVIEW_SQL)' + $(INSTALL_DATA) $(srcdir)/system_views_gp_summary.sql '$(DESTDIR)$(datadir)/system_views_gp_summary.sql' $(INSTALL_DATA) $(srcdir)/information_schema.sql '$(DESTDIR)$(datadir)/information_schema.sql' $(INSTALL_DATA) $(call vpathsearch,cdb_schema.sql) '$(DESTDIR)$(datadir)/cdb_init.d/cdb_schema.sql' $(INSTALL_DATA) $(srcdir)/sql_features.txt '$(DESTDIR)$(datadir)/sql_features.txt' @@ -211,7 +212,7 @@ installdirs: .PHONY: uninstall-data uninstall-data: - rm -f $(addprefix '$(DESTDIR)$(datadir)'/, postgres.bki system_constraints.sql system_functions.sql system_views.sql information_schema.sql cdb_init.d/cdb_schema.sql cdb_init.d/gp_toolkit.sql sql_features.txt) + rm -f $(addprefix '$(DESTDIR)$(datadir)'/, postgres.bki system_constraints.sql system_functions.sql system_views.sql system_views_gp_summary.sql information_schema.sql cdb_init.d/cdb_schema.sql cdb_init.d/gp_toolkit.sql sql_features.txt) ifeq ($(USE_INTERNAL_FTS_FOUND), false) rm -f $(addprefix '$(DESTDIR)$(datadir)'/, external_fts.sql) endif diff --git a/src/backend/catalog/system_views_gp_summary.sql b/src/backend/catalog/system_views_gp_summary.sql new file mode 100644 index 00000000000..58f4768c124 --- /dev/null +++ b/src/backend/catalog/system_views_gp_summary.sql @@ -0,0 +1,109 @@ +/* + * Greenplum System Summary Views + * + * Portions Copyright (c) 2006-2010, Greenplum inc. + * Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates. + * Copyright (c) 1996-2019, PostgreSQL Global Development Group + * + * src/backend/catalog/system_views_gp_summary.sql + * + + * This file contains summary views for various Greenplum system catalog + * views. These summary views are designed to provide aggregated or averaged + * information for partitioned and replicated tables, considering multiple + * segments in a Greenplum database. + * + * Note: this file is read in single-user -j mode, which means that the + * command terminator is semicolon-newline-newline; whenever the backend + * sees that, it stops and executes what it's got. If you write a lot of + * statements without empty lines between, they'll all get quoted to you + * in any error message about one of them, so don't do that. Also, you + * cannot write a semicolon immediately followed by an empty line in a + * string literal (including a function body!) or a multiline comment. + */ + +CREATE VIEW gp_stat_progress_vacuum_summary AS +SELECT + max(coalesce(a1.pid, 0)) as pid, + a.datid, + a.datname, + a.relid, + a.phase, + case when d.policytype = 'r' then (sum(a.heap_blks_total)/d.numsegments)::bigint else sum(a.heap_blks_total) end heap_blks_total, + case when d.policytype = 'r' then (sum(a.heap_blks_scanned)/d.numsegments)::bigint else sum(a.heap_blks_scanned) end heap_blks_scanned, + case when d.policytype = 'r' then (sum(a.heap_blks_vacuumed)/d.numsegments)::bigint else sum(a.heap_blks_vacuumed) end heap_blks_vacuumed, + case when d.policytype = 'r' then (sum(a.index_vacuum_count)/d.numsegments)::bigint else sum(a.index_vacuum_count) end index_vacuum_count, + case when d.policytype = 'r' then (sum(a.max_dead_tuples)/d.numsegments)::bigint else sum(a.max_dead_tuples) end max_dead_tuples, + case when d.policytype = 'r' then (sum(a.num_dead_tuples)/d.numsegments)::bigint else sum(a.num_dead_tuples) end num_dead_tuples +FROM gp_stat_progress_vacuum a + JOIN pg_class c ON a.relid = c.oid + LEFT JOIN gp_distribution_policy d ON c.oid = d.localoid + LEFT JOIN gp_stat_progress_vacuum a1 ON a.pid = a1.pid AND a1.gp_segment_id = -1 +WHERE a.gp_segment_id > -1 +GROUP BY a.datid, a.datname, a.relid, a.phase, d.policytype, d.numsegments; + +CREATE OR REPLACE VIEW gp_stat_progress_analyze_summary AS +SELECT + max(coalesce(a1.pid, 0)) as pid, + a.datid, + a.datname, + a.relid, + a.phase, + case when d.policytype = 'r' then (sum(a.sample_blks_total)/d.numsegments)::bigint else sum(a.sample_blks_total) end sample_blks_total, + case when d.policytype = 'r' then (sum(a.sample_blks_scanned)/d.numsegments)::bigint else sum(a.sample_blks_scanned) end sample_blks_scanned, + case when d.policytype = 'r' then (sum(a.ext_stats_total)/d.numsegments)::bigint else sum(a.ext_stats_total) end ext_stats_total, + case when d.policytype = 'r' then (sum(a.ext_stats_computed)/d.numsegments)::bigint else sum(a.ext_stats_computed) end ext_stats_computed, + case when d.policytype = 'r' then (sum(a.child_tables_total)/d.numsegments)::bigint else sum(a.child_tables_total) end child_tables_total, + case when d.policytype = 'r' then (sum(a.child_tables_done)/d.numsegments)::bigint else sum(a.child_tables_done) end child_tables_done +FROM gp_stat_progress_analyze a + JOIN pg_class c ON a.relid = c.oid + LEFT JOIN gp_distribution_policy d ON c.oid = d.localoid + LEFT JOIN gp_stat_progress_analyze a1 ON a.pid = a1.pid AND a1.gp_segment_id = -1 +WHERE a.gp_segment_id > -1 +GROUP BY a.datid, a.datname, a.relid, a.phase, d.policytype, d.numsegments; + +CREATE OR REPLACE VIEW gp_stat_progress_cluster_summary AS +SELECT + max(coalesce(a1.pid, 0)) as pid, + a.datid, + a.datname, + a.relid, + a.command, + a.phase, + a.cluster_index_relid, + case when d.policytype = 'r' then (sum(a.heap_tuples_scanned)/d.numsegments)::bigint else sum(a.heap_tuples_scanned) end heap_tuples_scanned, + case when d.policytype = 'r' then (sum(a.heap_tuples_written)/d.numsegments)::bigint else sum(a.heap_tuples_written) end heap_tuples_written, + case when d.policytype = 'r' then (sum(a.heap_blks_total)/d.numsegments)::bigint else sum(a.heap_blks_total) end heap_blks_total, + case when d.policytype = 'r' then (sum(a.heap_blks_scanned)/d.numsegments)::bigint else sum(a.heap_blks_scanned) end heap_blks_scanned, + case when d.policytype = 'r' then (sum(a.index_rebuild_count)/d.numsegments)::bigint else sum(a.index_rebuild_count) end index_rebuild_count +FROM gp_stat_progress_cluster a + JOIN pg_class c ON a.relid = c.oid + LEFT JOIN gp_distribution_policy d ON c.oid = d.localoid + LEFT JOIN gp_stat_progress_cluster a1 ON a.pid = a1.pid AND a1.gp_segment_id = -1 +WHERE a.gp_segment_id > -1 +GROUP BY a.datid, a.datname, a.relid, a.command, a.phase, a.cluster_index_relid, d.policytype, d.numsegments; + +CREATE OR REPLACE VIEW gp_stat_progress_create_index_summary AS +SELECT + max(coalesce(a1.pid, 0)) as pid, + a.datid, + a.datname, + a.relid, + a.index_relid, + a.command, + a.phase, + case when d.policytype = 'r' then (sum(a.lockers_total)/d.numsegments)::bigint else sum(a.lockers_total) end lockers_total, + case when d.policytype = 'r' then (sum(a.lockers_done)/d.numsegments)::bigint else sum(a.lockers_done) end lockers_done, + max(a.current_locker_pid) as current_locker_pid, + case when d.policytype = 'r' then (sum(a.blocks_total)/d.numsegments)::bigint else sum(a.blocks_total) end blocks_total, + case when d.policytype = 'r' then (sum(a.blocks_done)/d.numsegments)::bigint else sum(a.blocks_done) end blocks_done, + case when d.policytype = 'r' then (sum(a.tuples_total)/d.numsegments)::bigint else sum(a.tuples_total) end tuples_total, + case when d.policytype = 'r' then (sum(a.tuples_done)/d.numsegments)::bigint else sum(a.tuples_done) end tuples_done, + case when d.policytype = 'r' then (sum(a.partitions_total)/d.numsegments)::bigint else sum(a.partitions_total) end partitions_total, + case when d.policytype = 'r' then (sum(a.partitions_done)/d.numsegments)::bigint else sum(a.partitions_done) end partitions_done +FROM gp_stat_progress_create_index a + JOIN pg_class c ON a.relid = c.oid + LEFT JOIN gp_distribution_policy d ON c.oid = d.localoid + LEFT JOIN gp_stat_progress_create_index a1 ON a.pid = a1.pid AND a1.gp_segment_id = -1 +WHERE a.gp_segment_id > -1 +GROUP BY a.datid, a.datname, a.relid, a.index_relid, a.command, a.phase, d.policytype, d.numsegments; diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index cfe249d5957..ce642dc84e7 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -1896,6 +1896,7 @@ acquire_sample_rows(Relation onerel, int elevel, pgstat_progress_update_param(PROGRESS_ANALYZE_BLOCKS_DONE, ++blksdone); + SIMPLE_FAULT_INJECTOR("analyze_block"); } ExecDropSingleTupleTableSlot(slot); diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 8525d0ca0d9..4ed9869a2c9 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -175,6 +175,7 @@ static char *external_fts_files; static char *system_functions_file; static char *system_views_file; static char *system_views_gp_file; +static char *system_views_gp_summary_file; static bool success = false; static bool made_new_pgdata = false; static bool found_existing_pgdata = false; @@ -1705,8 +1706,6 @@ setup_run_file(FILE *cmdfd, const char *filename) } PG_CMD_PUTS("\n\n"); - - free(lines); } /* @@ -2833,6 +2832,7 @@ setup_data_file_paths(void) set_input(&system_functions_file, "system_functions.sql"); set_input(&system_views_file, "system_views.sql"); set_input(&system_views_gp_file, "system_views_gp.sql"); + set_input(&system_views_gp_summary_file, "system_views_gp_summary.sql"); set_input(&cdb_init_d_dir, "cdb_init.d"); @@ -2867,6 +2867,7 @@ setup_data_file_paths(void) check_input(system_functions_file); check_input(system_views_file); check_input(system_views_gp_file); + check_input(system_views_gp_summary_file); } @@ -3235,6 +3236,7 @@ initialize_data_directory(void) setup_run_file(cmdfd, system_views_file); setup_run_file(cmdfd, system_views_gp_file); + setup_run_file(cmdfd, system_views_gp_summary_file); setup_description(cmdfd); diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 026192b3674..ac649996d98 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -56,6 +56,6 @@ */ /* 3yyymmddN */ -#define CATALOG_VERSION_NO 302506101 +#define CATALOG_VERSION_NO 302509031 #endif diff --git a/src/test/isolation2/expected/analyze_progress.out b/src/test/isolation2/expected/analyze_progress.out new file mode 100644 index 00000000000..97c02fbe617 --- /dev/null +++ b/src/test/isolation2/expected/analyze_progress.out @@ -0,0 +1,95 @@ +-- Test gp_stat_progress_analyze_summary +-- setup hash distributed table +CREATE TABLE t_analyze_part (a INT, b INT) DISTRIBUTED BY (a); +CREATE +INSERT INTO t_analyze_part SELECT i, i FROM generate_series(1, 100000) i; +INSERT 100000 + +-- Suspend analyze after scanning 20 blocks on each segment +SELECT gp_inject_fault('analyze_block', 'suspend', '', '', '', 20, 20, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +-- session 1: analyze the table +1&: ANALYZE t_analyze_part; +SELECT gp_wait_until_triggered_fault('analyze_block', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_wait_until_triggered_fault +------------------------------- + Success: + Success: + Success: +(3 rows) + +-- session 2: query pg_stat_progress_analyze while the analyze is running, the view should indicate 60 blocks have been scanned as aggregated progress of 3 segments +2: SELECT pid IS NOT NULL as has_pid, datname, relid::regclass, phase, sample_blks_total, sample_blks_scanned FROM gp_stat_progress_analyze_summary; + has_pid | datname | relid | phase | sample_blks_total | sample_blks_scanned +---------+----------------+----------------+-----------------------+-------------------+--------------------- + t | isolation2test | t_analyze_part | acquiring sample rows | 111 | 60 +(1 row) + +-- Reset fault injector +SELECT gp_inject_fault('analyze_block', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) +1<: <... completed> +ANALYZE + +-- teardown +DROP TABLE t_analyze_part; +DROP + +-- setup replicated table +CREATE TABLE t_analyze_repl (a INT, b INT) DISTRIBUTED REPLICATED; +CREATE +INSERT INTO t_analyze_repl SELECT i, i FROM generate_series(1, 100000) i; +INSERT 100000 + +-- Suspend analyze after scanning 20 blocks on each segment +SELECT gp_inject_fault('analyze_block', 'suspend', '', '', '', 20, 20, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +-- session 1: analyze the table +1&: ANALYZE t_analyze_repl; +SELECT gp_wait_until_triggered_fault('analyze_block', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_wait_until_triggered_fault +------------------------------- + Success: + Success: + Success: +(3 rows) + +-- session 2: query pg_stat_progress_analyze while the analyze is running, the view should indicate 20 blocks have been scanned as average progress of 3 segments +2: SELECT pid IS NOT NULL as has_pid, datname, relid::regclass, phase, sample_blks_total, sample_blks_scanned FROM gp_stat_progress_analyze_summary; + has_pid | datname | relid | phase | sample_blks_total | sample_blks_scanned +---------+----------------+----------------+-----------------------+-------------------+--------------------- + t | isolation2test | t_analyze_repl | acquiring sample rows | 111 | 20 +(1 row) + +-- Reset fault injector +SELECT gp_inject_fault('analyze_block', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) +1<: <... completed> +ANALYZE + +-- teardown +DROP TABLE t_analyze_repl; +DROP + diff --git a/src/test/isolation2/expected/ao_index_build_progress.out b/src/test/isolation2/expected/ao_index_build_progress.out index 1048076ce9f..2cc97d09031 100644 --- a/src/test/isolation2/expected/ao_index_build_progress.out +++ b/src/test/isolation2/expected/ao_index_build_progress.out @@ -8,36 +8,52 @@ CREATE -- Insert all tuples to seg1. INSERT INTO ao_index_build_progress SELECT 0, i FROM generate_series(1, 100000) i; INSERT 100000 +INSERT INTO ao_index_build_progress SELECT 2, i FROM generate_series(1, 100000) i; +INSERT 100000 +INSERT INTO ao_index_build_progress SELECT 5, i FROM generate_series(1, 100000) i; +INSERT 100000 -- Suspend execution when some blocks have been read. -SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'suspend', '', '', '', 10, 10, 0, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'suspend', '', '', '', 10, 10, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) 1&: CREATE INDEX ON ao_index_build_progress(i); -- Wait until some AO varblocks have been read. -SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_success', 10, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_success', 10, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: -(1 row) + Success: + Success: +(3 rows) -- By now, we should have reported some blocks (of size 'block_size') as "done", -- as well as a total number of blocks that matches the relation's on-disk size. -1U: SELECT command, phase, (pg_relation_size('ao_index_build_progress') + (current_setting('block_size')::int - 1)) / current_setting('block_size')::int AS blocks_total_actual, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported FROM pg_stat_progress_create_index WHERE relid = 'ao_index_build_progress'::regclass; +SELECT command, phase, (pg_relation_size('ao_index_build_progress') + (current_setting('block_size')::int - 1)) / current_setting('block_size')::int AS blocks_total_actual, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported FROM gp_stat_progress_create_index WHERE gp_segment_id = 1 AND relid = 'ao_index_build_progress'::regclass; command | phase | blocks_total_actual | blocks_total_reported | blocks_done_reported --------------+--------------------------------+---------------------+-----------------------+---------------------- CREATE INDEX | building index: scanning table | 10 | 10 | 2 (1 row) +-- The same should be true for the summary view, and the total number of blocks should be tripled. +SELECT command, phase, blocks_total, blocks_done FROM gp_stat_progress_create_index_summary WHERE relid = 'ao_index_build_progress'::regclass; + command | phase | blocks_total | blocks_done +--------------+--------------------------------+--------------+------------- + CREATE INDEX | building index: scanning table | 30 | 6 +(1 row) -SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) 1<: <... completed> CREATE @@ -49,38 +65,54 @@ CREATE -- Insert all tuples to seg1. INSERT INTO aoco_index_build_progress SELECT 0, i FROM generate_series(1, 100000) i; INSERT 100000 +INSERT INTO aoco_index_build_progress SELECT 2, i FROM generate_series(1, 100000) i; +INSERT 100000 +INSERT INTO aoco_index_build_progress SELECT 5, i FROM generate_series(1, 100000) i; +INSERT 100000 -- Suspend execution when some blocks have been read. -SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'suspend', '', '', '', 5, 5, 0, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'suspend', '', '', '', 5, 5, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) 1&: CREATE INDEX ON aoco_index_build_progress(i); -- Wait until some AOCO varblocks have been read. -SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_success', 5, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_success', 5, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: -(1 row) + Success: + Success: +(3 rows) -- By now, we should have reported some blocks (of size 'block_size') as "done", -- as well as a total number of blocks that matches the relation's on-disk size. -- Note: all blocks for the relation have to be scanned as we are building an -- index for the first time and a block directory has to be created. -1U: SELECT command, phase, (pg_relation_size('aoco_index_build_progress') + (current_setting('block_size')::int - 1)) / current_setting('block_size')::int AS blocks_total_actual, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported FROM pg_stat_progress_create_index WHERE relid = 'aoco_index_build_progress'::regclass; +SELECT command, phase, (pg_relation_size('aoco_index_build_progress') + (current_setting('block_size')::int - 1)) / current_setting('block_size')::int AS blocks_total_actual, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported FROM gp_stat_progress_create_index WHERE gp_segment_id = 1 AND relid = 'aoco_index_build_progress'::regclass; command | phase | blocks_total_actual | blocks_total_reported | blocks_done_reported --------------+--------------------------------+---------------------+-----------------------+---------------------- CREATE INDEX | building index: scanning table | 20 | 20 | 4 (1 row) +-- The same should be true for the summary view, and the total number of blocks should be tripled. +SELECT command, phase, blocks_total, blocks_done FROM gp_stat_progress_create_index_summary WHERE relid = 'aoco_index_build_progress'::regclass; + command | phase | blocks_total | blocks_done +--------------+--------------------------------+--------------+------------- + CREATE INDEX | building index: scanning table | 60 | 12 +(1 row) -SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) 1<: <... completed> CREATE @@ -88,36 +120,48 @@ CREATE -- Repeat the test for another index build -- Suspend execution when some blocks have been read. -SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'suspend', '', '', '', 5, 5, 0, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'suspend', '', '', '', 5, 5, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) 1&: CREATE INDEX ON aoco_index_build_progress(j); -- Wait until some AOCO varblocks have been read. -SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_success', 5, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_success', 5, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: -(1 row) + Success: + Success: +(3 rows) -- By now, we should have reported some blocks (of size 'block_size') as "done", -- as well as a total number of blocks that matches the size of col j's segfile. -- Note: since we already had a block directory prior to the index build on --- column 'j', only column 'j' will be scanned. CBDB_CHERRY_PICK_MERGE_FIXME: fix when ao blkdir will be supported -1U: SELECT command, phase, ((pg_stat_file(pg_relation_filepath('aoco_index_build_progress') || '.' || 129)).size + (current_setting('block_size')::int - 1)) / current_setting('block_size')::int AS col_j_blocks, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported FROM pg_stat_progress_create_index WHERE relid = 'aoco_index_build_progress'::regclass; +-- column 'j', only column 'j' will be scanned. +1U: SELECT command, phase, ((pg_stat_file(pg_relation_filepath('aoco_index_build_progress') || '.' || 129)).size + (current_setting('block_size')::int - 1)) / current_setting('block_size')::int AS col_j_blocks, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported FROM gp_stat_progress_create_index WHERE gp_segment_id = 1 AND relid = 'aoco_index_build_progress'::regclass; command | phase | col_j_blocks | blocks_total_reported | blocks_done_reported --------------+--------------------------------+--------------+-----------------------+---------------------- CREATE INDEX | building index: scanning table | 8 | 20 | 4 (1 row) +-- The same should be true for the summary view, and the total number of blocks should be tripled. +SELECT command, phase, blocks_total, blocks_done FROM gp_stat_progress_create_index_summary WHERE relid = 'aoco_index_build_progress'::regclass; + command | phase | blocks_total | blocks_done +--------------+--------------------------------+--------------+------------- + CREATE INDEX | building index: scanning table | 24 | 9 +(1 row) -SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) 1<: <... completed> CREATE diff --git a/src/test/isolation2/expected/vacuum_progress_row.out b/src/test/isolation2/expected/vacuum_progress_row.out index 0f1b3e65ef5..619b3e41b80 100644 --- a/src/test/isolation2/expected/vacuum_progress_row.out +++ b/src/test/isolation2/expected/vacuum_progress_row.out @@ -16,22 +16,21 @@ CREATE CREATE INDEX on vacuum_progress_ao_row(j); CREATE --- Insert all tuples to seg1 from two current sessions so that data are stored --- in two segment files. +-- Insert from two current sessions so that data are stored in two segment files. 1: BEGIN; BEGIN 2: BEGIN; BEGIN -1: INSERT INTO vacuum_progress_ao_row SELECT 0, i FROM generate_series(1, 100000) i; +1: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; INSERT 100000 -2: INSERT INTO vacuum_progress_ao_row SELECT 0, i FROM generate_series(1, 100000) i; +2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; INSERT 100000 -- Commit so that the logical EOF of segno 2 is non-zero. 2: COMMIT; COMMIT 2: BEGIN; BEGIN -2: INSERT INTO vacuum_progress_ao_row SELECT 0, i FROM generate_series(1, 100000) i; +2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; INSERT 100000 -- Abort so that segno 2 has dead tuples after its logical EOF 2: ABORT; @@ -53,6 +52,11 @@ SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_ (1 row) SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; n_live_tup | n_dead_tup | last_vacuum | vacuum_count +------------+------------+-------------+-------------- + 33327 | 66654 | | 0 +(1 row) +SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM gp_stat_all_tables_summary WHERE relname = 'vacuum_progress_ao_row'; + n_live_tup | n_dead_tup | last_vacuum | vacuum_count ------------+------------+-------------+-------------- 100000 | 200000 | | 0 (1 row) @@ -60,11 +64,13 @@ SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM pg_stat_all_tables -- Perform VACUUM and observe the progress -- Suspend execution at pre-cleanup phase after truncating both segfiles to their logical EOF. -SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'suspend', '', '', '', 2, 2, 0, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'suspend', '', '', '', 2, 2, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) 1: set Debug_appendonly_print_compaction to on; SET @@ -75,85 +81,120 @@ SELECT gp_wait_until_triggered_fault('appendonly_after_truncate_segment_file', 2 Success: (1 row) -- We are in pre_cleanup phase and some blocks should've been vacuumed by now -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples ------------------------+------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- - vacuum_progress_ao_row | append-optimized pre-cleanup | 165 | 0 | 110 | 0 | 100000 | 0 + vacuum_progress_ao_row | append-optimized pre-cleanup | 55 | 0 | 37 | 0 | 33327 | 0 +(1 row) +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +------------------------+------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_row | append-optimized pre-cleanup | 166 | 0 | 111 | 0 | 100000 | 0 (1 row) -- Resume execution and suspend again in the middle of compact phase -SELECT gp_inject_fault('appendonly_insert', 'suspend', '', '', '', 200, 200, 0, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('appendonly_insert', 'suspend', '', '', '', 200, 200, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) -SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + Success: + Success: +(3 rows) +SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) SELECT gp_wait_until_triggered_fault('appendonly_insert', 200, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: (1 row) -- We are in compact phase. num_dead_tuples should increase as we move and count tuples, one by one. -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples ------------------------+--------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- - vacuum_progress_ao_row | append-optimized compact | 165 | 0 | 110 | 0 | 100000 | 199 + vacuum_progress_ao_row | append-optimized compact | 55 | 0 | 37 | 0 | 33327 | 227 +(1 row) +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +------------------------+--------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_row | append-optimized compact | 166 | 0 | 111 | 0 | 100000 | 594 (1 row) -- Resume execution and suspend again after compacting all segfiles -SELECT gp_inject_fault('vacuum_ao_after_compact', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('vacuum_ao_after_compact', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) -SELECT gp_inject_fault('appendonly_insert', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + Success: + Success: +(3 rows) +SELECT gp_inject_fault('appendonly_insert', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: (1 row) -- After compacting all segfiles we expect 50000 dead tuples -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples ------------------------+--------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- - vacuum_progress_ao_row | append-optimized compact | 165 | 55 | 110 | 0 | 100000 | 50000 + vacuum_progress_ao_row | append-optimized compact | 55 | 19 | 37 | 0 | 33327 | 16622 +(1 row) +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +------------------------+--------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_row | append-optimized compact | 166 | 57 | 111 | 0 | 100000 | 50000 (1 row) -- Resume execution and entering post_cleaup phase, suspend at the end of it. -SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) -SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + Success: + Success: +(3 rows) +SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: (1 row) -- We should have skipped recycling the awaiting drop segment because the segment was still visible to the SELECT gp_wait_until_triggered_fault query. -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples ------------------------+-------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- - vacuum_progress_ao_row | append-optimized post-cleanup | 165 | 55 | 110 | 0 | 100000 | 50000 + vacuum_progress_ao_row | append-optimized post-cleanup | 55 | 19 | 37 | 0 | 33327 | 16622 (1 row) -SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +------------------------+-------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_row | append-optimized post-cleanup | 166 | 57 | 111 | 0 | 100000 | 50000 +(1 row) + +SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) + Success: + Success: +(3 rows) 1<: <... completed> VACUUM @@ -166,63 +207,68 @@ VACUUM SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_row'; relpages | reltuples | relallvisible ----------+-----------+--------------- - 83 | 50000 | 0 + 84 | 50000 | 0 (1 row) SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; n_live_tup | n_dead_tup | has_last_vacuum | vacuum_count ------------+------------+-----------------+-------------- - 50000 | 0 | t | 1 + 16705 | 0 | t | 1 (1 row) -- Perform VACUUM again to recycle the remaining awaiting drop segment marked by the previous run. -SELECT gp_inject_fault('vacuum_ao_after_index_delete', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('vacuum_ao_after_index_delete', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 0 AND role = 'p'; gp_inject_fault ----------------- Success: (1 row) -1&: VACUUM vacuum_progress_ao_row; --- Resume execution and entering pre_cleanup phase, suspend at vacuuming indexes. -SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'suspend', dbid) FROM gp_segment_configuration WHERE content > 0 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) -SELECT gp_wait_until_triggered_fault('vacuum_ao_after_index_delete', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + Success: +(2 rows) +1&: VACUUM vacuum_progress_ao_row; +-- Resume execution and entering pre_cleanup phase, suspend at vacuuming indexes for segment 0. +SELECT gp_wait_until_triggered_fault('vacuum_ao_after_index_delete', 1, dbid) FROM gp_segment_configuration WHERE content = 0 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: (1 row) --- We are in vacuuming indexes phase (part of ao pre_cleanup phase), index_vacuum_count should increase to 1. -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +-- Resume execution and moving on to truncate segments that were marked as AWAITING_DROP for segment 1 and 2, there should be only 1. +SELECT gp_wait_until_triggered_fault('appendonly_after_truncate_segment_file', 1, dbid) FROM gp_segment_configuration WHERE content > 0 AND role = 'p'; + gp_wait_until_triggered_fault +------------------------------- + Success: + Success: +(2 rows) +-- Segment 0 is in vacuuming indexes phase (part of ao pre_cleanup phase), index_vacuum_count should increase to 1. +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 0; relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples ------------------------+-------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- - vacuum_progress_ao_row | vacuuming indexes | 83 | 0 | 0 | 1 | 50000 | 0 + vacuum_progress_ao_row | vacuuming indexes | 28 | 0 | 0 | 1 | 16737 | 0 (1 row) +-- Segment 1 and 2 are in truncate segments phase (part of ao post_cleanup phase), heap_blks_vacuumed should increase to 1. +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > 0; + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +------------------------+------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_row | append-optimized pre-cleanup | 28 | 0 | 19 | 2 | 16558 | 0 + vacuum_progress_ao_row | append-optimized pre-cleanup | 28 | 0 | 19 | 2 | 16705 | 0 +(2 rows) +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +------------------------+------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_row | append-optimized pre-cleanup | 56 | 0 | 38 | 4 | 33263 | 0 + vacuum_progress_ao_row | vacuuming indexes | 28 | 0 | 0 | 1 | 16737 | 0 +(2 rows) --- Resume execution and moving on to truncate segments that were marked as AWAITING_DROP, there should be only 1. -SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault ----------------- Success: -(1 row) -SELECT gp_inject_fault('vacuum_ao_after_index_delete', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; - gp_inject_fault ------------------ Success: -(1 row) -SELECT gp_wait_until_triggered_fault('appendonly_after_truncate_segment_file', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; - gp_wait_until_triggered_fault -------------------------------- - Success: -(1 row) --- We are in post_cleanup phase and should have truncated the old segfile. Both indexes should be vacuumed by now, and heap_blks_vacuumed should also increased -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; - relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples -------------------------+------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- - vacuum_progress_ao_row | append-optimized pre-cleanup | 83 | 0 | 55 | 2 | 50000 | 0 -(1 row) - -SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + Success: +(3 rows) +SELECT gp_inject_fault('vacuum_ao_after_index_delete', 'reset', dbid) FROM gp_segment_configuration WHERE content = 0 AND role = 'p'; gp_inject_fault ----------------- Success: @@ -230,25 +276,34 @@ SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) 1<: <... completed> VACUUM --- Vacuum has finished, nothing should show up in the progress view. -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +-- Vacuum has finished, nothing should show up in the view. +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +---------+-------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- +(0 rows) +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples ---------+-------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- (0 rows) -- pg_class and collected stats view should be updated after the 2nd VACUUM -1U: SELECT wait_until_dead_tup_change_to('vacuum_progress_ao_row'::regclass::oid, 0); - wait_until_dead_tup_change_to -------------------------------- - OK +1U: SELECT wait_until_vacuum_count_change_to('vacuum_progress_ao_row'::regclass::oid, 2); + wait_until_vacuum_count_change_to +----------------------------------- + OK (1 row) SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_row'; relpages | reltuples | relallvisible ----------+-----------+--------------- - 28 | 50000 | 0 + 30 | 50000 | 0 (1 row) SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; n_live_tup | n_dead_tup | has_last_vacuum | vacuum_count +------------+------------+-----------------+-------------- + 16705 | 0 | t | 2 +(1 row) +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables_summary WHERE relname = 'vacuum_progress_ao_row'; + n_live_tup | n_dead_tup | has_last_vacuum | vacuum_count ------------+------------+-----------------+-------------- 50000 | 0 | t | 2 (1 row) diff --git a/src/test/isolation2/isolation2_schedule b/src/test/isolation2/isolation2_schedule index aec0005e8d8..d9d33ad76e4 100644 --- a/src/test/isolation2/isolation2_schedule +++ b/src/test/isolation2/isolation2_schedule @@ -236,6 +236,7 @@ test: idle_gang_cleaner # test idle_in_transaction_session_timeout test: ao_index_build_progress +test: analyze_progress # Tests for FTS test: fts_errors diff --git a/src/test/isolation2/sql/analyze_progress.sql b/src/test/isolation2/sql/analyze_progress.sql new file mode 100644 index 00000000000..311ab161eb2 --- /dev/null +++ b/src/test/isolation2/sql/analyze_progress.sql @@ -0,0 +1,42 @@ +-- Test gp_stat_progress_analyze_summary +-- setup hash distributed table +CREATE TABLE t_analyze_part (a INT, b INT) DISTRIBUTED BY (a); +INSERT INTO t_analyze_part SELECT i, i FROM generate_series(1, 100000) i; + +-- Suspend analyze after scanning 20 blocks on each segment +SELECT gp_inject_fault('analyze_block', 'suspend', '', '', '', 20, 20, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + +-- session 1: analyze the table +1&: ANALYZE t_analyze_part; +SELECT gp_wait_until_triggered_fault('analyze_block', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + +-- session 2: query pg_stat_progress_analyze while the analyze is running, the view should indicate 60 blocks have been scanned as aggregated progress of 3 segments +2: SELECT pid IS NOT NULL as has_pid, datname, relid::regclass, phase, sample_blks_total, sample_blks_scanned FROM gp_stat_progress_analyze_summary; + +-- Reset fault injector +SELECT gp_inject_fault('analyze_block', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +1<: + +-- teardown +DROP TABLE t_analyze_part; + +-- setup replicated table +CREATE TABLE t_analyze_repl (a INT, b INT) DISTRIBUTED REPLICATED; +INSERT INTO t_analyze_repl SELECT i, i FROM generate_series(1, 100000) i; + +-- Suspend analyze after scanning 20 blocks on each segment +SELECT gp_inject_fault('analyze_block', 'suspend', '', '', '', 20, 20, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + +-- session 1: analyze the table +1&: ANALYZE t_analyze_repl; +SELECT gp_wait_until_triggered_fault('analyze_block', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + +-- session 2: query pg_stat_progress_analyze while the analyze is running, the view should indicate 20 blocks have been scanned as average progress of 3 segments +2: SELECT pid IS NOT NULL as has_pid, datname, relid::regclass, phase, sample_blks_total, sample_blks_scanned FROM gp_stat_progress_analyze_summary; + +-- Reset fault injector +SELECT gp_inject_fault('analyze_block', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +1<: + +-- teardown +DROP TABLE t_analyze_repl; diff --git a/src/test/isolation2/sql/ao_index_build_progress.sql b/src/test/isolation2/sql/ao_index_build_progress.sql index 19aade99e29..c5e34d1eab7 100644 --- a/src/test/isolation2/sql/ao_index_build_progress.sql +++ b/src/test/isolation2/sql/ao_index_build_progress.sql @@ -7,30 +7,34 @@ CREATE TABLE ao_index_build_progress(i int, j bigint) USING ao_row -- Insert all tuples to seg1. INSERT INTO ao_index_build_progress SELECT 0, i FROM generate_series(1, 100000) i; +INSERT INTO ao_index_build_progress SELECT 2, i FROM generate_series(1, 100000) i; +INSERT INTO ao_index_build_progress SELECT 5, i FROM generate_series(1, 100000) i; -- Suspend execution when some blocks have been read. SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'suspend', '', '', '', 10, 10, 0, dbid) - FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; 1&: CREATE INDEX ON ao_index_build_progress(i); -- Wait until some AO varblocks have been read. SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_success', 10, dbid) - FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -- By now, we should have reported some blocks (of size 'block_size') as "done", -- as well as a total number of blocks that matches the relation's on-disk size. -1U: SELECT command, phase, +SELECT command, phase, (pg_relation_size('ao_index_build_progress') + (current_setting('block_size')::int - 1)) / current_setting('block_size')::int AS blocks_total_actual, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported - FROM pg_stat_progress_create_index - WHERE relid = 'ao_index_build_progress'::regclass; + FROM gp_stat_progress_create_index + WHERE gp_segment_id = 1 AND relid = 'ao_index_build_progress'::regclass; +-- The same should be true for the summary view, and the total number of blocks should be tripled. +SELECT command, phase, blocks_total, blocks_done FROM gp_stat_progress_create_index_summary WHERE relid = 'ao_index_build_progress'::regclass; SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) - FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; 1<: @@ -40,31 +44,35 @@ CREATE TABLE aoco_index_build_progress(i int, j int ENCODING (compresstype=zstd, -- Insert all tuples to seg1. INSERT INTO aoco_index_build_progress SELECT 0, i FROM generate_series(1, 100000) i; +INSERT INTO aoco_index_build_progress SELECT 2, i FROM generate_series(1, 100000) i; +INSERT INTO aoco_index_build_progress SELECT 5, i FROM generate_series(1, 100000) i; -- Suspend execution when some blocks have been read. SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'suspend', '', '', '', 5, 5, 0, dbid) - FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; 1&: CREATE INDEX ON aoco_index_build_progress(i); -- Wait until some AOCO varblocks have been read. SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_success', 5, dbid) - FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -- By now, we should have reported some blocks (of size 'block_size') as "done", -- as well as a total number of blocks that matches the relation's on-disk size. -- Note: all blocks for the relation have to be scanned as we are building an -- index for the first time and a block directory has to be created. -1U: SELECT command, phase, +SELECT command, phase, (pg_relation_size('aoco_index_build_progress') + (current_setting('block_size')::int - 1)) / current_setting('block_size')::int AS blocks_total_actual, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported - FROM pg_stat_progress_create_index - WHERE relid = 'aoco_index_build_progress'::regclass; + FROM gp_stat_progress_create_index + WHERE gp_segment_id = 1 AND relid = 'aoco_index_build_progress'::regclass; +-- The same should be true for the summary view, and the total number of blocks should be tripled. +SELECT command, phase, blocks_total, blocks_done FROM gp_stat_progress_create_index_summary WHERE relid = 'aoco_index_build_progress'::regclass; SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) - FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; 1<: @@ -72,13 +80,13 @@ SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', d -- Suspend execution when some blocks have been read. SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'suspend', '', '', '', 5, 5, 0, dbid) - FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; 1&: CREATE INDEX ON aoco_index_build_progress(j); -- Wait until some AOCO varblocks have been read. SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_success', 5, dbid) - FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -- By now, we should have reported some blocks (of size 'block_size') as "done", -- as well as a total number of blocks that matches the size of col j's segfile. @@ -90,10 +98,12 @@ SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_succes AS col_j_blocks, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported - FROM pg_stat_progress_create_index - WHERE relid = 'aoco_index_build_progress'::regclass; + FROM gp_stat_progress_create_index + WHERE gp_segment_id = 1 AND relid = 'aoco_index_build_progress'::regclass; +-- The same should be true for the summary view, and the total number of blocks should be tripled. +SELECT command, phase, blocks_total, blocks_done FROM gp_stat_progress_create_index_summary WHERE relid = 'aoco_index_build_progress'::regclass; SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) - FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; + FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; 1<: diff --git a/src/test/isolation2/sql/setup.sql b/src/test/isolation2/sql/setup.sql index 949f22f0002..6241413ba3b 100644 --- a/src/test/isolation2/sql/setup.sql +++ b/src/test/isolation2/sql/setup.sql @@ -461,6 +461,27 @@ begin end; /* in func */ $$ language plpgsql; +-- Helper function that ensures stats collector receives stat from the latest operation. +create or replace function wait_until_vacuum_count_change_to(relid oid, stat_val_expected bigint) + returns text as $$ +declare + stat_val int; /* in func */ + i int; /* in func */ +begin + i := 0; /* in func */ + while i < 1200 loop + select pg_stat_get_vacuum_count(relid) into stat_val; /* in func */ + if stat_val = stat_val_expected then /* in func */ + return 'OK'; /* in func */ + end if; /* in func */ + perform pg_sleep(0.1); /* in func */ + perform pg_stat_clear_snapshot(); /* in func */ + i := i + 1; /* in func */ + end loop; /* in func */ + return 'Fail'; /* in func */ +end; /* in func */ +$$ language plpgsql; + -- Helper function to get the number of blocks in a relation. CREATE OR REPLACE FUNCTION nblocks(rel regclass) RETURNS int AS $$ /* in func */ BEGIN /* in func */ diff --git a/src/test/isolation2/sql/vacuum_progress_row.sql b/src/test/isolation2/sql/vacuum_progress_row.sql index 1ccf6ca090f..93da2a47bbc 100644 --- a/src/test/isolation2/sql/vacuum_progress_row.sql +++ b/src/test/isolation2/sql/vacuum_progress_row.sql @@ -11,16 +11,15 @@ CREATE TABLE vacuum_progress_ao_row(i int, j int); CREATE INDEX on vacuum_progress_ao_row(i); CREATE INDEX on vacuum_progress_ao_row(j); --- Insert all tuples to seg1 from two current sessions so that data are stored --- in two segment files. +-- Insert from two current sessions so that data are stored in two segment files. 1: BEGIN; 2: BEGIN; -1: INSERT INTO vacuum_progress_ao_row SELECT 0, i FROM generate_series(1, 100000) i; -2: INSERT INTO vacuum_progress_ao_row SELECT 0, i FROM generate_series(1, 100000) i; +1: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; +2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; -- Commit so that the logical EOF of segno 2 is non-zero. 2: COMMIT; 2: BEGIN; -2: INSERT INTO vacuum_progress_ao_row SELECT 0, i FROM generate_series(1, 100000) i; +2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; -- Abort so that segno 2 has dead tuples after its logical EOF 2: ABORT; 2q: @@ -32,40 +31,46 @@ DELETE FROM vacuum_progress_ao_row where j % 2 = 0; -- Lookup pg_class and collected stats view before VACUUM SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_row'; -SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; +SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_row' and gp_segment_id = 1; +SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM gp_stat_all_tables_summary WHERE relname = 'vacuum_progress_ao_row'; -- Perform VACUUM and observe the progress -- Suspend execution at pre-cleanup phase after truncating both segfiles to their logical EOF. -SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'suspend', '', '', '', 2, 2, 0, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'suspend', '', '', '', 2, 2, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; 1: set Debug_appendonly_print_compaction to on; 1&: VACUUM vacuum_progress_ao_row; SELECT gp_wait_until_triggered_fault('appendonly_after_truncate_segment_file', 2, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -- We are in pre_cleanup phase and some blocks should've been vacuumed by now -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; -- Resume execution and suspend again in the middle of compact phase -SELECT gp_inject_fault('appendonly_insert', 'suspend', '', '', '', 200, 200, 0, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('appendonly_insert', 'suspend', '', '', '', 200, 200, 0, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; SELECT gp_wait_until_triggered_fault('appendonly_insert', 200, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -- We are in compact phase. num_dead_tuples should increase as we move and count tuples, one by one. -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; -- Resume execution and suspend again after compacting all segfiles -SELECT gp_inject_fault('vacuum_ao_after_compact', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -SELECT gp_inject_fault('appendonly_insert', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('vacuum_ao_after_compact', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +SELECT gp_inject_fault('appendonly_insert', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -- After compacting all segfiles we expect 50000 dead tuples -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; -- Resume execution and entering post_cleaup phase, suspend at the end of it. -SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -- We should have skipped recycling the awaiting drop segment because the segment was still visible to the SELECT gp_wait_until_triggered_fault query. -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; -SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + +SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; 1<: -- pg_class and collected stats view should be updated after the 1st VACUUM @@ -74,113 +79,34 @@ SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_ SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; -- Perform VACUUM again to recycle the remaining awaiting drop segment marked by the previous run. -SELECT gp_inject_fault('vacuum_ao_after_index_delete', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_inject_fault('vacuum_ao_after_index_delete', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 0 AND role = 'p'; +SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'suspend', dbid) FROM gp_segment_configuration WHERE content > 0 AND role = 'p'; 1&: VACUUM vacuum_progress_ao_row; --- Resume execution and entering pre_cleanup phase, suspend at vacuuming indexes. -SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -SELECT gp_wait_until_triggered_fault('vacuum_ao_after_index_delete', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; --- We are in vacuuming indexes phase (part of ao pre_cleanup phase), index_vacuum_count should increase to 1. -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; - --- Resume execution and moving on to truncate segments that were marked as AWAITING_DROP, there should be only 1. -SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -SELECT gp_inject_fault('vacuum_ao_after_index_delete', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; -SELECT gp_wait_until_triggered_fault('appendonly_after_truncate_segment_file', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; --- We are in post_cleanup phase and should have truncated the old segfile. Both indexes should be vacuumed by now, and heap_blks_vacuumed should also increased -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; - -SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +-- Resume execution and entering pre_cleanup phase, suspend at vacuuming indexes for segment 0. +SELECT gp_wait_until_triggered_fault('vacuum_ao_after_index_delete', 1, dbid) FROM gp_segment_configuration WHERE content = 0 AND role = 'p'; +-- Resume execution and moving on to truncate segments that were marked as AWAITING_DROP for segment 1 and 2, there should be only 1. +SELECT gp_wait_until_triggered_fault('appendonly_after_truncate_segment_file', 1, dbid) FROM gp_segment_configuration WHERE content > 0 AND role = 'p'; +-- Segment 0 is in vacuuming indexes phase (part of ao pre_cleanup phase), index_vacuum_count should increase to 1. +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 0; +-- Segment 1 and 2 are in truncate segments phase (part of ao post_cleanup phase), heap_blks_vacuumed should increase to 1. +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > 0; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + +SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +SELECT gp_inject_fault('vacuum_ao_after_index_delete', 'reset', dbid) FROM gp_segment_configuration WHERE content = 0 AND role = 'p'; 1<: --- Vacuum has finished, nothing should show up in the progress view. -1U: select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from pg_stat_progress_vacuum; +-- Vacuum has finished, nothing should show up in the view. +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; -- pg_class and collected stats view should be updated after the 2nd VACUUM -1U: SELECT wait_until_dead_tup_change_to('vacuum_progress_ao_row'::regclass::oid, 0); +1U: SELECT wait_until_vacuum_count_change_to('vacuum_progress_ao_row'::regclass::oid, 2); SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_row'; -SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_row' and gp_segment_id = 1; +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables_summary WHERE relname = 'vacuum_progress_ao_row'; --- open if system views gp_stat_progress_vacuum* are enabled ---1q: ----- Test vacuum worker process is changed at post-cleanup phase due to mirror down. ----- Current behavior is it will clear previous compact phase num_dead_tuples in post-cleanup ----- phase (at injecting point vacuum_ao_post_cleanup_end), which is different from above case ----- in which vacuum worker isn't changed. ---ALTER SYSTEM SET gp_fts_mark_mirror_down_grace_period to 10; ---ALTER SYSTEM SET gp_fts_probe_interval to 10; ---SELECT gp_segment_id, pg_reload_conf() FROM gp_id UNION SELECT gp_segment_id, pg_reload_conf() FROM gp_dist_random('gp_id'); --- ---DROP TABLE IF EXISTS vacuum_progress_ao_row; ---CREATE TABLE vacuum_progress_ao_row(i int, j int); ---CREATE INDEX on vacuum_progress_ao_row(i); ---CREATE INDEX on vacuum_progress_ao_row(j); ---1: BEGIN; ---2: BEGIN; ---1: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; ---2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; ---2: COMMIT; ---2: BEGIN; ---2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; ---2: ABORT; ---2q: ---1: ABORT; ---DELETE FROM vacuum_progress_ao_row where j % 2 = 0; --- ----- Suspend execution at the end of compact phase. ---2: SELECT gp_inject_fault('vacuum_ao_after_compact', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; --- ---1: set debug_appendonly_print_compaction to on; ---1&: vacuum vacuum_progress_ao_row; --- ---2: SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 3, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; --- ----- Non-zero progressing data num_dead_tuples is showed up. ---select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; ---select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; --- ----- Resume execution of compact phase and block at syncrep. ---2: SELECT gp_inject_fault_infinite('wal_sender_loop', 'suspend', dbid) FROM gp_segment_configuration WHERE role = 'p' and content = 1; ---2: SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ----- stop the mirror should turn off syncrep ---2: SELECT pg_ctl(datadir, 'stop', 'immediate') FROM gp_segment_configuration WHERE content=1 AND role = 'm'; --- ----- Resume walsender to detect mirror down and suspend at the beginning ----- of post-cleanup taken over by a new vacuum worker. ---2: SELECT gp_inject_fault('vacuum_worker_changed', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ----- resume walsender and let it exit so that mirror stop can be detected ---2: SELECT gp_inject_fault_infinite('wal_sender_loop', 'reset', dbid) FROM gp_segment_configuration WHERE role = 'p' and content = 1; ----- Ensure we enter into the target logic which stops cumulative data but ----- initializes a new vacrelstats at the beginning of post-cleanup phase. ----- Also all segments should reach to the same "vacuum_worker_changed" point ----- due to FTS version being changed. ---2: SELECT gp_wait_until_triggered_fault('vacuum_worker_changed', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ----- now seg1's mirror is marked as down ---2: SELECT content, role, preferred_role, mode, status FROM gp_segment_configuration WHERE content > -1; --- ----- Resume execution and entering post_cleaup phase, suspend at the end of it. ---2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ---2: SELECT gp_inject_fault('vacuum_worker_changed', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ---2: SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; --- ----- The previous collected num_dead_tuples in compact phase is zero. ---select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; ---select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; --- ---2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; --- ---1<: --- ----- restore environment ---1: reset debug_appendonly_print_compaction; --- ---2: SELECT pg_ctl_start(datadir, port) FROM gp_segment_configuration WHERE role = 'm' AND content = 1; ---2: SELECT wait_until_all_segments_synchronized(); --- ----- Cleanup ---SELECT gp_inject_fault_infinite('all', 'reset', dbid) FROM gp_segment_configuration; ---reset Debug_appendonly_print_compaction; ---reset default_table_access_method; ---ALTER SYSTEM RESET gp_fts_mark_mirror_down_grace_period; ---ALTER SYSTEM RESET gp_fts_probe_interval; ---SELECT gp_segment_id, pg_reload_conf() FROM gp_id UNION SELECT gp_segment_id, pg_reload_conf() FROM gp_dist_random('gp_id'); --- \ No newline at end of file +-- Cleanup +SELECT gp_inject_fault_infinite('all', 'reset', dbid) FROM gp_segment_configuration; +reset Debug_appendonly_print_compaction; +reset default_table_access_method; From 3f85d5310429bfd958eb6b5bd1142fbe23aeafd6 Mon Sep 17 00:00:00 2001 From: Andrew Repp Date: Fri, 7 Apr 2023 16:34:44 -0500 Subject: [PATCH 137/260] Add gp summary system views These summary views offer basic aggregation of the gp_stat_* views across Greenplum coordinator and segments. Aggregation logic applied as follows: * Time related (last_%): use max() * Transaction related, not innately summable (number of commits/rollbacks) : use max() * Table specific: sum()/numsegments for replicated tables, sum() for distributed tables * Innately summable stats, if no particular table is involved: use sum() * pid: use coordinator's pid (not used here, but this is the convention in other gp_%_summary views) --- src/backend/catalog/system_views.sql | 122 ------ .../catalog/system_views_gp_summary.sql | 381 ++++++++++++++++++ 2 files changed, 381 insertions(+), 122 deletions(-) diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 4b8c9c0df43..d4d00b67771 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -692,81 +692,6 @@ CREATE VIEW pg_stat_all_tables AS WHERE C.relkind IN ('r', 't', 'm', 'o', 'b', 'M', 'p') GROUP BY C.oid, N.nspname, C.relname; --- Gather data from segments on user tables, and use data on coordinator on system tables. - -CREATE VIEW gp_stat_all_tables_summary AS -SELECT - s.relid, - s.schemaname, - s.relname, - m.seq_scan, - m.seq_tup_read, - m.idx_scan, - m.idx_tup_fetch, - m.n_tup_ins, - m.n_tup_upd, - m.n_tup_del, - m.n_tup_hot_upd, - m.n_live_tup, - m.n_dead_tup, - m.n_mod_since_analyze, - m.n_ins_since_vacuum, - s.last_vacuum, - s.last_autovacuum, - s.last_analyze, - s.last_autoanalyze, - s.vacuum_count, - s.autovacuum_count, - s.analyze_count, - s.autoanalyze_count -FROM - (SELECT - allt.relid, - allt.schemaname, - allt.relname, - case when d.policytype = 'r' then (sum(seq_scan)/d.numsegments)::bigint else sum(seq_scan) end seq_scan, - case when d.policytype = 'r' then (sum(seq_tup_read)/d.numsegments)::bigint else sum(seq_tup_read) end seq_tup_read, - case when d.policytype = 'r' then (sum(idx_scan)/d.numsegments)::bigint else sum(idx_scan) end idx_scan, - case when d.policytype = 'r' then (sum(idx_tup_fetch)/d.numsegments)::bigint else sum(idx_tup_fetch) end idx_tup_fetch, - case when d.policytype = 'r' then (sum(n_tup_ins)/d.numsegments)::bigint else sum(n_tup_ins) end n_tup_ins, - case when d.policytype = 'r' then (sum(n_tup_upd)/d.numsegments)::bigint else sum(n_tup_upd) end n_tup_upd, - case when d.policytype = 'r' then (sum(n_tup_del)/d.numsegments)::bigint else sum(n_tup_del) end n_tup_del, - case when d.policytype = 'r' then (sum(n_tup_hot_upd)/d.numsegments)::bigint else sum(n_tup_hot_upd) end n_tup_hot_upd, - case when d.policytype = 'r' then (sum(n_live_tup)/d.numsegments)::bigint else sum(n_live_tup) end n_live_tup, - case when d.policytype = 'r' then (sum(n_dead_tup)/d.numsegments)::bigint else sum(n_dead_tup) end n_dead_tup, - case when d.policytype = 'r' then (sum(n_mod_since_analyze)/d.numsegments)::bigint else sum(n_mod_since_analyze) end n_mod_since_analyze, - case when d.policytype = 'r' then (sum(n_ins_since_vacuum)/d.numsegments)::bigint else sum(n_ins_since_vacuum) end n_ins_since_vacuum, - max(last_vacuum) as last_vacuum, - max(last_autovacuum) as last_autovacuum, - max(last_analyze) as last_analyze, - max(last_autoanalyze) as last_autoanalyze, - max(vacuum_count) as vacuum_count, - max(autovacuum_count) as autovacuum_count, - max(analyze_count) as analyze_count, - max(autoanalyze_count) as autoanalyze_count - FROM - gp_dist_random('pg_stat_all_tables') allt - inner join pg_class c - on allt.relid = c.oid - left outer join gp_distribution_policy d - on allt.relid = d.localoid - WHERE - relid >= 16384 - and ( - d.localoid is not null - or c.relkind in ('o', 'b', 'M') - ) - GROUP BY allt.relid, allt.schemaname, allt.relname, d.policytype, d.numsegments - - UNION ALL - - SELECT - * - FROM - pg_stat_all_tables - WHERE - relid < 16384) m, pg_stat_all_tables s -WHERE m.relid = s.relid; CREATE VIEW pg_stat_xact_all_tables AS SELECT @@ -819,10 +744,6 @@ CREATE VIEW pg_stat_user_tables_single_node AS WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND schemaname !~ '^pg_toast'; -CREATE VIEW gp_stat_user_tables_summary AS - SELECT * FROM gp_stat_all_tables_summary - WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND - schemaname !~ '^pg_toast'; CREATE VIEW pg_stat_xact_user_tables AS SELECT * FROM pg_stat_xact_all_tables @@ -880,44 +801,6 @@ CREATE VIEW pg_stat_all_indexes AS LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE C.relkind IN ('r', 't', 'm', 'o', 'b', 'M'); --- Gather data from segments on user tables, and use data on coordinator on system tables. - -CREATE VIEW gp_stat_all_indexes_summary AS -SELECT - s.relid, - s.indexrelid, - s.schemaname, - s.relname, - s.indexrelname, - m.idx_scan, - m.idx_tup_read, - m.idx_tup_fetch -FROM - (SELECT - relid, - indexrelid, - schemaname, - relname, - indexrelname, - sum(idx_scan) as idx_scan, - sum(idx_tup_read) as idx_tup_read, - sum(idx_tup_fetch) as idx_tup_fetch - FROM - gp_dist_random('pg_stat_all_indexes') - WHERE - relid >= 16384 - GROUP BY relid, indexrelid, schemaname, relname, indexrelname - - UNION ALL - - SELECT - * - FROM - pg_stat_all_indexes - WHERE - relid < 16384) m, pg_stat_all_indexes s -WHERE m.relid = s.relid; - CREATE VIEW pg_stat_sys_indexes AS SELECT * FROM pg_stat_all_indexes WHERE schemaname IN ('pg_catalog', 'information_schema', 'pg_aoseg') OR @@ -928,11 +811,6 @@ CREATE VIEW pg_stat_user_indexes AS WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND schemaname !~ '^pg_toast'; -CREATE VIEW gp_stat_user_indexes_summary AS - SELECT * FROM gp_stat_all_indexes_summary - WHERE schemaname NOT IN ('pg_catalog', 'information_schema') AND - schemaname !~ '^pg_toast'; - CREATE VIEW pg_statio_all_indexes AS SELECT C.oid AS relid, diff --git a/src/backend/catalog/system_views_gp_summary.sql b/src/backend/catalog/system_views_gp_summary.sql index 58f4768c124..f83329203ab 100644 --- a/src/backend/catalog/system_views_gp_summary.sql +++ b/src/backend/catalog/system_views_gp_summary.sql @@ -22,6 +22,387 @@ * string literal (including a function body!) or a multiline comment. */ +CREATE VIEW gp_stat_archiver_summary AS +SELECT + sum(gsa.archived_count) as archived_count, + max(gsa.last_archived_wal) as last_archived_wal, + max(gsa.last_archived_time) as last_archived_time, + sum(gsa.failed_count) as failed_count, + max(gsa.last_failed_wal) as last_failed_wal, + max(gsa.last_failed_time) as last_failed_time, + max(gsa.stats_reset) as stats_reset +FROM + gp_stat_archiver gsa; + +CREATE VIEW gp_stat_bgwriter_summary AS +SELECT + sum(gsb.checkpoints_timed) as checkpoints_timed, + sum(gsb.checkpoints_req) as checkpoints_req, + sum(gsb.checkpoint_write_time) as checkpoint_write_time, + sum(gsb.checkpoint_sync_time) as checkpoint_sync_time, + sum(gsb.buffers_checkpoint) as buffers_checkpoint, + sum(gsb.buffers_clean) as buffers_clean, + sum(gsb.maxwritten_clean) as maxwritten_clean, + sum(gsb.buffers_backend) as buffers_backend, + sum(gsb.buffers_backend_fsync) as buffers_backend_fsync, + sum(gsb.buffers_alloc) as buffers_alloc, + max(gsb.stats_reset) as stats_reset +FROM + gp_stat_bgwriter gsb; + +CREATE VIEW gp_stat_wal_summary AS +SELECT + sum(gsw.wal_records) as wal_records, + sum(gsw.wal_fpw) as wal_fpw, + sum(gsw.wal_bytes) as wal_bytes, + sum(gsw.wal_buffers_full) as wal_buffers_full, + sum(gsw.wal_write) as wal_write, + sum(gsw.wal_sync) as wal_sync, + sum(gsw.wal_write_time) as wal_write_time, + sum(gsw.wal_sync_time) as wal_sync_time, + max(gsw.stats_reset) as stats_reset +from + gp_stat_wal gsw; + +CREATE VIEW gp_stat_database_summary AS +SELECT + sdb.datid, + sdb.datname, + sum(sdb.numbackends) as numbackends, + max(sdb.xact_commit) as xact_commit, + max(sdb.xact_rollback) as xact_rollback, + sum(sdb.blks_read) as blks_read, + sum(sdb.blks_hit) as blks_hit, + sum(sdb.tup_returned) as tup_returned, + sum(sdb.tup_fetched) as tup_fetched, + sum(sdb.tup_inserted) as tup_inserted, + sum(sdb.tup_updated) as tup_updated, + sum(sdb.tup_deleted) as tup_deleted, + max(sdb.conflicts) as conflicts, + sum(sdb.temp_files) as temp_files, + sum(sdb.temp_bytes) as temp_bytes, + sum(sdb.deadlocks) as deadlocks, + sum(sdb.checksum_failures) as checksum_failures, + max(sdb.checksum_last_failure) as checksum_last_failure, + sum(sdb.blk_read_time) as blk_read_time, + sum(sdb.blk_write_time) as blk_write_time, + max(sdb.stats_reset) as stats_reset +FROM + gp_stat_database sdb +GROUP BY + sdb.datid, + sdb.datname; + + +-- Gather data from segments on user tables, and use data on coordinator on system tables. +CREATE VIEW gp_stat_all_tables_summary AS +SELECT + s.relid, + s.schemaname, + s.relname, + m.seq_scan, + m.seq_tup_read, + m.idx_scan, + m.idx_tup_fetch, + m.n_tup_ins, + m.n_tup_upd, + m.n_tup_del, + m.n_tup_hot_upd, + m.n_live_tup, + m.n_dead_tup, + m.n_mod_since_analyze, + s.last_vacuum, + s.last_autovacuum, + s.last_analyze, + s.last_autoanalyze, + s.vacuum_count, + s.autovacuum_count, + s.analyze_count, + s.autoanalyze_count +FROM + (SELECT + allt.relid, + allt.schemaname, + allt.relname, + case when d.policytype = 'r' then (sum(seq_scan)/d.numsegments)::bigint else sum(seq_scan) end seq_scan, + case when d.policytype = 'r' then (sum(seq_tup_read)/d.numsegments)::bigint else sum(seq_tup_read) end seq_tup_read, + case when d.policytype = 'r' then (sum(idx_scan)/d.numsegments)::bigint else sum(idx_scan) end idx_scan, + case when d.policytype = 'r' then (sum(idx_tup_fetch)/d.numsegments)::bigint else sum(idx_tup_fetch) end idx_tup_fetch, + case when d.policytype = 'r' then (sum(n_tup_ins)/d.numsegments)::bigint else sum(n_tup_ins) end n_tup_ins, + case when d.policytype = 'r' then (sum(n_tup_upd)/d.numsegments)::bigint else sum(n_tup_upd) end n_tup_upd, + case when d.policytype = 'r' then (sum(n_tup_del)/d.numsegments)::bigint else sum(n_tup_del) end n_tup_del, + case when d.policytype = 'r' then (sum(n_tup_hot_upd)/d.numsegments)::bigint else sum(n_tup_hot_upd) end n_tup_hot_upd, + case when d.policytype = 'r' then (sum(n_live_tup)/d.numsegments)::bigint else sum(n_live_tup) end n_live_tup, + case when d.policytype = 'r' then (sum(n_dead_tup)/d.numsegments)::bigint else sum(n_dead_tup) end n_dead_tup, + case when d.policytype = 'r' then (sum(n_mod_since_analyze)/d.numsegments)::bigint else sum(n_mod_since_analyze) end n_mod_since_analyze, + max(last_vacuum) as last_vacuum, + max(last_autovacuum) as last_autovacuum, + max(last_analyze) as last_analyze, + max(last_autoanalyze) as last_autoanalyze, + max(vacuum_count) as vacuum_count, + max(autovacuum_count) as autovacuum_count, + max(analyze_count) as analyze_count, + max(autoanalyze_count) as autoanalyze_count + FROM + gp_dist_random('pg_stat_all_tables') allt + inner join pg_class c + on allt.relid = c.oid + left outer join gp_distribution_policy d + on allt.relid = d.localoid + WHERE + relid >= 16384 + and ( + d.localoid is not null + or c.relkind in ('o', 'b', 'M') + ) + GROUP BY allt.relid, allt.schemaname, allt.relname, d.policytype, d.numsegments + + UNION ALL + + SELECT + * + FROM + pg_stat_all_tables + WHERE + relid < 16384) m, pg_stat_all_tables s +WHERE m.relid = s.relid; + +CREATE VIEW gp_stat_user_tables_summary AS + SELECT * FROM gp_stat_all_tables_summary + WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_aoseg') AND + schemaname !~ '^pg_toast'; + +CREATE VIEW gp_stat_sys_tables_summary AS + SELECT * FROM gp_stat_all_tables_summary + WHERE schemaname IN ('pg_catalog', 'information_schema', 'pg_aoseg') OR + schemaname ~ '^pg_toast'; + +CREATE VIEW gp_stat_xact_all_tables_summary AS +SELECT + sxa.relid, + sxa.schemaname, + sxa.relname, + CASE WHEN dst.policytype = 'r' THEN (sum(sxa.seq_scan)/dst.numsegments)::bigint ELSE sum(sxa.seq_scan) END AS seq_scan, + CASE WHEN dst.policytype = 'r' THEN (sum(sxa.seq_tup_read)/dst.numsegments)::bigint ELSE sum(sxa.seq_tup_read) END AS seq_tup_read, + CASE WHEN dst.policytype = 'r' THEN (sum(sxa.idx_scan)/dst.numsegments)::bigint ELSE sum(sxa.idx_scan) END AS idx_scan, + CASE WHEN dst.policytype = 'r' THEN (sum(sxa.idx_tup_fetch)/dst.numsegments)::bigint ELSE sum(sxa.idx_tup_fetch) END AS idx_tup_fetch, + CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_ins)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_ins) END AS n_tup_ins, + CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_upd)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_upd) END AS n_tup_upd, + CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_del)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_del) END AS n_tup_del, + CASE WHEN dst.policytype = 'r' THEN (sum(sxa.n_tup_hot_upd)/dst.numsegments)::bigint ELSE sum(sxa.n_tup_hot_upd) END AS n_tup_hot_upd +FROM + gp_stat_xact_all_tables sxa + LEFT OUTER JOIN gp_distribution_policy dst + ON sxa.relid = dst.localoid +GROUP BY + sxa.relid, + sxa.schemaname, + sxa.relname, + dst.policytype, + dst.numsegments; + +CREATE VIEW gp_stat_xact_sys_tables_summary as + SELECT * FROM gp_stat_xact_all_tables_summary + WHERE schemaname IN ('pg_catalog', 'information_schema', 'pg_aoseg') OR + schemaname ~ '^pg_toast'; + +CREATE VIEW gp_stat_xact_user_tables_summary AS + SELECT * FROM gp_stat_xact_all_tables_summary + WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_aoseg') AND + schemaname !~ '^pg_toast'; + +-- Gather data from segments on user tables, and use data on coordinator on system tables. +CREATE VIEW gp_stat_all_indexes_summary AS +SELECT + s.relid, + s.indexrelid, + s.schemaname, + s.relname, + s.indexrelname, + m.idx_scan, + m.idx_tup_read, + m.idx_tup_fetch +FROM + (SELECT + alli.relid, + alli.indexrelid, + alli.schemaname, + alli.relname, + alli.indexrelname, + case when d.policytype = 'r' then (sum(alli.idx_scan)/d.numsegments)::bigint else sum(alli.idx_scan) end idx_scan, + case when d.policytype = 'r' then (sum(alli.idx_tup_read)/d.numsegments)::bigint else sum(alli.idx_tup_read) end idx_tup_read, + case when d.policytype = 'r' then (sum(alli.idx_tup_fetch)/d.numsegments)::bigint else sum(alli.idx_tup_fetch) end idx_tup_fetch + FROM + gp_dist_random('pg_stat_all_indexes') alli + inner join pg_class c + on alli.relid = c.oid + left outer join gp_distribution_policy d + on alli.relid = d.localoid + WHERE + relid >= 16384 + GROUP BY alli.relid, alli.indexrelid, alli.schemaname, alli.relname, alli.indexrelname, d.policytype, d.numsegments + + UNION ALL + + SELECT + * + FROM + pg_stat_all_indexes + WHERE + relid < 16384) m, pg_stat_all_indexes s +WHERE m.relid = s.relid; + +CREATE VIEW gp_stat_sys_indexes_summary AS + SELECT * FROM gp_stat_all_indexes_summary + WHERE schemaname IN ('pg_catalog', 'information_schema', 'pg_aoseg') OR + schemaname ~ '^pg_toast'; + +CREATE VIEW gp_stat_user_indexes_summary AS + SELECT * FROM gp_stat_all_indexes_summary + WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_aoseg') AND + schemaname !~ '^pg_toast'; + +CREATE VIEW gp_statio_all_tables_summary as +SELECT + sat.relid, + sat.schemaname, + sat.relname, + CASE WHEN dst.policytype = 'r' THEN (sum(sat.heap_blks_read)/dst.numsegments)::bigint ELSE sum(sat.heap_blks_read) END AS heap_blks_read, + CASE WHEN dst.policytype = 'r' THEN (sum(sat.heap_blks_hit)/dst.numsegments)::bigint ELSE sum(sat.heap_blks_hit) END AS heap_blks_hit, + CASE WHEN dst.policytype = 'r' THEN (sum(sat.idx_blks_read)/dst.numsegments)::bigint ELSE sum(sat.idx_blks_read) END AS idx_blks_read, + CASE WHEN dst.policytype = 'r' THEN (sum(sat.idx_blks_hit)/dst.numsegments)::bigint ELSE sum(sat.idx_blks_hit) END AS idx_blks_hit, + CASE WHEN dst.policytype = 'r' THEN (sum(sat.toast_blks_read)/dst.numsegments)::bigint ELSE sum(sat.toast_blks_read) END AS toast_blks_read, + CASE WHEN dst.policytype = 'r' THEN (sum(sat.toast_blks_hit)/dst.numsegments)::bigint ELSE sum(sat.toast_blks_hit) END AS toast_blks_hit, + CASE WHEN dst.policytype = 'r' THEN (sum(sat.tidx_blks_read)/dst.numsegments)::bigint ELSE sum(sat.tidx_blks_read) END AS tidx_blks_read, + CASE WHEN dst.policytype = 'r' THEN (sum(sat.tidx_blks_hit)/dst.numsegments)::bigint ELSE sum(sat.tidx_blks_hit) END AS tidx_blks_hit +FROM + gp_statio_all_tables sat + LEFT OUTER JOIN gp_distribution_policy dst + ON sat.relid = dst.localoid +GROUP BY + sat.relid, + sat.schemaname, + sat.relname, + dst.policytype, + dst.numsegments; + +CREATE VIEW gp_statio_sys_tables_summary AS + SELECT * FROM gp_statio_all_tables_summary + WHERE schemaname IN ('pg_catalog', 'information_schema', 'pg_aoseg') OR + schemaname ~ '^pg_toast'; + +CREATE VIEW gp_statio_user_tables_summary AS + SELECT * FROM gp_stat_all_tables_summary + WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_aoseg') AND + schemaname !~ '^pg_toast'; + +CREATE VIEW gp_statio_all_sequences_summary as +SELECT + sas.relid, + sas.schemaname, + sas.relname, + CASE WHEN dst.policytype = 'r' THEN (sum(sas.blks_read)/dst.numsegments)::bigint ELSE sum(sas.blks_read) END AS blks_read, + CASE WHEN dst.policytype = 'r' THEN (sum(sas.blks_hit)/dst.numsegments)::bigint ELSE sum(sas.blks_hit) END AS blks_hit +FROM + gp_statio_all_sequences sas + LEFT OUTER JOIN gp_distribution_policy dst + ON sas.relid = dst.localoid +GROUP BY + sas.relid, + sas.schemaname, + sas.relname, + dst.policytype, + dst.numsegments; + +CREATE VIEW gp_statio_sys_sequences_summary AS + SELECT * FROM gp_statio_all_sequences_summary + WHERE schemaname IN ('pg_catalog', 'information_schema', 'pg_aoseg') OR + schemaname ~ '^pg_toast'; + +CREATE VIEW gp_statio_user_sequences_summary AS + SELECT * FROM gp_statio_all_sequences_summary + WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_aoseg') AND + schemaname !~ '^pg_toast'; + +CREATE VIEW gp_statio_all_indexes_summary AS +SELECT + sai.relid, + sai.indexrelid, + sai.schemaname, + sai.relname, + sai.indexrelname, + CASE WHEN dst.policytype = 'r' THEN (sum(sai.idx_blks_read)/dst.numsegments)::bigint ELSE sum(sai.idx_blks_read) END AS idx_blks_read, + CASE WHEN dst.policytype = 'r' THEN (sum(sai.idx_blks_hit)/dst.numsegments)::bigint ELSE sum(sai.idx_blks_hit) END AS idx_blks_hit +FROM + gp_statio_all_indexes sai + LEFT OUTER JOIN gp_distribution_policy dst + ON sai.relid = dst.localoid +GROUP BY + sai.relid, + sai.indexrelid, + sai.schemaname, + sai.relname, + sai.indexrelname, + dst.policytype, + dst.numsegments; + +CREATE VIEW gp_statio_sys_indexes_summary AS + SELECT * FROM gp_statio_all_indexes_summary + WHERE schemaname IN ('pg_catalog', 'information_schema', 'pg_aoseg') OR + schemaname ~ '^pg_toast'; + +CREATE VIEW gp_statio_user_indexes_summary AS + SELECT * FROM gp_statio_all_indexes_summary + WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_aoseg') AND + schemaname !~ '^pg_toast'; + +CREATE VIEW gp_stat_user_functions_summary AS +SELECT + guf.funcid, + guf.schemaname, + guf.funcname, + sum(guf.calls) AS calls, + sum(guf.total_time) AS total_time, + sum(guf.self_time) AS self_time +FROM + gp_stat_user_functions guf +GROUP BY + guf.funcid, + guf.schemaname, + guf.funcname; + +CREATE VIEW gp_stat_xact_user_functions_summary AS +SELECT + xuf.funcid, + xuf.schemaname, + xuf.funcname, + sum(xuf.calls) AS calls, + sum(xuf.total_time) AS total_time, + sum(xuf.self_time) AS self_time +FROM + gp_stat_xact_user_functions xuf +GROUP BY + xuf.funcid, + xuf.schemaname, + xuf.funcname; + +CREATE VIEW gp_stat_slru_summary AS +SELECT + gss.name, + sum(gss.blks_zeroed) AS blks_zeroed, + sum(gss.blks_hit) AS blks_hit, + sum(gss.blks_read) AS blks_read, + sum(gss.blks_written) AS blks_written, + sum(gss.blks_exists) AS blks_exists, + sum(gss.flushes) AS flushes, + sum(gss.truncates) AS truncates, + max(gss.stats_reset) AS stats_reset +FROM + gp_stat_slru gss +GROUP BY + gss.name; + + CREATE VIEW gp_stat_progress_vacuum_summary AS SELECT max(coalesce(a1.pid, 0)) as pid, From 9c7eb8f8843a61ea645ef2e3942fea3108f4544d Mon Sep 17 00:00:00 2001 From: liushengsong Date: Wed, 3 Sep 2025 11:33:49 +0800 Subject: [PATCH 138/260] Fix: Adapt system view after cherry-pick --- .../expected/auto_explain_optimizer.out | 2 +- .../input/autovacuum-analyze.source | 12 +- .../output/autovacuum-analyze.source | 12 +- .../src/test/regress/expected/pg_stat.out | 16 +- .../src/test/regress/expected/stats.out | 14 +- .../regress/input/pgstat_qd_tabstat.source | 80 ++--- .../regress/output/pgstat_qd_tabstat.source | 84 ++--- .../src/test/regress/sql/pg_stat.sql | 16 +- .../src/test/regress/sql/stats.sql | 14 +- src/backend/catalog/system_views.sql | 29 +- src/backend/catalog/system_views_gp.in | 20 +- .../catalog/system_views_gp_summary.sql | 1 + .../isolation2/expected/analyze_progress.out | 1 - .../expected/ao_index_build_progress.out | 4 +- .../expected/vacuum_progress_column.out | 83 ++--- .../expected/vacuum_progress_row.out | 327 ++++++++++++------ .../input/autovacuum-analyze.source | 12 +- .../output/autovacuum-analyze.source | 12 +- .../parallel_retrieve_cursor/explain.source | 19 +- src/test/isolation2/sql/setup.sql | 21 -- .../isolation2/sql/vacuum_progress_column.sql | 21 +- .../isolation2/sql/vacuum_progress_row.sql | 82 ++++- src/test/regress/expected/stats.out | 14 +- .../regress/input/pgstat_qd_tabstat.source | 8 +- .../regress/output/pgstat_qd_tabstat.source | 8 +- src/test/regress/sql/stats.sql | 14 +- 26 files changed, 513 insertions(+), 413 deletions(-) diff --git a/contrib/auto_explain/expected/auto_explain_optimizer.out b/contrib/auto_explain/expected/auto_explain_optimizer.out index e1d3e334d95..1f469cc45fc 100644 --- a/contrib/auto_explain/expected/auto_explain_optimizer.out +++ b/contrib/auto_explain/expected/auto_explain_optimizer.out @@ -38,7 +38,7 @@ LOG: duration: 0.026 ms plan: Query Text: SELECT relname FROM pg_class WHERE relname='pg_class'; Index Only Scan using pg_class_relname_nsp_index on pg_class (cost=0.15..4.17 rows=1 width=64) (actual rows=1 loops=1) Index Cond: (relname = 'pg_class'::name) - Heap Fetches: 1 + Heap Fetches: 0 (slice0) Executor memory: 105K bytes. Memory used: 128000kB relname diff --git a/contrib/pax_storage/src/test/isolation2/input/autovacuum-analyze.source b/contrib/pax_storage/src/test/isolation2/input/autovacuum-analyze.source index 32e79cdd491..19187b107c2 100644 --- a/contrib/pax_storage/src/test/isolation2/input/autovacuum-analyze.source +++ b/contrib/pax_storage/src/test/isolation2/input/autovacuum-analyze.source @@ -178,7 +178,7 @@ SELECT count(*) FROM pg_statistic where starelid = 'autostatstbl'::regclass; select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 1, autoanalyze_count = 0, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Wait until autovacuum is triggered SELECT gp_wait_until_triggered_fault('auto_vac_worker_after_report_activity', 1, 1); @@ -192,7 +192,7 @@ SELECT gp_inject_fault('analyze_finished_one_relation', 'reset', 1); -- we can see the auto-ANALYZE finished select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 1, autoanalyze_count = 1, and n_mod_since_analyze = 0 -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Case 2 -- -- with auto_stats 'on_change' mode, the auto-ANALYZE still trigger @@ -211,7 +211,7 @@ SELECT gp_inject_fault('auto_vac_worker_after_report_activity', 'suspend', '', ' select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 2, autoanalyze_count = 1, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Wait until autovacuum is triggered SELECT gp_wait_until_triggered_fault('auto_vac_worker_after_report_activity', 1, 1); @@ -225,7 +225,7 @@ SELECT gp_inject_fault('analyze_finished_one_relation', 'reset', 1); -- we can see the auto-ANALYZE finished, check statistic and analyze count select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 2, autoanalyze_count = 2, and n_mod_since_analyze = 0 -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Case 3 -- @@ -244,7 +244,7 @@ SELECT gp_inject_fault('auto_vac_worker_after_report_activity', 'suspend', '', ' select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 2, autoanalyze_count = 2, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Wait until autovacuum is triggered SELECT gp_wait_until_triggered_fault('auto_vac_worker_after_report_activity', 1, 1); @@ -258,7 +258,7 @@ SELECT gp_inject_fault('analyze_finished_one_relation', 'reset', 1); -- we can see the auto-ANALYZE finished, check statistic and analyze count select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 2, autoanalyze_count = 3, and n_mod_since_analyze = 0 since ANALYZE executed -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Reset GUCs. ALTER SYSTEM RESET autovacuum_naptime; diff --git a/contrib/pax_storage/src/test/isolation2/output/autovacuum-analyze.source b/contrib/pax_storage/src/test/isolation2/output/autovacuum-analyze.source index 0c4b87746e4..dff55111b64 100644 --- a/contrib/pax_storage/src/test/isolation2/output/autovacuum-analyze.source +++ b/contrib/pax_storage/src/test/isolation2/output/autovacuum-analyze.source @@ -422,7 +422,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; (1 row) -- expect analyze_count = 1, autoanalyze_count = 0, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 1 | 0 | 1000 @@ -465,7 +465,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; 1 | 1000 (1 row) -- expect analyze_count = 1, autoanalyze_count = 1, and n_mod_since_analyze = 0 -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 1 | 1 | 0 @@ -502,7 +502,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; (1 row) -- expect analyze_count = 2, autoanalyze_count = 1, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 2 | 1 | 1000 @@ -545,7 +545,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; 1 | 2000 (1 row) -- expect analyze_count = 2, autoanalyze_count = 2, and n_mod_since_analyze = 0 -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 2 | 2 | 0 @@ -581,7 +581,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; (1 row) -- expect analyze_count = 2, autoanalyze_count = 2, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 2 | 2 | 1000 @@ -624,7 +624,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; 1 | 3000 (1 row) -- expect analyze_count = 2, autoanalyze_count = 3, and n_mod_since_analyze = 0 since ANALYZE executed -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 2 | 3 | 0 diff --git a/contrib/pax_storage/src/test/regress/expected/pg_stat.out b/contrib/pax_storage/src/test/regress/expected/pg_stat.out index 27dc25f957d..761372051ef 100644 --- a/contrib/pax_storage/src/test/regress/expected/pg_stat.out +++ b/contrib/pax_storage/src/test/regress/expected/pg_stat.out @@ -5,7 +5,7 @@ create table pg_stat_test(a int); select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup -from pg_stat_all_tables where relname = 'pg_stat_test'; +from gp_stat_all_tables_summary where relname = 'pg_stat_test'; schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup ------------+--------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------ public | pg_stat_test | 0 | 0 | | | 0 | 0 | 0 | 0 | 0 | 0 @@ -14,7 +14,7 @@ from pg_stat_all_tables where relname = 'pg_stat_test'; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup -from pg_stat_user_tables where relname = 'pg_stat_test'; +from gp_stat_user_tables_summary where relname = 'pg_stat_test'; schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup ------------+--------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------ public | pg_stat_test | 0 | 0 | | | 0 | 0 | 0 | 0 | 0 | 0 @@ -22,14 +22,14 @@ from pg_stat_user_tables where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_all_indexes where relname = 'pg_stat_test'; +from gp_stat_all_indexes_summary where relname = 'pg_stat_test'; schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch ------------+---------+--------------+----------+--------------+--------------- (0 rows) select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_user_indexes where relname = 'pg_stat_test'; +from gp_stat_user_indexes_summary where relname = 'pg_stat_test'; schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch ------------+---------+--------------+----------+--------------+--------------- (0 rows) @@ -63,7 +63,7 @@ reset enable_seqscan; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze -from pg_stat_all_tables where relname = 'pg_stat_test'; +from gp_stat_all_tables_summary where relname = 'pg_stat_test'; schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze ------------+--------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------+--------------------- public | pg_stat_test | 15 | 391 | 1 | 0 | 110 | 0 | 19 | 0 | 91 | 19 | 129 @@ -72,7 +72,7 @@ from pg_stat_all_tables where relname = 'pg_stat_test'; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze -from pg_stat_user_tables where relname = 'pg_stat_test'; +from gp_stat_user_tables_summary where relname = 'pg_stat_test'; schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze ------------+--------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------+--------------------- public | pg_stat_test | 15 | 391 | 1 | 0 | 110 | 0 | 19 | 0 | 91 | 19 | 129 @@ -80,7 +80,7 @@ from pg_stat_user_tables where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_all_indexes where relname = 'pg_stat_test'; +from gp_stat_all_indexes_summary where relname = 'pg_stat_test'; schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch ------------+--------------+--------------------------+----------+--------------+--------------- public | pg_stat_test | pg_stat_user_table_index | 1 | 1 | 0 @@ -88,7 +88,7 @@ from pg_stat_all_indexes where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_user_indexes where relname = 'pg_stat_test'; +from gp_stat_user_indexes_summary where relname = 'pg_stat_test'; schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch ------------+--------------+--------------------------+----------+--------------+--------------- public | pg_stat_test | pg_stat_user_table_index | 1 | 1 | 0 diff --git a/contrib/pax_storage/src/test/regress/expected/stats.out b/contrib/pax_storage/src/test/regress/expected/stats.out index d3f407656fc..a75f9801a36 100644 --- a/contrib/pax_storage/src/test/regress/expected/stats.out +++ b/contrib/pax_storage/src/test/regress/expected/stats.out @@ -22,7 +22,7 @@ SELECT t.seq_scan, t.seq_tup_read, t.idx_scan, t.idx_tup_fetch, (b.heap_blks_read + b.heap_blks_hit) AS heap_blks, (b.idx_blks_read + b.idx_blks_hit) AS idx_blks, pg_stat_get_snapshot_timestamp() as snap_ts - FROM pg_catalog.pg_stat_user_tables AS t, + FROM pg_catalog.gp_stat_user_tables_summary AS t, pg_catalog.pg_statio_user_tables AS b WHERE t.relname='tenk2' AND b.relname='tenk2'; -- function to wait for counters to advance @@ -45,17 +45,17 @@ begin -- check to see if seqscan has been sensed SELECT (st.seq_scan >= pr.seq_scan + 1) INTO updated1 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- check to see if indexscan has been sensed SELECT (st.idx_scan >= pr.idx_scan + 1) INTO updated2 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- check to see if all updates have been sensed SELECT (n_tup_ins > 0) INTO updated3 - FROM pg_stat_user_tables WHERE relname='trunc_stats_test4'; + FROM gp_stat_user_tables_summary WHERE relname='trunc_stats_test4'; -- We must also check explicitly that pg_stat_get_snapshot_timestamp has -- advanced, because that comes from the global stats file which might @@ -65,7 +65,7 @@ begin -- check to see if idx_tup_fetch has been sensed SELECT (st.idx_tup_fetch >= pr.idx_tup_fetch + 1) INTO updated5 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; exit when updated1 and updated2 and updated3 and updated4 and updated5; @@ -177,7 +177,7 @@ SELECT wait_for_stats(); -- check effects SELECT relname, n_tup_ins, n_tup_upd, n_tup_del, n_live_tup, n_dead_tup - FROM pg_stat_user_tables + FROM gp_stat_user_tables_summary WHERE relname like 'trunc_stats_test%' order by relname; relname | n_tup_ins | n_tup_upd | n_tup_del | n_live_tup | n_dead_tup -------------------+-----------+-----------+-----------+------------+------------ @@ -192,7 +192,7 @@ SELECT st.seq_scan >= pr.seq_scan + 1, st.seq_tup_read >= pr.seq_tup_read + cl.reltuples, st.idx_scan >= pr.idx_scan + 1, st.idx_tup_fetch >= pr.idx_tup_fetch + 1 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; ?column? | ?column? | ?column? | ?column? ----------+----------+----------+---------- diff --git a/contrib/pax_storage/src/test/regress/input/pgstat_qd_tabstat.source b/contrib/pax_storage/src/test/regress/input/pgstat_qd_tabstat.source index a3c201de66c..4be0a8c7eb8 100644 --- a/contrib/pax_storage/src/test/regress/input/pgstat_qd_tabstat.source +++ b/contrib/pax_storage/src/test/regress/input/pgstat_qd_tabstat.source @@ -10,7 +10,7 @@ copy table_for_docopy (i, j) from stdin; 3 hello3 \. select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_docopy'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_docopy'::regclass; CREATE TABLE data_tbl (a int,b char) distributed by (a); INSERT INTO data_tbl values(1,'1'); @@ -21,7 +21,7 @@ COPY data_tbl TO '/tmp/data_tbl.csv' on segment; create table copy_on_segment (a int,b char); COPY copy_on_segment from '/tmp/data_tbl.csv' on segment log errors segment reject limit 3 rows; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'copy_on_segment'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'copy_on_segment'::regclass; -- Test pgstat table stat in initplan on QD @@ -34,26 +34,26 @@ copy table_for_initplan (i, j, k) from stdin; explain (costs off) with updated AS (update table_for_initplan set k = 33 where i = 3 returning k) select table_for_initplan.*, (select sum(k) from updated) from table_for_initplan; with updated AS (update table_for_initplan set k = 33 where i = 3 returning k) select table_for_initplan.*, (select sum(k) from updated) from table_for_initplan; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_initplan'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_initplan'::regclass; -- Test pgstat table stat in CTAS on QD create table table_for_ctas as select i, 'hello' || i from generate_series(1, 100) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_ctas'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_ctas'::regclass; select i, 'hello' || i into table_for_insert_into from generate_series(1, 100) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_insert_into'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_insert_into'::regclass; -- Test pgstat table stat in ALTER TABLE SET DISTRIBUTED BY on QD create table table_for_set_distributed_by(i int, j varchar) distributed by (i); insert into table_for_set_distributed_by select i, 'hello' || i from generate_series(1, 333) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_set_distributed_by'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_set_distributed_by'::regclass; alter table table_for_set_distributed_by set distributed by (j); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_set_distributed_by'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_set_distributed_by'::regclass; -- Test pgstat table stat in execution of funciton on QD @@ -68,7 +68,7 @@ $$ language plpgsql volatile; select update_table_for_function(); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_function'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_function'::regclass; -- Test pgstat table stat in ALTER TABLE EXPAND TABLE on QD; @@ -78,11 +78,11 @@ create table table_for_expand(i int, j varchar) distributed by (i); insert into table_for_expand select i, 'hello' || i from generate_series(1, 333) f(i); select count(distinct gp_segment_id) from table_for_expand; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_expand'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_expand'::regclass; alter table table_for_expand expand table; select count(distinct gp_segment_id) from table_for_expand; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_expand'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_expand'::regclass; select gp_debug_reset_create_table_default_numsegments(); @@ -103,7 +103,7 @@ update table_for_iud set j = 'heroes never die' where i >= 300; release savepoint level3; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_iud'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_iud'::regclass; begin; savepoint level1; @@ -120,14 +120,14 @@ rollback to savepoint level3; delete from table_for_iud where i <= 200; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_iud'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_iud'::regclass; -- Test pgstat table stat in TRUNCATE on QD create table table_for_truncate(i int, j varchar) distributed by (i); insert into table_for_truncate select i, 'hello' || i from generate_series(1, 777) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_truncate'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_truncate'::regclass; begin; savepoint level1; savepoint level2; @@ -141,12 +141,12 @@ delete from table_for_truncate where i >= 700; update table_for_truncate set j = 'D' where i <= 200; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate'::regclass; create table table_for_truncate_abort(i int, j varchar) distributed by (i); insert into table_for_truncate_abort select i, 'hello' || i from generate_series(1, 777) f(i); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate_abort'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate_abort'::regclass; begin; savepoint level1; savepoint level2; @@ -160,7 +160,7 @@ delete from table_for_truncate_abort where i < 700; update table_for_truncate_abort set j = 'D' where i >= 200; rollback; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate_abort'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate_abort'::regclass; -- Test pgstat table stat for partition table on QD @@ -171,17 +171,17 @@ PARTITION BY RANGE (rank) DEFAULT PARTITION extra ); insert into rankpart select i, i % 10, i from generate_series(1, 1000)i; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; begin; delete from rankpart where id <= 100; rollback; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; copy rankpart (id, rank, product) from stdin; 1001 1 1001 @@ -196,8 +196,8 @@ copy rankpart (id, rank, product) from stdin; 1010 6 1010 \. select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; begin; update rankpart set rank = 1 where id > 1005; @@ -209,9 +209,9 @@ release savepoint level2; rollback to savepoint level1; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; begin; savepoint level1_1; @@ -219,9 +219,9 @@ insert into rankpart select i, i % 10, i from generate_series(2001, 3000)i; insert into rankpart select i, i % 10, i from generate_series(3001, 4000)i; commit; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; -- Test pgstat matview stat with distributed policy. @@ -229,13 +229,13 @@ create table base_table(i int, j int, z int ) distributed by (i); insert into base_table select i,i,i from generate_series(1, 100) i; create materialized view mt as select * from base_table where z>=50; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; insert into base_table select i,i,i from generate_series(1, 100) i; refresh materialized view mt; select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; --- pg_stat_all_tables collects gpstats across segments select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; +-- gp_stat_all_tables_summary collects gpstats across segments +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from gp_stat_all_tables_summary where relid = 'mt'::regclass; drop materialized view mt; drop table base_table; @@ -245,13 +245,13 @@ create table base_table(i int, j int, z int ) distributed replicated; insert into base_table select i,i,i from generate_series(1, 100) i; create materialized view mt as select * from base_table where z>=50 distributed replicated; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; insert into base_table select i,i,i from generate_series(1, 100) i; refresh materialized view mt; select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; --- pg_stat_all_tables collects gpstats across segments select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; +-- gp_stat_all_tables_summary collects gpstats across segments +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from gp_stat_all_tables_summary where relid = 'mt'::regclass; reset gp_autostats_mode; @@ -263,15 +263,15 @@ insert into tabstat_ao select 1,1; delete from tabstat_ao; select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select count(*) from pg_stat_all_tables +select count(*) from gp_stat_all_tables_summary where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass) OR relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass) OR relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. -select n_tup_ins from pg_stat_all_tables where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); -select n_tup_ins from pg_stat_all_tables where relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); -select n_tup_ins from pg_stat_all_tables where relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); drop table tabstat_ao; diff --git a/contrib/pax_storage/src/test/regress/output/pgstat_qd_tabstat.source b/contrib/pax_storage/src/test/regress/output/pgstat_qd_tabstat.source index 5118839b171..a0b24ee35dc 100644 --- a/contrib/pax_storage/src/test/regress/output/pgstat_qd_tabstat.source +++ b/contrib/pax_storage/src/test/regress/output/pgstat_qd_tabstat.source @@ -10,7 +10,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_docopy'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_docopy'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 3 | 0 | 0 | 0 | 3 | 0 | 3 @@ -32,7 +32,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'copy_on_segment'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'copy_on_segment'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 4 | 0 | 0 | 0 | 4 | 0 | 4 @@ -70,7 +70,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_initplan'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_initplan'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 3 | 1 | 0 | 0 | 3 | 1 | 4 @@ -86,7 +86,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_ctas'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_ctas'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 0 | 0 | 100 | 0 | 100 @@ -101,7 +101,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_insert_into'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_insert_into'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 0 | 0 | 100 | 0 | 100 @@ -116,7 +116,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_set_distributed_by'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_set_distributed_by'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 0 | 0 | 333 | 0 | 333 @@ -129,7 +129,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_set_distributed_by'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_set_distributed_by'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 0 | 0 | 333 | 0 | 333 @@ -157,7 +157,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_function'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_function'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 200 | 0 | 133 | 200 | 533 @@ -185,7 +185,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_expand'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_expand'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 0 | 0 | 333 | 0 | 333 @@ -204,7 +204,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_expand'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_expand'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 333 | 0 | 0 | 0 | 333 | 0 | 333 @@ -238,7 +238,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_iud'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_iud'::regclass; n_live_tup | n_dead_tup ------------+------------ 333 | 34 @@ -264,7 +264,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_iud'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_iud'::regclass; n_live_tup | n_dead_tup ------------+------------ 133 | 713 @@ -279,7 +279,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'table_for_truncate'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'table_for_truncate'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 777 | 0 | 0 | 0 | 777 | 0 | 777 @@ -303,7 +303,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate'::regclass; n_live_tup | n_dead_tup ------------+------------ 699 | 301 @@ -317,7 +317,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate_abort'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate_abort'::regclass; n_live_tup | n_dead_tup ------------+------------ 777 | 0 @@ -341,7 +341,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_live_tup, n_dead_tup from pg_stat_all_tables_internal where relid = 'table_for_truncate_abort'::regclass; +select n_live_tup, n_dead_tup from pg_stat_all_tables where relid = 'table_for_truncate_abort'::regclass; n_live_tup | n_dead_tup ------------+------------ 777 | 223 @@ -360,19 +360,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 500 | 0 | 0 | 0 | 500 | 0 | 500 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 400 | 0 | 0 | 0 | 400 | 0 | 400 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 0 | 0 | 100 | 0 | 100 @@ -387,19 +387,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 500 | 0 | 50 | 0 | 500 | 0 | 500 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 400 | 0 | 40 | 0 | 400 | 0 | 400 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 10 | 0 | 100 | 0 | 100 @@ -412,13 +412,13 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 505 | 0 | 50 | 0 | 505 | 0 | 505 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 405 | 0 | 40 | 0 | 405 | 0 | 405 @@ -439,19 +439,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 510 | 0 | 55 | 0 | 510 | 0 | 510 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 410 | 0 | 50 | 0 | 400 | 10 | 410 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 100 | 0 | 10 | 0 | 100 | 0 | 100 @@ -468,19 +468,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_2'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_2'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 1510 | 0 | 55 | 0 | 1510 | 0 | 1510 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_3'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_3'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 1210 | 0 | 50 | 0 | 1200 | 10 | 1210 (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'rankpart_1_prt_extra'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'rankpart_1_prt_extra'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 300 | 0 | 10 | 0 | 300 | 0 | 300 @@ -498,7 +498,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 51 | 0 | 0 | 0 | 51 | 0 | 51 @@ -514,14 +514,14 @@ select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat( (3 rows) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 153 | 0 | 0 | 0 | 102 | 0 | 153 (1 row) --- pg_stat_all_tables collects gpstats across segments -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; +-- gp_stat_all_tables_summary collects gpstats across segments +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from gp_stat_all_tables_summary where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 153 | 0 | 0 | 0 | 102 | 0 | 153 @@ -539,7 +539,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 51 | 0 | 0 | 0 | 51 | 0 | 51 @@ -555,14 +555,14 @@ select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat( (3 rows) -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables_internal where relid = 'mt'::regclass; +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 153 | 0 | 0 | 0 | 102 | 0 | 153 (1 row) --- pg_stat_all_tables collects gpstats across segments -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; +-- gp_stat_all_tables_summary collects gpstats across segments +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from gp_stat_all_tables_summary where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 153 | 0 | 0 | 0 | 102 | 0 | 153 @@ -580,7 +580,7 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select count(*) from pg_stat_all_tables +select count(*) from gp_stat_all_tables_summary where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass) OR relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass) @@ -596,19 +596,19 @@ select pg_sleep(0.77); -- Force pgstat_report_stat() to send tabstat. (1 row) -select n_tup_ins from pg_stat_all_tables where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select segrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); n_tup_ins ----------- 1 (1 row) -select n_tup_ins from pg_stat_all_tables where relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select blkdirrelid from pg_appendonly where relid = 'tabstat_ao'::regclass); n_tup_ins ----------- 1 (1 row) -select n_tup_ins from pg_stat_all_tables where relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); +select n_tup_ins from gp_stat_all_tables_summary where relid = (select visimaprelid from pg_appendonly where relid = 'tabstat_ao'::regclass); n_tup_ins ----------- 1 diff --git a/contrib/pax_storage/src/test/regress/sql/pg_stat.sql b/contrib/pax_storage/src/test/regress/sql/pg_stat.sql index d9fc37850b0..383a9149186 100644 --- a/contrib/pax_storage/src/test/regress/sql/pg_stat.sql +++ b/contrib/pax_storage/src/test/regress/sql/pg_stat.sql @@ -6,17 +6,17 @@ create table pg_stat_test(a int); select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup -from pg_stat_all_tables where relname = 'pg_stat_test'; +from gp_stat_all_tables_summary where relname = 'pg_stat_test'; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup -from pg_stat_user_tables where relname = 'pg_stat_test'; +from gp_stat_user_tables_summary where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_all_indexes where relname = 'pg_stat_test'; +from gp_stat_all_indexes_summary where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_user_indexes where relname = 'pg_stat_test'; +from gp_stat_user_indexes_summary where relname = 'pg_stat_test'; begin; -- make analyze same transcation with insert to avoid double the pgstat causes by unorder message read. insert into pg_stat_test select * from generate_series(1, 100); @@ -42,17 +42,17 @@ reset enable_seqscan; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze -from pg_stat_all_tables where relname = 'pg_stat_test'; +from gp_stat_all_tables_summary where relname = 'pg_stat_test'; select schemaname, relname, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze -from pg_stat_user_tables where relname = 'pg_stat_test'; +from gp_stat_user_tables_summary where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_all_indexes where relname = 'pg_stat_test'; +from gp_stat_all_indexes_summary where relname = 'pg_stat_test'; select schemaname, relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch -from pg_stat_user_indexes where relname = 'pg_stat_test'; +from gp_stat_user_indexes_summary where relname = 'pg_stat_test'; reset optimizer; reset max_parallel_workers_per_gather; diff --git a/contrib/pax_storage/src/test/regress/sql/stats.sql b/contrib/pax_storage/src/test/regress/sql/stats.sql index 36878562f87..94944161be7 100644 --- a/contrib/pax_storage/src/test/regress/sql/stats.sql +++ b/contrib/pax_storage/src/test/regress/sql/stats.sql @@ -20,7 +20,7 @@ SELECT t.seq_scan, t.seq_tup_read, t.idx_scan, t.idx_tup_fetch, (b.heap_blks_read + b.heap_blks_hit) AS heap_blks, (b.idx_blks_read + b.idx_blks_hit) AS idx_blks, pg_stat_get_snapshot_timestamp() as snap_ts - FROM pg_catalog.pg_stat_user_tables AS t, + FROM pg_catalog.gp_stat_user_tables_summary AS t, pg_catalog.pg_statio_user_tables AS b WHERE t.relname='tenk2' AND b.relname='tenk2'; @@ -44,17 +44,17 @@ begin -- check to see if seqscan has been sensed SELECT (st.seq_scan >= pr.seq_scan + 1) INTO updated1 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- check to see if indexscan has been sensed SELECT (st.idx_scan >= pr.idx_scan + 1) INTO updated2 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- check to see if all updates have been sensed SELECT (n_tup_ins > 0) INTO updated3 - FROM pg_stat_user_tables WHERE relname='trunc_stats_test4'; + FROM gp_stat_user_tables_summary WHERE relname='trunc_stats_test4'; -- We must also check explicitly that pg_stat_get_snapshot_timestamp has -- advanced, because that comes from the global stats file which might @@ -64,7 +64,7 @@ begin -- check to see if idx_tup_fetch has been sensed SELECT (st.idx_tup_fetch >= pr.idx_tup_fetch + 1) INTO updated5 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; exit when updated1 and updated2 and updated3 and updated4 and updated5; @@ -167,14 +167,14 @@ SELECT wait_for_stats(); -- check effects SELECT relname, n_tup_ins, n_tup_upd, n_tup_del, n_live_tup, n_dead_tup - FROM pg_stat_user_tables + FROM gp_stat_user_tables_summary WHERE relname like 'trunc_stats_test%' order by relname; SELECT st.seq_scan >= pr.seq_scan + 1, st.seq_tup_read >= pr.seq_tup_read + cl.reltuples, st.idx_scan >= pr.idx_scan + 1, st.idx_tup_fetch >= pr.idx_tup_fetch + 1 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- GPDB_13_MERGE_FIXME: Some statistics are handled by stat collector process on each segment but not sent to master. diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index d4d00b67771..23a68ab22c6 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -427,8 +427,7 @@ CREATE VIEW pg_prepared_xacts AS LEFT JOIN pg_database D ON P.dbid = D.oid; CREATE VIEW pg_prepared_statements AS - SELECT pg_catalog.gp_execution_segment() AS gp_segment_id, * - FROM pg_prepared_statement() AS P; + SELECT * FROM pg_prepared_statement() AS P; CREATE VIEW pg_seclabels AS SELECT @@ -652,8 +651,7 @@ REVOKE ALL ON pg_shmem_allocations FROM PUBLIC; REVOKE EXECUTE ON FUNCTION pg_get_shmem_allocations() FROM PUBLIC; CREATE VIEW pg_backend_memory_contexts AS - SELECT pg_catalog.gp_execution_segment() AS gp_segment_id, * - FROM pg_get_backend_memory_contexts(); + SELECT * FROM pg_get_backend_memory_contexts(); REVOKE ALL ON pg_backend_memory_contexts FROM PUBLIC; REVOKE EXECUTE ON FUNCTION pg_get_backend_memory_contexts() FROM PUBLIC; @@ -722,7 +720,7 @@ CREATE VIEW pg_stat_sys_tables AS -- since we don't have segments. -- We create a new view for single node mode. CREATE VIEW pg_stat_sys_tables_single_node AS - SELECT * FROM pg_stat_all_tables_internal + SELECT * FROM pg_stat_all_tables WHERE schemaname IN ('pg_catalog', 'information_schema') OR schemaname ~ '^pg_toast'; @@ -957,15 +955,6 @@ CREATE VIEW pg_stat_replication AS JOIN pg_stat_get_wal_senders() AS W ON (S.pid = W.pid) LEFT JOIN pg_authid AS U ON (S.usesysid = U.oid); --- FIXME: remove it after 0d0fdc75ae5b72d42be549e234a29546efe07ca2 -CREATE VIEW gp_stat_activity AS - SELECT gp_execution_segment() as gp_segment_id, * FROM gp_dist_random('pg_stat_activity') - UNION ALL SELECT -1 as gp_segment_id, * from pg_stat_activity; - -CREATE VIEW gp_settings AS - SELECT gp_execution_segment() as gp_segment_id, * FROM gp_dist_random('pg_settings') - UNION ALL SELECT -1 as gp_segment_id, * from pg_settings; - CREATE FUNCTION gp_stat_get_master_replication() RETURNS SETOF RECORD AS $$ SELECT pg_catalog.gp_execution_segment() AS gp_segment_id, * @@ -1117,7 +1106,6 @@ CREATE VIEW pg_replication_slots AS CREATE VIEW pg_stat_replication_slots AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, s.slot_name, s.spill_txns, s.spill_count, @@ -1134,7 +1122,6 @@ CREATE VIEW pg_stat_replication_slots AS CREATE VIEW pg_stat_database AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, D.oid AS datid, D.datname AS datname, CASE @@ -1175,7 +1162,6 @@ CREATE VIEW pg_stat_database AS CREATE VIEW pg_stat_resqueues AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, Q.oid AS queueid, Q.rsqname AS queuename, pg_stat_get_queue_num_exec(Q.oid) AS n_queries_exec, @@ -1475,9 +1461,8 @@ CREATE VIEW pg_stat_bgwriter AS CREATE VIEW pg_stat_wal AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, w.wal_records, - w.wal_fpi, + w.wal_fpi as wal_fpw, w.wal_bytes, w.wal_buffers_full, w.wal_write, @@ -1489,7 +1474,6 @@ CREATE VIEW pg_stat_wal AS CREATE VIEW pg_stat_progress_analyze AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, S.pid AS pid, S.datid AS datid, D.datname AS datname, CAST(S.relid AS oid) AS relid, CASE S.param1 WHEN 0 THEN 'initializing' @@ -1511,7 +1495,6 @@ CREATE VIEW pg_stat_progress_analyze AS CREATE VIEW pg_stat_progress_vacuum AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, S.pid AS pid, S.datid AS datid, D.datname AS datname, S.relid AS relid, CASE S.param1 WHEN 0 THEN 'initializing' @@ -1533,7 +1516,6 @@ CREATE VIEW pg_stat_progress_vacuum AS CREATE VIEW pg_stat_progress_cluster AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, S.pid AS pid, S.datid AS datid, D.datname AS datname, @@ -1561,7 +1543,6 @@ CREATE VIEW pg_stat_progress_cluster AS CREATE VIEW pg_stat_progress_create_index AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, S.pid AS pid, S.datid AS datid, D.datname AS datname, S.relid AS relid, CAST(S.param7 AS oid) AS index_relid, @@ -1597,7 +1578,6 @@ CREATE VIEW pg_stat_progress_create_index AS CREATE VIEW pg_stat_progress_basebackup AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, S.pid AS pid, CASE S.param1 WHEN 0 THEN 'initializing' WHEN 1 THEN 'waiting for checkpoint to finish' @@ -1615,7 +1595,6 @@ CREATE VIEW pg_stat_progress_basebackup AS CREATE VIEW pg_stat_progress_copy AS SELECT - pg_catalog.gp_execution_segment() AS gp_segment_id, S.pid AS pid, S.datid AS datid, D.datname AS datname, S.relid AS relid, CASE S.param5 WHEN 1 THEN 'COPY FROM' diff --git a/src/backend/catalog/system_views_gp.in b/src/backend/catalog/system_views_gp.in index cd865cea662..5f36752fc28 100644 --- a/src/backend/catalog/system_views_gp.in +++ b/src/backend/catalog/system_views_gp.in @@ -1,7 +1,7 @@ # This file lists all the PG system views 'pg_%' that we would like to create an # MPP-aware view 'gp_%' out of. The generated 'gp_%' view definitions will be placed # in system_views_gp.sql, and initialized at the same time as system_views.sql. -#pg_backend_memory_contexts +pg_backend_memory_contexts pg_config pg_cursors pg_file_settings @@ -13,16 +13,16 @@ pg_stat_all_indexes pg_stat_all_tables pg_stat_archiver pg_stat_bgwriter -#pg_stat_database +pg_stat_database pg_stat_database_conflicts pg_stat_gssapi pg_stat_operations -#pg_stat_progress_analyze -#pg_stat_progress_basebackup -#pg_stat_progress_cluster -#pg_stat_progress_copy -#pg_stat_progress_create_index -#pg_stat_progress_vacuum +pg_stat_progress_analyze +pg_stat_progress_basebackup +pg_stat_progress_cluster +pg_stat_progress_copy +pg_stat_progress_create_index +pg_stat_progress_vacuum pg_stat_slru pg_stat_ssl pg_stat_subscription @@ -31,7 +31,7 @@ pg_stat_sys_tables pg_stat_user_functions pg_stat_user_indexes pg_stat_user_tables -#pg_stat_wal +pg_stat_wal pg_stat_wal_receiver pg_stat_xact_all_tables pg_stat_xact_sys_tables @@ -46,5 +46,5 @@ pg_statio_sys_tables pg_statio_user_indexes pg_statio_user_sequences pg_statio_user_tables -#pg_stats ERROR: column "most_common_vals" has pseudo-type anyarray +pg_stats pg_stats_ext diff --git a/src/backend/catalog/system_views_gp_summary.sql b/src/backend/catalog/system_views_gp_summary.sql index f83329203ab..6f42f7d4d80 100644 --- a/src/backend/catalog/system_views_gp_summary.sql +++ b/src/backend/catalog/system_views_gp_summary.sql @@ -135,6 +135,7 @@ FROM case when d.policytype = 'r' then (sum(n_live_tup)/d.numsegments)::bigint else sum(n_live_tup) end n_live_tup, case when d.policytype = 'r' then (sum(n_dead_tup)/d.numsegments)::bigint else sum(n_dead_tup) end n_dead_tup, case when d.policytype = 'r' then (sum(n_mod_since_analyze)/d.numsegments)::bigint else sum(n_mod_since_analyze) end n_mod_since_analyze, + case when d.policytype = 'r' then (sum(n_ins_since_vacuum)/d.numsegments)::bigint else sum(n_ins_since_vacuum) end n_ins_since_vacuum, max(last_vacuum) as last_vacuum, max(last_autovacuum) as last_autovacuum, max(last_analyze) as last_analyze, diff --git a/src/test/isolation2/expected/analyze_progress.out b/src/test/isolation2/expected/analyze_progress.out index 97c02fbe617..68faf24a5e8 100644 --- a/src/test/isolation2/expected/analyze_progress.out +++ b/src/test/isolation2/expected/analyze_progress.out @@ -92,4 +92,3 @@ ANALYZE -- teardown DROP TABLE t_analyze_repl; DROP - diff --git a/src/test/isolation2/expected/ao_index_build_progress.out b/src/test/isolation2/expected/ao_index_build_progress.out index 2cc97d09031..fd91bedfe58 100644 --- a/src/test/isolation2/expected/ao_index_build_progress.out +++ b/src/test/isolation2/expected/ao_index_build_progress.out @@ -142,7 +142,7 @@ SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_succes -- By now, we should have reported some blocks (of size 'block_size') as "done", -- as well as a total number of blocks that matches the size of col j's segfile. -- Note: since we already had a block directory prior to the index build on --- column 'j', only column 'j' will be scanned. +-- column 'j', only column 'j' will be scanned. CBDB_CHERRY_PICK_MERGE_FIXME: fix when ao blkdir will be supported 1U: SELECT command, phase, ((pg_stat_file(pg_relation_filepath('aoco_index_build_progress') || '.' || 129)).size + (current_setting('block_size')::int - 1)) / current_setting('block_size')::int AS col_j_blocks, blocks_total AS blocks_total_reported, blocks_done AS blocks_done_reported FROM gp_stat_progress_create_index WHERE gp_segment_id = 1 AND relid = 'aoco_index_build_progress'::regclass; command | phase | col_j_blocks | blocks_total_reported | blocks_done_reported --------------+--------------------------------+--------------+-----------------------+---------------------- @@ -152,7 +152,7 @@ SELECT gp_wait_until_triggered_fault('AppendOnlyStorageRead_ReadNextBlock_succes SELECT command, phase, blocks_total, blocks_done FROM gp_stat_progress_create_index_summary WHERE relid = 'aoco_index_build_progress'::regclass; command | phase | blocks_total | blocks_done --------------+--------------------------------+--------------+------------- - CREATE INDEX | building index: scanning table | 24 | 9 + CREATE INDEX | building index: scanning table | 60 | 12 (1 row) SELECT gp_inject_fault('AppendOnlyStorageRead_ReadNextBlock_success', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; diff --git a/src/test/isolation2/expected/vacuum_progress_column.out b/src/test/isolation2/expected/vacuum_progress_column.out index 587bd35f7c8..2889f8a9256 100644 --- a/src/test/isolation2/expected/vacuum_progress_column.out +++ b/src/test/isolation2/expected/vacuum_progress_column.out @@ -45,18 +45,6 @@ ABORT DELETE FROM vacuum_progress_ao_column where j % 2 = 0; DELETE 50000 --- Lookup pg_class and collected stats view before VACUUM -SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_column'; - relpages | reltuples | relallvisible -----------+-----------+--------------- - 0 | -1 | 0 -(1 row) -SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_column'; - n_live_tup | n_dead_tup | last_vacuum | vacuum_count -------------+------------+-------------+-------------- - 100000 | 200000 | | 0 -(1 row) - -- Perform VACUUM and observe the progress -- Suspend execution at pre-cleanup phase after truncating both segfiles to their logical EOF. @@ -168,7 +156,7 @@ SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_ ----------+-----------+--------------- 37 | 50000 | 0 (1 row) -SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_column'; +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_column' and gp_segment_id = 1; n_live_tup | n_dead_tup | has_last_vacuum | vacuum_count ------------+------------+-----------------+-------------- 50000 | 0 | t | 1 @@ -248,7 +236,7 @@ SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_ ----------+-----------+--------------- 13 | 50000 | 0 (1 row) -SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_column'; +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_column' and gp_segment_id = 1; n_live_tup | n_dead_tup | has_last_vacuum | vacuum_count ------------+------------+-----------------+-------------- 50000 | 0 | t | 2 @@ -259,19 +247,6 @@ SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuu -- Current behavior is it will clear previous compact phase num_dead_tuples in post-cleanup -- phase (at injecting point vacuum_ao_post_cleanup_end), which is different from above case -- in which vacuum worker isn't changed. -ALTER SYSTEM SET gp_fts_mark_mirror_down_grace_period to 10; -ALTER -ALTER SYSTEM SET gp_fts_probe_interval to 10; -ALTER -SELECT gp_segment_id, pg_reload_conf() FROM gp_id UNION SELECT gp_segment_id, pg_reload_conf() FROM gp_dist_random('gp_id'); - gp_segment_id | pg_reload_conf ----------------+---------------- - 2 | t - 1 | t - 0 | t - -1 | t -(4 rows) - DROP TABLE IF EXISTS vacuum_progress_ao_column; DROP CREATE TABLE vacuum_progress_ao_column(i int, j int); @@ -315,7 +290,7 @@ DELETE 50000 SET 1&: vacuum vacuum_progress_ao_column; -2: SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 3, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +2: SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: @@ -325,13 +300,17 @@ SET -- Non-zero progressing data num_dead_tuples is showed up. select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; -ERROR: relation "gp_stat_progress_vacuum" does not exist -LINE 1: ...cuum_count, max_dead_tuples, num_dead_tuples from gp_stat_pr... - ^ + gp_segment_id | relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +---------------+---------------------------+--------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + 1 | vacuum_progress_ao_column | append-optimized compact | 25 | 9 | 17 | 0 | 33327 | 16621 + 0 | vacuum_progress_ao_column | append-optimized compact | 25 | 9 | 17 | 0 | 33462 | 16726 + 2 | vacuum_progress_ao_column | append-optimized compact | 25 | 9 | 17 | 0 | 33211 | 16653 +(3 rows) select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; -ERROR: relation "gp_stat_progress_vacuum_summary" does not exist -LINE 1: ...cuum_count, max_dead_tuples, num_dead_tuples from gp_stat_pr... - ^ + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +---------------------------+--------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_column | append-optimized compact | 75 | 27 | 51 | 0 | 100000 | 50000 +(1 row) -- Resume execution of compact phase and block at syncrep on one segment. 2: SELECT gp_inject_fault_infinite('wal_sender_loop', 'suspend', dbid) FROM gp_segment_configuration WHERE role = 'p' and content = 1; @@ -372,7 +351,7 @@ LINE 1: ...cuum_count, max_dead_tuples, num_dead_tuples from gp_stat_pr... -- initializes a new vacrelstats at the beginning of post-cleanup phase. -- Also all segments should reach to the same "vacuum_worker_changed" point -- due to FTS version being changed. -2: SELECT gp_wait_until_triggered_fault('vacuum_worker_changed', 3, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +2: SELECT gp_wait_until_triggered_fault('vacuum_worker_changed', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: @@ -383,10 +362,10 @@ LINE 1: ...cuum_count, max_dead_tuples, num_dead_tuples from gp_stat_pr... 2: SELECT content, role, preferred_role, mode, status FROM gp_segment_configuration WHERE content > -1; content | role | preferred_role | mode | status ---------+------+----------------+------+-------- - 0 | p | p | s | u - 0 | m | m | s | u 2 | p | p | s | u 2 | m | m | s | u + 0 | p | p | s | u + 0 | m | m | s | u 1 | p | p | n | u 1 | m | m | n | d (6 rows) @@ -406,7 +385,7 @@ LINE 1: ...cuum_count, max_dead_tuples, num_dead_tuples from gp_stat_pr... Success: Success: (3 rows) -2: SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 3, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +2: SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: @@ -416,13 +395,17 @@ LINE 1: ...cuum_count, max_dead_tuples, num_dead_tuples from gp_stat_pr... -- The previous collected num_dead_tuples in compact phase is zero. select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; -ERROR: relation "gp_stat_progress_vacuum" does not exist -LINE 1: ...cuum_count, max_dead_tuples, num_dead_tuples from gp_stat_pr... - ^ + gp_segment_id | relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +---------------+---------------------------+-------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + 2 | vacuum_progress_ao_column | append-optimized post-cleanup | 0 | 0 | 0 | 0 | 0 | 0 + 0 | vacuum_progress_ao_column | append-optimized post-cleanup | 0 | 0 | 0 | 0 | 0 | 0 + 1 | vacuum_progress_ao_column | append-optimized post-cleanup | 0 | 0 | 0 | 0 | 0 | 0 +(3 rows) select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; -ERROR: relation "gp_stat_progress_vacuum_summary" does not exist -LINE 1: ...cuum_count, max_dead_tuples, num_dead_tuples from gp_stat_pr... - ^ + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +---------------------------+-------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_column | append-optimized post-cleanup | 0 | 0 | 0 | 0 | 0 | 0 +(1 row) 2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_inject_fault @@ -469,15 +452,3 @@ reset Debug_appendonly_print_compaction; RESET reset default_table_access_method; RESET -ALTER SYSTEM RESET gp_fts_mark_mirror_down_grace_period; -ALTER -ALTER SYSTEM RESET gp_fts_probe_interval; -ALTER -SELECT gp_segment_id, pg_reload_conf() FROM gp_id UNION SELECT gp_segment_id, pg_reload_conf() FROM gp_dist_random('gp_id'); - gp_segment_id | pg_reload_conf ----------------+---------------- - 2 | t - 1 | t - 0 | t - -1 | t -(4 rows) diff --git a/src/test/isolation2/expected/vacuum_progress_row.out b/src/test/isolation2/expected/vacuum_progress_row.out index 619b3e41b80..81392c5a9ef 100644 --- a/src/test/isolation2/expected/vacuum_progress_row.out +++ b/src/test/isolation2/expected/vacuum_progress_row.out @@ -44,23 +44,6 @@ ABORT DELETE FROM vacuum_progress_ao_row where j % 2 = 0; DELETE 50000 --- Lookup pg_class and collected stats view before VACUUM -SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_row'; - relpages | reltuples | relallvisible -----------+-----------+--------------- - 0 | -1 | 0 -(1 row) -SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; - n_live_tup | n_dead_tup | last_vacuum | vacuum_count -------------+------------+-------------+-------------- - 33327 | 66654 | | 0 -(1 row) -SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM gp_stat_all_tables_summary WHERE relname = 'vacuum_progress_ao_row'; - n_live_tup | n_dead_tup | last_vacuum | vacuum_count -------------+------------+-------------+-------------- - 100000 | 200000 | | 0 -(1 row) - -- Perform VACUUM and observe the progress -- Suspend execution at pre-cleanup phase after truncating both segfiles to their logical EOF. @@ -139,11 +122,13 @@ SELECT gp_inject_fault('appendonly_insert', 'reset', dbid) FROM gp_segment_confi Success: Success: (3 rows) -SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: -(1 row) + Success: + Success: +(3 rows) -- After compacting all segfiles we expect 50000 dead tuples select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples @@ -171,11 +156,13 @@ SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment Success: Success: (3 rows) -SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; gp_wait_until_triggered_fault ------------------------------- Success: -(1 row) + Success: + Success: +(3 rows) -- We should have skipped recycling the awaiting drop segment because the segment was still visible to the SELECT gp_wait_until_triggered_fault query. select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples @@ -209,7 +196,7 @@ SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_ ----------+-----------+--------------- 84 | 50000 | 0 (1 row) -SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_row' and gp_segment_id = 1; n_live_tup | n_dead_tup | has_last_vacuum | vacuum_count ------------+------------+-----------------+-------------- 16705 | 0 | t | 1 @@ -297,7 +284,7 @@ SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_ ----------+-----------+--------------- 30 | 50000 | 0 (1 row) -SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_row' and gp_segment_id = 1; n_live_tup | n_dead_tup | has_last_vacuum | vacuum_count ------------+------------+-----------------+-------------- 16705 | 0 | t | 2 @@ -308,87 +295,213 @@ SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuu 50000 | 0 | t | 2 (1 row) --- open if system views gp_stat_progress_vacuum* are enabled ---1q: ----- Test vacuum worker process is changed at post-cleanup phase due to mirror down. ----- Current behavior is it will clear previous compact phase num_dead_tuples in post-cleanup ----- phase (at injecting point vacuum_ao_post_cleanup_end), which is different from above case ----- in which vacuum worker isn't changed. ---ALTER SYSTEM SET gp_fts_mark_mirror_down_grace_period to 10; ---ALTER SYSTEM SET gp_fts_probe_interval to 10; ---SELECT gp_segment_id, pg_reload_conf() FROM gp_id UNION SELECT gp_segment_id, pg_reload_conf() FROM gp_dist_random('gp_id'); --- ---DROP TABLE IF EXISTS vacuum_progress_ao_row; ---CREATE TABLE vacuum_progress_ao_row(i int, j int); ---CREATE INDEX on vacuum_progress_ao_row(i); ---CREATE INDEX on vacuum_progress_ao_row(j); ---1: BEGIN; ---2: BEGIN; ---1: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; ---2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; ---2: COMMIT; ---2: BEGIN; ---2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; ---2: ABORT; ---2q: ---1: ABORT; ---DELETE FROM vacuum_progress_ao_row where j % 2 = 0; --- ----- Suspend execution at the end of compact phase. ---2: SELECT gp_inject_fault('vacuum_ao_after_compact', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; --- ---1: set debug_appendonly_print_compaction to on; ---1&: vacuum vacuum_progress_ao_row; --- ---2: SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 3, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; --- ----- Non-zero progressing data num_dead_tuples is showed up. ---select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; ---select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; --- ----- Resume execution of compact phase and block at syncrep. ---2: SELECT gp_inject_fault_infinite('wal_sender_loop', 'suspend', dbid) FROM gp_segment_configuration WHERE role = 'p' and content = 1; ---2: SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ----- stop the mirror should turn off syncrep ---2: SELECT pg_ctl(datadir, 'stop', 'immediate') FROM gp_segment_configuration WHERE content=1 AND role = 'm'; --- ----- Resume walsender to detect mirror down and suspend at the beginning ----- of post-cleanup taken over by a new vacuum worker. ---2: SELECT gp_inject_fault('vacuum_worker_changed', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ----- resume walsender and let it exit so that mirror stop can be detected ---2: SELECT gp_inject_fault_infinite('wal_sender_loop', 'reset', dbid) FROM gp_segment_configuration WHERE role = 'p' and content = 1; ----- Ensure we enter into the target logic which stops cumulative data but ----- initializes a new vacrelstats at the beginning of post-cleanup phase. ----- Also all segments should reach to the same "vacuum_worker_changed" point ----- due to FTS version being changed. ---2: SELECT gp_wait_until_triggered_fault('vacuum_worker_changed', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ----- now seg1's mirror is marked as down ---2: SELECT content, role, preferred_role, mode, status FROM gp_segment_configuration WHERE content > -1; --- ----- Resume execution and entering post_cleaup phase, suspend at the end of it. ---2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ---2: SELECT gp_inject_fault('vacuum_worker_changed', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; ---2: SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; --- ----- The previous collected num_dead_tuples in compact phase is zero. ---select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; ---select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; --- ---2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; --- ---1<: --- ----- restore environment ---1: reset debug_appendonly_print_compaction; --- ---2: SELECT pg_ctl_start(datadir, port) FROM gp_segment_configuration WHERE role = 'm' AND content = 1; ---2: SELECT wait_until_all_segments_synchronized(); --- ----- Cleanup ---SELECT gp_inject_fault_infinite('all', 'reset', dbid) FROM gp_segment_configuration; ---reset Debug_appendonly_print_compaction; ---reset default_table_access_method; ---ALTER SYSTEM RESET gp_fts_mark_mirror_down_grace_period; ---ALTER SYSTEM RESET gp_fts_probe_interval; ---SELECT gp_segment_id, pg_reload_conf() FROM gp_id UNION SELECT gp_segment_id, pg_reload_conf() FROM gp_dist_random('gp_id'); --- +1q: ... +-- Test vacuum worker process is changed at post-cleanup phase due to mirror down. +-- Current behavior is it will clear previous compact phase num_dead_tuples in post-cleanup +-- phase (at injecting point vacuum_ao_post_cleanup_end), which is different from above case +-- in which vacuum worker isn't changed. +DROP TABLE IF EXISTS vacuum_progress_ao_row; +DROP +CREATE TABLE vacuum_progress_ao_row(i int, j int); +CREATE +CREATE INDEX on vacuum_progress_ao_row(i); +CREATE +CREATE INDEX on vacuum_progress_ao_row(j); +CREATE +1: BEGIN; +BEGIN +2: BEGIN; +BEGIN +1: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; +INSERT 100000 +2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; +INSERT 100000 +2: COMMIT; +COMMIT +2: BEGIN; +BEGIN +2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; +INSERT 100000 +2: ABORT; +ABORT +2q: ... +1: ABORT; +ABORT +DELETE FROM vacuum_progress_ao_row where j % 2 = 0; +DELETE 50000 + +-- Suspend execution at the end of compact phase. +2: SELECT gp_inject_fault('vacuum_ao_after_compact', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +1: set debug_appendonly_print_compaction to on; +SET +1&: vacuum vacuum_progress_ao_row; + +2: SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_wait_until_triggered_fault +------------------------------- + Success: + Success: + Success: +(3 rows) + +-- Non-zero progressing data num_dead_tuples is showed up. +select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; + gp_segment_id | relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +---------------+------------------------+--------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + 1 | vacuum_progress_ao_row | append-optimized compact | 55 | 19 | 37 | 0 | 33327 | 16622 + 2 | vacuum_progress_ao_row | append-optimized compact | 55 | 19 | 37 | 0 | 33211 | 16653 + 0 | vacuum_progress_ao_row | append-optimized compact | 56 | 19 | 37 | 0 | 33462 | 16725 +(3 rows) +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +------------------------+--------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_row | append-optimized compact | 166 | 57 | 111 | 0 | 100000 | 50000 +(1 row) + +-- Resume execution of compact phase and block at syncrep. +2: SELECT gp_inject_fault_infinite('wal_sender_loop', 'suspend', dbid) FROM gp_segment_configuration WHERE role = 'p' and content = 1; + gp_inject_fault_infinite +-------------------------- + Success: +(1 row) +2: SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) +-- stop the mirror should turn off syncrep +2: SELECT pg_ctl(datadir, 'stop', 'immediate') FROM gp_segment_configuration WHERE content=1 AND role = 'm'; + pg_ctl +-------- + OK +(1 row) + +-- Resume walsender to detect mirror down and suspend at the beginning +-- of post-cleanup taken over by a new vacuum worker. +2: SELECT gp_inject_fault('vacuum_worker_changed', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) +-- resume walsender and let it exit so that mirror stop can be detected +2: SELECT gp_inject_fault_infinite('wal_sender_loop', 'reset', dbid) FROM gp_segment_configuration WHERE role = 'p' and content = 1; + gp_inject_fault_infinite +-------------------------- + Success: +(1 row) +-- Ensure we enter into the target logic which stops cumulative data but +-- initializes a new vacrelstats at the beginning of post-cleanup phase. +-- Also all segments should reach to the same "vacuum_worker_changed" point +-- due to FTS version being changed. +2: SELECT gp_wait_until_triggered_fault('vacuum_worker_changed', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_wait_until_triggered_fault +------------------------------- + Success: + Success: + Success: +(3 rows) +-- now seg1's mirror is marked as down +2: SELECT content, role, preferred_role, mode, status FROM gp_segment_configuration WHERE content > -1; + content | role | preferred_role | mode | status +---------+------+----------------+------+-------- + 2 | p | p | s | u + 2 | m | m | s | u + 0 | p | p | s | u + 0 | m | m | s | u + 1 | p | p | n | u + 1 | m | m | n | d +(6 rows) + +-- Resume execution and entering post_cleaup phase, suspend at the end of it. +2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) +2: SELECT gp_inject_fault('vacuum_worker_changed', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) +2: SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_wait_until_triggered_fault +------------------------------- + Success: + Success: + Success: +(3 rows) + +-- The previous collected num_dead_tuples in compact phase is zero. +select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; + gp_segment_id | relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +---------------+------------------------+-------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + 0 | vacuum_progress_ao_row | append-optimized post-cleanup | 0 | 0 | 0 | 0 | 0 | 0 + 2 | vacuum_progress_ao_row | append-optimized post-cleanup | 0 | 0 | 0 | 0 | 0 | 0 + 1 | vacuum_progress_ao_row | append-optimized post-cleanup | 0 | 0 | 0 | 0 | 0 | 0 +(3 rows) +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + relname | phase | heap_blks_total | heap_blks_scanned | heap_blks_vacuumed | index_vacuum_count | max_dead_tuples | num_dead_tuples +------------------------+-------------------------------+-----------------+-------------------+--------------------+--------------------+-----------------+----------------- + vacuum_progress_ao_row | append-optimized post-cleanup | 0 | 0 | 0 | 0 | 0 | 0 +(1 row) + +2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + gp_inject_fault +----------------- + Success: + Success: + Success: +(3 rows) + +1<: <... completed> +VACUUM + +-- restore environment +1: reset debug_appendonly_print_compaction; +RESET + +2: SELECT pg_ctl_start(datadir, port) FROM gp_segment_configuration WHERE role = 'm' AND content = 1; + pg_ctl_start +-------------------------------------------------- + waiting for server to start done +server started + +(1 row) +2: SELECT wait_until_all_segments_synchronized(); + wait_until_all_segments_synchronized +-------------------------------------- + OK +(1 row) + +-- Cleanup +SELECT gp_inject_fault_infinite('all', 'reset', dbid) FROM gp_segment_configuration; + gp_inject_fault_infinite +-------------------------- + Success: + Success: + Success: + Success: + Success: + Success: + Success: + Success: +(8 rows) +reset Debug_appendonly_print_compaction; +RESET +reset default_table_access_method; +RESET diff --git a/src/test/isolation2/input/autovacuum-analyze.source b/src/test/isolation2/input/autovacuum-analyze.source index 32e79cdd491..19187b107c2 100644 --- a/src/test/isolation2/input/autovacuum-analyze.source +++ b/src/test/isolation2/input/autovacuum-analyze.source @@ -178,7 +178,7 @@ SELECT count(*) FROM pg_statistic where starelid = 'autostatstbl'::regclass; select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 1, autoanalyze_count = 0, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Wait until autovacuum is triggered SELECT gp_wait_until_triggered_fault('auto_vac_worker_after_report_activity', 1, 1); @@ -192,7 +192,7 @@ SELECT gp_inject_fault('analyze_finished_one_relation', 'reset', 1); -- we can see the auto-ANALYZE finished select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 1, autoanalyze_count = 1, and n_mod_since_analyze = 0 -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Case 2 -- -- with auto_stats 'on_change' mode, the auto-ANALYZE still trigger @@ -211,7 +211,7 @@ SELECT gp_inject_fault('auto_vac_worker_after_report_activity', 'suspend', '', ' select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 2, autoanalyze_count = 1, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Wait until autovacuum is triggered SELECT gp_wait_until_triggered_fault('auto_vac_worker_after_report_activity', 1, 1); @@ -225,7 +225,7 @@ SELECT gp_inject_fault('analyze_finished_one_relation', 'reset', 1); -- we can see the auto-ANALYZE finished, check statistic and analyze count select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 2, autoanalyze_count = 2, and n_mod_since_analyze = 0 -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Case 3 -- @@ -244,7 +244,7 @@ SELECT gp_inject_fault('auto_vac_worker_after_report_activity', 'suspend', '', ' select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 2, autoanalyze_count = 2, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Wait until autovacuum is triggered SELECT gp_wait_until_triggered_fault('auto_vac_worker_after_report_activity', 1, 1); @@ -258,7 +258,7 @@ SELECT gp_inject_fault('analyze_finished_one_relation', 'reset', 1); -- we can see the auto-ANALYZE finished, check statistic and analyze count select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; -- expect analyze_count = 2, autoanalyze_count = 3, and n_mod_since_analyze = 0 since ANALYZE executed -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; -- Reset GUCs. ALTER SYSTEM RESET autovacuum_naptime; diff --git a/src/test/isolation2/output/autovacuum-analyze.source b/src/test/isolation2/output/autovacuum-analyze.source index e071f9e7007..b8727a10a51 100644 --- a/src/test/isolation2/output/autovacuum-analyze.source +++ b/src/test/isolation2/output/autovacuum-analyze.source @@ -422,7 +422,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; (1 row) -- expect analyze_count = 1, autoanalyze_count = 0, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 1 | 0 | 1000 @@ -465,7 +465,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; 3 | 1000 (1 row) -- expect analyze_count = 1, autoanalyze_count = 1, and n_mod_since_analyze = 0 -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 1 | 1 | 0 @@ -502,7 +502,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; (1 row) -- expect analyze_count = 2, autoanalyze_count = 1, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 2 | 1 | 1000 @@ -545,7 +545,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; 3 | 2000 (1 row) -- expect analyze_count = 2, autoanalyze_count = 2, and n_mod_since_analyze = 0 -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 2 | 2 | 0 @@ -581,7 +581,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; (1 row) -- expect analyze_count = 2, autoanalyze_count = 2, and n_mod_since_analyze = 1000 since ANALYZE executed -- in same transaction for the insert statement. -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 2 | 2 | 1000 @@ -624,7 +624,7 @@ select relpages, reltuples from pg_class where oid = 'autostatstbl'::regclass; 6 | 3000 (1 row) -- expect analyze_count = 2, autoanalyze_count = 3, and n_mod_since_analyze = 0 since ANALYZE executed -select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables_internal where relname = 'autostatstbl'; +select analyze_count, autoanalyze_count, n_mod_since_analyze from pg_stat_all_tables where relname = 'autostatstbl'; analyze_count | autoanalyze_count | n_mod_since_analyze ---------------+-------------------+--------------------- 2 | 3 | 0 diff --git a/src/test/isolation2/output/parallel_retrieve_cursor/explain.source b/src/test/isolation2/output/parallel_retrieve_cursor/explain.source index e26fe7bd9fa..15baecb724f 100644 --- a/src/test/isolation2/output/parallel_retrieve_cursor/explain.source +++ b/src/test/isolation2/output/parallel_retrieve_cursor/explain.source @@ -129,14 +129,17 @@ EXPLAIN (VERBOSE, COSTS false) DECLARE c1 PARALLEL RETRIEVE CURSOR FOR SELECT * Optimizer: Postgres query optimizer (5 rows) EXPLAIN (VERBOSE, COSTS false) DECLARE c1 PARALLEL RETRIEVE CURSOR FOR SELECT * FROM pg_class ORDER BY relname; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Index Scan using pg_class_relname_nsp_index on pg_catalog.pg_class - Output: oid, relname, relnamespace, reltype, reloftype, relowner, relam, relfilenode, reltablespace, relpages, reltuples, relallvisible, reltoastrelid, relhasindex, relisshared, relpersistence, relkind, relnatts, relchecks, relhasrules, relhastriggers, relhassubclass, relrowsecurity, relforcerowsecurity, relispopulated, relreplident, relispartition, relisivm, relisdynamic, relmvrefcount, relrewrite, relfrozenxid, relminmxid, relacl, reloptions, relpartbound - Settings: enable_incremental_sort = 'on' - Endpoint: "on coordinator" - Optimizer: Postgres query optimizer -(5 rows) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Sort + Output: oid, relname, relnamespace, reltype, reloftype, relowner, relam, relfilenode, reltablespace, relpages, reltuples, relallvisible, reltoastrelid, relhasindex, relisshared, relpersistence, relkind, relnatts, relchecks, relhasrules, relhastriggers, relhassubclass, relrowsecurity, relforcerowsecurity, relispopulated, relreplident, relispartition, relisivm, relisdynamic, relmvrefcount, relrewrite, relfrozenxid, relminmxid, relacl, reloptions, relpartbound + Sort Key: pg_class.relname + -> Seq Scan on pg_catalog.pg_class + Output: oid, relname, relnamespace, reltype, reloftype, relowner, relam, relfilenode, reltablespace, relpages, reltuples, relallvisible, reltoastrelid, relhasindex, relisshared, relpersistence, relkind, relnatts, relchecks, relhasrules, relhastriggers, relhassubclass, relrowsecurity, relforcerowsecurity, relispopulated, relreplident, relispartition, relisivm, relisdynamic, relmvrefcount, relrewrite, relfrozenxid, relminmxid, relacl, reloptions, relpartbound + Settings: enable_incremental_sort = 'on' + Endpoint: "on coordinator" + Optimizer: Postgres query optimizer +(8 rows) EXPLAIN (VERBOSE, COSTS false) DECLARE c1 PARALLEL RETRIEVE CURSOR FOR SELECT * FROM pg_class WHERE gp_segment_id=1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ diff --git a/src/test/isolation2/sql/setup.sql b/src/test/isolation2/sql/setup.sql index 6241413ba3b..949f22f0002 100644 --- a/src/test/isolation2/sql/setup.sql +++ b/src/test/isolation2/sql/setup.sql @@ -461,27 +461,6 @@ begin end; /* in func */ $$ language plpgsql; --- Helper function that ensures stats collector receives stat from the latest operation. -create or replace function wait_until_vacuum_count_change_to(relid oid, stat_val_expected bigint) - returns text as $$ -declare - stat_val int; /* in func */ - i int; /* in func */ -begin - i := 0; /* in func */ - while i < 1200 loop - select pg_stat_get_vacuum_count(relid) into stat_val; /* in func */ - if stat_val = stat_val_expected then /* in func */ - return 'OK'; /* in func */ - end if; /* in func */ - perform pg_sleep(0.1); /* in func */ - perform pg_stat_clear_snapshot(); /* in func */ - i := i + 1; /* in func */ - end loop; /* in func */ - return 'Fail'; /* in func */ -end; /* in func */ -$$ language plpgsql; - -- Helper function to get the number of blocks in a relation. CREATE OR REPLACE FUNCTION nblocks(rel regclass) RETURNS int AS $$ /* in func */ BEGIN /* in func */ diff --git a/src/test/isolation2/sql/vacuum_progress_column.sql b/src/test/isolation2/sql/vacuum_progress_column.sql index 648d43303be..cff0d8394ba 100644 --- a/src/test/isolation2/sql/vacuum_progress_column.sql +++ b/src/test/isolation2/sql/vacuum_progress_column.sql @@ -30,10 +30,6 @@ CREATE INDEX on vacuum_progress_ao_column(j); -- Also delete half of the tuples evenly before the EOF of segno 2. DELETE FROM vacuum_progress_ao_column where j % 2 = 0; --- Lookup pg_class and collected stats view before VACUUM -SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_column'; -SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_column'; - -- Perform VACUUM and observe the progress -- Suspend execution at pre-cleanup phase after truncating both segfiles to their logical EOF. @@ -71,7 +67,7 @@ SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segm -- pg_class and collected stats view should be updated after the 1st VACUUM 1U: SELECT wait_until_dead_tup_change_to('vacuum_progress_ao_column'::regclass::oid, 0); SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_column'; -SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_column'; +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_column' and gp_segment_id = 1; -- Perform VACUUM again to recycle the remaining awaiting drop segment marked by the previous run. @@ -99,17 +95,13 @@ SELECT gp_inject_fault('appendonly_after_truncate_segment_file', 'reset', dbid) -- pg_class and collected stats view should be updated after the 2nd VACUUM 1U: SELECT wait_until_dead_tup_change_to('vacuum_progress_ao_column'::regclass::oid, 0); SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_column'; -SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_column'; +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_column' and gp_segment_id = 1; 1q: -- Test vacuum worker process is changed at post-cleanup phase due to mirror down. -- Current behavior is it will clear previous compact phase num_dead_tuples in post-cleanup -- phase (at injecting point vacuum_ao_post_cleanup_end), which is different from above case -- in which vacuum worker isn't changed. -ALTER SYSTEM SET gp_fts_mark_mirror_down_grace_period to 10; -ALTER SYSTEM SET gp_fts_probe_interval to 10; -SELECT gp_segment_id, pg_reload_conf() FROM gp_id UNION SELECT gp_segment_id, pg_reload_conf() FROM gp_dist_random('gp_id'); - DROP TABLE IF EXISTS vacuum_progress_ao_column; CREATE TABLE vacuum_progress_ao_column(i int, j int); CREATE INDEX on vacuum_progress_ao_column(i); @@ -132,7 +124,7 @@ DELETE FROM vacuum_progress_ao_column where j % 2 = 0; 1: set debug_appendonly_print_compaction to on; 1&: vacuum vacuum_progress_ao_column; -2: SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 3, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +2: SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -- Non-zero progressing data num_dead_tuples is showed up. select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; @@ -153,14 +145,14 @@ select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, he -- initializes a new vacrelstats at the beginning of post-cleanup phase. -- Also all segments should reach to the same "vacuum_worker_changed" point -- due to FTS version being changed. -2: SELECT gp_wait_until_triggered_fault('vacuum_worker_changed', 3, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +2: SELECT gp_wait_until_triggered_fault('vacuum_worker_changed', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -- now seg1's mirror is marked as down 2: SELECT content, role, preferred_role, mode, status FROM gp_segment_configuration WHERE content > -1; -- Resume execution and entering post_cleaup phase, suspend at the end of it. 2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; 2: SELECT gp_inject_fault('vacuum_worker_changed', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -2: SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 3, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +2: SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -- The previous collected num_dead_tuples in compact phase is zero. select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; @@ -180,6 +172,3 @@ select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, he SELECT gp_inject_fault_infinite('all', 'reset', dbid) FROM gp_segment_configuration; reset Debug_appendonly_print_compaction; reset default_table_access_method; -ALTER SYSTEM RESET gp_fts_mark_mirror_down_grace_period; -ALTER SYSTEM RESET gp_fts_probe_interval; -SELECT gp_segment_id, pg_reload_conf() FROM gp_id UNION SELECT gp_segment_id, pg_reload_conf() FROM gp_dist_random('gp_id'); diff --git a/src/test/isolation2/sql/vacuum_progress_row.sql b/src/test/isolation2/sql/vacuum_progress_row.sql index 93da2a47bbc..ec4b5a354db 100644 --- a/src/test/isolation2/sql/vacuum_progress_row.sql +++ b/src/test/isolation2/sql/vacuum_progress_row.sql @@ -29,11 +29,6 @@ CREATE INDEX on vacuum_progress_ao_row(j); -- Also delete half of the tuples evenly before the EOF of segno 2. DELETE FROM vacuum_progress_ao_row where j % 2 = 0; --- Lookup pg_class and collected stats view before VACUUM -SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_row'; -SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_row' and gp_segment_id = 1; -SELECT n_live_tup, n_dead_tup, last_vacuum, vacuum_count FROM gp_stat_all_tables_summary WHERE relname = 'vacuum_progress_ao_row'; - -- Perform VACUUM and observe the progress -- Suspend execution at pre-cleanup phase after truncating both segfiles to their logical EOF. @@ -57,7 +52,7 @@ select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, he -- Resume execution and suspend again after compacting all segfiles SELECT gp_inject_fault('vacuum_ao_after_compact', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; SELECT gp_inject_fault('appendonly_insert', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -- After compacting all segfiles we expect 50000 dead tuples select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; @@ -65,7 +60,7 @@ select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, he -- Resume execution and entering post_cleaup phase, suspend at the end of it. SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content = 1 AND role = 'p'; +SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; -- We should have skipped recycling the awaiting drop segment because the segment was still visible to the SELECT gp_wait_until_triggered_fault query. select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id = 1; select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; @@ -76,7 +71,7 @@ SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segm -- pg_class and collected stats view should be updated after the 1st VACUUM 1U: SELECT wait_until_dead_tup_change_to('vacuum_progress_ao_row'::regclass::oid, 0); SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_progress_ao_row'; -SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM pg_stat_all_tables WHERE relname = 'vacuum_progress_ao_row'; +SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_row' and gp_segment_id = 1; -- Perform VACUUM again to recycle the remaining awaiting drop segment marked by the previous run. SELECT gp_inject_fault('vacuum_ao_after_index_delete', 'suspend', dbid) FROM gp_segment_configuration WHERE content = 0 AND role = 'p'; @@ -106,6 +101,77 @@ SELECT relpages, reltuples, relallvisible FROM pg_class where relname = 'vacuum_ SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables WHERE relname = 'vacuum_progress_ao_row' and gp_segment_id = 1; SELECT n_live_tup, n_dead_tup, last_vacuum is not null as has_last_vacuum, vacuum_count FROM gp_stat_all_tables_summary WHERE relname = 'vacuum_progress_ao_row'; +1q: +-- Test vacuum worker process is changed at post-cleanup phase due to mirror down. +-- Current behavior is it will clear previous compact phase num_dead_tuples in post-cleanup +-- phase (at injecting point vacuum_ao_post_cleanup_end), which is different from above case +-- in which vacuum worker isn't changed. +DROP TABLE IF EXISTS vacuum_progress_ao_row; +CREATE TABLE vacuum_progress_ao_row(i int, j int); +CREATE INDEX on vacuum_progress_ao_row(i); +CREATE INDEX on vacuum_progress_ao_row(j); +1: BEGIN; +2: BEGIN; +1: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; +2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; +2: COMMIT; +2: BEGIN; +2: INSERT INTO vacuum_progress_ao_row SELECT i, i FROM generate_series(1, 100000) i; +2: ABORT; +2q: +1: ABORT; +DELETE FROM vacuum_progress_ao_row where j % 2 = 0; + +-- Suspend execution at the end of compact phase. +2: SELECT gp_inject_fault('vacuum_ao_after_compact', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + +1: set debug_appendonly_print_compaction to on; +1&: vacuum vacuum_progress_ao_row; + +2: SELECT gp_wait_until_triggered_fault('vacuum_ao_after_compact', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + +-- Non-zero progressing data num_dead_tuples is showed up. +select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + +-- Resume execution of compact phase and block at syncrep. +2: SELECT gp_inject_fault_infinite('wal_sender_loop', 'suspend', dbid) FROM gp_segment_configuration WHERE role = 'p' and content = 1; +2: SELECT gp_inject_fault('vacuum_ao_after_compact', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +-- stop the mirror should turn off syncrep +2: SELECT pg_ctl(datadir, 'stop', 'immediate') FROM gp_segment_configuration WHERE content=1 AND role = 'm'; + +-- Resume walsender to detect mirror down and suspend at the beginning +-- of post-cleanup taken over by a new vacuum worker. +2: SELECT gp_inject_fault('vacuum_worker_changed', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +-- resume walsender and let it exit so that mirror stop can be detected +2: SELECT gp_inject_fault_infinite('wal_sender_loop', 'reset', dbid) FROM gp_segment_configuration WHERE role = 'p' and content = 1; +-- Ensure we enter into the target logic which stops cumulative data but +-- initializes a new vacrelstats at the beginning of post-cleanup phase. +-- Also all segments should reach to the same "vacuum_worker_changed" point +-- due to FTS version being changed. +2: SELECT gp_wait_until_triggered_fault('vacuum_worker_changed', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +-- now seg1's mirror is marked as down +2: SELECT content, role, preferred_role, mode, status FROM gp_segment_configuration WHERE content > -1; + +-- Resume execution and entering post_cleaup phase, suspend at the end of it. +2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'suspend', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +2: SELECT gp_inject_fault('vacuum_worker_changed', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; +2: SELECT gp_wait_until_triggered_fault('vacuum_ao_post_cleanup_end', 1, dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + +-- The previous collected num_dead_tuples in compact phase is zero. +select gp_segment_id, relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum where gp_segment_id > -1; +select relid::regclass as relname, phase, heap_blks_total, heap_blks_scanned, heap_blks_vacuumed, index_vacuum_count, max_dead_tuples, num_dead_tuples from gp_stat_progress_vacuum_summary; + +2: SELECT gp_inject_fault('vacuum_ao_post_cleanup_end', 'reset', dbid) FROM gp_segment_configuration WHERE content > -1 AND role = 'p'; + +1<: + +-- restore environment +1: reset debug_appendonly_print_compaction; + +2: SELECT pg_ctl_start(datadir, port) FROM gp_segment_configuration WHERE role = 'm' AND content = 1; +2: SELECT wait_until_all_segments_synchronized(); + -- Cleanup SELECT gp_inject_fault_infinite('all', 'reset', dbid) FROM gp_segment_configuration; reset Debug_appendonly_print_compaction; diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out index 104725e68b5..14af415e945 100644 --- a/src/test/regress/expected/stats.out +++ b/src/test/regress/expected/stats.out @@ -22,7 +22,7 @@ SELECT t.seq_scan, t.seq_tup_read, t.idx_scan, t.idx_tup_fetch, (b.heap_blks_read + b.heap_blks_hit) AS heap_blks, (b.idx_blks_read + b.idx_blks_hit) AS idx_blks, pg_stat_get_snapshot_timestamp() as snap_ts - FROM pg_catalog.pg_stat_user_tables AS t, + FROM pg_catalog.gp_stat_user_tables_summary AS t, pg_catalog.pg_statio_user_tables AS b WHERE t.relname='tenk2' AND b.relname='tenk2'; -- function to wait for counters to advance @@ -45,17 +45,17 @@ begin -- check to see if seqscan has been sensed SELECT (st.seq_scan >= pr.seq_scan + 1) INTO updated1 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- check to see if indexscan has been sensed SELECT (st.idx_scan >= pr.idx_scan + 1) INTO updated2 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- check to see if all updates have been sensed SELECT (n_tup_ins > 0) INTO updated3 - FROM pg_stat_user_tables WHERE relname='trunc_stats_test4'; + FROM gp_stat_user_tables_summary WHERE relname='trunc_stats_test4'; -- We must also check explicitly that pg_stat_get_snapshot_timestamp has -- advanced, because that comes from the global stats file which might @@ -65,7 +65,7 @@ begin -- check to see if idx_tup_fetch has been sensed SELECT (st.idx_tup_fetch >= pr.idx_tup_fetch + 1) INTO updated5 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; exit when updated1 and updated2 and updated3 and updated4 and updated5; @@ -177,7 +177,7 @@ SELECT wait_for_stats(); -- check effects SELECT relname, n_tup_ins, n_tup_upd, n_tup_del, n_live_tup, n_dead_tup - FROM pg_stat_user_tables + FROM gp_stat_user_tables_summary WHERE relname like 'trunc_stats_test%' order by relname; relname | n_tup_ins | n_tup_upd | n_tup_del | n_live_tup | n_dead_tup -------------------+-----------+-----------+-----------+------------+------------ @@ -192,7 +192,7 @@ SELECT st.seq_scan >= pr.seq_scan + 1, st.seq_tup_read >= pr.seq_tup_read + cl.reltuples, st.idx_scan >= pr.idx_scan + 1, st.idx_tup_fetch >= pr.idx_tup_fetch + 1 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; ?column? | ?column? | ?column? | ?column? ----------+----------+----------+---------- diff --git a/src/test/regress/input/pgstat_qd_tabstat.source b/src/test/regress/input/pgstat_qd_tabstat.source index e9f76ccf0d6..20afcd78afb 100644 --- a/src/test/regress/input/pgstat_qd_tabstat.source +++ b/src/test/regress/input/pgstat_qd_tabstat.source @@ -234,8 +234,8 @@ insert into base_table select i,i,i from generate_series(1, 100) i; refresh materialized view mt; select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat() to send tabstat. select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; --- pg_stat_all_tables collects gpstats across segments -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; +-- gp_stat_all_tables_summary collects gpstats across segments +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from gp_stat_all_tables_summary where relid = 'mt'::regclass; drop materialized view mt; drop table base_table; @@ -250,8 +250,8 @@ insert into base_table select i,i,i from generate_series(1, 100) i; refresh materialized view mt; select pg_sleep(0.77) from gp_dist_random('gp_id'); -- Force pgstat_report_stat() to send tabstat. select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; --- pg_stat_all_tables collects gpstats across segments -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; +-- gp_stat_all_tables_summary collects gpstats across segments +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from gp_stat_all_tables_summary where relid = 'mt'::regclass; reset gp_autostats_mode; diff --git a/src/test/regress/output/pgstat_qd_tabstat.source b/src/test/regress/output/pgstat_qd_tabstat.source index 591f262f7c5..116140f845d 100644 --- a/src/test/regress/output/pgstat_qd_tabstat.source +++ b/src/test/regress/output/pgstat_qd_tabstat.source @@ -520,8 +520,8 @@ select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n 153 | 0 | 0 | 0 | 102 | 0 | 153 (1 row) --- pg_stat_all_tables collects gpstats across segments -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; +-- gp_stat_all_tables_summary collects gpstats across segments +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from gp_stat_all_tables_summary where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 153 | 0 | 0 | 0 | 102 | 0 | 153 @@ -561,8 +561,8 @@ select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n 153 | 0 | 0 | 0 | 102 | 0 | 153 (1 row) --- pg_stat_all_tables collects gpstats across segments -select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from pg_stat_all_tables where relid = 'mt'::regclass; +-- gp_stat_all_tables_summary collects gpstats across segments +select n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_live_tup, n_dead_tup, n_mod_since_analyze from gp_stat_all_tables_summary where relid = 'mt'::regclass; n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | n_mod_since_analyze -----------+-----------+-----------+---------------+------------+------------+--------------------- 153 | 0 | 0 | 0 | 102 | 0 | 153 diff --git a/src/test/regress/sql/stats.sql b/src/test/regress/sql/stats.sql index 3acae2fc8a5..0a286a121cd 100644 --- a/src/test/regress/sql/stats.sql +++ b/src/test/regress/sql/stats.sql @@ -20,7 +20,7 @@ SELECT t.seq_scan, t.seq_tup_read, t.idx_scan, t.idx_tup_fetch, (b.heap_blks_read + b.heap_blks_hit) AS heap_blks, (b.idx_blks_read + b.idx_blks_hit) AS idx_blks, pg_stat_get_snapshot_timestamp() as snap_ts - FROM pg_catalog.pg_stat_user_tables AS t, + FROM pg_catalog.gp_stat_user_tables_summary AS t, pg_catalog.pg_statio_user_tables AS b WHERE t.relname='tenk2' AND b.relname='tenk2'; @@ -44,17 +44,17 @@ begin -- check to see if seqscan has been sensed SELECT (st.seq_scan >= pr.seq_scan + 1) INTO updated1 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- check to see if indexscan has been sensed SELECT (st.idx_scan >= pr.idx_scan + 1) INTO updated2 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- check to see if all updates have been sensed SELECT (n_tup_ins > 0) INTO updated3 - FROM pg_stat_user_tables WHERE relname='trunc_stats_test4'; + FROM gp_stat_user_tables_summary WHERE relname='trunc_stats_test4'; -- We must also check explicitly that pg_stat_get_snapshot_timestamp has -- advanced, because that comes from the global stats file which might @@ -64,7 +64,7 @@ begin -- check to see if idx_tup_fetch has been sensed SELECT (st.idx_tup_fetch >= pr.idx_tup_fetch + 1) INTO updated5 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; exit when updated1 and updated2 and updated3 and updated4 and updated5; @@ -167,14 +167,14 @@ SELECT wait_for_stats(); -- check effects SELECT relname, n_tup_ins, n_tup_upd, n_tup_del, n_live_tup, n_dead_tup - FROM pg_stat_user_tables + FROM gp_stat_user_tables_summary WHERE relname like 'trunc_stats_test%' order by relname; SELECT st.seq_scan >= pr.seq_scan + 1, st.seq_tup_read >= pr.seq_tup_read + cl.reltuples, st.idx_scan >= pr.idx_scan + 1, st.idx_tup_fetch >= pr.idx_tup_fetch + 1 - FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr + FROM gp_stat_user_tables_summary AS st, pg_class AS cl, prevstats AS pr WHERE st.relname='tenk2' AND cl.relname='tenk2'; -- GPDB_13_MERGE_FIXME: Some statistics are handled by stat collector process on each segment but not sent to master. From d93b2a5b87fd788fb92565b9006e9e005a060d55 Mon Sep 17 00:00:00 2001 From: smartyhero <76774978+smartyhero@users.noreply.github.com> Date: Mon, 18 Aug 2025 10:38:16 +0800 Subject: [PATCH 139/260] Enhancement: use `-e` in getversion to check Git repo This commit replaces the use of the -d parameter with the -e parameter when checking for the presence of a Git repository. This allows for more comprehensive checks, including cases where the working directory may be part of a Git repository but not the entire repository. --- getversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getversion b/getversion index 76f6984ada5..b4c29112651 100755 --- a/getversion +++ b/getversion @@ -94,7 +94,7 @@ generate_dev_version() { } # Check if we're in a Git repo and git is available -if type git >/dev/null 2>&1 && [ -d '.git' ]; then +if type git >/dev/null 2>&1 && [ -e '.git' ]; then # Ensure git describe doesn't fail due to shallow clone if git describe --tags --long >/dev/null 2>&1; then if git describe --exact-match >/dev/null 2>&1; then From e56967413a472bbe666f40b646b0920de4b80ea0 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Wed, 27 Aug 2025 02:36:32 +0800 Subject: [PATCH 140/260] gpMgmt: skip downloading existing Python dependency tarballs --- gpMgmt/bin/Makefile | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/gpMgmt/bin/Makefile b/gpMgmt/bin/Makefile index 3c4b6d2b031..c5eb6ccba9c 100644 --- a/gpMgmt/bin/Makefile +++ b/gpMgmt/bin/Makefile @@ -90,12 +90,27 @@ PYYAML_VERSION=5.4.1 download-python-deps: @echo "--- Downloading Python dependencies for gpMgmt modules" @mkdir -p $(PYLIB_SRC_EXT) - # Download psutil using curl - curl -sSL https://files.pythonhosted.org/packages/source/p/psutil/psutil-$(PSUTIL_VERSION).tar.gz -o $(PYLIB_SRC_EXT)/psutil-$(PSUTIL_VERSION).tar.gz - # Download PyYAML using curl - curl -sSL https://files.pythonhosted.org/packages/source/P/PyYAML/PyYAML-$(PYYAML_VERSION).tar.gz -o $(PYLIB_SRC_EXT)/PyYAML-$(PYYAML_VERSION).tar.gz - # Download PyGreSQL using curl - curl -sSL https://files.pythonhosted.org/packages/source/P/PyGreSQL/PyGreSQL-$(PYGRESQL_VERSION).tar.gz -o $(PYLIB_SRC_EXT)/PyGreSQL-$(PYGRESQL_VERSION).tar.gz + # Download psutil using curl (only if not exists) + @if [ ! -f $(PYLIB_SRC_EXT)/psutil-$(PSUTIL_VERSION).tar.gz ]; then \ + echo "Downloading psutil-$(PSUTIL_VERSION).tar.gz..."; \ + curl -sSL https://files.pythonhosted.org/packages/source/p/psutil/psutil-$(PSUTIL_VERSION).tar.gz -o $(PYLIB_SRC_EXT)/psutil-$(PSUTIL_VERSION).tar.gz; \ + else \ + echo "psutil-$(PSUTIL_VERSION).tar.gz already exists, skipping download"; \ + fi + # Download PyYAML using curl (only if not exists) + @if [ ! -f $(PYLIB_SRC_EXT)/PyYAML-$(PYYAML_VERSION).tar.gz ]; then \ + echo "Downloading PyYAML-$(PYYAML_VERSION).tar.gz..."; \ + curl -sSL https://files.pythonhosted.org/packages/source/P/PyYAML/PyYAML-$(PYYAML_VERSION).tar.gz -o $(PYLIB_SRC_EXT)/PyYAML-$(PYYAML_VERSION).tar.gz; \ + else \ + echo "PyYAML-$(PYYAML_VERSION).tar.gz already exists, skipping download"; \ + fi + # Download PyGreSQL using curl (only if not exists) + @if [ ! -f $(PYLIB_SRC_EXT)/PyGreSQL-$(PYGRESQL_VERSION).tar.gz ]; then \ + echo "Downloading PyGreSQL-$(PYGRESQL_VERSION).tar.gz..."; \ + curl -sSL https://files.pythonhosted.org/packages/source/P/PyGreSQL/PyGreSQL-$(PYGRESQL_VERSION).tar.gz -o $(PYLIB_SRC_EXT)/PyGreSQL-$(PYGRESQL_VERSION).tar.gz; \ + else \ + echo "PyGreSQL-$(PYGRESQL_VERSION).tar.gz already exists, skipping download"; \ + fi # Install wheel and cython for PyYAML building pip3 install --user wheel "cython<3.0.0" @@ -150,7 +165,12 @@ $(MOCK_BIN): pip3 install mock;\ else\ mkdir -p $(PYLIB_SRC_EXT) && \ - curl -sSL https://files.pythonhosted.org/packages/source/m/mock/mock-$(MOCK_VERSION).zip -o $(PYLIB_SRC_EXT)/mock-$(MOCK_VERSION).zip && \ + if [ ! -f $(PYLIB_SRC_EXT)/mock-$(MOCK_VERSION).zip ]; then \ + echo "Downloading mock-$(MOCK_VERSION).zip..."; \ + curl -sSL https://files.pythonhosted.org/packages/source/m/mock/mock-$(MOCK_VERSION).zip -o $(PYLIB_SRC_EXT)/mock-$(MOCK_VERSION).zip; \ + else \ + echo "mock-$(MOCK_VERSION).zip already exists, skipping download"; \ + fi && \ mkdir -p $(PYTHONSRC_INSTALL_SITE) && \ cd $(PYLIB_SRC_EXT)/ && unzip -q $(MOCK_DIR).zip && \ cd $(PYLIB_SRC_EXT)/$(MOCK_DIR)/ && \ From 55cbff30e996f0442fbebbb45f3deaf52de1913e Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Wed, 6 Aug 2025 17:07:38 +0800 Subject: [PATCH 141/260] Fix writable CTE on replicated tables EXCEPT partition tables. Fix issue: https://github.com/apache/cloudberry/issues/1240 Replicated locus could EXCEPT Partitioned locus when there is writable CTE on replicated tables. We could make them SingleQE or Entry to do the set operation. with result as (update r_1240 set a = a +1 where a < 5 returning *) select * from result except select * from p1_1240; QUERY PLAN --------------------------------------------------------------- HashSetOp Except -> Append -> Explicit Gather Motion 3:1 (slice1; segments: 3) -> Subquery Scan on "*SELECT* 1" -> Update on r_1240 -> Seq Scan on r_1240 Filter: (a < 5) -> Gather Motion 3:1 (slice2; segments: 3) -> Subquery Scan on "*SELECT* 2" -> Seq Scan on p1_1240 Optimizer: Postgres-based planner (11 rows) Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/cdb/cdbsetop.c | 3 +- src/test/regress/expected/union_gp.out | 32 +++++++++++++++++ .../regress/expected/union_gp_optimizer.out | 36 +++++++++++++++++++ src/test/regress/sql/union_gp.sql | 12 +++++++ 4 files changed, 82 insertions(+), 1 deletion(-) diff --git a/src/backend/cdb/cdbsetop.c b/src/backend/cdb/cdbsetop.c index 8be3341c9cb..3b3380704b0 100644 --- a/src/backend/cdb/cdbsetop.c +++ b/src/backend/cdb/cdbsetop.c @@ -88,6 +88,7 @@ choose_setop_type(List *pathlist, List *tlist_list) break; case CdbLocusType_Replicated: + ok_partitioned = false; break; case CdbLocusType_ReplicatedWorkers: @@ -231,6 +232,7 @@ adjust_setop_arguments(PlannerInfo *root, List *pathlist, List *tlist_list, GpSe case CdbLocusType_HashedWorkers: case CdbLocusType_HashedOJ: case CdbLocusType_Strewn: + case CdbLocusType_Replicated: /* Gather to QE. No need to keep ordering. */ CdbPathLocus_MakeSingleQE(&locus, getgpsegmentCount()); adjusted_path = cdbpath_create_motion_path(root, subpath, NULL, false, @@ -254,7 +256,6 @@ adjust_setop_arguments(PlannerInfo *root, List *pathlist, List *tlist_list, GpSe case CdbLocusType_Entry: case CdbLocusType_Null: - case CdbLocusType_Replicated: case CdbLocusType_ReplicatedWorkers: case CdbLocusType_End: ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), diff --git a/src/test/regress/expected/union_gp.out b/src/test/regress/expected/union_gp.out index 1cd6c47252c..5bdae3e887c 100644 --- a/src/test/regress/expected/union_gp.out +++ b/src/test/regress/expected/union_gp.out @@ -2310,6 +2310,38 @@ select json_data,id from my_table where json_data->>'age' = '30' union all sele set optimizer_parallel_union to off; drop table if exists my_table; -- +-- test Github issue https://github.com/apache/cloudberry/issues/1240 +-- +create table r_1240(a int) distributed replicated; +insert into r_1240 select generate_series(1,10); +create table p1_1240(a int) distributed by (a); +insert into p1_1240 select generate_series(1,3); +explain(costs off) with result as (update r_1240 set a = a +1 where a < 5 returning *) select * from result except select * from p1_1240; + QUERY PLAN +--------------------------------------------------------------- + HashSetOp Except + -> Append + -> Explicit Gather Motion 3:1 (slice1; segments: 3) + -> Subquery Scan on "*SELECT* 1" + -> Update on r_1240 + -> Seq Scan on r_1240 + Filter: (a < 5) + -> Gather Motion 3:1 (slice2; segments: 3) + -> Subquery Scan on "*SELECT* 2" + -> Seq Scan on p1_1240 + Optimizer: Postgres-based planner +(11 rows) + +with result as (update r_1240 set a = a +1 where a < 5 returning *) select * from result except select * from p1_1240; + a +--- + 5 + 4 +(2 rows) + +drop table r_1240; +drop table p1_1240; +-- -- Clean up -- DROP TABLE IF EXISTS T_a1 CASCADE; diff --git a/src/test/regress/expected/union_gp_optimizer.out b/src/test/regress/expected/union_gp_optimizer.out index 8b6e66c9d0e..8ff8655591d 100644 --- a/src/test/regress/expected/union_gp_optimizer.out +++ b/src/test/regress/expected/union_gp_optimizer.out @@ -2439,6 +2439,42 @@ select json_data,id from my_table where json_data->>'age' = '30' union all sele set optimizer_parallel_union to off; drop table if exists my_table; -- +-- test Github issue https://github.com/apache/cloudberry/issues/1240 +-- +create table r_1240(a int) distributed replicated; +insert into r_1240 select generate_series(1,10); +create table p1_1240(a int) distributed by (a); +insert into p1_1240 select generate_series(1,3); +explain(costs off) with result as (update r_1240 set a = a +1 where a < 5 returning *) select * from result except select * from p1_1240; +INFO: GPORCA failed to produce a plan, falling back to Postgres-based planner +DETAIL: Falling back to Postgres-based planner because GPORCA does not support the following feature: RETURNING clause + QUERY PLAN +--------------------------------------------------------------- + HashSetOp Except + -> Append + -> Explicit Gather Motion 3:1 (slice1; segments: 3) + -> Subquery Scan on "*SELECT* 1" + -> Update on r_1240 + -> Seq Scan on r_1240 + Filter: (a < 5) + -> Gather Motion 3:1 (slice2; segments: 3) + -> Subquery Scan on "*SELECT* 2" + -> Seq Scan on p1_1240 + Optimizer: Postgres-based planner +(11 rows) + +with result as (update r_1240 set a = a +1 where a < 5 returning *) select * from result except select * from p1_1240; +INFO: GPORCA failed to produce a plan, falling back to Postgres-based planner +DETAIL: Falling back to Postgres-based planner because GPORCA does not support the following feature: RETURNING clause + a +--- + 5 + 4 +(2 rows) + +drop table r_1240; +drop table p1_1240; +-- -- Clean up -- DROP TABLE IF EXISTS T_a1 CASCADE; diff --git a/src/test/regress/sql/union_gp.sql b/src/test/regress/sql/union_gp.sql index 124ac877836..e7cac952704 100644 --- a/src/test/regress/sql/union_gp.sql +++ b/src/test/regress/sql/union_gp.sql @@ -708,6 +708,18 @@ select json_data,id from my_table where json_data->>'age' = '30' union all sele set optimizer_parallel_union to off; drop table if exists my_table; +-- +-- test Github issue https://github.com/apache/cloudberry/issues/1240 +-- +create table r_1240(a int) distributed replicated; +insert into r_1240 select generate_series(1,10); +create table p1_1240(a int) distributed by (a); +insert into p1_1240 select generate_series(1,3); +explain(costs off) with result as (update r_1240 set a = a +1 where a < 5 returning *) select * from result except select * from p1_1240; +with result as (update r_1240 set a = a +1 where a < 5 returning *) select * from result except select * from p1_1240; +drop table r_1240; +drop table p1_1240; + -- -- Clean up -- From 65d53d6443c188afe1acfb9a61ef56b5575d162b Mon Sep 17 00:00:00 2001 From: zhangyue Date: Fri, 29 Aug 2025 12:40:09 +0800 Subject: [PATCH 142/260] Revert "Fix double free issue in alterResgroupCallback during io_limit cleanup" This reverts commit 65cd966d5a144dfe861d5107ac2db0be0ad18798. --- src/backend/commands/resgroupcmds.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/backend/commands/resgroupcmds.c b/src/backend/commands/resgroupcmds.c index f6ee4fefc34..5c319e85b11 100644 --- a/src/backend/commands/resgroupcmds.c +++ b/src/backend/commands/resgroupcmds.c @@ -1093,23 +1093,10 @@ alterResgroupCallback(XactEvent event, void *arg) if (event == XACT_EVENT_COMMIT) ResGroupAlterOnCommit(callbackCtx); - /* - * Free io_limit resources allocated in AlterResourceGroup(). - * - * We need to handle two cases: - * 1. caps.io_limit != oldCaps.io_limit: case RESGROUP_LIMIT_TYPE_IO_LIMIT - * 2. caps.io_limit == oldCaps.io_limit: other cases - * - * The pointer comparison (oldCaps.io_limit != caps.io_limit) is crucial to - * avoid double free errors. When "other cases", both pointers might - * reference the same memory location, so we only free oldCaps.io_limit if - * it's different from caps.io_limit. - */ if (callbackCtx->caps.io_limit != NIL) cgroupOpsRoutine->freeio(callbackCtx->caps.io_limit); - if (callbackCtx->oldCaps.io_limit != NIL && - callbackCtx->oldCaps.io_limit != callbackCtx->caps.io_limit) + if (callbackCtx->caps.io_limit != NIL) cgroupOpsRoutine->freeio(callbackCtx->oldCaps.io_limit); pfree(callbackCtx); From 692c43fe1abb84d852936972c5808c9f4ad9de36 Mon Sep 17 00:00:00 2001 From: RMT Date: Tue, 1 Aug 2023 18:04:38 +0800 Subject: [PATCH 143/260] let resource group io limit testing can be reproduced (#16107) let resource group io limit testing can be reproduced. If we retain the objects created in the testing, we must clear those objects before we re-run the testing on local, it's not convenient for developers. --- .../expected/resgroup/resgroup_auxiliary_tools_v2.out | 8 +++++--- .../input/resgroup/resgroup_io_limit.source | 4 ++++ .../output/resgroup/resgroup_io_limit.source | 9 +++++++++ .../sql/resgroup/resgroup_auxiliary_tools_v2.sql | 11 +++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out index 779e4dd1bcf..45bd1cb45e1 100644 --- a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out +++ b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out @@ -141,7 +141,9 @@ if os.path.exists(dirname): return True try: os.makedirs(dirname) except Exception as e: plpy.error("cannot create dir {}".format(e)) else: return True $$ LANGUAGE plpython3u; CREATE -0: CREATE OR REPLACE FUNCTION rmdir(dirname text) RETURNS BOOL AS $$ import shutil import os -if not os.path.exists(dirname): return True -try: shutil.rmtree(dirname) except Exception as e: plpy.error("cannot remove dir {}".format(e)) else: return True $$ LANGUAGE plpython3u; +0: CREATE OR REPLACE FUNCTION rmdir(dirname text) RETURNS BOOL AS $$ import shutil import fcntl import os +try: f = os.open(dirname, os.O_RDONLY) except FileNotFoundError: return True +fcntl.flock(f, fcntl.LOCK_EX) +if not os.path.exists(dirname): os.close(f) return True +try: shutil.rmtree(dirname) except Exception as e: plpy.error("cannot remove dir {}".format(e)) else: return True finally: os.close(f) $$ LANGUAGE plpython3u; CREATE diff --git a/src/test/isolation2/input/resgroup/resgroup_io_limit.source b/src/test/isolation2/input/resgroup/resgroup_io_limit.source index 935964c5163..d3a0bd485a0 100644 --- a/src/test/isolation2/input/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/input/resgroup/resgroup_io_limit.source @@ -68,3 +68,7 @@ DROP RESOURCE GROUP rg_test_group2; DROP RESOURCE GROUP rg_test_group3; DROP RESOURCE GROUP rg_test_group4; DROP RESOURCE GROUP rg_test_group5; + +DROP TABLESPACE rg_io_limit_ts_1; + +select rmdir('@testtablespace@/rg_io_limit_ts_1') from gp_dist_random('gp_id') intersect select rmdir('@testtablespace@/rg_io_limit_ts_1') from gp_id; diff --git a/src/test/isolation2/output/resgroup/resgroup_io_limit.source b/src/test/isolation2/output/resgroup/resgroup_io_limit.source index 610c5b29b13..9e40b8c34d9 100644 --- a/src/test/isolation2/output/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/output/resgroup/resgroup_io_limit.source @@ -134,3 +134,12 @@ DROP RESOURCE GROUP rg_test_group4; DROP DROP RESOURCE GROUP rg_test_group5; DROP + +DROP TABLESPACE rg_io_limit_ts_1; +DROP + +select rmdir('@testtablespace@/rg_io_limit_ts_1') from gp_dist_random('gp_id') intersect select rmdir('@testtablespace@/rg_io_limit_ts_1') from gp_id; + rmdir +------- + t +(1 row) diff --git a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql index b791c1c31af..966d121a5dc 100644 --- a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql +++ b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql @@ -328,9 +328,18 @@ $$ LANGUAGE plpython3u; 0: CREATE OR REPLACE FUNCTION rmdir(dirname text) RETURNS BOOL AS $$ import shutil + import fcntl import os + try: + f = os.open(dirname, os.O_RDONLY) + except FileNotFoundError: + return True + + fcntl.flock(f, fcntl.LOCK_EX) + if not os.path.exists(dirname): + os.close(f) return True try: @@ -339,4 +348,6 @@ $$ LANGUAGE plpython3u; plpy.error("cannot remove dir {}".format(e)) else: return True + finally: + os.close(f) $$ LANGUAGE plpython3u; From b210cf83c8f08a094c49d2fc7d6f7335134630b3 Mon Sep 17 00:00:00 2001 From: RMT Date: Wed, 6 Sep 2023 20:04:05 -0600 Subject: [PATCH 144/260] Improve io_limit behaviors (#16351) * add function to clear io.max This pr has several improvements for io limit: 1. Add a function to clear io.max. This function should be used when alter io_limit. 2. Check tablespace in io_limit when drop tablespaces. If the tablespace which will be dropped presents in some io_limit resource groups, the drop tablespace statement will be aborted. 3. When InitResGroup and AlterResourceGroup, if parseio raises an error, the error will be demote to WARNING. So the cluster can launch when some tablespace has been removed. --- src/backend/commands/resgroupcmds.c | 29 +++++- src/backend/commands/tablespace.c | 5 + src/backend/utils/resgroup/cgroup-ops-dummy.c | 10 +- .../utils/resgroup/cgroup-ops-linux-v1.c | 12 ++- .../utils/resgroup/cgroup-ops-linux-v2.c | 10 +- src/backend/utils/resgroup/cgroup_io_limit.c | 59 +++++++++++- src/backend/utils/resgroup/resgroup.c | 96 ++++++++++++++++++- src/include/utils/cgroup.h | 2 + src/include/utils/cgroup_io_limit.h | 6 +- src/include/utils/resgroup.h | 1 + .../resgroup/resgroup_auxiliary_tools_v2.out | 8 ++ .../input/resgroup/resgroup_io_limit.source | 5 + .../output/resgroup/resgroup_io_limit.source | 11 +++ .../resgroup/resgroup_auxiliary_tools_v2.sql | 19 ++++ 14 files changed, 265 insertions(+), 8 deletions(-) diff --git a/src/backend/commands/resgroupcmds.c b/src/backend/commands/resgroupcmds.c index 5c319e85b11..ce5ab6d584f 100644 --- a/src/backend/commands/resgroupcmds.c +++ b/src/backend/commands/resgroupcmds.c @@ -552,6 +552,8 @@ AlterResourceGroup(AlterResourceGroupStmt *stmt) /* * Get all the capabilities of one resource group in pg_resgroupcapability. + * + * Note: the io_limit in ResGroupCaps will be NIL if parse io_limit string failed. */ void GetResGroupCapabilities(Relation rel, Oid groupId, ResGroupCaps *resgroupCaps) @@ -634,9 +636,34 @@ GetResGroupCapabilities(Relation rel, Oid groupId, ResGroupCaps *resgroupCaps) case RESGROUP_LIMIT_TYPE_IO_LIMIT: if (cgroupOpsRoutine != NULL) { + /* if InterruptHoldoffCount doesn't restore in PG_CATCH, + * the catch will failed. */ + int32 savedholdoffCount = InterruptHoldoffCount; + oldContext = CurrentMemoryContext; MemoryContextSwitchTo(TopMemoryContext); - resgroupCaps->io_limit = cgroupOpsRoutine->parseio(value); + /* + * This function will be called in InitResGroups and AlterResourceGroup which + * shoud not be abort. In some circumstances, for example, the directory of a + * tablespace in io_limit be removed, then parseio will throw error. If + * InitResGroups be aborted, the cluster cannot launched. */ + PG_TRY(); + { + resgroupCaps->io_limit = cgroupOpsRoutine->parseio(value); + } + PG_CATCH(); + { + resgroupCaps->io_limit = NIL; + + InterruptHoldoffCount = savedholdoffCount; + + if (elog_demote(WARNING)) + { + EmitErrorReport(); + FlushErrorState(); + } + } + PG_END_TRY(); MemoryContextSwitchTo(oldContext); } else diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index ef8bd610e0b..9175ebfb5ba 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -97,8 +97,10 @@ #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/rel.h" +#include "utils/resource_manager.h" #include "utils/tarrable.h" #include "utils/varlena.h" +#include "utils/resgroup.h" #include "catalog/heap.h" #include "catalog/oid_dispatch.h" @@ -738,6 +740,9 @@ DropTableSpace(DropTableSpaceStmt *stmt) errdetail_internal("%s", detail), errdetail_log("%s", detail_log))); + if (IsResGroupEnabled() && Gp_resource_manager_policy == RESOURCE_MANAGER_POLICY_GROUP_V2) + checkTablespaceInIOlimit(tablespaceoid, true); + /* DROP hook for the tablespace being removed */ InvokeObjectDropHook(TableSpaceRelationId, tablespaceoid, 0); diff --git a/src/backend/utils/resgroup/cgroup-ops-dummy.c b/src/backend/utils/resgroup/cgroup-ops-dummy.c index 9c5c2850aea..91c588f5986 100644 --- a/src/backend/utils/resgroup/cgroup-ops-dummy.c +++ b/src/backend/utils/resgroup/cgroup-ops-dummy.c @@ -252,6 +252,12 @@ dumpio_dummy(List *limit_list) return DefaultIOLimit; } +static void +cleario_dummy(Oid groupid) +{ + unsupported_system(); +} + static CGroupOpsRoutine cGroupOpsRoutineDummy = { .getcgroupname = getcgroupname_dummy, @@ -280,7 +286,9 @@ static CGroupOpsRoutine cGroupOpsRoutineDummy = { .setio = setio_dummy, .freeio = freeio_dummy, .getiostat = getiostat_dummy, - .dumpio = dumpio_dummy + .dumpio = dumpio_dummy, + .cleario = cleario_dummy + }; CGroupOpsRoutine *get_cgroup_routine_dummy(void) diff --git a/src/backend/utils/resgroup/cgroup-ops-linux-v1.c b/src/backend/utils/resgroup/cgroup-ops-linux-v1.c index 96390712be4..fffba070a3f 100644 --- a/src/backend/utils/resgroup/cgroup-ops-linux-v1.c +++ b/src/backend/utils/resgroup/cgroup-ops-linux-v1.c @@ -176,6 +176,7 @@ static void setio_v1(Oid group, List *limit_list); static void freeio_v1(List *limit_list); static List* getiostat_v1(Oid group, List *io_limit); static char *dumpio_v1(List *limit_list); +static void cleario_v1(Oid groupid); /* * Detect gpdb cgroup component dirs. @@ -1158,6 +1159,14 @@ dumpio_v1(List *limit_list) return DefaultIOLimit; } +static void +cleario_v1(Oid groupid) +{ + ereport(WARNING, + (errcode(ERRCODE_SYSTEM_ERROR), + errmsg("resource group io limit only can be used in cgroup v2."))); +} + static CGroupOpsRoutine cGroupOpsRoutineV1 = { .getcgroupname = getcgroupname_v1, .probecgroup = probecgroup_v1, @@ -1187,7 +1196,8 @@ static CGroupOpsRoutine cGroupOpsRoutineV1 = { .setio = setio_v1, .freeio = freeio_v1, .getiostat = getiostat_v1, - .dumpio = dumpio_v1 + .dumpio = dumpio_v1, + .cleario = cleario_v1 }; CGroupOpsRoutine *get_group_routine_v1(void) diff --git a/src/backend/utils/resgroup/cgroup-ops-linux-v2.c b/src/backend/utils/resgroup/cgroup-ops-linux-v2.c index 546b2272213..933f8b139ef 100644 --- a/src/backend/utils/resgroup/cgroup-ops-linux-v2.c +++ b/src/backend/utils/resgroup/cgroup-ops-linux-v2.c @@ -166,6 +166,7 @@ static void setio_v2(Oid group, List *limit_list); static void freeio_v2(List *limit_list); static List *getiostat_v2(Oid group, List *io_limit); static char *dumpio_v2(List *limit_list); +static void cleario_v2(Oid groupid); /* * Dump component dir to the log. @@ -906,6 +907,12 @@ dumpio_v2(List *limit_list) return io_limit_dump(limit_list); } +static void +cleario_v2(Oid groupid) +{ + clear_io_max(groupid); +} + static CGroupOpsRoutine cGroupOpsRoutineV2 = { .getcgroupname = getcgroupname_v2, .probecgroup = probecgroup_v2, @@ -935,7 +942,8 @@ static CGroupOpsRoutine cGroupOpsRoutineV2 = { .setio = setio_v2, .freeio = freeio_v2, .getiostat = getiostat_v2, - .dumpio = dumpio_v2 + .dumpio = dumpio_v2, + .cleario = cleario_v2 }; CGroupOpsRoutine *get_group_routine_v2(void) diff --git a/src/backend/utils/resgroup/cgroup_io_limit.c b/src/backend/utils/resgroup/cgroup_io_limit.c index f3b1a1e33b2..29737a25ff8 100644 --- a/src/backend/utils/resgroup/cgroup_io_limit.c +++ b/src/backend/utils/resgroup/cgroup_io_limit.c @@ -1,5 +1,4 @@ #include "postgres.h" -#include "utils/cgroup_io_limit.h" #include "access/genam.h" #include "access/heapam.h" #include "access/htup.h" @@ -9,6 +8,8 @@ #include "catalog/indexing.h" #include "catalog/pg_resgroup_d.h" #include "catalog/pg_resgroupcapability_d.h" +#include "common/string.h" +#include "commands/tablespace.h" #include "catalog/pg_tablespace.h" #include "catalog/pg_tablespace_d.h" #include "commands/resgroupcmds.h" @@ -18,11 +19,18 @@ #include "port.h" #include "storage/fd.h" #include "utils/cgroup.h" +#include "utils/builtins.h" #include "utils/fmgroids.h" #include "utils/hsearch.h" #include "utils/palloc.h" #include "utils/relcache.h" #include "utils/resgroup.h" +#include "utils/cgroup_io_limit.h" +#include + +#ifndef __linux__ +#error cgroup is only available on linux +#endif #include #include @@ -536,7 +544,10 @@ io_limit_dump(List *limit_list) for(i = 0; i < fields_length; i++) { - appendStringInfo(result, "%s=%lu", IOconfigFields[i], *(value + i)); + if (*(value + i) != IO_LIMIT_MAX) + appendStringInfo(result, "%s=%lu", IOconfigFields[i], *(value + i)); + else + appendStringInfo(result, "%s=max", IOconfigFields[i]); if (i + 1 != fields_length) appendStringInfo(result, ","); @@ -548,3 +559,47 @@ io_limit_dump(List *limit_list) return result->data; } + +void +clear_io_max(Oid groupid) +{ + FILE *f; + StringInfo line = makeStringInfo(); + StringInfo result = makeStringInfo(); + List *result_lines = NIL; + ListCell *cell; + char path[MAX_CGROUP_PATHLEN]; + buildPath(groupid, BASEDIR_GPDB, CGROUP_COMPONENT_PLAIN, "io.max", path, MAX_CGROUP_PATHLEN); + + f = AllocateFile(path, "r"); + /* pg_get_line_buf will reset line each time */ + while (pg_get_line_buf(f, line)) + { + uint32 maj, min; + int i; + char *str = line->data; + + sscanf(str, "%u:%u", &maj, &min); + + appendStringInfo(result, "%u:%u", maj, min); + for (i = 0; i < lengthof(IOconfigFields); i++) + appendStringInfo(result, " %s=max", IOconfigFields[i]); + + result_lines = lappend(result_lines, (void *) pstrdup(result->data)); + + resetStringInfo(result); + } + FreeFile(f); + pfree(line->data); + pfree(result->data); + pfree(line); + pfree(result); + + foreach(cell, result_lines) + { + char *str = (char *)lfirst(cell); + writeStr(groupid, BASEDIR_GPDB, CGROUP_COMPONENT_PLAIN, "io.max", str); + } + + list_free_deep(result_lines); +} diff --git a/src/backend/utils/resgroup/resgroup.c b/src/backend/utils/resgroup/resgroup.c index 6dc5f0c8174..4a6c9c14b94 100644 --- a/src/backend/utils/resgroup/resgroup.c +++ b/src/backend/utils/resgroup/resgroup.c @@ -33,6 +33,7 @@ #include "cdb/cdbdisp_query.h" #include "cdb/memquota.h" #include "commands/resgroupcmds.h" +#include "commands/tablespace.h" #include "common/hashfn.h" #include "funcapi.h" #include "miscadmin.h" @@ -59,6 +60,7 @@ #include "utils/cgroup-ops-v1.h" #include "utils/cgroup-ops-dummy.h" #include "utils/cgroup-ops-v2.h" +#include "utils/cgroup_io_limit.h" #include "access/xact.h" #define InvalidSlotId (-1) @@ -805,7 +807,11 @@ ResGroupAlterOnCommit(const ResourceGroupCallbackContext *callbackCtx) } else if (callbackCtx->limittype == RESGROUP_LIMIT_TYPE_IO_LIMIT) { - cgroupOpsRoutine->setio(callbackCtx->groupid, callbackCtx->caps.io_limit); + if (callbackCtx->caps.io_limit != NIL) + { + cgroupOpsRoutine->cleario(callbackCtx->groupid); + cgroupOpsRoutine->setio(callbackCtx->groupid, callbackCtx->caps.io_limit); + } } /* reset default group if cpuset has changed */ @@ -3701,6 +3707,94 @@ check_and_unassign_from_resgroup(PlannedStmt* stmt) bypassedGroup->caps.cpuMaxPercent == CPU_MAX_PERCENT_DISABLED); } +/* + * return ture if there is a resource group which io_limit contains tblspcid. + * if errout is true, print warning, message. */ +bool +checkTablespaceInIOlimit(Oid tblspcid, bool errout) +{ + Relation rel_resgroup_caps; + SysScanDesc sscan; + HeapTuple tuple; + bool contain = false; + bool print_header = false; + StringInfo log = makeStringInfo(); + + rel_resgroup_caps = table_open(ResGroupCapabilityRelationId, AccessShareLock); + /* get io limit string from catalog */ + sscan = systable_beginscan(rel_resgroup_caps, InvalidOid, false, + NULL, 0, NULL); + while (HeapTupleIsValid(tuple = systable_getnext(sscan))) + { + Oid id; + bool isNULL; + Datum id_datum; + Datum type_datum; + Datum value_datum; + ResGroupLimitType type; + char *io_limit_str; + List *limit_list; + ListCell *cell; + + type_datum = heap_getattr(tuple, Anum_pg_resgroupcapability_reslimittype, + rel_resgroup_caps->rd_att, &isNULL); + type = (ResGroupLimitType) DatumGetInt16(type_datum); + if (type != RESGROUP_LIMIT_TYPE_IO_LIMIT) + continue; + + id_datum = heap_getattr(tuple, Anum_pg_resgroupcapability_resgroupid, + rel_resgroup_caps->rd_att, &isNULL); + id = DatumGetObjectId(id_datum); + + value_datum = heap_getattr(tuple, Anum_pg_resgroupcapability_value, + rel_resgroup_caps->rd_att, &isNULL); + io_limit_str = TextDatumGetCString(value_datum); + + if (strcmp(io_limit_str, DefaultIOLimit) == 0) + continue; + + limit_list = cgroupOpsRoutine->parseio(io_limit_str); + foreach(cell, limit_list) + { + TblSpcIOLimit *limit = (TblSpcIOLimit *) lfirst(cell); + + if (limit->tablespace_oid == tblspcid) + { + contain = true; + + if (!errout) + break; + + if (!print_header) + { + print_header = true; + appendStringInfo(log, "io limit: following resource groups depend on tablespace %s:", get_tablespace_name(tblspcid)); + } + + appendStringInfo(log, " %s", GetResGroupNameForId(id)); + } + } + + cgroupOpsRoutine->freeio(limit_list); + + if (contain && !errout) + break; + } + systable_endscan(sscan); + + table_close(rel_resgroup_caps, AccessShareLock); + + if (contain && errout) + ereport(ERROR, (errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST), + errmsg("%s", log->data), + errhint("you can remove those resource groups or remove tablespace %s from io_limit of those resource groups.", get_tablespace_name(tblspcid)))); + + pfree(log->data); + pfree(log); + + return contain; +} + /* * Given a planned statement, check if it is pure catalog query or a very simple query. * Return true only when: diff --git a/src/include/utils/cgroup.h b/src/include/utils/cgroup.h index 42e6468be40..b9c0fa249a2 100644 --- a/src/include/utils/cgroup.h +++ b/src/include/utils/cgroup.h @@ -233,6 +233,7 @@ typedef void (*setio_function) (Oid group, List *limit_list); typedef void (*freeio_function) (List *limit_list); typedef List* (*getiostat_function) (Oid groupid, List *io_limit); typedef char* (*dumpio_function) (List *limit_list); +typedef void (*cleario_function) (Oid groupid); typedef struct CGroupOpsRoutine @@ -272,6 +273,7 @@ typedef struct CGroupOpsRoutine freeio_function freeio; getiostat_function getiostat; dumpio_function dumpio; + cleario_function cleario; } CGroupOpsRoutine; /* The global function handler. */ diff --git a/src/include/utils/cgroup_io_limit.h b/src/include/utils/cgroup_io_limit.h index e7ea1528899..b10482e16d8 100644 --- a/src/include/utils/cgroup_io_limit.h +++ b/src/include/utils/cgroup_io_limit.h @@ -7,11 +7,14 @@ /* type for linux device id, use libc dev_t now. * bdi means backing device info. */ +#ifdef __linux__ typedef dev_t bdi_t; - #define make_bdi(major, minor) makedev(major, minor) #define bdi_major(bdi) major(bdi) #define bdi_minor(bdi) minor(bdi) +#else +typedef uint64 bdi_t; +#endif #define IO_LIMIT_MAX (0) @@ -108,5 +111,6 @@ extern void io_limit_validate(List *limit_list); extern List *get_iostat(Oid groupid, List *io_limit); extern int compare_iostat(const ListCell *ca, const ListCell *cb); extern char *io_limit_dump(List *limit_list); +extern void clear_io_max(Oid groupid); #endif diff --git a/src/include/utils/resgroup.h b/src/include/utils/resgroup.h index 6db5a10a0e8..035fc180161 100644 --- a/src/include/utils/resgroup.h +++ b/src/include/utils/resgroup.h @@ -216,6 +216,7 @@ extern void ResGroupMoveQuery(int sessionId, Oid groupId, const char *groupName) extern Oid ResGroupGetGroupIdBySessionId(int sessionId); extern char *getCpuSetByRole(const char *cpuset); extern void checkCpuSetByRole(const char *cpuset); +extern bool checkTablespaceInIOlimit(Oid tblspcid, bool errout); #define LOG_RESGROUP_DEBUG(...) \ do {if (Debug_resource_group) elog(__VA_ARGS__); } while(false); diff --git a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out index 45bd1cb45e1..61e1e7474c2 100644 --- a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out +++ b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out @@ -147,3 +147,11 @@ fcntl.flock(f, fcntl.LOCK_EX) if not os.path.exists(dirname): os.close(f) return True try: shutil.rmtree(dirname) except Exception as e: plpy.error("cannot remove dir {}".format(e)) else: return True finally: os.close(f) $$ LANGUAGE plpython3u; CREATE + +0: CREATE OR REPLACE FUNCTION check_clear_io_max(groupname text) RETURNS BOOL AS $$ import ctypes import os +postgres = ctypes.CDLL(None) clear_io_max = postgres['clear_io_max'] +# get group oid sql = "select groupid from gp_toolkit.gp_resgroup_config where groupname = '%s'" % groupname result = plpy.execute(sql) groupid = result[0]['groupid'] +clear_io_max(groupid) +cgroup_path = "/sys/fs/cgroup/gpdb/%d/io.max" % groupid +return os.stat(cgroup_path).st_size == 0 $$ LANGUAGE plpython3u; +CREATE diff --git a/src/test/isolation2/input/resgroup/resgroup_io_limit.source b/src/test/isolation2/input/resgroup/resgroup_io_limit.source index d3a0bd485a0..e2e14a7b7a5 100644 --- a/src/test/isolation2/input/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/input/resgroup/resgroup_io_limit.source @@ -44,10 +44,15 @@ CREATE RESOURCE GROUP rg_test_group5 WITH (concurrency=10, cpu_max_percent=10, i SELECT check_cgroup_io_max('rg_test_group5', 'rg_io_limit_ts_1', 'rbps=1048576000 wbps=1048576000 riops=1000 wiops=1000'); +-- try to drop test tablespace +DROP TABLESPACE rg_io_limit_ts_1; + ALTER RESOURCE GROUP rg_test_group5 SET io_limit 'rg_io_limit_ts_1:rbps=1000,wbps=1000'; SELECT check_cgroup_io_max('rg_test_group5', 'rg_io_limit_ts_1', 'rbps=1048576000 wbps=1048576000 riops=max wiops=max'); +SELECT check_clear_io_max('rg_test_group5'); + -- fault injector SELECT gp_inject_fault('create_resource_group_fail', 'error', 1); diff --git a/src/test/isolation2/output/resgroup/resgroup_io_limit.source b/src/test/isolation2/output/resgroup/resgroup_io_limit.source index 9e40b8c34d9..4c2d90c163c 100644 --- a/src/test/isolation2/output/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/output/resgroup/resgroup_io_limit.source @@ -80,6 +80,11 @@ SELECT check_cgroup_io_max('rg_test_group5', 'rg_io_limit_ts_1', 'rbps=104857600 t (1 row) +-- try to drop test tablespace +DROP TABLESPACE rg_io_limit_ts_1; +ERROR: io limit: following resource groups depend on tablespace rg_io_limit_ts_1: rg_test_group5 +HINT: you can remove those resource groups or remove tablespace rg_io_limit_ts_1 from io_limit of those resource groups. + ALTER RESOURCE GROUP rg_test_group5 SET io_limit 'rg_io_limit_ts_1:rbps=1000,wbps=1000'; ALTER @@ -89,6 +94,12 @@ SELECT check_cgroup_io_max('rg_test_group5', 'rg_io_limit_ts_1', 'rbps=104857600 t (1 row) +SELECT check_clear_io_max('rg_test_group5'); + check_clear_io_max +-------------------- + t +(1 row) + -- fault injector SELECT gp_inject_fault('create_resource_group_fail', 'error', 1); gp_inject_fault diff --git a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql index 966d121a5dc..6a60a32e3f7 100644 --- a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql +++ b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql @@ -351,3 +351,22 @@ $$ LANGUAGE plpython3u; finally: os.close(f) $$ LANGUAGE plpython3u; + +0: CREATE OR REPLACE FUNCTION check_clear_io_max(groupname text) RETURNS BOOL AS $$ + import ctypes + import os + + postgres = ctypes.CDLL(None) + clear_io_max = postgres['clear_io_max'] + + # get group oid + sql = "select groupid from gp_toolkit.gp_resgroup_config where groupname = '%s'" % groupname + result = plpy.execute(sql) + groupid = result[0]['groupid'] + + clear_io_max(groupid) + + cgroup_path = "/sys/fs/cgroup/gpdb/%d/io.max" % groupid + + return os.stat(cgroup_path).st_size == 0 +$$ LANGUAGE plpython3u; From 13519a43ead9e414d8a61f66b58ccb2cc5588cf6 Mon Sep 17 00:00:00 2001 From: RMT Date: Wed, 6 Sep 2023 21:41:14 -0600 Subject: [PATCH 145/260] Fix resource group io limit flaky case (#16386) Fix resource group io limit flaky case. The flaky case caused by running mkdir on multi segments at the same host. Just catch FileExistsError and ignore it is ok, the mkdir function just need the dir exists. --- .../expected/resgroup/resgroup_auxiliary_tools_v2.out | 2 +- .../isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out index 61e1e7474c2..e2e959374b2 100644 --- a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out +++ b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out @@ -138,7 +138,7 @@ CREATE 0: CREATE OR REPLACE FUNCTION mkdir(dirname text) RETURNS BOOL AS $$ import os if os.path.exists(dirname): return True -try: os.makedirs(dirname) except Exception as e: plpy.error("cannot create dir {}".format(e)) else: return True $$ LANGUAGE plpython3u; +try: os.makedirs(dirname) except FileExistsError: return True except Exception as e: plpy.error("cannot create dir {}".format(e)) else: return True $$ LANGUAGE plpython3u; CREATE 0: CREATE OR REPLACE FUNCTION rmdir(dirname text) RETURNS BOOL AS $$ import shutil import fcntl import os diff --git a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql index 6a60a32e3f7..88f66c4f18d 100644 --- a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql +++ b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql @@ -320,6 +320,8 @@ $$ LANGUAGE plpython3u; try: os.makedirs(dirname) + except FileExistsError: + return True except Exception as e: plpy.error("cannot create dir {}".format(e)) else: From a1bf204abb594db3db4f3e8913c522600c8d4699 Mon Sep 17 00:00:00 2001 From: RMT Date: Tue, 12 Sep 2023 07:32:19 -0600 Subject: [PATCH 146/260] Io limit improve error log (#16394) When io_limit encountered syntax error, previous log is just "Error: Syntax error". Now, the io_limit has comprehensive log for syntax error: ``` demo=# create resource group rg1 WITH (cpu_max_percent=10, io_limit='pg_defaultrbps=100, wbps=550,riops=1000,wiops=1000'); ERROR: io limit: syntax error, unexpected '=', expecting ':' HINT: pg_defaultrbps=100, wbps=550,riops=1000,wiops=1000 ^ ``` ``` demo=# create resource group rg1 WITH (cpu_max_percent=10, io_limit='pg_default: rbps=100wbps=550,riops=1000, wiops=1000'); ERROR: io limit: syntax error, unexpected IO_KEY, expecting end of file or ';' HINT: pg_default:rbps=100wbps=550,riops=1000,wiops=1000 ^ ``` --- .../utils/resgroup/cgroup-ops-linux-v2.c | 8 +- src/backend/utils/resgroup/cgroup_io_limit.c | 43 ++++----- src/backend/utils/resgroup/io_limit_gram.y | 92 +++++++++++-------- src/backend/utils/resgroup/io_limit_scanner.l | 51 +++++++--- src/include/utils/cgroup_io_limit.h | 6 +- .../input/resgroup/resgroup_io_limit.source | 5 + .../output/resgroup/resgroup_io_limit.source | 23 ++++- 7 files changed, 142 insertions(+), 86 deletions(-) diff --git a/src/backend/utils/resgroup/cgroup-ops-linux-v2.c b/src/backend/utils/resgroup/cgroup-ops-linux-v2.c index 933f8b139ef..69d2b1b0461 100644 --- a/src/backend/utils/resgroup/cgroup-ops-linux-v2.c +++ b/src/backend/utils/resgroup/cgroup-ops-linux-v2.c @@ -857,22 +857,22 @@ setio_v2(Oid group, List *limit_list) { TblSpcIOLimit *limit = (TblSpcIOLimit *)lfirst(tblspc_cell); - if (limit->ioconfig->rbps == IO_LIMIT_MAX ) + if (limit->ioconfig->rbps == IO_LIMIT_MAX || limit->ioconfig->rbps == IO_LIMIT_EMPTY) sprintf(rbps_str, "rbps=max"); else sprintf(rbps_str, "rbps=%lu", limit->ioconfig->rbps * 1024 * 1024); - if (limit->ioconfig->wbps == IO_LIMIT_MAX) + if (limit->ioconfig->wbps == IO_LIMIT_MAX || limit->ioconfig->wbps == IO_LIMIT_EMPTY) sprintf(wbps_str, "wbps=max"); else sprintf(wbps_str, "wbps=%lu", limit->ioconfig->wbps * 1024 * 1024); - if (limit->ioconfig->riops == IO_LIMIT_MAX) + if (limit->ioconfig->riops == IO_LIMIT_MAX || limit->ioconfig->riops == IO_LIMIT_EMPTY) sprintf(riops_str, "riops=max"); else sprintf(riops_str, "riops=%u", (uint32)limit->ioconfig->riops); - if (limit->ioconfig->wiops == IO_LIMIT_MAX) + if (limit->ioconfig->wiops == IO_LIMIT_MAX || limit->ioconfig->wiops == IO_LIMIT_EMPTY) sprintf(wiops_str, "wiops=max"); else sprintf(wiops_str, "wiops=%u", (uint32)limit->ioconfig->wiops); diff --git a/src/backend/utils/resgroup/cgroup_io_limit.c b/src/backend/utils/resgroup/cgroup_io_limit.c index 29737a25ff8..43e096301d2 100644 --- a/src/backend/utils/resgroup/cgroup_io_limit.c +++ b/src/backend/utils/resgroup/cgroup_io_limit.c @@ -45,7 +45,6 @@ const char *IOconfigFields[4] = {"rbps", "wbps", "riops", "wiops"}; const char *IOStatFields[4] = {"rbytes", "wbytes", "rios", "wios"}; static int bdi_cmp(const void *a, const void *b); -static void ioconfig_validate(IOconfig *config); typedef struct BDICmp { @@ -103,8 +102,6 @@ io_limit_validate(List *limit_list) TblSpcIOLimit *limit = (TblSpcIOLimit *)lfirst(limit_cell); ListCell *bdi_cell; - ioconfig_validate(limit->ioconfig); - foreach (bdi_cell, limit->bdi_list) { bdi_array[i].bdi = *(bdi_t *)lfirst(bdi_cell); @@ -259,6 +256,10 @@ get_bdi_of_path(const char *ori_path) errmsg("cannot find disk of %s, details: %m", path), errhint("mount point of %s is: %s", path, match_mnt.mnt_fsname))); } + pfree(match_mnt.mnt_fsname); + pfree(match_mnt.mnt_dir); + pfree(match_mnt.mnt_type); + pfree(match_mnt.mnt_opts); maj = major(sb.st_rdev); min = minor(sb.st_rdev); @@ -305,31 +306,27 @@ get_bdi_of_path(const char *ori_path) return make_bdi(parent_maj, parent_min); } -static void -ioconfig_validate(IOconfig *config) + +bool +io_limit_value_validate(const char *field, const uint64 value, uint64 *max) { const uint64 ULMAX = ULLONG_MAX / 1024 / 1024; const uint32 UMAX = UINT_MAX; - if (config->rbps != IO_LIMIT_MAX && (config->rbps > ULMAX || config->rbps < 2)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("io limit: rbps must in range [2, %lu] or equal 0", ULMAX))); - - if (config->wbps != IO_LIMIT_MAX && (config->wbps > ULMAX || config->wbps < 2)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("io limit: wbps must in range [2, %lu] or equal 0", ULMAX))); + *max = 0; - if (config->wiops != IO_LIMIT_MAX && (config->wiops > UMAX || config->wiops < 2)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("io limit: wiops must in range [2, %u] or equal 0", UMAX))); + if (strcmp(field, "rbps") == 0 || strcmp(field, "wbps") == 0) + { + *max = ULMAX; + return value == IO_LIMIT_MAX || !(value > ULMAX || value < 2); + } + else if (strcmp(field, "riops") == 0 || strcmp(field, "wiops") == 0) + { + *max = (uint64) UMAX; + return value == IO_LIMIT_MAX || !(value > UMAX || value < 2); + } - if (config->riops != IO_LIMIT_MAX && (config->riops > UMAX || config->riops < 2)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("io limit: riops must in range [2, %u] or equal 0", UMAX))); + return false; } char * @@ -544,7 +541,7 @@ io_limit_dump(List *limit_list) for(i = 0; i < fields_length; i++) { - if (*(value + i) != IO_LIMIT_MAX) + if ((*(value + i) != IO_LIMIT_MAX) && (*(value + i) != IO_LIMIT_EMPTY)) appendStringInfo(result, "%s=%lu", IOconfigFields[i], *(value + i)); else appendStringInfo(result, "%s=max", IOconfigFields[i]); diff --git a/src/backend/utils/resgroup/io_limit_gram.y b/src/backend/utils/resgroup/io_limit_gram.y index e79b35b6f21..6663821c856 100644 --- a/src/backend/utils/resgroup/io_limit_gram.y +++ b/src/backend/utils/resgroup/io_limit_gram.y @@ -1,5 +1,6 @@ %define api.pure true %define api.prefix {io_limit_yy} +%error-verbose %code top { #include "postgres.h" @@ -10,6 +11,9 @@ #define YYMALLOC palloc #define YYFREE pfree + + extern int io_limit_yycolumn; + static char *line; } %code requires { @@ -35,7 +39,7 @@ void io_limit_yyerror(IOLimitParserContext *parser_context, void *scanner, const char *message); } -%token IOLIMIT_CONFIG_DELIM TABLESPACE_IO_CONFIG_START STAR IOCONFIG_DELIM VALUE_MAX +%token STAR VALUE_MAX %token ID IO_KEY %token NUMBER @@ -43,7 +47,7 @@ %type io_value %type ioconfigs %type tablespace_io_config -%type iolimit_config_string start +%type iolimit_config_string %type ioconfig %destructor { pfree($$); } @@ -55,34 +59,31 @@ %% -start: iolimit_config_string - { - context->result = $$ = $1; - return 0; - } - iolimit_config_string: tablespace_io_config { List *l = NIL; $$ = lappend(l, $1); + + context->result = $$; } - | iolimit_config_string IOLIMIT_CONFIG_DELIM tablespace_io_config + | iolimit_config_string ';' tablespace_io_config { $$ = lappend($1, $3); + + context->result = $$; } +; -tablespace_name: ID { $$ = $1; } +tablespace_name: ID { $$ = $1; } ; -tablespace_io_config: tablespace_name TABLESPACE_IO_CONFIG_START ioconfigs +tablespace_io_config: tablespace_name ':' ioconfigs { TblSpcIOLimit *tblspciolimit = (TblSpcIOLimit *)palloc0(sizeof(TblSpcIOLimit)); if (context->star_tablespace_cnt > 0) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("io limit: tablespace '*' cannot be used with other tablespaces"))); + yyerror(NULL, NULL, "tablespace '*' cannot be used with other tablespaces"); tblspciolimit->tablespace_oid = get_tablespace_oid($1, false); context->normal_tablespce_cnt++; @@ -90,14 +91,13 @@ tablespace_io_config: tablespace_name TABLESPACE_IO_CONFIG_START ioconfigs $$ = tblspciolimit; } - | STAR TABLESPACE_IO_CONFIG_START ioconfigs + | STAR ':' ioconfigs { TblSpcIOLimit *tblspciolimit = (TblSpcIOLimit *)palloc0(sizeof(TblSpcIOLimit)); if (context->normal_tablespce_cnt > 0 || context->star_tablespace_cnt > 0) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("io limit: tablespace '*' cannot be used with other tablespaces"))); + yyerror(NULL, NULL, "tablespace '*' cannot be used with other tablespaces"); + tblspciolimit->tablespace_oid = InvalidOid; context->star_tablespace_cnt++; @@ -105,18 +105,14 @@ tablespace_io_config: tablespace_name TABLESPACE_IO_CONFIG_START ioconfigs $$ = tblspciolimit; } - | NUMBER TABLESPACE_IO_CONFIG_START ioconfigs + | NUMBER ':' ioconfigs { TblSpcIOLimit *tblspciolimit = (TblSpcIOLimit *)palloc0(sizeof(TblSpcIOLimit)); if (context->star_tablespace_cnt > 0) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("io limit: tablespace '*' cannot be used with other tablespaces"))); - if ($1 <= 0 || $1 > UINT_MAX) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("io limit: tablespace oid exceeds the limit"))); + yyerror(NULL, NULL, "tablespace '*' cannot be used with other tablespaces"); + if (!OidIsValid($1) || $1 > OID_MAX) + yyerror(NULL, NULL, "tablespace oid exceeds the limit"); tblspciolimit->tablespace_oid = $1; context->normal_tablespce_cnt++; @@ -125,49 +121,69 @@ tablespace_io_config: tablespace_name TABLESPACE_IO_CONFIG_START ioconfigs $$ = tblspciolimit; } +; ioconfigs: ioconfig { IOconfig *config = (IOconfig *)palloc0(sizeof(IOconfig)); uint64 *config_var = (uint64 *)config; if (config == NULL) - io_limit_yyerror(NULL, NULL, "io limit: cannot allocate memory"); + yyerror(NULL, NULL, "cannot allocate memory"); *(config_var + $1->offset) = $1->value; $$ = config; } - | ioconfigs IOCONFIG_DELIM ioconfig + | ioconfigs ',' ioconfig { uint64 *config_var = (uint64 *)$1; + + if (*(config_var + $3->offset) != IO_LIMIT_EMPTY) + yyerror(NULL, NULL, psprintf("duplicated IO_KEY: %s", IOconfigFields[$3->offset])); + *(config_var + $3->offset) = $3->value; $$ = $1; } +; ioconfig: IO_KEY '=' io_value { - IOconfigItem *item = (IOconfigItem *)palloc0(sizeof(IOconfigItem)); + uint64 max; + IOconfigItem *item = (IOconfigItem *)palloc(sizeof(IOconfigItem)); + item->value = IO_LIMIT_MAX; + if (item == NULL) - io_limit_yyerror(NULL, NULL, "io limit: cannot allocate memory"); + yyerror(NULL, NULL, "cannot allocate memory"); item->value = $3; - for (int i = 0;i < lengthof(IOconfigFields); ++i) + for (int i = 0; i < lengthof(IOconfigFields); ++i) if (strcmp($1, IOconfigFields[i]) == 0) + { item->offset = i; + if (!io_limit_value_validate(IOconfigFields[i], item->value, &max)) + yyerror(NULL, NULL, + psprintf("value of '%s' must in range [2, %lu] or equal 'max'", IOconfigFields[i], max)); + } $$ = item; } +; -io_value: NUMBER { $$ = $1; } - | VALUE_MAX { $$ = 0; } +io_value: NUMBER + { + $$ = $1; + } + | VALUE_MAX { $$ = IO_LIMIT_MAX; } +; %% void io_limit_yyerror(IOLimitParserContext *parser_context, void *scanner, const char *message) { - ereport(ERROR, \ - (errcode(ERRCODE_SYNTAX_ERROR), \ - errmsg("%s", message))); \ + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("io limit: %s", message), + errhint(" %s\n %*c", line, io_limit_yycolumn, '^'))); } /* @@ -180,12 +196,14 @@ io_limit_parse(const char *limit_str) IOLimitParserContext context; IOLimitScannerState state; + line = (char *) limit_str; + context.result = NIL; context.normal_tablespce_cnt = 0; context.star_tablespace_cnt = 0; io_limit_scanner_begin(&state, limit_str); if (yyparse(&context, state.scanner) != 0) - yyerror(&context, state.scanner, "io limit: parse error"); + yyerror(&context, state.scanner, "parse error"); io_limit_scanner_finish(&state); diff --git a/src/backend/utils/resgroup/io_limit_scanner.l b/src/backend/utils/resgroup/io_limit_scanner.l index 429e682d4c9..92754f64e79 100644 --- a/src/backend/utils/resgroup/io_limit_scanner.l +++ b/src/backend/utils/resgroup/io_limit_scanner.l @@ -3,6 +3,11 @@ #include "io_limit_gram.h" #define YYSTYPE IO_LIMIT_YYSTYPE + +#define SAVE_COLUMN io_limit_yycolumn = next_col; next_col += strlen(yytext) + +static int next_col = 1; +int io_limit_yycolumn = 1; %} %option noinput nounput noyywrap @@ -14,43 +19,56 @@ id [a-zA-Z_][a-zA-Z0-9_]* wildcard \* +%s ts_param + %% -[wr](b|io)ps { - yylval->str = pstrdup(yytext); - return IO_KEY; - } +: { + SAVE_COLUMN; + BEGIN ts_param; + return ':'; + } + +[wr](b|io)ps { + SAVE_COLUMN; + yylval->str = pstrdup(yytext); + return IO_KEY; + } -max { +max { + SAVE_COLUMN; yylval->str = pstrdup("max"); return VALUE_MAX; + } + +; { + SAVE_COLUMN; + BEGIN INITIAL; + return ';'; } {id} { + SAVE_COLUMN; yylval->str = pstrdup(yytext); return ID; } -\; { return IOLIMIT_CONFIG_DELIM; } - -: { return TABLESPACE_IO_CONFIG_START; }; - -, { return IOCONFIG_DELIM; } - [[:digit:]]+ { + SAVE_COLUMN; yylval->integer = strtoull(yytext, NULL, 10); return NUMBER; } {wildcard} { + SAVE_COLUMN; return STAR; } -[[:space:]] ; +[[:space:]] { SAVE_COLUMN; } . { + SAVE_COLUMN; return *yytext; } - %% @@ -91,7 +109,10 @@ io_limit_scanner_begin(IOLimitScannerState *state, const char *limit_str) yyscan_t scanner; yylex_init(&scanner); - state->state = (void *)yy_scan_string(limit_str, scanner); + next_col = 1; + io_limit_yycolumn = 1; + + state->buffer = (void *)yy_scan_string(limit_str, scanner); state->scanner = scanner; } @@ -99,5 +120,5 @@ io_limit_scanner_begin(IOLimitScannerState *state, const char *limit_str) void io_limit_scanner_finish(IOLimitScannerState *state) { - yy_delete_buffer((YY_BUFFER_STATE)state->state, (yyscan_t)state->scanner); + yy_delete_buffer(state->buffer, state->scanner); } diff --git a/src/include/utils/cgroup_io_limit.h b/src/include/utils/cgroup_io_limit.h index b10482e16d8..5f774822435 100644 --- a/src/include/utils/cgroup_io_limit.h +++ b/src/include/utils/cgroup_io_limit.h @@ -17,7 +17,8 @@ typedef uint64 bdi_t; #endif -#define IO_LIMIT_MAX (0) +#define IO_LIMIT_MAX (PG_UINT64_MAX) +#define IO_LIMIT_EMPTY (0) /* * IOconfig represents the io.max of cgroup v2 io controller. @@ -72,7 +73,7 @@ typedef struct IOLimitParserContext typedef struct IOLimitScannerState { - void *state; + void *buffer; void *scanner; } IOLimitScannerState; @@ -107,6 +108,7 @@ extern int fill_bdi_list(TblSpcIOLimit *io_limit); extern List *io_limit_parse(const char *limit_str); extern void io_limit_free(List *limit_list); extern void io_limit_validate(List *limit_list); +bool io_limit_value_validate(const char *field, const uint64 value, uint64 *max); extern List *get_iostat(Oid groupid, List *io_limit); extern int compare_iostat(const ListCell *ca, const ListCell *cb); diff --git a/src/test/isolation2/input/resgroup/resgroup_io_limit.source b/src/test/isolation2/input/resgroup/resgroup_io_limit.source index e2e14a7b7a5..8b0c4d69dc6 100644 --- a/src/test/isolation2/input/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/input/resgroup/resgroup_io_limit.source @@ -1,3 +1,8 @@ +-- different bison version may have different log format +-- start_matchignore +-- m/^ERROR: io limit: syntax error.*\n/ +-- end_matchignore + -- positive: io limit with correct syntax CREATE RESOURCE GROUP rg_test_group1 WITH (concurrency=10, cpu_max_percent=10, io_limit='pg_default:rbps=1000,wbps=1000,riops=1000,wiops=1000'); SELECT io_limit FROM gp_toolkit.gp_resgroup_config WHERE groupname='rg_test_group1'; diff --git a/src/test/isolation2/output/resgroup/resgroup_io_limit.source b/src/test/isolation2/output/resgroup/resgroup_io_limit.source index 4c2d90c163c..114522afa75 100644 --- a/src/test/isolation2/output/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/output/resgroup/resgroup_io_limit.source @@ -1,3 +1,8 @@ +-- different bison version may have different log format +-- start_matchignore +-- m/^ERROR: io limit: syntax error.*\n/ +-- end_matchignore + -- positive: io limit with correct syntax CREATE RESOURCE GROUP rg_test_group1 WITH (concurrency=10, cpu_max_percent=10, io_limit='pg_default:rbps=1000,wbps=1000,riops=1000,wiops=1000'); CREATE @@ -43,23 +48,31 @@ SELECT check_cgroup_io_max('rg_test_group4', 'pg_default', 'rbps=1048576000 wbps -- negative: io limit with incorrect syntax -- * must be unique tablespace CREATE RESOURCE GROUP rg_test_group WITH (concurrency=10, cpu_max_percent=10, io_limit='pg_default:rbps=1000,wbps=1000,riops=1000,wiops=1000;*:wbps=1000'); -ERROR: io limit: tablespace '*' cannot be used with other tablespaces (seg0 127.0.0.2:6000 pid=62791) +ERROR: io limit: tablespace '*' cannot be used with other tablespaces +HINT: pg_default:rbps=1000,wbps=1000,riops=1000,wiops=1000;*:wbps=1000 + ^ -- tail ; CREATE RESOURCE GROUP rg_test_group WITH (concurrency=10, cpu_max_percent=10, io_limit='pg_default:rbps=1000,wbps=1000,riops=1000,wiops=1000;'); -ERROR: syntax error (seg0 127.0.0.2:6000 pid=62791) +ERROR: io limit: syntax error, unexpected end of file, expecting STAR or ID or NUMBER +HINT: pg_default:rbps=1000,wbps=1000,riops=1000,wiops=1000; + ^ -- tail , CREATE RESOURCE GROUP rg_test_group WITH (concurrency=10, cpu_max_percent=10, io_limit='pg_default:rbps=1000,wbps=1000,riops=1000,'); -ERROR: syntax error (seg1 127.0.0.2:6001 pid=62792) +ERROR: io limit: syntax error, unexpected end of file, expecting IO_KEY +HINT: pg_default:rbps=1000,wbps=1000,riops=1000, + ^ -- wrong key CREATE RESOURCE GROUP rg_test_group WITH (concurrency=10, cpu_max_percent=10, io_limit='pg_default:rrbps=1000'); -ERROR: syntax error (seg0 127.0.0.2:6000 pid=62791) +ERROR: io limit: syntax error, unexpected ID, expecting IO_KEY +HINT: pg_default:rrbps=1000 + ^ -- wrong tablespace name CREATE RESOURCE GROUP rg_test_group WITH (concurrency=10, cpu_max_percent=10, io_limit='pgdefault:rbps=1000,wbps=1000,riops=1000'); -ERROR: tablespace "pgdefault" does not exist (seg0 127.0.0.2:6000 pid=62791) +ERROR: tablespace "pgdefault" does not exist -- use another tablespace select mkdir('@testtablespace@/rg_io_limit_ts_1') from gp_dist_random('gp_id') intersect select mkdir('@testtablespace@/rg_io_limit_ts_1') from gp_id; From b2007200fd9c36ca90b47029eb16500b4bc13439 Mon Sep 17 00:00:00 2001 From: RMT Date: Wed, 20 Sep 2023 13:36:26 +0800 Subject: [PATCH 147/260] io limit: fix double free (#16459) io limit: fix double free. In 'alterResgroupCallback', the io_limit pointer of 'caps' and 'oldCaps' maybe point to the same location, so there is a double free potentially. In 'alterResgroupCallback', the 'oldCaps' will be filled in 'GetResGroupCapabilities', and the assign it to 'caps' via: caps = oldCaps To resolve this problem, the code should free the oldCaps.io_limit, and set it to NIL, when the io_limit has not been altered. So, if the io_limit has not been altered, caps.io_limit = oldCaps.io_limit = NIL. If io_limit has been altered, caps.io_limit != oldCaps.io_limit. --- src/backend/commands/resgroupcmds.c | 10 +++++++++- .../input/resgroup/resgroup_io_limit.source | 6 +++++- .../output/resgroup/resgroup_io_limit.source | 11 ++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/resgroupcmds.c b/src/backend/commands/resgroupcmds.c index ce5ab6d584f..6ebe1ac243e 100644 --- a/src/backend/commands/resgroupcmds.c +++ b/src/backend/commands/resgroupcmds.c @@ -438,6 +438,12 @@ AlterResourceGroup(AlterResourceGroupStmt *stmt) /* Load current resource group capabilities */ GetResGroupCapabilities(pg_resgroupcapability_rel, groupid, &oldCaps); + /* If io_limit not been altered, reset io_limit field to NIL */ + if (limitType != RESGROUP_LIMIT_TYPE_IO_LIMIT && oldCaps.io_limit != NIL) + { + cgroupOpsRoutine->freeio(oldCaps.io_limit); + oldCaps.io_limit = NIL; + } caps = oldCaps; switch (limitType) @@ -479,6 +485,8 @@ AlterResourceGroup(AlterResourceGroupStmt *stmt) } validateCapabilities(pg_resgroupcapability_rel, groupid, &caps, false); + AssertImply(limitType != RESGROUP_LIMIT_TYPE_IO_LIMIT, caps.io_limit == NIL); + AssertImply(limitType == RESGROUP_LIMIT_TYPE_IO_LIMIT, caps.io_limit != NIL); /* cpuset & cpu_max_percent can not coexist. * if cpuset is active, then cpu_max_percent must set to CPU_RATE_LIMIT_DISABLED, @@ -1123,7 +1131,7 @@ alterResgroupCallback(XactEvent event, void *arg) if (callbackCtx->caps.io_limit != NIL) cgroupOpsRoutine->freeio(callbackCtx->caps.io_limit); - if (callbackCtx->caps.io_limit != NIL) + if (callbackCtx->oldCaps.io_limit != NIL) cgroupOpsRoutine->freeio(callbackCtx->oldCaps.io_limit); pfree(callbackCtx); diff --git a/src/test/isolation2/input/resgroup/resgroup_io_limit.source b/src/test/isolation2/input/resgroup/resgroup_io_limit.source index 8b0c4d69dc6..a09414f3f99 100644 --- a/src/test/isolation2/input/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/input/resgroup/resgroup_io_limit.source @@ -56,6 +56,8 @@ ALTER RESOURCE GROUP rg_test_group5 SET io_limit 'rg_io_limit_ts_1:rbps=1000,wbp SELECT check_cgroup_io_max('rg_test_group5', 'rg_io_limit_ts_1', 'rbps=1048576000 wbps=1048576000 riops=max wiops=max'); +ALTER RESOURCE GROUP rg_test_group5 SET concurrency 1; + SELECT check_clear_io_max('rg_test_group5'); -- fault injector @@ -67,11 +69,13 @@ SELECT groupid, groupname, cpuset FROM gp_toolkit.gp_resgroup_config WHERE group SELECT gp_inject_fault('create_resource_group_fail', 'reset', 1); --- start_ignore -- view +-- start_ignore SELECT * from gp_toolkit.gp_resgroup_iostats_per_host; -- end_ignore +SELECT count(*) > 0 as r from gp_toolkit.gp_resgroup_iostats_per_host; + -- clean DROP RESOURCE GROUP rg_test_group1; DROP RESOURCE GROUP rg_test_group2; diff --git a/src/test/isolation2/output/resgroup/resgroup_io_limit.source b/src/test/isolation2/output/resgroup/resgroup_io_limit.source index 114522afa75..3e7bd7f2134 100644 --- a/src/test/isolation2/output/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/output/resgroup/resgroup_io_limit.source @@ -107,6 +107,9 @@ SELECT check_cgroup_io_max('rg_test_group5', 'rg_io_limit_ts_1', 'rbps=104857600 t (1 row) +ALTER RESOURCE GROUP rg_test_group5 SET concurrency 1; +ALTER + SELECT check_clear_io_max('rg_test_group5'); check_clear_io_max -------------------- @@ -134,8 +137,8 @@ SELECT gp_inject_fault('create_resource_group_fail', 'reset', 1); Success: (1 row) --- start_ignore -- view +-- start_ignore SELECT * from gp_toolkit.gp_resgroup_iostats_per_host; rsgname | hostname | tablespace | rbps | wbps | riops | wiops ----------------+----------+------------------+------+------+-------+------- @@ -147,6 +150,12 @@ SELECT * from gp_toolkit.gp_resgroup_iostats_per_host; (5 rows) -- end_ignore +SELECT count(*) > 0 as r from gp_toolkit.gp_resgroup_iostats_per_host; + r +------ + t +(1 row) + -- clean DROP RESOURCE GROUP rg_test_group1; DROP From 11e13745df3132a50f7b3cb0823612cc9a13dd30 Mon Sep 17 00:00:00 2001 From: RMT Date: Tue, 5 Dec 2023 14:20:10 +0800 Subject: [PATCH 148/260] Add one more hierarchy for resgroup cgroup root (#16732) Add one more hierarchy for resource group when use cgroup v2. Current leaf node in the gpdb cgroup hierarchy is: /sys/fs/cgroup/gpdb/, it's ok for gpdb workflow. But for some extensions which want to use gpdb cgroup hierarchy, it's not convenient. Extensions like plcontainer want create sub-cgroup under /sys/fs/cgroup/ as new leaf node, it's not possible in current hierarchy, because of no internal processes constraint of cgroup v2. This commit use a new hierarchy to adopt extensions which want to use gpdb cgroup hierarchy, and the modification is tiny: move processes from /sys/fs/cgroup//cgroup.procs to /sys/fs/cgroup/gpdb//queries/cgroup.procs, and keep limitations in /sys/fs/cgroup/. With this modification, extensions which want to use gpdb cgroup hierarchy can create sub cgroup under /sys/fs/cgroup/gpdb/. For example, plcontainer will create a cgroup /sys/fs/cgroup/gpdb//docker-12345 and put processes into it. --- src/backend/utils/resgroup/cgroup-ops-linux-v1.c | 10 +++++----- src/backend/utils/resgroup/cgroup-ops-linux-v2.c | 15 ++++++++++----- src/backend/utils/resgroup/cgroup.c | 8 +++++--- src/include/utils/cgroup.h | 4 +++- .../resgroup/resgroup_auxiliary_tools_v2.out | 2 +- .../sql/resgroup/resgroup_auxiliary_tools_v2.sql | 2 +- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/backend/utils/resgroup/cgroup-ops-linux-v1.c b/src/backend/utils/resgroup/cgroup-ops-linux-v1.c index fffba070a3f..0ad53ee35ab 100644 --- a/src/backend/utils/resgroup/cgroup-ops-linux-v1.c +++ b/src/backend/utils/resgroup/cgroup-ops-linux-v1.c @@ -652,11 +652,11 @@ createcgroup_v1(Oid group) { int retry = 0; - if (!createDir(group, CGROUP_COMPONENT_CPU) || - !createDir(group, CGROUP_COMPONENT_CPUACCT) || - !createDir(group, CGROUP_COMPONENT_MEMORY) || + if (!createDir(group, CGROUP_COMPONENT_CPU, "") || + !createDir(group, CGROUP_COMPONENT_CPUACCT, "") || + !createDir(group, CGROUP_COMPONENT_MEMORY, "") || (gp_resource_group_enable_cgroup_cpuset && - !createDir(group, CGROUP_COMPONENT_CPUSET))) + !createDir(group, CGROUP_COMPONENT_CPUSET, ""))) { CGROUP_ERROR("can't create cgroup for resource group '%d': %m", group); } @@ -705,7 +705,7 @@ create_default_cpuset_group_v1(void) CGroupComponentType component = CGROUP_COMPONENT_CPUSET; int retry = 0; - if (!createDir(DEFAULT_CPUSET_GROUP_ID, component)) + if (!createDir(DEFAULT_CPUSET_GROUP_ID, component, "")) { CGROUP_ERROR("can't create cpuset cgroup for resgroup '%d': %m", DEFAULT_CPUSET_GROUP_ID); diff --git a/src/backend/utils/resgroup/cgroup-ops-linux-v2.c b/src/backend/utils/resgroup/cgroup-ops-linux-v2.c index 69d2b1b0461..6b5f667fe7f 100644 --- a/src/backend/utils/resgroup/cgroup-ops-linux-v2.c +++ b/src/backend/utils/resgroup/cgroup-ops-linux-v2.c @@ -386,7 +386,8 @@ createcgroup_v2(Oid group) { int retry = 0; - if (!createDir(group, CGROUP_COMPONENT_PLAIN)) + if (!createDir(group, CGROUP_COMPONENT_PLAIN, "") || + !createDir(group, CGROUP_COMPONENT_PLAIN, CGROUPV2_LEAF_INDENTIFIER)) { CGROUP_ERROR("can't create cgroup for resource group '%d': %m", group); } @@ -418,7 +419,7 @@ create_default_cpuset_group_v2(void) CGroupComponentType component = CGROUP_COMPONENT_PLAIN; int retry = 0; - if (!createDir(DEFAULT_CPUSET_GROUP_ID, component)) + if (!createDir(DEFAULT_CPUSET_GROUP_ID, component, "")) { CGROUP_ERROR("can't create cpuset cgroup for resgroup '%d': %m", DEFAULT_CPUSET_GROUP_ID); @@ -466,6 +467,7 @@ create_default_cpuset_group_v2(void) static void attachcgroup_v2(Oid group, int pid, bool is_cpuset_enabled) { + char path_of_leaf[MAXPATHLEN]; /* * needn't write to file if the pid has already been written in. * Unless it has not been written or the group has changed or @@ -474,8 +476,9 @@ attachcgroup_v2(Oid group, int pid, bool is_cpuset_enabled) if (IsUnderPostmaster && group == currentGroupIdInCGroup) return; + pg_sprintf(path_of_leaf, "%s/cgroup.procs", CGROUPV2_LEAF_INDENTIFIER); writeInt64(group, BASEDIR_GPDB, CGROUP_COMPONENT_PLAIN, - "cgroup.procs", pid); + path_of_leaf, pid); /* * Do not assign the process to cgroup/memory for now. @@ -499,6 +502,7 @@ detachcgroup_v2(Oid group, CGroupComponentType component, int fd_dir) { char path[MAX_CGROUP_PATHLEN]; size_t path_size = sizeof(path); + char path_of_leaf[MAXPATHLEN]; char *buf; size_t buf_size; @@ -533,7 +537,8 @@ detachcgroup_v2(Oid group, CGroupComponentType component, int fd_dir) } \ } while (0) - buildPath(group, BASEDIR_GPDB, component, "cgroup.procs", path, path_size); + pg_sprintf(path_of_leaf, "%s/cgroup.procs", CGROUPV2_LEAF_INDENTIFIER); + buildPath(group, BASEDIR_GPDB, component, path_of_leaf, path, path_size); fdr = open(path, O_RDONLY); @@ -561,7 +566,7 @@ detachcgroup_v2(Oid group, CGroupComponentType component, int fd_dir) if (buf_len == 0) return; - buildPath(DEFAULTRESGROUP_OID, BASEDIR_GPDB, component, "cgroup.procs", + buildPath(DEFAULTRESGROUP_OID, BASEDIR_GPDB, component, path_of_leaf, path, path_size); fdw = open(path, O_WRONLY); diff --git a/src/backend/utils/resgroup/cgroup.c b/src/backend/utils/resgroup/cgroup.c index a996e31aa51..839090f39e4 100644 --- a/src/backend/utils/resgroup/cgroup.c +++ b/src/backend/utils/resgroup/cgroup.c @@ -285,12 +285,12 @@ lockDir(const char *path, bool block) * Create cgroup dir */ bool -createDir(Oid group, CGroupComponentType component) +createDir(Oid group, CGroupComponentType component, char *filename) { char path[MAX_CGROUP_PATHLEN]; size_t path_size = sizeof(path); - buildPath(group, BASEDIR_GPDB, component, "", path, path_size); + buildPath(group, BASEDIR_GPDB, component, filename, path, path_size); if (mkdir(path, 0755) && errno != EEXIST) return false; @@ -468,12 +468,14 @@ deleteDir(Oid group, CGroupComponentType component, const char *filename, bool u { char path[MAX_CGROUP_PATHLEN]; + char leaf_path[MAX_CGROUP_PATHLEN]; size_t path_size = sizeof(path); int retry = unassign ? 0 : MAX_RETRY - 1; int fd_dir; buildPath(group, BASEDIR_GPDB, component, "", path, path_size); + buildPath(group, BASEDIR_GPDB, component, CGROUPV2_LEAF_INDENTIFIER, leaf_path, path_size); /* * To prevent race condition between multiple processes we require a dir @@ -497,7 +499,7 @@ deleteDir(Oid group, CGroupComponentType component, const char *filename, bool u if (unassign) detachcgroup(group, component, fd_dir); - if (rmdir(path)) + if (rmdir(leaf_path) || rmdir(path)) { int err = errno; diff --git a/src/include/utils/cgroup.h b/src/include/utils/cgroup.h index b9c0fa249a2..39ef82aeb52 100644 --- a/src/include/utils/cgroup.h +++ b/src/include/utils/cgroup.h @@ -47,6 +47,8 @@ /* This is the default value about Linux Control Group */ #define DEFAULT_CPU_PERIOD_US 100000LL +/* The name of leaf cgroup when use cgroup v2 */ +#define CGROUPV2_LEAF_INDENTIFIER "queries" /* * Resource Group underlying component types. @@ -168,7 +170,7 @@ extern void setComponentDir(CGroupComponentType component, const char *dir); extern int lockDir(const char *path, bool block); /* Create cgroup dir. */ -extern bool createDir(Oid group, CGroupComponentType comp); +extern bool createDir(Oid group, CGroupComponentType comp, char *filename); /* Delete cgroup dir. */ extern bool deleteDir(Oid group, CGroupComponentType component, const char *filename, bool unassign, void (*detachcgroup) (Oid group, CGroupComponentType component, int fd_dir)); diff --git a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out index e2e959374b2..93c1d1aa4df 100644 --- a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out +++ b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out @@ -118,7 +118,7 @@ sql = "select sess_id from pg_stat_activity where pid = '%d'" % pid result = plp sql = "select groupid from gp_toolkit.gp_resgroup_config where groupname='%s'" % groupname result = plpy.execute(sql) groupid = result[0]['groupid'] sql = "select hostname from gp_segment_configuration group by hostname" result = plpy.execute(sql) hosts = [_['hostname'] for _ in result] def get_result(host): stdout = subprocess.run(["ssh", "{}".format(host), "ps -ef | grep postgres | grep con{} | grep -v grep | awk '{{print $2}}'".format(session_id)], stdout=subprocess.PIPE, check=True).stdout session_pids = stdout.splitlines() -path = "/sys/fs/cgroup/gpdb/{}/cgroup.procs".format(groupid) stdout = subprocess.run(["ssh", "{}".format(host), "cat {}".format(path)], stdout=subprocess.PIPE, check=True).stdout cgroups_pids = stdout.splitlines() +path = "/sys/fs/cgroup/gpdb/{}/queries/cgroup.procs".format(groupid) stdout = subprocess.run(["ssh", "{}".format(host), "cat {}".format(path)], stdout=subprocess.PIPE, check=True).stdout cgroups_pids = stdout.splitlines() return set(session_pids).issubset(set(cgroups_pids)) for host in hosts: if not get_result(host): return False return True $$ LANGUAGE plpython3u; diff --git a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql index 88f66c4f18d..e2d8db51888 100644 --- a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql +++ b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql @@ -259,7 +259,7 @@ $$ LANGUAGE plpython3u; stdout=subprocess.PIPE, check=True).stdout session_pids = stdout.splitlines() - path = "/sys/fs/cgroup/gpdb/{}/cgroup.procs".format(groupid) + path = "/sys/fs/cgroup/gpdb/{}/queries/cgroup.procs".format(groupid) stdout = subprocess.run(["ssh", "{}".format(host), "cat {}".format(path)], stdout=subprocess.PIPE, check=True).stdout cgroups_pids = stdout.splitlines() From 8b84d37d0570e1aae739b419601fec4ec66b6f90 Mon Sep 17 00:00:00 2001 From: RMT Date: Tue, 12 Dec 2023 22:49:00 +0800 Subject: [PATCH 149/260] delete cgroup leaf dir only when use group-v2 (#16830) delete cgroup leaf dir only when use group-v2. There is no leaf directory in gpdb cgroup when use cgroup v1, so the rmdir(leaf_path) will always return non-zero values, then the rmdir(path) will be ignored. When drop some resource groups, when corresponding cgroup dir cannot be removed because the rmdire(path) is not executed, this behavior will cause the failure of CI. This commit add some logic to check resource group version in deleteDir, when use group-v1, rmdir(leaf_path) will be ignored. --- src/backend/utils/resgroup/cgroup.c | 58 ++++++++++++++++++----------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/src/backend/utils/resgroup/cgroup.c b/src/backend/utils/resgroup/cgroup.c index 839090f39e4..504c8c2fcba 100644 --- a/src/backend/utils/resgroup/cgroup.c +++ b/src/backend/utils/resgroup/cgroup.c @@ -466,16 +466,20 @@ bool deleteDir(Oid group, CGroupComponentType component, const char *filename, bool unassign, void (*detachcgroup) (Oid group, CGroupComponentType component, int fd_dir)) { - char path[MAX_CGROUP_PATHLEN]; char leaf_path[MAX_CGROUP_PATHLEN]; size_t path_size = sizeof(path); + bool is_v2 = Gp_resource_manager_policy == RESOURCE_MANAGER_POLICY_GROUP_V2; + int path_cnt = 2; + char *paths[2] = {leaf_path, path}; int retry = unassign ? 0 : MAX_RETRY - 1; int fd_dir; + int i; buildPath(group, BASEDIR_GPDB, component, "", path, path_size); - buildPath(group, BASEDIR_GPDB, component, CGROUPV2_LEAF_INDENTIFIER, leaf_path, path_size); + if (is_v2) + buildPath(group, BASEDIR_GPDB, component, CGROUPV2_LEAF_INDENTIFIER, leaf_path, path_size); /* * To prevent race condition between multiple processes we require a dir @@ -494,37 +498,47 @@ deleteDir(Oid group, CGroupComponentType component, const char *filename, bool u if (filename) writeInt64(group, BASEDIR_GPDB, component, filename, 0); + if (!unassign) + detachcgroup = NULL; + + i = is_v2 ? 0 : 1; while (++retry <= MAX_RETRY) { - if (unassign) + if (detachcgroup) detachcgroup(group, component, fd_dir); - if (rmdir(leaf_path) || rmdir(path)) + for (; i < path_cnt; ++i) { - int err = errno; - - if (err == EBUSY && unassign && retry < MAX_RETRY) + if (rmdir(paths[i])) { - elog(DEBUG1, "can't remove dir, will retry: %s: %s", - path, strerror(err)); - pg_usleep(1000); - continue; + int err = errno; + + if (err == EBUSY && unassign && retry < MAX_RETRY) + { + elog(DEBUG1, "can't remove dir, will retry: %s: %s", + paths[i], strerror(err)); + pg_usleep(1000); + break; + } + + if (err != ENOENT) + { + elog(DEBUG1, "can't remove dir, ignore the error: %s: %s", + paths[i], strerror(err)); + goto error; + } } - /* - * we don't check for ENOENT again as we already acquired the lock - * on this dir and the dir still exist at that time, so if then - * it's removed by other processes then it's a bug. - */ - elog(DEBUG1, "can't remove dir, ignore the error: %s: %s", - path, strerror(err)); + detachcgroup = NULL; + + elog(DEBUG1, "cgroup dir '%s' removed", paths[i]); } - break; - } - if (retry <= MAX_RETRY) - elog(DEBUG1, "cgroup dir '%s' removed", path); + if (i >= path_cnt) + break; + } +error: /* close() also releases the lock */ close(fd_dir); From cf9146791f9ad142d428f60cf4f65c972eab1382 Mon Sep 17 00:00:00 2001 From: RMT Date: Tue, 19 Dec 2023 14:07:51 +0800 Subject: [PATCH 150/260] Add guc: gp_resource_group_cgroup_parent (#16738) Add guc: gp_resource_group_cgroup_parent (only for cgroup v2). Current gpdb doesn't support change root cgroup path of resource group. For some situations, it's better if gpdb can change the root cgroup path of resource group. For example, on the OS with systemd, user maybe want to create a delegated cgroup to gpdb via systemd, but the delegated cgroup must end with .service which typically is /sys/fs/cgroup/gpdb.service. And in other OS without systemd, user maybe want to use /sys/fs/cgroup/gpdb or other locations directly. So add the gp_resource_group_cgroup_parent can make the resource group more flexible. --- gpMgmt/bin/gpconfig | 15 +++++++ src/backend/cdb/cdbvars.c | 40 +++++++++++++++++++ src/backend/utils/misc/guc_gp.c | 12 ++++++ src/backend/utils/resgroup/cgroup.c | 2 +- src/include/utils/guc.h | 1 + src/include/utils/resgroup.h | 1 + src/include/utils/unsync_guc_name.h | 1 + .../resgroup/resgroup_auxiliary_tools_v2.out | 2 + .../resgroup/resgroup_auxiliary_tools_v2.sql | 1 + 9 files changed, 74 insertions(+), 1 deletion(-) diff --git a/gpMgmt/bin/gpconfig b/gpMgmt/bin/gpconfig index 3d5495bd01b..f4e3ce7c62d 100755 --- a/gpMgmt/bin/gpconfig +++ b/gpMgmt/bin/gpconfig @@ -15,6 +15,7 @@ import os import sys import re +import psutil try: from gppylib.gpparseopts import OptParser, OptChecker @@ -170,6 +171,20 @@ class Guc: return msg elif newval != "'queue'": return "the value of gp_resource_manager must be 'group' or 'group-v2' or 'queue'" + elif self.name == "gp_resource_group_cgroup_parent": + base = newval.strip("'") + if not re.match("^[0-9a-zA-Z][-._0-9a-zA-Z]*$", base): + return "resource group cgroup parent can only contains alphabet, number, and non-leading . _ -" + + path = None + for partition in psutil.disk_partitions(all=True): + if partition.fstype == "cgroup2": + path = partition.mountpoint + "/" + base + break + if path is None: + return "cannot find cgroup v2 mountpoint" + if not os.path.isdir(path): + return "'%s' doesn't exists or is not a directory" % path elif self.name == 'unix_socket_permissions': if newval[0] != '0': diff --git a/src/backend/cdb/cdbvars.c b/src/backend/cdb/cdbvars.c index 9db3389e0bf..04c81848b05 100644 --- a/src/backend/cdb/cdbvars.c +++ b/src/backend/cdb/cdbvars.c @@ -17,9 +17,11 @@ * *------------------------------------------------------------------------- */ +#include "catalog/pg_collation_d.h" #include "postgres.h" #include "miscadmin.h" +#include "regex/regex.h" #include "utils/guc.h" #include "cdb/cdbvars.h" #include "libpq-fe.h" @@ -567,6 +569,44 @@ gpvars_show_gp_resource_manager_policy(void) } } +bool gpvars_check_gp_resource_group_cgroup_parent(char **newval, void **extra, GucSource source) +{ + int regres; + char err[128]; + regex_t re; + char *pattern = "^[0-9a-zA-Z][-._0-9a-zA-Z]*$"; + pg_wchar *wpattern = palloc((strlen(pattern) + 1) * sizeof(pg_wchar)); + int wlen = pg_mb2wchar_with_len(pattern, wpattern, strlen(pattern)); + pg_wchar *data = palloc((strlen(*newval) + 1) * sizeof(pg_wchar)); + int data_len = pg_mb2wchar_with_len(*newval, data, sizeof(*newval)); + bool match = true; + + regres = pg_regcomp(&re, wpattern, wlen, REG_ADVANCED, DEFAULT_COLLATION_OID); + if (regres != REG_OKAY) + { + pg_regerror(regres, &re, err, sizeof(err)); + GUC_check_errmsg("compile regex failed: %s", err); + + pfree(wpattern); + pfree(data); + + return false; + } + + regres = pg_regexec(&re, data, data_len, 0, NULL, 0, NULL, 0); + if (regres != REG_OKAY) + { + match = false; + GUC_check_errmsg("gp_resource_group_cgroup_parent can only contains alphabet, number and non-leading . _ -"); + } + + pg_regfree(&re); + pfree(wpattern); + pfree(data); + + return match; +} + /* * gpvars_assign_statement_mem */ diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 2c373e5a582..cc98e66c089 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -239,6 +239,7 @@ double gp_resource_group_cpu_limit; bool gp_resource_group_bypass; bool gp_resource_group_bypass_catalog_query; bool gp_resource_group_bypass_direct_dispatch; +char *gp_resource_group_cgroup_parent; /* Metrics collector debug GUC */ bool vmem_process_interrupt = false; @@ -4900,6 +4901,17 @@ struct config_string ConfigureNamesString_gp[] = gpvars_show_gp_resource_manager_policy, }, + { + {"gp_resource_group_cgroup_parent", PGC_POSTMASTER, RESOURCES, + gettext_noop("The root of gpdb cgroup hierarchy."), + NULL, + GUC_SUPERUSER_ONLY + }, + &gp_resource_group_cgroup_parent, + "gpdb.service", + gpvars_check_gp_resource_group_cgroup_parent, NULL, NULL + }, + /* for pljava */ { {"pljava_vmoptions", PGC_SUSET, CUSTOM_OPTIONS, diff --git a/src/backend/utils/resgroup/cgroup.c b/src/backend/utils/resgroup/cgroup.c index 504c8c2fcba..7c783fbbf6d 100644 --- a/src/backend/utils/resgroup/cgroup.c +++ b/src/backend/utils/resgroup/cgroup.c @@ -174,7 +174,7 @@ buildPathSafe(Oid group, * for cgroup v2, we just have the top level and child level, * don't need to care about the component. */ - base_dir = base == BASEDIR_GPDB ? "gpdb" : ""; + base_dir = base == BASEDIR_GPDB ? gp_resource_group_cgroup_parent : ""; len = snprintf(path, path_size, "%s/%s%s/%s", cgroupSystemInfo->cgroup_dir, base_dir, group_dir, filename); } diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index b12d29f1e16..13d7e79e262 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -860,6 +860,7 @@ extern void gpvars_assign_gp_resource_manager_policy(const char *newval, void *e extern const char *gpvars_show_gp_resource_manager_policy(void); extern const char *gpvars_assign_gp_resqueue_memory_policy(const char *newval, bool doit, GucSource source); extern const char *gpvars_show_gp_resqueue_memory_policy(void); +extern bool gpvars_check_gp_resource_group_cgroup_parent(char **newval, void **extra, GucSource source); extern bool gpvars_check_statement_mem(int *newval, void **extra, GucSource source); extern bool gpvars_check_rg_query_fixed_mem(int *newval, void **extra, GucSource source); extern int guc_name_compare(const char *namea, const char *nameb); diff --git a/src/include/utils/resgroup.h b/src/include/utils/resgroup.h index 035fc180161..dd03b842fd2 100644 --- a/src/include/utils/resgroup.h +++ b/src/include/utils/resgroup.h @@ -109,6 +109,7 @@ extern int gp_resource_group_queuing_timeout; extern bool gp_resource_group_bypass_catalog_query; extern int gp_resource_group_move_timeout; extern bool gp_resource_group_bypass_direct_dispatch; +extern char *gp_resource_group_cgroup_parent; /* * Non-GUC global variables. diff --git a/src/include/utils/unsync_guc_name.h b/src/include/utils/unsync_guc_name.h index 37f629e6e97..97b9df29814 100644 --- a/src/include/utils/unsync_guc_name.h +++ b/src/include/utils/unsync_guc_name.h @@ -260,6 +260,7 @@ "gp_resource_group_bypass_direct_dispatch", "gp_resource_group_queuing_timeout", "gp_resource_group_move_timeout", + "gp_resource_group_cgroup_parent", "gp_resource_manager", "gp_resqueue_memory_policy", "gp_resqueue_priority", diff --git a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out index 93c1d1aa4df..bc5e8764091 100644 --- a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out +++ b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out @@ -23,6 +23,8 @@ ERROR: language "plpython3u" already exists -- start_ignore ! gpconfig -c gp_resource_manager -v group-v2; +! gpconfig -c gp_resource_group_cgroup_parent -v "gpdb" + ! gpconfig -c max_connections -v 250 -m 25; ! gpconfig -c runaway_detector_activation_percent -v 100; diff --git a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql index e2d8db51888..b762850468c 100644 --- a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql +++ b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql @@ -21,6 +21,7 @@ CREATE LANGUAGE plpython3u; -- enable resource group and restart cluster. -- start_ignore ! gpconfig -c gp_resource_manager -v group-v2; +! gpconfig -c gp_resource_group_cgroup_parent -v "gpdb" ! gpconfig -c max_connections -v 250 -m 25; ! gpconfig -c runaway_detector_activation_percent -v 100; ! gpstop -rai; From 2616a63990d237a3b926af30f595841d3a840364 Mon Sep 17 00:00:00 2001 From: RMT Date: Tue, 27 Feb 2024 15:57:19 +0800 Subject: [PATCH 151/260] Fix no response when alter io_limit of resource group to '-1' (#17095) Fix no response when alter io_limit of resource group to '-1'. There is no action when ALTER RESOURCE GROUP xxx SET IO_LIMIT '-1' before. Now the action is that clear the content of io.max and update relation pg_resgroupcapability. --- src/backend/commands/resgroupcmds.c | 11 +++++++++- src/backend/utils/resgroup/resgroup.c | 12 ++++++----- .../resgroup/resgroup_auxiliary_tools_v2.out | 6 ++++++ .../input/resgroup/resgroup_io_limit.source | 10 +++++++++ .../output/resgroup/resgroup_io_limit.source | 21 +++++++++++++++++++ .../resgroup/resgroup_auxiliary_tools_v2.sql | 13 ++++++++++++ 6 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/backend/commands/resgroupcmds.c b/src/backend/commands/resgroupcmds.c index 6ebe1ac243e..9be40eba69f 100644 --- a/src/backend/commands/resgroupcmds.c +++ b/src/backend/commands/resgroupcmds.c @@ -486,7 +486,6 @@ AlterResourceGroup(AlterResourceGroupStmt *stmt) validateCapabilities(pg_resgroupcapability_rel, groupid, &caps, false); AssertImply(limitType != RESGROUP_LIMIT_TYPE_IO_LIMIT, caps.io_limit == NIL); - AssertImply(limitType == RESGROUP_LIMIT_TYPE_IO_LIMIT, caps.io_limit != NIL); /* cpuset & cpu_max_percent can not coexist. * if cpuset is active, then cpu_max_percent must set to CPU_RATE_LIMIT_DISABLED, @@ -519,6 +518,16 @@ AlterResourceGroup(AlterResourceGroupStmt *stmt) updateResgroupCapabilityEntry(pg_resgroupcapability_rel, groupid, RESGROUP_LIMIT_TYPE_IO_LIMIT, 0, cgroupOpsRoutine->dumpio(caps.io_limit)); + else + { + /* + * When alter io_limit to -1 , the caps.io_limit will be nil. + * So we should update the io_limit in capability relation to -1. + */ + updateResgroupCapabilityEntry(pg_resgroupcapability_rel, + groupid, RESGROUP_LIMIT_TYPE_IO_LIMIT, + 0, DefaultIOLimit); + } } else { diff --git a/src/backend/utils/resgroup/resgroup.c b/src/backend/utils/resgroup/resgroup.c index 4a6c9c14b94..72f1ac75d41 100644 --- a/src/backend/utils/resgroup/resgroup.c +++ b/src/backend/utils/resgroup/resgroup.c @@ -807,11 +807,13 @@ ResGroupAlterOnCommit(const ResourceGroupCallbackContext *callbackCtx) } else if (callbackCtx->limittype == RESGROUP_LIMIT_TYPE_IO_LIMIT) { - if (callbackCtx->caps.io_limit != NIL) - { - cgroupOpsRoutine->cleario(callbackCtx->groupid); - cgroupOpsRoutine->setio(callbackCtx->groupid, callbackCtx->caps.io_limit); - } + /* + * When alter io_limit to -1 , the caps.io_limit will be nil. + * There are no errors in io_limit string when caps.io_limit is nil. + * When alter io_limit, caps.io_limit is nil means this resource group's io_limit should be clear. + */ + cgroupOpsRoutine->cleario(callbackCtx->groupid); + cgroupOpsRoutine->setio(callbackCtx->groupid, callbackCtx->caps.io_limit); } /* reset default group if cpuset has changed */ diff --git a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out index bc5e8764091..de159f4910e 100644 --- a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out +++ b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out @@ -157,3 +157,9 @@ clear_io_max(groupid) cgroup_path = "/sys/fs/cgroup/gpdb/%d/io.max" % groupid return os.stat(cgroup_path).st_size == 0 $$ LANGUAGE plpython3u; CREATE + +0: CREATE OR REPLACE FUNCTION check_io_max_empty(groupname text) RETURNS BOOL AS $$ import os +# get group oid sql = "select groupid from gp_toolkit.gp_resgroup_config where groupname = '%s'" % groupname result = plpy.execute(sql) groupid = result[0]['groupid'] +cgroup_path = "/sys/fs/cgroup/gpdb/%d/io.max" % groupid +return os.stat(cgroup_path).st_size == 0 $$ LANGUAGE plpython3u; +CREATE diff --git a/src/test/isolation2/input/resgroup/resgroup_io_limit.source b/src/test/isolation2/input/resgroup/resgroup_io_limit.source index a09414f3f99..9a5fe2dc2f7 100644 --- a/src/test/isolation2/input/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/input/resgroup/resgroup_io_limit.source @@ -69,6 +69,15 @@ SELECT groupid, groupname, cpuset FROM gp_toolkit.gp_resgroup_config WHERE group SELECT gp_inject_fault('create_resource_group_fail', 'reset', 1); +-- clear limitations +CREATE RESOURCE GROUP rg_test_group7 WITH (concurrency=10, cpu_max_percent=10, io_limit='rg_io_limit_ts_1:rbps=1000,wbps=1000'); + +SELECT check_cgroup_io_max('rg_test_group7', 'rg_io_limit_ts_1', 'rbps=1048576000 wbps=1048576000 riops=max wiops=max'); + +ALTER RESOURCE GROUP rg_test_group7 SET IO_LIMIT '-1'; + +SELECT check_io_max_empty('rg_test_group7'); + -- view -- start_ignore SELECT * from gp_toolkit.gp_resgroup_iostats_per_host; @@ -82,6 +91,7 @@ DROP RESOURCE GROUP rg_test_group2; DROP RESOURCE GROUP rg_test_group3; DROP RESOURCE GROUP rg_test_group4; DROP RESOURCE GROUP rg_test_group5; +DROP RESOURCE GROUP rg_test_group7; DROP TABLESPACE rg_io_limit_ts_1; diff --git a/src/test/isolation2/output/resgroup/resgroup_io_limit.source b/src/test/isolation2/output/resgroup/resgroup_io_limit.source index 3e7bd7f2134..ea7957bc1cf 100644 --- a/src/test/isolation2/output/resgroup/resgroup_io_limit.source +++ b/src/test/isolation2/output/resgroup/resgroup_io_limit.source @@ -137,6 +137,25 @@ SELECT gp_inject_fault('create_resource_group_fail', 'reset', 1); Success: (1 row) +-- clear limitations +CREATE RESOURCE GROUP rg_test_group7 WITH (concurrency=10, cpu_max_percent=10, io_limit='rg_io_limit_ts_1:rbps=1000,wbps=1000'); +CREATE + +SELECT check_cgroup_io_max('rg_test_group7', 'rg_io_limit_ts_1', 'rbps=1048576000 wbps=1048576000 riops=max wiops=max'); + check_cgroup_io_max +--------------------- + t +(1 row) + +ALTER RESOURCE GROUP rg_test_group7 SET IO_LIMIT '-1'; +ALTER + +SELECT check_io_max_empty('rg_test_group7'); + check_io_max_empty +-------------------- + t +(1 row) + -- view -- start_ignore SELECT * from gp_toolkit.gp_resgroup_iostats_per_host; @@ -167,6 +186,8 @@ DROP RESOURCE GROUP rg_test_group4; DROP DROP RESOURCE GROUP rg_test_group5; DROP +DROP RESOURCE GROUP rg_test_group7; +DROP DROP TABLESPACE rg_io_limit_ts_1; DROP diff --git a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql index b762850468c..e274acbb8f3 100644 --- a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql +++ b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql @@ -373,3 +373,16 @@ $$ LANGUAGE plpython3u; return os.stat(cgroup_path).st_size == 0 $$ LANGUAGE plpython3u; + +0: CREATE OR REPLACE FUNCTION check_io_max_empty(groupname text) RETURNS BOOL AS $$ + import os + + # get group oid + sql = "select groupid from gp_toolkit.gp_resgroup_config where groupname = '%s'" % groupname + result = plpy.execute(sql) + groupid = result[0]['groupid'] + + cgroup_path = "/sys/fs/cgroup/gpdb/%d/io.max" % groupid + + return os.stat(cgroup_path).st_size == 0 +$$ LANGUAGE plpython3u; From b3cd9b994d038dac3203d9fe5dc567e008ff4111 Mon Sep 17 00:00:00 2001 From: zhangyue Date: Sun, 31 Aug 2025 07:02:33 +0000 Subject: [PATCH 152/260] Fix gpcheckresgroupv2impl to use dynamic cgroup parent from GUC parameter This commit fixes issues introduced in "Add guc: gp_resource_group_cgroup_parent (#16738)" where the gp_resource_group_cgroup_parent GUC parameter was added but the gpcheckresgroupv2impl script still used hardcoded "gpdb" paths. Changes: - Implement get_cgroup_parent() method to dynamically retrieve the gp_resource_group_cgroup_parent value from database - Replace all hardcoded "gpdb" paths with dynamic cgroup parent value - Improve error handling in cgroup.c with more descriptive error messages - Fix test configuration order: set gp_resource_group_cgroup_parent before enabling gp_resource_manager=group-v2 to avoid validation failures This ensures the cgroup validation script works correctly with custom cgroup parent directories configured via the GUC parameter, making the resource group feature more flexible for different deployment scenarios. --- gpMgmt/bin/gpcheckresgroupv2impl | 59 +++++++++++++++---- src/backend/utils/resgroup/cgroup.c | 12 ++++ src/include/utils/cgroup.h | 9 +++ .../resgroup/resgroup_auxiliary_tools_v2.out | 19 +++++- .../resgroup/resgroup_auxiliary_tools_v2.sql | 12 +++- 5 files changed, 95 insertions(+), 16 deletions(-) diff --git a/gpMgmt/bin/gpcheckresgroupv2impl b/gpMgmt/bin/gpcheckresgroupv2impl index 4e15d048eb1..b71d2562628 100755 --- a/gpMgmt/bin/gpcheckresgroupv2impl +++ b/gpMgmt/bin/gpcheckresgroupv2impl @@ -2,8 +2,17 @@ # Copyright (c) 2017, VMware, Inc. or its affiliates. import os +import sys from functools import reduce +# Add the gppylib path to sys.path to import database connection modules +try: + from gppylib.db import dbconn + from pg import DatabaseError +except ImportError as err: + sys.exit('Cannot import modules. Please check that you have sourced ' + 'cloudberry-env.sh. Detail: ' + str(err)) + class ValidationException(Exception): def __init__(self, message): @@ -29,6 +38,7 @@ class CgroupValidationVersionTwo(CgroupValidation): def __init__(self): self.mount_point = self.detect_cgroup_mount_point() self.tab = {"r": os.R_OK, "w": os.W_OK, "x": os.X_OK, "f": os.F_OK} + self.cgroup_parent = self.get_cgroup_parent() def validate_all(self): """ @@ -43,23 +53,46 @@ class CgroupValidationVersionTwo(CgroupValidation): self.validate_permission("cgroup.procs", "rw") - self.validate_permission("gpdb/", "rwx") - self.validate_permission("gpdb/cgroup.procs", "rw") + self.validate_permission(self.cgroup_parent + "/", "rwx") + self.validate_permission(self.cgroup_parent + "/cgroup.procs", "rw") + + self.validate_permission(self.cgroup_parent + "/cpu.max", "rw") + self.validate_permission(self.cgroup_parent + "/cpu.weight", "rw") + self.validate_permission(self.cgroup_parent + "/cpu.weight.nice", "rw") + self.validate_permission(self.cgroup_parent + "/cpu.stat", "r") - self.validate_permission("gpdb/cpu.max", "rw") - self.validate_permission("gpdb/cpu.weight", "rw") - self.validate_permission("gpdb/cpu.weight.nice", "rw") - self.validate_permission("gpdb/cpu.stat", "r") + self.validate_permission(self.cgroup_parent + "/cpuset.cpus", "rw") + self.validate_permission(self.cgroup_parent + "/cpuset.cpus.partition", "rw") + self.validate_permission(self.cgroup_parent + "/cpuset.mems", "rw") + self.validate_permission(self.cgroup_parent + "/cpuset.cpus.effective", "r") + self.validate_permission(self.cgroup_parent + "/cpuset.mems.effective", "r") - self.validate_permission("gpdb/cpuset.cpus", "rw") - self.validate_permission("gpdb/cpuset.cpus.partition", "rw") - self.validate_permission("gpdb/cpuset.mems", "rw") - self.validate_permission("gpdb/cpuset.cpus.effective", "r") - self.validate_permission("gpdb/cpuset.mems.effective", "r") + self.validate_permission(self.cgroup_parent + "/memory.current", "r") - self.validate_permission("gpdb/memory.current", "r") + self.validate_permission(self.cgroup_parent + "/io.max", "rw") - self.validate_permission("gpdb/io.max", "rw") + def get_cgroup_parent(self): + """ + Get the cgroup parent directory from the database GUC parameter + gp_resource_group_cgroup_parent. If unable to connect to database + or retrieve the parameter, report error using die function. + """ + try: + dburl = dbconn.DbURL() + + with dbconn.connect(dburl, utility=True) as conn: + # Query the GUC parameter value + sql = "SHOW gp_resource_group_cgroup_parent" + cursor = dbconn.query(conn, sql) + result = cursor.fetchone() + + if result and result[0]: + return result[0] + else: + self.die("failed to retrieve gp_resource_group_cgroup_parent parameter from database") + + except Exception as e: + self.die("failed to retrieve gp_resource_group_cgroup_parent parameter: {}".format(str(e))) def die(self, msg): raise ValidationException("cgroup is not properly configured: {}".format(msg)) diff --git a/src/backend/utils/resgroup/cgroup.c b/src/backend/utils/resgroup/cgroup.c index 7c783fbbf6d..983d247dc96 100644 --- a/src/backend/utils/resgroup/cgroup.c +++ b/src/backend/utils/resgroup/cgroup.c @@ -665,6 +665,12 @@ permListCheck(const PermList *permlist, Oid group, bool report) prop[0] ? "file" : "directory", path); } + else + { + CGROUP_CONFIG_WARNING("invalid %s name '%s': %m", + prop[0] ? "file" : "directory", + path); + } return false; } @@ -678,6 +684,12 @@ permListCheck(const PermList *permlist, Oid group, bool report) prop[0] ? "file" : "directory", path); } + else + { + CGROUP_CONFIG_WARNING("can't access %s '%s': %m", + prop[0] ? "file" : "directory", + path); + } return false; } } diff --git a/src/include/utils/cgroup.h b/src/include/utils/cgroup.h index 39ef82aeb52..e43e1a88412 100644 --- a/src/include/utils/cgroup.h +++ b/src/include/utils/cgroup.h @@ -18,9 +18,18 @@ #include "postgres.h" #include "nodes/pg_list.h" +extern char *gp_resource_group_cgroup_parent; + #define MAX_CGROUP_PATHLEN 256 #define MAX_CGROUP_CONTENTLEN 1024 +#define CGROUP_CONFIG_WARNING(msg, ...) \ + ereport(WARNING, \ + (errmsg("cgroup is not properly configured: " msg, ##__VA_ARGS__), \ + errhint("Please check whether the directory '/sys/fs/cgroup/%s' exists when gp_resource_manager = 'group-v2' and gp_resource_group_cgroup_parent = '%s'.", \ + gp_resource_group_cgroup_parent ? gp_resource_group_cgroup_parent : "", \ + gp_resource_group_cgroup_parent ? gp_resource_group_cgroup_parent : ""))) + #define CGROUP_ERROR(...) elog(ERROR, __VA_ARGS__) #define CGROUP_CONFIG_ERROR(...) \ CGROUP_ERROR("cgroup is not properly configured: " __VA_ARGS__) diff --git a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out index de159f4910e..473c2fff185 100644 --- a/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out +++ b/src/test/isolation2/expected/resgroup/resgroup_auxiliary_tools_v2.out @@ -20,10 +20,20 @@ ERROR: language "plpython3u" already exists -- end_ignore -- enable resource group and restart cluster. +-- prerequisites: +-- 1. '/sys/fs/cgroup/gpdb' must exist, +-- otherwise create it before run installcheck-resgroup-v2; +-- 2. 'gpconfig -c gp_resource_group_cgroup_parent -v "gpdb" && gpstop -rai' +-- must run before 'gpconfig -c gp_resource_manager -v group-v2', because +-- during the process of setting gp_resource_manager to group-v2, the +-- system will check whether the directory +-- '/sys/fs/cgroup/$gp_resource_group_cgroup_parent' exists. -- start_ignore -! gpconfig -c gp_resource_manager -v group-v2; +! gpconfig -c gp_resource_group_cgroup_parent -v "gpdb"; -! gpconfig -c gp_resource_group_cgroup_parent -v "gpdb" +! gpstop -rai; + +! gpconfig -c gp_resource_manager -v group-v2; ! gpconfig -c max_connections -v 250 -m 25; @@ -39,6 +49,11 @@ ERROR: language "plpython3u" already exists --------------------- group-v2 (1 row) +0: SHOW gp_resource_group_cgroup_parent; + gp_resource_group_cgroup_parent +--------------------------------- + gpdb +(1 row) -- resource queue statistics should not crash 0: SELECT * FROM pg_resqueue_status; diff --git a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql index e274acbb8f3..cf708526ad3 100644 --- a/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql +++ b/src/test/isolation2/sql/resgroup/resgroup_auxiliary_tools_v2.sql @@ -19,9 +19,18 @@ CREATE LANGUAGE plpython3u; -- end_ignore -- enable resource group and restart cluster. +-- prerequisites: +-- 1. '/sys/fs/cgroup/gpdb' must exist, +-- otherwise create it before run installcheck-resgroup-v2; +-- 2. 'gpconfig -c gp_resource_group_cgroup_parent -v "gpdb" && gpstop -rai' +-- must run before 'gpconfig -c gp_resource_manager -v group-v2', because +-- during the process of setting gp_resource_manager to group-v2, the +-- system will check whether the directory +-- '/sys/fs/cgroup/$gp_resource_group_cgroup_parent' exists. -- start_ignore +! gpconfig -c gp_resource_group_cgroup_parent -v "gpdb"; +! gpstop -rai; ! gpconfig -c gp_resource_manager -v group-v2; -! gpconfig -c gp_resource_group_cgroup_parent -v "gpdb" ! gpconfig -c max_connections -v 250 -m 25; ! gpconfig -c runaway_detector_activation_percent -v 100; ! gpstop -rai; @@ -30,6 +39,7 @@ CREATE LANGUAGE plpython3u; -- after the restart we need a new connection to run the queries 0: SHOW gp_resource_manager; +0: SHOW gp_resource_group_cgroup_parent; -- resource queue statistics should not crash 0: SELECT * FROM pg_resqueue_status; From 2f1dd9bab22407fd0e894e20f93f8e1367c00563 Mon Sep 17 00:00:00 2001 From: GongXun Date: Thu, 21 Aug 2025 16:42:13 +0800 Subject: [PATCH 153/260] feat: support runtime filter push down to Table AM when seq scan begins, check whether the scanflags of table am is set to determine whether the runtime filter is pushed down. When the runtime filter is pushed down to pax am, pax am converts the min/max scankey in the runtime filter into PFTNode and performs min/max filtering. --- .../src/cpp/access/pax_access_handle.cc | 1 + .../pax_storage/src/cpp/access/pax_scanner.cc | 10 +-- .../src/cpp/storage/filter/pax_filter.cc | 3 +- .../src/cpp/storage/filter/pax_filter.h | 2 +- .../cpp/storage/filter/pax_sparse_filter.h | 4 +- .../cpp/storage/filter/pax_sparse_pg_path.cc | 62 ++++++++++++++++++- src/backend/executor/nodeSeqscan.c | 14 +++-- 7 files changed, 82 insertions(+), 14 deletions(-) diff --git a/contrib/pax_storage/src/cpp/access/pax_access_handle.cc b/contrib/pax_storage/src/cpp/access/pax_access_handle.cc index da07cddd5d7..6dcaecd3205 100644 --- a/contrib/pax_storage/src/cpp/access/pax_access_handle.cc +++ b/contrib/pax_storage/src/cpp/access/pax_access_handle.cc @@ -453,6 +453,7 @@ uint32 PaxAccessMethod::ScanFlags(Relation relation) { flags |= SCAN_FORCE_BIG_WRITE_LOCK; #endif + flags |= SCAN_SUPPORT_RUNTIME_FILTER; return flags; } diff --git a/contrib/pax_storage/src/cpp/access/pax_scanner.cc b/contrib/pax_storage/src/cpp/access/pax_scanner.cc index a5e0b632002..5a354e6fa0c 100644 --- a/contrib/pax_storage/src/cpp/access/pax_scanner.cc +++ b/contrib/pax_storage/src/cpp/access/pax_scanner.cc @@ -218,7 +218,7 @@ bool PaxScanDesc::BitmapNextTuple(struct TBMIterateResult *tbmres, } TableScanDesc PaxScanDesc::BeginScan(Relation relation, Snapshot snapshot, - int nkeys, struct ScanKeyData * /*key*/, + int nkeys, struct ScanKeyData *key, ParallelTableScanDesc pscan, uint32 flags, std::shared_ptr &&pax_filter, bool build_bitmap) { @@ -326,8 +326,8 @@ void PaxScanDesc::EndScan() { } TableScanDesc PaxScanDesc::BeginScanExtractColumns( - Relation rel, Snapshot snapshot, int /*nkeys*/, - struct ScanKeyData * /*key*/, ParallelTableScanDesc parallel_scan, + Relation rel, Snapshot snapshot, int nkeys, + struct ScanKeyData *key, ParallelTableScanDesc parallel_scan, struct PlanState *ps, uint32 flags) { std::shared_ptr filter; List *targetlist = ps->plan->targetlist; @@ -361,7 +361,7 @@ TableScanDesc PaxScanDesc::BeginScanExtractColumns( filter->SetColumnProjection(std::move(col_bits)); if (pax_enable_sparse_filter) { - filter->InitSparseFilter(rel, qual); + filter->InitSparseFilter(rel, qual, key, nkeys); // FIXME: enable predicate pushdown can filter rows immediately without // assigning all columns. But it may mess the filter orders for multiple @@ -375,7 +375,7 @@ TableScanDesc PaxScanDesc::BeginScanExtractColumns( filter->InitRowFilter(rel, ps, filter->GetColumnProjection()); } } - return BeginScan(rel, snapshot, 0, nullptr, parallel_scan, flags, + return BeginScan(rel, snapshot, nkeys, key, parallel_scan, flags, std::move(filter), build_bitmap); } diff --git a/contrib/pax_storage/src/cpp/storage/filter/pax_filter.cc b/contrib/pax_storage/src/cpp/storage/filter/pax_filter.cc index d7f752a33ec..5f19ab58400 100644 --- a/contrib/pax_storage/src/cpp/storage/filter/pax_filter.cc +++ b/contrib/pax_storage/src/cpp/storage/filter/pax_filter.cc @@ -44,11 +44,12 @@ namespace pax { PaxFilter::PaxFilter() : sparse_filter_(nullptr), row_filter_(nullptr) {} void PaxFilter::InitSparseFilter(Relation relation, List *quals, + ScanKey key, int nkeys, bool allow_fallback_to_pg) { Assert(!sparse_filter_); sparse_filter_ = std::make_shared(relation, allow_fallback_to_pg); - sparse_filter_->Initialize(quals); + sparse_filter_->Initialize(quals, key, nkeys); } #ifdef VEC_BUILD diff --git a/contrib/pax_storage/src/cpp/storage/filter/pax_filter.h b/contrib/pax_storage/src/cpp/storage/filter/pax_filter.h index 467b841ec89..ebc2fff8538 100644 --- a/contrib/pax_storage/src/cpp/storage/filter/pax_filter.h +++ b/contrib/pax_storage/src/cpp/storage/filter/pax_filter.h @@ -50,7 +50,7 @@ class PaxFilter final { ~PaxFilter() = default; // The sparse filter - void InitSparseFilter(Relation relation, List *quals, + void InitSparseFilter(Relation relation, List *quals, ScanKey key, int nkeys, bool allow_fallback_to_pg = false); #ifdef VEC_BUILD void InitSparseFilter( diff --git a/contrib/pax_storage/src/cpp/storage/filter/pax_sparse_filter.h b/contrib/pax_storage/src/cpp/storage/filter/pax_sparse_filter.h index 504878c4dd2..6efa59a7ff6 100644 --- a/contrib/pax_storage/src/cpp/storage/filter/pax_sparse_filter.h +++ b/contrib/pax_storage/src/cpp/storage/filter/pax_sparse_filter.h @@ -65,7 +65,7 @@ class PaxSparseFilter final { bool ExistsFilterPath() const; - void Initialize(List *quals); + void Initialize(List *quals, ScanKey key, int nkeys); #ifdef VEC_BUILD void Initialize( @@ -83,6 +83,8 @@ class PaxSparseFilter final { private: #endif + std::shared_ptr ProcessScanKey(ScanKey key); + // Used to build the filter tree with the PG quals std::shared_ptr ExprWalker(Expr *expr); Expr *ExprFlatVar(Expr *expr); diff --git a/contrib/pax_storage/src/cpp/storage/filter/pax_sparse_pg_path.cc b/contrib/pax_storage/src/cpp/storage/filter/pax_sparse_pg_path.cc index 0630db6dc21..3a7bc64f389 100644 --- a/contrib/pax_storage/src/cpp/storage/filter/pax_sparse_pg_path.cc +++ b/contrib/pax_storage/src/cpp/storage/filter/pax_sparse_pg_path.cc @@ -36,7 +36,7 @@ namespace pax { -void PaxSparseFilter::Initialize(List *quals) { +void PaxSparseFilter::Initialize(List *quals, ScanKey key, int nkeys) { ListCell *qual_cell; std::vector> fl_nodes; /* first level nodes */ std::string origin_tree_str; @@ -44,10 +44,27 @@ void PaxSparseFilter::Initialize(List *quals) { // no inited Assert(!filter_tree_); - if (!quals) { + if (!quals && nkeys == 0) { return; } + // walk scan key and only support min/max filter now + for (int i = 0; i < nkeys; i++) { + // TODO: support bloom filter in PaxFilter + // but now just skip it, SeqNext() will check bloom filter in PassByBloomFilter() + if (key[i].sk_flags & SK_BLOOM_FILTER) { + continue; + } + + if (key[i].sk_strategy != BTGreaterEqualStrategyNumber && + key[i].sk_strategy != BTLessEqualStrategyNumber) { + continue; + } + std::shared_ptr fl_node = ProcessScanKey(&key[i]); + Assert(fl_node); + fl_nodes.emplace_back(std::move(fl_node)); + } + foreach (qual_cell, quals) { Expr *fl_clause = (Expr *)lfirst(qual_cell); std::shared_ptr fl_node = ExprWalker(fl_clause); @@ -67,6 +84,47 @@ void PaxSparseFilter::Initialize(List *quals) { origin_tree_str.c_str(), DebugString().c_str()); } +std::shared_ptr PaxSparseFilter::ProcessScanKey(ScanKey key) { + std::shared_ptr node = nullptr; + Assert(key); + Assert(!(key->sk_flags & SK_BLOOM_FILTER)); + Assert(key->sk_strategy == BTGreaterEqualStrategyNumber || + key->sk_strategy == BTLessEqualStrategyNumber); + Assert(key->sk_attno > 0 && + key->sk_attno <= RelationGetNumberOfAttributes(rel_)); + + AttrNumber attno = key->sk_attno; + + // Build VarNode on the left + auto var_node = std::make_shared(); + var_node->attrno = attno; + + // Build ConstNode on the right from ScanKey + auto const_node = std::make_shared(); + const_node->const_val = key->sk_argument; + const_node->const_type = key->sk_subtype; + if (key->sk_flags & SK_ISNULL) { + const_node->sk_flags |= SK_ISNULL; + } + + // Build OpNode and attach children: (var, const) + auto op_node = std::make_shared(); + op_node->strategy = key->sk_strategy; + op_node->collation = key->sk_collation; // may be InvalidOid; executor will + // fallback to attr collation + + // Set operand types + Form_pg_attribute attr = TupleDescAttr(RelationGetDescr(rel_), attno - 1); + op_node->left_typid = attr->atttypid; + op_node->right_typid = key->sk_subtype; + + PFTNode::AppendSubNode(op_node, std::move(var_node)); + PFTNode::AppendSubNode(op_node, std::move(const_node)); + + node = op_node; + return node; +} + Expr *PaxSparseFilter::ExprFlatVar(Expr *clause) { Expr *flat_clause = clause; if (unlikely(!clause)) { diff --git a/src/backend/executor/nodeSeqscan.c b/src/backend/executor/nodeSeqscan.c index c9debfb1fd0..7ee5a2e94cf 100644 --- a/src/backend/executor/nodeSeqscan.c +++ b/src/backend/executor/nodeSeqscan.c @@ -80,13 +80,18 @@ SeqNext(SeqScanState *node) * node->filter_in_seqscan is false means scankey need to be pushed to * AM. */ - if (gp_enable_runtime_filter_pushdown && !node->filter_in_seqscan) + if (gp_enable_runtime_filter_pushdown && node->filter_in_seqscan && node->filters && + (table_scan_flags(node->ss.ss_currentRelation) & + (SCAN_SUPPORT_RUNTIME_FILTER))) + { + // pushdown runtime filter to AM keys = ScanKeyListToArray(node->filters, &nkeys); + } /* - * We reach here if the scan is not parallel, or if we're serially - * executing a scan that was planned to be parallel. - */ + * We reach here if the scan is not parallel, or if we're serially + * executing a scan that was planned to be parallel. + */ scandesc = table_beginscan_es(node->ss.ss_currentRelation, estate->es_snapshot, nkeys, keys, @@ -102,6 +107,7 @@ SeqNext(SeqScanState *node) { while (table_scan_getnextslot(scandesc, direction, slot)) { + // TODO: later pushdown bloom filter to AM if (!PassByBloomFilter(&node->ss.ps, node->filters, slot)) continue; From c4ffd45adbd6a2df6122f140fd5332fb1ab961f3 Mon Sep 17 00:00:00 2001 From: Leonid Borchuk Date: Wed, 27 Aug 2025 11:00:47 +0000 Subject: [PATCH 154/260] This is the initial commit for moving cloudberry-devops-release to main repo Changes here includes original commits ``` git log --pretty=format:"%H%x09%an%x09%ad%x09%s" 5c1a2ada9a93ab5f930aebd0018a7369fdf61930 Dianjin Wang Wed Jun 25 18:28:43 2025 +0800 Update gcc/g++ settings for PAX on RockyLinux 8 133a81303555dedc07c36ec16aa686367c47c774 Leonid Borchuk Wed Jul 16 15:58:52 2025 +0000 Rename greenplum_path to cloudberry-env eef2516b90bb7b9de2af95cc2a9df5b125533794 Dianjin Wang Sat Jun 7 08:51:09 2025 +0800 Update `dorny/paths-filter` version tag to commit e06dd830250ce89184b13a18aa6663ffcb56db4b Ed Espino Sun Jun 1 12:27:17 2025 -0700 Initial commit: Apache Cloudberry (Incubating) release script 384202893e571ce06a2224a116019c2ca9a3dce5 Dianjin Wang Wed Apr 30 16:09:51 2025 +0800 Add the PAX support in the configure 5081920c07096e9e2cf217ad1b7489ae8963a86a Ed Espino Tue Apr 1 03:31:45 2025 -0700 Add protobuf-devel to Dockerfiles for Rocky 8 and 9 builds (#14) 7a6549cedb84edad516b89ebbd73529b773aaf03 Jianghua Yang Thu Feb 27 22:31:07 2025 +0800 Add debuginfo package. 5965faabbf15965778ec09bca02960dbc1900a6a Ed Espino Thu Feb 13 01:28:47 2025 -0800 Add new Cloudberry dependency (#11) d50af03d7c04341ce86047aa098bfd8e6a914804 Ed Espino Sun Dec 15 23:27:47 2024 -0800 Add script to analyze core dumps with gdb (#10) 54bbb3d10ad642f98cf97418978319d6d030070c Ed Espino Sun Dec 15 21:39:20 2024 -0800 Adding packages (gdb and file) used in core file analysis. (#9) 9638c9e3c983e4d9ae7327517c3f88b0f8335614 Ed Espino Mon Dec 9 18:43:57 2024 -0800 Container - Multi arch support for Rocky 8 & 9 (#8) 5249d69825ec34c2363aa3de3391ddc790786ffe Ed Espino Wed Nov 27 02:09:46 2024 -0800 Enhance test result parsing for ignored tests (#7) f6fb4296c392b3cfaef0da45da282ca667af1025 Ed Espino Tue Nov 19 18:02:14 2024 -0800 fix: remove -e from set options in parse-test-results.sh (#6) 2c8302c2c2beb2682185cc9c54503342b0bb0351 Ed Espino Thu Nov 7 22:11:17 2024 -0800 build: add Apache Cloudberry build automation and test framework 6b8f8938196d55902eecf3506a9142811f97d633 Ed Espino Thu Nov 14 02:42:02 2024 -0800 Update to Apache Cloudberry (incubating) rpm name and add disclaimer 1a5852903579b11ec0bd12d3083cf4299250eb96 Ed Espino Thu Nov 14 10:44:10 2024 -0800 Update repository names for pushing to official Docker Hub repository 7f82c004c4a106832a2483e509ba152082561838 Ed Espino Thu Nov 14 00:13:43 2024 -0800 Add initial Dockerfiles, configs, and GitHub workflows for Cloudberry 72e5f06a7cdf6e807b255717ffe5681a122da474 Dianjin Wang Tue Nov 5 14:21:11 2024 +0800 Add asf-yaml and basic community files 5acab8e2c785c8036c92562017d06f666b42cfd5 Ed Espino Wed Sep 4 04:16:35 2024 -0700 Fix release names and paramerize pgvector version. 4ec026dea578f397512c3d8686082317338d6d2c Ed Espino Tue Sep 3 01:50:34 2024 -0700 Using Cloudberry pgvector 0.5.1 ed928320f640731efd33e6157a315a4d3100efb5 Ed Espino Mon Sep 2 23:50:39 2024 -0700 Change ownership of symlink. e8b22b0bffdb44a65528cbc862cfe8d6425302af Ed Espino Sun Sep 1 23:52:57 2024 -0700 Update elf scripts 7f295146bc3412894ecbb0027c10754e736fb7ed Ed Espino Fri Aug 30 16:23:38 2024 -0700 Change default installation directory. 1a571a8bdeac6eb1ccf4e7d81d7d89da7ae6b0e8 Ed Espino Fri Aug 30 16:10:44 2024 -0700 Change default installation directory. 8ed243cff42501843f86a8b70925a6b1e34c6681 Ed Espino Fri Aug 30 03:52:16 2024 -0700 Updates ab43f527c56b197f5c223672e92fb1d384f40858 Ed Espino Fri Aug 30 03:36:35 2024 -0700 Add hll and pgvector extensions a133b6ea1fe5b0cb8c7440218873023be990ddfa Ed Espino Wed Aug 28 22:57:20 2024 -0700 Remove Changelog 371e50dafd31282da78ac661aa7f9890f083b3b9 Ed Espino Wed Aug 28 22:56:26 2024 -0700 Add Group to spec file. 54be4f19ecc15ee477040e169cd7e66246c3034e Ed Espino Wed Aug 28 12:43:09 2024 -0700 Fix changing ownership to gpadmin. 357936d3efd9de69b913b736172270781ac0b6f1 Ed Espino Wed Aug 28 12:02:15 2024 -0700 Adjustment for shipping GO apps (e.g. gpbackup). 4f2cde6f1c97913152498a6cbb54fcc0d9785958 Ed Espino Mon Aug 26 23:29:03 2024 -0700 Update spec files 44b1425441c482d260f087d0702aef66f379e840 Ed Espino Mon Aug 26 22:57:05 2024 -0700 Update docs 57faae9ab7600efc3a4bfe0dd7a2b4eb2d82229f Ed Espino Mon Aug 26 22:51:41 2024 -0700 minor enhancements 44123c9a7a133b4625ddaa2a06fb0be0db77f6a2 Ed Espino Thu Aug 22 02:15:00 2024 -0700 Script update. 60a5884b33ef848aa6861bb9537f28b84ce6597a Ed Espino Wed Aug 21 22:28:07 2024 -0700 Clean up repo rpm making it noarch and making the repo entry dynamic e40c74a91ee4dcac727622fdfbef84e41e61969e Ed Espino Wed Aug 21 13:09:22 2024 -0700 Add repo tool 16b3dfe3ead0834bd83165b5559f3388f4e55e6e Ed Espino Wed Aug 21 00:45:53 2024 -0700 Fix description in repo RPM. feb096c5d8887dd6b29d382be9b37844169df1ca Ed Espino Wed Aug 21 00:42:28 2024 -0700 Fix relocation RPM feature by createing own prefix variable. fd5017365759572248fd07c39af67f83f3987295 Ed Espino Wed Aug 21 00:10:05 2024 -0700 In spec file, set version and release variables via script (build-rpm.sh). b9668e1b86cc631db50ae603cc63cc0ffa35a400 Ed Espino Tue Aug 20 11:44:05 2024 -0700 EL SPEC file consolidation. 904f2981e8d1217b57bc5490d31e4463399d4551 Ed Espino Sun Aug 18 00:45:32 2024 -0700 Rename spec file and add additional runtime dependencies. 89f65a6a0902bbe0fd8294c5ad0767419e53e608 Ed Espino Sat Aug 17 01:04:02 2024 -0700 Add RPM GPG KEY 91ea01f7f0b7ce9e5553d0861ec640b3392bacd2 Ed Espino Fri Aug 16 22:56:54 2024 -0700 Update Spec file. c362bdab21ef9e33e885ee839ad9cf8b009122bd Ed Espino Fri Aug 16 19:00:41 2024 -0700 Create repo RPM 9b02885090fb9c09dd03202616303afe9c7f93f5 Ed Espino Fri Aug 16 11:14:36 2024 -0700 feat: Add ELF dependency analyzer script f3a569e9620c1d643046e92d1387f104a3dbf8cd Ed Espino Fri Aug 16 10:30:55 2024 -0700 Initial EL9 spec file ``` --- cloudberry-devops-release/CONTRIBUTING.md | 66 +++ cloudberry-devops-release/LICENSE | 202 +++++++ cloudberry-devops-release/README.md | 1 + .../cloudberry/scripts/analyze_core_dumps.sh | 222 ++++++++ .../cloudberry/scripts/build-cloudberry.sh | 91 ++++ .../cloudberry/scripts/cloudberry-utils.sh | 148 ++++++ .../scripts/configure-cloudberry.sh | 165 ++++++ .../scripts/create-cloudberry-demo-cluster.sh | 125 +++++ .../destroy-cloudberry-demo-cluster.sh | 101 ++++ .../cloudberry/scripts/parse-results.pl | 215 ++++++++ .../cloudberry/scripts/parse-test-results.sh | 100 ++++ .../cloudberry/scripts/test-cloudberry.sh | 81 +++ .../cloudberry/scripts/unittest-cloudberry.sh | 69 +++ .../docker/cbdb/build/rocky8/Dockerfile | 210 ++++++++ .../cbdb/build/rocky8/configs/90-cbdb-limits | 32 ++ .../build/rocky8/configs/gpinitsystem.conf | 87 +++ .../cbdb/build/rocky8/configs/init_system.sh | 193 +++++++ .../cbdb/build/rocky8/tests/requirements.txt | 3 + .../tests/testinfra/test_cloudberry_db_env.py | 126 +++++ .../docker/cbdb/build/rocky9/Dockerfile | 215 ++++++++ .../cbdb/build/rocky9/configs/90-cbdb-limits | 32 ++ .../build/rocky9/configs/gpinitsystem.conf | 89 ++++ .../cbdb/build/rocky9/configs/init_system.sh | 192 +++++++ .../cbdb/build/rocky9/tests/requirements.txt | 3 + .../tests/testinfra/test_cloudberry_db_env.py | 129 +++++ .../images/docker/cbdb/test/rocky8/Dockerfile | 135 +++++ .../cbdb/test/rocky8/configs/90-cbdb-limits | 32 ++ .../test/rocky8/configs/gpinitsystem.conf | 87 +++ .../cbdb/test/rocky8/configs/init_system.sh | 221 ++++++++ .../images/docker/cbdb/test/rocky9/Dockerfile | 135 +++++ .../cbdb/test/rocky9/configs/90-cbdb-limits | 32 ++ .../test/rocky9/configs/gpinitsystem.conf | 87 +++ .../cbdb/test/rocky9/configs/init_system.sh | 221 ++++++++ .../apache-cloudberry-db-incubating.spec | 161 ++++++ .../apache-cloudberry-hll-incubating.spec | 51 ++ ...apache-cloudberry-pgvector-incubating.spec | 53 ++ .../repo-el/SPECS/cloudberry-dev-repo.spec | 35 ++ .../scripts/build-rpm.sh | 135 +++++ .../elf_rockylinux_dependency_analyzer.py | 305 +++++++++++ .../scripts/elf_ubuntu_dependency_analyzer.py | 287 ++++++++++ .../scripts/release/cloudberry-release.sh | 496 ++++++++++++++++++ .../scripts/s3-repo-sync-and-sign.sh | 250 +++++++++ 42 files changed, 5620 insertions(+) create mode 100644 cloudberry-devops-release/CONTRIBUTING.md create mode 100644 cloudberry-devops-release/LICENSE create mode 100644 cloudberry-devops-release/README.md create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/analyze_core_dumps.sh create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/cloudberry-utils.sh create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/destroy-cloudberry-demo-cluster.sh create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/parse-results.pl create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh create mode 100755 cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky8/Dockerfile create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/90-cbdb-limits create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/gpinitsystem.conf create mode 100755 cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/init_system.sh create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/requirements.txt create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/testinfra/test_cloudberry_db_env.py create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky9/Dockerfile create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/90-cbdb-limits create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/gpinitsystem.conf create mode 100755 cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/init_system.sh create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/requirements.txt create mode 100644 cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/testinfra/test_cloudberry_db_env.py create mode 100644 cloudberry-devops-release/images/docker/cbdb/test/rocky8/Dockerfile create mode 100644 cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/90-cbdb-limits create mode 100644 cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/gpinitsystem.conf create mode 100755 cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/init_system.sh create mode 100644 cloudberry-devops-release/images/docker/cbdb/test/rocky9/Dockerfile create mode 100644 cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/90-cbdb-limits create mode 100644 cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/gpinitsystem.conf create mode 100755 cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/init_system.sh create mode 100644 cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec create mode 100644 cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-hll-incubating.spec create mode 100644 cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-pgvector-incubating.spec create mode 100644 cloudberry-devops-release/packaging/rpm/repo-el/SPECS/cloudberry-dev-repo.spec create mode 100755 cloudberry-devops-release/scripts/build-rpm.sh create mode 100755 cloudberry-devops-release/scripts/elf_rockylinux_dependency_analyzer.py create mode 100755 cloudberry-devops-release/scripts/elf_ubuntu_dependency_analyzer.py create mode 100755 cloudberry-devops-release/scripts/release/cloudberry-release.sh create mode 100755 cloudberry-devops-release/scripts/s3-repo-sync-and-sign.sh diff --git a/cloudberry-devops-release/CONTRIBUTING.md b/cloudberry-devops-release/CONTRIBUTING.md new file mode 100644 index 00000000000..b00691f9b74 --- /dev/null +++ b/cloudberry-devops-release/CONTRIBUTING.md @@ -0,0 +1,66 @@ +Apache Cloudberry welcomes contributions from anyone, new and +experienced! We appreciate your interest in contributing. This guide +will help you get started with the contribution. + +## Code of Conduct + +Everyone who participates in Cloudberry, either as a user or a +contributor, is obliged to follow the ASF Code of Conduct. + +## GitHub Contribution Workflow + +1. Fork this repo to your own GitHub account. +2. Clone down the repo to your local system. + +``` +git clone https://github.com/your-user-name/cloudberry-devops-release.git +``` + +3. Add the upstream repo. (You only have to do this once, not every time.) + +``` +git remote add upstream https://github.com/apache/cloudberry-devops-release.git +``` + +4. Create a new branch to hold your work. + +``` +git checkout -b new-branch-name +``` + +5. Work on your new code. + +6. Commit your changes. + +``` +git add +git commit +``` + +7. Push your changes to your GitHub repo. + +``` +git push origin new-branch-name +``` + +8. Open a PR(Pull Request). + +Go to the repo on GitHub. There will be a message about your recently pushed +branch, asking if you would like to open a pull request. Follow the prompts, +compare across repositories, and submit the PR. + +9. Get your code reviewed. + +10. Congratulations! Once your PR is approved, then the code will be +merged. Your code will be shipped in the recent future releases. + +## Sync your branch with the upstream + +Before working on your next contribution, make sure your local repository is +up to date: + +``` +git checkout main +git fetch upstream +git rebase upstream/main +``` diff --git a/cloudberry-devops-release/LICENSE b/cloudberry-devops-release/LICENSE new file mode 100644 index 00000000000..d6456956733 --- /dev/null +++ b/cloudberry-devops-release/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/cloudberry-devops-release/README.md b/cloudberry-devops-release/README.md new file mode 100644 index 00000000000..9602438c9dd --- /dev/null +++ b/cloudberry-devops-release/README.md @@ -0,0 +1 @@ +# DevOps and Release for Apache Cloudberry (Incubating) diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/analyze_core_dumps.sh b/cloudberry-devops-release/build_automation/cloudberry/scripts/analyze_core_dumps.sh new file mode 100755 index 00000000000..4749ec76271 --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/analyze_core_dumps.sh @@ -0,0 +1,222 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Script: analyze_core_dumps.sh +# Description: Automated analysis tool for core dump files using GDB +# +# This script automatically analyzes core dump files found in a +# specified directory, providing stack traces and register +# information. It's particularly useful for analyzing crashes in +# Postgres/Cloudberry executables and Python applications. +# +# Features: +# - Automatic detection of core dump files +# - Support for both compiled executables and interpreted languages +# - Detailed stack traces with GDB +# - Register state analysis +# - Assembly code context at crash point +# - Comprehensive logging of analysis results +# +# Usage: analyze_core_dumps.sh [test_id] +# test_id: Optional identifier for the test configuration that generated cores +# +# Dependencies: +# - GDB (GNU Debugger) +# - file command +# +# Environment Variables: +# SRC_DIR - Base directory for operations (defaults to /tmp) +# +# Return Codes: +# 0 - No core files were found +# 1 - Core files were found and all were processed successfully +# 2 - Error conditions: +# - Missing required dependencies (gdb, file) +# - Issues processing some or all core files +# -------------------------------------------------------------------- + +set -u + +# Configuration +#----------------------------------------------------------------------------- +# Use SRC_DIR if defined, otherwise default to /tmp +SRC_DIR="${SRC_DIR:-/tmp}" +# Define log directory and files +LOG_DIR="${SRC_DIR}/build-logs" +# Create log directories if they don't exist +mkdir -p "${LOG_DIR}" + +# Determine log file name based on test_id argument +if [ $# -ge 1 ]; then + test_id="$1" + log_file="${LOG_DIR}/core_analysis_${test_id}_$(date +%Y%m%d_%H%M%S).log" +else + log_file="${LOG_DIR}/core_analysis_$(date +%Y%m%d_%H%M%S).log" +fi +echo "log_file: ${log_file}" + +# Directory where core dumps are located +core_dir="/tmp/cloudberry-cores/" + +# Pattern to match core dump files +core_pattern="core-*" + +# Function Definitions +#----------------------------------------------------------------------------- +# Log messages to both console and log file +# Args: +# $1 - Message to log +log_message() { + local message="[$(date '+%Y-%m-%d %H:%M:%S')] $1" + echo "$message" + echo "$message" >> "$log_file" +} + +# Analyze a single core file +# Args: +# $1 - Path to core file +# Returns: +# 0 on success, 1 on failure +analyze_core_file() { + local core_file="$1" + local file_info + + log_message "Analyzing core file: $core_file" + file_info=$(file "$core_file") + log_message "Core file info: $file_info" + + # Extract the original command from the core file info + if [[ "$file_info" =~ "from '([^']+)'" ]]; then + local original_cmd="${BASH_REMATCH[1]}" + log_message "Original command: $original_cmd" + fi + + # Extract executable path from core file info + if [[ "$file_info" =~ execfn:\ \'([^\']+)\' ]]; then + local executable="${BASH_REMATCH[1]}" + log_message "Executable path: $executable" + + # Convert relative path to absolute if needed + if [[ "$executable" == "./"* ]]; then + executable="$PWD/${executable:2}" + log_message "Converted to absolute path: $executable" + fi + + # Run GDB analysis + log_message "Starting GDB analysis..." + + gdb -quiet \ + --batch \ + -ex 'set pagination off' \ + -ex 'info target' \ + -ex 'thread apply all bt' \ + -ex 'print $_siginfo' \ + -ex quit \ + "$executable" "$core_file" 2>&1 >> "$log_file" + + local gdb_rc=$? + if [ $gdb_rc -eq 0 ] && [ -s "$log_file" ]; then + log_message "GDB analysis completed successfully" + return 0 + else + log_message "Warning: GDB analysis failed or produced no output" + return 1 + fi + else + log_message "Could not find executable path in core file" + return 1 + fi +} + +# Function to check required commands +check_dependencies() { + local missing=0 + local required_commands=("gdb" "file") + + log_message "Checking required commands..." + for cmd in "${required_commands[@]}"; do + if ! command -v "$cmd" >/dev/null 2>&1; then + log_message "Error: Required command '$cmd' not found" + missing=1 + fi + done + + if [ $missing -eq 1 ]; then + log_message "Missing required dependencies. Please install them and try again." + return 1 + fi + + log_message "All required commands found" + return 0 +} + +# Main Execution +#----------------------------------------------------------------------------- +main() { + local core_count=0 + local analyzed_count=0 + local return_code=0 + + log_message "Starting core dump analysis" + log_message "Using source directory: $SRC_DIR" + log_message "Using log directory: $LOG_DIR" + + # Check dependencies first + if ! check_dependencies; then + return 2 + fi + + # Process all core files + for core_file in "$core_dir"/$core_pattern; do + if [[ -f "$core_file" ]]; then + ((core_count++)) + if analyze_core_file "$core_file"; then + ((analyzed_count++)) + fi + fi + done + + # Determine return code based on results + if ((core_count == 0)); then + log_message "No core files found matching pattern $core_pattern in $core_dir" + return_code=0 # No cores found + elif ((analyzed_count == core_count)); then + log_message "Analysis complete. Successfully processed $analyzed_count core(s) files" + return_code=1 # All cores processed successfully + else + log_message "Analysis complete with errors. Processed $analyzed_count of $core_count core files" + return_code=2 # Some cores failed to process + fi + + log_message "Log file: $log_file" + + return $return_code +} + +# Script entry point +main +return_code=$? + +if ((return_code == 0)); then + rm -fv "${log_file}" +fi + +exit $return_code diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh b/cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh new file mode 100755 index 00000000000..db04f1b7592 --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Script: build-cloudberry.sh +# Description: Builds Apache Cloudberry from source code and installs +# it. +# Performs the following steps: +# 1. Builds main Apache Cloudberry database components +# 2. Builds contrib modules +# 3. Installs both main and contrib components +# Uses parallel compilation based on available CPU cores. +# +# Required Environment Variables: +# SRC_DIR - Root source directory containing Apache Cloudberry +# source code +# +# Optional Environment Variables: +# LOG_DIR - Directory for logs (defaults to ${SRC_DIR}/build-logs) +# NPROC - Number of parallel jobs (defaults to all available cores) +# +# Usage: +# Export required variables: +# export SRC_DIR=/path/to/cloudberry/source +# Then run: +# ./build-cloudberry.sh +# +# Prerequisites: +# - configure-cloudberry.sh must be run first +# - Required build dependencies must be installed +# - /usr/local/cloudberry-db/lib must exist and be writable +# +# Exit Codes: +# 0 - Build and installation completed successfully +# 1 - Environment setup failed (missing SRC_DIR, LOG_DIR creation failed) +# 2 - Main component build failed +# 3 - Contrib build failed +# 4 - Installation failed +# +# -------------------------------------------------------------------- + +set -euo pipefail + +# Source common utilities +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "${SCRIPT_DIR}/cloudberry-utils.sh" + +# Define log directory and files +export LOG_DIR="${SRC_DIR}/build-logs" +BUILD_LOG="${LOG_DIR}/build.log" + +# Initialize environment +init_environment "Cloudberry Build Script" "${BUILD_LOG}" + +# Set environment +log_section "Environment Setup" +export LD_LIBRARY_PATH=/usr/local/cloudberry-db/lib:LD_LIBRARY_PATH +log_section_end "Environment Setup" + +# Build process +log_section "Build Process" +execute_cmd make -j$(nproc) --directory ${SRC_DIR} || exit 2 +execute_cmd make -j$(nproc) --directory ${SRC_DIR}/contrib || exit 3 +log_section_end "Build Process" + +# Installation +log_section "Installation" +execute_cmd make install --directory ${SRC_DIR} || exit 4 +execute_cmd make install --directory ${SRC_DIR}/contrib || exit 4 +log_section_end "Installation" + +# Log completion +log_completion "Cloudberry Build Script" "${BUILD_LOG}" +exit 0 diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/cloudberry-utils.sh b/cloudberry-devops-release/build_automation/cloudberry/scripts/cloudberry-utils.sh new file mode 100755 index 00000000000..01b0b1b8381 --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/cloudberry-utils.sh @@ -0,0 +1,148 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Library: cloudberry-utils.sh +# Description: Common utility functions for Apache Cloudberry build +# and test scripts +# +# Required Environment Variables: +# SRC_DIR - Root source directory +# +# Optional Environment Variables: +# LOG_DIR - Directory for logs (defaults to ${SRC_DIR}/build-logs) +# +# Functions: +# init_environment "Script Name" "Log File" +# - Initialize logging and verify environment +# - Parameters: +# * script_name: Name of the calling script +# * log_file: Path to log file +# - Returns: 0 on success, 1 on failure +# +# execute_cmd command [args...] +# - Execute command with logging +# - Parameters: Command and its arguments +# - Returns: Command's exit code +# +# run_psql_cmd "sql_command" +# - Execute PostgreSQL command with logging +# - Parameters: SQL command string +# - Returns: psql command's exit code +# +# source_cloudberry_env +# - Source Cloudberry environment files +# - Returns: 0 on success +# +# log_section "section_name" +# - Log section start +# - Parameters: Name of the section +# +# log_section_end "section_name" +# - Log section end +# - Parameters: Name of the section +# +# log_completion "script_name" "log_file" +# - Log script completion +# - Parameters: +# * script_name: Name of the calling script +# * log_file: Path to log file +# +# Usage: +# source ./cloudberry-utils.sh +# +# Example: +# source ./cloudberry-utils.sh +# init_environment "My Script" "${LOG_FILE}" +# execute_cmd make clean +# log_section "Build Process" +# execute_cmd make -j$(nproc) +# log_section_end "Build Process" +# log_completion "My Script" "${LOG_FILE}" +# +# -------------------------------------------------------------------- + +# Initialize logging and environment +init_environment() { + local script_name=$1 + local log_file=$2 + + echo "=== Initializing environment for ${script_name} ===" + echo "${script_name} executed at $(date)" | tee -a "${log_file}" + echo "Whoami: $(whoami)" | tee -a "${log_file}" + echo "Hostname: $(hostname)" | tee -a "${log_file}" + echo "Working directory: $(pwd)" | tee -a "${log_file}" + echo "Source directory: ${SRC_DIR}" | tee -a "${log_file}" + echo "Log directory: ${LOG_DIR}" | tee -a "${log_file}" + + if [ -z "${SRC_DIR:-}" ]; then + echo "Error: SRC_DIR environment variable is not set" | tee -a "${log_file}" + exit 1 + fi + + mkdir -p "${LOG_DIR}" +} + +# Function to echo and execute command with logging +execute_cmd() { + local cmd_str="$*" + local timestamp=$(date "+%Y.%m.%d-%H.%M.%S") + echo "Executing at ${timestamp}: $cmd_str" | tee -a "${LOG_DIR}/commands.log" + "$@" 2>&1 | tee -a "${LOG_DIR}/commands.log" + return ${PIPESTATUS[0]} +} + +# Function to run psql commands with logging +run_psql_cmd() { + local cmd=$1 + local timestamp=$(date "+%Y.%m.%d-%H.%M.%S") + echo "Executing psql at ${timestamp}: $cmd" | tee -a "${LOG_DIR}/psql-commands.log" + psql -P pager=off template1 -c "$cmd" 2>&1 | tee -a "${LOG_DIR}/psql-commands.log" + return ${PIPESTATUS[0]} +} + +# Function to source Cloudberry environment +source_cloudberry_env() { + echo "=== Sourcing Cloudberry environment ===" | tee -a "${LOG_DIR}/environment.log" + source /usr/local/cloudberry-db/cloudberry-env.sh + source ${SRC_DIR}/../cloudberry/gpAux/gpdemo/gpdemo-env.sh +} + +# Function to log section start +log_section() { + local section_name=$1 + local timestamp=$(date "+%Y.%m.%d-%H.%M.%S") + echo "=== ${section_name} started at ${timestamp} ===" | tee -a "${LOG_DIR}/sections.log" +} + +# Function to log section end +log_section_end() { + local section_name=$1 + local timestamp=$(date "+%Y.%m.%d-%H.%M.%S") + echo "=== ${section_name} completed at ${timestamp} ===" | tee -a "${LOG_DIR}/sections.log" +} + +# Function to log script completion +log_completion() { + local script_name=$1 + local log_file=$2 + local timestamp=$(date "+%Y.%m.%d-%H.%M.%S") + echo "${script_name} execution completed successfully at ${timestamp}" | tee -a "${log_file}" +} diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh b/cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh new file mode 100755 index 00000000000..4d84c3bfc21 --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh @@ -0,0 +1,165 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Script: configure-cloudberry.sh +# Description: Configures Apache Cloudberry build environment and runs +# ./configure with optimized settings. Performs the +# following: +# 1. Prepares /usr/local/cloudberry-db directory +# 2. Sets up library dependencies +# 3. Configures build with required features enabled +# +# Configuration Features: +# - Cloud Storage Integration (gpcloud) +# - IC Proxy Support +# - MapReduce Processing +# - Oracle Compatibility (orafce) +# - ORCA Query Optimizer +# - PAX Access Method +# - PXF External Table Access +# - Test Automation Support (tap-tests) +# +# System Integration: +# - GSSAPI Authentication +# - LDAP Authentication +# - XML Processing +# - LZ4 Compression +# - OpenSSL Support +# - PAM Authentication +# - Perl Support +# - Python Support +# +# Required Environment Variables: +# SRC_DIR - Root source directory +# +# Optional Environment Variables: +# LOG_DIR - Directory for logs (defaults to ${SRC_DIR}/build-logs) +# ENABLE_DEBUG - Enable debug build options (true/false, defaults to +# false) +# +# When true, enables: +# --enable-debug +# --enable-profiling +# --enable-cassert +# --enable-debug-extensions +# +# Prerequisites: +# - System dependencies must be installed: +# * xerces-c development files +# * OpenSSL development files +# * Python development files +# * Perl development files +# * LDAP development files +# - /usr/local must be writable +# - User must have sudo privileges +# +# Usage: +# Export required variables: +# export SRC_DIR=/path/to/cloudberry/source +# Then run: +# ./configure-cloudberry.sh +# +# Exit Codes: +# 0 - Configuration completed successfully +# 1 - Environment setup failed +# 2 - Directory preparation failed +# 3 - Library setup failed +# 4 - Configure command failed +# +# -------------------------------------------------------------------- + +set -euo pipefail + +# Source common utilities +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "${SCRIPT_DIR}/cloudberry-utils.sh" + +# Define log directory and files +export LOG_DIR="${SRC_DIR}/build-logs" +CONFIGURE_LOG="${LOG_DIR}/configure.log" + +# Initialize environment +init_environment "Cloudberry Configure Script" "${CONFIGURE_LOG}" + +# Initial setup +log_section "Initial Setup" +execute_cmd sudo rm -rf /usr/local/cloudberry-db || exit 2 +execute_cmd sudo chmod a+w /usr/local || exit 2 +execute_cmd mkdir -p /usr/local/cloudberry-db/lib || exit 2 +execute_cmd sudo cp /usr/local/xerces-c/lib/libxerces-c.so \ + /usr/local/xerces-c/lib/libxerces-c-3.3.so \ + /usr/local/cloudberry-db/lib || exit 3 +execute_cmd sudo chown -R gpadmin:gpadmin /usr/local/cloudberry-db || exit 2 +log_section_end "Initial Setup" + +# Set environment +log_section "Environment Setup" +export LD_LIBRARY_PATH=/usr/local/cloudberry-db/lib:LD_LIBRARY_PATH +log_section_end "Environment Setup" + +# Add debug options if ENABLE_DEBUG is set to "true" +CONFIGURE_DEBUG_OPTS="" + +if [ "${ENABLE_DEBUG:-false}" = "true" ]; then + CONFIGURE_DEBUG_OPTS="--enable-debug \ + --enable-profiling \ + --enable-cassert \ + --enable-debug-extensions" +fi + +# Configure build +log_section "Configure" +execute_cmd ./configure --prefix=/usr/local/cloudberry-db \ + --disable-external-fts \ + --enable-gpcloud \ + --enable-ic-proxy \ + --enable-mapreduce \ + --enable-orafce \ + --enable-orca \ + --enable-pax \ + --enable-pxf \ + --enable-tap-tests \ + ${CONFIGURE_DEBUG_OPTS} \ + --with-gssapi \ + --with-ldap \ + --with-libxml \ + --with-lz4 \ + --with-openssl \ + --with-pam \ + --with-perl \ + --with-pgport=5432 \ + --with-python \ + --with-pythonsrc-ext \ + --with-ssl=openssl \ + --with-openssl \ + --with-uuid=e2fs \ + --with-includes=/usr/local/xerces-c/include \ + --with-libraries=/usr/local/cloudberry-db/lib || exit 4 +log_section_end "Configure" + +# Capture version information +log_section "Version Information" +execute_cmd ag "GP_VERSION | GP_VERSION_NUM | PG_VERSION | PG_VERSION_NUM | PG_VERSION_STR" src/include/pg_config.h +log_section_end "Version Information" + +# Log completion +log_completion "Cloudberry Configure Script" "${CONFIGURE_LOG}" +exit 0 diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh b/cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh new file mode 100755 index 00000000000..e01d62fac9c --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh @@ -0,0 +1,125 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Script: create-cloudberry-demo-cluster.sh +# Description: Creates and configures a demo Apache Cloudbery cluster. +# Performs the following steps: +# 1. Sets up required environment variables +# 2. Verifies SSH connectivity +# 3. Creates demo cluster using make +# 4. Initializes and starts the cluster +# 5. Performs comprehensive verification checks +# +# Required Environment Variables: +# SRC_DIR - Root source directory +# +# Optional Environment Variables: +# LOG_DIR - Directory for logs (defaults to ${SRC_DIR}/build-logs) +# +# Prerequisites: +# - Apache Cloudberry must be installed (/usr/local/cloudberry-db) +# - SSH must be configured for passwordless access to localhost +# - User must have permissions to create cluster directories +# - PostgreSQL client tools (psql) must be available +# +# Usage: +# Export required variables: +# export SRC_DIR=/path/to/cloudberry/source +# Then run: +# ./create-cloudberry-demo-cluster.sh +# +# Verification Checks: +# - Apache Cloudberry version +# - Segment configuration +# - Available extensions +# - Active sessions +# - Configuration history +# - Replication status +# +# Exit Codes: +# 0 - Cluster created and verified successfully +# 1 - Environment setup failed +# 2 - SSH verification failed +# 3 - Cluster creation failed +# 4 - Cluster startup failed +# 5 - Verification checks failed +# +# -------------------------------------------------------------------- + +set -euo pipefail + +# Source common utilities +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "${SCRIPT_DIR}/cloudberry-utils.sh" + +# Define log directory +export LOG_DIR="${SRC_DIR}/build-logs" +CLUSTER_LOG="${LOG_DIR}/cluster.log" + +# Initialize environment +init_environment "Cloudberry Demo Cluster Script" "${CLUSTER_LOG}" + +# Setup environment +log_section "Environment Setup" +source /usr/local/cloudberry-db/cloudberry-env.sh || exit 1 +log_section_end "Environment Setup" + +# Verify SSH access +log_section "SSH Verification" +execute_cmd ssh $(hostname) 'whoami; hostname' || exit 2 +log_section_end "SSH Verification" + +# Create demo cluster +log_section "Demo Cluster Creation" +execute_cmd make create-demo-cluster --directory ${SRC_DIR}/../cloudberry || exit 3 +log_section_end "Demo Cluster Creation" + +# Source demo environment +log_section "Source Environment" +source ${SRC_DIR}/../cloudberry/gpAux/gpdemo/gpdemo-env.sh || exit 1 +log_section_end "Source Environment" + +# Manage cluster state +log_section "Cluster Management" +execute_cmd gpstop -a || exit 4 +execute_cmd gpstart -a || exit 4 +execute_cmd gpstate || exit 4 +log_section_end "Cluster Management" + +# Verify installation +log_section "Installation Verification" +verification_failed=false +run_psql_cmd "SELECT version()" || verification_failed=true +run_psql_cmd "SELECT * from gp_segment_configuration" || verification_failed=true +run_psql_cmd "SELECT * FROM pg_available_extensions" || verification_failed=true +run_psql_cmd "SELECT * from pg_stat_activity" || verification_failed=true +run_psql_cmd "SELECT * FROM gp_configuration_history" || verification_failed=true +run_psql_cmd "SELECT * FROM gp_stat_replication" || verification_failed=true + +if [ "$verification_failed" = true ]; then + echo "One or more verification checks failed" | tee -a "${CLUSTER_LOG}" + exit 5 +fi +log_section_end "Installation Verification" + +# Log completion +log_completion "Cloudberry Demo Cluster Script" "${CLUSTER_LOG}" +exit 0 diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/destroy-cloudberry-demo-cluster.sh b/cloudberry-devops-release/build_automation/cloudberry/scripts/destroy-cloudberry-demo-cluster.sh new file mode 100755 index 00000000000..3d4ce241979 --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/destroy-cloudberry-demo-cluster.sh @@ -0,0 +1,101 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Script: destroy-cloudberry-demo-cluster.sh +# Description: Destroys and cleans up a demo Apache Cloudberry +# cluster. +# Performs the following steps: +# 1. Sources required environment variables +# 2. Stops any running cluster processes +# 3. Removes cluster data directories and configuration +# 4. Cleans up any remaining cluster resources +# +# Required Environment Variables: +# SRC_DIR - Root source directory +# +# Optional Environment Variables: +# LOG_DIR - Directory for logs (defaults to ${SRC_DIR}/build-logs) +# +# Prerequisites: +# - Apache Cloudberry environment must be available +# - User must have permissions to remove cluster directories +# - No active connections to the cluster +# +# Usage: +# Export required variables: +# export SRC_DIR=/path/to/cloudberry/source +# Then run: +# ./destroy-cloudberry-demo-cluster.sh +# +# Exit Codes: +# 0 - Cluster destroyed successfully +# 1 - Environment setup/sourcing failed +# 2 - Cluster destruction failed +# +# Related Scripts: +# - create-cloudberry-demo-cluster.sh: Creates a new demo cluster +# +# Notes: +# - This script will forcefully terminate all cluster processes +# - All cluster data will be permanently deleted +# - Make sure to backup any important data before running +# +# -------------------------------------------------------------------- + +set -euo pipefail + +# Source common utilities +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "${SCRIPT_DIR}/cloudberry-utils.sh" + +# Define log directory +export LOG_DIR="${SRC_DIR}/build-logs" +CLUSTER_LOG="${LOG_DIR}/destroy-cluster.log" + +# Initialize environment +init_environment "Destroy Cloudberry Demo Cluster Script" "${CLUSTER_LOG}" + +# Source Cloudberry environment +log_section "Environment Setup" +source_cloudberry_env || { + echo "Failed to source Cloudberry environment" | tee -a "${CLUSTER_LOG}" + exit 1 +} +log_section_end "Environment Setup" + +# Destroy demo cluster +log_section "Destroy Demo Cluster" +execute_cmd make destroy-demo-cluster --directory ${SRC_DIR}/../cloudberry || { + echo "Failed to destroy demo cluster" | tee -a "${CLUSTER_LOG}" + exit 2 +} +log_section_end "Destroy Demo Cluster" + +# Verify cleanup +log_section "Cleanup Verification" +if [ -d "${SRC_DIR}/../cloudberry/gpAux/gpdemo/data" ]; then + echo "Warning: Data directory still exists after cleanup" | tee -a "${CLUSTER_LOG}" +fi +log_section_end "Cleanup Verification" + +# Log completion +log_completion "Destroy Cloudberry Demo Cluster Script" "${CLUSTER_LOG}" +exit 0 diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/parse-results.pl b/cloudberry-devops-release/build_automation/cloudberry/scripts/parse-results.pl new file mode 100755 index 00000000000..d09085d5fb9 --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/parse-results.pl @@ -0,0 +1,215 @@ +#!/usr/bin/env perl +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Script: parse_results.pl +# Description: Processes Cloudberry test output to extract statistics +# and results. +# Analyzes test log files to determine: +# 1. Overall test status (pass/fail) +# 2. Total number of tests run +# 3. Number of passed, failed, and ignored tests +# 4. Names of failed and ignored tests +# 5. Validates test counts for consistency +# Results are written to a file for shell script processing. +# +# Arguments: +# log-file Path to test log file (required) +# +# Input File Format: +# Expects test log files containing one of the following summary formats: +# - "All X tests passed." +# - "Y of X tests failed." +# - "X of Y tests passed, Z failed test(s) ignored." +# - "X of Y tests failed, Z of these failures ignored." +# +# And failed or ignored test entries in format: +# - "test_name ... FAILED" +# - "test_name ... failed (ignored)" +# +# Output File (test_results.txt): +# Environment variable format: +# STATUS=passed|failed +# TOTAL_TESTS= +# FAILED_TESTS= +# PASSED_TESTS= +# IGNORED_TESTS= +# FAILED_TEST_NAMES= +# IGNORED_TEST_NAMES= +# +# Prerequisites: +# - Read access to input log file +# - Write access to current directory +# - Perl 5.x or higher +# +# Exit Codes: +# 0 - All tests passed, or only ignored failures occurred +# 1 - Some non-ignored tests failed +# 2 - Parse error or cannot access files +# +# Example Usage: +# ./parse_results.pl test_output.log +# +# Error Handling: +# - Validates input file existence and readability +# - Verifies failed and ignored test counts match found entries +# - Reports parsing errors with detailed messages +# +# -------------------------------------------------------------------- + +use strict; +use warnings; + +# Exit codes +use constant { + SUCCESS => 0, + TEST_FAILURE => 1, + PARSE_ERROR => 2 +}; + +# Get log file path from command line argument +my $file = $ARGV[0] or die "Usage: $0 LOG_FILE\n"; +print "Parsing test results from: $file\n"; + +# Check if file exists and is readable +unless (-e $file) { + print "Error: File does not exist: $file\n"; + exit PARSE_ERROR; +} +unless (-r $file) { + print "Error: File is not readable: $file\n"; + exit PARSE_ERROR; +} + +# Open and parse the log file +open(my $fh, '<', $file) or do { + print "Cannot open log file: $! (looking in $file)\n"; + exit PARSE_ERROR; +}; + +# Initialize variables +my ($status, $total_tests, $failed_tests, $ignored_tests, $passed_tests) = ('', 0, 0, 0, 0); +my @failed_test_list = (); +my @ignored_test_list = (); + +while (<$fh>) { + # Match the summary lines + if (/All (\d+) tests passed\./) { + $status = 'passed'; + $total_tests = $1; + $passed_tests = $1; + } + elsif (/(\d+) of (\d+) tests passed, (\d+) failed test\(s\) ignored\./) { + $status = 'passed'; + $passed_tests = $1; + $total_tests = $2; + $ignored_tests = $3; + } + elsif (/(\d+) of (\d+) tests failed\./) { + $status = 'failed'; + $failed_tests = $1; + $total_tests = $2; + $passed_tests = $2 - $1; + } + elsif (/(\d+) of (\d+) tests failed, (\d+) of these failures ignored\./) { + $status = 'failed'; + $failed_tests = $1 - $3; + $ignored_tests = $3; + $total_tests = $2; + $passed_tests = $2 - $1; + } + + # Capture failed tests + if (/^(?:\s+|test\s+)(\S+)\s+\.\.\.\s+FAILED\s+/) { + push @failed_test_list, $1; + } + + # Capture ignored tests + if (/^(?:\s+|test\s+)(\S+)\s+\.\.\.\s+failed \(ignored\)/) { + push @ignored_test_list, $1; + } +} + +# Close the log file +close $fh; + +# Validate failed test count matches found test names +if ($status eq 'failed' && scalar(@failed_test_list) != $failed_tests) { + print "Error: Found $failed_tests failed tests in summary but found " . scalar(@failed_test_list) . " failed test names\n"; + print "Failed test names found:\n"; + foreach my $test (@failed_test_list) { + print " - $test\n"; + } + exit PARSE_ERROR; +} + +# Validate ignored test count matches found test names +if ($ignored_tests != scalar(@ignored_test_list)) { + print "Error: Found $ignored_tests ignored tests in summary but found " . scalar(@ignored_test_list) . " ignored test names\n"; + print "Ignored test names found:\n"; + foreach my $test (@ignored_test_list) { + print " - $test\n"; + } + exit PARSE_ERROR; +} + +# Write results to the results file +open my $result_fh, '>', 'test_results.txt' or die "Cannot write to results file: $!\n"; +print $result_fh "STATUS=$status\n"; +print $result_fh "TOTAL_TESTS=$total_tests\n"; +print $result_fh "PASSED_TESTS=$passed_tests\n"; +print $result_fh "FAILED_TESTS=$failed_tests\n"; +print $result_fh "IGNORED_TESTS=$ignored_tests\n"; +if (@failed_test_list) { + print $result_fh "FAILED_TEST_NAMES=" . join(',', @failed_test_list) . "\n"; +} +if (@ignored_test_list) { + print $result_fh "IGNORED_TEST_NAMES=" . join(',', @ignored_test_list) . "\n"; +} +close $result_fh; + +# Print to stdout for logging +print "Test Results:\n"; +print "Status: $status\n"; +print "Total Tests: $total_tests\n"; +print "Failed Tests: $failed_tests\n"; +print "Ignored Tests: $ignored_tests\n"; +print "Passed Tests: $passed_tests\n"; +if (@failed_test_list) { + print "Failed Test Names:\n"; + foreach my $test (@failed_test_list) { + print " - $test\n"; + } +} +if (@ignored_test_list) { + print "Ignored Test Names:\n"; + foreach my $test (@ignored_test_list) { + print " - $test\n"; + } +} + +# Exit with appropriate code +if ($status eq 'passed') { + exit SUCCESS; +} elsif ($status eq 'failed') { + exit TEST_FAILURE; +} else { + exit PARSE_ERROR; +} diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh b/cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh new file mode 100755 index 00000000000..ace00f63b3f --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh @@ -0,0 +1,100 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Script: parse-test-results.sh +# Description: Parses Apache Cloudberry test results and processes the +# output. +# Provides GitHub Actions integration and environment +# variable export functionality. This script is a wrapper +# around parse_results.pl, adding the following features: +# 1. Default log file path handling +# 2. GitHub Actions output integration +# 3. Environment variable management +# 4. Result file cleanup +# +# Arguments: +# [log-file] - Path to test log file +# (defaults to build-logs/details/make-${MAKE_NAME}.log) +# +# Prerequisites: +# - parse_results.pl must be in the same directory +# - Perl must be installed and in PATH +# - Write access to current directory (for temporary files) +# - Read access to test log file +# +# Output Variables (in GitHub Actions): +# status - Test status (passed/failed) +# total_tests - Total number of tests +# failed_tests - Number of failed tests +# passed_tests - Number of passed tests +# ignored_tests - Number of ignored tests +# failed_test_names - Names of failed tests (comma-separated) +# ignored_test_names - Names of ignored tests (comma-separated) +# +# Usage Examples: +# # Parse default log file: +# ./parse-test-results.sh +# +# # Parse specific log file: +# ./parse-test-results.sh path/to/test.log +# +# # Use with GitHub Actions: +# export GITHUB_OUTPUT=/path/to/output +# ./parse-test-results.sh +# +# Exit Codes: +# 0 - All tests passed successfully +# 1 - Tests failed but results were properly parsed +# 2 - Parse error, missing files, or unknown status +# +# Files Created/Modified: +# - Temporary: test_results.txt (automatically cleaned up) +# - If GITHUB_OUTPUT set: Appends results to specified file +# +# -------------------------------------------------------------------- + +set -uo pipefail + +# Default log file path +DEFAULT_LOG_PATH="build-logs/details/make-${MAKE_NAME}.log" +LOG_FILE=${1:-$DEFAULT_LOG_PATH} + +# Get the directory where this script is located +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# Check if log file exists +if [ ! -f "$LOG_FILE" ]; then + echo "Error: Test log file not found: $LOG_FILE" + exit 2 +fi + +# Run the perl script and capture its exit code +perl "${SCRIPT_DIR}/parse-results.pl" "$LOG_FILE" +perl_exit_code=$? + +# Check if results file exists and source it if it does +if [ ! -f test_results.txt ]; then + echo "Error: No results file generated" + exit 2 +fi + +# Return the perl script's exit code +exit $perl_exit_code diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh b/cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh new file mode 100755 index 00000000000..411f16ca625 --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Script: test-cloudberry.sh +# Description: Executes Apache Cloudberry test suite using specified +# make target. Supports different test types through make +# target configuration. Sources Cloudberry environment +# before running tests. +# +# Required Environment Variables: +# MAKE_TARGET - Make target to execute (e.g., installcheck-world) +# MAKE_DIRECTORY - Directory where make command will be executed +# MAKE_NAME - Name of the make operation (for logging) +# +# Optional Environment Variables: +# LOG_DIR - Directory for logs (defaults to build-logs) +# PGOPTIONS - PostgreSQL server options +# +# Usage: +# Export required variables: +# export MAKE_TARGET=installcheck-world +# export MAKE_DIRECTORY="/path/to/make/dir" +# export MAKE_NAME="Install Check" +# Then run: +# ./test-cloudberry.sh +# +# Exit Codes: +# 0 - All tests passed successfully +# 1 - Environment setup failed (missing required variables, environment sourcing failed) +# 2 - Test execution failed (make command returned error) +# +# -------------------------------------------------------------------- + +set -euo pipefail + +# Source common utilities +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "${SCRIPT_DIR}/cloudberry-utils.sh" + +# Define log directory and files +export LOG_DIR="build-logs" +TEST_LOG="${LOG_DIR}/test.log" + +# Initialize environment +init_environment "Cloudberry Test Script" "${TEST_LOG}" + +# Source Cloudberry environment +log_section "Environment Setup" +source_cloudberry_env || exit 1 +log_section_end "Environment Setup" + +echo "MAKE_TARGET: ${MAKE_TARGET}" +echo "MAKE_DIRECTORY: ${MAKE_DIRECTORY}" +echo "PGOPTIONS: ${PGOPTIONS}" + +# Execute specified target +log_section "Install Check" +execute_cmd make ${MAKE_TARGET} ${MAKE_DIRECTORY} || exit 2 +log_section_end "Install Check" + +# Log completion +log_completion "Cloudberry Test Script" "${TEST_LOG}" +exit 0 diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh b/cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh new file mode 100755 index 00000000000..f7bc120bd08 --- /dev/null +++ b/cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Script: unittest-cloudberry.sh +# Description: Executes unit tests for Apache Cloudberry from source +# code. Runs the 'unittest-check' make target and logs +# results. Tests are executed against the compiled source +# without requiring a full installation. +# +# Required Environment Variables: +# SRC_DIR - Root source directory +# +# Optional Environment Variables: +# LOG_DIR - Directory for logs (defaults to ${SRC_DIR}/build-logs) +# +# Usage: +# ./unittest-cloudberry.sh +# +# Exit Codes: +# 0 - All unit tests passed successfully +# 1 - Environment setup failed (missing SRC_DIR, LOG_DIR creation failed) +# 2 - Unit test execution failed +# +# -------------------------------------------------------------------- + +set -euo pipefail + +# Source common utilities +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "${SCRIPT_DIR}/cloudberry-utils.sh" + +# Define log directory and files +export LOG_DIR="${SRC_DIR}/build-logs" +UNITTEST_LOG="${LOG_DIR}/unittest.log" + +# Initialize environment +init_environment "Cloudberry Unittest Script" "${UNITTEST_LOG}" + +# Set environment +log_section "Environment Setup" +export LD_LIBRARY_PATH=/usr/local/cloudberry-db/lib:LD_LIBRARY_PATH +log_section_end "Environment Setup" + +# Unittest process +log_section "Unittest Process" +execute_cmd make --directory ${SRC_DIR}/../cloudberry unittest-check || exit 2 +log_section_end "Unittest Process" + +# Log completion +log_completion "Cloudberry Unittest Script" "${UNITTEST_LOG}" +exit 0 diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/Dockerfile b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/Dockerfile new file mode 100644 index 00000000000..a7f810be55d --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/Dockerfile @@ -0,0 +1,210 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Apache Cloudberry (incubating) is an effort undergoing incubation at +# the Apache Software Foundation (ASF), sponsored by the Apache +# Incubator PMC. +# +# Incubation is required of all newly accepted projects until a +# further review indicates that the infrastructure, communications, +# and decision making process have stabilized in a manner consistent +# with other successful ASF projects. +# +# While incubation status is not necessarily a reflection of the +# completeness or stability of the code, it does indicate that the +# project has yet to be fully endorsed by the ASF. +# +# -------------------------------------------------------------------- +# Dockerfile for Apache Cloudberry Build Environment +# -------------------------------------------------------------------- +# This Dockerfile sets up a Rocky Linux 9-based container for building +# and developing Apache Cloudberry. It installs necessary system +# utilities, development tools, and configures the environment for SSH +# access and systemd support. +# +# Key Features: +# - Locale setup for en_US.UTF-8 +# - SSH daemon setup for remote access +# - Essential development tools and libraries installation +# - User configuration for 'gpadmin' with sudo privileges +# +# Usage: +# docker build -t cloudberry-db-env . +# docker run -h cdw -it cloudberry-db-env +# -------------------------------------------------------------------- + +# Base image: Rocky Linux 8 +FROM rockylinux/rockylinux:8 + +# Argument for configuring the timezone +ARG TIMEZONE_VAR="America/Los_Angeles" + +# Environment variables for locale and user +ENV container=docker +ENV LANG=en_US.UTF-8 +ENV USER=gpadmin + +# -------------------------------------------------------------------- +# Install Development Tools and Utilities +# -------------------------------------------------------------------- +# Install various development tools, system utilities, and libraries +# required for building and running Apache Cloudberry. +# - EPEL repository is enabled for additional packages. +# - Cleanup steps are added to reduce image size after installation. +# -------------------------------------------------------------------- +RUN dnf makecache && \ + dnf install -y \ + epel-release \ + git && \ + dnf makecache && \ + dnf config-manager --disable epel && \ + dnf install -y -d0 --enablerepo=epel \ + the_silver_searcher \ + htop && \ + dnf install -y -d0 \ + apr-devel \ + autoconf \ + bison \ + bzip2-devel \ + cmake3 \ + diffutils \ + file \ + flex \ + gcc \ + gcc-c++ \ + gdb \ + glibc-langpack-en \ + glibc-locale-source \ + iproute \ + java-11-openjdk \ + java-11-openjdk-devel \ + krb5-devel \ + libcurl-devel \ + libevent-devel \ + libuuid-devel \ + libxml2-devel \ + libzstd-devel \ + lsof \ + lz4 \ + lz4-devel \ + make \ + m4 \ + nc \ + net-tools \ + openldap-devel \ + openssh-clients \ + openssh-server \ + openssl-devel \ + pam-devel \ + passwd \ + perl-Env \ + perl-ExtUtils-Embed \ + perl-Test-Simple \ + procps-ng \ + python3 \ + python3-devel \ + readline-devel \ + rsync \ + sshpass \ + sudo \ + tar \ + unzip \ + util-linux-ng \ + wget \ + which \ + zlib-devel && \ + dnf install -y -d0 --enablerepo=devel \ + libuv-devel \ + libyaml-devel \ + perl-IPC-Run \ + protobuf-devel && \ + dnf clean all && rm -rf /var/cache/dnf/* && \ + cd && XERCES_LATEST_RELEASE=3.3.0 && \ + wget -nv "https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-${XERCES_LATEST_RELEASE}.tar.gz" && \ + echo "$(curl -sL https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-${XERCES_LATEST_RELEASE}.tar.gz.sha256)" | sha256sum -c - && \ + tar xf "xerces-c-${XERCES_LATEST_RELEASE}.tar.gz"; rm "xerces-c-${XERCES_LATEST_RELEASE}.tar.gz" && \ + cd xerces-c-${XERCES_LATEST_RELEASE} && \ + ./configure --prefix=/usr/local/xerces-c && \ + make -j$(nproc) && \ + make install -C ~/xerces-c-${XERCES_LATEST_RELEASE} && \ + rm -rf ~/xerces-c* && \ + cd && GO_VERSION="go1.23.4" && \ + ARCH=$(uname -m) && \ + if [ "${ARCH}" = "aarch64" ]; then \ + GO_ARCH="arm64" && \ + GO_SHA256="16e5017863a7f6071363782b1b8042eb12c6ca4f4cd71528b2123f0a1275b13e"; \ + elif [ "${ARCH}" = "x86_64" ]; then \ + GO_ARCH="amd64" && \ + GO_SHA256="6924efde5de86fe277676e929dc9917d466efa02fb934197bc2eba35d5680971"; \ + else \ + echo "Unsupported architecture: ${ARCH}" && exit 1; \ + fi && \ + GO_URL="https://go.dev/dl/${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \ + wget -nv "${GO_URL}" && \ + echo "${GO_SHA256} ${GO_VERSION}.linux-${GO_ARCH}.tar.gz" | sha256sum -c - && \ + tar xf "${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \ + mv go "/usr/local/${GO_VERSION}" && \ + ln -s "/usr/local/${GO_VERSION}" /usr/local/go && \ + rm -f "${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \ + echo 'export PATH=$PATH:/usr/local/go/bin' | tee -a /etc/profile.d/go.sh > /dev/null + +# -------------------------------------------------------------------- +# Copy Configuration Files and Setup the Environment +# -------------------------------------------------------------------- +# - Copy custom configuration files from the build context to /tmp/. +# - Apply custom system limits and timezone. +# - Create and configure the 'gpadmin' user with sudo privileges. +# - Set up SSH for password-based authentication. +# - Generate locale and set the default locale to en_US.UTF-8. +# -------------------------------------------------------------------- +COPY ./configs/* /tmp/ + +RUN cp /tmp/90-cbdb-limits /etc/security/limits.d/90-cbdb-limits && \ + sed -i.bak -r 's/^(session\s+required\s+pam_limits.so)/#\1/' /etc/pam.d/* && \ + cat /usr/share/zoneinfo/${TIMEZONE_VAR} > /etc/localtime && \ + chmod 777 /tmp/init_system.sh && \ + /usr/sbin/groupadd gpadmin && \ + /usr/sbin/useradd gpadmin -g gpadmin -G wheel && \ + setcap cap_net_raw+ep /usr/bin/ping && \ + echo 'gpadmin ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/90-gpadmin && \ + echo -e '\n# Add Cloudberry entries\nif [ -f /usr/local/cbdb/cloudberry-env.sh ]; then\n source /usr/local/cbdb/cloudberry-env.sh\nfi' >> /home/gpadmin/.bashrc && \ + ssh-keygen -A && \ + echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config && \ + localedef -i en_US -f UTF-8 en_US.UTF-8 && \ + echo "LANG=en_US.UTF-8" | tee /etc/locale.conf && \ + dnf clean all # Final cleanup to remove unnecessary files + +# Install testinfra via pip +RUN pip3 install pytest-testinfra + +# Example: Copying test files into the container +COPY tests /tests + +# -------------------------------------------------------------------- +# Set the Default User and Command +# -------------------------------------------------------------------- +# The default user is set to 'gpadmin', and the container starts by +# running the init_system.sh script. The container also mounts the +# /sys/fs/cgroup volume for systemd compatibility. +# -------------------------------------------------------------------- +USER gpadmin + +VOLUME [ "/sys/fs/cgroup" ] +CMD ["bash","-c","/tmp/init_system.sh"] diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/90-cbdb-limits b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/90-cbdb-limits new file mode 100644 index 00000000000..474957c42f6 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/90-cbdb-limits @@ -0,0 +1,32 @@ +# /etc/security/limits.d/90-db-limits +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +# Core dump file size limits for gpadmin +gpadmin soft core unlimited +gpadmin hard core unlimited + +# Open file limits for gpadmin +gpadmin soft nofile 524288 +gpadmin hard nofile 524288 + +# Process limits for gpadmin +gpadmin soft nproc 131072 +gpadmin hard nproc 131072 diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/gpinitsystem.conf b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/gpinitsystem.conf new file mode 100644 index 00000000000..3c0fb48b58c --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/gpinitsystem.conf @@ -0,0 +1,87 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# gpinitsystem Configuration File for Apache Cloudberry +# -------------------------------------------------------------------- +# This configuration file is used to initialize an Apache Cloudberry +# cluster. It defines the settings for the coordinator, primary segments, +# and mirrors, as well as other important configuration options. +# -------------------------------------------------------------------- + +# Segment prefix - This prefix is used for naming the segment directories. +# For example, the primary segment directories will be named gpseg0, gpseg1, etc. +SEG_PREFIX=gpseg + +# Coordinator port - The port number where the coordinator will listen. +# This is the port used by clients to connect to the database. +COORDINATOR_PORT=5432 + +# Coordinator hostname - The hostname of the machine where the coordinator +# will be running. The $(hostname) command will automatically insert the +# hostname of the current machine. +COORDINATOR_HOSTNAME=$(hostname) + +# Coordinator data directory - The directory where the coordinator's data +# will be stored. This directory should have enough space to store metadata +# and system catalogs. +COORDINATOR_DIRECTORY=/data1/coordinator + +# Base port for primary segments - The starting port number for the primary +# segments. Each primary segment will use a unique port number starting from +# this base. +PORT_BASE=6000 + +# Primary segment data directories - An array specifying the directories where +# the primary segment data will be stored. Each directory corresponds to a +# primary segment. In this case, two primary segments will be created in the +# same directory. +declare -a DATA_DIRECTORY=(/data1/primary /data1/primary) + +# Base port for mirror segments - The starting port number for the mirror +# segments. Each mirror segment will use a unique port number starting from +# this base. +MIRROR_PORT_BASE=7000 + +# Mirror segment data directories - An array specifying the directories where +# the mirror segment data will be stored. Each directory corresponds to a +# mirror segment. In this case, two mirror segments will be created in the +# same directory. +declare -a MIRROR_DATA_DIRECTORY=(/data1/mirror /data1/mirror) + +# Trusted shell - The shell program used for remote execution. Cloudberry uses +# SSH to run commands on other machines in the cluster. 'ssh' is the default. +TRUSTED_SHELL=ssh + +# Database encoding - The character set encoding to be used by the database. +# 'UNICODE' is a common choice, especially for internationalization. +ENCODING=UNICODE + +# Default database name - The name of the default database to be created during +# initialization. This is also the default database that the gpadmin user will +# connect to. +DATABASE_NAME=gpadmin + +# Machine list file - A file containing the list of hostnames where the primary +# segments will be created. Each line in the file represents a different machine. +# This file is critical for setting up the cluster across multiple nodes. +MACHINE_LIST_FILE=/home/gpadmin/hostfile_gpinitsystem + +# -------------------------------------------------------------------- +# End of gpinitsystem Configuration File +# -------------------------------------------------------------------- diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/init_system.sh b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/init_system.sh new file mode 100755 index 00000000000..cc2d5991b9d --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/init_system.sh @@ -0,0 +1,193 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# -------------------------------------------------------------------- +# Container Initialization Script +# -------------------------------------------------------------------- +# This script sets up the environment inside the Docker container for +# the Apache Cloudberry Build Environment. It performs the following +# tasks: +# +# 1. Verifies that the container is running with the expected hostname. +# 2. Starts the SSH daemon to allow SSH access to the container. +# 3. Configures passwordless SSH access for the 'gpadmin' user. +# 4. Displays a welcome banner and system information. +# 5. Starts an interactive bash shell. +# +# This script is intended to be used as an entrypoint or initialization +# script for the Docker container. +# -------------------------------------------------------------------- + +# -------------------------------------------------------------------- +# Check if the hostname is 'cdw' +# -------------------------------------------------------------------- +# The script checks if the container's hostname is set to 'cdw'. This is +# a requirement for this environment, and if the hostname does not match, +# the script will exit with an error message. This ensures consistency +# across different environments. +# -------------------------------------------------------------------- +if [ "$(hostname)" != "cdw" ]; then + echo "Error: This container must be run with the hostname 'cdw'." + echo "Use the following command: docker run -h cdw ..." + exit 1 +fi + +# -------------------------------------------------------------------- +# Start SSH daemon and setup for SSH access +# -------------------------------------------------------------------- +# The SSH daemon is started to allow remote access to the container via +# SSH. This is useful for development and debugging purposes. If the SSH +# daemon fails to start, the script exits with an error. +# -------------------------------------------------------------------- +if ! sudo /usr/sbin/sshd; then + echo "Failed to start SSH daemon" >&2 + exit 1 +fi + +# -------------------------------------------------------------------- +# Remove /run/nologin to allow logins +# -------------------------------------------------------------------- +# The /run/nologin file, if present, prevents users from logging into +# the system. This file is removed to ensure that users can log in via SSH. +# -------------------------------------------------------------------- +sudo rm -rf /run/nologin + +# -------------------------------------------------------------------- +# Configure passwordless SSH access for 'gpadmin' user +# -------------------------------------------------------------------- +# The script sets up SSH key-based authentication for the 'gpadmin' user, +# allowing passwordless SSH access. It generates a new SSH key pair if one +# does not already exist, and configures the necessary permissions. +# -------------------------------------------------------------------- +mkdir -p /home/gpadmin/.ssh +chmod 700 /home/gpadmin/.ssh + +if [ ! -f /home/gpadmin/.ssh/id_rsa ]; then + ssh-keygen -t rsa -b 4096 -C gpadmin -f /home/gpadmin/.ssh/id_rsa -P "" > /dev/null 2>&1 +fi + +cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys +chmod 600 /home/gpadmin/.ssh/authorized_keys + +# Add the container's hostname to the known_hosts file to avoid SSH warnings +ssh-keyscan -t rsa cdw > /home/gpadmin/.ssh/known_hosts 2>/dev/null + +# Change to the home directory of the current user +cd $HOME + +# -------------------------------------------------------------------- +# Display a Welcome Banner +# -------------------------------------------------------------------- +# The following ASCII art and welcome message are displayed when the +# container starts. This banner provides a visual indication that the +# container is running in the Apache Cloudberry Build Environment. +# -------------------------------------------------------------------- +cat <<-'EOF' + +====================================================================== + + ++++++++++ ++++++ + ++++++++++++++ +++++++ + ++++ +++++ ++++ + ++++ +++++++++ + =+==== =============+ + ======== =====+ ===== + ==== ==== ==== ==== + ==== === === ==== + ==== === === ==== + ==== === ==-- === + ===== ===== -- ==== + ===================== ====== + ============================ + =-----= + ____ _ _ _ + / ___|| | ___ _ _ __| || |__ ___ _ __ _ __ _ _ + | | | | / _ \ | | | | / _` || '_ \ / _ \| '__|| '__|| | | | + | |___ | || (_) || |_| || (_| || |_) || __/| | | | | |_| | + \____||_| \____ \__,_| \__,_||_.__/ \___||_| |_| \__, | + |___/ +---------------------------------------------------------------------- + +EOF + +# -------------------------------------------------------------------- +# Display System Information +# -------------------------------------------------------------------- +# The script sources the /etc/os-release file to retrieve the operating +# system name and version. It then displays the following information: +# - OS name and version +# - Current user +# - Container hostname +# - IP address +# - CPU model name and number of cores +# - Total memory available +# This information is useful for users to understand the environment they +# are working in. +# -------------------------------------------------------------------- +source /etc/os-release + +# First, create the CPU info detection function +get_cpu_info() { + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + lscpu | grep 'Model name:' | awk '{print substr($0, index($0,$3))}' + elif [ "$ARCH" = "aarch64" ]; then + VENDOR=$(lscpu | grep 'Vendor ID:' | awk '{print $3}') + if [ "$VENDOR" = "Apple" ] || [ "$VENDOR" = "0x61" ]; then + echo "Apple Silicon ($ARCH)" + else + if [ -f /proc/cpuinfo ]; then + IMPL=$(grep "CPU implementer" /proc/cpuinfo | head -1 | awk '{print $3}') + PART=$(grep "CPU part" /proc/cpuinfo | head -1 | awk '{print $3}') + if [ ! -z "$IMPL" ] && [ ! -z "$PART" ]; then + echo "ARM $ARCH (Implementer: $IMPL, Part: $PART)" + else + echo "ARM $ARCH" + fi + else + echo "ARM $ARCH" + fi + fi + else + echo "Unknown architecture: $ARCH" + fi +} + +cat <<-EOF +Welcome to the Apache Cloudberry Build Environment! + +Container OS ........ : $NAME $VERSION +User ................ : $(whoami) +Container hostname .. : $(hostname) +IP Address .......... : $(hostname -I | awk '{print $1}') +CPU Info ............ : $(get_cpu_info) +CPU(s) .............. : $(nproc) +Memory .............. : $(free -h | grep Mem: | awk '{print $2}') total +====================================================================== + +EOF + +# -------------------------------------------------------------------- +# Start an interactive bash shell +# -------------------------------------------------------------------- +# Finally, the script starts an interactive bash shell to keep the +# container running and allow the user to interact with the environment. +# -------------------------------------------------------------------- +/bin/bash diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/requirements.txt b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/requirements.txt new file mode 100644 index 00000000000..b9711eddac5 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/requirements.txt @@ -0,0 +1,3 @@ +testinfra +pytest-testinfra +paramiko diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/testinfra/test_cloudberry_db_env.py b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/testinfra/test_cloudberry_db_env.py new file mode 100644 index 00000000000..c484c5b9408 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/testinfra/test_cloudberry_db_env.py @@ -0,0 +1,126 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +import testinfra + +def test_installed_packages(host): + """ + Test if the essential packages are installed. + """ + packages = [ + "epel-release", + "git", + "the_silver_searcher", + "htop", + "bison", + "gcc", + "gcc-c++", + "glibc-langpack-en", + "glibc-locale-source", + "openssh-clients", + "openssh-server", + "sudo", + "rsync", + "wget", + "openssl-devel", + "python36-devel", + "readline-devel", + "zlib-devel", + "libcurl-devel", + "libevent-devel", + "libxml2-devel", + "libuuid-devel", + "libzstd-devel", + "lz4", + "openldap-devel", + "libuv-devel", + "libyaml-devel" + ] + for package in packages: + pkg = host.package(package) + assert pkg.is_installed + + +def test_user_gpadmin_exists(host): + """ + Test if the gpadmin user exists and is configured properly. + """ + user = host.user("gpadmin") + assert user.exists + assert "wheel" in user.groups + + +def test_ssh_service(host): + """ + Test if SSH service is configured correctly. + """ + sshd_config = host.file("/etc/ssh/sshd_config") + assert sshd_config.exists + + +def test_locale_configured(host): + """ + Test if the locale is configured correctly. + """ + locale_conf = host.file("/etc/locale.conf") + assert locale_conf.exists + assert locale_conf.contains("LANG=en_US.UTF-8") + + +def test_timezone(host): + """ + Test if the timezone is configured correctly. + """ + localtime = host.file("/etc/localtime") + assert localtime.exists + + +def test_system_limits_configured(host): + """ + Test if the custom system limits are applied. + """ + limits_file = host.file("/etc/security/limits.d/90-cbdb-limits") + assert limits_file.exists + + +def test_init_system_script(host): + """ + Test if the init_system.sh script is present and executable. + """ + script = host.file("/tmp/init_system.sh") + assert script.exists + assert script.mode == 0o777 + + +def test_custom_configuration_files(host): + """ + Test if custom configuration files are correctly copied. + """ + config_file = host.file("/tmp/90-cbdb-limits") + assert config_file.exists + + +def test_locale_generated(host): + """ + Test if the en_US.UTF-8 locale is correctly generated. + """ + locale = host.run("locale -a | grep en_US.utf8") + assert locale.exit_status == 0 + assert "en_US.utf8" in locale.stdout diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/Dockerfile b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/Dockerfile new file mode 100644 index 00000000000..1da729a1969 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/Dockerfile @@ -0,0 +1,215 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Apache Cloudberry (incubating) is an effort undergoing incubation at +# the Apache Software Foundation (ASF), sponsored by the Apache +# Incubator PMC. +# +# Incubation is required of all newly accepted projects until a +# further review indicates that the infrastructure, communications, +# and decision making process have stabilized in a manner consistent +# with other successful ASF projects. +# +# While incubation status is not necessarily a reflection of the +# completeness or stability of the code, it does indicate that the +# project has yet to be fully endorsed by the ASF. +# +# -------------------------------------------------------------------- +# Dockerfile for Apache Cloudberry Build Environment +# -------------------------------------------------------------------- +# This Dockerfile sets up a Rocky Linux 9-based container for building +# and developing Apache Cloudberry. It installs necessary system +# utilities, development tools, and configures the environment for SSH +# access and systemd support. +# +# Key Features: +# - Locale setup for en_US.UTF-8 +# - SSH daemon setup for remote access +# - Essential development tools and libraries installation +# - User configuration for 'gpadmin' with sudo privileges +# +# Usage: +# docker build -t cloudberry-db-env . +# docker run -h cdw -it cloudberry-db-env +# -------------------------------------------------------------------- + +# Base image: Rocky Linux 9 +FROM rockylinux/rockylinux:9 + +# Argument for configuring the timezone +ARG TIMEZONE_VAR="America/Los_Angeles" + +# Environment variables for locale and user +ENV container=docker +ENV LANG=en_US.UTF-8 +ENV USER=gpadmin + +# -------------------------------------------------------------------- +# Install Development Tools and Utilities +# -------------------------------------------------------------------- +# Install various development tools, system utilities, and libraries +# required for building and running Apache Cloudberry. +# - EPEL repository is enabled for additional packages. +# - Cleanup steps are added to reduce image size after installation. +# -------------------------------------------------------------------- +RUN dnf makecache && \ + dnf install -y \ + epel-release \ + git && \ + dnf config-manager --disable epel-cisco-openh264 && \ + dnf makecache && \ + dnf config-manager --disable epel && \ + dnf install -y --enablerepo=epel \ + the_silver_searcher \ + bat \ + htop && \ + dnf install -y \ + bison \ + cmake3 \ + ed \ + file \ + flex \ + gcc \ + gcc-c++ \ + gdb \ + glibc-langpack-en \ + glibc-locale-source \ + initscripts \ + iproute \ + less \ + lsof \ + m4 \ + net-tools \ + openssh-clients \ + openssh-server \ + perl \ + rpm-build \ + rpmdevtools \ + rsync \ + sudo \ + tar \ + unzip \ + util-linux-ng \ + wget \ + sshpass \ + which && \ + dnf install -y \ + apr-devel \ + bzip2-devel \ + java-11-openjdk \ + java-11-openjdk-devel \ + krb5-devel \ + libcurl-devel \ + libevent-devel \ + libxml2-devel \ + libuuid-devel \ + libzstd-devel \ + lz4 \ + lz4-devel \ + openldap-devel \ + openssl-devel \ + pam-devel \ + perl-ExtUtils-Embed \ + perl-Test-Simple \ + perl-core \ + python3-devel \ + python3-pytest \ + readline-devel \ + zlib-devel && \ + dnf install -y --enablerepo=crb \ + libuv-devel \ + libyaml-devel \ + perl-IPC-Run \ + protobuf-devel && \ + dnf clean all && \ + cd && XERCES_LATEST_RELEASE=3.3.0 && \ + wget -nv "https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-${XERCES_LATEST_RELEASE}.tar.gz" && \ + echo "$(curl -sL https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-${XERCES_LATEST_RELEASE}.tar.gz.sha256)" | sha256sum -c - && \ + tar xf "xerces-c-${XERCES_LATEST_RELEASE}.tar.gz"; rm "xerces-c-${XERCES_LATEST_RELEASE}.tar.gz" && \ + cd xerces-c-${XERCES_LATEST_RELEASE} && \ + ./configure --prefix=/usr/local/xerces-c && \ + make -j$(nproc) && \ + make install -C ~/xerces-c-${XERCES_LATEST_RELEASE} && \ + rm -rf ~/xerces-c* && \ + cd && GO_VERSION="go1.23.4" && \ + ARCH=$(uname -m) && \ + if [ "${ARCH}" = "aarch64" ]; then \ + GO_ARCH="arm64" && \ + GO_SHA256="16e5017863a7f6071363782b1b8042eb12c6ca4f4cd71528b2123f0a1275b13e"; \ + elif [ "${ARCH}" = "x86_64" ]; then \ + GO_ARCH="amd64" && \ + GO_SHA256="6924efde5de86fe277676e929dc9917d466efa02fb934197bc2eba35d5680971"; \ + else \ + echo "Unsupported architecture: ${ARCH}" && exit 1; \ + fi && \ + GO_URL="https://go.dev/dl/${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \ + wget -nv "${GO_URL}" && \ + echo "${GO_SHA256} ${GO_VERSION}.linux-${GO_ARCH}.tar.gz" | sha256sum -c - && \ + tar xf "${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \ + mv go "/usr/local/${GO_VERSION}" && \ + ln -s "/usr/local/${GO_VERSION}" /usr/local/go && \ + rm -f "${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \ + echo 'export PATH=$PATH:/usr/local/go/bin' | tee -a /etc/profile.d/go.sh > /dev/null + +# -------------------------------------------------------------------- +# Copy Configuration Files and Setup the Environment +# -------------------------------------------------------------------- +# - Copy custom configuration files from the build context to /tmp/. +# - Apply custom system limits and timezone. +# - Create and configure the 'gpadmin' user with sudo privileges. +# - Set up SSH for password-based authentication. +# - Generate locale and set the default locale to en_US.UTF-8. +# -------------------------------------------------------------------- + +# Copy configuration files from their respective locations +COPY ./configs/* /tmp/ + +RUN cp /tmp/90-cbdb-limits /etc/security/limits.d/90-cbdb-limits && \ + sed -i.bak -r 's/^(session\s+required\s+pam_limits.so)/#\1/' /etc/pam.d/* && \ + cat /usr/share/zoneinfo/${TIMEZONE_VAR} > /etc/localtime && \ + chmod 777 /tmp/init_system.sh && \ + /usr/sbin/groupadd gpadmin && \ + /usr/sbin/useradd gpadmin -g gpadmin -G wheel && \ + setcap cap_net_raw+ep /usr/bin/ping && \ + echo 'gpadmin ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/90-gpadmin && \ + echo -e '\n# Add Cloudberry entries\nif [ -f /usr/local/cbdb/cloudberry-env.sh ]; then\n source /usr/local/cbdb/cloudberry-env.sh\nfi' >> /home/gpadmin/.bashrc && \ + ssh-keygen -A && \ + echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config && \ + localedef -i en_US -f UTF-8 en_US.UTF-8 && \ + echo "LANG=en_US.UTF-8" | tee /etc/locale.conf && \ + dnf clean all # Final cleanup to remove unnecessary files + +# Install testinfra via pip +RUN pip3 install pytest-testinfra + +# Copying test files into the container +COPY ./tests /tests + +# -------------------------------------------------------------------- +# Set the Default User and Command +# -------------------------------------------------------------------- +# The default user is set to 'gpadmin', and the container starts by +# running the init_system.sh script. The container also mounts the +# /sys/fs/cgroup volume for systemd compatibility. +# -------------------------------------------------------------------- +USER gpadmin + +VOLUME [ "/sys/fs/cgroup" ] +CMD ["bash","-c","/tmp/init_system.sh"] diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/90-cbdb-limits b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/90-cbdb-limits new file mode 100644 index 00000000000..474957c42f6 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/90-cbdb-limits @@ -0,0 +1,32 @@ +# /etc/security/limits.d/90-db-limits +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +# Core dump file size limits for gpadmin +gpadmin soft core unlimited +gpadmin hard core unlimited + +# Open file limits for gpadmin +gpadmin soft nofile 524288 +gpadmin hard nofile 524288 + +# Process limits for gpadmin +gpadmin soft nproc 131072 +gpadmin hard nproc 131072 diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/gpinitsystem.conf b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/gpinitsystem.conf new file mode 100644 index 00000000000..d4d312231c5 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/gpinitsystem.conf @@ -0,0 +1,89 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +# -------------------------------------------------------------------- +# gpinitsystem Configuration File for Apache Cloudberry +# -------------------------------------------------------------------- +# This configuration file is used to initialize an Apache Cloudberry +# cluster. It defines the settings for the coordinator, primary segments, +# and mirrors, as well as other important configuration options. +# -------------------------------------------------------------------- + +# Segment prefix - This prefix is used for naming the segment directories. +# For example, the primary segment directories will be named gpseg0, gpseg1, etc. +SEG_PREFIX=gpseg + +# Coordinator port - The port number where the coordinator will listen. +# This is the port used by clients to connect to the database. +COORDINATOR_PORT=5432 + +# Coordinator hostname - The hostname of the machine where the coordinator +# will be running. The $(hostname) command will automatically insert the +# hostname of the current machine. +COORDINATOR_HOSTNAME=$(hostname) + +# Coordinator data directory - The directory where the coordinator's data +# will be stored. This directory should have enough space to store metadata +# and system catalogs. +COORDINATOR_DIRECTORY=/data1/coordinator + +# Base port for primary segments - The starting port number for the primary +# segments. Each primary segment will use a unique port number starting from +# this base. +PORT_BASE=6000 + +# Primary segment data directories - An array specifying the directories where +# the primary segment data will be stored. Each directory corresponds to a +# primary segment. In this case, two primary segments will be created in the +# same directory. +declare -a DATA_DIRECTORY=(/data1/primary /data1/primary) + +# Base port for mirror segments - The starting port number for the mirror +# segments. Each mirror segment will use a unique port number starting from +# this base. +MIRROR_PORT_BASE=7000 + +# Mirror segment data directories - An array specifying the directories where +# the mirror segment data will be stored. Each directory corresponds to a +# mirror segment. In this case, two mirror segments will be created in the +# same directory. +declare -a MIRROR_DATA_DIRECTORY=(/data1/mirror /data1/mirror) + +# Trusted shell - The shell program used for remote execution. Cloudberry uses +# SSH to run commands on other machines in the cluster. 'ssh' is the default. +TRUSTED_SHELL=ssh + +# Database encoding - The character set encoding to be used by the database. +# 'UNICODE' is a common choice, especially for internationalization. +ENCODING=UNICODE + +# Default database name - The name of the default database to be created during +# initialization. This is also the default database that the gpadmin user will +# connect to. +DATABASE_NAME=gpadmin + +# Machine list file - A file containing the list of hostnames where the primary +# segments will be created. Each line in the file represents a different machine. +# This file is critical for setting up the cluster across multiple nodes. +MACHINE_LIST_FILE=/home/gpadmin/hostfile_gpinitsystem + +# -------------------------------------------------------------------- +# End of gpinitsystem Configuration File +# -------------------------------------------------------------------- diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/init_system.sh b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/init_system.sh new file mode 100755 index 00000000000..d8c4a00b035 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/init_system.sh @@ -0,0 +1,192 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +## Container Initialization Script +# -------------------------------------------------------------------- +## This script sets up the environment inside the Docker container for +## the Apache Cloudberry Build Environment. It performs the following +## tasks: +## +## 1. Verifies that the container is running with the expected hostname. +## 2. Starts the SSH daemon to allow SSH access to the container. +## 3. Configures passwordless SSH access for the 'gpadmin' user. +## 4. Displays a welcome banner and system information. +## 5. Starts an interactive bash shell. +## +## This script is intended to be used as an entrypoint or initialization +## script for the Docker container. +# -------------------------------------------------------------------- + +# -------------------------------------------------------------------- +# Check if the hostname is 'cdw' +# -------------------------------------------------------------------- +# The script checks if the container's hostname is set to 'cdw'. This is +# a requirement for this environment, and if the hostname does not match, +# the script will exit with an error message. This ensures consistency +# across different environments. +# -------------------------------------------------------------------- +if [ "$(hostname)" != "cdw" ]; then + echo "Error: This container must be run with the hostname 'cdw'." + echo "Use the following command: docker run -h cdw ..." + exit 1 +fi + +# -------------------------------------------------------------------- +# Start SSH daemon and setup for SSH access +# -------------------------------------------------------------------- +# The SSH daemon is started to allow remote access to the container via +# SSH. This is useful for development and debugging purposes. If the SSH +# daemon fails to start, the script exits with an error. +# -------------------------------------------------------------------- +if ! sudo /usr/sbin/sshd; then + echo "Failed to start SSH daemon" >&2 + exit 1 +fi + +# -------------------------------------------------------------------- +# Remove /run/nologin to allow logins +# -------------------------------------------------------------------- +# The /run/nologin file, if present, prevents users from logging into +# the system. This file is removed to ensure that users can log in via SSH. +# -------------------------------------------------------------------- +sudo rm -rf /run/nologin + +# -------------------------------------------------------------------- +# Configure passwordless SSH access for 'gpadmin' user +# -------------------------------------------------------------------- +# The script sets up SSH key-based authentication for the 'gpadmin' user, +# allowing passwordless SSH access. It generates a new SSH key pair if one +# does not already exist, and configures the necessary permissions. +# -------------------------------------------------------------------- +mkdir -p /home/gpadmin/.ssh +chmod 700 /home/gpadmin/.ssh + +if [ ! -f /home/gpadmin/.ssh/id_rsa ]; then + ssh-keygen -t rsa -b 4096 -C gpadmin -f /home/gpadmin/.ssh/id_rsa -P "" > /dev/null 2>&1 +fi + +cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys +chmod 600 /home/gpadmin/.ssh/authorized_keys + +# Add the container's hostname to the known_hosts file to avoid SSH warnings +ssh-keyscan -t rsa cdw > /home/gpadmin/.ssh/known_hosts 2>/dev/null + +# Change to the home directory of the current user +cd $HOME + +# -------------------------------------------------------------------- +# Display a Welcome Banner +# -------------------------------------------------------------------- +# The following ASCII art and welcome message are displayed when the +# container starts. This banner provides a visual indication that the +# container is running in the Apache Cloudberry Build Environment. +# -------------------------------------------------------------------- +cat <<-'EOF' + +====================================================================== + + ++++++++++ ++++++ + ++++++++++++++ +++++++ + ++++ +++++ ++++ + ++++ +++++++++ + =+==== =============+ + ======== =====+ ===== + ==== ==== ==== ==== + ==== === === ==== + ==== === === ==== + ==== === ==-- === + ===== ===== -- ==== + ===================== ====== + ============================ + =-----= + ____ _ _ _ + / ___|| | ___ _ _ __| || |__ ___ _ __ _ __ _ _ + | | | | / _ \ | | | | / _` || '_ \ / _ \| '__|| '__|| | | | + | |___ | || (_) || |_| || (_| || |_) || __/| | | | | |_| | + \____||_| \____ \__,_| \__,_||_.__/ \___||_| |_| \__, | + |___/ +---------------------------------------------------------------------- + +EOF + +# -------------------------------------------------------------------- +# Display System Information +# -------------------------------------------------------------------- +# The script sources the /etc/os-release file to retrieve the operating +# system name and version. It then displays the following information: +# - OS name and version +# - Current user +# - Container hostname +# - IP address +# - CPU model name and number of cores +# - Total memory available +# This information is useful for users to understand the environment they +# are working in. +# -------------------------------------------------------------------- +source /etc/os-release + +# First, create the CPU info detection function +get_cpu_info() { + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + lscpu | grep 'Model name:' | awk '{print substr($0, index($0,$3))}' + elif [ "$ARCH" = "aarch64" ]; then + VENDOR=$(lscpu | grep 'Vendor ID:' | awk '{print $3}') + if [ "$VENDOR" = "Apple" ] || [ "$VENDOR" = "0x61" ]; then + echo "Apple Silicon ($ARCH)" + else + if [ -f /proc/cpuinfo ]; then + IMPL=$(grep "CPU implementer" /proc/cpuinfo | head -1 | awk '{print $3}') + PART=$(grep "CPU part" /proc/cpuinfo | head -1 | awk '{print $3}') + if [ ! -z "$IMPL" ] && [ ! -z "$PART" ]; then + echo "ARM $ARCH (Implementer: $IMPL, Part: $PART)" + else + echo "ARM $ARCH" + fi + else + echo "ARM $ARCH" + fi + fi + else + echo "Unknown architecture: $ARCH" + fi +} + +cat <<-EOF +Welcome to the Apache Cloudberry Build Environment! + +Container OS ........ : $NAME $VERSION +User ................ : $(whoami) +Container hostname .. : $(hostname) +IP Address .......... : $(hostname -I | awk '{print $1}') +CPU Info ............ : $(get_cpu_info) +CPU(s) .............. : $(nproc) +Memory .............. : $(free -h | grep Mem: | awk '{print $2}') total +====================================================================== + +EOF + +# -------------------------------------------------------------------- +# Start an interactive bash shell +# -------------------------------------------------------------------- +# Finally, the script starts an interactive bash shell to keep the +# container running and allow the user to interact with the environment. +# -------------------------------------------------------------------- +/bin/bash diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/requirements.txt b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/requirements.txt new file mode 100644 index 00000000000..b9711eddac5 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/requirements.txt @@ -0,0 +1,3 @@ +testinfra +pytest-testinfra +paramiko diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/testinfra/test_cloudberry_db_env.py b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/testinfra/test_cloudberry_db_env.py new file mode 100644 index 00000000000..9da7929ff98 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/testinfra/test_cloudberry_db_env.py @@ -0,0 +1,129 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +import testinfra + +def test_installed_packages(host): + """ + Test if the essential packages are installed. + """ + packages = [ + "epel-release", + "git", + "the_silver_searcher", + "bat", + "htop", + "bison", + "cmake", + "gcc", + "gcc-c++", + "glibc-langpack-en", + "glibc-locale-source", + "openssh-clients", + "openssh-server", + "sudo", + "rsync", + "wget", + "openssl-devel", + "python3-devel", + "python3-pytest", + "readline-devel", + "zlib-devel", + "libcurl-devel", + "libevent-devel", + "libxml2-devel", + "libuuid-devel", + "libzstd-devel", + "lz4", + "openldap-devel", + "libuv-devel", + "libyaml-devel" + ] + for package in packages: + pkg = host.package(package) + assert pkg.is_installed + + +def test_user_gpadmin_exists(host): + """ + Test if the gpadmin user exists and is configured properly. + """ + user = host.user("gpadmin") + assert user.exists + assert "wheel" in user.groups + + +def test_ssh_service(host): + """ + Test if SSH service is configured correctly. + """ + sshd_config = host.file("/etc/ssh/sshd_config") + assert sshd_config.exists + + +def test_locale_configured(host): + """ + Test if the locale is configured correctly. + """ + locale_conf = host.file("/etc/locale.conf") + assert locale_conf.exists + assert locale_conf.contains("LANG=en_US.UTF-8") + + +def test_timezone(host): + """ + Test if the timezone is configured correctly. + """ + localtime = host.file("/etc/localtime") + assert localtime.exists + + +def test_system_limits_configured(host): + """ + Test if the custom system limits are applied. + """ + limits_file = host.file("/etc/security/limits.d/90-cbdb-limits") + assert limits_file.exists + + +def test_init_system_script(host): + """ + Test if the init_system.sh script is present and executable. + """ + script = host.file("/tmp/init_system.sh") + assert script.exists + assert script.mode == 0o777 + + +def test_custom_configuration_files(host): + """ + Test if custom configuration files are correctly copied. + """ + config_file = host.file("/tmp/90-cbdb-limits") + assert config_file.exists + + +def test_locale_generated(host): + """ + Test if the en_US.UTF-8 locale is correctly generated. + """ + locale = host.run("locale -a | grep en_US.utf8") + assert locale.exit_status == 0 + assert "en_US.utf8" in locale.stdout diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky8/Dockerfile b/cloudberry-devops-release/images/docker/cbdb/test/rocky8/Dockerfile new file mode 100644 index 00000000000..0d19026774d --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/test/rocky8/Dockerfile @@ -0,0 +1,135 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Apache Cloudberry (incubating) is an effort undergoing incubation at +# the Apache Software Foundation (ASF), sponsored by the Apache +# Incubator PMC. +# +# Incubation is required of all newly accepted projects until a +# further review indicates that the infrastructure, communications, +# and decision making process have stabilized in a manner consistent +# with other successful ASF projects. +# +# While incubation status is not necessarily a reflection of the +# completeness or stability of the code, it does indicate that the +# project has yet to be fully endorsed by the ASF. +# +# -------------------------------------------------------------------- +# Dockerfile for Apache Cloudberry Base Environment +# -------------------------------------------------------------------- +# This Dockerfile sets up a Rocky Linux 8-based container to serve as +# a base environment for evaluating Apache Cloudberry. It installs +# necessary system utilities, configures the environment for SSH access, +# and sets up a 'gpadmin' user with sudo privileges. The Apache +# Cloudberry RPM can be installed into this container for testing and +# functional verification. +# +# Key Features: +# - Locale setup for en_US.UTF-8 +# - SSH daemon setup for remote access +# - Essential system utilities installation +# - Separate user creation and configuration steps +# +# Security Considerations: +# - This Dockerfile prioritizes ease of use for functional testing and +# evaluation. It includes configurations such as passwordless sudo access +# for the 'gpadmin' user and SSH access with password authentication. +# - These configurations are suitable for testing and development but +# should NOT be used in a production environment due to potential security +# risks. +# +# Usage: +# docker build -t cloudberry-db-base-env . +# docker run -h cdw -it cloudberry-db-base-env +# -------------------------------------------------------------------- + +# Base image: Rocky Linux 8 +FROM rockylinux/rockylinux:8 + +# Argument for configuring the timezone +ARG TIMEZONE_VAR="America/Los_Angeles" + +# Environment variables for locale +ENV LANG=en_US.UTF-8 + +# -------------------------------------------------------------------- +# System Update and Installation +# -------------------------------------------------------------------- +# Update the system and install essential system utilities required for +# running and testing Apache Cloudberry. Cleanup the DNF cache afterward +# to reduce the image size. +# -------------------------------------------------------------------- +RUN dnf install -y \ + file \ + gdb \ + glibc-locale-source \ + make \ + openssh \ + openssh-clients \ + openssh-server \ + procps-ng \ + sudo \ + which \ + && \ + dnf clean all # Clean up DNF cache after package installations + +# -------------------------------------------------------------------- +# User Creation and Configuration +# -------------------------------------------------------------------- +# - Create the 'gpadmin' user and group. +# - Configure the 'gpadmin' user with passwordless sudo privileges. +# - Add Cloudberry-specific entries to the gpadmin's .bashrc. +# -------------------------------------------------------------------- +RUN /usr/sbin/groupadd gpadmin && \ + /usr/sbin/useradd gpadmin -g gpadmin -G wheel && \ + echo 'gpadmin ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/90-gpadmin && \ + echo -e '\n# Add Cloudberry entries\nif [ -f /usr/local/cloudberry/cloudberry-env.sh ]; then\n source /usr/local/cloudberry/cloudberry-env.sh\n export COORDINATOR_DATA_DIRECTORY=/data1/coordinator/gpseg-1\nfi' >> /home/gpadmin/.bashrc + +# -------------------------------------------------------------------- +# Copy Configuration Files and Setup the Environment +# -------------------------------------------------------------------- +# - Copy custom configuration files from the build context to /tmp/. +# - Apply custom system limits and timezone. +# - Set up SSH for password-based authentication. +# - Generate locale and set the default locale to en_US.UTF-8. +# -------------------------------------------------------------------- +COPY ./configs/* /tmp/ + +RUN cp /tmp/90-cbdb-limits /etc/security/limits.d/90-cbdb-limits && \ + sed -i.bak -r 's/^(session\s+required\s+pam_limits.so)/#\1/' /etc/pam.d/* && \ + cat /usr/share/zoneinfo/${TIMEZONE_VAR} > /etc/localtime && \ + chmod 777 /tmp/init_system.sh && \ + setcap cap_net_raw+ep /usr/bin/ping && \ + ssh-keygen -A && \ + echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config && \ + localedef -i en_US -f UTF-8 en_US.UTF-8 && \ + echo "LANG=en_US.UTF-8" | tee /etc/locale.conf + +# -------------------------------------------------------------------- +# Set the Default User and Command +# -------------------------------------------------------------------- +# The default user is set to 'gpadmin', and the container starts by +# running the init_system.sh script. This container serves as a base +# environment, and the Apache Cloudberry RPM can be installed for +# testing and functional verification. +# -------------------------------------------------------------------- +USER gpadmin + +CMD ["bash","-c","/tmp/init_system.sh"] diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/90-cbdb-limits b/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/90-cbdb-limits new file mode 100644 index 00000000000..474957c42f6 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/90-cbdb-limits @@ -0,0 +1,32 @@ +# /etc/security/limits.d/90-db-limits +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +# Core dump file size limits for gpadmin +gpadmin soft core unlimited +gpadmin hard core unlimited + +# Open file limits for gpadmin +gpadmin soft nofile 524288 +gpadmin hard nofile 524288 + +# Process limits for gpadmin +gpadmin soft nproc 131072 +gpadmin hard nproc 131072 diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/gpinitsystem.conf b/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/gpinitsystem.conf new file mode 100644 index 00000000000..4a5f82b668d --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/gpinitsystem.conf @@ -0,0 +1,87 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# gpinitsystem Configuration File for Cloudberry Database +# -------------------------------------------------------------------- +# This configuration file is used to initialize a Cloudberry Database +# cluster. It defines the settings for the coordinator, primary segments, +# and mirrors, as well as other important configuration options. +# -------------------------------------------------------------------- + +# Segment prefix - This prefix is used for naming the segment directories. +# For example, the primary segment directories will be named gpseg0, gpseg1, etc. +SEG_PREFIX=gpseg + +# Coordinator port - The port number where the coordinator will listen. +# This is the port used by clients to connect to the database. +COORDINATOR_PORT=5432 + +# Coordinator hostname - The hostname of the machine where the coordinator +# will be running. The $(hostname) command will automatically insert the +# hostname of the current machine. +COORDINATOR_HOSTNAME=$(hostname) + +# Coordinator data directory - The directory where the coordinator's data +# will be stored. This directory should have enough space to store metadata +# and system catalogs. +COORDINATOR_DIRECTORY=/data1/coordinator + +# Base port for primary segments - The starting port number for the primary +# segments. Each primary segment will use a unique port number starting from +# this base. +PORT_BASE=6000 + +# Primary segment data directories - An array specifying the directories where +# the primary segment data will be stored. Each directory corresponds to a +# primary segment. In this case, two primary segments will be created in the +# same directory. +declare -a DATA_DIRECTORY=(/data1/primary /data1/primary) + +# Base port for mirror segments - The starting port number for the mirror +# segments. Each mirror segment will use a unique port number starting from +# this base. +MIRROR_PORT_BASE=7000 + +# Mirror segment data directories - An array specifying the directories where +# the mirror segment data will be stored. Each directory corresponds to a +# mirror segment. In this case, two mirror segments will be created in the +# same directory. +declare -a MIRROR_DATA_DIRECTORY=(/data1/mirror /data1/mirror) + +# Trusted shell - The shell program used for remote execution. Cloudberry uses +# SSH to run commands on other machines in the cluster. 'ssh' is the default. +TRUSTED_SHELL=ssh + +# Database encoding - The character set encoding to be used by the database. +# 'UNICODE' is a common choice, especially for internationalization. +ENCODING=UNICODE + +# Default database name - The name of the default database to be created during +# initialization. This is also the default database that the gpadmin user will +# connect to. +DATABASE_NAME=gpadmin + +# Machine list file - A file containing the list of hostnames where the primary +# segments will be created. Each line in the file represents a different machine. +# This file is critical for setting up the cluster across multiple nodes. +MACHINE_LIST_FILE=/home/gpadmin/hostfile_gpinitsystem + +# -------------------------------------------------------------------- +# End of gpinitsystem Configuration File +# -------------------------------------------------------------------- diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/init_system.sh b/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/init_system.sh new file mode 100755 index 00000000000..3ea7e34b0ff --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/init_system.sh @@ -0,0 +1,221 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# Container Initialization Script +# -------------------------------------------------------------------- +# This script sets up the environment inside the Docker container for +# the Apache Cloudberry Build Environment. It performs the following +# tasks: +# +# 1. Verifies that the container is running with the expected hostname. +# 2. Starts the SSH daemon to allow SSH access to the container. +# 3. Configures passwordless SSH access for the 'gpadmin' user. +# 4. Sets up the necessary directories and configuration files for +# Apache Cloudberry. +# 5. Displays a welcome banner and system information. +# 6. Starts an interactive bash shell. +# +# This script is intended to be used as an entrypoint or initialization +# script for the Docker container. +# -------------------------------------------------------------------- + +# -------------------------------------------------------------------- +# Check if the hostname is 'cdw' +# -------------------------------------------------------------------- +# The script checks if the container's hostname is set to 'cdw'. This is +# a requirement for this environment, and if the hostname does not match, +# the script will exit with an error message. This ensures consistency +# across different environments. +# -------------------------------------------------------------------- +if [ "$(hostname)" != "cdw" ]; then + echo "Error: This container must be run with the hostname 'cdw'." + echo "Use the following command: docker run -h cdw ..." + exit 1 +fi + +# -------------------------------------------------------------------- +# Start SSH daemon and setup for SSH access +# -------------------------------------------------------------------- +# The SSH daemon is started to allow remote access to the container via +# SSH. This is useful for development and debugging purposes. If the SSH +# daemon fails to start, the script exits with an error. +# -------------------------------------------------------------------- +if ! sudo /usr/sbin/sshd; then + echo "Failed to start SSH daemon" >&2 + exit 1 +fi + +# -------------------------------------------------------------------- +# Remove /run/nologin to allow logins +# -------------------------------------------------------------------- +# The /run/nologin file, if present, prevents users from logging into +# the system. This file is removed to ensure that users can log in via SSH. +# -------------------------------------------------------------------- +sudo rm -rf /run/nologin + +# -------------------------------------------------------------------- +# Configure passwordless SSH access for 'gpadmin' user +# -------------------------------------------------------------------- +# The script sets up SSH key-based authentication for the 'gpadmin' user, +# allowing passwordless SSH access. It generates a new SSH key pair if one +# does not already exist, and configures the necessary permissions. +# -------------------------------------------------------------------- +mkdir -p /home/gpadmin/.ssh +chmod 700 /home/gpadmin/.ssh + +if [ ! -f /home/gpadmin/.ssh/id_rsa ]; then + ssh-keygen -t rsa -b 4096 -C gpadmin -f /home/gpadmin/.ssh/id_rsa -P "" > /dev/null 2>&1 +fi + +cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys +chmod 600 /home/gpadmin/.ssh/authorized_keys + +# Add the container's hostname to the known_hosts file to avoid SSH warnings +ssh-keyscan -t rsa cdw > /home/gpadmin/.ssh/known_hosts 2>/dev/null + +# -------------------------------------------------------------------- +# Cloudberry Data Directories Setup +# -------------------------------------------------------------------- +# The script sets up the necessary directories for Apache Cloudberry, +# including directories for the coordinator, standby coordinator, primary +# segments, and mirror segments. It also sets up the configuration files +# required for initializing the database. +# -------------------------------------------------------------------- +sudo rm -rf /data1/* +sudo mkdir -p /data1/coordinator /data1/standby_coordinator /data1/primary /data1/mirror +sudo chown -R gpadmin.gpadmin /data1 + +# Copy the gpinitsystem configuration file to the home directory +cp /tmp/gpinitsystem.conf /home/gpadmin + +# Set up the hostfile for cluster initialization +echo $(hostname) > /home/gpadmin/hostfile_gpinitsystem + +# Change to the home directory of the current user +cd $HOME + +# -------------------------------------------------------------------- +# Display a Welcome Banner +# -------------------------------------------------------------------- +# The following ASCII art and welcome message are displayed when the +# container starts. This banner provides a visual indication that the +# container is running in the Apache Cloudberry Build Environment. +# -------------------------------------------------------------------- +cat <<-'EOF' + +====================================================================== + + ++++++++++ ++++++ + ++++++++++++++ +++++++ + ++++ +++++ ++++ + ++++ +++++++++ + =+==== =============+ + ======== =====+ ===== + ==== ==== ==== ==== + ==== === === ==== + ==== === === ==== + ==== === ==-- === + ===== ===== -- ==== + ===================== ====== + ============================ + =-----= + ____ _ _ _ + / ___|| | ___ _ _ __| || |__ ___ _ __ _ __ _ _ + | | | | / _ \ | | | | / _` || '_ \ / _ \| '__|| '__|| | | | + | |___ | || (_) || |_| || (_| || |_) || __/| | | | | |_| | + \____||_| \____ \__,_| \__,_||_.__/ \___||_| |_| \__, | + |___/ +---------------------------------------------------------------------- + +EOF + +# -------------------------------------------------------------------- +# Display System Information +# -------------------------------------------------------------------- +# The script sources the /etc/os-release file to retrieve the operating +# system name and version. It then displays the following information: +# - OS name and version +# - Current user +# - Container hostname +# - IP address +# - CPU model name and number of cores +# - Total memory available +# - Cloudberry version (if installed) +# This information is useful for users to understand the environment they +# are working in. +# -------------------------------------------------------------------- +source /etc/os-release + +# First, create the CPU info detection function +get_cpu_info() { + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + lscpu | grep 'Model name:' | awk '{print substr($0, index($0,$3))}' + elif [ "$ARCH" = "aarch64" ]; then + VENDOR=$(lscpu | grep 'Vendor ID:' | awk '{print $3}') + if [ "$VENDOR" = "Apple" ] || [ "$VENDOR" = "0x61" ]; then + echo "Apple Silicon ($ARCH)" + else + if [ -f /proc/cpuinfo ]; then + IMPL=$(grep "CPU implementer" /proc/cpuinfo | head -1 | awk '{print $3}') + PART=$(grep "CPU part" /proc/cpuinfo | head -1 | awk '{print $3}') + if [ ! -z "$IMPL" ] && [ ! -z "$PART" ]; then + echo "ARM $ARCH (Implementer: $IMPL, Part: $PART)" + else + echo "ARM $ARCH" + fi + else + echo "ARM $ARCH" + fi + fi + else + echo "Unknown architecture: $ARCH" + fi +} + +# Check if Apache Cloudberry is installed and display its version +if rpm -q apache-cloudberry-db-incubating > /dev/null 2>&1; then + CBDB_VERSION=$(/usr/local/cbdb/bin/postgres --gp-version) +else + CBDB_VERSION="Not installed" +fi + +cat <<-EOF +Welcome to the Apache Cloudberry Test Environment! + +Cloudberry version .. : $CBDB_VERSION +Container OS ........ : $NAME $VERSION +User ................ : $(whoami) +Container hostname .. : $(hostname) +IP Address .......... : $(hostname -I | awk '{print $1}') +CPU Info ............ : $(get_cpu_info) +CPU(s) .............. : $(nproc) +Memory .............. : $(free -h | grep Mem: | awk '{print $2}') total +====================================================================== + +EOF + +# -------------------------------------------------------------------- +# Start an interactive bash shell +# -------------------------------------------------------------------- +# Finally, the script starts an interactive bash shell to keep the +# container running and allow the user to interact with the environment. +# -------------------------------------------------------------------- +/bin/bash diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky9/Dockerfile b/cloudberry-devops-release/images/docker/cbdb/test/rocky9/Dockerfile new file mode 100644 index 00000000000..245cf91d6a6 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/test/rocky9/Dockerfile @@ -0,0 +1,135 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Apache Cloudberry (incubating) is an effort undergoing incubation at +# the Apache Software Foundation (ASF), sponsored by the Apache +# Incubator PMC. +# +# Incubation is required of all newly accepted projects until a +# further review indicates that the infrastructure, communications, +# and decision making process have stabilized in a manner consistent +# with other successful ASF projects. +# +# While incubation status is not necessarily a reflection of the +# completeness or stability of the code, it does indicate that the +# project has yet to be fully endorsed by the ASF. +# +# -------------------------------------------------------------------- +# Dockerfile for Cloudberry Database Base Environment +# -------------------------------------------------------------------- +# This Dockerfile sets up a Rocky Linux 9-based container to serve as +# a base environment for evaluating the Cloudberry Database. It installs +# necessary system utilities, configures the environment for SSH access, +# and sets up a 'gpadmin' user with sudo privileges. The Cloudberry +# Database RPM can be installed into this container for testing and +# functional verification. +# +# Key Features: +# - Locale setup for en_US.UTF-8 +# - SSH daemon setup for remote access +# - Essential system utilities installation +# - Separate user creation and configuration steps +# +# Security Considerations: +# - This Dockerfile prioritizes ease of use for functional testing and +# evaluation. It includes configurations such as passwordless sudo access +# for the 'gpadmin' user and SSH access with password authentication. +# - These configurations are suitable for testing and development but +# should NOT be used in a production environment due to potential security +# risks. +# +# Usage: +# docker build -t cloudberry-db-base-env . +# docker run -h cdw -it cloudberry-db-base-env +# -------------------------------------------------------------------- + +# Base image: Rocky Linux 9 +FROM rockylinux/rockylinux:9 + +# Argument for configuring the timezone +ARG TIMEZONE_VAR="America/Los_Angeles" + +# Environment variables for locale +ENV LANG=en_US.UTF-8 + +# -------------------------------------------------------------------- +# System Update and Installation +# -------------------------------------------------------------------- +# Update the system and install essential system utilities required for +# running and testing Cloudberry Database. Cleanup the DNF cache afterward +# to reduce the image size. +# -------------------------------------------------------------------- +RUN dnf install -y \ + file \ + gdb \ + glibc-locale-source \ + make \ + openssh \ + openssh-clients \ + openssh-server \ + procps-ng \ + sudo \ + which \ + && \ + dnf clean all # Clean up DNF cache after package installations + +# -------------------------------------------------------------------- +# User Creation and Configuration +# -------------------------------------------------------------------- +# - Create the 'gpadmin' user and group. +# - Configure the 'gpadmin' user with passwordless sudo privileges. +# - Add Cloudberry-specific entries to the gpadmin's .bashrc. +# -------------------------------------------------------------------- +RUN /usr/sbin/groupadd gpadmin && \ + /usr/sbin/useradd gpadmin -g gpadmin -G wheel && \ + echo 'gpadmin ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/90-gpadmin && \ + echo -e '\n# Add Cloudberry entries\nif [ -f /usr/local/cloudberry/cloudberry-env.sh ]; then\n source /usr/local/cloudberry/cloudberry-env.sh\n export COORDINATOR_DATA_DIRECTORY=/data1/coordinator/gpseg-1\nfi' >> /home/gpadmin/.bashrc + +# -------------------------------------------------------------------- +# Copy Configuration Files and Setup the Environment +# -------------------------------------------------------------------- +# - Copy custom configuration files from the build context to /tmp/. +# - Apply custom system limits and timezone. +# - Set up SSH for password-based authentication. +# - Generate locale and set the default locale to en_US.UTF-8. +# -------------------------------------------------------------------- +COPY ./configs/* /tmp/ + +RUN cp /tmp/90-cbdb-limits /etc/security/limits.d/90-cbdb-limits && \ + sed -i.bak -r 's/^(session\s+required\s+pam_limits.so)/#\1/' /etc/pam.d/* && \ + cat /usr/share/zoneinfo/${TIMEZONE_VAR} > /etc/localtime && \ + chmod 777 /tmp/init_system.sh && \ + setcap cap_net_raw+ep /usr/bin/ping && \ + ssh-keygen -A && \ + echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config && \ + localedef -i en_US -f UTF-8 en_US.UTF-8 && \ + echo "LANG=en_US.UTF-8" | tee /etc/locale.conf + +# -------------------------------------------------------------------- +# Set the Default User and Command +# -------------------------------------------------------------------- +# The default user is set to 'gpadmin', and the container starts by +# running the init_system.sh script. This container serves as a base +# environment, and the Cloudberry Database RPM can be installed for +# testing and functional verification. +# -------------------------------------------------------------------- +USER gpadmin + +CMD ["bash","-c","/tmp/init_system.sh"] diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/90-cbdb-limits b/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/90-cbdb-limits new file mode 100644 index 00000000000..474957c42f6 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/90-cbdb-limits @@ -0,0 +1,32 @@ +# /etc/security/limits.d/90-db-limits +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +# Core dump file size limits for gpadmin +gpadmin soft core unlimited +gpadmin hard core unlimited + +# Open file limits for gpadmin +gpadmin soft nofile 524288 +gpadmin hard nofile 524288 + +# Process limits for gpadmin +gpadmin soft nproc 131072 +gpadmin hard nproc 131072 diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/gpinitsystem.conf b/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/gpinitsystem.conf new file mode 100644 index 00000000000..896c8c79e54 --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/gpinitsystem.conf @@ -0,0 +1,87 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# ---------------------------------------------------------------------- +# gpinitsystem Configuration File for Cloudberry Database +# ---------------------------------------------------------------------- +# This configuration file is used to initialize a Cloudberry Database +# cluster. It defines the settings for the coordinator, primary segments, +# and mirrors, as well as other important configuration options. +# ---------------------------------------------------------------------- + +# Segment prefix - This prefix is used for naming the segment directories. +# For example, the primary segment directories will be named gpseg0, gpseg1, etc. +SEG_PREFIX=gpseg + +# Coordinator port - The port number where the coordinator will listen. +# This is the port used by clients to connect to the database. +COORDINATOR_PORT=5432 + +# Coordinator hostname - The hostname of the machine where the coordinator +# will be running. The $(hostname) command will automatically insert the +# hostname of the current machine. +COORDINATOR_HOSTNAME=$(hostname) + +# Coordinator data directory - The directory where the coordinator's data +# will be stored. This directory should have enough space to store metadata +# and system catalogs. +COORDINATOR_DIRECTORY=/data1/coordinator + +# Base port for primary segments - The starting port number for the primary +# segments. Each primary segment will use a unique port number starting from +# this base. +PORT_BASE=6000 + +# Primary segment data directories - An array specifying the directories where +# the primary segment data will be stored. Each directory corresponds to a +# primary segment. In this case, two primary segments will be created in the +# same directory. +declare -a DATA_DIRECTORY=(/data1/primary /data1/primary) + +# Base port for mirror segments - The starting port number for the mirror +# segments. Each mirror segment will use a unique port number starting from +# this base. +MIRROR_PORT_BASE=7000 + +# Mirror segment data directories - An array specifying the directories where +# the mirror segment data will be stored. Each directory corresponds to a +# mirror segment. In this case, two mirror segments will be created in the +# same directory. +declare -a MIRROR_DATA_DIRECTORY=(/data1/mirror /data1/mirror) + +# Trusted shell - The shell program used for remote execution. Cloudberry uses +# SSH to run commands on other machines in the cluster. 'ssh' is the default. +TRUSTED_SHELL=ssh + +# Database encoding - The character set encoding to be used by the database. +# 'UNICODE' is a common choice, especially for internationalization. +ENCODING=UNICODE + +# Default database name - The name of the default database to be created during +# initialization. This is also the default database that the gpadmin user will +# connect to. +DATABASE_NAME=gpadmin + +# Machine list file - A file containing the list of hostnames where the primary +# segments will be created. Each line in the file represents a different machine. +# This file is critical for setting up the cluster across multiple nodes. +MACHINE_LIST_FILE=/home/gpadmin/hostfile_gpinitsystem + +# ---------------------------------------------------------------------- +# End of gpinitsystem Configuration File +# ---------------------------------------------------------------------- diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/init_system.sh b/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/init_system.sh new file mode 100755 index 00000000000..3ea7e34b0ff --- /dev/null +++ b/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/init_system.sh @@ -0,0 +1,221 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# Container Initialization Script +# -------------------------------------------------------------------- +# This script sets up the environment inside the Docker container for +# the Apache Cloudberry Build Environment. It performs the following +# tasks: +# +# 1. Verifies that the container is running with the expected hostname. +# 2. Starts the SSH daemon to allow SSH access to the container. +# 3. Configures passwordless SSH access for the 'gpadmin' user. +# 4. Sets up the necessary directories and configuration files for +# Apache Cloudberry. +# 5. Displays a welcome banner and system information. +# 6. Starts an interactive bash shell. +# +# This script is intended to be used as an entrypoint or initialization +# script for the Docker container. +# -------------------------------------------------------------------- + +# -------------------------------------------------------------------- +# Check if the hostname is 'cdw' +# -------------------------------------------------------------------- +# The script checks if the container's hostname is set to 'cdw'. This is +# a requirement for this environment, and if the hostname does not match, +# the script will exit with an error message. This ensures consistency +# across different environments. +# -------------------------------------------------------------------- +if [ "$(hostname)" != "cdw" ]; then + echo "Error: This container must be run with the hostname 'cdw'." + echo "Use the following command: docker run -h cdw ..." + exit 1 +fi + +# -------------------------------------------------------------------- +# Start SSH daemon and setup for SSH access +# -------------------------------------------------------------------- +# The SSH daemon is started to allow remote access to the container via +# SSH. This is useful for development and debugging purposes. If the SSH +# daemon fails to start, the script exits with an error. +# -------------------------------------------------------------------- +if ! sudo /usr/sbin/sshd; then + echo "Failed to start SSH daemon" >&2 + exit 1 +fi + +# -------------------------------------------------------------------- +# Remove /run/nologin to allow logins +# -------------------------------------------------------------------- +# The /run/nologin file, if present, prevents users from logging into +# the system. This file is removed to ensure that users can log in via SSH. +# -------------------------------------------------------------------- +sudo rm -rf /run/nologin + +# -------------------------------------------------------------------- +# Configure passwordless SSH access for 'gpadmin' user +# -------------------------------------------------------------------- +# The script sets up SSH key-based authentication for the 'gpadmin' user, +# allowing passwordless SSH access. It generates a new SSH key pair if one +# does not already exist, and configures the necessary permissions. +# -------------------------------------------------------------------- +mkdir -p /home/gpadmin/.ssh +chmod 700 /home/gpadmin/.ssh + +if [ ! -f /home/gpadmin/.ssh/id_rsa ]; then + ssh-keygen -t rsa -b 4096 -C gpadmin -f /home/gpadmin/.ssh/id_rsa -P "" > /dev/null 2>&1 +fi + +cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys +chmod 600 /home/gpadmin/.ssh/authorized_keys + +# Add the container's hostname to the known_hosts file to avoid SSH warnings +ssh-keyscan -t rsa cdw > /home/gpadmin/.ssh/known_hosts 2>/dev/null + +# -------------------------------------------------------------------- +# Cloudberry Data Directories Setup +# -------------------------------------------------------------------- +# The script sets up the necessary directories for Apache Cloudberry, +# including directories for the coordinator, standby coordinator, primary +# segments, and mirror segments. It also sets up the configuration files +# required for initializing the database. +# -------------------------------------------------------------------- +sudo rm -rf /data1/* +sudo mkdir -p /data1/coordinator /data1/standby_coordinator /data1/primary /data1/mirror +sudo chown -R gpadmin.gpadmin /data1 + +# Copy the gpinitsystem configuration file to the home directory +cp /tmp/gpinitsystem.conf /home/gpadmin + +# Set up the hostfile for cluster initialization +echo $(hostname) > /home/gpadmin/hostfile_gpinitsystem + +# Change to the home directory of the current user +cd $HOME + +# -------------------------------------------------------------------- +# Display a Welcome Banner +# -------------------------------------------------------------------- +# The following ASCII art and welcome message are displayed when the +# container starts. This banner provides a visual indication that the +# container is running in the Apache Cloudberry Build Environment. +# -------------------------------------------------------------------- +cat <<-'EOF' + +====================================================================== + + ++++++++++ ++++++ + ++++++++++++++ +++++++ + ++++ +++++ ++++ + ++++ +++++++++ + =+==== =============+ + ======== =====+ ===== + ==== ==== ==== ==== + ==== === === ==== + ==== === === ==== + ==== === ==-- === + ===== ===== -- ==== + ===================== ====== + ============================ + =-----= + ____ _ _ _ + / ___|| | ___ _ _ __| || |__ ___ _ __ _ __ _ _ + | | | | / _ \ | | | | / _` || '_ \ / _ \| '__|| '__|| | | | + | |___ | || (_) || |_| || (_| || |_) || __/| | | | | |_| | + \____||_| \____ \__,_| \__,_||_.__/ \___||_| |_| \__, | + |___/ +---------------------------------------------------------------------- + +EOF + +# -------------------------------------------------------------------- +# Display System Information +# -------------------------------------------------------------------- +# The script sources the /etc/os-release file to retrieve the operating +# system name and version. It then displays the following information: +# - OS name and version +# - Current user +# - Container hostname +# - IP address +# - CPU model name and number of cores +# - Total memory available +# - Cloudberry version (if installed) +# This information is useful for users to understand the environment they +# are working in. +# -------------------------------------------------------------------- +source /etc/os-release + +# First, create the CPU info detection function +get_cpu_info() { + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + lscpu | grep 'Model name:' | awk '{print substr($0, index($0,$3))}' + elif [ "$ARCH" = "aarch64" ]; then + VENDOR=$(lscpu | grep 'Vendor ID:' | awk '{print $3}') + if [ "$VENDOR" = "Apple" ] || [ "$VENDOR" = "0x61" ]; then + echo "Apple Silicon ($ARCH)" + else + if [ -f /proc/cpuinfo ]; then + IMPL=$(grep "CPU implementer" /proc/cpuinfo | head -1 | awk '{print $3}') + PART=$(grep "CPU part" /proc/cpuinfo | head -1 | awk '{print $3}') + if [ ! -z "$IMPL" ] && [ ! -z "$PART" ]; then + echo "ARM $ARCH (Implementer: $IMPL, Part: $PART)" + else + echo "ARM $ARCH" + fi + else + echo "ARM $ARCH" + fi + fi + else + echo "Unknown architecture: $ARCH" + fi +} + +# Check if Apache Cloudberry is installed and display its version +if rpm -q apache-cloudberry-db-incubating > /dev/null 2>&1; then + CBDB_VERSION=$(/usr/local/cbdb/bin/postgres --gp-version) +else + CBDB_VERSION="Not installed" +fi + +cat <<-EOF +Welcome to the Apache Cloudberry Test Environment! + +Cloudberry version .. : $CBDB_VERSION +Container OS ........ : $NAME $VERSION +User ................ : $(whoami) +Container hostname .. : $(hostname) +IP Address .......... : $(hostname -I | awk '{print $1}') +CPU Info ............ : $(get_cpu_info) +CPU(s) .............. : $(nproc) +Memory .............. : $(free -h | grep Mem: | awk '{print $2}') total +====================================================================== + +EOF + +# -------------------------------------------------------------------- +# Start an interactive bash shell +# -------------------------------------------------------------------- +# Finally, the script starts an interactive bash shell to keep the +# container running and allow the user to interact with the environment. +# -------------------------------------------------------------------- +/bin/bash diff --git a/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec b/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec new file mode 100644 index 00000000000..41152a1e277 --- /dev/null +++ b/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec @@ -0,0 +1,161 @@ +%define cloudberry_install_dir /usr/local/cloudberry-db + +# Add at the top of the spec file +# Default to non-debug build +%bcond_with debug + +# Conditional stripping based on debug flag +%if %{with debug} +%define __os_install_post %{nil} +%define __strip /bin/true +%endif + +Name: apache-cloudberry-db-incubating +Version: %{version} +# In the release definition section +%if %{with debug} +Release: %{release}.debug%{?dist} +%else +Release: %{release}%{?dist} +%endif +Summary: High-performance, open-source data warehouse based on PostgreSQL/Greenplum + +License: ASL 2.0 +URL: https://cloudberry.apache.org +Vendor: Apache Cloudberry (incubating) +Group: Applications/Databases +Prefix: %{cloudberry_install_dir} + +# Disabled as we are shipping GO programs (e.g. gpbackup) +%define _missing_build_ids_terminate_build 0 + +# Disable debugsource files +%define _debugsource_template %{nil} + +# List runtime dependencies + +Requires: bash +Requires: iproute +Requires: iputils +Requires: openssh +Requires: openssh-clients +Requires: openssh-server +Requires: rsync + +%if 0%{?rhel} == 8 +Requires: apr +Requires: audit +Requires: bzip2 +Requires: keyutils +Requires: libcurl +Requires: libevent +Requires: libidn2 +Requires: libselinux +Requires: libstdc++ +Requires: libuuid +Requires: libuv +Requires: libxml2 +Requires: libyaml +Requires: libzstd +Requires: lz4 +Requires: openldap +Requires: pam +Requires: perl +Requires: python3 +Requires: readline +%endif + +%if 0%{?rhel} == 9 +Requires: apr +Requires: bzip2 +Requires: glibc +Requires: keyutils +Requires: libcap +Requires: libcurl +Requires: libidn2 +Requires: libpsl +Requires: libssh +Requires: libstdc++ +Requires: libxml2 +Requires: libyaml +Requires: libzstd +Requires: lz4 +Requires: openldap +Requires: pam +Requires: pcre2 +Requires: perl +Requires: readline +Requires: xz +%endif + +%description + +Apache Cloudberry (incubating) is an advanced, open-source, massively +parallel processing (MPP) data warehouse developed from PostgreSQL and +Greenplum. It is designed for high-performance analytics on +large-scale data sets, offering powerful analytical capabilities and +enhanced security features. + +Key Features: + +- Massively parallel processing for optimized performance +- Advanced analytics for complex data processing +- Integration with ETL and BI tools +- Compatibility with multiple data sources and formats +- Enhanced security features + +Apache Cloudberry supports both batch processing and real-time data +warehousing, making it a versatile solution for modern data +environments. + +Apache Cloudberry (incubating) is an effort undergoing incubation at +the Apache Software Foundation (ASF), sponsored by the Apache +Incubator PMC. + +Incubation is required of all newly accepted projects until a further +review indicates that the infrastructure, communications, and decision +making process have stabilized in a manner consistent with other +successful ASF projects. + +While incubation status is not necessarily a reflection of the +completeness or stability of the code, it does indicate that the +project has yet to be fully endorsed by the ASF. + +%prep +# No prep needed for binary RPM + +%build +# No prep needed for binary RPM + +%install +rm -rf %{buildroot} + +# Create the versioned directory +mkdir -p %{buildroot}%{cloudberry_install_dir}-%{version} + +cp -R %{cloudberry_install_dir}/* %{buildroot}%{cloudberry_install_dir}-%{version} + +# Create the symbolic link +ln -sfn %{cloudberry_install_dir}-%{version} %{buildroot}%{cloudberry_install_dir} + +%files +%{prefix}-%{version} +%{prefix} + +%license %{cloudberry_install_dir}-%{version}/LICENSE + +%debug_package + +%post +# Change ownership to gpadmin.gpadmin if the gpadmin user exists +if id "gpadmin" &>/dev/null; then + chown -R gpadmin:gpadmin %{cloudberry_install_dir}-%{version} + chown gpadmin:gpadmin %{cloudberry_install_dir} +fi + +%postun +if [ $1 -eq 0 ] ; then + if [ "$(readlink -f "%{cloudberry_install_dir}")" == "%{cloudberry_install_dir}-%{version}" ]; then + unlink "%{cloudberry_install_dir}" || true + fi +fi diff --git a/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-hll-incubating.spec b/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-hll-incubating.spec new file mode 100644 index 00000000000..0566d0aa507 --- /dev/null +++ b/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-hll-incubating.spec @@ -0,0 +1,51 @@ +%global cloudberry_version %{?_cloudberry_version}%{!?_cloudberry_version:1.6} +%global cloudberry_install_dir /usr/local/cloudberry-db + +Name: apache-cloudberry-hll-incubating +Version: 2.18.0 +Release: %{?release}%{!?release:1} +Summary: HyperLogLog extension for Cloudberry Database %{cloudberry_version} +License: ASL 2.0 +URL: https://github.com/citusdata/postgresql-hll +Vendor: Apache Cloudberry (incubating) +Group: Applications/Databases +BuildArch: x86_64 +Requires: apache-cloudberry-db-incubating >= %{cloudberry_version} +Prefix: %{cloudberry_install_dir} + +%description +HLL is an open-source PostgreSQL extension (compatible with Apache +Cloudberry (incubating) %{cloudberry_version}) adding HyperLogLog data +structures as a native data type. HyperLogLog is a fixed-size, +set-like structure used for distinct value counting with tunable +precision. + +%prep +# No prep needed for binary RPM + +%build +# No build needed for binary RPM + +%install +mkdir -p %{buildroot}%{prefix}/lib/postgresql \ + %{buildroot}%{prefix}/share/postgresql/extension + +cp -R %{cloudberry_install_dir}/lib/postgresql/hll.so \ + %{buildroot}%{prefix}/lib/postgresql/hll.so + +cp -R %{cloudberry_install_dir}/share/postgresql/extension/hll* \ + %{buildroot}%{prefix}/share/postgresql/extension + +%files +%{prefix}/lib/postgresql/hll.so +%{prefix}/share/postgresql/extension/hll--*.sql +%{prefix}/share/postgresql/extension/hll.control + +%post +echo "HLL extension for Cloudberry Database %{cloudberry_version} has been installed in %{prefix}." +echo "To enable it in a database, run:" +echo " CREATE EXTENSION hll;" + +%postun +echo "HLL extension for Cloudberry Database %{cloudberry_version} has been removed from %{prefix}." +echo "You may need to manually clean up any database objects that were using the extension." diff --git a/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-pgvector-incubating.spec b/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-pgvector-incubating.spec new file mode 100644 index 00000000000..88be062cfad --- /dev/null +++ b/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-pgvector-incubating.spec @@ -0,0 +1,53 @@ +%global cloudberry_version %{?_cloudberry_version}%{!?_cloudberry_version:1.6} +%global cloudberry_install_dir /usr/local/cloudberry-db +%global pgvector_version %{?_pgvector_version}%{!?_pgvector_version:0.5.1} + +Name: cloudberry-pgvector +Version: %{pgvector_version} +Release: %{?release}%{!?release:1} +Summary: pgvector extension for Cloudberry Database %{cloudberry_version} +License: PostgreSQL +URL: https://github.com/pgvector/pgvector +Vendor: Cloudberry Open Source +Group: Applications/Databases +BuildArch: x86_64 +Requires: cloudberry-db >= %{cloudberry_version} +Prefix: %{cloudberry_install_dir} + +%description +pgvector is an open-source vector similarity search extension for +PostgreSQL and Cloudberry Database %{cloudberry_version}. It provides +vector data types and vector similarity search functions, allowing for +efficient similarity search operations on high-dimensional data. + +%prep +# No prep needed for binary RPM + +%build +# No build needed for binary RPM + +%install +mkdir -p %{buildroot}%{prefix}/include/postgresql/server/extension/vector \ + %{buildroot}%{prefix}/lib/postgresql \ + %{buildroot}%{prefix}/share/postgresql/extension +cp -R %{cloudberry_install_dir}/include/postgresql/server/extension/vector/* \ + %{buildroot}%{prefix}/include/postgresql/server/extension/vector +cp -R %{cloudberry_install_dir}/lib/postgresql/vector.so \ + %{buildroot}%{prefix}/lib/postgresql/vector.so +cp -R %{cloudberry_install_dir}/share/postgresql/extension/vector* \ + %{buildroot}%{prefix}/share/postgresql/extension + +%files +%{prefix}/include/postgresql/server/extension/vector/* +%{prefix}/lib/postgresql/vector.so +%{prefix}/share/postgresql/extension/vector--*.sql +%{prefix}/share/postgresql/extension/vector.control + +%post +echo "pgvector extension version %{version} for Cloudberry Database %{cloudberry_version} has been installed in %{prefix}." +echo "To enable it in a database, run:" +echo " CREATE EXTENSION vector;" + +%postun +echo "pgvector extension version %{version} for Cloudberry Database %{cloudberry_version} has been removed from %{prefix}." +echo "You may need to manually clean up any database objects that were using the extension." diff --git a/cloudberry-devops-release/packaging/rpm/repo-el/SPECS/cloudberry-dev-repo.spec b/cloudberry-devops-release/packaging/rpm/repo-el/SPECS/cloudberry-dev-repo.spec new file mode 100644 index 00000000000..63a096530e1 --- /dev/null +++ b/cloudberry-devops-release/packaging/rpm/repo-el/SPECS/cloudberry-dev-repo.spec @@ -0,0 +1,35 @@ +Name: cloudberry-dev-repo +Version: 1.0 +Release: 1%{?dist} +Summary: Cloudberry Database Repository Configuration +License: ASL 2.0 +Group: Applications/Databases +URL: https://cloudberrydb.org +Vendor: Cloudberry Open Source +BuildArch: noarch + +%description +This package configures the Cloudberry Database repository on your +system. Cloudberry Database is an open-source project aimed at +providing a scalable, high-performance SQL database for +analytics. This repository provides access to the latest RPM packages +for Cloudberry Database, allowing you to easily install and stay +up-to-date with the latest developments. + +%install +mkdir -p %{buildroot}%{_sysconfdir}/yum.repos.d/ +cat > %{buildroot}%{_sysconfdir}/yum.repos.d/cloudberry-dev.repo < [-r ] [-d|--with-debug] [-h] [--dry-run] +# +# Options: +# -v, --version : Specify the version (required) +# -r, --release : Specify the release (optional, default is 1) +# -d, --with-debug : Build with debug symbols (optional) +# -h, --help : Display this help and exit +# -n, --dry-run : Show what would be done, without making any changes +# +# Example: +# ./build-rpm.sh -v 1.5.5 -r 2 # Build with version 1.5.5 and release 2 +# ./build-rpm.sh -v 1.5.5 # Build with version 1.5.5 and default release 1 +# ./build-rpm.sh -v 1.5.5 --with-debug # Build with debug symbols +# +# Prerequisites: +# - The rpm-build package must be installed (provides the rpmbuild command). +# - The spec file must exist at ~/rpmbuild/SPECS/apache-cloudberry-db-incubating.spec. +# +# Error Handling: +# The script includes checks to ensure: +# - The version option (-v or --version) is provided. +# - The necessary commands are available. +# - The spec file exists at the specified location. +# If any of these checks fail, the script exits with an appropriate error message. + +# Enable strict mode for better error handling +set -euo pipefail + +# Default values +VERSION="" +RELEASE="1" +DEBUG_BUILD=false + +# Function to display usage information +usage() { + echo "Usage: $0 -v [-r ] [-h] [--dry-run]" + echo " -v, --version : Specify the version (required)" + echo " -r, --release : Specify the release (optional, default is 1)" + echo " -d, --with-debug : Build with debug symbols (optional)" + echo " -h, --help : Display this help and exit" + echo " -n, --dry-run : Show what would be done, without making any changes" + exit 1 +} + +# Function to check if required commands are available +check_commands() { + local cmds=("rpmbuild") + for cmd in "${cmds[@]}"; do + if ! command -v "$cmd" &> /dev/null; then + echo "Error: Required command '$cmd' not found. Please install it before running the script." + exit 1 + fi + done +} + +# Parse options +while [[ "$#" -gt 0 ]]; do + case $1 in + -v|--version) + VERSION="$2" + shift 2 + ;; + -r|--release) + RELEASE="$2" + shift 2 + ;; + -d|--with-debug) + DEBUG_BUILD=true + shift + ;; + -h|--help) + usage + ;; + -n|--dry-run) + DRY_RUN=true + shift + ;; + *) + echo "Unknown option: ($1)" + shift + ;; + esac +done + +# Ensure version is provided +if [ -z "$VERSION" ]; then + echo "Error: Version (-v or --version) is required." + usage +fi + +# Check if required commands are available +check_commands + +# Define the spec file path +SPEC_FILE=~/rpmbuild/SPECS/apache-cloudberry-db-incubating.spec + +# Check if the spec file exists +if [ ! -f "$SPEC_FILE" ]; then + echo "Error: Spec file not found at $SPEC_FILE." + exit 1 +fi + +# Build the rpmbuild command based on options +RPMBUILD_CMD="rpmbuild -bb \"$SPEC_FILE\" --define \"version $VERSION\" --define \"release $RELEASE\"" +if [ "$DEBUG_BUILD" = true ]; then + RPMBUILD_CMD+=" --with debug" +fi + +# Dry-run mode +if [ "${DRY_RUN:-false}" = true ]; then + echo "Dry-run mode: This is what would be done:" + echo " $RPMBUILD_CMD" + exit 0 +fi + +# Run rpmbuild with the provided options +echo "Building RPM with Version: $VERSION, Release: $RELEASE$([ "$DEBUG_BUILD" = true ] && echo ", Debug: enabled")..." +if ! eval "$RPMBUILD_CMD"; then + echo "Error: rpmbuild failed." + exit 1 +fi + +# Print completion message +echo "RPM build completed successfully with Version: $VERSION, Release: $RELEASE" diff --git a/cloudberry-devops-release/scripts/elf_rockylinux_dependency_analyzer.py b/cloudberry-devops-release/scripts/elf_rockylinux_dependency_analyzer.py new file mode 100755 index 00000000000..09514c6d598 --- /dev/null +++ b/cloudberry-devops-release/scripts/elf_rockylinux_dependency_analyzer.py @@ -0,0 +1,305 @@ +#!/usr/bin/env python3 + +""" +ELF Dependency Analyzer + +This script analyzes ELF (Executable and Linkable Format) binaries to determine their runtime +package dependencies. It can process individual files or recursively analyze directories. + +The script provides information about: +- Required packages and their versions +- Missing libraries +- Custom or non-RPM libraries +- Other special cases + +It also groups packages by their high-level dependencies, which can be cached for performance. + +Usage: + python3 elf_dependency_analyzer.py [--rebuild-cache] [ ...] + +The script will automatically determine if each argument is a file or directory and process accordingly. +Use --rebuild-cache to force rebuilding of the high-level packages cache. + +Requirements: +- Python 3.6+ +- prettytable (pip install prettytable) +- python-dateutil (pip install python-dateutil) +- ldd (usually pre-installed on Linux systems) +- file (usually pre-installed on Linux systems) +- rpm (usually pre-installed on RPM-based Linux distributions) +- repoquery (part of yum-utils package) + +Functions: +- check_requirements(): Checks if all required commands are available. +- run_command(command): Executes a shell command and returns its output. +- parse_ldd_line(line): Parses a line of ldd output to extract the library name. +- find_library_in_ld_library_path(lib_name): Searches for a library in LD_LIBRARY_PATH. +- get_package_info(lib_path): Gets package information for a given library. +- get_package_dependencies(package): Gets dependencies of a package using repoquery. +- build_high_level_packages(grand_summary): Builds a mapping of high-level packages to their dependencies. +- load_or_build_high_level_packages(grand_summary, force_rebuild): Loads or builds the high-level packages cache. +- print_summary(packages, special_cases, missing_libraries, binary_path): Prints a summary for a single binary. +- process_binary(binary_path): Processes a single binary file. +- is_elf_binary(file_path): Checks if a file is an ELF binary. +- print_grand_summary(...): Prints a grand summary of all processed binaries. +- analyze_path(path, grand_summary, grand_special_cases, grand_missing_libraries): Analyzes a file or directory. +- main(): Main function to handle command-line arguments and initiate the analysis. + +This script is designed to help system administrators and developers understand the dependencies +of ELF binaries in their systems, which can be useful for troubleshooting, optimizing, or +preparing deployment packages. +""" + +import os, subprocess, re, sys, json, shutil +from collections import defaultdict +from datetime import datetime, timedelta +import argparse +from prettytable import PrettyTable +from dateutil import parser + +CACHE_FILE = 'high_level_packages_cache.json' +CACHE_EXPIRY_DAYS = 7 + +def check_requirements(): + required_commands = ['ldd', 'file', 'rpm', 'repoquery'] + missing_commands = [cmd for cmd in required_commands if shutil.which(cmd) is None] + if missing_commands: + print("Error: The following required commands are missing:") + for cmd in missing_commands: + print(f" - {cmd}") + print("\nPlease install these commands and try again.") + if 'repoquery' in missing_commands: + print("Note: 'repoquery' is typically part of the 'yum-utils' package.") + sys.exit(1) + +def run_command(command): + try: + return subprocess.check_output(command, stderr=subprocess.STDOUT).decode('utf-8') + except subprocess.CalledProcessError as e: + print(f"Error running command {' '.join(command)}: {e.output.decode('utf-8').strip()}") + return None + +def parse_ldd_line(line): + match = re.search(r'\s*(\S+) => (\S+) \((0x[0-9a-f]+)\)', line) + return match.group(1) if match else None + +def find_library_in_ld_library_path(lib_name): + ld_library_path = os.environ.get('LD_LIBRARY_PATH', '') + for directory in ld_library_path.split(':'): + potential_path = os.path.join(directory, lib_name) + if os.path.isfile(potential_path): + return potential_path + return None + +def get_package_info(lib_path): + if not os.path.isfile(lib_path): + lib_name = os.path.basename(lib_path) + lib_path = find_library_in_ld_library_path(lib_name) + if not lib_path: + return None + try: + full_package_name = run_command(['rpm', '-qf', lib_path]) + if full_package_name: + package_name = full_package_name.split('-')[0] + return package_name, full_package_name.strip() + except subprocess.CalledProcessError: + pass + return None + +def get_package_dependencies(package): + try: + output = subprocess.check_output(['repoquery', '--requires', '--resolve', package], + universal_newlines=True, stderr=subprocess.DEVNULL) + return set(output.strip().split('\n')) + except subprocess.CalledProcessError: + return set() + +def build_high_level_packages(grand_summary): + all_packages = set() + for packages in grand_summary.values(): + all_packages.update(package.split('-')[0] for package in packages) + high_level_packages = {} + for package in all_packages: + deps = get_package_dependencies(package) + if deps: + high_level_packages[package] = [dep.split('-')[0] for dep in deps] + return high_level_packages + +def load_or_build_high_level_packages(grand_summary, force_rebuild=False): + if not force_rebuild and os.path.exists(CACHE_FILE): + with open(CACHE_FILE, 'r') as f: + cache_data = json.load(f) + if datetime.now() - parser.parse(cache_data['timestamp']) < timedelta(days=CACHE_EXPIRY_DAYS): + return cache_data['packages'] + packages = build_high_level_packages(grand_summary) + with open(CACHE_FILE, 'w') as f: + json.dump({'timestamp': datetime.now().isoformat(), 'packages': packages}, f) + return packages + +def print_summary(packages, special_cases, missing_libraries, binary_path): + print("\nSummary of unique runtime packages required:") + table = PrettyTable(['Package Name', 'Full Package Name']) + table.align['Package Name'] = 'l' + table.align['Full Package Name'] = 'l' + unique_packages = sorted(set(packages)) + for package_name, full_package_name in unique_packages: + table.add_row([package_name, full_package_name]) + print(table) + if missing_libraries: + print("\nMISSING LIBRARIES:") + missing_table = PrettyTable(['Missing Library', 'Referenced By']) + missing_table.align['Missing Library'] = 'l' + missing_table.align['Referenced By'] = 'l' + for lib in missing_libraries: + missing_table.add_row([lib, binary_path]) + print(missing_table) + if special_cases: + print("\nSPECIAL CASES:") + special_table = PrettyTable(['Library/Case', 'Referenced By', 'Category']) + special_table.align['Library/Case'] = 'l' + special_table.align['Referenced By'] = 'l' + special_table.align['Category'] = 'l' + for case in special_cases: + category = "Custom/Non-RPM" if "custom or non-RPM library" in case else "Other" + library = case.split(" is ")[0] if " is " in case else case + special_table.add_row([library, binary_path, category]) + print(special_table) + else: + print("\nSPECIAL CASES: None found") + +def process_binary(binary_path): + print(f"Binary: {binary_path}\n") + print("Libraries and their corresponding packages:") + packages, special_cases, missing_libraries = [], [], [] + known_special_cases = ['linux-vdso.so.1', 'ld-linux-x86-64.so.2'] + ldd_output = run_command(['ldd', binary_path]) + if ldd_output is None: + return packages, special_cases, missing_libraries + for line in ldd_output.splitlines(): + if any(special in line for special in known_special_cases): + continue + parts = line.split('=>') + lib_name = parts[0].strip() + if "not found" in line: + missing_libraries.append(lib_name) + print(f"MISSING: {line.strip()}") + else: + if len(parts) > 1: + lib_path = parts[1].split()[0] + if lib_path != "not": + package_info = get_package_info(lib_path) + if package_info: + print(f"{lib_path} => {package_info[1]}") + packages.append(package_info) + else: + if os.path.exists(lib_path): + special_case = f"{lib_path} is a custom or non-RPM library" + special_cases.append(special_case) + print(f"{lib_path} => Custom or non-RPM library") + else: + special_case = f"{lib_path} is not found and might be a special case" + special_cases.append(special_case) + print(f"{lib_path} => Not found, might be a special case") + else: + special_case = f"{line.strip()} is a special case or built-in library" + special_cases.append(special_case) + print(f"{line.strip()} => Special case or built-in library") + else: + special_case = f"{line.strip()} is a special case or built-in library" + special_cases.append(special_case) + print(f"{line.strip()} => Special case or built-in library") + if special_cases: + print(f"Special cases found for {binary_path}:") + for case in special_cases: + print(f" - {case}") + else: + print(f"No special cases found for {binary_path}") + print_summary(packages, special_cases, missing_libraries, binary_path) + print("-------------------------------------------") + return packages, special_cases, missing_libraries + +def is_elf_binary(file_path): + file_output = run_command(['file', file_path]) + return 'ELF' in file_output and ('executable' in file_output or 'shared object' in file_output) + +def print_grand_summary(grand_summary, grand_special_cases, grand_missing_libraries, HIGH_LEVEL_PACKAGES, PACKAGE_TO_HIGH_LEVEL): + if grand_summary or grand_special_cases or grand_missing_libraries: + print("\nGrand Summary of high-level runtime packages required across all binaries:") + high_level_summary = defaultdict(set) + for package_name, full_package_names in grand_summary.items(): + high_level_package = PACKAGE_TO_HIGH_LEVEL.get(package_name.split('-')[0], package_name.split('-')[0]) + high_level_summary[high_level_package].update(full_package_names) + table = PrettyTable(['High-Level Package', 'Included Packages']) + table.align['High-Level Package'] = 'l' + table.align['Included Packages'] = 'l' + for high_level_package, full_package_names in sorted(high_level_summary.items()): + included_packages = '\n'.join(sorted(full_package_names)) + table.add_row([high_level_package, included_packages]) + print(table) + if grand_missing_libraries: + print("\nGrand Summary of MISSING LIBRARIES across all binaries:") + missing_table = PrettyTable(['Missing Library', 'Referenced By']) + missing_table.align['Missing Library'] = 'l' + missing_table.align['Referenced By'] = 'l' + for lib, binaries in sorted(grand_missing_libraries.items()): + missing_table.add_row([lib, '\n'.join(sorted(binaries))]) + print(missing_table) + print("\nGrand Summary of special cases across all binaries:") + if grand_special_cases: + special_table = PrettyTable(['Library/Case', 'Referenced By', 'Category']) + special_table.align['Library/Case'] = 'l' + special_table.align['Referenced By'] = 'l' + special_table.align['Category'] = 'l' + for case, binary in sorted(set(grand_special_cases)): + category = "Custom/Non-RPM" if "custom or non-RPM library" in case else "Other" + library = case.split(" is ")[0] if " is " in case else case + special_table.add_row([library, binary, category]) + print(special_table) + else: + print("No special cases found.") + +def analyze_path(path, grand_summary, grand_special_cases, grand_missing_libraries): + if os.path.isfile(path): + packages, special_cases, missing_libraries = process_binary(path) + for package_name, full_package_name in packages: + grand_summary[package_name].add(full_package_name) + grand_special_cases.extend((case, path) for case in special_cases) + for lib in missing_libraries: + grand_missing_libraries[lib].add(path) + elif os.path.isdir(path): + for root, dirs, files in os.walk(path): + for file in files: + file_path = os.path.join(root, file) + if is_elf_binary(file_path): + packages, special_cases, missing_libraries = process_binary(file_path) + for package_name, full_package_name in packages: + grand_summary[package_name].add(full_package_name) + grand_special_cases.extend((case, file_path) for case in special_cases) + for lib in missing_libraries: + grand_missing_libraries[lib].add(file_path) + else: + print(f"Error: {path} is neither a valid file nor a directory.") + if grand_special_cases: + print(f"Accumulated special cases after processing {path}:") + for case, binary in grand_special_cases: + print(f" - {case} (in {binary})") + else: + print(f"No special cases accumulated after processing {path}") + +def main(): + check_requirements() + parser = argparse.ArgumentParser(description="ELF Dependency Analyzer") + parser.add_argument('paths', nargs='+', help="Paths to files or directories to analyze") + parser.add_argument('--rebuild-cache', action='store_true', help="Force rebuild of the high-level packages cache") + args = parser.parse_args() + grand_summary = defaultdict(set) + grand_special_cases = [] + grand_missing_libraries = defaultdict(set) + for path in args.paths: + analyze_path(path, grand_summary, grand_special_cases, grand_missing_libraries) + HIGH_LEVEL_PACKAGES = load_or_build_high_level_packages(grand_summary, args.rebuild_cache) + PACKAGE_TO_HIGH_LEVEL = {low: high for high, lows in HIGH_LEVEL_PACKAGES.items() for low in lows} + print_grand_summary(grand_summary, grand_special_cases, grand_missing_libraries, HIGH_LEVEL_PACKAGES, PACKAGE_TO_HIGH_LEVEL) + +if __name__ == '__main__': + main() diff --git a/cloudberry-devops-release/scripts/elf_ubuntu_dependency_analyzer.py b/cloudberry-devops-release/scripts/elf_ubuntu_dependency_analyzer.py new file mode 100755 index 00000000000..b81e3344423 --- /dev/null +++ b/cloudberry-devops-release/scripts/elf_ubuntu_dependency_analyzer.py @@ -0,0 +1,287 @@ +#!/usr/bin/env python3 + +""" +ELF Dependency Analyzer for Ubuntu + +This script analyzes ELF (Executable and Linkable Format) binaries to determine their runtime +package dependencies on Ubuntu systems. It can process individual files or recursively analyze directories. + +The script provides information about: +- Required packages and their versions +- Custom or non-APT libraries +- Core system libraries +- Missing libraries +- Other special cases + +Usage: + python3 elf_dependency_analyzer.py [file_or_directory] [file_or_directory] ... + +Requirements: +- Python 3.6+ +- prettytable (pip install prettytable) +- ldd (usually pre-installed on Linux systems) +- file (usually pre-installed on Linux systems) +- dpkg (pre-installed on Ubuntu) +""" + +import os +import subprocess +import re +import sys +import argparse +from collections import defaultdict +from prettytable import PrettyTable + +def run_command(command): + """ + Execute a shell command and return its output. + + Args: + command (list): The command to execute as a list of strings. + + Returns: + str: The output of the command, or None if an error occurred. + """ + try: + return subprocess.check_output(command, stderr=subprocess.STDOUT).decode('utf-8') + except subprocess.CalledProcessError as e: + print(f"Error running command {' '.join(command)}: {e.output.decode('utf-8').strip()}") + return None + +def get_package_info(lib_path): + """ + Get package information for a given library path. + + Args: + lib_path (str): The path to the library. + + Returns: + tuple: A tuple containing the package name and full package information. + """ + if lib_path.startswith('/usr/local/cloudberry-db'): + return "cloudberry-custom", f"Cloudberry custom library: {lib_path}" + + dpkg_output = run_command(['dpkg', '-S', lib_path]) + if dpkg_output: + package_name = dpkg_output.split(':')[0] + return package_name, dpkg_output.strip() + + # List of core system libraries that might not be individually tracked by dpkg + core_libs = { + 'libc.so': 'libc6', + 'libm.so': 'libc6', + 'libdl.so': 'libc6', + 'libpthread.so': 'libc6', + 'libresolv.so': 'libc6', + 'librt.so': 'libc6', + 'libgcc_s.so': 'libgcc-s1', + 'libstdc++.so': 'libstdc++6', + 'libz.so': 'zlib1g', + 'libbz2.so': 'libbz2-1.0', + 'libpam.so': 'libpam0g', + 'libaudit.so': 'libaudit1', + 'libcap-ng.so': 'libcap-ng0', + 'libkeyutils.so': 'libkeyutils1', + 'liblzma.so': 'liblzma5', + 'libcom_err.so': 'libcomerr2' + } + + lib_name = os.path.basename(lib_path) + for core_lib, package in core_libs.items(): + if lib_name.startswith(core_lib): + return package, f"Core system library: {lib_path}" + + # If not a recognized core library, return as system library + file_output = run_command(['file', lib_path]) + if file_output: + return "system-library", f"System library: {lib_path} - {file_output.strip()}" + + return None + +def print_summary(packages, special_cases, missing_libraries, binary_path): + """ + Print a summary of the dependencies for a binary. + + Args: + packages (list): List of package tuples (package_name, full_package_name). + special_cases (list): List of special case strings. + missing_libraries (list): List of missing library names. + binary_path (str): Path to the binary being analyzed. + """ + print("\nSummary of runtime dependencies:") + table = PrettyTable(['Category', 'Package/Library', 'Details']) + table.align['Category'] = 'l' + table.align['Package/Library'] = 'l' + table.align['Details'] = 'l' + + categories = { + 'cloudberry-custom': 'Cloudberry Custom', + 'system-library': 'System Library', + } + + for package_name, full_package_name in sorted(set(packages)): + category = categories.get(package_name, 'System Package') + table.add_row([category, package_name, full_package_name]) + + print(table) + + if missing_libraries: + print("\nMISSING LIBRARIES:") + for lib in missing_libraries: + print(f" - {lib}") + + if special_cases: + print("\nSPECIAL CASES:") + for case in special_cases: + print(f" - {case}") + +def process_binary(binary_path): + """ + Process a single binary file to determine its dependencies. + + Args: + binary_path (str): Path to the binary file. + + Returns: + tuple: A tuple containing lists of packages, special cases, and missing libraries. + """ + print(f"Binary: {binary_path}\n") + print("Libraries and their corresponding packages:") + packages, special_cases, missing_libraries = [], [], [] + + ldd_output = run_command(['ldd', binary_path]) + if ldd_output is None: + return packages, special_cases, missing_libraries + + for line in ldd_output.splitlines(): + if "=>" not in line: + continue + + parts = line.split('=>') + lib_name = parts[0].strip() + lib_path = parts[1].split()[0].strip() + lib_path = os.path.realpath(lib_path) + + if lib_path == "not": + missing_libraries.append(lib_name) + print(f"MISSING: {line.strip()}") + else: + package_info = get_package_info(lib_path) + if package_info: + print(f"{lib_path} => {package_info[1]}") + packages.append(package_info) + else: + special_case = f"{lib_path} is not found and might be a special case" + special_cases.append(special_case) + print(f"{lib_path} => Not found, might be a special case") + + print_summary(packages, special_cases, missing_libraries, binary_path) + print("-------------------------------------------") + return packages, special_cases, missing_libraries + +def is_elf_binary(file_path): + """ + Check if a file is an ELF binary. + + Args: + file_path (str): Path to the file. + + Returns: + bool: True if the file is an ELF binary, False otherwise. + """ + file_output = run_command(['file', file_path]) + return 'ELF' in file_output and ('executable' in file_output or 'shared object' in file_output) + +def print_grand_summary(grand_summary, grand_special_cases, grand_missing_libraries): + """ + Print a grand summary of all analyzed binaries. + + Args: + grand_summary (dict): Dictionary of all packages and their details. + grand_special_cases (list): List of all special cases. + grand_missing_libraries (dict): Dictionary of all missing libraries. + """ + if grand_summary or grand_special_cases or grand_missing_libraries: + print("\nGrand Summary of runtime packages required across all binaries:") + table = PrettyTable(['Package', 'Included Packages']) + table.align['Package'] = 'l' + table.align['Included Packages'] = 'l' + for package_name, full_package_names in sorted(grand_summary.items()): + included_packages = '\n'.join(sorted(full_package_names)) + table.add_row([package_name, included_packages]) + print(table) + + if grand_missing_libraries: + print("\nGrand Summary of MISSING LIBRARIES across all binaries:") + missing_table = PrettyTable(['Missing Library', 'Referenced By']) + missing_table.align['Missing Library'] = 'l' + missing_table.align['Referenced By'] = 'l' + for lib, binaries in sorted(grand_missing_libraries.items()): + missing_table.add_row([lib, '\n'.join(sorted(binaries))]) + print(missing_table) + + print("\nGrand Summary of special cases across all binaries:") + if grand_special_cases: + special_table = PrettyTable(['Library/Case', 'Referenced By', 'Category']) + special_table.align['Library/Case'] = 'l' + special_table.align['Referenced By'] = 'l' + special_table.align['Category'] = 'l' + for case, binary in sorted(set(grand_special_cases)): + category = "System Library" if "system library" in case else "Other" + library = case.split(" is ")[0] if " is " in case else case + special_table.add_row([library, binary, category]) + print(special_table) + else: + print("No special cases found.") + +def analyze_path(path, grand_summary, grand_special_cases, grand_missing_libraries): + """ + Analyze a file or directory for ELF binaries and their dependencies. + + Args: + path (str): Path to the file or directory to analyze. + grand_summary (dict): Dictionary to store all package information. + grand_special_cases (list): List to store all special cases. + grand_missing_libraries (dict): Dictionary to store all missing libraries. + """ + if os.path.isfile(path): + if is_elf_binary(path): + packages, special_cases, missing_libraries = process_binary(path) + for package_name, full_package_name in packages: + grand_summary[package_name].add(full_package_name) + grand_special_cases.extend((case, path) for case in special_cases) + for lib in missing_libraries: + grand_missing_libraries[lib].add(path) + elif os.path.isdir(path): + for root, dirs, files in os.walk(path): + for file in files: + file_path = os.path.join(root, file) + if is_elf_binary(file_path): + packages, special_cases, missing_libraries = process_binary(file_path) + for package_name, full_package_name in packages: + grand_summary[package_name].add(full_package_name) + grand_special_cases.extend((case, file_path) for case in special_cases) + for lib in missing_libraries: + grand_missing_libraries[lib].add(file_path) + else: + print(f"Error: {path} is neither a valid file nor a directory.") + +def main(): + """ + Main function to handle command-line arguments and initiate the analysis. + """ + parser = argparse.ArgumentParser(description="ELF Dependency Analyzer for Ubuntu") + parser.add_argument('paths', nargs='+', help="Paths to files or directories to analyze") + args = parser.parse_args() + + grand_summary = defaultdict(set) + grand_special_cases = [] + grand_missing_libraries = defaultdict(set) + + for path in args.paths: + analyze_path(path, grand_summary, grand_special_cases, grand_missing_libraries) + + print_grand_summary(grand_summary, grand_special_cases, grand_missing_libraries) + +if __name__ == '__main__': + main() diff --git a/cloudberry-devops-release/scripts/release/cloudberry-release.sh b/cloudberry-devops-release/scripts/release/cloudberry-release.sh new file mode 100755 index 00000000000..5fd579b481e --- /dev/null +++ b/cloudberry-devops-release/scripts/release/cloudberry-release.sh @@ -0,0 +1,496 @@ +#!/usr/bin/env bash +# ====================================================================== +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ====================================================================== +# +# cloudberry-release.sh β€” Apache Cloudberry (Incubating) release utility +# +# This script automates the preparation of an Apache Cloudberry release +# candidate, including version validation, tag creation, and source +# tarball assembly. +# +# Supported Features: +# - Validates version consistency across configure.ac, configure, gpversion.py, and pom.xml +# - Supports both final releases and release candidates (e.g., 2.0.0-incubating, 2.0.0-incubating-rc1) +# - Optionally reuses existing annotated Git tags if they match the current HEAD +# - Verifies that Git submodules are initialized (if defined in .gitmodules) +# - Verifies Git identity (user.name and user.email) prior to tagging +# - Creates a BUILD_NUMBER file (currently hardcoded as 1) in the release tarball +# - Recursively archives all submodules into the source tarball +# - Generates SHA-512 checksum (.sha512) for the source tarball +# - Generates GPG signature (.asc) for the source tarball, unless --skip-signing is used +# - Moves signed artifacts into a dedicated artifacts/ directory +# - Verifies integrity and authenticity of artifacts via SHA-512 checksum and GPG signature +# - Allows skipping of upstream remote URL validation (e.g., for forks) via --skip-remote-check +# +# Usage: +# ./cloudberry-release.sh --stage --tag 2.0.0-incubating-rc1 --gpg-user your@apache.org +# +# Options: +# -s, --stage Stage a release candidate and generate source tarball +# -t, --tag Tag to apply or validate (e.g., 2.0.0-incubating-rc1) +# -f, --force-tag-reuse Allow reuse of an existing tag (must match HEAD) +# -r, --repo Optional path to local Cloudberry Git repository +# -S, --skip-remote-check Skip validation of remote.origin.url (useful for forks/mirrors) +# -g, --gpg-user GPG key ID or email to use for signing (required) +# -k, --skip-signing Skip GPG key validation and signature generation +# -h, --help Show usage and exit +# +# Requirements: +# - Must be run from the root of a valid Apache Cloudberry Git clone, +# or the path must be explicitly provided using --repo +# - Git user.name and user.email must be configured +# - Repository remote must be: git@github.com:apache/cloudberry.git +# +# Examples: +# ./cloudberry-release.sh -s -t 2.0.0-incubating-rc1 --gpg-user your@apache.org +# ./cloudberry-release.sh -s -t 2.0.0-incubating-rc1 --skip-signing +# ./cloudberry-release.sh --stage --tag 2.0.0-incubating-rc2 --force-tag-reuse --gpg-user your@apache.org +# ./cloudberry-release.sh --stage --tag 2.0.0-incubating-rc1 -r ~/cloudberry --skip-remote-check --gpg-user your@apache.org +# +# Notes: +# - When reusing a tag, the `--force-tag-reuse` flag must be provided. +# - This script creates a BUILD_NUMBER file in the source root for traceability. It is included in the tarball. +# ====================================================================== + +set -euo pipefail + +confirm() { + read -r -p "$1 [y/N] " response + case "$response" in + [yY][eE][sS]|[yY]) true ;; + *) echo "Aborted."; exit 1 ;; + esac +} + +section() { + echo + echo "=================================================================" + echo ">> $1" + echo "=================================================================" +} + +show_help() { + echo "Apache Cloudberry (Incubating) Release Tool" + echo + echo "Usage:" + echo " $0 --stage --tag " + echo + echo "Options:" + echo " -s, --stage" + echo " Stage a release candidate and generate source tarball" + echo + echo " -t, --tag " + echo " Required with --stage (e.g., 2.0.0-incubating-rc1)" + echo + echo " -f, --force-tag-reuse" + echo " Reuse existing tag if it matches current HEAD" + echo + echo " -r, --repo " + echo " Optional path to a local Cloudberry Git repository clone" + echo + echo " -S, --skip-remote-check" + echo " Skip remote.origin.url check (use for forks or mirrors)" + echo " Required for official releases:" + echo " git@github.com:apache/cloudberry.git" + echo + echo " -g, --gpg-user " + echo " GPG key ID or email to use for signing (required unless --skip-signing)" + echo + echo " -k, --skip-signing" + echo " Skip GPG key validation and signature generation" + echo + echo " -h, --help" + echo " Show this help message" + exit 1 +} + +# Flags +STAGE=false +SKIP_SIGNING=false +TAG="" +FORCE_TAG_REUSE=false +REPO_ARG="" +SKIP_REMOTE_CHECK=false +GPG_USER="" + +# Parse arguments +while [[ $# -gt 0 ]]; do + case "$1" in + -g|--gpg-user) + if [[ $# -lt 2 ]]; then + echo "ERROR: --gpg-user requires an email." >&2 + show_help + fi + GPG_USER="$2" + shift 2 + ;; + -s|--stage) + STAGE=true + shift + ;; + -t|--tag) + if [[ $# -lt 2 ]]; then + echo "ERROR: Missing tag value after --tag" >&2 + show_help + fi + TAG="$2" + shift 2 + ;; + -f|--force-tag-reuse) + FORCE_TAG_REUSE=true + shift + ;; + -r|--repo) + if [[ $# -lt 2 ]]; then + echo "ERROR: --repo requires a path." >&2 + show_help + fi + REPO_ARG="$2" + shift 2 + ;; + -S|--skip-remote-check) + SKIP_REMOTE_CHECK=true + shift + ;; + -k|--skip-signing) + SKIP_SIGNING=true + shift + ;; + -h|--help) + show_help + ;; + *) + echo "ERROR: Unknown option: $1" >&2 + show_help + ;; + esac +done + +# GPG signing checks +if [[ "$SKIP_SIGNING" != true ]]; then + if [[ -z "$GPG_USER" ]]; then + echo "ERROR: --gpg-user is required for signing the release tarball." >&2 + show_help + fi + + if ! gpg --list-keys "$GPG_USER" > /dev/null 2>&1; then + echo "ERROR: GPG key '$GPG_USER' not found in your local keyring." >&2 + echo "Please import or generate the key before proceeding." >&2 + exit 1 + fi +else + echo "INFO: GPG signing has been intentionally skipped (--skip-signing)." +fi + +if [[ -n "$REPO_ARG" ]]; then + if [[ -n "$REPO_ARG" ]]; then + if [[ ! -d "$REPO_ARG" || ! -f "$REPO_ARG/configure.ac" ]]; then + echo "ERROR: '$REPO_ARG' does not appear to be a valid Cloudberry source directory." + echo "Expected to find a 'configure.ac' file but it is missing." + echo + echo "Hint: Make sure you passed the correct --repo path to a valid Git clone." + exit 1 + fi + cd "$REPO_ARG" + elif [[ ! -f configure.ac ]]; then + echo "ERROR: No Cloudberry source directory specified and no 'configure.ac' found in the current directory." + echo + echo "Hint: Either run this script from the root of a Cloudberry Git clone," + echo "or use the --repo option to specify the source directory." + exit 1 + fi + cd "$REPO_ARG" + + if [[ ! -d ".git" ]]; then + echo "ERROR: '$REPO_ARG' is not a valid Git repository." + exit 1 + fi + + if [[ "$SKIP_REMOTE_CHECK" != true ]]; then + REMOTE_URL=$(git config --get remote.origin.url || true) + if [[ "$REMOTE_URL" != "git@github.com:apache/cloudberry.git" ]]; then + echo "ERROR: remote.origin.url must be set to 'git@github.com:apache/cloudberry.git' for official releases." + echo " Found: '${REMOTE_URL:-}'" + echo + echo "This check ensures the release is being staged from the authoritative upstream repository." + echo "Use --skip-remote-check only if this is a fork or non-release automation." + exit 1 + fi + fi +fi + +# If --repo was not provided, ensure we are in a valid source directory +if [[ -z "$REPO_ARG" ]]; then + if [[ ! -f configure.ac || ! -f gpMgmt/bin/gppylib/gpversion.py || ! -f pom.xml ]]; then + echo "ERROR: You must run this script from the root of a valid Cloudberry Git clone" + echo " or pass the path using --repo ." + echo + echo "Missing one or more expected files:" + echo " - configure.ac" + echo " - gpMgmt/bin/gppylib/gpversion.py" + echo " - pom.xml" + exit 1 + fi +fi + +if ! $STAGE && [[ -z "$TAG" ]]; then + show_help +fi + +if $STAGE && [[ -z "$TAG" ]]; then + echo "ERROR: --tag (-t) is required when using --stage." >&2 + show_help +fi + +section "Validating Version Consistency" + +# Extract version from configure.ac +CONFIGURE_AC_VERSION=$(grep "^AC_INIT" configure.ac | sed -E "s/^AC_INIT\(\[[^]]+\], \[([^]]+)\].*/\1/") +CONFIGURE_AC_MAJOR=$(echo "$CONFIGURE_AC_VERSION" | cut -d. -f1) +EXPECTED="[$CONFIGURE_AC_MAJOR,99]" + +# Validate tag format +SEMVER_REGEX="^${CONFIGURE_AC_MAJOR}\\.[0-9]+\\.[0-9]+(-incubating(-rc[0-9]+)?)?$" +if ! [[ "$TAG" =~ $SEMVER_REGEX ]]; then + echo "ERROR: Tag '$TAG' does not match expected pattern for major version $CONFIGURE_AC_MAJOR (e.g., ${CONFIGURE_AC_MAJOR}.0.0-incubating or ${CONFIGURE_AC_MAJOR}.0.0-incubating-rc1)" + exit 1 +fi + +# Check gpversion.py consistency +PY_LINE=$(grep "^MAIN_VERSION" gpMgmt/bin/gppylib/gpversion.py | sed -E 's/#.*//' | tr -d '[:space:]') + +if [[ "$PY_LINE" != "MAIN_VERSION=$EXPECTED" ]]; then + echo "ERROR: gpversion.py MAIN_VERSION is $PY_LINE, but configure.ac suggests $EXPECTED" + echo "Please correct this mismatch before proceeding." + exit 1 +fi + +# For final releases (non-RC), ensure configure.ac version matches tag exactly +if [[ "$TAG" != *-rc* && "$CONFIGURE_AC_VERSION" != "$TAG" ]]; then + echo "ERROR: configure.ac version ($CONFIGURE_AC_VERSION) does not match final release tag ($TAG)" + echo "Please update configure.ac to match the tag before proceeding." + exit 1 +fi + +# Ensure the generated 'configure' script is up to date +CONFIGURE_VERSION_LINE=$(grep "^PACKAGE_VERSION=" configure || true) +CONFIGURE_VERSION=$(echo "$CONFIGURE_VERSION_LINE" | sed -E "s/^PACKAGE_VERSION='([^']+)'.*/\1/") + +if [[ "$CONFIGURE_VERSION" != "$TAG" ]]; then + echo "ERROR: Version in generated 'configure' script ($CONFIGURE_VERSION) does not match release tag ($TAG)." + echo "This likely means autoconf was not run after updating configure.ac." + exit 1 +fi + +# Ensure xmllint is available +if ! command -v xmllint >/dev/null 2>&1; then + echo "ERROR: xmllint is required but not installed." + exit 1 +fi + +# Extract version from pom.xml using xmllint with namespace stripping +POM_VERSION=$(xmllint --xpath '//*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml 2>/dev/null || true) + +if [[ -z "$POM_VERSION" ]]; then + echo "ERROR: Could not extract from pom.xml" + exit 1 +fi + +if [[ "$POM_VERSION" != "$TAG" ]]; then + echo "ERROR: Version in pom.xml ($POM_VERSION) does not match release tag ($TAG)." + echo "Please update pom.xml before tagging." + exit 1 +fi + +# Ensure working tree is clean +if ! git diff-index --quiet HEAD --; then + echo "ERROR: Working tree is not clean. Please commit or stash changes before proceeding." + exit 1 +fi + +echo "MAIN_VERSION verified" +printf " %-14s: %s\n" "Release Tag" "$TAG" +printf " %-14s: %s\n" "configure.ac" "$CONFIGURE_AC_VERSION" +printf " %-14s: %s\n" "configure" "$CONFIGURE_VERSION" +printf " %-14s: %s\n" "pom.xml" "$POM_VERSION" +printf " %-14s: %s\n" "gpversion.py" "${EXPECTED//[\[\]]}" + +section "Checking the state of the Tag" + +# Check if the tag already exists before making any changes +if git rev-parse "$TAG" >/dev/null 2>&1; then + TAG_COMMIT=$(git rev-list -n 1 "$TAG") + HEAD_COMMIT=$(git rev-parse HEAD) + + if [[ "$TAG_COMMIT" == "$HEAD_COMMIT" && "$FORCE_TAG_REUSE" == true ]]; then + echo "INFO: Tag '$TAG' already exists and matches HEAD. Proceeding with reuse." + elif [[ "$FORCE_TAG_REUSE" == true ]]; then + echo "ERROR: --force-tag-reuse was specified but tag '$TAG' does not match HEAD." + echo " Tags must be immutable. Cannot continue." + exit 1 + else + echo "ERROR: Tag '$TAG' already exists and does not match HEAD." + echo " Use --force-tag-reuse only when HEAD matches the tag commit." + exit 1 + fi +elif [[ "$FORCE_TAG_REUSE" == true ]]; then + echo "ERROR: --force-tag-reuse was specified, but tag '$TAG' does not exist." + echo " You can only reuse a tag if it already exists." + exit 1 +else + echo "INFO: Tag '$TAG' does not yet exist. It will be created during staging." +fi + +# Check and display submodule initialization status +if [ -s .gitmodules ]; then + section "Checking Git Submodules" + + UNINITIALIZED=false + while read -r status path rest; do + if [[ "$status" == "-"* ]]; then + echo "Uninitialized: $path" + UNINITIALIZED=true + else + echo "Initialized : $path" + fi + done < <(git submodule status) + + if [[ "$UNINITIALIZED" == true ]]; then + echo + echo "ERROR: One or more Git submodules are not initialized." + echo "Please run:" + echo " git submodule update --init --recursive" + echo "before proceeding with the release preparation." + exit 1 + fi +fi + +section "Checking GIT_USER_NAME and GIT_USER_EMAIL values" + +if $STAGE; then + # Validate Git environment before performing tag operation + GIT_USER_NAME=$(git config --get user.name || true) + GIT_USER_EMAIL=$(git config --get user.email || true) + + echo "Git User Info:" + printf " %-14s: %s\n" "user.name" "${GIT_USER_NAME:-}" + printf " %-14s: %s\n" "user.email" "${GIT_USER_EMAIL:-}" + + if [[ -z "$GIT_USER_NAME" || -z "$GIT_USER_EMAIL" ]]; then + echo "ERROR: Git configuration is incomplete." + echo + echo " Detected:" + echo " user.name = ${GIT_USER_NAME:-}" + echo " user.email = ${GIT_USER_EMAIL:-}" + echo + echo " Git requires both to be set in order to create annotated tags for releases." + echo " You may configure them globally using:" + echo " git config --global user.name \"Your Name\"" + echo " git config --global user.email \"your@apache.org\"" + echo + echo " Alternatively, set them just for this repo using the same commands without --global." + exit 1 + fi + +section "Staging release: $TAG" + + if [[ "$FORCE_TAG_REUSE" == false ]]; then + confirm "You are about to create tag '$TAG'. Continue?" + git tag -a "$TAG" -m "Apache Cloudberry (Incubating) ${TAG} Release Candidate" + else + echo "INFO: Reusing existing tag '$TAG'; skipping tag creation." + fi + + echo "Creating BUILD_NUMBER file with value of 1" + echo "1" > BUILD_NUMBER + + echo -e "\nTag Summary" + TAG_OBJECT=$(git rev-parse "$TAG") + TAG_COMMIT=$(git rev-list -n 1 "$TAG") + echo "$TAG (tag object): $TAG_OBJECT" + echo " Points to commit: $TAG_COMMIT" + git log -1 --format="%C(auto)%h %d" "$TAG" + + section "Creating Source Tarball" + + TAR_NAME="apache-cloudberry-${TAG}-src.tar.gz" + TMP_DIR=$(mktemp -d) + trap 'rm -rf "$TMP_DIR"' EXIT + + git archive --format=tar --prefix="apache-cloudberry-${TAG}/" "$TAG" | tar -x -C "$TMP_DIR" + cp BUILD_NUMBER "$TMP_DIR/apache-cloudberry-${TAG}/" + + # Archive submodules if any + if [ -s .gitmodules ]; then + git submodule foreach --recursive --quiet " + echo \"Archiving submodule: \$sm_path\" + fullpath=\"\$toplevel/\$sm_path\" + destpath=\"$TMP_DIR/apache-cloudberry-$TAG/\$sm_path\" + mkdir -p \"\$destpath\" + git -C \"\$fullpath\" archive --format=tar --prefix=\"\$sm_path/\" HEAD | tar -x -C \"$TMP_DIR/apache-cloudberry-$TAG\" + " + fi + + tar -czf "$TAR_NAME" -C "$TMP_DIR" "apache-cloudberry-${TAG}" + rm -rf "$TMP_DIR" + echo -e "Archive saved to: $TAR_NAME" + + # Generate SHA-512 checksum + section "Generating SHA-512 Checksum" + + echo -e "\nGenerating SHA-512 checksum" + shasum -a 512 "$TAR_NAME" > "${TAR_NAME}.sha512" + echo "Checksum saved to: ${TAR_NAME}.sha512" + + section "Signing with GPG key: $GPG_USER" + # Conditionally generate GPG signature + if [[ "$SKIP_SIGNING" != true ]]; then + echo -e "\nSigning tarball with GPG key: $GPG_USER" + gpg --armor --detach-sign --local-user "$GPG_USER" "$TAR_NAME" + echo "GPG signature saved to: ${TAR_NAME}.asc" + else + echo "INFO: Skipping tarball signing as requested (--skip-signing)" + fi + + # Move artifacts to top-level artifacts directory + + ARTIFACTS_DIR="$(cd "$(dirname "$REPO_ARG")" && cd .. && pwd)/artifacts" + mkdir -p "$ARTIFACTS_DIR" + + section "Moving Artifacts to $ARTIFACTS_DIR" + + echo -e "\nMoving release artifacts to: $ARTIFACTS_DIR" + mv -vf "$TAR_NAME" "$ARTIFACTS_DIR/" + mv -vf "${TAR_NAME}.sha512" "$ARTIFACTS_DIR/" + [[ -f "${TAR_NAME}.asc" ]] && mv -vf "${TAR_NAME}.asc" "$ARTIFACTS_DIR/" + + section "Verifying sha512 ($ARTIFACTS_DIR/${TAR_NAME}.sha512) Release Artifact" + cd "$ARTIFACTS_DIR" + sha512sum -c "$ARTIFACTS_DIR/${TAR_NAME}.sha512" + + section "Verifying GPG Signature ($ARTIFACTS_DIR/${TAR_NAME}.asc) Release Artifact" + + if [[ "$SKIP_SIGNING" != true ]]; then + gpg --verify "${TAR_NAME}.asc" "$TAR_NAME" + else + echo "INFO: Signature verification skipped (--skip-signing). Signature is only available when generated via this script." + fi + + section "Release candidate for $TAG staged successfully" +fi diff --git a/cloudberry-devops-release/scripts/s3-repo-sync-and-sign.sh b/cloudberry-devops-release/scripts/s3-repo-sync-and-sign.sh new file mode 100755 index 00000000000..c04e71881fc --- /dev/null +++ b/cloudberry-devops-release/scripts/s3-repo-sync-and-sign.sh @@ -0,0 +1,250 @@ +#!/bin/bash + +set -euo pipefail + +# Description: +# This script automates several tasks related to managing RPM repositories in AWS S3. +# It handles the following operations: +# 1. Syncing an RPM repository from an S3 bucket to a local directory. +# 2. Signing all RPMs in the local repository with a specified GPG key. +# 3. Updating and signing the repository metadata. +# 4. Exporting the GPG public key and placing it in the repository for client use. +# 5. Optionally, uploading changes back to the S3 bucket and deleting files in S3 that no longer exist locally. +# 6. Decrypting and importing a GPG private key used for signing. +# 7. A mode to only decrypt and import the GPG private key. +# 8. Identifying and copying a newly built RPM to the appropriate repository. + +# Function to display detailed usage information +usage() { + cat << EOF +Usage: $0 [OPTIONS] + +This script automates several tasks related to managing RPM repositories in AWS S3. +It can be used to sync repositories from S3, sign RPMs with a GPG key, update and sign repository metadata, +and optionally upload changes back to S3. + +Options: + -c Configure AWS credentials using 'aws configure'. + -s Specify the S3 bucket and path to sync (required for S3 operations). + -d Specify the local directory to sync to (default: ~/repo). + -k Specify the encrypted GPG private key file to import (optional). + -g Specify the GPG key ID or email to use for signing (required for signing operations). + --upload-with-delete Sync local changes to S3, deleting files in S3 that no longer exist locally. + --s3-sync-only Perform only the S3 sync to the local directory, inform the user, and exit. + --import-gpg-key-only Decrypt and import the GPG private key, then exit. No other operations will be performed. + --copy-new-rpm Copy the newly built RPM(s) to the appropriate repository directory based on architecture and version. + -h, --help Display this help message and exit. + +Examples: + # Sync an S3 repository to a local directory and sign RPMs with a GPG key + $0 -s s3://mybucket/repo -g mygpgkey@example.com + + # Sync an S3 repository only, without signing RPMs or performing other operations + $0 -s s3://mybucket/repo --s3-sync-only + + # Decrypt and import a GPG private key, then exit + $0 -k ~/path/to/encrypted-gpg-key.asc --import-gpg-key-only + + # Copy newly built RPMs to the appropriate repository and sign them + $0 --copy-new-rpm -g mygpgkey@example.com + +Notes: + - The -s option is required for any operation that interacts with S3, such as syncing or uploading with delete. + - The -g option is required for any operation that involves signing RPMs or repository metadata. + - When using --upload-with-delete, ensure that you have the necessary permissions to delete objects in the specified S3 bucket. + - If you only want to perform local operations (e.g., copying RPMs, signing), you do not need to specify the -s option. + +EOF +} + +# Parse options and arguments +GPG_KEY_ID="" +UPLOAD_WITH_DELETE=false +S3_SYNC_ONLY=false +IMPORT_GPG_KEY_ONLY=false +COPY_NEW_RPM=false +CONFIGURE_AWS=false +LOCAL_DIR=~/repo + +# Function to check if required commands are available +check_commands() { + local cmds=("aws" "gpg" "shred" "createrepo" "rpm" "find") + for cmd in "${cmds[@]}"; do + if ! command -v "$cmd" &> /dev/null; then + echo "Error: Required command '$cmd' not found. Please install it before running the script." + exit 1 + fi + done +} + +# Parse options +while [[ "$#" -gt 0 ]]; do + case $1 in + -c) CONFIGURE_AWS=true; shift ;; + -s) S3_BUCKET="$2"; shift 2 ;; + -d) LOCAL_DIR="$2"; shift 2 ;; + -k) ENCRYPTED_KEY_FILE="$2"; shift 2 ;; + -g) GPG_KEY_ID="$2"; shift 2 ;; + --upload-with-delete) UPLOAD_WITH_DELETE=true; shift ;; + --s3-sync-only) S3_SYNC_ONLY=true; shift ;; + --import-gpg-key-only) IMPORT_GPG_KEY_ONLY=true; shift ;; + --copy-new-rpm) COPY_NEW_RPM=true; shift ;; + -h|--help) usage; exit 0 ;; + *) echo "Unknown option: $1"; usage; exit 1 ;; + esac +done + +check_commands + +# AWS credentials configuration (optional) +if [ "$CONFIGURE_AWS" = true ]; then + echo "Configuring AWS credentials..." + aws configure +fi + +# Decrypt and import GPG private key if in import-only mode or not in sync-only mode +if [ -n "${ENCRYPTED_KEY_FILE:-}" ]; then + DECRYPTED_KEY_FILE="${ENCRYPTED_KEY_FILE%.*}" + echo "Decrypting GPG private key..." + gpg --decrypt --output "$DECRYPTED_KEY_FILE" "$ENCRYPTED_KEY_FILE" + + # Check if the key is already imported + if gpg --list-keys | grep -q "$GPG_KEY_ID"; then + echo "GPG key already imported." + else + gpg --import "$DECRYPTED_KEY_FILE" + fi + + # Securely delete the decrypted key file + shred -u "$DECRYPTED_KEY_FILE" + + # Exit if only importing GPG key + if [ "$IMPORT_GPG_KEY_ONLY" = true ]; then + echo "GPG key has been decrypted and imported successfully. Exiting." + exit 0 + fi +fi + +# Check access to the S3 bucket and perform sync only if needed +if [ "$IMPORT_GPG_KEY_ONLY" = false ] && [ "$S3_SYNC_ONLY" = false ] && [ "$COPY_NEW_RPM" = false ] && [ "$UPLOAD_WITH_DELETE" = false ]; then + if [ -z "${S3_BUCKET:-}" ]; then + echo "Error: S3 bucket (-s) is required." + exit 1 + fi + + echo "Checking access to S3 bucket $S3_BUCKET..." + if ! aws s3 ls "$S3_BUCKET" &> /dev/null; then + echo "Error: Unable to access S3 bucket $S3_BUCKET. Please check your AWS credentials and permissions." + exit 1 + fi + + # Sync the S3 repository to the local directory + mkdir -p "$LOCAL_DIR" + echo "Syncing S3 repository from $S3_BUCKET to $LOCAL_DIR..." + aws s3 sync "$S3_BUCKET" "$LOCAL_DIR" + + # Check if the operation is `s3-sync-only` + if [ "$S3_SYNC_ONLY" = true ]; then + echo "S3 sync operation completed successfully." + exit 0 + fi +fi + +# Copy the newly built RPM to the appropriate repository +if [ "$COPY_NEW_RPM" = true ]; then + echo "Identifying the newly built RPMs..." + + for ARCH in x86_64 noarch; do + RPM_DIR=~/rpmbuild/RPMS/$ARCH + + # Check if the RPM directory exists + if [ ! -d "$RPM_DIR" ]; then + echo "Warning: Directory $RPM_DIR does not exist. Skipping $ARCH." + continue + fi + + # Find all matching RPMs and copy them to the appropriate repository directory + NEW_RPMS=$(find "$RPM_DIR" -name "cloudberry-*.rpm" ! -name "*debuginfo*.rpm") + if [ -n "$NEW_RPMS" ]; then + for NEW_RPM in $NEW_RPMS; do + # Determine the repository (el8 or el9) based on the RPM filename + if echo "$NEW_RPM" | grep -q "\.el8\."; then + TARGET_REPO="$LOCAL_DIR/el8/$ARCH" + elif echo "$NEW_RPM" | grep -q "\.el9\."; then + TARGET_REPO="$LOCAL_DIR/el9/$ARCH" + else + echo "Error: Unable to determine the correct repository for $NEW_RPM. Exiting." + exit 1 + fi + + # Ensure the target repository directory exists + mkdir -p "$TARGET_REPO" + + # Copy the RPM to the target repository + echo "Copying $NEW_RPM to $TARGET_REPO..." + cp "$NEW_RPM" "$TARGET_REPO/" + echo "Copy operation completed." + done + else + echo "No matching RPMs found in $RPM_DIR." + fi + done +fi + +# Define the directories for `el8` and `el9` repositories +REPO_DIRS=("$LOCAL_DIR/el8/x86_64" "$LOCAL_DIR/el8/noarch" "$LOCAL_DIR/el9/x86_64" "$LOCAL_DIR/el9/noarch") + +# Traverse each repository directory (el8 and el9) and sign RPMs +for REPO_DIR in "${REPO_DIRS[@]}"; do + if [ -d "$REPO_DIR" ]; then + echo "Processing repository at $REPO_DIR..." + + # Export GPG public key for clients and place it in the root of the repository + TEMP_GPG_KEY=$(mktemp) + echo "Exporting GPG public key to temporary location..." + gpg --armor --export "$GPG_KEY_ID" > "$TEMP_GPG_KEY" + + # Import the GPG public key to RPM database + echo "Importing GPG public key into RPM database..." + sudo rpm --import "$TEMP_GPG_KEY" + + # Sign each RPM in the directory + echo "Signing RPM packages in $REPO_DIR..." + find "$REPO_DIR" -name "*.rpm" -exec rpm --addsign --define "_gpg_name $GPG_KEY_ID" {} \; + + # Verify that RPMs were signed successfully + echo "Verifying RPM signatures in $REPO_DIR..." + find "$REPO_DIR" -name "*.rpm" -exec rpm -Kv {} \; + + # Recreate the repository metadata + echo "Updating repository metadata in $REPO_DIR..." + createrepo --update "$REPO_DIR" + + # Sign the repository metadata, automatically overwriting if the file already exists + echo "Signing repository metadata in $REPO_DIR..." + gpg --batch --yes --detach-sign --armor --local-user "$GPG_KEY_ID" "$REPO_DIR/repodata/repomd.xml" + + # Copy the public key to each repo + cp "$TEMP_GPG_KEY" "$REPO_DIR/RPM-GPG-KEY-cloudberry" + + # Clean up temporary GPG key + rm -f "$TEMP_GPG_KEY" + else + echo "Warning: Repository directory $REPO_DIR does not exist. Skipping..." + fi +done + +# Upload changes to S3 with --delete option if requested +if [ "$UPLOAD_WITH_DELETE" = true ]; then + if [ -z "${S3_BUCKET:-}" ]; then + echo "Error: S3 bucket (-s) is required for upload with delete." + exit 1 + fi + + echo "Uploading local changes to S3 with --delete option..." + aws s3 sync "$LOCAL_DIR" "$S3_BUCKET" --delete + echo "S3 sync with --delete completed." +fi + +# Print completion message +echo "S3 repository sync, RPM signing, metadata signing, and public key export completed successfully." From 50dae0f6e452dee0276c9171d7e275618c1356d3 Mon Sep 17 00:00:00 2001 From: Leonid Borchuk Date: Wed, 27 Aug 2025 11:34:00 +0000 Subject: [PATCH 155/260] Reorganize files in main repo and add licence info to all files --- .github/workflows/build-cloudberry.yml | 62 ++---- .github/workflows/build-dbg-cloudberry.yml | 62 ++---- .../docker-cbdb-build-containers.yml | 208 ++++++++++++++++++ .../workflows/docker-cbdb-test-containers.yml | 182 +++++++++++++++ cloudberry-devops-release/CONTRIBUTING.md | 66 ------ cloudberry-devops-release/LICENSE | 202 ----------------- cloudberry-devops-release/README.md | 1 - devops/README.md | 88 ++++++++ .../cloudberry/scripts/analyze_core_dumps.sh | 0 .../cloudberry/scripts/build-cloudberry.sh | 0 .../cloudberry/scripts/cloudberry-utils.sh | 0 .../scripts/configure-cloudberry.sh | 0 .../scripts/create-cloudberry-demo-cluster.sh | 0 .../destroy-cloudberry-demo-cluster.sh | 0 .../cloudberry/scripts/parse-results.pl | 0 .../cloudberry/scripts/parse-test-results.sh | 0 .../cloudberry/scripts/test-cloudberry.sh | 0 .../cloudberry/scripts/unittest-cloudberry.sh | 0 .../rpm}/apache-cloudberry-db-incubating.spec | 17 ++ .../apache-cloudberry-hll-incubating.spec | 17 ++ ...apache-cloudberry-pgvector-incubating.spec | 17 ++ .../build/packaging/rpm}/build-rpm.sh | 16 ++ .../packaging/rpm}/cloudberry-dev-repo.spec | 17 ++ .../deploy/docker}/build/rocky8/Dockerfile | 0 .../build/rocky8/configs/90-cbdb-limits | 0 .../build/rocky8/configs/gpinitsystem.conf | 0 .../build/rocky8/configs/init_system.sh | 0 .../build/rocky8/tests/requirements.txt | 0 .../tests/testinfra/test_cloudberry_db_env.py | 0 .../deploy/docker}/build/rocky9/Dockerfile | 0 .../build/rocky9/configs/90-cbdb-limits | 0 .../build/rocky9/configs/gpinitsystem.conf | 0 .../build/rocky9/configs/init_system.sh | 0 .../build/rocky9/tests/requirements.txt | 0 .../tests/testinfra/test_cloudberry_db_env.py | 0 .../deploy/docker}/test/rocky8/Dockerfile | 0 .../test/rocky8/configs/90-cbdb-limits | 0 .../test/rocky8/configs/gpinitsystem.conf | 0 .../test/rocky8/configs/init_system.sh | 0 .../deploy/docker}/test/rocky9/Dockerfile | 0 .../test/rocky9/configs/90-cbdb-limits | 0 .../test/rocky9/configs/gpinitsystem.conf | 0 .../test/rocky9/configs/init_system.sh | 0 .../release/cloudberry-release.sh | 0 .../elf_rockylinux_dependency_analyzer.py | 16 ++ .../tools}/elf_ubuntu_dependency_analyzer.py | 16 ++ .../tools}/s3-repo-sync-and-sign.sh | 16 ++ pom.xml | 5 + 48 files changed, 641 insertions(+), 367 deletions(-) create mode 100644 .github/workflows/docker-cbdb-build-containers.yml create mode 100644 .github/workflows/docker-cbdb-test-containers.yml delete mode 100644 cloudberry-devops-release/CONTRIBUTING.md delete mode 100644 cloudberry-devops-release/LICENSE delete mode 100644 cloudberry-devops-release/README.md create mode 100644 devops/README.md rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/analyze_core_dumps.sh (100%) rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/build-cloudberry.sh (100%) rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/cloudberry-utils.sh (100%) rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/configure-cloudberry.sh (100%) rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/create-cloudberry-demo-cluster.sh (100%) rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/destroy-cloudberry-demo-cluster.sh (100%) rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/parse-results.pl (100%) rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/parse-test-results.sh (100%) rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/test-cloudberry.sh (100%) rename {cloudberry-devops-release/build_automation => devops/build/automation}/cloudberry/scripts/unittest-cloudberry.sh (100%) rename {cloudberry-devops-release/packaging/rpm/el/SPECS => devops/build/packaging/rpm}/apache-cloudberry-db-incubating.spec (84%) rename {cloudberry-devops-release/packaging/rpm/el/SPECS => devops/build/packaging/rpm}/apache-cloudberry-hll-incubating.spec (70%) rename {cloudberry-devops-release/packaging/rpm/el/SPECS => devops/build/packaging/rpm}/apache-cloudberry-pgvector-incubating.spec (74%) rename {cloudberry-devops-release/scripts => devops/build/packaging/rpm}/build-rpm.sh (83%) rename {cloudberry-devops-release/packaging/rpm/repo-el/SPECS => devops/build/packaging/rpm}/cloudberry-dev-repo.spec (61%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky8/Dockerfile (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky8/configs/90-cbdb-limits (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky8/configs/gpinitsystem.conf (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky8/configs/init_system.sh (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky8/tests/requirements.txt (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky8/tests/testinfra/test_cloudberry_db_env.py (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky9/Dockerfile (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky9/configs/90-cbdb-limits (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky9/configs/gpinitsystem.conf (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky9/configs/init_system.sh (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky9/tests/requirements.txt (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/build/rocky9/tests/testinfra/test_cloudberry_db_env.py (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/test/rocky8/Dockerfile (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/test/rocky8/configs/90-cbdb-limits (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/test/rocky8/configs/gpinitsystem.conf (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/test/rocky8/configs/init_system.sh (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/test/rocky9/Dockerfile (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/test/rocky9/configs/90-cbdb-limits (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/test/rocky9/configs/gpinitsystem.conf (100%) rename {cloudberry-devops-release/images/docker/cbdb => devops/deploy/docker}/test/rocky9/configs/init_system.sh (100%) rename {cloudberry-devops-release/scripts => devops}/release/cloudberry-release.sh (100%) rename {cloudberry-devops-release/scripts => devops/tools}/elf_rockylinux_dependency_analyzer.py (94%) rename {cloudberry-devops-release/scripts => devops/tools}/elf_ubuntu_dependency_analyzer.py (93%) rename {cloudberry-devops-release/scripts => devops/tools}/s3-repo-sync-and-sign.sh (92%) diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index fd2b9c73949..76dc06ced80 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -441,24 +441,6 @@ jobs: fetch-depth: 1 submodules: true - - name: Checkout CI Build/Test Scripts - if: needs.check-skip.outputs.should_skip != 'true' - uses: actions/checkout@v4 - with: - repository: apache/cloudberry-devops-release - ref: main - path: cloudberry-devops-release - fetch-depth: 1 - - - name: Move cloudberry-devops-release directory - if: needs.check-skip.outputs.should_skip != 'true' - run: | - set -eo pipefail - if ! mv "${GITHUB_WORKSPACE}"/cloudberry-devops-release "${GITHUB_WORKSPACE}"/..; then - echo "::error::Container initialization failed" - exit 1 - fi - - name: Cloudberry Environment Initialization if: needs.check-skip.outputs.should_skip != 'true' env: @@ -510,8 +492,8 @@ jobs: SRC_DIR: ${{ github.workspace }} run: | set -eo pipefail - chmod +x "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh - if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ENABLE_DEBUG=${{ env.ENABLE_DEBUG }} ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh"; then + chmod +x "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/configure-cloudberry.sh + if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ENABLE_DEBUG=${{ env.ENABLE_DEBUG }} ${SRC_DIR}/devops/build/automation/cloudberry/scripts/configure-cloudberry.sh"; then echo "::error::Configure script failed" exit 1 fi @@ -523,8 +505,8 @@ jobs: run: | set -eo pipefail - chmod +x "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh - if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh"; then + chmod +x "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/build-cloudberry.sh + if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ${SRC_DIR}/devops/build/automation/cloudberry/scripts/build-cloudberry.sh"; then echo "::error::Build script failed" exit 1 fi @@ -606,7 +588,7 @@ jobs: # Create RPM echo "Creating RPM package..." rpmdev-setuptree - ln -s "${SRC_DIR}"/../cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec "${HOME}"/rpmbuild/SPECS/apache-cloudberry-db-incubating.spec + ln -s "${SRC_DIR}"/devops/build/packaging/rpm/apache-cloudberry-db-incubating.spec "${HOME}"/rpmbuild/SPECS/apache-cloudberry-db-incubating.spec cp "${SRC_DIR}"/LICENSE /usr/local/cloudberry-db DEBUG_RPMBUILD_OPT="" @@ -616,7 +598,7 @@ jobs: DEBUG_IDENTIFIER=".debug" fi - "${SRC_DIR}"/../cloudberry-devops-release/scripts/build-rpm.sh --version "${CBDB_VERSION}" --release "${BUILD_NUMBER}" "${DEBUG_RPMBUILD_OPT}" + "${SRC_DIR}"/devops/build/packaging/rpm/build-rpm.sh --version "${CBDB_VERSION}" --release "${BUILD_NUMBER}" "${DEBUG_RPMBUILD_OPT}" # Get OS version and move RPM os_version=$(grep -oP '(?<=^VERSION_ID=")[0-9]' /etc/os-release) @@ -653,8 +635,8 @@ jobs: SRC_DIR: ${{ github.workspace }} run: | set -eo pipefail - chmod +x "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh - if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh"; then + chmod +x "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh + if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ${SRC_DIR}/devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh"; then echo "::error::Unittest script failed" exit 1 fi @@ -904,24 +886,6 @@ jobs: run: | echo "Timestamp from output: ${{ needs.build.outputs.build_timestamp }}" - - name: Checkout CI Build/Test Scripts - if: needs.check-skip.outputs.should_skip != 'true' - uses: actions/checkout@v4 - with: - repository: apache/cloudberry-devops-release - ref: main - path: cloudberry-devops-release - fetch-depth: 1 - - - name: Move cloudberry-devops-release directory - if: needs.check-skip.outputs.should_skip != 'true' - run: | - set -eo pipefail - if ! mv "${GITHUB_WORKSPACE}"/cloudberry-devops-release "${GITHUB_WORKSPACE}"/..; then - echo "::error::Container initialization failed" - exit 1 - fi - - name: Cloudberry Environment Initialization env: LOGS_DIR: build-logs @@ -1267,8 +1231,8 @@ jobs: set -eo pipefail { - chmod +x "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh - if ! time su - gpadmin -c "cd ${SRC_DIR} && NUM_PRIMARY_MIRROR_PAIRS='${{ matrix.num_primary_mirror_pairs }}' SRC_DIR=${SRC_DIR} ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh"; then + chmod +x "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh + if ! time su - gpadmin -c "cd ${SRC_DIR} && NUM_PRIMARY_MIRROR_PAIRS='${{ matrix.num_primary_mirror_pairs }}' SRC_DIR=${SRC_DIR} ${SRC_DIR}/devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh"; then echo "::error::Demo cluster creation failed" exit 1 fi @@ -1343,7 +1307,7 @@ jobs: MAKE_DIRECTORY='-C $dir' \ PGOPTIONS='${PG_OPTS}' \ SRC_DIR='${SRC_DIR}' \ - ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh" \ + ${SRC_DIR}/devops/build/automation/cloudberry/scripts/test-cloudberry.sh" \ 2>&1 | tee "$config_log"; then echo "::warning::Test execution failed for configuration $((i+1)): make -C $dir $target" overall_status=1 @@ -1376,7 +1340,7 @@ jobs: ls -Rl "/tmp/cloudberry-cores" echo "-----------------------------------------" - "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/analyze_core_dumps.sh "$test_id" + "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/analyze_core_dumps.sh "$test_id" core_analysis_rc=$? case "$core_analysis_rc" in 0) echo "No core dumps found for this configuration" ;; @@ -1452,7 +1416,7 @@ jobs: # Parse this configuration's results MAKE_NAME="${{ matrix.test }}-config$i" \ - "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh "$config_log" + "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/parse-test-results.sh "$config_log" status_code=$? { diff --git a/.github/workflows/build-dbg-cloudberry.yml b/.github/workflows/build-dbg-cloudberry.yml index 569e6a350d6..4bc23a5d677 100644 --- a/.github/workflows/build-dbg-cloudberry.yml +++ b/.github/workflows/build-dbg-cloudberry.yml @@ -343,24 +343,6 @@ jobs: fetch-depth: 1 submodules: true - - name: Checkout CI Build/Test Scripts - if: needs.check-skip.outputs.should_skip != 'true' - uses: actions/checkout@v4 - with: - repository: apache/cloudberry-devops-release - ref: main - path: cloudberry-devops-release - fetch-depth: 1 - - - name: Move cloudberry-devops-release directory - if: needs.check-skip.outputs.should_skip != 'true' - run: | - set -eo pipefail - if ! mv "${GITHUB_WORKSPACE}"/cloudberry-devops-release "${GITHUB_WORKSPACE}"/..; then - echo "::error::Container initialization failed" - exit 1 - fi - - name: Cloudberry Environment Initialization if: needs.check-skip.outputs.should_skip != 'true' env: @@ -412,8 +394,8 @@ jobs: SRC_DIR: ${{ github.workspace }} run: | set -eo pipefail - chmod +x "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh - if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ENABLE_DEBUG=${{ env.ENABLE_DEBUG }} ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh"; then + chmod +x "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/configure-cloudberry.sh + if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ENABLE_DEBUG=${{ env.ENABLE_DEBUG }} ${SRC_DIR}/devops/build/automation/cloudberry/scripts/configure-cloudberry.sh"; then echo "::error::Configure script failed" exit 1 fi @@ -425,8 +407,8 @@ jobs: run: | set -eo pipefail - chmod +x "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh - if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh"; then + chmod +x "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/build-cloudberry.sh + if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ${SRC_DIR}/devops/build/automation/cloudberry/scripts/build-cloudberry.sh"; then echo "::error::Build script failed" exit 1 fi @@ -508,7 +490,7 @@ jobs: # Create RPM echo "Creating RPM package..." rpmdev-setuptree - ln -s "${SRC_DIR}"/../cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec "${HOME}"/rpmbuild/SPECS/apache-cloudberry-db-incubating.spec + ln -s "${SRC_DIR}"/devops/build/packaging/rpm/apache-cloudberry-db-incubating.spec "${HOME}"/rpmbuild/SPECS/apache-cloudberry-db-incubating.spec cp "${SRC_DIR}"/LICENSE /usr/local/cloudberry-db DEBUG_RPMBUILD_OPT="" @@ -518,7 +500,7 @@ jobs: DEBUG_IDENTIFIER=".debug" fi - "${SRC_DIR}"/../cloudberry-devops-release/scripts/build-rpm.sh --version "${CBDB_VERSION}" --release "${BUILD_NUMBER}" "${DEBUG_RPMBUILD_OPT}" + "${SRC_DIR}"/devops/build/packaging/rpm/build-rpm.sh --version "${CBDB_VERSION}" --release "${BUILD_NUMBER}" "${DEBUG_RPMBUILD_OPT}" # Get OS version and move RPM os_version=$(grep -oP '(?<=^VERSION_ID=")[0-9]' /etc/os-release) @@ -553,8 +535,8 @@ jobs: SRC_DIR: ${{ github.workspace }} run: | set -eo pipefail - chmod +x "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh - if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh"; then + chmod +x "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh + if ! time su - gpadmin -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ${SRC_DIR}/devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh"; then echo "::error::Unittest script failed" exit 1 fi @@ -804,24 +786,6 @@ jobs: run: | echo "Timestamp from output: ${{ needs.build.outputs.build_timestamp }}" - - name: Checkout CI Build/Test Scripts - if: needs.check-skip.outputs.should_skip != 'true' - uses: actions/checkout@v4 - with: - repository: apache/cloudberry-devops-release - ref: main - path: cloudberry-devops-release - fetch-depth: 1 - - - name: Move cloudberry-devops-release directory - if: needs.check-skip.outputs.should_skip != 'true' - run: | - set -eo pipefail - if ! mv "${GITHUB_WORKSPACE}"/cloudberry-devops-release "${GITHUB_WORKSPACE}"/..; then - echo "::error::Container initialization failed" - exit 1 - fi - - name: Cloudberry Environment Initialization env: LOGS_DIR: build-logs @@ -1167,8 +1131,8 @@ jobs: set -eo pipefail { - chmod +x "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh - if ! time su - gpadmin -c "cd ${SRC_DIR} && NUM_PRIMARY_MIRROR_PAIRS='${{ matrix.num_primary_mirror_pairs }}' SRC_DIR=${SRC_DIR} ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh"; then + chmod +x "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh + if ! time su - gpadmin -c "cd ${SRC_DIR} && NUM_PRIMARY_MIRROR_PAIRS='${{ matrix.num_primary_mirror_pairs }}' SRC_DIR=${SRC_DIR} ${SRC_DIR}/devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh"; then echo "::error::Demo cluster creation failed" exit 1 fi @@ -1239,7 +1203,7 @@ jobs: MAKE_DIRECTORY='-C $dir' \ PGOPTIONS='${PG_OPTS}' \ SRC_DIR='${SRC_DIR}' \ - ${SRC_DIR}/../cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh" \ + ${SRC_DIR}/devops/build/automation/cloudberry/scripts/test-cloudberry.sh" \ 2>&1 | tee "$config_log"; then echo "::warning::Test execution failed for configuration $((i+1)): make -C $dir $target" overall_status=1 @@ -1272,7 +1236,7 @@ jobs: ls -Rl "/tmp/cloudberry-cores" echo "-----------------------------------------" - "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/analyze_core_dumps.sh "$test_id" + "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/analyze_core_dumps.sh "$test_id" core_analysis_rc=$? case "$core_analysis_rc" in 0) echo "No core dumps found for this configuration" ;; @@ -1348,7 +1312,7 @@ jobs: # Parse this configuration's results MAKE_NAME="${{ matrix.test }}-config$i" \ - "${SRC_DIR}"/../cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh "$config_log" + "${SRC_DIR}"/devops/build/automation/cloudberry/scripts/parse-test-results.sh "$config_log" status_code=$? { diff --git a/.github/workflows/docker-cbdb-build-containers.yml b/.github/workflows/docker-cbdb-build-containers.yml new file mode 100644 index 00000000000..f5f8676cd4c --- /dev/null +++ b/.github/workflows/docker-cbdb-build-containers.yml @@ -0,0 +1,208 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# GitHub Actions Workflow for Apache Cloudberry Build Environments +# -------------------------------------------------------------------- +# Purpose: +# Builds, tests, and publishes multi-architecture Docker images for +# Apache Cloudberry DB build environments. Images are built for both +# Rocky Linux 8 and 9, tested with TestInfra, and pushed to DockerHub. +# +# Multi-Architecture Support: +# - Builds images for both AMD64 and ARM64 architectures +# - Creates and pushes multi-arch manifests +# - Uses QEMU for cross-platform builds +# - Automated testing for all architectures +# +# Image Tags: +# - Latest: cbdb-build-{platform}-latest +# - Versioned: cbdb-build-{platform}-{YYYYMMDD}-{git-short-sha} +# +# Features: +# - Matrix build for multiple platforms +# - Parallel architecture builds +# - Build caching strategy +# - Path filtering to only build changed platforms +# - Comprehensive build summary and metadata +# - Container testing with TestInfra +# - Multi-arch manifest creation +# +# Requirements: +# - DockerHub credentials in GitHub secrets +# - DOCKERHUB_USER +# - DOCKERHUB_TOKEN +# -------------------------------------------------------------------- + +name: docker-cbdb-build-containers + +# Trigger workflow on pushes to main when relevant paths change +# Also allows manual triggering via GitHub UI +on: + push: + branches: + - main + paths: + - 'devops/deploy/docker/build/rocky8/**' + - 'devops/deploy/docker/build/rocky9/**' + workflow_dispatch: # Manual trigger + +# Prevent multiple workflow runs from interfering with each other +concurrency: + group: docker-build-${{ github.ref }} + cancel-in-progress: true + +jobs: + build-and-push: + # Set timeout to prevent hanging builds + timeout-minutes: 60 + runs-on: ubuntu-latest + + # Matrix strategy to build for both Rocky Linux 8 and 9 + strategy: + matrix: + platform: ['rocky8', 'rocky9'] + + steps: + # Checkout repository code with full history + - name: Checkout code + uses: actions/checkout@v4 + + # Generate version information for image tags + # - BUILD_DATE: Current date in YYYYMMDD format + # - SHA_SHORT: Short form of the git commit SHA + - name: Set version + id: version + run: | + echo "BUILD_DATE=$(date -u +'%Y%m%d')" >> $GITHUB_OUTPUT + echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + # Determine if the current platform's files have changed + # This prevents unnecessary builds if only one platform was modified + - name: Determine if platform changed + id: platform-filter + uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 + with: + filters: | + rocky8: + - 'devops/deploy/docker/build/rocky8/**' + rocky9: + - 'devops/deploy/docker/build/rocky9/**' + + # Set up QEMU for multi-architecture support + # This allows building ARM64 images on AMD64 infrastructure and vice versa + - name: Set up QEMU + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + uses: docker/setup-qemu-action@v3 + + # Login to DockerHub for pushing images + # Requires DOCKERHUB_USER and DOCKERHUB_TOKEN secrets to be set + - name: Login to Docker Hub + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Setup Docker Buildx for efficient builds + # Enable debug mode for better troubleshooting + - name: Set up Docker Buildx + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + uses: docker/setup-buildx-action@v3 + with: + buildkitd-flags: --debug + + # Build and test images for each architecture + # This ensures both AMD64 and ARM64 variants work correctly + - name: Build and test images + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + run: | + # Build for each platform + for arch in amd64 arm64; do + # Build the image for testing + docker buildx build \ + --platform linux/$arch \ + --load \ + -t apache/incubator-cloudberry:cbdb-build-${{ matrix.platform }}-$arch-test \ + ./devops/deploy/docker/build/${{ matrix.platform }} + + # Run tests in a container + docker run -d \ + -h cdw \ + --name cbdb-build-${{ matrix.platform }}-$arch-test \ + apache/incubator-cloudberry:cbdb-build-${{ matrix.platform }}-$arch-test \ + bash -c "sleep 30" + + # Execute TestInfra tests + docker exec cbdb-build-${{ matrix.platform }}-$arch-test pytest \ + --cache-clear \ + --disable-warnings \ + -p no:warnings \ + /tests/testinfra/test_cloudberry_db_env.py + + # Cleanup test container + docker rm -f cbdb-build-${{ matrix.platform }}-$arch-test + done + + # Build and push multi-architecture images + # This creates a manifest list that supports both architectures + - name: Build and Push Multi-arch Docker images + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + uses: docker/build-push-action@v6 + with: + context: ./devops/deploy/docker/build/${{ matrix.platform }} + push: true + platforms: linux/amd64,linux/arm64 + # Tag with both latest and version-specific tags + tags: | + apache/incubator-cloudberry:cbdb-build-${{ matrix.platform }}-latest + apache/incubator-cloudberry:cbdb-build-${{ matrix.platform }}-${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }} + # Add standard Open Container Initiative (OCI) labels + labels: | + org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.created=${{ steps.version.outputs.BUILD_DATE }} + org.opencontainers.image.version=${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }} + + # Generate a detailed build summary in GitHub Actions UI + # This provides quick access to build information and image usage instructions + - name: Build Summary + if: always() + run: | + echo "### Build Summary for ${{ matrix.platform }} πŸš€" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "#### πŸ” Build Information" >> $GITHUB_STEP_SUMMARY + echo "- **Build Status**: ${{ job.status }}" >> $GITHUB_STEP_SUMMARY + echo "- **Platform**: ${{ matrix.platform }}" >> $GITHUB_STEP_SUMMARY + echo "- **Architectures**: amd64, arm64" >> $GITHUB_STEP_SUMMARY + echo "- **Commit SHA**: [\`${{ github.sha }}\`](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})" >> $GITHUB_STEP_SUMMARY + echo "- **Build Date**: ${{ steps.version.outputs.BUILD_DATE }}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "#### 🐳 Docker Images" >> $GITHUB_STEP_SUMMARY + echo "- Latest tag: \`apache/incubator-cloudberry:cbdb-build-${{ matrix.platform }}-latest\`" >> $GITHUB_STEP_SUMMARY + echo "- Version tag: \`apache/incubator-cloudberry:cbdb-build-${{ matrix.platform }}-${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }}\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "#### πŸ“‹ Quick Reference" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY + echo "# Pull the image (automatically selects correct architecture)" >> $GITHUB_STEP_SUMMARY + echo "docker pull apache/incubator-cloudberry:cbdb-build-${{ matrix.platform }}-latest" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "# Pull specific architecture if needed" >> $GITHUB_STEP_SUMMARY + echo "docker pull --platform linux/amd64 apache/incubator-cloudberry:cbdb-build-${{ matrix.platform }}-latest" >> $GITHUB_STEP_SUMMARY + echo "docker pull --platform linux/arm64 apache/incubator-cloudberry:cbdb-build-${{ matrix.platform }}-latest" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/docker-cbdb-test-containers.yml b/.github/workflows/docker-cbdb-test-containers.yml new file mode 100644 index 00000000000..87fcf245edc --- /dev/null +++ b/.github/workflows/docker-cbdb-test-containers.yml @@ -0,0 +1,182 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Purpose: Builds, tests and pushes multi-architecture Docker images for +# Apache Cloudberry DB test environments. Images are built for both AMD64 +# and ARM64 architectures on Rocky Linux 8 and 9. +# +# Images are tagged with: +# - cbdb-test-rocky8-latest +# - cbdb-test-rocky8-{YYYYMMDD}-{git-short-sha} +# - cbdb-test-rocky9-latest +# - cbdb-test-rocky9-{YYYYMMDD}-{git-short-sha} +# +# Features: +# - Multi-architecture support (AMD64 and ARM64) +# - Matrix build for multiple platforms +# - QEMU emulation for cross-platform builds +# - Buildx for efficient multi-arch builds +# - Path filtering to only build changed platforms +# - Comprehensive build summary and metadata +# +# -------------------------------------------------------------------- + +name: docker-cbdb-test-containers + +# Trigger on pushes to docker-images branch when relevant paths change +# Also allows manual triggering via GitHub UI +on: + push: + branches: + - main + paths: + - 'devops/deploy/docker/test/rocky8/**' + - 'devops/deploy/docker/test/rocky9/**' + workflow_dispatch: # Manual trigger + +# Prevent multiple workflow runs from interfering with each other +concurrency: + group: docker-test-${{ github.ref }} + cancel-in-progress: true + +jobs: + build-and-push: + timeout-minutes: 60 # Prevent hanging builds + runs-on: ubuntu-latest + strategy: + matrix: + # Build for both Rocky Linux 8 and 9 + platform: ['rocky8', 'rocky9'] + + steps: + # Checkout repository code + - name: Checkout code + uses: actions/checkout@v4 + + # Generate version information for image tags + - name: Set version + id: version + run: | + echo "BUILD_DATE=$(date -u +'%Y%m%d')" >> $GITHUB_OUTPUT + echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + # Determine if the current platform's files have changed + - name: Determine if platform changed + id: platform-filter + uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 + with: + filters: | + rocky8: + - 'devops/deploy/docker/test/rocky8/**' + rocky9: + - 'devops/deploy/docker/test/rocky9/**' + + # Skip if no changes for current platform + - name: Skip if not relevant + if: ${{ steps.platform-filter.outputs[matrix.platform] != 'true' }} + run: echo "Skipping because the changes do not affect this platform" + + # Set up QEMU for multi-architecture support + # This allows building ARM64 images on AMD64 infrastructure and vice versa + - name: Set up QEMU + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + uses: docker/setup-qemu-action@v3 + + # Login to DockerHub for pushing images + - name: Login to Docker Hub + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Setup Docker Buildx for efficient multi-architecture builds + - name: Set up Docker Buildx + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + uses: docker/setup-buildx-action@v3 + with: + buildkitd-flags: --debug + + # Build and test images for each architecture + # This ensures both AMD64 and ARM64 variants work correctly + - name: Build and test images + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + run: | + # Build for each platform + for arch in amd64 arm64; do + echo "Building for $arch architecture..." + docker buildx build \ + --platform linux/$arch \ + --load \ + -t apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-$arch-test \ + ./devops/deploy/docker/test/${{ matrix.platform }} + done + + # Build and push multi-architecture images + # Creates a manifest list that supports both architectures + - name: Build and Push Multi-arch Docker images + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + uses: docker/build-push-action@v6 + with: + context: ./devops/deploy/docker/test/${{ matrix.platform }} + push: true + platforms: linux/amd64,linux/arm64 + # Use caching for faster builds + cache-from: | + type=registry,ref=apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest + type=gha,scope=docker-cbdb-test-${{ matrix.platform }} + # Tag with both latest and version-specific tags + tags: | + apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest + apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }} + # Add metadata labels for better image tracking + labels: | + org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.created=${{ steps.version.outputs.BUILD_DATE }} + org.opencontainers.image.version=${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }} + + # Generate a detailed build summary in GitHub Actions UI + # This provides quick access to build information and image usage instructions + - name: Build Summary + if: always() + run: | + echo "### Build Summary for ${{ matrix.platform }} πŸš€" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "#### πŸ” Build Information" >> $GITHUB_STEP_SUMMARY + echo "- **Build Status**: ${{ job.status }}" >> $GITHUB_STEP_SUMMARY + echo "- **Platform**: ${{ matrix.platform }}" >> $GITHUB_STEP_SUMMARY + echo "- **Architectures**: AMD64, ARM64" >> $GITHUB_STEP_SUMMARY + echo "- **Commit SHA**: [\`${{ github.sha }}\`](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})" >> $GITHUB_STEP_SUMMARY + echo "- **Build Date**: ${{ steps.version.outputs.BUILD_DATE }}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "#### 🐳 Docker Images" >> $GITHUB_STEP_SUMMARY + echo "- Latest tag: \`apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest\`" >> $GITHUB_STEP_SUMMARY + echo "- Version tag: \`apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-${{ steps.version.outputs.BUILD_DATE }}-${{ steps.version.outputs.SHA_SHORT }}\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "#### πŸ“‹ Quick Reference" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY + echo "# Pull the image (automatically selects correct architecture)" >> $GITHUB_STEP_SUMMARY + echo "docker pull apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "# Pull specific architecture if needed" >> $GITHUB_STEP_SUMMARY + echo "docker pull --platform linux/amd64 apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest" >> $GITHUB_STEP_SUMMARY + echo "docker pull --platform linux/arm64 apache/incubator-cloudberry:cbdb-test-${{ matrix.platform }}-latest" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY diff --git a/cloudberry-devops-release/CONTRIBUTING.md b/cloudberry-devops-release/CONTRIBUTING.md deleted file mode 100644 index b00691f9b74..00000000000 --- a/cloudberry-devops-release/CONTRIBUTING.md +++ /dev/null @@ -1,66 +0,0 @@ -Apache Cloudberry welcomes contributions from anyone, new and -experienced! We appreciate your interest in contributing. This guide -will help you get started with the contribution. - -## Code of Conduct - -Everyone who participates in Cloudberry, either as a user or a -contributor, is obliged to follow the ASF Code of Conduct. - -## GitHub Contribution Workflow - -1. Fork this repo to your own GitHub account. -2. Clone down the repo to your local system. - -``` -git clone https://github.com/your-user-name/cloudberry-devops-release.git -``` - -3. Add the upstream repo. (You only have to do this once, not every time.) - -``` -git remote add upstream https://github.com/apache/cloudberry-devops-release.git -``` - -4. Create a new branch to hold your work. - -``` -git checkout -b new-branch-name -``` - -5. Work on your new code. - -6. Commit your changes. - -``` -git add -git commit -``` - -7. Push your changes to your GitHub repo. - -``` -git push origin new-branch-name -``` - -8. Open a PR(Pull Request). - -Go to the repo on GitHub. There will be a message about your recently pushed -branch, asking if you would like to open a pull request. Follow the prompts, -compare across repositories, and submit the PR. - -9. Get your code reviewed. - -10. Congratulations! Once your PR is approved, then the code will be -merged. Your code will be shipped in the recent future releases. - -## Sync your branch with the upstream - -Before working on your next contribution, make sure your local repository is -up to date: - -``` -git checkout main -git fetch upstream -git rebase upstream/main -``` diff --git a/cloudberry-devops-release/LICENSE b/cloudberry-devops-release/LICENSE deleted file mode 100644 index d6456956733..00000000000 --- a/cloudberry-devops-release/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/cloudberry-devops-release/README.md b/cloudberry-devops-release/README.md deleted file mode 100644 index 9602438c9dd..00000000000 --- a/cloudberry-devops-release/README.md +++ /dev/null @@ -1 +0,0 @@ -# DevOps and Release for Apache Cloudberry (Incubating) diff --git a/devops/README.md b/devops/README.md new file mode 100644 index 00000000000..14c3468542c --- /dev/null +++ b/devops/README.md @@ -0,0 +1,88 @@ + + +# Auto-Build Cloudberry Database from Source Code + +You can build Cloudberry Database from source code in two ways: manually or automatically. + +For the manual build, you need to manually set up many system configurations and download third-party dependencies, which is quite cumbersome and error-prone. + +To make the job easier, it is recommended that you use the automated deployment method and scripts provided here. The automation method simplifies the deployment process, reduces time costs, and allows developers to focus more on business code development. + +## 1. Setup docker environment + +Nothing special, just follow the [official documentation](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) + +## 2. Create docker build image + +Go to the supported OS directory, for example Rocky Linux 9 + +`cd devops/deploy/docker/build/rocky8/` + +And build image + +`docker build -t cloudberry-db-env . ` + +The whole process usually takes about 5 minutes. You can use the created base image as many times as you want, just launch a new container for your specific task. + +## 3. Launch container + +Just run + +`docker run -h cdw -it cloudberry-db-env` + +## 4. Checkout git repo inside container + +The same way you did it on your laptop + +`docker exec bash -c "cd /home/gpadmin && git clone --recurse-submodules https://github.com/apache/cloudberry.git"` + +## 5. Set envoronment and configure build container + +Create direcory for store logs + +`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "mkdir ${SRC_DIR}/build-logs"` + +Execute configure and check if system is ready for build + +`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ./devops/build/automation/cloudberry/scripts/configure-cloudberry.sh"` + +## 6. Build binary + +The building consumes all available CPU resources and can take minutes to complete + +`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ./devops/build/automation/cloudberry/scripts/build-cloudberry.sh"` + +## 7. Install binary and create demo cluster + +By default `make install` copy compiled binary to `/usr/local/cloudberry-db` + +`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} make install"` + +To create demo cluster just launch `create-cloudberry-demo-cluster.sh` + +`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ./devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh"` + +## 8. Execute test query + +Now you could set environment and execute queries + +`docker exec 7197206b0645 bash -c "source /usr/local/cloudberry-db/cloudberry-env.sh && source /home/gpadmin/cloudberry/gpAux/gpdemo/gpdemo-env.sh && psql -U gpadmin -d postgres -c 'SELECT 42'"` + +All done! diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/analyze_core_dumps.sh b/devops/build/automation/cloudberry/scripts/analyze_core_dumps.sh similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/analyze_core_dumps.sh rename to devops/build/automation/cloudberry/scripts/analyze_core_dumps.sh diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh b/devops/build/automation/cloudberry/scripts/build-cloudberry.sh similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/build-cloudberry.sh rename to devops/build/automation/cloudberry/scripts/build-cloudberry.sh diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/cloudberry-utils.sh b/devops/build/automation/cloudberry/scripts/cloudberry-utils.sh similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/cloudberry-utils.sh rename to devops/build/automation/cloudberry/scripts/cloudberry-utils.sh diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh b/devops/build/automation/cloudberry/scripts/configure-cloudberry.sh similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/configure-cloudberry.sh rename to devops/build/automation/cloudberry/scripts/configure-cloudberry.sh diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh b/devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh rename to devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/destroy-cloudberry-demo-cluster.sh b/devops/build/automation/cloudberry/scripts/destroy-cloudberry-demo-cluster.sh similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/destroy-cloudberry-demo-cluster.sh rename to devops/build/automation/cloudberry/scripts/destroy-cloudberry-demo-cluster.sh diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/parse-results.pl b/devops/build/automation/cloudberry/scripts/parse-results.pl similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/parse-results.pl rename to devops/build/automation/cloudberry/scripts/parse-results.pl diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh b/devops/build/automation/cloudberry/scripts/parse-test-results.sh similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/parse-test-results.sh rename to devops/build/automation/cloudberry/scripts/parse-test-results.sh diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh b/devops/build/automation/cloudberry/scripts/test-cloudberry.sh similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/test-cloudberry.sh rename to devops/build/automation/cloudberry/scripts/test-cloudberry.sh diff --git a/cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh b/devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh similarity index 100% rename from cloudberry-devops-release/build_automation/cloudberry/scripts/unittest-cloudberry.sh rename to devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh diff --git a/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec b/devops/build/packaging/rpm/apache-cloudberry-db-incubating.spec similarity index 84% rename from cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec rename to devops/build/packaging/rpm/apache-cloudberry-db-incubating.spec index 41152a1e277..f7ca334a69e 100644 --- a/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-db-incubating.spec +++ b/devops/build/packaging/rpm/apache-cloudberry-db-incubating.spec @@ -1,3 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + %define cloudberry_install_dir /usr/local/cloudberry-db # Add at the top of the spec file diff --git a/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-hll-incubating.spec b/devops/build/packaging/rpm/apache-cloudberry-hll-incubating.spec similarity index 70% rename from cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-hll-incubating.spec rename to devops/build/packaging/rpm/apache-cloudberry-hll-incubating.spec index 0566d0aa507..d13c0a7b77a 100644 --- a/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-hll-incubating.spec +++ b/devops/build/packaging/rpm/apache-cloudberry-hll-incubating.spec @@ -1,3 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + %global cloudberry_version %{?_cloudberry_version}%{!?_cloudberry_version:1.6} %global cloudberry_install_dir /usr/local/cloudberry-db diff --git a/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-pgvector-incubating.spec b/devops/build/packaging/rpm/apache-cloudberry-pgvector-incubating.spec similarity index 74% rename from cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-pgvector-incubating.spec rename to devops/build/packaging/rpm/apache-cloudberry-pgvector-incubating.spec index 88be062cfad..6b0cbd517e1 100644 --- a/cloudberry-devops-release/packaging/rpm/el/SPECS/apache-cloudberry-pgvector-incubating.spec +++ b/devops/build/packaging/rpm/apache-cloudberry-pgvector-incubating.spec @@ -1,3 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + %global cloudberry_version %{?_cloudberry_version}%{!?_cloudberry_version:1.6} %global cloudberry_install_dir /usr/local/cloudberry-db %global pgvector_version %{?_pgvector_version}%{!?_pgvector_version:0.5.1} diff --git a/cloudberry-devops-release/scripts/build-rpm.sh b/devops/build/packaging/rpm/build-rpm.sh similarity index 83% rename from cloudberry-devops-release/scripts/build-rpm.sh rename to devops/build/packaging/rpm/build-rpm.sh index 3f070da3208..ceb7d18d392 100755 --- a/cloudberry-devops-release/scripts/build-rpm.sh +++ b/devops/build/packaging/rpm/build-rpm.sh @@ -1,4 +1,20 @@ #!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. # # Script Name: build-rpm.sh # diff --git a/cloudberry-devops-release/packaging/rpm/repo-el/SPECS/cloudberry-dev-repo.spec b/devops/build/packaging/rpm/cloudberry-dev-repo.spec similarity index 61% rename from cloudberry-devops-release/packaging/rpm/repo-el/SPECS/cloudberry-dev-repo.spec rename to devops/build/packaging/rpm/cloudberry-dev-repo.spec index 63a096530e1..d2a06defda7 100644 --- a/cloudberry-devops-release/packaging/rpm/repo-el/SPECS/cloudberry-dev-repo.spec +++ b/devops/build/packaging/rpm/cloudberry-dev-repo.spec @@ -1,3 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + Name: cloudberry-dev-repo Version: 1.0 Release: 1%{?dist} diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/Dockerfile b/devops/deploy/docker/build/rocky8/Dockerfile similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky8/Dockerfile rename to devops/deploy/docker/build/rocky8/Dockerfile diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/90-cbdb-limits b/devops/deploy/docker/build/rocky8/configs/90-cbdb-limits similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/90-cbdb-limits rename to devops/deploy/docker/build/rocky8/configs/90-cbdb-limits diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/gpinitsystem.conf b/devops/deploy/docker/build/rocky8/configs/gpinitsystem.conf similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/gpinitsystem.conf rename to devops/deploy/docker/build/rocky8/configs/gpinitsystem.conf diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/init_system.sh b/devops/deploy/docker/build/rocky8/configs/init_system.sh similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky8/configs/init_system.sh rename to devops/deploy/docker/build/rocky8/configs/init_system.sh diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/requirements.txt b/devops/deploy/docker/build/rocky8/tests/requirements.txt similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/requirements.txt rename to devops/deploy/docker/build/rocky8/tests/requirements.txt diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/testinfra/test_cloudberry_db_env.py b/devops/deploy/docker/build/rocky8/tests/testinfra/test_cloudberry_db_env.py similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky8/tests/testinfra/test_cloudberry_db_env.py rename to devops/deploy/docker/build/rocky8/tests/testinfra/test_cloudberry_db_env.py diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/Dockerfile b/devops/deploy/docker/build/rocky9/Dockerfile similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky9/Dockerfile rename to devops/deploy/docker/build/rocky9/Dockerfile diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/90-cbdb-limits b/devops/deploy/docker/build/rocky9/configs/90-cbdb-limits similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/90-cbdb-limits rename to devops/deploy/docker/build/rocky9/configs/90-cbdb-limits diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/gpinitsystem.conf b/devops/deploy/docker/build/rocky9/configs/gpinitsystem.conf similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/gpinitsystem.conf rename to devops/deploy/docker/build/rocky9/configs/gpinitsystem.conf diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/init_system.sh b/devops/deploy/docker/build/rocky9/configs/init_system.sh similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky9/configs/init_system.sh rename to devops/deploy/docker/build/rocky9/configs/init_system.sh diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/requirements.txt b/devops/deploy/docker/build/rocky9/tests/requirements.txt similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/requirements.txt rename to devops/deploy/docker/build/rocky9/tests/requirements.txt diff --git a/cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/testinfra/test_cloudberry_db_env.py b/devops/deploy/docker/build/rocky9/tests/testinfra/test_cloudberry_db_env.py similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/build/rocky9/tests/testinfra/test_cloudberry_db_env.py rename to devops/deploy/docker/build/rocky9/tests/testinfra/test_cloudberry_db_env.py diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky8/Dockerfile b/devops/deploy/docker/test/rocky8/Dockerfile similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/test/rocky8/Dockerfile rename to devops/deploy/docker/test/rocky8/Dockerfile diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/90-cbdb-limits b/devops/deploy/docker/test/rocky8/configs/90-cbdb-limits similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/90-cbdb-limits rename to devops/deploy/docker/test/rocky8/configs/90-cbdb-limits diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/gpinitsystem.conf b/devops/deploy/docker/test/rocky8/configs/gpinitsystem.conf similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/gpinitsystem.conf rename to devops/deploy/docker/test/rocky8/configs/gpinitsystem.conf diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/init_system.sh b/devops/deploy/docker/test/rocky8/configs/init_system.sh similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/test/rocky8/configs/init_system.sh rename to devops/deploy/docker/test/rocky8/configs/init_system.sh diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky9/Dockerfile b/devops/deploy/docker/test/rocky9/Dockerfile similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/test/rocky9/Dockerfile rename to devops/deploy/docker/test/rocky9/Dockerfile diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/90-cbdb-limits b/devops/deploy/docker/test/rocky9/configs/90-cbdb-limits similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/90-cbdb-limits rename to devops/deploy/docker/test/rocky9/configs/90-cbdb-limits diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/gpinitsystem.conf b/devops/deploy/docker/test/rocky9/configs/gpinitsystem.conf similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/gpinitsystem.conf rename to devops/deploy/docker/test/rocky9/configs/gpinitsystem.conf diff --git a/cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/init_system.sh b/devops/deploy/docker/test/rocky9/configs/init_system.sh similarity index 100% rename from cloudberry-devops-release/images/docker/cbdb/test/rocky9/configs/init_system.sh rename to devops/deploy/docker/test/rocky9/configs/init_system.sh diff --git a/cloudberry-devops-release/scripts/release/cloudberry-release.sh b/devops/release/cloudberry-release.sh similarity index 100% rename from cloudberry-devops-release/scripts/release/cloudberry-release.sh rename to devops/release/cloudberry-release.sh diff --git a/cloudberry-devops-release/scripts/elf_rockylinux_dependency_analyzer.py b/devops/tools/elf_rockylinux_dependency_analyzer.py similarity index 94% rename from cloudberry-devops-release/scripts/elf_rockylinux_dependency_analyzer.py rename to devops/tools/elf_rockylinux_dependency_analyzer.py index 09514c6d598..593dd169aa6 100755 --- a/cloudberry-devops-release/scripts/elf_rockylinux_dependency_analyzer.py +++ b/devops/tools/elf_rockylinux_dependency_analyzer.py @@ -1,4 +1,20 @@ #!/usr/bin/env python3 +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. """ ELF Dependency Analyzer diff --git a/cloudberry-devops-release/scripts/elf_ubuntu_dependency_analyzer.py b/devops/tools/elf_ubuntu_dependency_analyzer.py similarity index 93% rename from cloudberry-devops-release/scripts/elf_ubuntu_dependency_analyzer.py rename to devops/tools/elf_ubuntu_dependency_analyzer.py index b81e3344423..a1741f7f888 100755 --- a/cloudberry-devops-release/scripts/elf_ubuntu_dependency_analyzer.py +++ b/devops/tools/elf_ubuntu_dependency_analyzer.py @@ -1,4 +1,20 @@ #!/usr/bin/env python3 +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. """ ELF Dependency Analyzer for Ubuntu diff --git a/cloudberry-devops-release/scripts/s3-repo-sync-and-sign.sh b/devops/tools/s3-repo-sync-and-sign.sh similarity index 92% rename from cloudberry-devops-release/scripts/s3-repo-sync-and-sign.sh rename to devops/tools/s3-repo-sync-and-sign.sh index c04e71881fc..1cd037749c6 100755 --- a/cloudberry-devops-release/scripts/s3-repo-sync-and-sign.sh +++ b/devops/tools/s3-repo-sync-and-sign.sh @@ -1,4 +1,20 @@ #!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. set -euo pipefail diff --git a/pom.xml b/pom.xml index 788c4ea0c9f..e8661421cc2 100644 --- a/pom.xml +++ b/pom.xml @@ -1241,6 +1241,11 @@ code or new licensing patterns. aclocal.m4 python-dependencies.txt + + + devops/deploy/docker/build/rocky8/tests/requirements.txt + devops/deploy/docker/build/rocky9/tests/requirements.txt - -> [!WARNING] -> The files are still in progress and will be revised in the following months. diff --git a/devops/README.md b/devops/README.md index 14c3468542c..df440a2cc39 100644 --- a/devops/README.md +++ b/devops/README.md @@ -17,72 +17,92 @@ under the License. --> -# Auto-Build Cloudberry Database from Source Code +# Auto-Build Apache Cloudberry from Source Code -You can build Cloudberry Database from source code in two ways: manually or automatically. +You can build Apache Cloudberry from source code in two ways: manually or automatically. For the manual build, you need to manually set up many system configurations and download third-party dependencies, which is quite cumbersome and error-prone. To make the job easier, it is recommended that you use the automated deployment method and scripts provided here. The automation method simplifies the deployment process, reduces time costs, and allows developers to focus more on business code development. -## 1. Setup docker environment +## 1. Setup Docker environment -Nothing special, just follow the [official documentation](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) +Nothing special, just follow the [official documentation](https://docs.docker.com/engine/install/) to install Docker on your machine based on your OS. -## 2. Create docker build image +## 2. Create Docker build image -Go to the supported OS directory, for example Rocky Linux 9 +Go to the supported OS directory, for example Rocky Linux 8: -`cd devops/deploy/docker/build/rocky8/` +```bash +cd devops/deploy/docker/build/rocky8/ +``` -And build image +And build image: -`docker build -t cloudberry-db-env . ` +```bash +docker build -t apache-cloudberry-env . +``` The whole process usually takes about 5 minutes. You can use the created base image as many times as you want, just launch a new container for your specific task. ## 3. Launch container -Just run +Launch the container in detached mode with a long-running process: -`docker run -h cdw -it cloudberry-db-env` +```bash +docker run -h cdw -d --name cloudberry-build apache-cloudberry-env bash -c "/tmp/init_system.sh && tail -f /dev/null" +``` + +> [!NOTE] +> The container will be named `cloudberry-build` and run in the background for easy reference in subsequent commands. +> If you need to: +> - access the container interactively, use `docker exec -it cloudberry-build bash` +> - check if the container is running, use `docker ps` ## 4. Checkout git repo inside container The same way you did it on your laptop -`docker exec bash -c "cd /home/gpadmin && git clone --recurse-submodules https://github.com/apache/cloudberry.git"` +```bash +docker exec cloudberry-build bash -c "cd /home/gpadmin && git clone --recurse-submodules --branch main --depth 1 https://github.com/apache/cloudberry.git" +``` -## 5. Set envoronment and configure build container +## 5. Set environment and configure build container -Create direcory for store logs +Create direcory for store logs: -`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "mkdir ${SRC_DIR}/build-logs"` +```bash +SRC_DIR=/home/gpadmin/cloudberry && docker exec cloudberry-build bash -c "mkdir ${SRC_DIR}/build-logs" +``` -Execute configure and check if system is ready for build +Execute configure and check if system is ready for build: -`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ./devops/build/automation/cloudberry/scripts/configure-cloudberry.sh"` +```bash +SRC_DIR=/home/gpadmin/cloudberry && docker exec cloudberry-build bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ./devops/build/automation/cloudberry/scripts/configure-cloudberry.sh" +``` -## 6. Build binary +## 6. Build and install binary -The building consumes all available CPU resources and can take minutes to complete +The building consumes all available CPU resources and can take minutes to complete: -`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ./devops/build/automation/cloudberry/scripts/build-cloudberry.sh"` +```bash +SRC_DIR=/home/gpadmin/cloudberry && docker exec cloudberry-build bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ./devops/build/automation/cloudberry/scripts/build-cloudberry.sh" +``` ## 7. Install binary and create demo cluster -By default `make install` copy compiled binary to `/usr/local/cloudberry-db` - -`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} make install"` - -To create demo cluster just launch `create-cloudberry-demo-cluster.sh` +The build script above has already installed the binaries to `/usr/local/cloudberry-db` inside the container. Now create the demo cluster just launch `create-cloudberry-demo-cluster.sh` -`SRC_DIR=/home/gpadmin/cloudberry && docker exec bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ./devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh"` +```bash +SRC_DIR=/home/gpadmin/cloudberry && docker exec cloudberry-build bash -c "cd ${SRC_DIR} && SRC_DIR=${SRC_DIR} ./devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh" +``` ## 8. Execute test query -Now you could set environment and execute queries +Now you could set environment and execute queries: -`docker exec 7197206b0645 bash -c "source /usr/local/cloudberry-db/cloudberry-env.sh && source /home/gpadmin/cloudberry/gpAux/gpdemo/gpdemo-env.sh && psql -U gpadmin -d postgres -c 'SELECT 42'"` +```bash +docker exec cloudberry-build bash -c "source /usr/local/cloudberry-db/cloudberry-env.sh && source /home/gpadmin/cloudberry/gpAux/gpdemo/gpdemo-env.sh && psql -U gpadmin -d postgres -c 'SELECT 42'" +``` All done! diff --git a/devops/build/packaging/rpm/apache-cloudberry-db-incubating.spec b/devops/build/packaging/rpm/apache-cloudberry-db-incubating.spec index f7ca334a69e..03fa0a34570 100644 --- a/devops/build/packaging/rpm/apache-cloudberry-db-incubating.spec +++ b/devops/build/packaging/rpm/apache-cloudberry-db-incubating.spec @@ -39,7 +39,7 @@ Summary: High-performance, open-source data warehouse based on PostgreSQL License: ASL 2.0 URL: https://cloudberry.apache.org -Vendor: Apache Cloudberry (incubating) +Vendor: Apache Cloudberry (Incubating) Group: Applications/Databases Prefix: %{cloudberry_install_dir} @@ -107,7 +107,7 @@ Requires: xz %description -Apache Cloudberry (incubating) is an advanced, open-source, massively +Apache Cloudberry (Incubating) is an advanced, open-source, massively parallel processing (MPP) data warehouse developed from PostgreSQL and Greenplum. It is designed for high-performance analytics on large-scale data sets, offering powerful analytical capabilities and @@ -125,7 +125,7 @@ Apache Cloudberry supports both batch processing and real-time data warehousing, making it a versatile solution for modern data environments. -Apache Cloudberry (incubating) is an effort undergoing incubation at +Apache Cloudberry (Incubating) is an effort undergoing incubation at the Apache Software Foundation (ASF), sponsored by the Apache Incubator PMC. diff --git a/devops/build/packaging/rpm/apache-cloudberry-hll-incubating.spec b/devops/build/packaging/rpm/apache-cloudberry-hll-incubating.spec index d13c0a7b77a..4d2d6126f74 100644 --- a/devops/build/packaging/rpm/apache-cloudberry-hll-incubating.spec +++ b/devops/build/packaging/rpm/apache-cloudberry-hll-incubating.spec @@ -21,10 +21,10 @@ Name: apache-cloudberry-hll-incubating Version: 2.18.0 Release: %{?release}%{!?release:1} -Summary: HyperLogLog extension for Cloudberry Database %{cloudberry_version} +Summary: HyperLogLog extension for Apache Cloudberry %{cloudberry_version} License: ASL 2.0 URL: https://github.com/citusdata/postgresql-hll -Vendor: Apache Cloudberry (incubating) +Vendor: Apache Cloudberry (Incubating) Group: Applications/Databases BuildArch: x86_64 Requires: apache-cloudberry-db-incubating >= %{cloudberry_version} @@ -32,7 +32,7 @@ Prefix: %{cloudberry_install_dir} %description HLL is an open-source PostgreSQL extension (compatible with Apache -Cloudberry (incubating) %{cloudberry_version}) adding HyperLogLog data +Cloudberry (Incubating) %{cloudberry_version}) adding HyperLogLog data structures as a native data type. HyperLogLog is a fixed-size, set-like structure used for distinct value counting with tunable precision. @@ -59,10 +59,10 @@ cp -R %{cloudberry_install_dir}/share/postgresql/extension/hll* \ %{prefix}/share/postgresql/extension/hll.control %post -echo "HLL extension for Cloudberry Database %{cloudberry_version} has been installed in %{prefix}." +echo "HLL extension for Apache Cloudberry %{cloudberry_version} has been installed in %{prefix}." echo "To enable it in a database, run:" echo " CREATE EXTENSION hll;" %postun -echo "HLL extension for Cloudberry Database %{cloudberry_version} has been removed from %{prefix}." +echo "HLL extension for Apache Cloudberry %{cloudberry_version} has been removed from %{prefix}." echo "You may need to manually clean up any database objects that were using the extension." diff --git a/devops/build/packaging/rpm/apache-cloudberry-pgvector-incubating.spec b/devops/build/packaging/rpm/apache-cloudberry-pgvector-incubating.spec index 6b0cbd517e1..0be44308e07 100644 --- a/devops/build/packaging/rpm/apache-cloudberry-pgvector-incubating.spec +++ b/devops/build/packaging/rpm/apache-cloudberry-pgvector-incubating.spec @@ -22,7 +22,7 @@ Name: cloudberry-pgvector Version: %{pgvector_version} Release: %{?release}%{!?release:1} -Summary: pgvector extension for Cloudberry Database %{cloudberry_version} +Summary: pgvector extension for Apache Cloudberry %{cloudberry_version} License: PostgreSQL URL: https://github.com/pgvector/pgvector Vendor: Cloudberry Open Source @@ -33,7 +33,7 @@ Prefix: %{cloudberry_install_dir} %description pgvector is an open-source vector similarity search extension for -PostgreSQL and Cloudberry Database %{cloudberry_version}. It provides +PostgreSQL and Apache Cloudberry %{cloudberry_version}. It provides vector data types and vector similarity search functions, allowing for efficient similarity search operations on high-dimensional data. @@ -61,10 +61,10 @@ cp -R %{cloudberry_install_dir}/share/postgresql/extension/vector* \ %{prefix}/share/postgresql/extension/vector.control %post -echo "pgvector extension version %{version} for Cloudberry Database %{cloudberry_version} has been installed in %{prefix}." +echo "pgvector extension version %{version} for Apache Cloudberry %{cloudberry_version} has been installed in %{prefix}." echo "To enable it in a database, run:" echo " CREATE EXTENSION vector;" %postun -echo "pgvector extension version %{version} for Cloudberry Database %{cloudberry_version} has been removed from %{prefix}." +echo "pgvector extension version %{version} for Apache Cloudberry %{cloudberry_version} has been removed from %{prefix}." echo "You may need to manually clean up any database objects that were using the extension." diff --git a/devops/build/packaging/rpm/cloudberry-dev-repo.spec b/devops/build/packaging/rpm/cloudberry-dev-repo.spec index d2a06defda7..45f6186cf3d 100644 --- a/devops/build/packaging/rpm/cloudberry-dev-repo.spec +++ b/devops/build/packaging/rpm/cloudberry-dev-repo.spec @@ -18,26 +18,26 @@ Name: cloudberry-dev-repo Version: 1.0 Release: 1%{?dist} -Summary: Cloudberry Database Repository Configuration +Summary: Apache Cloudberry Repository Configuration License: ASL 2.0 Group: Applications/Databases -URL: https://cloudberrydb.org +URL: https://cloudberry.apache.org Vendor: Cloudberry Open Source BuildArch: noarch %description -This package configures the Cloudberry Database repository on your -system. Cloudberry Database is an open-source project aimed at +This package configures the Apache Cloudberry repository on your +system. Apache Cloudberry is an open-source project aimed at providing a scalable, high-performance SQL database for analytics. This repository provides access to the latest RPM packages -for Cloudberry Database, allowing you to easily install and stay +for Apache Cloudberry, allowing you to easily install and stay up-to-date with the latest developments. %install mkdir -p %{buildroot}%{_sysconfdir}/yum.repos.d/ cat > %{buildroot}%{_sysconfdir}/yum.repos.d/cloudberry-dev.repo <Makefile aclocal.m4 python-dependencies.txt - - - - devops/deploy/docker/build/rocky8/tests/requirements.txt - devops/deploy/docker/build/rocky9/tests/requirements.txt + + devops/deploy/docker/build/rocky8/tests/requirements.txt + devops/deploy/docker/build/rocky9/tests/requirements.txt + + +# Apache Cloudberry MCP Server + +A Model Communication Protocol (MCP) server for Apache Cloudberry database interaction, providing secure and efficient database management capabilities through AI-ready interfaces. + +## Features + +- **Database Metadata Resources**: Access schemas, tables, views, indexes, and column information +- **Safe Query Tools**: Execute parameterized SQL queries with security validation +- **Administrative Tools**: Table statistics, large table analysis, and query optimization +- **Context-Aware Prompts**: Predefined prompts for common database tasks +- **Security-First Design**: SQL injection prevention, read-only constraints, and connection pooling +- **Async Performance**: Built with asyncpg for high-performance database operations + +## Prerequisites + +- Python 3.8+ +- uv (for dependency management) + +## Installation + +### Install uv + +```bash +curl -sSfL https://astral.sh/uv/install.sh | sh +``` + +### Install Dependencies + +```bash +cd mcp-server +uv venv +source .venv/bin/activate +uv sync +``` + +### Install Project + +```bash +uv pip install -e . +``` + +### Build Project + +```bash +uv build +``` + +## Configuration + +Create a `.env` file in the project root: + +```env +# Database Configuration +DB_HOST=localhost +DB_PORT=5432 +DB_NAME=postgres +DB_USER=postgres +DB_PASSWORD=your_password + +# Server Configuration +MCP_HOST=localhost +MCP_PORT=8000 +MCP_DEBUG=false +``` + +## Usage + +### Running the Server + +```bash +# Run the MCP server +python -m cbmcp.server + +# Or run with cloudberry-mcp-server +cloudberry-mcp-server + +# Or run with custom configuration +MCP_HOST=0.0.0.0 MCP_PORT=8080 python -m cbmcp.server +``` + +### Testing the Client + +```bash +# Run the test client +python -m cbmcp.client +``` + +## API Reference + +### Resources + +- `postgres://schemas` - List all database schemas +- `postgres://database/info` - Get general database info +- `postgres://database/summary` - Get detailed database summary + +### Tools + +#### Query Tools +- `execute_query(query, params, readonly)` - Execute a SQL query +- `explain_query(query, params)` - Get query execution plan +- `get_table_stats(schema, table)` - Get table statistics +- `list_large_tables(limit)` - List largest tables + +#### User & Permission Management +- `list_users()` - List all database users +- `list_user_permissions(username)` - List permissions for a specific user +- `list_table_privileges(schema, table)` - List privileges for a specific table + +#### Schema & Structure +- `list_constraints(schema, table)` - List constraints for a table +- `list_foreign_keys(schema, table)` - List foreign keys for a table +- `list_referenced_tables(schema, table)` - List tables that reference this table +- `get_table_ddl(schema, table)` - Get DDL statement for a table + +#### Performance & Monitoring +- `get_slow_queries(limit)` - List slow queries +- `get_index_usage()` - Analyze index usage statistics +- `get_table_bloat_info()` - Analyze table bloat information +- `get_database_activity()` - Show current database activity +- `get_vacuum_info()` - Get vacuum and analyze statistics + +#### Database Objects +- `list_functions(schema)` - List functions in a schema +- `get_function_definition(schema, function)` - Get function definition +- `list_triggers(schema, table)` - List triggers for a table +- `list_materialized_views(schema)` - List materialized views in a schema +- `list_active_connections()` - List active database connections + +### Prompts + +- `analyze_query_performance` - Query optimization assistance +- `suggest_indexes` - Index recommendation guidance +- `database_health_check` - Database health assessment + +## Security Features + +- **SQL Injection Prevention**: Comprehensive query validation +- **Read-Only Constraints**: Configurable write protection +- **Parameterized Queries**: Safe parameter handling +- **Connection Pooling**: Secure connection management +- **Sensitive Table Protection**: Blocks access to system tables + + +## Quick Start with Cloudberry Demo Cluster + +This section shows how to quickly set up and test the Cloudberry MCP Server using a local Cloudberry demo cluster. This is ideal for development and testing purposes. + +Assume you already have a running [Cloudberry demo cluster](https://cloudberry.apache.org/docs/deployment/set-demo-cluster) and install & build MCP server as described above. + +1. Configure local connections in `pg_hba.conf` + +**Note**: This configuration is for demo purposes only. Do not use `trust` authentication in production environments. + +```bash +[gpadmin@cdw]$ vi ~/cloudberry/gpAux/gpdemo/datadirs/qddir/demoDataDir-1/pg_hba.conf +``` + +Add the following lines to the end of the pg_hba.conf: + +``` +# IPv4 local connections +host all all 127.0.0.1/32 trust +# IPv6 local connections +host all all ::1/128 trust +``` + +After modifying `pg_hba.conf`, reload the configuration parameters: +```bash +[gpadmin@cdw]$ gpstop -u +``` + +2. Create environment configuration + +Create a `.env` in the project root directory: + +``` +# Database Configuration (Demo cluster defaults) +DB_HOST=localhost +DB_PORT=7000 +DB_NAME=postgres +DB_USER=gpadmin +# No password required for demo cluster + +# Server Configuration +MCP_HOST=localhost +MCP_PORT=8000 +MCP_DEBUG=false +``` + +3. Start the MCP server + +```bash +MCP_HOST=0.0.0.0 MCP_PORT=8000 python -m cbmcp.server +``` + +You should see output indicating the server is running: +``` +[09/17/25 14:07:50] INFO Starting MCP server 'Apache Cloudberry MCP Server' with transport server.py:1572 + 'streamable-http' on http://0.0.0.0:8000/mcp/ +``` + +4. Configure your MCP client. + +Add the following server configuration to your MCP client: + +- Server Type: Streamable-HTTP +- URL: http://[YOUR_HOST_IP]:8000/mcp + +Replace `[YOUR_HOST_IP]` with your actual host IP address. + + +## LLM Client Integration + +### Claude Desktop Configuration + +Add the following configuration to your Claude Desktop configuration file: + +#### Stdio Transport (Recommended) + +```json +{ + "mcpServers": { + "cloudberry-mcp-server": { + "command": "uvx", + "args": [ + "--with", + "PATH/TO/cbmcp-0.1.0-py3-none-any.whl", + "python", + "-m", + "cbmcp.server", + "--mode", + "stdio" + ], + "env": { + "DB_HOST": "localhost", + "DB_PORT": "5432", + "DB_NAME": "dvdrental", + "DB_USER": "yangshengwen", + "DB_PASSWORD": "" + } + } + } +} +``` + +#### HTTP Transport + +```json +{ + "mcpServers": { + "cloudberry-mcp-server": { + "type": "streamable-http", + "url": "https://localhost:8000/mcp/", + "headers": { + "Authorization": "" + } + } + } +} +``` + +### Cursor Configuration + +For Cursor IDE, add the configuration to your `.cursor/mcp.json` file: + +```json +{ + "mcpServers": { + "cloudberry-mcp": { + "command": "uvx", + "args": ["--with", "cbmcp", "python", "-m", "cbmcp.server", "--mode", "stdio"], + "env": { + "DB_HOST": "localhost", + "DB_PORT": "5432", + "DB_NAME": "dvdrental", + "DB_USER": "postgres", + "DB_PASSWORD": "your_password" + } + } + } +} +``` + +### Windsurf Configuration + +For Windsurf IDE, configure in your settings: + +```json +{ + "mcp": { + "servers": { + "cloudberry-mcp": { + "type": "stdio", + "command": "uvx", + "args": ["--with", "cbmcp", "python", "-m", "cbmcp.server", "--mode", "stdio"], + "env": { + "DB_HOST": "localhost", + "DB_PORT": "5432", + "DB_NAME": "dvdrental", + "DB_USER": "postgres", + "DB_PASSWORD": "your_password" + } + } + } + } +} +``` + +### VS Code with Cline + +For VS Code with the Cline extension, add to your settings: + +```json +{ + "cline.mcpServers": { + "cloudberry-mcp": { + "command": "uvx", + "args": ["--with", "cbmcp", "python", "-m", "cbmcp.server", "--mode", "stdio"], + "env": { + "DB_HOST": "localhost", + "DB_PORT": "5432", + "DB_NAME": "dvdrental", + "DB_USER": "postgres", + "DB_PASSWORD": "your_password" + } + } + } +} +``` + +### Installation via pip + +If you prefer to install the package globally instead of using uvx: + +```bash +# Install the package +pip install cbmcp-0.1.0-py3-none-any.whl + +# Or using pip install from source +pip install -e . + +# Then use in configuration +{ + "command": "python", + "args": ["-m", "cbmcp.server", "--mode", "stdio"] +} +``` + +### Environment Variables + +All configurations support the following environment variables: + +- `DB_HOST`: Database host (default: localhost) +- `DB_PORT`: Database port (default: 5432) +- `DB_NAME`: Database name (default: postgres) +- `DB_USER`: Database username +- `DB_PASSWORD`: Database password +- `MCP_HOST`: Server host for HTTP mode (default: localhost) +- `MCP_PORT`: Server port for HTTP mode (default: 8000) +- `MCP_DEBUG`: Enable debug logging (default: false) + +### Troubleshooting + +#### Common Issues + +1. **Connection refused**: Ensure Apache Cloudberry is running and accessible +2. **Authentication failed**: Check database credentials in environment variables +3. **Module not found**: Ensure the package is installed correctly +4. **Permission denied**: Check file permissions for the package + +#### Debug Mode + +Enable debug logging by setting: +```bash +export MCP_DEBUG=true +``` + +## License + +Apache License 2.0 \ No newline at end of file diff --git a/mcp-server/dotenv.example b/mcp-server/dotenv.example new file mode 100644 index 00000000000..896cb33a539 --- /dev/null +++ b/mcp-server/dotenv.example @@ -0,0 +1,31 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# Example environment configuration +# Copy this file to .env and update with your actual values + +# Database Configuration +DB_HOST=localhost +DB_PORT=5432 +DB_NAME=postgres +DB_USER=postgres +DB_PASSWORD=your_password_here + +# Server Configuration +MCP_HOST=localhost +MCP_PORT=8000 +MCP_DEBUG=false diff --git a/mcp-server/pyproject.toml b/mcp-server/pyproject.toml new file mode 100644 index 00000000000..984cb5e12a1 --- /dev/null +++ b/mcp-server/pyproject.toml @@ -0,0 +1,70 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +[project] +name = "cloudberry-mcp-server" +version = "0.1.0" +description = "MCP server for Apache Cloudberry database interaction" +readme = "README.md" +requires-python = ">=3.10" +authors = [ + {name = "Shengwen Yang", email = "yangshengwen@gmail.com"}, +] +maintainers = [ + {name = "Shengwen Yang", email = "yangshengwen@gmail.com"}, +] +license = {text = "Apache License 2.0"} +keywords = ["mcp", "cloudberry", "postgresql", "database", "server", "ai"] +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License, Version 2.0", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Topic :: Database", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Database :: Front-Ends", +] +dependencies = [ + "fastmcp>=2.10.6", + "psycopg2-binary==2.9.10", + "asyncpg>=0.29.0", + "pydantic>=2.0.0", + "python-dotenv>=1.0.0", + "aiohttp>=3.12.15", + "starlette>=0.27.0", +] + +[project.optional-dependencies] +dev = [ + "pytest>=7.0.0", + "pytest-asyncio>=0.21.0", + "pytest-cov>=4.0.0", +] + +[project.urls] +Homepage = "https://github.com/apache/cloudberry//tree/main/mcp-server" +Repository = "https://github.com/apache/cloudberry" +Documentation = "https://github.com/apache/cloudberry/mcp-server/tree/main/mcp-server/README.md" + +[project.scripts] +cloudberry-mcp-server = "cbmcp.server:main" diff --git a/mcp-server/pytest.ini b/mcp-server/pytest.ini new file mode 100644 index 00000000000..519115d6a19 --- /dev/null +++ b/mcp-server/pytest.ini @@ -0,0 +1,32 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +[tool:pytest] +testpaths = tests +python_files = test_*.py +python_classes = Test* +python_functions = test_* +addopts = + -v + --tb=short + --strict-markers + --disable-warnings +asyncio_mode = auto +markers = + slow: marks tests as slow (deselect with '-m "not slow"') + integration: marks tests as integration tests + unit: marks tests as unit tests \ No newline at end of file diff --git a/mcp-server/run_tests.sh b/mcp-server/run_tests.sh new file mode 100755 index 00000000000..a47184cab9f --- /dev/null +++ b/mcp-server/run_tests.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + +# Test script for Apache Cloudberry MCP Server + +echo "=== Install test dependencies ===" +uv pip install -e ".[dev]" + +echo "=== Run all tests ===" +uv run pytest tests/ -v + +echo "=== Run specific test patterns ===" +echo "Run stdio mode test:" +uv run pytest tests/test_cbmcp.py::TestCloudberryMCPClient::test_list_capabilities -v + +echo "Run http mode test:" +uv run pytest tests/test_cbmcp.py::TestCloudberryMCPClient::test_list_capabilities -v + +echo "=== Run coverage tests ===" +uv run pytest tests/ --cov=cbmcp --cov-report=html --cov-report=term + +echo "=== Test completed ===" diff --git a/mcp-server/src/cbmcp/__init__.py b/mcp-server/src/cbmcp/__init__.py new file mode 100644 index 00000000000..a584c415ee6 --- /dev/null +++ b/mcp-server/src/cbmcp/__init__.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + # -*- coding: utf-8 -*- + # Licensed to the Apache Software Foundation (ASF) under one + # or more contributor license agreements. See the NOTICE file + # distributed with this work for additional information + # regarding copyright ownership. The ASF licenses this file + # to you under the Apache License, Version 2.0 (the + # "License"); you may not use this file except in compliance + # with the License. You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + +""" +Apache Cloudberry MCP Server Package +""" + +from .server import CloudberryMCPServer +from .client import CloudberryMCPClient +from .config import DatabaseConfig, ServerConfig +from .database import DatabaseManager +from .security import SQLValidator + +__version__ = "0.1.0" +__all__ = [ + "CloudberryMCPServer", + "CloudberryMCPClient", + "DatabaseConfig", + "ServerConfig", + "DatabaseManager", + "SQLValidator", +] \ No newline at end of file diff --git a/mcp-server/src/cbmcp/__main__.py b/mcp-server/src/cbmcp/__main__.py new file mode 100644 index 00000000000..f467fb2ac53 --- /dev/null +++ b/mcp-server/src/cbmcp/__main__.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +""" +Main entry point for the cbmcp package +""" + +from .server import main + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/mcp-server/src/cbmcp/client.py b/mcp-server/src/cbmcp/client.py new file mode 100644 index 00000000000..b88f9993bd1 --- /dev/null +++ b/mcp-server/src/cbmcp/client.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +""" +MCP Client for testing the Apache Cloudberry MCP Server + +A client using the fastmcp SDK to interact with the Apache Cloudberry MCP server implementation. +""" + +from typing import Any, Dict, Optional +from fastmcp import Client + +from .config import DatabaseConfig, ServerConfig +from .server import CloudberryMCPServer + +class CloudberryMCPClient: + """MCP client for testing the Apache Cloudberry server using fastmcp SDK + + Usage: + # Method 1: Using async context manager + async with CloudberryMCPClient() as client: + tools = await client.list_tools() + resources = await client.list_resources() + + # Method 2: Using create class method + client = await CloudberryMCPClient.create() + tools = await client.list_tools() + await client.close() + + # Method 3: Manual initialization + client = CloudberryMCPClient() + await client.initialize() + tools = await client.list_tools() + await client.close() + """ + + def __init__(self, mode: str = "stdio", server_url: str = "http://localhost:8000/mcp/"): + self.mode = mode + self.server_url = server_url + self.client: Optional[Client] = None + + @classmethod + async def create(cls, mode: str = "stdio", server_url: str = "http://localhost:8000/mcp/") -> "CloudberryMCPClient": + """Asynchronously create and initialize the client""" + instance = cls(mode, server_url) + await instance.initialize() + return instance + + async def initialize(self): + """Initialize the client connection""" + if self.mode == "stdio": + server_config = ServerConfig.from_env() + db_config = DatabaseConfig.from_env() + server = CloudberryMCPServer(server_config, db_config) + self.client = Client(server.mcp) + else: + self.client = Client(self.server_url) + + await self.client.__aenter__() + + async def close(self): + """Close the client connection""" + if self.client: + await self.client.__aexit__(None, None, None) + self.client = None + + async def __aenter__(self): + if self.mode == "stdio": + server_config = ServerConfig.from_env() + db_config = DatabaseConfig.from_env() + server = CloudberryMCPServer(server_config, db_config) + self.client = Client(server.mcp) + else: + self.client = Client(self.server_url) + + await self.client.__aenter__() + return self + + async def __aexit__(self, exc_type, exc_val, exc_tb): + if self.client: + await self.client.__aexit__(exc_type, exc_val, exc_tb) + + async def call_tool(self, tool_name: str, arguments: Dict[str, Any]) -> Any: + """Call a tool on the MCP server""" + if not self.client: + raise RuntimeError("Client not initialized. Use async with statement.") + + return await self.client.call_tool(tool_name, arguments) + + async def get_resource(self, resource_uri: str): + """Get a resource from the MCP server""" + if not self.client: + raise RuntimeError("Client not initialized. Use async with statement.") + + return await self.client.read_resource(resource_uri) + + async def get_prompt(self, prompt_name: str, params: Dict[str, Any]=None): + """Get a prompt from the MCP server""" + if not self.client: + raise RuntimeError("Client not initialized. Use async with statement.") + + return await self.client.get_prompt(prompt_name, params) + + async def list_tools(self) -> list: + """List available tools on the server""" + if not self.client: + raise RuntimeError("Client not initialized. Use async with statement.") + + return await self.client.list_tools() + + async def list_resources(self) -> list: + """List available resources on the server""" + if not self.client: + raise RuntimeError("Client not initialized. Use async with statement.") + + return await self.client.list_resources() + + async def list_prompts(self) -> list: + """List available prompts on the server""" + if not self.client: + raise RuntimeError("Client not initialized. Use async with statement.") + + return await self.client.list_prompts() + + +if __name__ == "__main__": + import asyncio + + async def main(): + async with CloudberryMCPClient(mode="http") as client: + results = await client.call_tool("execute_query", { + "query": "SELECT * FROM film LIMIT 5" + }) + print("Results:", results) + + results = await client.call_tool("list_columns", { + "table": "film", + "schema": "public" + }) + print("Columns:", results) + + asyncio.run(main()) \ No newline at end of file diff --git a/mcp-server/src/cbmcp/config.py b/mcp-server/src/cbmcp/config.py new file mode 100644 index 00000000000..a810e67ed8f --- /dev/null +++ b/mcp-server/src/cbmcp/config.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +""" +Configuration utilities for the Apache Cloudberry MCP server +""" + +import os +from dataclasses import dataclass +from dotenv import load_dotenv + + +@dataclass +class DatabaseConfig: + """Database connection configuration""" + host: str + port: int + database: str + username: str + password: str + + @classmethod + def from_env(cls) -> "DatabaseConfig": + """Create config from environment variables""" + load_dotenv() + return cls( + host=os.getenv("DB_HOST", "localhost"), + port=int(os.getenv("DB_PORT", "5432")), + database=os.getenv("DB_NAME", "postgres"), + username=os.getenv("DB_USER", "postgres"), + password=os.getenv("DB_PASSWORD", ""), + ) + + @property + def connection_string(self) -> str: + """Get Apache Cloudberry connection string""" + return f"postgresql://{self.username}:{self.password}@{self.host}:{self.port}/{self.database}" + + +@dataclass +class ServerConfig: + """MCP server configuration""" + host: str + port: int + path: str + debug: bool + + @classmethod + def from_env(cls) -> "ServerConfig": + """Create config from environment variables""" + load_dotenv() + return cls( + host=os.getenv("MCP_HOST", "localhost"), + port=int(os.getenv("MCP_PORT", "8000")), + path=os.getenv("MCP_PATH", "/mcp/"), + debug=os.getenv("MCP_DEBUG", "false").lower() == "true", + ) \ No newline at end of file diff --git a/mcp-server/src/cbmcp/database.py b/mcp-server/src/cbmcp/database.py new file mode 100644 index 00000000000..77cdd2b308b --- /dev/null +++ b/mcp-server/src/cbmcp/database.py @@ -0,0 +1,773 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +""" +Database utilities for the Apache Cloudberry MCP server +""" + +import logging +from typing import Any, Dict, Optional +from contextlib import asynccontextmanager +import asyncpg + +from .config import DatabaseConfig +from .security import SQLValidator + + +logger = logging.getLogger(__name__) + + +class DatabaseManager: + """Manages database connections and operations""" + + def __init__(self, config: DatabaseConfig): + self.config = config + self._connection_pool: Optional[asyncpg.Pool] = None + + @asynccontextmanager + async def get_connection(self): + """Get a database connection from the pool""" + if not self._connection_pool: + self._connection_pool = await asyncpg.create_pool( + host=self.config.host, + port=self.config.port, + database=self.config.database, + user=self.config.username, + password=self.config.password, + min_size=1, + max_size=10, + command_timeout=60.0, + ) + + try: + async with self._connection_pool.acquire() as conn: + yield conn + except Exception as e: + logger.error(f"Database connection error: {e}") + raise + + async def execute_query( + self, + query: str, + params: Optional[Dict[str, Any]] = None, + readonly: bool = True + ) -> Dict[str, Any]: + """Execute a SQL query with safety validation""" + # Validate query for security + is_valid, error_msg = SQLValidator.validate_query(query) + if not is_valid: + return {"error": f"Query validation failed: {error_msg}"} + + # Check readonly constraint + if readonly and not SQLValidator.is_readonly_query(query): + return {"error": "Only read-only queries are allowed"} + + try: + async with self.get_connection() as conn: + if params: + # Sanitize parameter names + sanitized_params = { + SQLValidator.sanitize_parameter_name(k): v + for k, v in params.items() + } + result = await conn.fetch(query, **sanitized_params) + else: + result = await conn.fetch(query) + + if not result: + return {"columns": [], "rows": [], "row_count": 0} + + columns = list(result[0].keys()) + rows = [list(row.values()) for row in result] + + return { + "columns": columns, + "rows": rows, + "row_count": len(rows) + } + + except Exception as e: + logger.error(f"Query execution error: {e}") + return {"error": f"Error executing query: {str(e)}"} + + + async def get_table_info(self, schema: str, table: str) -> Dict[str, Any]: + """Get detailed information about a table""" + try: + async with self.get_connection() as conn: + # Get column information + columns = await conn.fetch( + "SELECT column_name, data_type, is_nullable, column_default " + "FROM information_schema.columns " + "WHERE table_schema = $1 AND table_name = $2 " + "ORDER BY ordinal_position", + schema, table + ) + + # Get index information + indexes = await conn.fetch( + "SELECT indexname, indexdef FROM pg_indexes " + "WHERE schemaname = $1 AND tablename = $2 " + "ORDER BY indexname", + schema, table + ) + + # Get table statistics + stats = await conn.fetchrow( + "SELECT " + "pg_size_pretty(pg_total_relation_size($1)) as total_size, " + "pg_size_pretty(pg_relation_size($1)) as table_size, " + "pg_size_pretty(pg_total_relation_size($1) - pg_relation_size($1)) as indexes_size, " + "(SELECT COUNT(*) FROM $1) as row_count", + f"{schema}.{table}" + ) + + return { + "columns": [dict(col) for col in columns], + "indexes": [dict(idx) for idx in indexes], + "statistics": dict(stats) if stats else {} + } + + except Exception as e: + logger.error(f"Error getting table info: {e}") + return {"error": str(e)} + + async def close(self): + """Close the connection pool""" + if self._connection_pool: + await self._connection_pool.close() + self._connection_pool = None + + async def list_schemas(self) -> list[str]: + """List all database schemas""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT schema_name FROM information_schema.schemata " + "WHERE schema_name NOT LIKE 'pg_%' AND schema_name != 'information_schema' " + "ORDER BY schema_name" + ) + return [r["schema_name"] for r in records] + + async def get_database_info(self) -> dict[str, str]: + """Get general database information""" + async with self.get_connection() as conn: + version = await conn.fetchval("SELECT version()") + size = await conn.fetchval("SELECT pg_size_pretty(pg_database_size(current_database()))") + stats = await conn.fetchrow( + "SELECT COUNT(*) as total_tables FROM information_schema.tables " + "WHERE table_type = 'BASE TABLE' AND table_schema NOT LIKE 'pg_%'" + ) + + return { + "Version": version, + "Size": size, + "Total Tables": str(stats['total_tables']) + } + + async def get_database_summary(self) -> dict[str, dict]: + """Get comprehensive database summary""" + summary = {} + + async with self.get_connection() as conn: + # Get schemas + schemas = await conn.fetch( + "SELECT schema_name FROM information_schema.schemata " + "WHERE schema_name NOT LIKE 'pg_%' AND schema_name != 'information_schema' " + "ORDER BY schema_name" + ) + + for schema_row in schemas: + schema = schema_row["schema_name"] + summary[schema] = {} + + # Get tables + tables = await conn.fetch( + "SELECT table_name FROM information_schema.tables " + "WHERE table_schema = $1 AND table_type = 'BASE TABLE' " + "ORDER BY table_name", + schema + ) + summary[schema]["tables"] = [t["table_name"] for t in tables] + + # Get views + views = await conn.fetch( + "SELECT table_name FROM information_schema.views " + "WHERE table_schema = $1 " + "ORDER BY table_name", + schema + ) + summary[schema]["views"] = [v["table_name"] for v in views] + + return summary + + async def list_tables(self, schema: str) -> list[str]: + """List tables in a specific schema""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT table_name FROM information_schema.tables " + "WHERE table_schema = $1 AND table_type = 'BASE TABLE' " + "ORDER BY table_name", + schema + ) + return [r["table_name"] for r in records] + + async def list_views(self, schema: str) -> list[str]: + """List views in a specific schema""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT table_name FROM information_schema.views " + "WHERE table_schema = $1 " + "ORDER BY table_name", + schema + ) + return [r["table_name"] for r in records] + + async def list_indexes(self, schema: str, table: str) -> list[dict]: + """List indexes for a specific table""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT indexname, indexdef FROM pg_indexes " + "WHERE schemaname = $1 AND tablename = $2 " + "ORDER BY indexname", + schema, table + ) + return [{"indexname": r["indexname"], "indexdef": r["indexdef"]} for r in records] + + async def list_columns(self, schema: str, table: str) -> list[dict]: + """List columns for a specific table""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT column_name, data_type, is_nullable, column_default " + "FROM information_schema.columns " + "WHERE table_schema = $1 AND table_name = $2 " + "ORDER BY ordinal_position", + schema, table + ) + return [ + { + "column_name": r["column_name"], + "data_type": r["data_type"], + "is_nullable": r["is_nullable"], + "column_default": r["column_default"] + } + for r in records + ] + + async def get_table_stats(self, schema: str, table: str) -> dict[str, Any]: + """Get statistics for a table""" + try: + # Validate schema and table names to prevent SQL injection + if not schema.replace('_', '').replace('-', '').isalnum(): + return {"error": "Invalid schema name"} + if not table.replace('_', '').replace('-', '').isalnum(): + return {"error": "Invalid table name"} + + async with self.get_connection() as conn: + # Use format() with proper identifier quoting + qualified_name = f"{schema}.{table}" + sql = ( + f"SELECT " + f"pg_size_pretty(pg_total_relation_size('{qualified_name}')) as total_size, " + f"pg_size_pretty(pg_relation_size('{qualified_name}')) as table_size, " + f"pg_size_pretty(pg_total_relation_size('{qualified_name}') - pg_relation_size('{qualified_name}')) as indexes_size, " + f"(SELECT COUNT(*) FROM {qualified_name}) as row_count" + ) + result = await conn.fetchrow(sql) + + if not result: + return {"error": f"Table {schema}.{table} not found"} + + return { + "total_size": result["total_size"], + "table_size": result["table_size"], + "indexes_size": result["indexes_size"], + "row_count": result["row_count"] + } + except Exception as e: + return {"error": f"Error getting table stats: {str(e)}"} + + async def list_large_tables(self, limit: int = 10) -> list[dict]: + """List the largest tables in the database""" + async with self.get_connection() as conn: + result = await conn.fetch( + "SELECT " + "schemaname, tablename, " + "pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size, " + "pg_total_relation_size(schemaname||'.'||tablename) as size_bytes " + "FROM pg_tables " + "WHERE schemaname NOT LIKE 'pg_%' " + "ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC " + "LIMIT $1", + limit + ) + + return [ + { + "schema": row["schemaname"], + "table": row["tablename"], + "size": row["size"], + "size_bytes": row["size_bytes"] + } + for row in result + ] + + async def list_users(self) -> list[str]: + """List all database users""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT usename FROM pg_user WHERE usename != 'cloudberry' " + "ORDER BY usename" + ) + return [r["usename"] for r in records] + + async def list_user_permissions(self, username: str) -> list[dict]: + """List permissions for a specific user""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "n.nspname as schema_name, " + "c.relname as object_name, " + "c.relkind as object_type, " + "p.perm as permission " + "FROM pg_class c " + "JOIN pg_namespace n ON n.oid = c.relnamespace " + "CROSS JOIN LATERAL aclexplode(c.relacl) p " + "WHERE p.grantee = (SELECT oid FROM pg_user WHERE usename = $1) " + "AND n.nspname NOT LIKE 'pg_%' " + "ORDER BY n.nspname, c.relname", + username + ) + return [ + { + "schema": r["schema_name"], + "object": r["object_name"], + "type": r["object_type"], + "permission": r["permission"] + } + for r in records + ] + + async def list_table_privileges(self, schema: str, table: str) -> list[dict]: + """List privileges for a specific table""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "grantee, privilege_type " + "FROM information_schema.table_privileges " + "WHERE table_schema = $1 AND table_name = $2 " + "ORDER BY grantee, privilege_type", + schema, table + ) + return [ + { + "user": r["grantee"], + "privilege": r["privilege_type"] + } + for r in records + ] + + async def list_constraints(self, schema: str, table: str) -> list[dict]: + """List constraints for a specific table""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "c.conname as constraint_name, " + "c.contype as constraint_type, " + "pg_get_constraintdef(c.oid) as constraint_definition, " + "f.relname as foreign_table_name, " + "nf.nspname as foreign_schema_name " + "FROM pg_constraint c " + "JOIN pg_class t ON t.oid = c.conrelid " + "JOIN pg_namespace n ON n.oid = t.relnamespace " + "LEFT JOIN pg_class f ON f.oid = c.confrelid " + "LEFT JOIN pg_namespace nf ON nf.oid = f.relnamespace " + "WHERE n.nspname = $1 AND t.relname = $2 " + "ORDER BY c.conname", + schema, table + ) + constraints = [] + for r in records: + constraint_type = { + 'p': 'PRIMARY KEY', + 'f': 'FOREIGN KEY', + 'u': 'UNIQUE', + 'c': 'CHECK', + 'x': 'EXCLUSION' + }.get(r["constraint_type"], r["constraint_type"]) + + constraints.append({ + "name": r["constraint_name"], + "type": constraint_type, + "definition": r["constraint_definition"], + "foreign_table": r["foreign_table_name"], + "foreign_schema": r["foreign_schema_name"] + }) + return constraints + + async def list_foreign_keys(self, schema: str, table: str) -> list[dict]: + """List foreign keys for a specific table""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "tc.constraint_name, " + "tc.table_name, " + "kcu.column_name, " + "ccu.table_name AS foreign_table_name, " + "ccu.column_name AS foreign_column_name, " + "ccu.table_schema AS foreign_schema_name " + "FROM information_schema.table_constraints AS tc " + "JOIN information_schema.key_column_usage AS kcu " + "ON tc.constraint_name = kcu.constraint_name " + "JOIN information_schema.constraint_column_usage AS ccu " + "ON ccu.constraint_name = tc.constraint_name " + "WHERE tc.constraint_type = 'FOREIGN KEY' " + "AND tc.table_schema = $1 AND tc.table_name = $2 " + "ORDER BY tc.constraint_name", + schema, table + ) + return [ + { + "constraint_name": r["constraint_name"], + "column": r["column_name"], + "foreign_schema": r["foreign_schema_name"], + "foreign_table": r["foreign_table_name"], + "foreign_column": r["foreign_column_name"] + } + for r in records + ] + + async def list_referenced_tables(self, schema: str, table: str) -> list[dict]: + """List tables that reference this table""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "tc.table_schema, " + "tc.table_name, " + "tc.constraint_name " + "FROM information_schema.table_constraints AS tc " + "JOIN information_schema.constraint_column_usage AS ccu " + "ON ccu.constraint_name = tc.constraint_name " + "WHERE tc.constraint_type = 'FOREIGN KEY' " + "AND ccu.table_schema = $1 AND ccu.table_name = $2 " + "ORDER BY tc.table_schema, tc.table_name", + schema, table + ) + return [ + { + "schema": r["table_schema"], + "table": r["table_name"], + "constraint": r["constraint_name"] + } + for r in records + ] + + async def explain_query(self, query: str, params: Optional[dict] = None) -> str: + """Get the execution plan for a query""" + try: + async with self.get_connection() as conn: + if params: + result = await conn.fetch(f"EXPLAIN (ANALYZE, BUFFERS) {query}", **params) + else: + result = await conn.fetch(f"EXPLAIN (ANALYZE, BUFFERS) {query}") + + return "\n".join([row["QUERY PLAN"] for row in result]) + except Exception as e: + return f"Error explaining query: {str(e)}" + + async def get_slow_queries(self, limit: int = 10) -> list[dict]: + """Get slow queries from pg_stat_statements""" + async with self.get_connection() as conn: + try: + records = await conn.fetch( + "SELECT " + "query, " + "calls, " + "total_time, " + "mean_time, " + "rows " + "FROM pg_stat_statements " + "ORDER BY mean_time DESC " + "LIMIT $1", + limit + ) + return [ + { + "query": r["query"], + "calls": r["calls"], + "total_time": r["total_time"], + "mean_time": r["mean_time"], + "rows": r["rows"] + } + for r in records + ] + except Exception: + # pg_stat_statements might not be available + return [] + + async def get_index_usage(self) -> list[dict]: + """Get index usage statistics""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "schemaname, " + "relname as tablename, " + "indexrelname as indexname, " + "idx_scan, " + "idx_tup_read, " + "idx_tup_fetch " + "FROM pg_stat_user_indexes " + "WHERE schemaname NOT LIKE 'pg_%' " + "ORDER BY idx_scan DESC" + ) + return [ + { + "schema": r["schemaname"], + "table": r["tablename"], + "index": r["indexname"], + "scans": r["idx_scan"], + "tup_read": r["idx_tup_read"], + "tup_fetch": r["idx_tup_fetch"] + } + for r in records + ] + + async def get_table_bloat_info(self) -> list[dict]: + """Get table bloat information""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "schemaname, " + "relname as tablename, " + "pg_size_pretty(pg_total_relation_size(schemaname||'.'||relname)) as total_size, " + "round(100 * (relpages - (relpages * fillfactor / 100)) / relpages, 2) as bloat_ratio " + "FROM pg_class c " + "JOIN pg_namespace n ON n.oid = c.relnamespace " + "JOIN pg_stat_user_tables s ON s.relid = c.oid " + "WHERE c.relkind = 'r' AND n.nspname NOT LIKE 'pg_%' " + "ORDER BY bloat_ratio DESC " + "LIMIT 20" + ) + return [ + { + "schema": r["schemaname"], + "table": r["tablename"], + "total_size": r["total_size"], + "bloat_ratio": r["bloat_ratio"] + } + for r in records + ] + + async def get_database_activity(self) -> list[dict]: + """Get current database activity""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "pid, " + "usename, " + "application_name, " + "client_addr, " + "state, " + "query_start, " + "query " + "FROM pg_stat_activity " + "WHERE state != 'idle' AND usename != 'cloudberry' " + "ORDER BY query_start" + ) + return [ + { + "pid": r["pid"], + "username": r["usename"], + "application": r["application_name"], + "client_addr": str(r["client_addr"]) if r["client_addr"] else None, + "state": r["state"], + "query_start": str(r["query_start"]), + "query": r["query"] + } + for r in records + ] + + async def list_functions(self, schema: str) -> list[dict]: + """List functions in a specific schema""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "proname as function_name, " + "pg_get_function_identity_arguments(p.oid) as arguments, " + "pg_get_function_result(p.oid) as return_type, " + "prokind as function_type " + "FROM pg_proc p " + "JOIN pg_namespace n ON n.oid = p.pronamespace " + "WHERE n.nspname = $1 AND p.prokind IN ('f', 'p') " + "ORDER BY proname", + schema + ) + return [ + { + "name": r["function_name"], + "arguments": r["arguments"], + "return_type": r["return_type"], + "type": "function" if r["function_type"] == "f" else "procedure" + } + for r in records + ] + + async def get_function_definition(self, schema: str, function_name: str) -> str: + """Get function definition""" + try: + async with self.get_connection() as conn: + definition = await conn.fetchval( + "SELECT pg_get_functiondef(p.oid) " + "FROM pg_proc p " + "JOIN pg_namespace n ON n.oid = p.pronamespace " + "WHERE n.nspname = $1 AND p.proname = $2 " + "LIMIT 1", + schema, function_name + ) + return definition or "Function definition not found" + except Exception as e: + return f"Error getting function definition: {str(e)}" + + async def list_triggers(self, schema: str, table: str) -> list[dict]: + """List triggers for a specific table""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "trigger_name, " + "event_manipulation, " + "action_timing, " + "action_statement " + "FROM information_schema.triggers " + "WHERE event_object_schema = $1 AND event_object_table = $2 " + "ORDER BY trigger_name", + schema, table + ) + return [ + { + "name": r["trigger_name"], + "event": r["event_manipulation"], + "timing": r["action_timing"], + "action": r["action_statement"] + } + for r in records + ] + + async def get_table_ddl(self, schema: str, table: str) -> str: + """Get DDL statement for a table""" + try: + async with self.get_connection() as conn: + # Try the newer method first + try: + ddl = await conn.fetchval( + "SELECT pg_get_tabledef($1, $2, true)", + schema, table + ) + if ddl: + return ddl + except Exception: + pass + + # Fallback to a more compatible approach + ddl_query = """ + SELECT 'CREATE TABLE ' || $1 || '.' || $2 || ' (' || E'\n' || + string_agg( + ' ' || column_name || ' ' || + data_type || + CASE WHEN character_maximum_length IS NOT NULL + THEN '(' || character_maximum_length || ')' + ELSE '' END || + CASE WHEN is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END || + CASE WHEN column_default IS NOT NULL + THEN ' DEFAULT ' || column_default + ELSE '' END, + E',\n' ORDER BY ordinal_position + ) || E'\n);' as ddl + FROM information_schema.columns + WHERE table_schema = $1 AND table_name = $2 + """ + ddl = await conn.fetchval(ddl_query, schema, table) + return ddl or "Table DDL not found" + except Exception as e: + return f"Error getting table DDL: {str(e)}" + + async def list_materialized_views(self, schema: str) -> list[str]: + """List materialized views in a specific schema""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT matviewname " + "FROM pg_matviews " + "WHERE schemaname = $1 " + "ORDER BY matviewname", + schema + ) + return [r["matviewname"] for r in records] + + async def get_vacuum_info(self, schema: str, table: str) -> dict: + """Get vacuum information for a table""" + async with self.get_connection() as conn: + record = await conn.fetchrow( + "SELECT " + "last_vacuum, " + "last_autovacuum, " + "n_dead_tup, " + "n_live_tup, " + "vacuum_count, " + "autovacuum_count " + "FROM pg_stat_user_tables " + "WHERE schemaname = $1 AND relname = $2", + schema, table + ) + if record: + return { + "last_vacuum": str(record["last_vacuum"]) if record["last_vacuum"] else None, + "last_autovacuum": str(record["last_autovacuum"]) if record["last_autovacuum"] else None, + "dead_tuples": record["n_dead_tup"], + "live_tuples": record["n_live_tup"], + "vacuum_count": record["vacuum_count"], + "autovacuum_count": record["autovacuum_count"] + } + return {"error": "Table not found"} + + async def list_active_connections(self) -> list[dict]: + """List active database connections""" + async with self.get_connection() as conn: + records = await conn.fetch( + "SELECT " + "pid, " + "usename, " + "application_name, " + "client_addr, " + "state, " + "backend_start, " + "query_start " + "FROM pg_stat_activity " + "WHERE usename != 'cloudberry' " + "ORDER BY backend_start" + ) + return [ + { + "pid": r["pid"], + "username": r["usename"], + "application": r["application_name"], + "client_addr": str(r["client_addr"]) if r["client_addr"] else None, + "state": r["state"], + "backend_start": str(r["backend_start"]), + "query_start": str(r["query_start"]) if r["query_start"] else None + } + for r in records + ] \ No newline at end of file diff --git a/mcp-server/src/cbmcp/prompt.py b/mcp-server/src/cbmcp/prompt.py new file mode 100644 index 00000000000..774aabac6ba --- /dev/null +++ b/mcp-server/src/cbmcp/prompt.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +"""Prompt templates for Apache Cloudberry database analysis.""" + +ANALYZE_QUERY_PERFORMANCE_PROMPT = """Please help me analyze and optimize a PostgreSQL query. + +I'll provide you with: +1. The SQL query: {sql} +2. The EXPLAIN ANALYZE output: {explain} +3. Table schema information: {table_info} + +Please analyze: +- Query execution plan +- Potential performance bottlenecks +- Index usage +- Suggested optimizations +- Alternative query approaches +""" + +SUGGEST_INDEXES_PROMPT = """Please help me suggest optimal indexes for your PostgreSQL tables. + +I'll provide you with: +1. The table schema(s): {table_info} +2. Common query patterns: {query} +3. Current indexes: {table_info} +4. Table size and row count: {table_stats} + +Please analyze: +- Missing indexes based on query patterns +- Index type recommendations (B-tree, GIN, GiST, etc.) +- Composite index suggestions +- Index maintenance considerations +""" + +DATABASE_HEALTH_CHECK_PROMPT = """Let's perform a comprehensive health check of your PostgreSQL database. + +Please analyze: +- Database size and growth trends +- Large tables and indexes +- Query performance metrics +- Connection pool usage +- Vacuum and analyze statistics +- Index fragmentation +- Table bloat +""" \ No newline at end of file diff --git a/mcp-server/src/cbmcp/security.py b/mcp-server/src/cbmcp/security.py new file mode 100644 index 00000000000..d9cd44a7e17 --- /dev/null +++ b/mcp-server/src/cbmcp/security.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +""" +Security utilities for the Apache Cloudberry MCP server +""" + +from typing import Set +import re + + +class SQLValidator: + """Validates SQL queries for security""" + + # Allowed SQL operations for safety + ALLOWED_OPERATIONS: Set[str] = { + "SELECT", "WITH", "SHOW", "EXPLAIN", "DESCRIBE", "PRAGMA" + } + + # Blocked SQL operations + BLOCKED_OPERATIONS: Set[str] = { + "INSERT", "UPDATE", "DELETE", "DROP", "CREATE", "ALTER", + "TRUNCATE", "GRANT", "REVOKE", "REPLACE" + } + + # Sensitive tables that should not be queried + SENSITIVE_TABLES: Set[str] = { + "pg_user", "pg_shadow", "pg_authid", "pg_passfile", + "information_schema.user_privileges" + } + + @classmethod + def validate_query(cls, query: str) -> tuple[bool, str]: + """Validate a SQL query for security + + Returns: + tuple: (is_valid, error_message) + """ + query_upper = query.upper().strip() + + # Check for blocked operations + for blocked in cls.BLOCKED_OPERATIONS: + if re.search(rf"\b{blocked}\b", query_upper): + return False, f"Blocked SQL operation: {blocked}" + + # Check if query starts with allowed operation + if not any(query_upper.startswith(op) for op in cls.ALLOWED_OPERATIONS): + return False, f"Query must start with one of: {', '.join(cls.ALLOWED_OPERATIONS)}" + + # Check for sensitive table access + for sensitive_table in cls.SENSITIVE_TABLES: + if re.search(rf"\b{sensitive_table}\b", query_upper): + return False, f"Access to sensitive table not allowed: {sensitive_table}" + + # Check for potential SQL injection patterns + injection_patterns = [ + r";.*--", # Comments after statements + r"/\*.*\*/", # Block comments + r"'OR'1'='1", # Basic SQL injection + r"'UNION.*SELECT", # Union attacks + r"EXEC\s*\(", # Dynamic SQL execution + ] + + for pattern in injection_patterns: + if re.search(pattern, query_upper): + return False, f"Potential SQL injection detected" + + return True, "Query is valid" + + @classmethod + def sanitize_parameter_name(cls, param_name: str) -> str: + """Sanitize parameter names to prevent injection""" + # Remove any non-alphanumeric characters except underscores + return re.sub(r"[^a-zA-Z0-9_]", "", param_name) + + @classmethod + def is_readonly_query(cls, query: str) -> bool: + """Check if a query is read-only""" + query_upper = query.upper().strip() + return query_upper.startswith(("SELECT", "WITH", "SHOW", "EXPLAIN")) \ No newline at end of file diff --git a/mcp-server/src/cbmcp/server.py b/mcp-server/src/cbmcp/server.py new file mode 100644 index 00000000000..edf0b539545 --- /dev/null +++ b/mcp-server/src/cbmcp/server.py @@ -0,0 +1,551 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +""" +Apache Cloudberry MCP Server Implementation + +A Model Communication Protocol server for Apache Cloudberry database interaction +providing resources, tools, and prompts for database management. +""" + +from typing import Annotated, Any, Dict, List, Optional +import logging +from fastmcp import FastMCP +from pydantic import Field + +from .config import DatabaseConfig, ServerConfig +from .database import DatabaseManager +from .prompt import ( + ANALYZE_QUERY_PERFORMANCE_PROMPT, + SUGGEST_INDEXES_PROMPT, + DATABASE_HEALTH_CHECK_PROMPT +) + +logger = logging.getLogger(__name__) + +class CloudberryMCPServer: + """Apache Cloudberry MCP Server implementation""" + + def __init__(self, server_config: ServerConfig, db_config: DatabaseConfig): + self.server_config = server_config + self.db_config = db_config + self.mcp = FastMCP("Apache Cloudberry MCP Server") + self.db_manager = DatabaseManager(db_config) + + self._setup_resources() + self._setup_tools() + self._setup_prompts() + + + def _setup_resources(self): + """Setup MCP resources for database metadata""" + + @self.mcp.resource("postgres://schemas", mime_type="application/json") + async def list_schemas() -> List[str]: + """List all database schemas""" + logger.info("Listing schemas") + return await self.db_manager.list_schemas() + + @self.mcp.resource("postgres://database/info", mime_type="application/json") + async def database_info() -> Dict[str, str]: + """Get general database information""" + logger.info("Getting database info") + return await self.db_manager.get_database_info() + + @self.mcp.resource("postgres://database/summary", mime_type="application/json") + async def database_summary() -> Dict[str, dict]: + """Get comprehensive database summary""" + logger.info("Getting database summary") + return await self.db_manager.get_database_summary() + + + def _setup_tools(self): + """Setup MCP tools for database operations""" + + @self.mcp.tool() + async def list_tables( + schema: Annotated[str, Field(description="The schema name to list tables from")] + ) -> List[str]: + """List tables in a specific schema""" + logger.info(f"Listing tables in schema: {schema}") + try: + return await self.db_manager.list_tables(schema) + except Exception as e: + return f"Error listing tables: {str(e)}" + + @self.mcp.tool() + async def list_views( + schema: Annotated[str, Field(description="The schema name to list views from")] + ) -> List[str]: + """List views in a specific schema""" + logger.info(f"Listing views in schema: {schema}") + try: + return await self.db_manager.list_views(schema) + except Exception as e: + return f"Error listing views: {str(e)}" + + @self.mcp.tool() + async def list_indexes( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name to list indexes for")] + ) -> List[str]: + """List indexes for a specific table""" + logger.info(f"Listing indexes for table: {schema}.{table}") + try: + indexes = await self.db_manager.list_indexes(schema, table) + return [f"{idx['indexname']}: {idx['indexdef']}" for idx in indexes] + except Exception as e: + return f"Error listing indexes: {str(e)}" + + @self.mcp.tool() + async def list_columns( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name to list columns for")] + ) -> List[Dict[str, Any]]: + """List columns for a specific table""" + logger.info(f"Listing columns for table: {schema}.{table}") + try: + return await self.db_manager.list_columns(schema, table) + except Exception as e: + return f"Error listing columns: {str(e)}" + + @self.mcp.tool() + async def execute_query( + query: Annotated[str, Field(description="The SQL query to execute")], + params: Annotated[Optional[Dict[str, Any]], Field(description="The parameters for the query")] = None, + readonly: Annotated[bool, Field(description="Whether the query is read-only")] = True + ) -> Dict[str, Any]: + """ + Execute a safe SQL query with parameters + """ + logger.info(f"Executing query: {query}") + try: + return await self.db_manager.execute_query(query, params, readonly) + except Exception as e: + return {"error": f"Error executing query: {str(e)}"} + + @self.mcp.tool() + async def explain_query( + query: Annotated[str, Field(description="The SQL query to explain")], + params: Annotated[Optional[Dict[str, Any]], Field(description="The parameters for the query")] = None + ) -> str: + """ + Get the execution plan for a query + """ + logger.info(f"Explaining query: {query}") + try: + return await self.db_manager.explain_query(query, params) + except Exception as e: + return f"Error explaining query: {str(e)}" + + @self.mcp.tool() + async def get_table_stats( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name")], + ) -> Dict[str, Any]: + """ + Get statistics for a table + """ + logger.info(f"Getting table stats for: {schema}.{table}") + try: + result = await self.db_manager.get_table_stats(schema, table) + if "error" in result: + return result["error"] + return result + except Exception as e: + return f"Error getting table stats: {str(e)}" + + @self.mcp.tool() + async def list_large_tables(limit: Annotated[int, Field(description="Number of tables to return")] = 10) -> List[Dict[str, Any]]: + """ + List the largest tables in the database + """ + logger.info(f"Listing large tables, limit: {limit}") + try: + return await self.db_manager.list_large_tables(limit) + except Exception as e: + return f"Error listing large tables: {str(e)}" + + @self.mcp.tool() + async def get_database_schemas() -> List[str]: + """Get database schemas""" + logger.info("Getting database schemas") + try: + return await self.db_manager.list_schemas() + except Exception as e: + return f"Error getting schemas: {str(e)}" + + @self.mcp.tool() + async def get_database_information() -> Dict[str, str]: + """Get general database information""" + logger.info("Getting database information") + try: + return await self.db_manager.get_database_info() + except Exception as e: + return f"Error getting database info: {str(e)}" + + @self.mcp.tool() + async def get_database_summary() -> Dict[str, dict]: + """Get detailed database summary""" + logger.info("Getting database summary") + try: + return await self.db_manager.get_database_summary() + except Exception as e: + return f"Error getting database summary: {str(e)}" + + @self.mcp.tool() + async def list_users() -> List[str]: + """List all database users""" + logger.info("Listing database users") + try: + return await self.db_manager.list_users() + except Exception as e: + return f"Error listing users: {str(e)}" + + @self.mcp.tool() + async def list_user_permissions( + username: Annotated[str, Field(description="The username to check permissions for")] + ) -> List[Dict[str, Any]]: + """List permissions for a specific user""" + logger.info(f"Listing permissions for user: {username}") + try: + return await self.db_manager.list_user_permissions(username) + except Exception as e: + return f"Error listing user permissions: {str(e)}" + + @self.mcp.tool() + async def list_table_privileges( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name")] + ) -> List[Dict[str, Any]]: + """List privileges for a specific table""" + logger.info(f"Listing table privileges for: {schema}.{table}") + try: + return await self.db_manager.list_table_privileges(schema, table) + except Exception as e: + return f"Error listing table privileges: {str(e)}" + + @self.mcp.tool() + async def list_constraints( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name")] + ) -> List[Dict[str, Any]]: + """List constraints for a specific table""" + logger.info(f"Listing constraints for table: {schema}.{table}") + try: + return await self.db_manager.list_constraints(schema, table) + except Exception as e: + return f"Error listing constraints: {str(e)}" + + @self.mcp.tool() + async def list_foreign_keys( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name")] + ) -> List[Dict[str, Any]]: + """List foreign keys for a specific table""" + logger.info(f"Listing foreign keys for table: {schema}.{table}") + try: + return await self.db_manager.list_foreign_keys(schema, table) + except Exception as e: + return f"Error listing foreign keys: {str(e)}" + + @self.mcp.tool() + async def list_referenced_tables( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name")] + ) -> List[Dict[str, Any]]: + """List tables that reference this table""" + logger.info(f"Listing referenced tables for: {schema}.{table}") + try: + return await self.db_manager.list_referenced_tables(schema, table) + except Exception as e: + return f"Error listing referenced tables: {str(e)}" + + @self.mcp.tool() + async def get_slow_queries( + limit: Annotated[int, Field(description="Number of slow queries to return")] = 10 + ) -> List[Dict[str, Any]]: + """Get slow queries from database statistics""" + logger.info(f"Getting slow queries, limit: {limit}") + try: + return await self.db_manager.get_slow_queries(limit) + except Exception as e: + return f"Error getting slow queries: {str(e)}" + + @self.mcp.tool() + async def get_index_usage() -> List[Dict[str, Any]]: + """Get index usage statistics""" + logger.info("Getting index usage statistics") + try: + return await self.db_manager.get_index_usage() + except Exception as e: + return f"Error getting index usage: {str(e)}" + + @self.mcp.tool() + async def get_table_bloat_info() -> List[Dict[str, Any]]: + """Get table bloat information""" + logger.info("Getting table bloat information") + try: + return await self.db_manager.get_table_bloat_info() + except Exception as e: + return f"Error getting table bloat info: {str(e)}" + + @self.mcp.tool() + async def get_database_activity() -> List[Dict[str, Any]]: + """Get current database activity""" + logger.info("Getting database activity") + try: + return await self.db_manager.get_database_activity() + except Exception as e: + return f"Error getting database activity: {str(e)}" + + @self.mcp.tool() + async def list_functions( + schema: Annotated[str, Field(description="The schema name")] + ) -> List[Dict[str, Any]]: + """List functions in a specific schema""" + logger.info(f"Listing functions in schema: {schema}") + try: + return await self.db_manager.list_functions(schema) + except Exception as e: + return f"Error listing functions: {str(e)}" + + @self.mcp.tool() + async def get_function_definition( + schema: Annotated[str, Field(description="The schema name")], + function_name: Annotated[str, Field(description="The function name")] + ) -> str: + """Get function definition""" + logger.info(f"Getting function definition: {schema}.{function_name}") + try: + return await self.db_manager.get_function_definition(schema, function_name) + except Exception as e: + return f"Error getting function definition: {str(e)}" + + @self.mcp.tool() + async def list_triggers( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name")] + ) -> List[Dict[str, Any]]: + """List triggers for a specific table""" + logger.info(f"Listing triggers for table: {schema}.{table}") + try: + return await self.db_manager.list_triggers(schema, table) + except Exception as e: + return f"Error listing triggers: {str(e)}" + + @self.mcp.tool() + async def get_table_ddl( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name")] + ) -> str: + """Get DDL statement for a table""" + logger.info(f"Getting table DDL: {schema}.{table}") + try: + return await self.db_manager.get_table_ddl(schema, table) + except Exception as e: + return f"Error getting table DDL: {str(e)}" + + @self.mcp.tool() + async def list_materialized_views( + schema: Annotated[str, Field(description="The schema name")] + ) -> List[str]: + """List materialized views in a specific schema""" + logger.info(f"Listing materialized views in schema: {schema}") + try: + return await self.db_manager.list_materialized_views(schema) + except Exception as e: + return f"Error listing materialized views: {str(e)}" + + @self.mcp.tool() + async def get_vacuum_info( + schema: Annotated[str, Field(description="The schema name")], + table: Annotated[str, Field(description="The table name")] + ) -> Dict[str, Any]: + """Get vacuum information for a table""" + logger.info(f"Getting vacuum info for table: {schema}.{table}") + try: + return await self.db_manager.get_vacuum_info(schema, table) + except Exception as e: + return f"Error getting vacuum info: {str(e)}" + + @self.mcp.tool() + async def list_active_connections() -> List[Dict[str, Any]]: + """List active database connections""" + logger.info("Listing active connections") + try: + return await self.db_manager.list_active_connections() + except Exception as e: + return f"Error listing active connections: {str(e)}" + + def _setup_prompts(self): + """Setup MCP prompts for common database tasks""" + + @self.mcp.prompt() + def analyze_query_performance( + sql: Annotated[str, Field(description="The SQL query to analyze")], + explain: Annotated[str, Field(description="The EXPLAIN ANALYZE output")], + table_info: Annotated[str, Field(description="The table schema information")], + ) -> str: + """Prompt for analyzing query performance""" + logger.info(f"Analyzing query performance for: {sql}") + return ANALYZE_QUERY_PERFORMANCE_PROMPT.format( + sql=sql, + explain=explain, + table_info=table_info + ) + @self.mcp.prompt() + def suggest_indexes( + query: Annotated[str, Field(description="The common query pattern")], + table_info: Annotated[str, Field(description="The table schema information")], + table_stats: Annotated[str, Field(description="The table statistics")], + ) -> str: + """Prompt for suggesting indexes""" + logger.info(f"Suggesting indexes for query: {query}") + return SUGGEST_INDEXES_PROMPT.format( + query=query, + table_info=table_info, + table_stats=table_stats + ) + + + @self.mcp.prompt() + def database_health_check() -> str: + """Prompt for database health check""" + logger.info(f"Checking database health") + return DATABASE_HEALTH_CHECK_PROMPT + + def run(self, mode: str="http"): + """Run the MCP server""" + if mode == "stdio": + return self.mcp.run( + transport="stdio", + ) + elif mode == "http": + return self.mcp.run( + transport="streamable-http", + host=self.server_config.host, + port=self.server_config.port, + path=self.server_config.path, + stateless_http=True + ) + + async def close(self): + """Close the server and cleanup resources""" + await self.db_manager.close() + + +def main(): + """Main entry point""" + import argparse + + parser = argparse.ArgumentParser( + description="Cloudberry MCP Server - Cloudberry database management tools", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + %(prog)s --mode stdio + %(prog)s --mode http --host 0.0.0.0 --port 8080 + %(prog)s --mode http --log-level INFO + %(prog)s --help + """ + ) + + parser.add_argument( + "--mode", + choices=["stdio", "http"], + default="http", + help="Server mode: stdio for stdin/stdout communication, http for HTTP server (default: http)" + ) + + parser.add_argument( + "--host", + default=None, + help="HTTP server host (default: from CLOUDBERRY_MCP_HOST env var or 127.0.0.1)" + ) + + parser.add_argument( + "--port", + type=int, + default=None, + help="HTTP server port (default: from CLOUDBERRY_MCP_PORT env var or 8080)" + ) + + parser.add_argument( + "--path", + default=None, + help="HTTP server path (default: from CLOUDBERRY_MCP_PATH env var or /mcp)" + ) + + parser.add_argument( + "--log-level", + choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], + default="WARNING", + help="Logging level (default: WARNING)" + ) + + parser.add_argument( + "--version", + action="version", + version="Cloudberry MCP Server 1.0.0" + ) + + args = parser.parse_args() + + # Configure logging + log_level = getattr(logging, args.log_level.upper()) + logging.basicConfig( + level=log_level, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + handlers=[ + logging.StreamHandler() + ] + ) + + # Create configurations + server_config = ServerConfig.from_env() + db_config = DatabaseConfig.from_env() + + # Override with command line arguments + if args.host: + server_config.host = args.host + if args.port: + server_config.port = args.port + if args.path: + server_config.path = args.path + + server = CloudberryMCPServer(server_config, db_config) + + try: + logger.info(f"Starting server in {args.mode} mode...") + server.run(args.mode) + except KeyboardInterrupt: + logger.error("Server stopped by user") + except Exception as e: + logger.error(f"Server error: {e}") + sys.exit(1) + finally: + import asyncio + asyncio.run(server.close()) + + +if __name__ == "__main__": + import sys + + main() diff --git a/mcp-server/tests/README.md b/mcp-server/tests/README.md new file mode 100644 index 00000000000..9fa69976b26 --- /dev/null +++ b/mcp-server/tests/README.md @@ -0,0 +1,115 @@ + + +# Apache Cloudberry MCP Testing Guide + +## Test Structure + +This project uses the `pytest` framework for testing, supporting both asynchronous testing and parameterized testing. + +### Test Files +- `test_cbmcp.py` - Main test file containing all MCP client functionality tests + +### Test Categories +- **Unit Tests** - Test individual features independently +- **Integration Tests** - Test overall system functionality +- **Parameterized Tests** - Test both stdio and http modes simultaneously + +## Running Tests + +### Install Test Dependencies +```bash +pip install -e ".[dev]" +``` + +### Run All Tests +```bash +pytest tests/ +``` + +### Run Specific Tests +```bash +# Run specific test file +pytest tests/test_cbmcp.py + +# Run specific test class +pytest tests/test_cbmcp.py::TestCloudberryMCPClient + +# Run specific test method +pytest tests/test_cbmcp.py::TestCloudberryMCPClient::test_list_capabilities + +# Run tests for specific mode +pytest tests/test_cbmcp.py -k "stdio" +``` + +### Verbose Output +```bash +pytest tests/ -v +``` + +### Coverage Testing +```bash +pytest tests/ --cov=src.cbmcp --cov-report=html --cov-report=term +``` + +## Test Features + +### 1. Server Capabilities Tests +- `test_list_capabilities` - Test tool, resource, and prompt listings + +### 2. Resource Tests +- `test_get_schemas_resource` - Get database schemas +- `test_get_tables_resource` - Get table listings +- `test_get_database_info_resource` - Get database information +- `test_get_database_summary_resource` - Get database summary + +### 3. Tool Tests +- `test_tools` - Parameterized testing of all tool calls + - list_tables + - list_views + - list_columns + - list_indexes + - execute_query + - list_large_tables + - get_table_stats + - explain_query + +### 4. Prompt Tests +- `test_analyze_query_performance_prompt` - Query performance analysis prompts +- `test_suggest_indexes_prompt` - Index suggestion prompts +- `test_database_health_check_prompt` - Database health check prompts + +## Test Modes + +Tests support two modes: +- **stdio** - Standard input/output mode +- **http** - HTTP mode + +## Notes + +1. Tests will skip inaccessible features (e.g., when database is not connected) +2. Ensure Apache Cloudberry service is started and configured correctly +3. Check database connection configuration in .env file + +## Using Scripts to Run + +You can use the provided script to run tests: +```bash +./run_tests.sh +``` \ No newline at end of file diff --git a/mcp-server/tests/test_cbmcp.py b/mcp-server/tests/test_cbmcp.py new file mode 100644 index 00000000000..5560c1d84e6 --- /dev/null +++ b/mcp-server/tests/test_cbmcp.py @@ -0,0 +1,338 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +import pytest +import pytest_asyncio +import asyncio +import json +from typing import Any +from pydantic import AnyUrl + +from cbmcp.client import CloudberryMCPClient + + +class CustomJSONEncoder(json.JSONEncoder): + def default(self, obj: Any) -> Any: + if isinstance(obj, AnyUrl): + return str(obj) + return super().default(obj) + + +@pytest.fixture +def event_loop(): + """Create event loop for async testing""" + loop = asyncio.get_event_loop_policy().new_event_loop() + yield loop + loop.close() + + +@pytest_asyncio.fixture(params=["stdio", "http"]) +async def client(request): + """Create CloudberryMCPClient instance supporting stdio and http modes""" + client_instance = await CloudberryMCPClient.create(mode=request.param) + yield client_instance + await client_instance.close() + + +@pytest.mark.asyncio +class TestCloudberryMCPClient: + """Apache Cloudberry MCP client test class""" + + async def test_list_capabilities(self, client): + """Test server capabilities list""" + tools = await client.list_tools() + resources = await client.list_resources() + prompts = await client.list_prompts() + + assert tools is not None + assert resources is not None + assert prompts is not None + + assert isinstance(tools, list) + assert isinstance(resources, list) + assert isinstance(prompts, list) + + async def test_get_schemas_resource(self, client): + """Test getting database schemas resource""" + try: + schemas = await client.get_resource("postgres://schemas") + assert schemas is not None + assert isinstance(schemas, list) + except Exception as e: + pytest.skip(f"Skipping test - unable to get schemas: {e}") + + async def test_get_database_info_resource(self, client): + """Test getting database info resource""" + try: + db_infos = await client.get_resource("postgres://database/info") + assert db_infos is not None + assert isinstance(db_infos, list) + except Exception as e: + pytest.skip(f"Skipping test - unable to get database info: {e}") + + async def test_get_database_summary_resource(self, client): + """Test getting database summary resource""" + try: + db_summary = await client.get_resource("postgres://database/summary") + assert db_summary is not None + assert isinstance(db_summary, list) + except Exception as e: + pytest.skip(f"Skipping test - unable to get database summary: {e}") + + @pytest.mark.parametrize("tool_name,parameters", [ + ("list_tables", {"schema": "public"}), + ("list_views", {"schema": "public"}), + ("list_columns", {"schema": "public", "table": "test"}), + ("list_indexes", {"schema": "public", "table": "test"}), + ("execute_query", {"query": "SELECT version()", "readonly": True}), + ("list_large_tables", {"limit": 5}), + ("get_table_stats", {"schema": "public", "table": "film"}), + ("explain_query", {"query": "SELECT version()"}), + ]) + async def test_tools(self, client, tool_name, parameters): + """Test various tool calls""" + try: + result = await client.call_tool(tool_name, parameters) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call tool {tool_name}: {e}") + + async def test_analyze_query_performance_prompt(self, client): + """Test query performance analysis prompt""" + try: + prompt = await client.get_prompt( + "analyze_query_performance", + params={ + "sql": "SELECT * FROM public.test", + "explain": "public.test", + "table_info": "100 rows, 10 MB" + } + ) + assert prompt is not None + assert prompt.description is not None + assert isinstance(prompt.messages, list) + except Exception as e: + pytest.skip(f"Skipping test - unable to get analyze_query_performance prompt: {e}") + + async def test_suggest_indexes_prompt(self, client): + """Test index suggestion prompt""" + try: + prompt = await client.get_prompt( + "suggest_indexes", + params={ + "query": "public", + "table_info": "public.test", + "table_stats": "100 rows, 10 MB" + } + ) + assert prompt is not None + assert prompt.description is not None + assert isinstance(prompt.messages, list) + except Exception as e: + pytest.skip(f"Skipping test - unable to get suggest_indexes prompt: {e}") + + async def test_database_health_check_prompt(self, client): + """Test database health check prompt""" + try: + prompt = await client.get_prompt("database_health_check") + assert prompt is not None + assert prompt.description is not None + assert isinstance(prompt.messages, list) + except Exception as e: + pytest.skip(f"Skipping test - unable to get database_health_check prompt: {e}") + + # User and permission management tests + async def test_list_users(self, client): + """Test listing all users""" + try: + result = await client.call_tool("list_users", {}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_users tool: {e}") + + async def test_list_user_permissions(self, client): + """Test listing user permissions""" + try: + result = await client.call_tool("list_user_permissions", {"username": "postgres"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_user_permissions tool: {e}") + + async def test_list_table_privileges(self, client): + """Test listing table privileges""" + try: + result = await client.call_tool("list_table_privileges", {"schema": "public", "table": "film"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_table_privileges tool: {e}") + + # Constraint and relationship management tests + async def test_list_constraints(self, client): + """Test listing constraints""" + try: + result = await client.call_tool("list_constraints", {"schema": "public", "table": "film"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_constraints tool: {e}") + + async def test_list_foreign_keys(self, client): + """Test listing foreign keys""" + try: + result = await client.call_tool("list_foreign_keys", {"schema": "public", "table": "film"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_foreign_keys tool: {e}") + + async def test_list_referenced_tables(self, client): + """Test listing referenced tables""" + try: + result = await client.call_tool("list_referenced_tables", {"schema": "public", "table": "film"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_referenced_tables tool: {e}") + + # Performance monitoring and optimization tests + async def test_get_slow_queries(self, client): + """Test getting slow queries""" + try: + result = await client.call_tool("get_slow_queries", {"limit": 5}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call get_slow_queries tool: {e}") + + async def test_get_index_usage(self, client): + """Test getting index usage""" + try: + result = await client.call_tool("get_index_usage", {"schema": "public"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call get_index_usage tool: {e}") + + async def test_get_table_bloat_info(self, client): + """Test getting table bloat information""" + try: + result = await client.call_tool("get_table_bloat_info", {"schema": "public", "limit": 5}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call get_table_bloat_info tool: {e}") + + async def test_get_database_activity(self, client): + """Test getting database activity""" + try: + result = await client.call_tool("get_database_activity", {}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call get_database_activity tool: {e}") + + async def test_get_vacuum_info(self, client): + """Test getting vacuum information""" + try: + result = await client.call_tool("get_vacuum_info", {"schema": "public", "table": "film"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call get_vacuum_info tool: {e}") + + # Database object management tests + async def test_list_functions(self, client): + """Test listing functions""" + try: + result = await client.call_tool("list_functions", {"schema": "public"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_functions tool: {e}") + + async def test_get_function_definition(self, client): + """Test getting function definition""" + try: + result = await client.call_tool("get_function_definition", {"schema": "public", "function_name": "now"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call get_function_definition tool: {e}") + + async def test_list_triggers(self, client): + """Test listing triggers""" + try: + result = await client.call_tool("list_triggers", {"schema": "public", "table": "film"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_triggers tool: {e}") + + async def test_list_materialized_views(self, client): + """Test listing materialized views""" + try: + result = await client.call_tool("list_materialized_views", {"schema": "public"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_materialized_views tool: {e}") + + async def test_get_materialized_view_definition(self, client): + """Test getting materialized view definition""" + try: + result = await client.call_tool("get_materialized_view_definition", {"schema": "public", "view_name": "film"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call get_materialized_view_definition tool: {e}") + + async def test_get_table_ddl(self, client): + """Test getting table DDL""" + try: + result = await client.call_tool("get_table_ddl", {"schema": "public", "table": "film"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call get_table_ddl tool: {e}") + + async def test_list_active_connections(self, client): + """Test listing active connections""" + try: + result = await client.call_tool("list_active_connections", {}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping test - unable to call list_active_connections tool: {e}") + + +@pytest.mark.asyncio +async def test_client_modes(): + """Test basic client functionality in different modes""" + for mode in ["stdio", "http"]: + client = await CloudberryMCPClient.create(mode=mode) + try: + # Basic connection test + tools = await client.list_tools() + assert isinstance(tools, list) + finally: + await client.close() diff --git a/mcp-server/tests/test_database_tools.py b/mcp-server/tests/test_database_tools.py new file mode 100644 index 00000000000..e0fcc644869 --- /dev/null +++ b/mcp-server/tests/test_database_tools.py @@ -0,0 +1,303 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +""" +Database tools test module +Tests newly added database management tool functionality +""" +import pytest +import pytest_asyncio +import asyncio +import json +from typing import Any +from pydantic import AnyUrl + +from cbmcp.client import CloudberryMCPClient + + +class CustomJSONEncoder(json.JSONEncoder): + def default(self, obj: Any) -> Any: + if isinstance(obj, AnyUrl): + return str(obj) + return super().default(obj) + + +@pytest.fixture +def event_loop(): + """Create event loop for async testing""" + loop = asyncio.get_event_loop_policy().new_event_loop() + yield loop + loop.close() + + +@pytest_asyncio.fixture(params=["stdio", "http"]) +async def client(request): + """Create CloudberryMCPClient instance supporting stdio and http modes""" + client_instance = await CloudberryMCPClient.create(mode=request.param) + yield client_instance + await client_instance.close() + + +@pytest.mark.asyncio +class TestDatabaseTools: + """Database management tools test class""" + + # User and permission management tests + async def test_list_users_basic(self, client): + """Test basic user listing functionality""" + try: + result = await client.call_tool("list_users", {}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping user list test: {e}") + + async def test_list_user_permissions(self, client): + """Test user permissions query""" + try: + result = await client.call_tool("list_user_permissions", {"username": "postgres"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping user permissions test: {e}") + + async def test_list_table_privileges(self, client): + """Test table privileges query""" + try: + result = await client.call_tool("list_table_privileges", { + "schema": "public", + "table": "film" + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping table privileges test: {e}") + + # Constraint and relationship management tests + async def test_list_constraints(self, client): + """Test constraints query""" + try: + result = await client.call_tool("list_constraints", { + "schema": "public", + "table": "film" + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping constraints query test: {e}") + + async def test_list_foreign_keys(self, client): + """Test foreign keys query""" + try: + result = await client.call_tool("list_foreign_keys", { + "schema": "public", + "table": "film" + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping foreign keys query test: {e}") + + async def test_list_referenced_tables(self, client): + """Test referenced tables query""" + try: + result = await client.call_tool("list_referenced_tables", { + "schema": "public", + "table": "film" + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping referenced tables query test: {e}") + + # Performance monitoring and optimization tests + async def test_get_slow_queries(self, client): + """Test slow queries retrieval""" + result = await client.call_tool("get_slow_queries", {"limit": 5}) + assert result is not None + assert hasattr(result, 'structured_content') + + async def test_get_index_usage(self, client): + """Test index usage""" + try: + result = await client.call_tool("get_index_usage", {"schema": "public"}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping index usage test: {e}") + + async def test_get_table_bloat_info(self, client): + """Test table bloat information""" + try: + result = await client.call_tool("get_table_bloat_info", { + "schema": "public", + "limit": 5 + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping table bloat info test: {e}") + + async def test_get_database_activity(self, client): + """Test database activity monitoring""" + try: + result = await client.call_tool("get_database_activity", {}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping database activity test: {e}") + + async def test_get_vacuum_info(self, client): + """Test vacuum information""" + try: + result = await client.call_tool("get_vacuum_info", { + "schema": "public", + "table": "film" + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping vacuum info test: {e}") + + # Database object management tests + async def test_list_functions(self, client): + """Test functions list""" + result = await client.call_tool("list_functions", {"schema": "public"}) + assert result is not None + assert hasattr(result, 'structured_content') + + async def test_get_function_definition(self, client): + """Test function definition retrieval""" + try: + result = await client.call_tool("get_function_definition", { + "schema": "public", + "function_name": "now" + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping function definition test: {e}") + + async def test_list_triggers(self, client): + """Test triggers list""" + try: + result = await client.call_tool("list_triggers", { + "schema": "public", + "table": "film" + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping triggers list test: {e}") + + async def test_list_materialized_views(self, client): + """Test materialized views list""" + result = await client.call_tool("list_materialized_views", {"schema": "public"}) + assert result is not None + assert hasattr(result, 'structured_content') + + async def test_get_materialized_view_ddl(self, client): + """Test materialized view DDL""" + try: + result = await client.call_tool("get_materialized_view_ddl", { + "schema": "public", + "view_name": "film" + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping materialized view DDL test: {e}") + + async def test_get_table_ddl(self, client): + """Test table DDL retrieval""" + try: + result = await client.call_tool("get_table_ddl", { + "schema": "public", + "table": "film" + }) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping table DDL test: {e}") + + async def test_list_active_connections(self, client): + """Test active connections list""" + try: + result = await client.call_tool("list_active_connections", {}) + assert result is not None + assert hasattr(result, 'structured_content') + except Exception as e: + pytest.skip(f"Skipping active connections test: {e}") + + async def test_all_tools_availability(self, client): + """Test availability of all newly added tools""" + tools = await client.list_tools() + tool_names = [tool.name for tool in tools] + + new_tools = [ + "list_users", "list_user_permissions", "list_table_privileges", + "list_constraints", "list_foreign_keys", "list_referenced_tables", + "get_slow_queries", "get_index_usage", "get_table_bloat_info", + "get_database_activity", "get_vacuum_info", "list_functions", + "get_function_definition", "list_triggers", "list_materialized_views", + "get_materialized_view_ddl", "get_table_ddl", "list_active_connections" + ] + + available_tools = [tool for tool in new_tools if tool in tool_names] + print(f"Found {len(available_tools)} new tools: {available_tools}") + + async def test_tool_parameter_validation(self, client): + """Test tool parameter validation""" + try: + await client.call_tool("get_table_ddl", {"schema": "public"}) + except Exception: + pass + + try: + result = await client.call_tool("get_table_ddl", { + "schema": "public", + "table": "film" + }) + assert result is not None + except Exception as e: + pytest.skip(f"Skipping DDL test: {e}") + + +@pytest.mark.asyncio +async def test_database_tools_comprehensive(): + """Comprehensive test of all database tools""" + client = await CloudberryMCPClient.create() + try: + tools = await client.list_tools() + assert isinstance(tools, list) + + try: + users = await client.call_tool("list_users", {}) + assert users is not None + + activity = await client.call_tool("get_database_activity", {}) + assert activity is not None + + connections = await client.call_tool("list_active_connections", {}) + assert connections is not None + + except Exception as e: + pytest.skip(f"Skipping comprehensive test: {e}") + finally: + await client.close() From f50a6113bd35f7e1c1487e64960a59bc4c19c9be Mon Sep 17 00:00:00 2001 From: Leonid Borchuk Date: Tue, 2 Sep 2025 13:28:14 +0000 Subject: [PATCH 163/260] Add ubuntu22.04 build/test docker containers Ubuntu is one of the most popular Linux distros and is widely used not only on workstations, but also on server-side platforms. We use Debian-based distributions as the main operating system platform in our environment. Greenplum works on Ubuntu without any issues, and our tests with Cloudberry show the same. Here I have added support for Ubuntu Jammy LTS in Cloudberry. As for Rocky Linux distros, we create a Docker container with all dependencies already resolved. Then, we build a Debian package using debhelper inside the container. The container can also be used to run tests, but that is outside the scope of this PR. Also there is some changes compared to RPM-based builds: 1. Debian packages (and docker containers) does not need to build libxerces since 22.04 repo contains libxerces-c3.2. libxerces-c3.2 fits perfectly for cloudberry. 2. Debian prohibits install something inside /usr/local/. So we need to build our binaries somewhere else, then list relative local build paths in control file and finally write install script to copy it in /usr/local/cloudberry-db. In reality we just build to /usr/cloudberry-db and then create symbolic link /usr/cloudberry-db -> /usr/local/cloudberry-db --- .../docker-cbdb-build-containers.yml | 7 +- .../workflows/docker-cbdb-test-containers.yml | 7 +- .../cloudberry/scripts/build-cloudberry.sh | 4 +- .../cloudberry/scripts/cloudberry-utils.sh | 29 ++- .../scripts/configure-cloudberry.sh | 27 ++- .../scripts/create-cloudberry-demo-cluster.sh | 4 +- .../cloudberry/scripts/unittest-cloudberry.sh | 2 +- devops/build/packaging/deb/build-deb.sh | 164 +++++++++++++ .../build/packaging/deb/ubuntu22.04/changelog | 5 + devops/build/packaging/deb/ubuntu22.04/compat | 1 + .../build/packaging/deb/ubuntu22.04/control | 101 ++++++++ .../build/packaging/deb/ubuntu22.04/install | 1 + .../build/packaging/deb/ubuntu22.04/postinst | 12 + .../build/packaging/deb/ubuntu22.04/preinst | 13 + devops/build/packaging/deb/ubuntu22.04/rules | 49 ++++ .../packaging/deb/ubuntu22.04/source/format | 1 + .../deb/ubuntu22.04/source/local-options | 2 + .../docker/build/ubuntu22.04/Dockerfile | 196 +++++++++++++++ .../build/ubuntu22.04/configs/90-cbdb-limits | 32 +++ .../ubuntu22.04/configs/gpinitsystem.conf | 89 +++++++ .../build/ubuntu22.04/configs/init_system.sh | 195 +++++++++++++++ .../build/ubuntu22.04/tests/requirements.txt | 3 + .../tests/testinfra/test_cloudberry_db_env.py | 128 ++++++++++ .../deploy/docker/test/ubuntu22.04/Dockerfile | 141 +++++++++++ .../test/ubuntu22.04/configs/90-cbdb-limits | 32 +++ .../ubuntu22.04/configs/gpinitsystem.conf | 87 +++++++ .../test/ubuntu22.04/configs/init_system.sh | 224 ++++++++++++++++++ pom.xml | 7 +- 28 files changed, 1542 insertions(+), 21 deletions(-) create mode 100755 devops/build/packaging/deb/build-deb.sh create mode 100644 devops/build/packaging/deb/ubuntu22.04/changelog create mode 100644 devops/build/packaging/deb/ubuntu22.04/compat create mode 100644 devops/build/packaging/deb/ubuntu22.04/control create mode 100644 devops/build/packaging/deb/ubuntu22.04/install create mode 100644 devops/build/packaging/deb/ubuntu22.04/postinst create mode 100644 devops/build/packaging/deb/ubuntu22.04/preinst create mode 100755 devops/build/packaging/deb/ubuntu22.04/rules create mode 100644 devops/build/packaging/deb/ubuntu22.04/source/format create mode 100644 devops/build/packaging/deb/ubuntu22.04/source/local-options create mode 100644 devops/deploy/docker/build/ubuntu22.04/Dockerfile create mode 100644 devops/deploy/docker/build/ubuntu22.04/configs/90-cbdb-limits create mode 100644 devops/deploy/docker/build/ubuntu22.04/configs/gpinitsystem.conf create mode 100755 devops/deploy/docker/build/ubuntu22.04/configs/init_system.sh create mode 100644 devops/deploy/docker/build/ubuntu22.04/tests/requirements.txt create mode 100644 devops/deploy/docker/build/ubuntu22.04/tests/testinfra/test_cloudberry_db_env.py create mode 100644 devops/deploy/docker/test/ubuntu22.04/Dockerfile create mode 100644 devops/deploy/docker/test/ubuntu22.04/configs/90-cbdb-limits create mode 100644 devops/deploy/docker/test/ubuntu22.04/configs/gpinitsystem.conf create mode 100644 devops/deploy/docker/test/ubuntu22.04/configs/init_system.sh diff --git a/.github/workflows/docker-cbdb-build-containers.yml b/.github/workflows/docker-cbdb-build-containers.yml index f5f8676cd4c..62973613a48 100644 --- a/.github/workflows/docker-cbdb-build-containers.yml +++ b/.github/workflows/docker-cbdb-build-containers.yml @@ -60,6 +60,7 @@ on: paths: - 'devops/deploy/docker/build/rocky8/**' - 'devops/deploy/docker/build/rocky9/**' + - 'devops/deploy/docker/build/ubuntu22.04/**' workflow_dispatch: # Manual trigger # Prevent multiple workflow runs from interfering with each other @@ -73,10 +74,10 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest - # Matrix strategy to build for both Rocky Linux 8 and 9 + # Matrix strategy to build for both Rocky Linux 8 and 9, Ubuntu 22.04 strategy: matrix: - platform: ['rocky8', 'rocky9'] + platform: ['rocky8', 'rocky9', 'ubuntu22.04'] steps: # Checkout repository code with full history @@ -103,6 +104,8 @@ jobs: - 'devops/deploy/docker/build/rocky8/**' rocky9: - 'devops/deploy/docker/build/rocky9/**' + ubuntu22.04: + - 'devops/deploy/docker/build/ubuntu22.04/**' # Set up QEMU for multi-architecture support # This allows building ARM64 images on AMD64 infrastructure and vice versa diff --git a/.github/workflows/docker-cbdb-test-containers.yml b/.github/workflows/docker-cbdb-test-containers.yml index 87fcf245edc..57d8819bcd3 100644 --- a/.github/workflows/docker-cbdb-test-containers.yml +++ b/.github/workflows/docker-cbdb-test-containers.yml @@ -49,6 +49,7 @@ on: paths: - 'devops/deploy/docker/test/rocky8/**' - 'devops/deploy/docker/test/rocky9/**' + - 'devops/deploy/docker/test/ubuntu22.04/**' workflow_dispatch: # Manual trigger # Prevent multiple workflow runs from interfering with each other @@ -62,8 +63,8 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - # Build for both Rocky Linux 8 and 9 - platform: ['rocky8', 'rocky9'] + # Build for both Rocky Linux 8 and 9, Ubuntu 22.04 + platform: ['rocky8', 'rocky9', 'ubuntu22.04'] steps: # Checkout repository code @@ -87,6 +88,8 @@ jobs: - 'devops/deploy/docker/test/rocky8/**' rocky9: - 'devops/deploy/docker/test/rocky9/**' + ubuntu22.04: + - 'devops/deploy/docker/test/ubuntu22.04/**' # Skip if no changes for current platform - name: Skip if not relevant diff --git a/devops/build/automation/cloudberry/scripts/build-cloudberry.sh b/devops/build/automation/cloudberry/scripts/build-cloudberry.sh index db04f1b7592..efa061a0f83 100755 --- a/devops/build/automation/cloudberry/scripts/build-cloudberry.sh +++ b/devops/build/automation/cloudberry/scripts/build-cloudberry.sh @@ -45,7 +45,7 @@ # Prerequisites: # - configure-cloudberry.sh must be run first # - Required build dependencies must be installed -# - /usr/local/cloudberry-db/lib must exist and be writable +# - ${BUILD_DESTINATION}/lib (by default /usr/local/cloudberry-db/lib) must exist and be writable # # Exit Codes: # 0 - Build and installation completed successfully @@ -71,7 +71,7 @@ init_environment "Cloudberry Build Script" "${BUILD_LOG}" # Set environment log_section "Environment Setup" -export LD_LIBRARY_PATH=/usr/local/cloudberry-db/lib:LD_LIBRARY_PATH +export LD_LIBRARY_PATH=${BUILD_DESTINATION}/lib:LD_LIBRARY_PATH log_section_end "Environment Setup" # Build process diff --git a/devops/build/automation/cloudberry/scripts/cloudberry-utils.sh b/devops/build/automation/cloudberry/scripts/cloudberry-utils.sh index 01b0b1b8381..c8d0f8cc44e 100755 --- a/devops/build/automation/cloudberry/scripts/cloudberry-utils.sh +++ b/devops/build/automation/cloudberry/scripts/cloudberry-utils.sh @@ -79,11 +79,15 @@ # # -------------------------------------------------------------------- +DEFAULT_BUILD_DESTINATION=/usr/local/cloudberry-db + # Initialize logging and environment init_environment() { local script_name=$1 local log_file=$2 + init_build_destination_var + echo "=== Initializing environment for ${script_name} ===" echo "${script_name} executed at $(date)" | tee -a "${log_file}" echo "Whoami: $(whoami)" | tee -a "${log_file}" @@ -91,6 +95,7 @@ init_environment() { echo "Working directory: $(pwd)" | tee -a "${log_file}" echo "Source directory: ${SRC_DIR}" | tee -a "${log_file}" echo "Log directory: ${LOG_DIR}" | tee -a "${log_file}" + echo "Build destination: ${BUILD_DESTINATION}" | tee -a "${log_file}" if [ -z "${SRC_DIR:-}" ]; then echo "Error: SRC_DIR environment variable is not set" | tee -a "${log_file}" @@ -121,7 +126,7 @@ run_psql_cmd() { # Function to source Cloudberry environment source_cloudberry_env() { echo "=== Sourcing Cloudberry environment ===" | tee -a "${LOG_DIR}/environment.log" - source /usr/local/cloudberry-db/cloudberry-env.sh + source ${BUILD_DESTINATION}/cloudberry-env.sh source ${SRC_DIR}/../cloudberry/gpAux/gpdemo/gpdemo-env.sh } @@ -146,3 +151,25 @@ log_completion() { local timestamp=$(date "+%Y.%m.%d-%H.%M.%S") echo "${script_name} execution completed successfully at ${timestamp}" | tee -a "${log_file}" } + +# Function to get OS identifier +detect_os() { + if [ -f /etc/os-release ]; then + . /etc/os-release + OS_ID=$ID + OS_VERSION=$VERSION_ID + else + echo "Unsupported system: cannot detect OS" >&2 + exit 99 + fi +} + +# Init BUILD_DESTINATION default value if not set +init_build_destination_var() { + + if [ -z ${BUILD_DESTINATION+x} ]; then + export BUILD_DESTINATION=${DEFAULT_BUILD_DESTINATION} + exec "$@" + fi + +} diff --git a/devops/build/automation/cloudberry/scripts/configure-cloudberry.sh b/devops/build/automation/cloudberry/scripts/configure-cloudberry.sh index 4d84c3bfc21..58d64922ac7 100755 --- a/devops/build/automation/cloudberry/scripts/configure-cloudberry.sh +++ b/devops/build/automation/cloudberry/scripts/configure-cloudberry.sh @@ -23,7 +23,7 @@ # Description: Configures Apache Cloudberry build environment and runs # ./configure with optimized settings. Performs the # following: -# 1. Prepares /usr/local/cloudberry-db directory +# 1. Prepares ${BUILD_DESTINATION} (by default /usr/local/cloudberry-db) directory # 2. Sets up library dependencies # 3. Configures build with required features enabled # @@ -49,6 +49,7 @@ # # Required Environment Variables: # SRC_DIR - Root source directory +# BUILD_DESTINATION - Directory to build binaries # # Optional Environment Variables: # LOG_DIR - Directory for logs (defaults to ${SRC_DIR}/build-logs) @@ -92,6 +93,10 @@ set -euo pipefail SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source "${SCRIPT_DIR}/cloudberry-utils.sh" +# Call it before conditional logic +detect_os +echo "Detected OS: $OS_ID $OS_VERSION" + # Define log directory and files export LOG_DIR="${SRC_DIR}/build-logs" CONFIGURE_LOG="${LOG_DIR}/configure.log" @@ -101,18 +106,20 @@ init_environment "Cloudberry Configure Script" "${CONFIGURE_LOG}" # Initial setup log_section "Initial Setup" -execute_cmd sudo rm -rf /usr/local/cloudberry-db || exit 2 +execute_cmd sudo rm -rf ${BUILD_DESTINATION} || exit 2 execute_cmd sudo chmod a+w /usr/local || exit 2 -execute_cmd mkdir -p /usr/local/cloudberry-db/lib || exit 2 -execute_cmd sudo cp /usr/local/xerces-c/lib/libxerces-c.so \ - /usr/local/xerces-c/lib/libxerces-c-3.3.so \ - /usr/local/cloudberry-db/lib || exit 3 -execute_cmd sudo chown -R gpadmin:gpadmin /usr/local/cloudberry-db || exit 2 +execute_cmd sudo mkdir -p ${BUILD_DESTINATION}/lib || exit 2 +if [[ "$OS_ID" == "rocky" && "$OS_VERSION" =~ ^(8|9) ]]; then + execute_cmd sudo cp /usr/local/xerces-c/lib/libxerces-c.so \ + /usr/local/xerces-c/lib/libxerces-c-3.3.so \ + ${BUILD_DESTINATION}/lib || exit 3 +fi +execute_cmd sudo chown -R gpadmin:gpadmin ${BUILD_DESTINATION} || exit 2 log_section_end "Initial Setup" # Set environment log_section "Environment Setup" -export LD_LIBRARY_PATH=/usr/local/cloudberry-db/lib:LD_LIBRARY_PATH +export LD_LIBRARY_PATH=${BUILD_DESTINATION}/lib:LD_LIBRARY_PATH log_section_end "Environment Setup" # Add debug options if ENABLE_DEBUG is set to "true" @@ -127,7 +134,7 @@ fi # Configure build log_section "Configure" -execute_cmd ./configure --prefix=/usr/local/cloudberry-db \ +execute_cmd ./configure --prefix=${BUILD_DESTINATION} \ --disable-external-fts \ --enable-gpcloud \ --enable-ic-proxy \ @@ -152,7 +159,7 @@ execute_cmd ./configure --prefix=/usr/local/cloudberry-db \ --with-openssl \ --with-uuid=e2fs \ --with-includes=/usr/local/xerces-c/include \ - --with-libraries=/usr/local/cloudberry-db/lib || exit 4 + --with-libraries=${BUILD_DESTINATION}/lib || exit 4 log_section_end "Configure" # Capture version information diff --git a/devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh b/devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh index e01d62fac9c..ec582e80402 100755 --- a/devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh +++ b/devops/build/automation/cloudberry/scripts/create-cloudberry-demo-cluster.sh @@ -35,7 +35,7 @@ # LOG_DIR - Directory for logs (defaults to ${SRC_DIR}/build-logs) # # Prerequisites: -# - Apache Cloudberry must be installed (/usr/local/cloudberry-db) +# - Apache Cloudberry must be installed (default location is /usr/local/cloudberry-db) # - SSH must be configured for passwordless access to localhost # - User must have permissions to create cluster directories # - PostgreSQL client tools (psql) must be available @@ -79,7 +79,7 @@ init_environment "Cloudberry Demo Cluster Script" "${CLUSTER_LOG}" # Setup environment log_section "Environment Setup" -source /usr/local/cloudberry-db/cloudberry-env.sh || exit 1 +source ${BUILD_DESTINATION}/cloudberry-env.sh || exit 1 log_section_end "Environment Setup" # Verify SSH access diff --git a/devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh b/devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh index f7bc120bd08..97107ea1a9f 100755 --- a/devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh +++ b/devops/build/automation/cloudberry/scripts/unittest-cloudberry.sh @@ -56,7 +56,7 @@ init_environment "Cloudberry Unittest Script" "${UNITTEST_LOG}" # Set environment log_section "Environment Setup" -export LD_LIBRARY_PATH=/usr/local/cloudberry-db/lib:LD_LIBRARY_PATH +export LD_LIBRARY_PATH=${BUILD_DESTINATION}/lib:LD_LIBRARY_PATH log_section_end "Environment Setup" # Unittest process diff --git a/devops/build/packaging/deb/build-deb.sh b/devops/build/packaging/deb/build-deb.sh new file mode 100755 index 00000000000..2e7312be53f --- /dev/null +++ b/devops/build/packaging/deb/build-deb.sh @@ -0,0 +1,164 @@ +#!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# Script Name: build-deb.sh +# +# Description: +# This script automates the process of building an DEB package using a specified +# version number. It ensures that the necessary tools are installed +# and that the control file exists before attempting to build the DEB. The script +# also includes error handling to provide meaningful feedback in case of failure. +# +# Usage: +# ./build-deb.sh [-v ] [-h] [--dry-run] +# +# Options: +# -v, --version : Specify the version (required) +# -h, --help : Display this help and exit +# -n, --dry-run : Show what would be done, without making any changes +# +# Example: +# ./build-deb.sh -v 1.5.5 # Build with version 1.5.5 +# +# Prerequisites: +# - The dpkg-buildpackage package must be installed (provides the dpkg-buildpackage command). +# - The control file must exist at debian/control. +# +# Error Handling: +# The script includes checks to ensure: +# - The version option (-v or --version) is provided. +# - The necessary commands are available. +# - The control file exists at the specified location. +# If any of these checks fail, the script exits with an appropriate error message. + +# Enable strict mode for better error handling +set -euo pipefail + +# Default values +VERSION="" +RELEASE="1" +DEBUG_BUILD=false + +# Function to display usage information +usage() { + echo "Usage: $0 [-v ] [-h] [--dry-run]" + echo " -v, --version : Specify the version (optional)" + echo " -h, --help : Display this help and exit" + echo " -n, --dry-run : Show what would be done, without making any changes" + exit 1 +} + +# Function to check if required commands are available +check_commands() { + local cmds=("dpkg-buildpackage") + for cmd in "${cmds[@]}"; do + if ! command -v "$cmd" &> /dev/null; then + echo "Error: Required command '$cmd' not found. Please install it before running the script." + exit 1 + fi + done +} + +function print_changelog() { +cat < $(date +'%a, %d %b %Y %H:%M:%S %z') +EOF +} + +# Parse options +while [[ "$#" -gt 0 ]]; do + case $1 in + -v|--version) + VERSION="$2" + shift 2 + ;; + -h|--help) + usage + ;; + -n|--dry-run) + DRY_RUN=true + shift + ;; + *) + echo "Unknown option: ($1)" + shift + ;; + esac +done + +export CBDB_FULL_VERSION=$VERSION + +# Set version if not provided +if [ -z "${VERSION}" ]; then + export CBDB_FULL_VERSION=$(./getversion | cut -d'-' -f 1 | cut -d'+' -f 1) +fi + +if [[ ! $CBDB_FULL_VERSION =~ ^[0-9] ]]; then + export CBDB_FULL_VERSION="0.$CBDB_FULL_VERSION" +fi + +if [ -z ${BUILD_NUMBER+x} ]; then + export BUILD_NUMBER=1 +fi + +if [ -z ${BUILD_USER+x} ]; then + export BUILD_USER=github +fi + +export CBDB_PKG_VERSION=${CBDB_FULL_VERSION}-${BUILD_NUMBER}-$(git --git-dir=.git rev-list HEAD --count).$(git --git-dir=.git rev-parse --short HEAD) + +# Check if required commands are available +check_commands + +# Define the control file path +CONTROL_FILE=debian/control + +# Check if the spec file exists +if [ ! -f "$CONTROL_FILE" ]; then + echo "Error: Control file not found at $CONTROL_FILE." + exit 1 +fi + +# Build the rpmbuild command based on options +DEBBUILD_CMD="dpkg-buildpackage -us -uc" + +# Dry-run mode +if [ "${DRY_RUN:-false}" = true ]; then + echo "Dry-run mode: This is what would be done:" + print_changelog + echo "" + echo "$DEBBUILD_CMD" + exit 0 +fi + +# Run debbuild with the provided options +echo "Building DEB with Version $CBDB_FULL_VERSION ..." + +print_changelog > debian/changelog + +if ! eval "$DEBBUILD_CMD"; then + echo "Error: deb build failed." + exit 1 +fi + +# Print completion message +echo "DEB build completed successfully with package $CBDB_PKG_VERSION" diff --git a/devops/build/packaging/deb/ubuntu22.04/changelog b/devops/build/packaging/deb/ubuntu22.04/changelog new file mode 100644 index 00000000000..211d271b88f --- /dev/null +++ b/devops/build/packaging/deb/ubuntu22.04/changelog @@ -0,0 +1,5 @@ +apache-cloudberry-db-incubating (2.0.0) jammy; urgency=medium + + * Initial release. + + -- Cloudberry Team Wed, 26 Mar 2025 11:10:44 +0000 diff --git a/devops/build/packaging/deb/ubuntu22.04/compat b/devops/build/packaging/deb/ubuntu22.04/compat new file mode 100644 index 00000000000..ec635144f60 --- /dev/null +++ b/devops/build/packaging/deb/ubuntu22.04/compat @@ -0,0 +1 @@ +9 diff --git a/devops/build/packaging/deb/ubuntu22.04/control b/devops/build/packaging/deb/ubuntu22.04/control new file mode 100644 index 00000000000..c4bc2e6f84d --- /dev/null +++ b/devops/build/packaging/deb/ubuntu22.04/control @@ -0,0 +1,101 @@ +Source: apache-cloudberry-db-incubating +Maintainer: Apache Cloudberry (Incubating) +Section: database +Build-Depends: debhelper (>= 9), + bison, + ca-certificates-java, + ca-certificates, + cmake, + curl, + cgroup-tools, + flex, + gcc-11, + g++-11, + git, + krb5-multidev, + libapr1-dev, + libbz2-dev, + libcurl4-gnutls-dev, + libevent-dev, + libkrb5-dev, + libldap2-dev, + libperl-dev, + libreadline6-dev, + libssl-dev, + libxml2-dev, + libyaml-dev, + libzstd-dev, + libaprutil1-dev, + libpam0g-dev, + libpam0g, + libcgroup1, + libyaml-0-2, + libldap-2.5-0, + libssl3, + libxerces-c-dev, + libxerces-c3.2, + ninja-build, + quilt, + unzip, + wget, + zlib1g-dev, + libuv1-dev + +Package: apache-cloudberry-db-incubating +Provides: apache-cloudberry-db +Architecture: amd64 +Depends: curl, + cgroup-tools, + iputils-ping, + krb5-multidev, + less, + libapr1, + libbz2-1.0, + libcurl4, + libcurl3-gnutls, + libevent-2.1-7, + libreadline8, + libxml2, + libyaml-0-2, + libldap-2.5-0, + libzstd1, + libcgroup1, + libssl3, + libpam0g, + libxerces-c3.2, + locales, + net-tools, + openssh-client, + openssh-server, + openssl, + python-six, + python2.7, + python2.7-dev, + rsync, + wget, + zlib1g, + libuv1 +Description: Apache Cloudberry (incubating) is an advanced, open-source, massively + parallel processing (MPP) data warehouse developed from PostgreSQL and + Greenplum. It is designed for high-performance analytics on + large-scale data sets, offering powerful analytical capabilities and + enhanced security features. + Key Features: + - Massively parallel processing for optimized performance + - Advanced analytics for complex data processing + - Integration with ETL and BI tools + - Compatibility with multiple data sources and formats + - Enhanced security features + Apache Cloudberry supports both batch processing and real-time data + warehousing, making it a versatile solution for modern data + environments. + Apache Cloudberry (incubating) is an effort undergoing incubation at + the Apache Software Foundation (ASF), sponsored by the Apache + Incubator PMC. + Incubation is required of all newly accepted projects until a further + review indicates that the infrastructure, communications, and decision + making process have stabilized in a manner consistent with other + successful ASF projects. + While incubation status is not necessarily a reflection of the + completeness or stability of the code, it does indicate that the + project has yet to be fully endorsed by the ASF. diff --git a/devops/build/packaging/deb/ubuntu22.04/install b/devops/build/packaging/deb/ubuntu22.04/install new file mode 100644 index 00000000000..3e29bb0dd35 --- /dev/null +++ b/devops/build/packaging/deb/ubuntu22.04/install @@ -0,0 +1 @@ +debian/build/* /usr/cloudberry-db diff --git a/devops/build/packaging/deb/ubuntu22.04/postinst b/devops/build/packaging/deb/ubuntu22.04/postinst new file mode 100644 index 00000000000..ccb33a54033 --- /dev/null +++ b/devops/build/packaging/deb/ubuntu22.04/postinst @@ -0,0 +1,12 @@ +#!/bin/bash + +set -e + +GPADMIN=gpadmin +GPHOME=/usr/cloudberry-db + +if [ "$1" = configure ]; then + + ln -sf ${GPHOME} /usr/local/cloudberry-db + +fi diff --git a/devops/build/packaging/deb/ubuntu22.04/preinst b/devops/build/packaging/deb/ubuntu22.04/preinst new file mode 100644 index 00000000000..29d6211fc2b --- /dev/null +++ b/devops/build/packaging/deb/ubuntu22.04/preinst @@ -0,0 +1,13 @@ +#!/bin/bash + +set -e + +GPADMIN=gpadmin + +case $1 in + install|upgrade) + id "${GPADMIN}" >> /dev/null 2>&1 || \ + useradd -r -m -d /home/${GPADMIN} -s /bin/bash ${GPADMIN} + ;; +esac + diff --git a/devops/build/packaging/deb/ubuntu22.04/rules b/devops/build/packaging/deb/ubuntu22.04/rules new file mode 100755 index 00000000000..6213985b48c --- /dev/null +++ b/devops/build/packaging/deb/ubuntu22.04/rules @@ -0,0 +1,49 @@ +#!/usr/bin/make -f + +DH_VERBOSE = 1 +DPKG_EXPORT_BUILDFLAGS = 1 + +CBDB_BIN_PATH := /usr/local/cloudberry-db +DEBIAN_DESTINATION := $(shell pwd)/debian/build + +# assumes that CWD is root of cbdb source +CBDB_PKG_VERSION := $(CBDB_PKG_VERSION) +PACKAGE_CBDB := $(shell cat debian/control | egrep "^Package: " | cut -d " " -f 2) +PATH := ${DEBIAN_DESTINATION}/bin:${PATH} + +.PHONY: gpinstall + +include /usr/share/dpkg/default.mk + +%: + dh $@ --parallel + +gpinstall: + make install + +override_dh_auto_install: gpinstall + # the staging directory for creating a debian is NOT the right GPHOME. + # change GPHOME to point to the post-install target install directory. + sed -i "s#GPHOME=.*#GPHOME=${CBDB_BIN_PATH}#g" ${DEBIAN_DESTINATION}/cloudberry-env.sh + +override_dh_auto_build: + echo "Skipping build" + +override_dh_auto_clean: + echo "Skipping clean" + +override_dh_auto_configure: + echo "Skipping configure" + +override_dh_auto_test: + echo "Skipping auto test" + +override_dh_gencontrol: + echo "using version ${CBDB_PKG_VERSION} for binary Cloudberry" + dh_gencontrol -- -v${CBDB_PKG_VERSION} -p${PACKAGE_CBDB} + +override_dh_shlibdeps: + LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/libfakeroot:${DEBIAN_DESTINATION}/lib dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info + +clean_dev_local: + rm -rf ${DEBIAN_DESTINATION} diff --git a/devops/build/packaging/deb/ubuntu22.04/source/format b/devops/build/packaging/deb/ubuntu22.04/source/format new file mode 100644 index 00000000000..89ae9db8f88 --- /dev/null +++ b/devops/build/packaging/deb/ubuntu22.04/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/devops/build/packaging/deb/ubuntu22.04/source/local-options b/devops/build/packaging/deb/ubuntu22.04/source/local-options new file mode 100644 index 00000000000..00131ee8c41 --- /dev/null +++ b/devops/build/packaging/deb/ubuntu22.04/source/local-options @@ -0,0 +1,2 @@ +#abort-on-upstream-changes +#unapply-patches diff --git a/devops/deploy/docker/build/ubuntu22.04/Dockerfile b/devops/deploy/docker/build/ubuntu22.04/Dockerfile new file mode 100644 index 00000000000..7a3abd61c85 --- /dev/null +++ b/devops/deploy/docker/build/ubuntu22.04/Dockerfile @@ -0,0 +1,196 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Apache Cloudberry (incubating) is an effort undergoing incubation at +# the Apache Software Foundation (ASF), sponsored by the Apache +# Incubator PMC. +# +# Incubation is required of all newly accepted projects until a +# further review indicates that the infrastructure, communications, +# and decision making process have stabilized in a manner consistent +# with other successful ASF projects. +# +# While incubation status is not necessarily a reflection of the +# completeness or stability of the code, it does indicate that the +# project has yet to be fully endorsed by the ASF. +# +# -------------------------------------------------------------------- +# Dockerfile for Apache Cloudberry Base Environment +# -------------------------------------------------------------------- +# This Dockerfile sets up a Ubuntu jammy 22.04 -based container to serve as +# a base environment for evaluating the Apache Cloudberry. It installs +# necessary system utilities, configures the environment for SSH access, +# and sets up a 'gpadmin' user with sudo privileges. The Apache Cloudberry +# DEB can be installed into this container for testing and +# functional verification. +# +# Key Features: +# - Locale setup for en_US.UTF-8 +# - SSH daemon setup for remote access +# - Essential system utilities installation +# - Separate user creation and configuration steps +# +# Security Considerations: +# - This Dockerfile prioritizes ease of use for functional testing and +# evaluation. It includes configurations such as passwordless sudo access +# for the 'gpadmin' user and SSH access with password authentication. +# - These configurations are suitable for testing and development but +# should NOT be used in a production environment due to potential security +# risks. +# +# Usage: +# docker build -t cloudberry-db-base-env . +# docker run -h cdw -it cloudberry-db-base-env +# -------------------------------------------------------------------- + +FROM ubuntu:22.04 + +# Argument for configuring the timezone +ARG TIMEZONE_VAR="Europe/London" + +# Environment variables for locale and user +ENV container=docker +ENV LANG=en_US.UTF-8 +ENV USER=gpadmin +ENV TZ=${TIMEZONE_VAR} +ENV DEBIAN_FRONTEND=noninteractive + +# -------------------------------------------------------------------- +# Install Development Tools and Utilities +# -------------------------------------------------------------------- + +RUN apt-get update && \ + apt-get install -y -qq \ + htop \ + bat \ + silversearcher-ag \ + vim \ + wget && \ + apt-get install -y -qq locales && \ + locale-gen "en_US.UTF-8" && \ + update-locale LANG="en_US.UTF-8" && \ + apt-get install -y -qq \ + bison \ + build-essential \ + cmake \ + dpkg-dev \ + fakeroot \ + flex \ + g++-11 \ + gcc-11 \ + git \ + iproute2 \ + iputils-ping \ + libapr1-dev \ + libbz2-dev \ + libcurl4-gnutls-dev \ + libevent-dev \ + libipc-run-perl \ + libkrb5-dev \ + libldap-dev \ + liblz4-dev \ + libpam0g-dev \ + libperl-dev \ + libprotobuf-dev \ + libreadline-dev \ + libssl-dev \ + libuv1-dev \ + libxerces-c-dev \ + libxml2-dev \ + libyaml-dev \ + libzstd-dev \ + lsof \ + make \ + openssh-server \ + pkg-config \ + protobuf-compiler \ + python3-distutils \ + python3-pip \ + python3-setuptools \ + python3.10 \ + python3.10-dev \ + rsync \ + sudo \ + tzdata \ + zlib1g-dev && \ + apt-get install -y -qq \ + ca-certificates-java \ + cgroup-tools \ + curl \ + debhelper \ + libaprutil1-dev \ + libcgroup1 \ + ninja-build \ + quilt \ + unzip && \ + apt-get clean && rm -rf /var/lib/apt/lists/* && \ + cd && GO_VERSION="go1.23.4" && \ + ARCH=$(uname -m) && \ + if [ "${ARCH}" = "aarch64" ]; then \ + GO_ARCH="arm64" && \ + GO_SHA256="16e5017863a7f6071363782b1b8042eb12c6ca4f4cd71528b2123f0a1275b13e"; \ + elif [ "${ARCH}" = "x86_64" ]; then \ + GO_ARCH="amd64" && \ + GO_SHA256="6924efde5de86fe277676e929dc9917d466efa02fb934197bc2eba35d5680971"; \ + else \ + echo "Unsupported architecture: ${ARCH}" && exit 1; \ + fi && \ + GO_URL="https://go.dev/dl/${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \ + wget -nv "${GO_URL}" && \ + echo "${GO_SHA256} ${GO_VERSION}.linux-${GO_ARCH}.tar.gz" | sha256sum -c - && \ + tar xf "${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \ + mv go "/usr/local/${GO_VERSION}" && \ + ln -s "/usr/local/${GO_VERSION}" /usr/local/go && \ + rm -f "${GO_VERSION}.linux-${GO_ARCH}.tar.gz" && \ + echo 'export PATH=$PATH:/usr/local/go/bin' | tee -a /etc/profile.d/go.sh > /dev/null + +RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 && \ + update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100 && \ + update-alternatives --install /usr/bin/x86_64-linux-gnu-gcc x86_64-linux-gnu-gcc /usr/bin/gcc-11 100 && \ + update-alternatives --set gcc /usr/bin/gcc-11 && \ + update-alternatives --set g++ /usr/bin/g++-11 + +# -------------------------------------------------------------------- +# Copy Configuration Files and Setup the Environment +# -------------------------------------------------------------------- + +COPY ./configs/* /tmp/ + +RUN cp /tmp/90-cbdb-limits /etc/security/limits.d/90-cbdb-limits && \ + ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ + echo $TZ > /etc/timezone && \ + chmod 755 /tmp/init_system.sh && \ + /usr/sbin/groupadd gpadmin && \ + /usr/sbin/useradd -m -g gpadmin gpadmin && \ + echo 'gpadmin ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/90-gpadmin && \ + chmod 0440 /etc/sudoers.d/90-gpadmin && \ + ssh-keygen -A && \ + mkdir /var/run/sshd && chmod 0755 /var/run/sshd + +# Install testinfra via pip +RUN pip3 install pytest-testinfra + +# Example: Copying test files into the container +COPY tests /tests + +USER gpadmin +WORKDIR /home/gpadmin + +CMD ["bash","-c","/tmp/init_system.sh"] diff --git a/devops/deploy/docker/build/ubuntu22.04/configs/90-cbdb-limits b/devops/deploy/docker/build/ubuntu22.04/configs/90-cbdb-limits new file mode 100644 index 00000000000..8ea1d9ed988 --- /dev/null +++ b/devops/deploy/docker/build/ubuntu22.04/configs/90-cbdb-limits @@ -0,0 +1,32 @@ +# /etc/security/limits.d/90-db-limits + # -------------------------------------------------------------------- + # + # Licensed to the Apache Software Foundation (ASF) under one or more + # contributor license agreements. See the NOTICE file distributed + # with this work for additional information regarding copyright + # ownership. The ASF licenses this file to You under the Apache + # License, Version 2.0 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of the + # License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + # implied. See the License for the specific language governing + # permissions and limitations under the License. + # + # -------------------------------------------------------------------- + + # Core dump file size limits for gpadmin + gpadmin soft core unlimited + gpadmin hard core unlimited + + # Open file limits for gpadmin + gpadmin soft nofile 524288 + gpadmin hard nofile 524288 + + # Process limits for gpadmin + gpadmin soft nproc 131072 + gpadmin hard nproc 131072 diff --git a/devops/deploy/docker/build/ubuntu22.04/configs/gpinitsystem.conf b/devops/deploy/docker/build/ubuntu22.04/configs/gpinitsystem.conf new file mode 100644 index 00000000000..d4d312231c5 --- /dev/null +++ b/devops/deploy/docker/build/ubuntu22.04/configs/gpinitsystem.conf @@ -0,0 +1,89 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +# -------------------------------------------------------------------- +# gpinitsystem Configuration File for Apache Cloudberry +# -------------------------------------------------------------------- +# This configuration file is used to initialize an Apache Cloudberry +# cluster. It defines the settings for the coordinator, primary segments, +# and mirrors, as well as other important configuration options. +# -------------------------------------------------------------------- + +# Segment prefix - This prefix is used for naming the segment directories. +# For example, the primary segment directories will be named gpseg0, gpseg1, etc. +SEG_PREFIX=gpseg + +# Coordinator port - The port number where the coordinator will listen. +# This is the port used by clients to connect to the database. +COORDINATOR_PORT=5432 + +# Coordinator hostname - The hostname of the machine where the coordinator +# will be running. The $(hostname) command will automatically insert the +# hostname of the current machine. +COORDINATOR_HOSTNAME=$(hostname) + +# Coordinator data directory - The directory where the coordinator's data +# will be stored. This directory should have enough space to store metadata +# and system catalogs. +COORDINATOR_DIRECTORY=/data1/coordinator + +# Base port for primary segments - The starting port number for the primary +# segments. Each primary segment will use a unique port number starting from +# this base. +PORT_BASE=6000 + +# Primary segment data directories - An array specifying the directories where +# the primary segment data will be stored. Each directory corresponds to a +# primary segment. In this case, two primary segments will be created in the +# same directory. +declare -a DATA_DIRECTORY=(/data1/primary /data1/primary) + +# Base port for mirror segments - The starting port number for the mirror +# segments. Each mirror segment will use a unique port number starting from +# this base. +MIRROR_PORT_BASE=7000 + +# Mirror segment data directories - An array specifying the directories where +# the mirror segment data will be stored. Each directory corresponds to a +# mirror segment. In this case, two mirror segments will be created in the +# same directory. +declare -a MIRROR_DATA_DIRECTORY=(/data1/mirror /data1/mirror) + +# Trusted shell - The shell program used for remote execution. Cloudberry uses +# SSH to run commands on other machines in the cluster. 'ssh' is the default. +TRUSTED_SHELL=ssh + +# Database encoding - The character set encoding to be used by the database. +# 'UNICODE' is a common choice, especially for internationalization. +ENCODING=UNICODE + +# Default database name - The name of the default database to be created during +# initialization. This is also the default database that the gpadmin user will +# connect to. +DATABASE_NAME=gpadmin + +# Machine list file - A file containing the list of hostnames where the primary +# segments will be created. Each line in the file represents a different machine. +# This file is critical for setting up the cluster across multiple nodes. +MACHINE_LIST_FILE=/home/gpadmin/hostfile_gpinitsystem + +# -------------------------------------------------------------------- +# End of gpinitsystem Configuration File +# -------------------------------------------------------------------- diff --git a/devops/deploy/docker/build/ubuntu22.04/configs/init_system.sh b/devops/deploy/docker/build/ubuntu22.04/configs/init_system.sh new file mode 100755 index 00000000000..52a44462c61 --- /dev/null +++ b/devops/deploy/docker/build/ubuntu22.04/configs/init_system.sh @@ -0,0 +1,195 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +## Container Initialization Script +# -------------------------------------------------------------------- +## This script sets up the environment inside the Docker container for +## the Apache Cloudberry Build Environment. It performs the following +## tasks: +## +## 1. Verifies that the container is running with the expected hostname. +## 2. Starts the SSH daemon to allow SSH access to the container. +## 3. Configures passwordless SSH access for the 'gpadmin' user. +## 4. Displays a welcome banner and system information. +## 5. Starts an interactive bash shell. +## +## This script is intended to be used as an entrypoint or initialization +## script for the Docker container. +# -------------------------------------------------------------------- + +# -------------------------------------------------------------------- +# Check if the hostname is 'cdw' +# -------------------------------------------------------------------- +# The script checks if the container's hostname is set to 'cdw'. This is +# a requirement for this environment, and if the hostname does not match, +# the script will exit with an error message. This ensures consistency +# across different environments. +# -------------------------------------------------------------------- +if [ "$(hostname)" != "cdw" ]; then + echo "Error: This container must be run with the hostname 'cdw'." + echo "Use the following command: docker run -h cdw ..." + exit 1 +fi + +# -------------------------------------------------------------------- +# Start SSH daemon and setup for SSH access +# -------------------------------------------------------------------- +# The SSH daemon is started to allow remote access to the container via +# SSH. This is useful for development and debugging purposes. If the SSH +# daemon fails to start, the script exits with an error. +# -------------------------------------------------------------------- +if ! sudo /usr/sbin/sshd; then + echo "Failed to start SSH daemon" >&2 + exit 1 +fi + +# -------------------------------------------------------------------- +# Remove /run/nologin to allow logins +# -------------------------------------------------------------------- +# The /run/nologin file, if present, prevents users from logging into +# the system. This file is removed to ensure that users can log in via SSH. +# -------------------------------------------------------------------- +sudo rm -rf /run/nologin + +# -------------------------------------------------------------------- +# Configure passwordless SSH access for 'gpadmin' user +# -------------------------------------------------------------------- +# The script sets up SSH key-based authentication for the 'gpadmin' user, +# allowing passwordless SSH access. It generates a new SSH key pair if one +# does not already exist, and configures the necessary permissions. +# -------------------------------------------------------------------- +mkdir -p /home/gpadmin/.ssh +chmod 700 /home/gpadmin/.ssh + +if [ ! -f /home/gpadmin/.ssh/id_rsa ]; then + ssh-keygen -t rsa -b 4096 -C gpadmin -f /home/gpadmin/.ssh/id_rsa -P "" > /dev/null 2>&1 +fi + +cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys +chmod 600 /home/gpadmin/.ssh/authorized_keys + +# Add the container's hostname to the known_hosts file to avoid SSH warnings +ssh-keyscan -t rsa cdw > /home/gpadmin/.ssh/known_hosts 2>/dev/null + +# Change to the home directory of the current user +cd $HOME + +# -------------------------------------------------------------------- +# Display a Welcome Banner +# -------------------------------------------------------------------- +# The following ASCII art and welcome message are displayed when the +# container starts. This banner provides a visual indication that the +# container is running in the Apache Cloudberry Build Environment. +# -------------------------------------------------------------------- +cat <<-'EOF' + +====================================================================== + + ++++++++++ ++++++ + ++++++++++++++ +++++++ + ++++ +++++ ++++ + ++++ +++++++++ + =+==== =============+ + ======== =====+ ===== + ==== ==== ==== ==== + ==== === === ==== + ==== === === ==== + ==== === ==-- === + ===== ===== -- ==== + ===================== ====== + ============================ + =-----= + ____ _ _ _ + / ___|| | ___ _ _ __| || |__ ___ _ __ _ __ _ _ + | | | | / _ \ | | | | / _` || '_ \ / _ \| '__|| '__|| | | | + | |___ | || (_) || |_| || (_| || |_) || __/| | | | | |_| | + \____||_| \____ \__,_| \__,_||_.__/ \___||_| |_| \__, | + |___/ +---------------------------------------------------------------------- + +EOF + +# -------------------------------------------------------------------- +# Display System Information +# -------------------------------------------------------------------- +# The script sources the /etc/os-release file to retrieve the operating +# system name and version. It then displays the following information: +# - OS name and version +# - Current user +# - Container hostname +# - IP address +# - CPU model name and number of cores +# - Total memory available +# This information is useful for users to understand the environment they +# are working in. +# -------------------------------------------------------------------- +source /etc/os-release + +# First, create the CPU info detection function +get_cpu_info() { + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + lscpu | grep 'Model name:' | awk '{print substr($0, index($0,$3))}' + elif [ "$ARCH" = "aarch64" ]; then + VENDOR=$(lscpu | grep 'Vendor ID:' | awk '{print $3}') + if [ "$VENDOR" = "Apple" ] || [ "$VENDOR" = "0x61" ]; then + echo "Apple Silicon ($ARCH)" + else + if [ -f /proc/cpuinfo ]; then + IMPL=$(grep "CPU implementer" /proc/cpuinfo | head -1 | awk '{print $3}') + PART=$(grep "CPU part" /proc/cpuinfo | head -1 | awk '{print $3}') + if [ ! -z "$IMPL" ] && [ ! -z "$PART" ]; then + echo "ARM $ARCH (Implementer: $IMPL, Part: $PART)" + else + echo "ARM $ARCH" + fi + else + echo "ARM $ARCH" + fi + fi + else + echo "Unknown architecture: $ARCH" + fi +} + +cat <<-EOF +Welcome to the Apache Cloudberry Build Environment! + +Container OS ........ : $NAME $VERSION +User ................ : $(whoami) +Container hostname .. : $(hostname) +IP Address .......... : $(hostname -I | awk '{print $1}') +CPU Info ............ : $(get_cpu_info) +CPU(s) .............. : $(nproc) +Memory .............. : $(free -h | grep Mem: | awk '{print $2}') total +====================================================================== + +EOF + +# Add go to PATH +source /etc/profile.d/go.sh + +# -------------------------------------------------------------------- +# Start an interactive bash shell +# -------------------------------------------------------------------- +# Finally, the script starts an interactive bash shell to keep the +# container running and allow the user to interact with the environment. +# -------------------------------------------------------------------- +/bin/bash diff --git a/devops/deploy/docker/build/ubuntu22.04/tests/requirements.txt b/devops/deploy/docker/build/ubuntu22.04/tests/requirements.txt new file mode 100644 index 00000000000..b9711eddac5 --- /dev/null +++ b/devops/deploy/docker/build/ubuntu22.04/tests/requirements.txt @@ -0,0 +1,3 @@ +testinfra +pytest-testinfra +paramiko diff --git a/devops/deploy/docker/build/ubuntu22.04/tests/testinfra/test_cloudberry_db_env.py b/devops/deploy/docker/build/ubuntu22.04/tests/testinfra/test_cloudberry_db_env.py new file mode 100644 index 00000000000..d7f018ab9df --- /dev/null +++ b/devops/deploy/docker/build/ubuntu22.04/tests/testinfra/test_cloudberry_db_env.py @@ -0,0 +1,128 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +import testinfra + +def test_installed_packages(host): + """ + Test if the essential packages are installed. + """ + packages = [ + "bat", + "bison", + "cmake", + "flex", + "g++-11", + "gcc-11", + "git", + "htop", + "iproute2", + "iputils-ping", + "libapr1-dev", + "libbz2-dev", + "libcurl4-gnutls-dev", + "libevent-dev", + "libipc-run-perl", + "libkrb5-dev", + "libldap-dev", + "liblz4-dev", + "libpam0g-dev", + "libperl-dev", + "libprotobuf-dev", + "libreadline-dev", + "libssl-dev", + "libuv1-dev", + "libxerces-c-dev", + "libxml2-dev", + "libyaml-dev", + "libzstd-dev", + "locales", + "lsof", + "make", + "openssh-server", + "pkg-config", + "protobuf-compiler", + "python3-distutils", + "python3-pip", + "python3-setuptools", + "python3.10", + "python3.10-dev", + "rsync", + "silversearcher-ag", + "sudo", + "tzdata", + "vim", + "wget", + "zlib1g-dev" + ] + for package in packages: + pkg = host.package(package) + assert pkg.is_installed + + +def test_user_gpadmin_exists(host): + """ + Test if the gpadmin user exists and is configured properly. + """ + user = host.user("gpadmin") + assert user.exists + assert "gpadmin" in user.groups + + +def test_ssh_service(host): + """ + Test if SSH service is configured correctly. + """ + sshd_config = host.file("/etc/ssh/sshd_config") + assert sshd_config.exists + + +def test_timezone(host): + """ + Test if the timezone is configured correctly. + """ + localtime = host.file("/etc/localtime") + assert localtime.exists + + +def test_system_limits_configured(host): + """ + Test if the custom system limits are applied. + """ + limits_file = host.file("/etc/security/limits.d/90-cbdb-limits") + assert limits_file.exists + + +def test_init_system_script(host): + """ + Test if the init_system.sh script is present and executable. + """ + script = host.file("/tmp/init_system.sh") + assert script.exists + assert script.mode == 0o755 + + +def test_locale_generated(host): + """ + Test if the en_US.UTF-8 locale is correctly generated. + """ + locale = host.run("locale -a | grep en_US.utf8") + assert locale.exit_status == 0 + assert "en_US.utf8" in locale.stdout diff --git a/devops/deploy/docker/test/ubuntu22.04/Dockerfile b/devops/deploy/docker/test/ubuntu22.04/Dockerfile new file mode 100644 index 00000000000..2a44c7bff1d --- /dev/null +++ b/devops/deploy/docker/test/ubuntu22.04/Dockerfile @@ -0,0 +1,141 @@ + +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# +# Apache Cloudberry (incubating) is an effort undergoing incubation at +# the Apache Software Foundation (ASF), sponsored by the Apache +# Incubator PMC. +# +# Incubation is required of all newly accepted projects until a +# further review indicates that the infrastructure, communications, +# and decision making process have stabilized in a manner consistent +# with other successful ASF projects. +# +# While incubation status is not necessarily a reflection of the +# completeness or stability of the code, it does indicate that the +# project has yet to be fully endorsed by the ASF. +# +# -------------------------------------------------------------------- +# Dockerfile for Apache Cloudberry Base Environment +# -------------------------------------------------------------------- +# This Dockerfile sets up a Ubuntu jammy 22.04 -based container to serve as +# a base environment for evaluating the Apache Cloudberry. It installs +# necessary system utilities, configures the environment for SSH access, +# and sets up a 'gpadmin' user with sudo privileges. The Apache Cloudberry +# DEB can be installed into this container for testing and +# functional verification. +# +# Key Features: +# - Locale setup for en_US.UTF-8 +# - SSH daemon setup for remote access +# - Essential system utilities installation +# - Separate user creation and configuration steps +# +# Security Considerations: +# - This Dockerfile prioritizes ease of use for functional testing and +# evaluation. It includes configurations such as passwordless sudo access +# for the 'gpadmin' user and SSH access with password authentication. +# - These configurations are suitable for testing and development but +# should NOT be used in a production environment due to potential security +# risks. +# +# Usage: +# docker build -t cloudberry-db-base-env . +# docker run -h cdw -it cloudberry-db-base-env +# -------------------------------------------------------------------- + +FROM ubuntu:22.04 + +# Argument for configuring the timezone +ARG TIMEZONE_VAR="Europe/London" + +# Environment variables for locale and user +ENV container=docker +ENV LANG=en_US.UTF-8 +ENV USER=gpadmin +ENV TZ=${TIMEZONE_VAR} +ENV DEBIAN_FRONTEND=noninteractive +ENV DEBCONF_NOWARNINGS="yes" + +# -------------------------------------------------------------------- +# Install Development Tools and Utilities +# -------------------------------------------------------------------- + +RUN apt-get update && \ + apt-get install -y -qq \ + htop \ + bat \ + silversearcher-ag \ + vim \ + wget \ + git \ + iproute2 \ + iputils-ping \ + lsof \ + openssh-server \ + pkg-config \ + python3.10 \ + python3-distutils \ + python3-pip \ + python3-setuptools \ + rsync \ + sudo \ + tzdata && \ + apt-get install -y -qq locales && \ + locale-gen ${LANG} && \ + update-locale LANG=${LANG} && \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +RUN ln -s /usr/bin/python3.10 /usr/bin/python + +# -------------------------------------------------------------------- +# User Creation and Configuration +# -------------------------------------------------------------------- +# - Create the 'gpadmin' user and group. +# - Configure the 'gpadmin' user with passwordless sudo privileges. +# - Add Cloudberry-specific entries to the gpadmin's .bashrc. +# -------------------------------------------------------------------- +RUN /usr/sbin/groupadd gpadmin && \ + /usr/sbin/useradd -m -g gpadmin gpadmin && \ + echo 'gpadmin ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/90-gpadmin && \ + chmod 0440 /etc/sudoers.d/90-gpadmin && \ + echo '\n# Add Cloudberry entries\nif [ -f /usr/local/cloudberry/cloudberry-env.sh ]; then\n source /usr/local/cloudberry/cloudberry-env.sh\n export COORDINATOR_DATA_DIRECTORY=/data1/coordinator/gpseg-1\nfi' >> /home/gpadmin/.bashrc + +# -------------------------------------------------------------------- +# Copy Configuration Files and Setup the Environment +# -------------------------------------------------------------------- +# - Copy custom configuration files from the build context to /tmp/. +# - Apply custom system limits and timezone. +# - Set up SSH for password-based authentication. +# - Generate locale and set the default locale to en_US.UTF-8. +# -------------------------------------------------------------------- +COPY ./configs/* /tmp/ + +RUN cp /tmp/90-cbdb-limits /etc/security/limits.d/90-cbdb-limits && \ + ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ + echo $TZ > /etc/timezone && \ + chmod 755 /tmp/init_system.sh && \ + ssh-keygen -A + +USER gpadmin +WORKDIR /home/gpadmin + +CMD ["bash","-c","/tmp/init_system.sh"] + diff --git a/devops/deploy/docker/test/ubuntu22.04/configs/90-cbdb-limits b/devops/deploy/docker/test/ubuntu22.04/configs/90-cbdb-limits new file mode 100644 index 00000000000..474957c42f6 --- /dev/null +++ b/devops/deploy/docker/test/ubuntu22.04/configs/90-cbdb-limits @@ -0,0 +1,32 @@ +# /etc/security/limits.d/90-db-limits +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + +# Core dump file size limits for gpadmin +gpadmin soft core unlimited +gpadmin hard core unlimited + +# Open file limits for gpadmin +gpadmin soft nofile 524288 +gpadmin hard nofile 524288 + +# Process limits for gpadmin +gpadmin soft nproc 131072 +gpadmin hard nproc 131072 diff --git a/devops/deploy/docker/test/ubuntu22.04/configs/gpinitsystem.conf b/devops/deploy/docker/test/ubuntu22.04/configs/gpinitsystem.conf new file mode 100644 index 00000000000..896c8c79e54 --- /dev/null +++ b/devops/deploy/docker/test/ubuntu22.04/configs/gpinitsystem.conf @@ -0,0 +1,87 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# ---------------------------------------------------------------------- +# gpinitsystem Configuration File for Cloudberry Database +# ---------------------------------------------------------------------- +# This configuration file is used to initialize a Cloudberry Database +# cluster. It defines the settings for the coordinator, primary segments, +# and mirrors, as well as other important configuration options. +# ---------------------------------------------------------------------- + +# Segment prefix - This prefix is used for naming the segment directories. +# For example, the primary segment directories will be named gpseg0, gpseg1, etc. +SEG_PREFIX=gpseg + +# Coordinator port - The port number where the coordinator will listen. +# This is the port used by clients to connect to the database. +COORDINATOR_PORT=5432 + +# Coordinator hostname - The hostname of the machine where the coordinator +# will be running. The $(hostname) command will automatically insert the +# hostname of the current machine. +COORDINATOR_HOSTNAME=$(hostname) + +# Coordinator data directory - The directory where the coordinator's data +# will be stored. This directory should have enough space to store metadata +# and system catalogs. +COORDINATOR_DIRECTORY=/data1/coordinator + +# Base port for primary segments - The starting port number for the primary +# segments. Each primary segment will use a unique port number starting from +# this base. +PORT_BASE=6000 + +# Primary segment data directories - An array specifying the directories where +# the primary segment data will be stored. Each directory corresponds to a +# primary segment. In this case, two primary segments will be created in the +# same directory. +declare -a DATA_DIRECTORY=(/data1/primary /data1/primary) + +# Base port for mirror segments - The starting port number for the mirror +# segments. Each mirror segment will use a unique port number starting from +# this base. +MIRROR_PORT_BASE=7000 + +# Mirror segment data directories - An array specifying the directories where +# the mirror segment data will be stored. Each directory corresponds to a +# mirror segment. In this case, two mirror segments will be created in the +# same directory. +declare -a MIRROR_DATA_DIRECTORY=(/data1/mirror /data1/mirror) + +# Trusted shell - The shell program used for remote execution. Cloudberry uses +# SSH to run commands on other machines in the cluster. 'ssh' is the default. +TRUSTED_SHELL=ssh + +# Database encoding - The character set encoding to be used by the database. +# 'UNICODE' is a common choice, especially for internationalization. +ENCODING=UNICODE + +# Default database name - The name of the default database to be created during +# initialization. This is also the default database that the gpadmin user will +# connect to. +DATABASE_NAME=gpadmin + +# Machine list file - A file containing the list of hostnames where the primary +# segments will be created. Each line in the file represents a different machine. +# This file is critical for setting up the cluster across multiple nodes. +MACHINE_LIST_FILE=/home/gpadmin/hostfile_gpinitsystem + +# ---------------------------------------------------------------------- +# End of gpinitsystem Configuration File +# ---------------------------------------------------------------------- diff --git a/devops/deploy/docker/test/ubuntu22.04/configs/init_system.sh b/devops/deploy/docker/test/ubuntu22.04/configs/init_system.sh new file mode 100644 index 00000000000..1928fe511d9 --- /dev/null +++ b/devops/deploy/docker/test/ubuntu22.04/configs/init_system.sh @@ -0,0 +1,224 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# Container Initialization Script +# -------------------------------------------------------------------- +# This script sets up the environment inside the Docker container for +# the Apache Cloudberry Build Environment. It performs the following +# tasks: +# +# 1. Verifies that the container is running with the expected hostname. +# 2. Starts the SSH daemon to allow SSH access to the container. +# 3. Configures passwordless SSH access for the 'gpadmin' user. +# 4. Sets up the necessary directories and configuration files for +# Apache Cloudberry. +# 5. Displays a welcome banner and system information. +# 6. Starts an interactive bash shell. +# +# This script is intended to be used as an entrypoint or initialization +# script for the Docker container. +# -------------------------------------------------------------------- + +# -------------------------------------------------------------------- +# Check if the hostname is 'cdw' +# -------------------------------------------------------------------- +# The script checks if the container's hostname is set to 'cdw'. This is +# a requirement for this environment, and if the hostname does not match, +# the script will exit with an error message. This ensures consistency +# across different environments. +# -------------------------------------------------------------------- +if [ "$(hostname)" != "cdw" ]; then + echo "Error: This container must be run with the hostname 'cdw'." + echo "Use the following command: docker run -h cdw ..." + exit 1 +fi + +# -------------------------------------------------------------------- +# Start SSH daemon and setup for SSH access +# -------------------------------------------------------------------- +# The SSH daemon is started to allow remote access to the container via +# SSH. This is useful for development and debugging purposes. If the SSH +# daemon fails to start, the script exits with an error. +# -------------------------------------------------------------------- +sudo mkdir -p /run/sshd +sudo chmod 755 /run/sshd + +if ! sudo /usr/sbin/sshd; then + echo "Failed to start SSH daemon" >&2 + exit 1 +fi + +# -------------------------------------------------------------------- +# Remove /run/nologin to allow logins +# -------------------------------------------------------------------- +# The /run/nologin file, if present, prevents users from logging into +# the system. This file is removed to ensure that users can log in via SSH. +# -------------------------------------------------------------------- +sudo rm -rf /run/nologin + +# -------------------------------------------------------------------- +# Configure passwordless SSH access for 'gpadmin' user +# -------------------------------------------------------------------- +# The script sets up SSH key-based authentication for the 'gpadmin' user, +# allowing passwordless SSH access. It generates a new SSH key pair if one +# does not already exist, and configures the necessary permissions. +# -------------------------------------------------------------------- +mkdir -p /home/gpadmin/.ssh +chmod 700 /home/gpadmin/.ssh + +if [ ! -f /home/gpadmin/.ssh/id_rsa ]; then + ssh-keygen -t rsa -b 4096 -C gpadmin -f /home/gpadmin/.ssh/id_rsa -P "" > /dev/null 2>&1 +fi + +cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys +chmod 600 /home/gpadmin/.ssh/authorized_keys + +# Add the container's hostname to the known_hosts file to avoid SSH warnings +ssh-keyscan -t rsa cdw > /home/gpadmin/.ssh/known_hosts 2>/dev/null + +# -------------------------------------------------------------------- +# Cloudberry Data Directories Setup +# -------------------------------------------------------------------- +# The script sets up the necessary directories for Apache Cloudberry, +# including directories for the coordinator, standby coordinator, primary +# segments, and mirror segments. It also sets up the configuration files +# required for initializing the database. +# -------------------------------------------------------------------- +sudo rm -rf /data1/* +sudo mkdir -p /data1/coordinator /data1/standby_coordinator /data1/primary /data1/mirror +sudo chown -R gpadmin.gpadmin /data1 + +# Copy the gpinitsystem configuration file to the home directory +cp /tmp/gpinitsystem.conf /home/gpadmin + +# Set up the hostfile for cluster initialization +echo $(hostname) > /home/gpadmin/hostfile_gpinitsystem + +# Change to the home directory of the current user +cd $HOME + +# -------------------------------------------------------------------- +# Display a Welcome Banner +# -------------------------------------------------------------------- +# The following ASCII art and welcome message are displayed when the +# container starts. This banner provides a visual indication that the +# container is running in the Apache Cloudberry Build Environment. +# -------------------------------------------------------------------- +cat <<-'EOF' + +====================================================================== + + ++++++++++ ++++++ + ++++++++++++++ +++++++ + ++++ +++++ ++++ + ++++ +++++++++ + =+==== =============+ + ======== =====+ ===== + ==== ==== ==== ==== + ==== === === ==== + ==== === === ==== + ==== === ==-- === + ===== ===== -- ==== + ===================== ====== + ============================ + =-----= + ____ _ _ _ + / ___|| | ___ _ _ __| || |__ ___ _ __ _ __ _ _ + | | | | / _ \ | | | | / _` || '_ \ / _ \| '__|| '__|| | | | + | |___ | || (_) || |_| || (_| || |_) || __/| | | | | |_| | + \____||_| \____ \__,_| \__,_||_.__/ \___||_| |_| \__, | + |___/ +---------------------------------------------------------------------- + +EOF + +# -------------------------------------------------------------------- +# Display System Information +# -------------------------------------------------------------------- +# The script sources the /etc/os-release file to retrieve the operating +# system name and version. It then displays the following information: +# - OS name and version +# - Current user +# - Container hostname +# - IP address +# - CPU model name and number of cores +# - Total memory available +# - Cloudberry version (if installed) +# This information is useful for users to understand the environment they +# are working in. +# -------------------------------------------------------------------- +source /etc/os-release + +# First, create the CPU info detection function +get_cpu_info() { + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + lscpu | grep 'Model name:' | awk '{print substr($0, index($0,$3))}' + elif [ "$ARCH" = "aarch64" ]; then + VENDOR=$(lscpu | grep 'Vendor ID:' | awk '{print $3}') + if [ "$VENDOR" = "Apple" ] || [ "$VENDOR" = "0x61" ]; then + echo "Apple Silicon ($ARCH)" + else + if [ -f /proc/cpuinfo ]; then + IMPL=$(grep "CPU implementer" /proc/cpuinfo | head -1 | awk '{print $3}') + PART=$(grep "CPU part" /proc/cpuinfo | head -1 | awk '{print $3}') + if [ ! -z "$IMPL" ] && [ ! -z "$PART" ]; then + echo "ARM $ARCH (Implementer: $IMPL, Part: $PART)" + else + echo "ARM $ARCH" + fi + else + echo "ARM $ARCH" + fi + fi + else + echo "Unknown architecture: $ARCH" + fi +} + +# Check if Apache Cloudberry is installed and display its version +if dpkg -l apache-cloudberry-db-incubating > /dev/null 2>&1; then + CBDB_VERSION=$(/usr/local/cbdb/bin/postgres --gp-version) +else + CBDB_VERSION="Not installed" +fi + +cat <<-EOF +Welcome to the Apache Cloudberry Test Environment! + +Cloudberry version .. : $CBDB_VERSION +Container OS ........ : $NAME $VERSION +User ................ : $(whoami) +Container hostname .. : $(hostname) +IP Address .......... : $(hostname -I | awk '{print $1}') +CPU Info ............ : $(get_cpu_info) +CPU(s) .............. : $(nproc) +Memory .............. : $(free -h | grep Mem: | awk '{print $2}') total +====================================================================== + +EOF + +# -------------------------------------------------------------------- +# Start an interactive bash shell +# -------------------------------------------------------------------- +# Finally, the script starts an interactive bash shell to keep the +# container running and allow the user to interact with the environment. +# -------------------------------------------------------------------- +/bin/bash diff --git a/pom.xml b/pom.xml index 523179a9af7..cc14b7e237d 100644 --- a/pom.xml +++ b/pom.xml @@ -1240,7 +1240,7 @@ code or new licensing patterns. Makefile aclocal.m4 python-dependencies.txt - + + devops/build/packaging/deb/ubuntu22.04/** From 0471e85a22e00339a344c2a55e94425584a3ab26 Mon Sep 17 00:00:00 2001 From: zhao <873988212@qq.com> Date: Mon, 22 Sep 2025 22:32:48 +0800 Subject: [PATCH 164/260] Optimize motion timeout transmission (#1365) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * The primary goal is to address various issues currently encountered during concurrent processes, such as excessive motion retries, congestion, retransmission storms, and network skew. The code addresses inefficient network retransmission handling in unreliable network environments. Specifically: Fixed Timeout Thresholds: Traditional TCP-style Retransmission Timeout (RTTVAR.RTO) calculations may be too rigid for networks with volatile latency (e.g., satellite links, wireless networks). This leads to: β€’ Premature Retransmissions: Unnecessary data resends during temporary latency spikes, wasting bandwidth. β€’ Delayed Recovery: Slow reaction to actual packet loss when RTO is overly conservative. Lack of Context Awareness: Static RTO ignores real-time network behavior patterns, reducing throughput and responsiveness. Solution: Dynamic Timeout Threshold Adjustment Implements an adaptive timeout mechanism to optimize retransmission: if (now < (curBuf->sentTime + conn->rttvar.rto)) { uint32_t diff = (curBuf->sentTime + conn->rttvar.rto) - now; // ... (statistical tracking and threshold adjustment) } Key Components: β€’ Statistical Tracking: \- min/max: Tracks observed minimum/maximum residual time (time left until RTO expiry). \- retrans_count/no_retrans_count: Counts retransmission vs. non-retransmission events. β€’ Weighted Threshold Calculation: unack_queue_ring.time_difference = (uint32_t)( unack_queue_ring.max * weight_no_retrans + unack_queue_ring.min * weight_retrans ); Weights derived from historical ratios of retransmissions (weight_retrans) vs. successful deliveries (weight_no_retrans). How It Solves the Problem: β€’ Temporary Latency Spike: Uses max (conservative) to avoid false retransmits, reducing bandwidth waste (vs. traditional mistaken retransmissions). β€’ Persistent Packet Loss: Prioritizes min (aggressive) via weight_retrans, accelerating recovery (vs. slow fixed-RTO reaction). β€’ Stable Network: Balances weights for equilibrium throughput (vs. static RTO limitations). EstimateRTT - Dynamically estimates the Round-Trip Time (RTT) and adjusts Retransmission Timeout (RTO) This function implements a variant of the Jacobson/Karels algorithm for RTT estimation, adapted for UDP-based motion control connections. It updates smoothed RTT (srtt), mean deviation (mdev), and RTO values based on newly measured RTT samples (mrtt). The RTO calculation ensures reliable data transmission over unreliable networks. Key Components: * srtt: Smoothed Round-Trip Time (weighted average of historical RTT samples) * mdev: Mean Deviation (measure of RTT variability) * rttvar: Adaptive RTT variation bound (used to clamp RTO updates) * rto: Retransmission Timeout (dynamically adjusted based on srtt + rttvar) Algorithm Details: 1. For the first RTT sample: srtt = mrtt << 3 (scaled by 8 for fixed-point arithmetic) mdev = mrtt << 1 (scaled by 2) rttvar = max(mdev, rto_min) 2. For subsequent samples: Delta = mrtt - (srtt >> 3) (difference between new sample and smoothed RTT) srtt += Delta (update srtt with 1/8 weight of new sample) Delta = abs(Delta) - (mdev >> 2) mdev += Delta (update mdev with 1/4 weight) 3. rttvar bounds the maximum RTT variation: If mdev > mdev_max, update mdev_max and rttvar On new ACKs (snd_una > rtt_seq), decay rttvar toward mdev\_max 4. Final RTO calculation: rto = (srtt >> 3) + rttvar (clamped to RTO_MAX) Network Latency Filtering and RTO Optimization This logic mitigates RTO distortion caused by non-network delays in database execution pipelines. Key challenges addressed: * Operator processing delays (non-I/O wait) inflate observed ACK times * Spurious latency amplification in lossy networks triggers excessive RTO_MAX waits * Congestion collapse from synchronized retransmissions Core Mechanisms: 1. Valid RTT Sampling Filter: Condition: 4 * (pkt->recv_time - pkt->send_time) > ackTime && pkt->retry_times != Gp_interconnect_min_retries_before_timeout Rationale: * Filters packets exceeding 2x expected round-trips (4x one-way) * Excludes artificial retries (retry_times=Gp_interconnect_min_retries_before_timeout) to avoid sampling bias Action: Update RTT estimation only with valid samples via EstimateRTT() 2. Randomized Backoff: Condition: buf->nRetry > 0 Algorithm: rto += (rto >> (4 * buf->nRetry)) Benefits: * Exponential decay: Shifts create geometrically decreasing increments * Connection-specific randomization: Prevents global synchronization * Dynamic scaling: Adapts to retry depth (nRetry) 3. Timer List Management (NEW_TIMER): Operations: RemoveFromRTOList(&mudp, bufConn) β†’ Detaches from monitoring AddtoRTOList(\&mudp, bufConn) β†’ Reinserts with updated rto Purpose: Maintains real-time ordering of expiration checks We conducted multiple full-scale TPCDS benchmarks using both a single physical machine with 48 nodes and four physical machines with 96 nodes, testing with MTU values of 1500 and 9000. In the single-node environment with no network bottlenecks, there were no significant performance differences between using MTU 1500 and 9000. In the 96-node environment, under single-threaded execution, there were no significant performance differences. However, under multi-threaded execution (4 threads), SQL statements with a high percentage of data movement showed significant performance variations, ranging from 5 to 10 times, especially with MTU 1500. * Cleaning up the code --------- Co-authored-by: zhaoxi Co-authored-by: zhaoxi --- contrib/interconnect/ic_internal.h | 52 ++ contrib/interconnect/test/ic_test_env.c | 2 + contrib/interconnect/udp/ic_udpifc.c | 882 ++++++++++++++++-- contrib/interconnect/udp/ic_udpifc.h | 3 + src/backend/cdb/cdbvars.c | 1 + src/backend/utils/misc/guc_gp.c | 12 + src/include/cdb/cdbvars.h | 3 + src/include/utils/sync_guc_name.h | 1 + .../icudp/gp_interconnect_fc_method.out | 46 + .../queue_depth_combination_capacity.out | 257 +++++ .../queue_depth_combination_loss_advance.out | 260 ++++++ src/test/regress/greenplum_schedule | 2 +- src/test/regress/icudp_schedule | 2 +- .../sql/icudp/gp_interconnect_fc_method.sql | 8 + .../queue_depth_combination_capacity.sql | 55 ++ .../queue_depth_combination_loss_advance.sql | 65 ++ 16 files changed, 1584 insertions(+), 67 deletions(-) create mode 100644 src/test/regress/expected/icudp/queue_depth_combination_loss_advance.out create mode 100644 src/test/regress/sql/icudp/queue_depth_combination_loss_advance.sql diff --git a/contrib/interconnect/ic_internal.h b/contrib/interconnect/ic_internal.h index 77c08ee6e29..8557115cd33 100644 --- a/contrib/interconnect/ic_internal.h +++ b/contrib/interconnect/ic_internal.h @@ -10,6 +10,11 @@ */ #ifndef INTER_CONNECT_INTERNAL_H #define INTER_CONNECT_INTERNAL_H +#include +#include +#include +#include +#include #include "tcp/ic_tcp.h" #include "udp/ic_udpifc.h" @@ -33,6 +38,27 @@ typedef enum MotionConnState mcsEosSent } MotionConnState; +struct udp_send_vars +{ + /* send sequence variables */ + uint32_t snd_una; /* send unacknoledged */ + uint32_t snd_wnd; /* send window (unscaled) */ + + /* retransmission timeout variables */ + uint8_t nrtx; /* number of retransmission */ + uint8_t max_nrtx; /* max number of retransmission */ + uint32_t rto; /* retransmission timeout */ + uint32_t ts_rto; /* timestamp for retransmission timeout */ + + /* congestion control variables */ + uint32_t cwnd; /* congestion window */ + uint32_t ssthresh; /* slow start threshold */ + + TAILQ_ENTRY(MotionConnUDP) send_link; + TAILQ_ENTRY(MotionConnUDP) timer_link; /* timer link (rto list) */ + +}; + /* * Structure used for keeping track of a pt-to-pt connection between two * Cdb Entities (either QE or QD). @@ -153,6 +179,32 @@ typedef struct MotionConnUDP uint64 stat_count_resent; uint64 stat_max_resent; uint64 stat_count_dropped; + + struct { + uint32_t ts_rto; + uint32_t rto; + uint32_t srtt; + uint32_t rttvar; + uint32_t snd_una; + uint16_t nrtx; + uint16_t max_nrtx; + uint32_t mss; + uint32_t cwnd; + uint32_t ssthresh; + uint32_t fss; + uint8_t loss_count; + uint32_t mdev; + uint32_t mdev_max; + uint32_t rtt_seq; /* sequence number to update rttvar */ + uint32_t ts_all_rto; + bool karn_mode; + } rttvar; + + uint8_t on_timewait_list; + int16_t on_rto_idx; + + uint32_t snd_nxt; /* send next */ + struct udp_send_vars sndvar; } MotionConnUDP; typedef struct MotionConnTCP diff --git a/contrib/interconnect/test/ic_test_env.c b/contrib/interconnect/test/ic_test_env.c index 5333a143de5..1c9f2d0ce05 100644 --- a/contrib/interconnect/test/ic_test_env.c +++ b/contrib/interconnect/test/ic_test_env.c @@ -330,6 +330,7 @@ client_side_global_var_init(MotionIPCLayer * motion_ipc_layer, pid_t *ic_proxy_p Gp_interconnect_queue_depth = 800; Gp_interconnect_snd_queue_depth = 600; + Gp_interconnect_mem_size = 20; Gp_interconnect_timer_period = 1; Gp_interconnect_timer_checking_period = 2; InitializeLatchSupport(); @@ -374,6 +375,7 @@ server_side_global_var_init(MotionIPCLayer * motion_ipc_layer, pid_t *ic_proxy_p Gp_interconnect_queue_depth = 800; Gp_interconnect_snd_queue_depth = 600; + Gp_interconnect_mem_size = 20; Gp_interconnect_timer_period = 1; Gp_interconnect_timer_checking_period = 2; InitializeLatchSupport(); diff --git a/contrib/interconnect/udp/ic_udpifc.c b/contrib/interconnect/udp/ic_udpifc.c index c28511fe828..548f71116c0 100644 --- a/contrib/interconnect/udp/ic_udpifc.c +++ b/contrib/interconnect/udp/ic_udpifc.c @@ -26,13 +26,17 @@ #include "ic_udpifc.h" #include "ic_internal.h" #include "ic_common.h" - #include #include #include #include #include #include +#include +#include +#include +#include +#include #include "access/transam.h" #include "access/xact.h" @@ -116,6 +120,57 @@ WSAPoll( #undef select #endif +#define TIMEOUT_Z +#define RTT_SHIFT_ALPHA (3) /* srtt (0.125) */ +#define LOSS_THRESH (3) /* Packet loss triggers Karn */ +#define RTO_MIN (5000) /* MIN RTO(ms) */ +#define RTO_MAX (100000) /* MAX RTO(ms) */ +#define UDP_INFINITE_SSTHRESH 0x7fffffff + +#define SEC_TO_USEC(t) ((t) * 1000000) +#define SEC_TO_MSEC(t) ((t) * 1000) +#define MSEC_TO_USEC(t) ((t) * 1000) +#define USEC_TO_SEC(t) ((t) / 1000000) +#define TIME_TICK (1000000/HZ)/* in us */ + +#define UDP_INITIAL_RTO (MSEC_TO_USEC(200)) +#define UDP_DEFAULT_MSS 1460 + +#define RTO_HASH (3000) + +#define UDP_SEQ_LT(a,b) ((int32_t)((a)-(b)) < 0) +#define UDP_SEQ_LEQ(a,b) ((int32_t)((a)-(b)) <= 0) +#define UDP_SEQ_GT(a,b) ((int32_t)((a)-(b)) > 0) +#define UDP_SEQ_GEQ(a,b) ((int32_t)((a)-(b)) >= 0) + +#ifndef MAX +#define MAX(a, b) ((a)>(b)?(a):(b)) +#endif +#ifndef MIN +#define MIN(a, b) ((a)<(b)?(a):(b)) +#endif + +#define UDP_RTO_MIN ((unsigned)(HZ/5)) + +struct rto_hashstore +{ + uint32_t rto_now_idx; /* pointing the hs_table_s index */ + uint32_t rto_now_ts; + + TAILQ_HEAD(rto_head, MotionConnUDP) rto_list[RTO_HASH + 1]; +}; + +struct mudp_manager +{ + struct rto_hashstore *rto_store; /* lists related to timeout */ + + int rto_list_cnt; + uint32_t cur_ts; +}; + +typedef struct mudp_manager* mudp_manager_t; +static struct mudp_manager mudp; + #define MAX_TRY (11) int timeoutArray[] = @@ -516,8 +571,10 @@ static ICGlobalControlInfo ic_control_info; */ #define UNACK_QUEUE_RING_SLOTS_NUM (2000) #define TIMER_SPAN (Gp_interconnect_timer_period * 1000ULL) /* default: 5ms */ -#define TIMER_CHECKING_PERIOD (Gp_interconnect_timer_checking_period) /* default: 20ms */ +#define TIMER_SPAN_LOSS (Gp_interconnect_timer_period * 500ULL) /* default: 5ms */ +#define TIMER_CHECKING_PERIOD Gp_interconnect_timer_checking_period /* default: 20ms */ #define UNACK_QUEUE_RING_LENGTH (UNACK_QUEUE_RING_SLOTS_NUM * TIMER_SPAN) +#define UNACK_QUEUE_RING_LENGTH_LOSS (UNACK_QUEUE_RING_SLOTS_NUM * TIMER_SPAN_LOSS) #define DEFAULT_RTT (Gp_interconnect_default_rtt * 1000) /* default: 20ms */ #define MIN_RTT (100) /* 0.1ms */ @@ -537,6 +594,7 @@ static ICGlobalControlInfo ic_control_info; #define MAX_SEQS_IN_DISORDER_ACK (4) +#define MAX_QUEUE_SIZE (64) /* * UnackQueueRing * @@ -573,12 +631,19 @@ struct UnackQueueRing /* time slots */ ICBufferList slots[UNACK_QUEUE_RING_SLOTS_NUM]; +#ifdef TIMEOUT_Z + uint32_t retrans_count; + uint32_t no_retrans_count; + uint32_t time_difference; + uint32_t min; + uint32_t max; +#endif }; /* * All connections in a process share this unack queue ring instance. */ -static UnackQueueRing unack_queue_ring = {0, 0, 0}; +static UnackQueueRing unack_queue_ring = {0}; static int ICSenderSocket = -1; static int32 ICSenderPort = 0; @@ -746,8 +811,8 @@ static void checkQDConnectionAlive(void); static void *rxThreadFunc(void *arg); static bool handleMismatch(icpkthdr *pkt, struct sockaddr_storage *peer, int peer_len); -static void handleAckedPacket(MotionConn *ackConn, ICBuffer *buf, uint64 now); -static bool handleAcks(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChunkEntry); +static void handleAckedPacket(MotionConn *ackConn, ICBuffer *buf, uint64 now, struct icpkthdr *pkt); +static bool handleAcks(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChunkEntry, bool need_flush); static void handleStopMsgs(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChunkEntry, int16 motionId); static void handleDisorderPacket(MotionConn *conn, int pos, uint32 tailSeq, icpkthdr *pkt); static bool handleDataPacket(MotionConn *conn, icpkthdr *pkt, struct sockaddr_storage *peer, socklen_t *peerlen, AckSendParam *param, bool *wakeup_mainthread); @@ -766,6 +831,8 @@ static void initSndBufferPool(); static void putIntoUnackQueueRing(UnackQueueRing *uqr, ICBuffer *buf, uint64 expTime, uint64 now); static void initUnackQueueRing(UnackQueueRing *uqr); +static void initUdpManager(mudp_manager_t mptr); +static inline void checkNetworkTimeout(ICBuffer *buf, uint64 now, bool *networkTimeoutIsLogged); static void checkExpiration(ChunkTransportState *transportStates, ChunkTransportStateEntry *pEntry, MotionConn *triggerConn, uint64 now); static void checkDeadlock(ChunkTransportStateEntry *pChunkEntry, MotionConn *conn); @@ -924,6 +991,349 @@ dumpTransProtoStats() #endif /* TRANSFER_PROTOCOL_STATS */ +static struct rto_hashstore* +initRTOHashstore() +{ + int i; + struct rto_hashstore* hs = palloc(sizeof(struct rto_hashstore)); + + for (i = 0; i < RTO_HASH; i++) + TAILQ_INIT(&hs->rto_list[i]); + + TAILQ_INIT(&hs->rto_list[RTO_HASH]); + + return hs; +} + +static void +initUdpManager(mudp_manager_t mudp) +{ + mudp->rto_store = initRTOHashstore(); + mudp->rto_list_cnt = 0; + mudp->cur_ts = 0; +} + +static inline void +addtoRTOList(mudp_manager_t mudp, MotionConnUDP *cur_stream) +{ + if (!mudp->rto_list_cnt) + { + mudp->rto_store->rto_now_idx = 0; + mudp->rto_store->rto_now_ts = cur_stream->sndvar.ts_rto; + } + + if (cur_stream->on_rto_idx < 0 ) + { + if (cur_stream->on_timewait_list) + return; + + int diff = (int32_t)(cur_stream->sndvar.ts_rto - mudp->rto_store->rto_now_ts); + if (diff < RTO_HASH) + { + int offset= (diff + mudp->rto_store->rto_now_idx) % RTO_HASH; + cur_stream->on_rto_idx = offset; + TAILQ_INSERT_TAIL(&(mudp->rto_store->rto_list[offset]), + cur_stream, sndvar.timer_link); + } + else + { + cur_stream->on_rto_idx = RTO_HASH; + TAILQ_INSERT_TAIL(&(mudp->rto_store->rto_list[RTO_HASH]), + cur_stream, sndvar.timer_link); + } + mudp->rto_list_cnt++; + } +} + +static inline void +removeFromRTOList(mudp_manager_t mudp, + MotionConnUDP *cur_stream) +{ + if (cur_stream->on_rto_idx < 0) + return; + + TAILQ_REMOVE(&mudp->rto_store->rto_list[cur_stream->on_rto_idx], + cur_stream, sndvar.timer_link); + cur_stream->on_rto_idx = -1; + + mudp->rto_list_cnt--; +} + +static inline void +updateRetransmissionTimer(mudp_manager_t mudp, + MotionConnUDP *cur_stream, + uint32_t cur_ts) +{ + cur_stream->sndvar.nrtx = 0; + + /* if in rto list, remove it */ + if (cur_stream->on_rto_idx >= 0) + removeFromRTOList(mudp, cur_stream); + + /* Reset retransmission timeout */ + if (UDP_SEQ_GT(cur_stream->snd_nxt, cur_stream->sndvar.snd_una)) + { + /* there are packets sent but not acked */ + /* update rto timestamp */ + cur_stream->sndvar.ts_rto = cur_ts + cur_stream->sndvar.rto; + addtoRTOList(mudp, cur_stream); + } + + if (cur_stream->on_rto_idx == -1) + { + cur_stream->sndvar.ts_rto = cur_ts + cur_stream->sndvar.rto; + addtoRTOList(mudp, cur_stream); + } +} + +static int +handleRTO(mudp_manager_t mudp, + uint32_t cur_ts, + MotionConnUDP *cur_stream, + ChunkTransportState *transportStates, + ChunkTransportStateEntry *pEntry, + MotionConn *triggerConn) +{ + /* check for expiration */ + int count = 0; + int retransmits = 0; + MotionConnUDP *currBuffConn = NULL; + uint32_t now = cur_ts; + + Assert(unack_queue_ring.currentTime != 0); + removeFromRTOList(mudp, cur_stream); + + while (now >= (unack_queue_ring.currentTime + TIMER_SPAN) && count++ < UNACK_QUEUE_RING_SLOTS_NUM) + { + /* expired, need to resend them */ + ICBuffer *curBuf = NULL; + + while ((curBuf = icBufferListPop(&unack_queue_ring.slots[unack_queue_ring.idx])) != NULL) + { + curBuf->nRetry++; + putIntoUnackQueueRing( + &unack_queue_ring, + curBuf, + computeExpirationPeriod(curBuf->conn, curBuf->nRetry), now); + +#ifdef TRANSFER_PROTOCOL_STATS + updateStats(TPE_DATA_PKT_SEND, curBuf->conn, curBuf->pkt); +#endif + + sendOnce(transportStates, pEntry, curBuf, curBuf->conn); + + currBuffConn = CONTAINER_OF(curBuf->conn, MotionConnUDP, mConn); + + retransmits++; + ic_statistics.retransmits++; + currBuffConn->stat_count_resent++; + currBuffConn->stat_max_resent = Max(currBuffConn->stat_max_resent, currBuffConn->stat_count_resent); + checkNetworkTimeout(curBuf, now, &transportStates->networkTimeoutIsLogged); + +#ifdef AMS_VERBOSE_LOGGING + write_log("RESEND pkt with seq %d (retry %d, rtt " UINT64_FORMAT ") to route %d", + curBuf->pkt->seq, curBuf->nRetry, curBuf->conn->rtt, curBuf->conn->route); + logPkt("RESEND PKT in checkExpiration", curBuf->pkt); +#endif + } + + unack_queue_ring.currentTime += TIMER_SPAN; + unack_queue_ring.idx = (unack_queue_ring.idx + 1) % (UNACK_QUEUE_RING_SLOTS_NUM); + } + return 0; +} + +static inline void +rearrangeRTOStore(mudp_manager_t mudp) +{ + MotionConnUDP *walk, *next; + struct rto_head* rto_list = &mudp->rto_store->rto_list[RTO_HASH]; + int cnt = 0; + + for (walk = TAILQ_FIRST(rto_list); walk != NULL; walk = next) + { + next = TAILQ_NEXT(walk, sndvar.timer_link); + + int diff = (int32_t)(mudp->rto_store->rto_now_ts - walk->sndvar.ts_rto); + if (diff < RTO_HASH) + { + int offset = (diff + mudp->rto_store->rto_now_idx) % RTO_HASH; + TAILQ_REMOVE(&mudp->rto_store->rto_list[RTO_HASH], + walk, sndvar.timer_link); + walk->on_rto_idx = offset; + TAILQ_INSERT_TAIL(&(mudp->rto_store->rto_list[offset]), + walk, sndvar.timer_link); + } + cnt++; + } +} + +static inline void +checkRtmTimeout(mudp_manager_t mudp, + uint32_t cur_ts, + int thresh, + ChunkTransportState *transportStates, + ChunkTransportStateEntry *pEntry, + MotionConn *triggerConn) +{ + MotionConnUDP *walk, *next; + struct rto_head* rto_list; + int cnt; + + if (!mudp->rto_list_cnt) + return; + + cnt = 0; + + while (1) + { + rto_list = &mudp->rto_store->rto_list[mudp->rto_store->rto_now_idx]; + if ((int32_t)(cur_ts - mudp->rto_store->rto_now_ts) < 0) + break; + + for (walk = TAILQ_FIRST(rto_list); walk != NULL; walk = next) + { + if (++cnt > thresh) + break; + next = TAILQ_NEXT(walk, sndvar.timer_link); + + if (walk->on_rto_idx >= 0) + { + TAILQ_REMOVE(rto_list, walk, sndvar.timer_link); + mudp->rto_list_cnt--; + walk->on_rto_idx = -1; + handleRTO(mudp, cur_ts, walk, transportStates, pEntry, triggerConn); + } + } + + if (cnt > thresh) + { + break; + } + else + { + mudp->rto_store->rto_now_idx = (mudp->rto_store->rto_now_idx + 1) % RTO_HASH; + mudp->rto_store->rto_now_ts++; + if (!(mudp->rto_store->rto_now_idx % 1000)) + rearrangeRTOStore(mudp); + } + + } +} + +/* + * estimateRTT - Dynamically estimates the Round-Trip Time (RTT) and adjusts Retransmission Timeout (RTO) + * + * This function implements a variant of the Jacobson/Karels algorithm for RTT estimation, adapted for UDP-based + * motion control connections. It updates smoothed RTT (srtt), mean deviation (mdev), and RTO values based on + * newly measured RTT samples (mrtt). The RTO calculation ensures reliable data transmission over unreliable networks. + * + * Key Components: + * - srtt: Smoothed Round-Trip Time (weighted average of historical RTT samples) + * - mdev: Mean Deviation (measure of RTT variability) + * - rttvar: Adaptive RTT variation bound (used to clamp RTO updates) + * - rto: Retransmission Timeout (dynamically adjusted based on srtt + rttvar) + * + * Algorithm Details: + * 1. For the first RTT sample: + * srtt = mrtt << 3 (scaled by 8 for fixed-point arithmetic) + * mdev = mrtt << 1 (scaled by 2) + * rttvar = max(mdev, rto_min) + * 2. For subsequent samples: + * Delta = mrtt - (srtt >> 3) (difference between new sample and smoothed RTT) + * srtt += Delta (update srtt with 1/8 weight of new sample) + * Delta = abs(Delta) - (mdev >> 2) + * mdev += Delta (update mdev with 1/4 weight) + * 3. rttvar bounds the maximum RTT variation: + * If mdev > mdev_max, update mdev_max and rttvar + * On new ACKs (snd_una > rtt_seq), decay rttvar toward mdev_max + * 4. Final RTO calculation: + * rto = (srtt >> 3) + rttvar (clamped to RTO_MAX) + * + * Parameters: + * @mConn: Parent motion connection context (container of MotionConnUDP) + * @mrtt: Measured Round-Trip Time (in microseconds) for the latest packet + * + * Notes: + * - Designed for non-retransmitted packets to avoid sampling bias. + * - Uses fixed-point arithmetic to avoid floating-point operations. + * - Minimum RTO (rto_min) is set to 20ms (HZ/5/10, assuming HZ=100). + * - Critical for adaptive timeout control in UDP protocols where reliability is implemented at the application layer. + * - Thread-unsafe: Must be called in a synchronized context (e.g., packet processing loop). + */ + +static inline void +estimateRTT(MotionConn *mConn , uint32_t mrtt) +{ + /* This function should be called for not retransmitted packets */ + /* TODO: determine rto_min */ + MotionConnUDP *conn = NULL; + + conn = CONTAINER_OF(mConn, MotionConnUDP, mConn); + long m = mrtt; + uint32_t rto_min = UDP_RTO_MIN / 10; + + if (m == 0) + m = 1; + + /* + * Special RTO optimization for high-speed networks: + * When measured RTT (m) is below 100 microseconds and current RTO is under 10ms, + * forcibly set RTO to half of RTO_MIN. This targets two scenarios: + * - Loopback interfaces (localhost communication) + * - Ultra-low-latency networks (e.g., InfiniBand, RDMA) + */ + if(m < 100 && conn->rttvar.rto < 10000) + { + conn->rttvar.rto = RTO_MIN / 2; + } + + if (conn->rttvar.srtt != 0) + { + /* rtt = 7/8 rtt + 1/8 new */ + m -= (conn->rttvar.srtt >> LOSS_THRESH); + conn->rttvar.srtt += m; + if (m < 0) + { + m = -m; + m -= (conn->rttvar.mdev >> RTT_SHIFT_ALPHA); + if (m > 0) + m >>= LOSS_THRESH; + } + else + { + m -= (conn->rttvar.mdev >> RTT_SHIFT_ALPHA); + } + conn->rttvar.mdev += m; + if (conn->rttvar.mdev > conn->rttvar.mdev_max) + { + conn->rttvar.mdev_max = conn->rttvar.mdev; + if (conn->rttvar.mdev_max > conn->rttvar.rttvar) + { + conn->rttvar.rttvar = conn->rttvar.mdev_max; + } + } + if (UDP_SEQ_GT(conn->rttvar.snd_una, conn->rttvar.rtt_seq)) + { + if (conn->rttvar.mdev_max < conn->rttvar.rttvar) + { + conn->rttvar.rttvar -= (conn->rttvar.rttvar - conn->rttvar.mdev_max) >> RTT_SHIFT_ALPHA; + } + conn->rttvar.mdev_max = rto_min; + } + } + else + { + /* fresh measurement */ + conn->rttvar.srtt = m << LOSS_THRESH; + conn->rttvar.mdev = m << 1; + conn->rttvar.mdev_max = conn->rttvar.rttvar = MAX(conn->rttvar.mdev, rto_min); + } + + conn->rttvar.rto = ((conn->rttvar.srtt >> LOSS_THRESH) + conn->rttvar.rttvar) > RTO_MAX ? RTO_MAX : ((conn->rttvar.srtt >> LOSS_THRESH) + conn->rttvar.rttvar); +} + + /* * initCursorICHistoryTable * Initialize cursor ic history table. @@ -2522,6 +2932,14 @@ initUnackQueueRing(UnackQueueRing *uqr) { icBufferListInit(&uqr->slots[i], ICBufferListType_Secondary); } + +#ifdef TIMEOUT_Z + uqr->retrans_count = 0; + uqr->no_retrans_count = 0; + uqr->time_difference = 0; + uqr->min = 0; + uqr->max = 0; +#endif } /* @@ -2556,6 +2974,9 @@ computeExpirationPeriod(MotionConn *mConn, uint32 retry) else #endif { + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) + return Min(retry > 3 ? conn->rttvar.rto * retry : conn->rttvar.rto, UNACK_QUEUE_RING_LENGTH_LOSS); + uint32 factor = (retry <= 12 ? retry : 12); return Max(MIN_EXPIRATION_PERIOD, Min(MAX_EXPIRATION_PERIOD, (conn->rtt + (conn->dev << 2)) << (factor))); @@ -2968,6 +3389,19 @@ setupOutgoingUDPConnection(ChunkTransportState *transportStates, ChunkTransportS conn->mConn.msgSize = sizeof(conn->conn_info); conn->mConn.stillActive = true; conn->conn_info.seq = 1; + conn->rttvar.ts_rto = 0; + conn->rttvar.rto = UDP_INITIAL_RTO; + conn->rttvar.srtt = 0; + conn->rttvar.rttvar = 0; + conn->rttvar.snd_una = 0; + conn->rttvar.nrtx = 0; + conn->rttvar.max_nrtx = 0; + conn->rttvar.mss = UDP_DEFAULT_MSS; + conn->rttvar.cwnd = 2; + conn->rttvar.ssthresh = UDP_INFINITE_SSTHRESH; + conn->rttvar.loss_count = 0; + conn->rttvar.karn_mode = false; + conn->on_rto_idx = -1; Assert(conn->peer.ss_family == AF_INET || conn->peer.ss_family == AF_INET6); } /* setupOutgoingUDPConnection */ @@ -3207,6 +3641,19 @@ SetupUDPIFCInterconnect_Internal(SliceTable *sliceTable) conn->conn_info.icId = sliceTable->ic_instance_id; conn->conn_info.flags = UDPIC_FLAGS_RECEIVER_TO_SENDER; + conn->rttvar.ts_rto = 0; + conn->rttvar.rto = UDP_INITIAL_RTO; + conn->rttvar.srtt = 0; + conn->rttvar.rttvar = 0; + conn->rttvar.snd_una = 0; + conn->rttvar.nrtx = 0; + conn->rttvar.max_nrtx = 0; + conn->rttvar.mss = UDP_DEFAULT_MSS; + conn->rttvar.cwnd = 2; + conn->rttvar.ssthresh = UDP_INFINITE_SSTHRESH; + conn->rttvar.loss_count = 0; + conn->rttvar.karn_mode = false; + conn->on_rto_idx = -1; connAddHash(&ic_control_info.connHtab, &conn->mConn); } } @@ -3221,6 +3668,8 @@ SetupUDPIFCInterconnect_Internal(SliceTable *sliceTable) { initSndBufferPool(&snd_buffer_pool); initUnackQueueRing(&unack_queue_ring); + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER) + initUdpManager(&mudp); ic_control_info.isSender = true; ic_control_info.lastExpirationCheckTime = getCurrentTime(); ic_control_info.lastPacketSendTime = ic_control_info.lastExpirationCheckTime; @@ -3284,6 +3733,9 @@ static inline void SetupUDPIFCInterconnect(EState *estate) { ChunkTransportState *icContext = NULL; + int32 sliceNum = 0; + int32 calcQueueDepth = 0; + int32 calcSndDepth = 0; PG_TRY(); { /* @@ -3291,6 +3743,39 @@ SetupUDPIFCInterconnect(EState *estate) * technically it is not part of current query, discard it directly. */ resetRxThreadError(); + if (estate != NULL && estate->es_sliceTable != NULL) + sliceNum = estate->es_sliceTable->numSlices; + else + sliceNum = 1; + + if (Gp_interconnect_mem_size > 0 && + Gp_interconnect_queue_depth == 4 && + Gp_interconnect_snd_queue_depth == 2) + { + int32 perQueue = Gp_interconnect_mem_size / + (Gp_max_packet_size * sliceNum); + + calcSndDepth = Max(Gp_interconnect_snd_queue_depth, perQueue / 2); + calcQueueDepth = Max(Gp_interconnect_queue_depth, perQueue - calcSndDepth); + + if (calcSndDepth > MAX_QUEUE_SIZE) + calcSndDepth = MAX_QUEUE_SIZE; + + if (calcQueueDepth > MAX_QUEUE_SIZE) + calcQueueDepth = MAX_QUEUE_SIZE; + + Gp_interconnect_snd_queue_depth = calcSndDepth; + Gp_interconnect_queue_depth = calcQueueDepth; + + elog(DEBUG1, "SetupUDPIFCInterconnect: queue depth, " + "queue_depth=%d, snd_queue_depth=%d, " + "mem_size=%d, slices=%d, packet_size=%d", + Gp_interconnect_queue_depth, + Gp_interconnect_snd_queue_depth, + Gp_interconnect_mem_size, + sliceNum, + Gp_max_packet_size); + } icContext = SetupUDPIFCInterconnect_Internal(estate->es_sliceTable); @@ -3815,7 +4300,6 @@ static TupleChunkListItem receiveChunksUDPIFC(ChunkTransportState *pTransportStates, ChunkTransportStateEntry *pEntry, int16 motNodeID, int16 *srcRoute, MotionConn *mConn) { - bool directed = false; int nFds = 0; int *waitFds = NULL; int nevent = 0; @@ -3832,7 +4316,6 @@ receiveChunksUDPIFC(ChunkTransportState *pTransportStates, ChunkTransportStateEn if (mConn != NULL) { conn = CONTAINER_OF(mConn, MotionConnUDP, mConn); - directed = true; *srcRoute = conn->route; setMainThreadWaiting(&rx_control_info.mainWaitingState, motNodeID, conn->route, pTransportStates->sliceTable->ic_instance_id); @@ -4475,7 +4958,7 @@ logPkt(char *prefix, icpkthdr *pkt) * packet is retransmitted. */ static void -handleAckedPacket(MotionConn *ackMotionConn, ICBuffer *buf, uint64 now) +handleAckedPacket(MotionConn *ackMotionConn, ICBuffer *buf, uint64 now, struct icpkthdr *pkt) { uint64 ackTime = 0; bool bufIsHead = false; @@ -4488,6 +4971,39 @@ handleAckedPacket(MotionConn *ackMotionConn, ICBuffer *buf, uint64 now) buf = icBufferListDelete(&ackConn->unackQueue, buf); + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE || Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER) + { + bufConn = CONTAINER_OF(buf->conn, MotionConnUDP, mConn); + buf = icBufferListDelete(&unack_queue_ring.slots[buf->unackQueueRingSlot], buf); + unack_queue_ring.numOutStanding--; + if (icBufferListLength(&ackConn->unackQueue) >= 1) + unack_queue_ring.numSharedOutStanding--; + + ackTime = now - buf->sentTime; + + if (buf->nRetry == 0) + { + /* adjust the congestion control window. */ + if (snd_control_info.cwnd < snd_control_info.ssthresh) + snd_control_info.cwnd += 2; + else + snd_control_info.cwnd += 1 / snd_control_info.cwnd; + snd_control_info.cwnd = Min(snd_control_info.cwnd, snd_buffer_pool.maxCount); + } + + if ((bufConn->rttvar.rto << 1) > ackTime && pkt->retry_times != Gp_interconnect_min_retries_before_timeout) + estimateRTT(buf->conn, (now - pkt->send_time)); + + if (buf->nRetry && pkt->retry_times > 0 && pkt->retry_times < Gp_interconnect_min_retries_before_timeout) + bufConn->rttvar.rto += (bufConn->rttvar.rto >> 4 * buf->nRetry); + + if (unlikely(Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER)) + { + bufConn->sndvar.ts_rto = bufConn->rttvar.rto; + addtoRTOList(&mudp, bufConn); + } + } + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS) { buf = icBufferListDelete(&unack_queue_ring.slots[buf->unackQueueRingSlot], buf); @@ -4567,7 +5083,7 @@ handleAckedPacket(MotionConn *ackMotionConn, ICBuffer *buf, uint64 now) * if we receive a stop message, return true (caller will clean up). */ static bool -handleAcks(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChunkEntry) +handleAcks(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChunkEntry, bool need_flush) { ChunkTransportStateEntryUDP * pEntry = NULL; bool ret = false; @@ -4580,7 +5096,6 @@ handleAcks(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChun struct icpkthdr *pkt = snd_control_info.ackBuffer; - bool shouldSendBuffers = false; SliceTable *sliceTbl = transportStates->sliceTable; @@ -4754,7 +5269,7 @@ handleAcks(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChun while (!icBufferListIsHead(&ackConn->unackQueue, link) && buf->pkt->seq <= pkt->seq) { next = link->next; - handleAckedPacket(&ackConn->mConn, buf, now); + handleAckedPacket(&ackConn->mConn, buf, now, pkt); shouldSendBuffers = true; link = next; buf = GET_ICBUFFER_FROM_PRIMARY(link); @@ -4770,7 +5285,7 @@ handleAcks(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChun * still send here, since in STOP/EOS race case, we may have been * in EOS sending logic and will not check stop message. */ - if (shouldSendBuffers) + if (shouldSendBuffers && need_flush) sendBuffers(transportStates, &pEntry->entry, &ackConn->mConn); } else if (DEBUG1 >= log_min_messages) @@ -5014,7 +5529,7 @@ handleStopMsgs(ChunkTransportState *transportStates, ChunkTransportStateEntry *p { if (pollAcks(transportStates, pEntry->txfd, 0)) { - if (handleAcks(transportStates, &pEntry->entry)) + if (handleAcks(transportStates, &pEntry->entry, true)) { /* more stops found, loop again. */ i = 0; @@ -5056,7 +5571,7 @@ sendBuffers(ChunkTransportState *transportStates, ChunkTransportStateEntry *pEnt { ICBuffer *buf = NULL; - if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS && + if ((Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS || Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) && (icBufferListLength(&conn->unackQueue) > 0 && unack_queue_ring.numSharedOutStanding >= (snd_control_info.cwnd - snd_control_info.minCwnd))) break; @@ -5077,7 +5592,7 @@ sendBuffers(ChunkTransportState *transportStates, ChunkTransportStateEntry *pEnt icBufferListAppend(&conn->unackQueue, buf); - if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS) + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS || Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) { unack_queue_ring.numOutStanding++; if (icBufferListLength(&conn->unackQueue) > 1) @@ -5101,6 +5616,10 @@ sendBuffers(ChunkTransportState *transportStates, ChunkTransportStateEntry *pEnt updateStats(TPE_DATA_PKT_SEND, conn, buf->pkt); #endif + struct icpkthdr *pkt_ = buf->pkt; + pkt_->send_time = now; + pkt_->recv_time = 0; + pkt_->retry_times = buf->nRetry; sendOnce(transportStates, pEntry, buf, &conn->mConn); ic_statistics.sndPktNum++; @@ -5248,7 +5767,7 @@ handleAckForDisorderPkt(ChunkTransportState *transportStates, if (buf->pkt->seq == pkt->seq) { - handleAckedPacket(&conn->mConn, buf, now); + handleAckedPacket(&conn->mConn, buf, now, pkt); shouldSendBuffers = true; break; } @@ -5258,7 +5777,7 @@ handleAckForDisorderPkt(ChunkTransportState *transportStates, /* this is a lost packet, retransmit */ buf->nRetry++; - if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS) + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS || Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) { buf = icBufferListDelete(&unack_queue_ring.slots[buf->unackQueueRingSlot], buf); putIntoUnackQueueRing(&unack_queue_ring, buf, @@ -5287,7 +5806,7 @@ handleAckForDisorderPkt(ChunkTransportState *transportStates, /* remove packet already received. */ next = link->next; - handleAckedPacket(&conn->mConn, buf, now); + handleAckedPacket(&conn->mConn, buf, now, pkt); shouldSendBuffers = true; link = next; buf = GET_ICBUFFER_FROM_PRIMARY(link); @@ -5304,7 +5823,7 @@ handleAckForDisorderPkt(ChunkTransportState *transportStates, lostPktCnt--; } } - if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS) + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS || Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) { snd_control_info.ssthresh = Max(snd_control_info.cwnd / 2, snd_control_info.minCwnd); snd_control_info.cwnd = snd_control_info.ssthresh; @@ -5357,7 +5876,7 @@ handleAckForDuplicatePkt(MotionConn *mConn, icpkthdr *pkt) while (!icBufferListIsHead(&conn->unackQueue, link) && (buf->pkt->seq <= pkt->extraSeq)) { next = link->next; - handleAckedPacket(&conn->mConn, buf, now); + handleAckedPacket(&conn->mConn, buf, now, pkt); shouldSendBuffers = true; link = next; buf = GET_ICBUFFER_FROM_PRIMARY(link); @@ -5369,7 +5888,7 @@ handleAckForDuplicatePkt(MotionConn *mConn, icpkthdr *pkt) next = link->next; if (buf->pkt->seq == pkt->seq) { - handleAckedPacket(&conn->mConn, buf, now); + handleAckedPacket(&conn->mConn, buf, now, pkt); shouldSendBuffers = true; break; } @@ -5451,55 +5970,223 @@ checkExpiration(ChunkTransportState *transportStates, uint64 now) { /* check for expiration */ - int count = 0; - int retransmits = 0; + int count = 0; + int retransmits = 0; MotionConnUDP *currBuffConn = NULL; Assert(unack_queue_ring.currentTime != 0); - while (now >= (unack_queue_ring.currentTime + TIMER_SPAN) && count++ < UNACK_QUEUE_RING_SLOTS_NUM) + + if (unlikely(Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER)) { - /* expired, need to resend them */ - ICBuffer *curBuf = NULL; + checkRtmTimeout(&mudp, now, 500, transportStates, pEntry, triggerConn); + return; + } - while ((curBuf = icBufferListPop(&unack_queue_ring.slots[unack_queue_ring.idx])) != NULL) + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) + { + uint64 timer_span_time = unack_queue_ring.currentTime + TIMER_SPAN_LOSS; + + while (now >= (timer_span_time + unack_queue_ring.time_difference) && count++ < UNACK_QUEUE_RING_SLOTS_NUM) { - curBuf->nRetry++; - putIntoUnackQueueRing( - &unack_queue_ring, - curBuf, - computeExpirationPeriod(curBuf->conn, curBuf->nRetry), now); + /* expired, need to resend them */ + ICBuffer *curBuf = NULL; + + while ((curBuf = icBufferListPop(&unack_queue_ring.slots[unack_queue_ring.idx])) != NULL) + { + MotionConnUDP *conn = NULL; + conn = CONTAINER_OF(curBuf->conn, MotionConnUDP, mConn); + curBuf->nRetry++; + + /* + * Fixed Timeout Thresholds: Traditional TCP-style Retransmission Timeout + * (RTTVAR.RTO) calculations may be too rigid for networks with volatile + * latency. This leads to: + * Premature Retransmissions: Unnecessary data resends during temporary + * latency spikes, wasting bandwidth. + * Delayed Recovery: Slow reaction to actual packet loss when RTO is + * overly conservative. + * + * Lack of Context Awareness: Static RTO ignores real-time network behavior + * patterns, reducing throughput and responsiveness. + * + * Solution: Dynamic Timeout Threshold Adjustment + * Implements an adaptive timeout mechanism to optimize retransmission: + * if (now < (curBuf->sentTime + conn->rttvar.rto)) { + * uint32_t diff = (curBuf->sentTime + conn->rttvar.rto) - now; + * // ... (statistical tracking and threshold adjustment) + * } + * Temporary Latency Spike: Uses max (conservative) to avoid false + * retransmits, reducing bandwidth waste (vs. traditional mistaken + * retransmissions). + * Persistent Packet Loss: Prioritizes min (aggressive) via + * weight_retrans, accelerating recovery (vs. slow fixed-RTO reaction). + * Stable Network: Balances weights for equilibrium throughput (vs. + * static RTO limitations). + */ + if (now < (curBuf->sentTime + conn->rttvar.rto)) + { +#ifdef TIMEOUT_Z + uint32_t diff = (curBuf->sentTime + conn->rttvar.rto) - now; + if(unack_queue_ring.retrans_count == 0 && unack_queue_ring.no_retrans_count == 0) + { + unack_queue_ring.min = diff; + unack_queue_ring.max = diff; + } + + if (diff < unack_queue_ring.min) unack_queue_ring.min = diff; + if (diff > unack_queue_ring.max) unack_queue_ring.max = diff; + + if (unack_queue_ring.retrans_count == 0) + unack_queue_ring.time_difference = unack_queue_ring.max; + else if (unack_queue_ring.no_retrans_count == 0 && ic_statistics.retransmits < (Gp_interconnect_min_retries_before_timeout / 4)) + unack_queue_ring.time_difference = 0; + else + { + uint32_t total_count = unack_queue_ring.retrans_count + unack_queue_ring.no_retrans_count; + double weight_retrans = (double)unack_queue_ring.retrans_count / total_count; + double weight_no_retrans = (double)unack_queue_ring.no_retrans_count / total_count; + unack_queue_ring.time_difference = (uint32_t)(unack_queue_ring.max * weight_no_retrans + unack_queue_ring.min * weight_retrans); + } + + ++unack_queue_ring.no_retrans_count; + } + else + ++unack_queue_ring.retrans_count; +#endif #ifdef TRANSFER_PROTOCOL_STATS - updateStats(TPE_DATA_PKT_SEND, curBuf->conn, curBuf->pkt); + updateStats(TPE_DATA_PKT_SEND, curBuf->conn, curBuf->pkt); #endif + ChunkTransportStateEntryUDP *pEntryUdp; + pEntryUdp = CONTAINER_OF(pEntry, ChunkTransportStateEntryUDP, entry); + putIntoUnackQueueRing(&unack_queue_ring, + curBuf, + computeExpirationPeriod(curBuf->conn, curBuf->nRetry), getCurrentTime()); + struct icpkthdr *pkt_ = curBuf->pkt; - sendOnce(transportStates, pEntry, curBuf, curBuf->conn); + pkt_->send_time = getCurrentTime(); + pkt_->recv_time = 0; + pkt_->retry_times = curBuf->nRetry; - currBuffConn = CONTAINER_OF(curBuf->conn, MotionConnUDP, mConn); + sendOnce(transportStates, pEntry, curBuf, curBuf->conn); - retransmits++; - ic_statistics.retransmits++; - currBuffConn->stat_count_resent++; - currBuffConn->stat_max_resent = Max(currBuffConn->stat_max_resent, - currBuffConn->stat_count_resent); + /* + * Adaptive Retry Backoff with Polling for Network Asymmetry Mitigation + * + * This logic addresses two critical network pathologies: + * 1. RTO Distortion Amplification: + * - Packet loss in volatile networks causes RTO-based retransmission errors + * - Multiple spurious retries increase network load and congestion collapse risk + * 2. Data Skew-Induced Starvation: + * - Under unbalanced workloads, low-traffic nodes experience MON (Message Order Number) delays + * - Delayed ACKs trigger false retransmissions even when packets arrive eventually + * - Unacked queue inflation worsens congestion in high-traffic nodes + */ + int32_t loop_ack = curBuf->nRetry; + uint32_t rto_min = UDP_RTO_MIN / 10; + uint32_t rtoMs = conn->rttvar.rto / 1000; + int32_t wait_time = rto_min > rtoMs ? rto_min : rtoMs; + int32_t loop = 0; - checkNetworkTimeout(curBuf, now, &transportStates->networkTimeoutIsLogged); + /* + * To optimize performance, we need to process all the time-out file descriptors (fds) + * in each batch together. + */ + if (loop_ack > 0) + { + while (loop++ < loop_ack) + { + if (pollAcks(transportStates, pEntryUdp->txfd, wait_time)) + { + handleAcks(transportStates, pEntry, false); + break; + } + + struct icpkthdr *pkt_ = curBuf->pkt; + pkt_->send_time = getCurrentTime(); + pkt_->recv_time = 0; + pkt_->retry_times = curBuf->nRetry; + + sendOnce(transportStates, pEntry, curBuf, curBuf->conn); + + if (loop_ack < (Gp_interconnect_min_retries_before_timeout / 10)) + wait_time += wait_time / 10; + else if (loop_ack > (Gp_interconnect_min_retries_before_timeout / 10) && loop_ack < (Gp_interconnect_min_retries_before_timeout / 5)) + wait_time += RTO_MAX / 10; + else if (loop_ack > (Gp_interconnect_min_retries_before_timeout / 5) && loop_ack < (Gp_interconnect_min_retries_before_timeout / 2)) + wait_time += RTO_MAX / 5; + else if (loop_ack < (Gp_interconnect_min_retries_before_timeout)) + wait_time += RTO_MAX; + }; + } + + currBuffConn = CONTAINER_OF(curBuf->conn, MotionConnUDP, mConn); + + retransmits++; + ic_statistics.retransmits++; + currBuffConn->stat_count_resent++; + currBuffConn->stat_max_resent = Max(currBuffConn->stat_max_resent, + currBuffConn->stat_count_resent); + + checkNetworkTimeout(curBuf, now, &transportStates->networkTimeoutIsLogged); #ifdef AMS_VERBOSE_LOGGING - write_log("RESEND pkt with seq %d (retry %d, rtt " UINT64_FORMAT ") to route %d", - curBuf->pkt->seq, curBuf->nRetry, currBuffConn->rtt, currBuffConn->route); - logPkt("RESEND PKT in checkExpiration", curBuf->pkt); + write_log("RESEND pkt with seq %d (retry %d, rtt " UINT64_FORMAT ") to route %d", + curBuf->pkt->seq, curBuf->nRetry, currBuffConn->rtt, currBuffConn->route); + logPkt("RESEND PKT in checkExpiration", curBuf->pkt); #endif + } + + timer_span_time += TIMER_SPAN_LOSS; + unack_queue_ring.idx = (unack_queue_ring.idx + 1) % (UNACK_QUEUE_RING_SLOTS_NUM); } + } + else + { + while (now >= (unack_queue_ring.currentTime + TIMER_SPAN) && count++ < UNACK_QUEUE_RING_SLOTS_NUM) + { + /* expired, need to resend them */ + ICBuffer *curBuf = NULL; - unack_queue_ring.currentTime += TIMER_SPAN; - unack_queue_ring.idx = (unack_queue_ring.idx + 1) % (UNACK_QUEUE_RING_SLOTS_NUM); + while ((curBuf = icBufferListPop(&unack_queue_ring.slots[unack_queue_ring.idx])) != NULL) + { + curBuf->nRetry++; + putIntoUnackQueueRing( + &unack_queue_ring, + curBuf, + computeExpirationPeriod(curBuf->conn, curBuf->nRetry), now); + +#ifdef TRANSFER_PROTOCOL_STATS + updateStats(TPE_DATA_PKT_SEND, curBuf->conn, curBuf->pkt); +#endif + + sendOnce(transportStates, pEntry, curBuf, curBuf->conn); + + currBuffConn = CONTAINER_OF(curBuf->conn, MotionConnUDP, mConn); + + retransmits++; + ic_statistics.retransmits++; + currBuffConn->stat_count_resent++; + currBuffConn->stat_max_resent = Max(currBuffConn->stat_max_resent, currBuffConn->stat_count_resent); + checkNetworkTimeout(curBuf, now, &transportStates->networkTimeoutIsLogged); + +#ifdef AMS_VERBOSE_LOGGING + write_log("RESEND pkt with seq %d (retry %d, rtt " UINT64_FORMAT ") to route %d", + curBuf->pkt->seq, curBuf->nRetry, curBuf->conn->rtt, curBuf->conn->route); + logPkt("RESEND PKT in checkExpiration", curBuf->pkt); +#endif + } + + unack_queue_ring.currentTime += TIMER_SPAN; + unack_queue_ring.idx = (unack_queue_ring.idx + 1) % (UNACK_QUEUE_RING_SLOTS_NUM); + } + + /* + * deal with case when there is a long time this function is not called. + */ + unack_queue_ring.currentTime = now - (now % (TIMER_SPAN)); } - /* - * deal with case when there is a long time this function is not called. - */ - unack_queue_ring.currentTime = now - (now % TIMER_SPAN); if (retransmits > 0) { snd_control_info.ssthresh = Max(snd_control_info.cwnd / 2, snd_control_info.minCwnd); @@ -5693,7 +6380,7 @@ checkExceptions(ChunkTransportState *transportStates, checkExpirationCapacityFC(transportStates, pEntry, conn, timeout); } - if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS) + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS || Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) { uint64 now = getCurrentTime(); @@ -5738,14 +6425,24 @@ static inline int computeTimeout(MotionConn *mConn, int retry) { MotionConnUDP *conn = NULL; + uint32_t rtoMs = 0; conn = CONTAINER_OF(mConn, MotionConnUDP, mConn); + rtoMs = conn->rttvar.rto / 1000; if (icBufferListLength(&conn->unackQueue) == 0) return TIMER_CHECKING_PERIOD; ICBufferLink *bufLink = icBufferListFirst(&conn->unackQueue); ICBuffer *buf = GET_ICBUFFER_FROM_PRIMARY(bufLink); + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) + { + if (buf->nRetry == 0 && retry == 0 && unack_queue_ring.numSharedOutStanding < (snd_control_info.cwnd - snd_control_info.minCwnd)) + return 0; + + return rtoMs > TIMER_CHECKING_PERIOD ? rtoMs: TIMER_CHECKING_PERIOD; + } + if (buf->nRetry == 0 && retry == 0) return 0; @@ -5833,7 +6530,7 @@ SendChunkUDPIFC(ChunkTransportState *transportStates, if (pollAcks(transportStates, pEntry->txfd, timeout)) { - if (handleAcks(transportStates, &pEntry->entry)) + if (handleAcks(transportStates, &pEntry->entry, true)) { /* * We make sure that we deal with the stop messages only after @@ -5990,12 +6687,15 @@ SendEOSUDPIFC(ChunkTransportState *transportStates, timeout = computeTimeout(&conn->mConn, retry); if (pollAcks(transportStates, pEntry->txfd, timeout)) - handleAcks(transportStates, &pEntry->entry); - + handleAcks(transportStates, &pEntry->entry, true); checkExceptions(transportStates, &pEntry->entry, &conn->mConn, retry++, timeout); if (retry >= MAX_TRY) + { + if (icBufferListLength(&conn->unackQueue) == 0) + sendBuffers(transportStates, &pEntry->entry, &conn->mConn); break; + } } if ((!conn->mConn.cdbProc) || (icBufferListLength(&conn->unackQueue) == 0 && @@ -6220,24 +6920,60 @@ getCurrentTime(void) static void putIntoUnackQueueRing(UnackQueueRing *uqr, ICBuffer *buf, uint64 expTime, uint64 now) { + MotionConnUDP *buffConn = NULL; + buffConn = CONTAINER_OF(buf->conn, MotionConnUDP, mConn); uint64 diff = 0; int idx = 0; - - /* The first packet, currentTime is not initialized */ - if (uqr->currentTime == 0) - uqr->currentTime = now - (now % TIMER_SPAN); - - diff = now + expTime - uqr->currentTime; - if (diff >= UNACK_QUEUE_RING_LENGTH) + + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) { + /* The first packet, currentTime is not initialized */ +#ifndef TIMEOUT_Z + if (uqr->currentTime == 0) + uqr->currentTime = now - (now % TIMER_SPAN_LOSS); +#else + if (uqr->currentTime == 0 && buffConn->rttvar.rto == 0) + uqr->currentTime = now - (now % TIMER_SPAN_LOSS); + else + uqr->currentTime = now + buffConn->rttvar.rto; + +#endif + diff = expTime; + if (diff >= UNACK_QUEUE_RING_LENGTH_LOSS) + { #ifdef AMS_VERBOSE_LOGGING - write_log("putIntoUnackQueueRing:" "now " UINT64_FORMAT "expTime " UINT64_FORMAT "diff " UINT64_FORMAT "uqr-currentTime " UINT64_FORMAT, now, expTime, diff, uqr->currentTime); + write_log("putIntoUnackQueueRing:" "now " UINT64_FORMAT "expTime " UINT64_FORMAT "diff " UINT64_FORMAT "uqr-currentTime " UINT64_FORMAT, now, expTime, diff, uqr->currentTime); #endif - diff = UNACK_QUEUE_RING_LENGTH - 1; + diff = UNACK_QUEUE_RING_LENGTH_LOSS - 1; + } + else if (diff < TIMER_SPAN_LOSS) + { + diff = diff < TIMER_SPAN_LOSS ? TIMER_SPAN_LOSS : diff; + } } - else if (diff < TIMER_SPAN) + else { - diff = TIMER_SPAN; + if (uqr->currentTime == 0) + uqr->currentTime = now - (now % TIMER_SPAN_LOSS); + + diff = now + expTime - uqr->currentTime; + if (diff >= UNACK_QUEUE_RING_LENGTH) + { +#ifdef AMS_VERBOSE_LOGGING + write_log("putIntoUnackQueueRing:" "now " UINT64_FORMAT "expTime " UINT64_FORMAT "diff " UINT64_FORMAT "uqr-currentTime " UINT64_FORMAT, now, expTime, diff, uqr->currentTime); +#endif + diff = UNACK_QUEUE_RING_LENGTH - 1; + } + else if (diff < TIMER_SPAN) + { + diff = TIMER_SPAN; + } + + idx = (uqr->idx + diff / TIMER_SPAN) % UNACK_QUEUE_RING_SLOTS_NUM; + +#ifdef AMS_VERBOSE_LOGGING + write_log("PUTTW: curtime " UINT64_FORMAT " now " UINT64_FORMAT " (diff " UINT64_FORMAT ") expTime " UINT64_FORMAT " previdx %d, nowidx %d, nextidx %d", uqr->currentTime, now, diff, expTime, buf->unackQueueRingSlot, uqr->idx, idx); +#endif } idx = (uqr->idx + diff / TIMER_SPAN) % UNACK_QUEUE_RING_SLOTS_NUM; @@ -6684,9 +7420,25 @@ rxThreadFunc(void *arg) if (conn != NULL) { + uint64 now = getCurrentTime(); + uint64 send_time = pkt->send_time; + uint64 recv_time = now; + uint64 retry_times = pkt->retry_times; + MotionConnUDP *connUdp = NULL; + + connUdp = CONTAINER_OF(conn, MotionConnUDP, mConn); + bool drop_ack = pkt->seq < connUdp->conn_info.seq ? true : false; /* Handling a regular packet */ if (handleDataPacket(conn, pkt, &peer, &peerlen, ¶m, &wakeup_mainthread)) pkt = NULL; + if (!pkt) + { + param.msg.send_time = send_time; + param.msg.recv_time = recv_time; + param.msg.retry_times = retry_times; + } + if (drop_ack) + param.msg.retry_times = Gp_interconnect_min_retries_before_timeout; ic_statistics.recvPktNum++; } else diff --git a/contrib/interconnect/udp/ic_udpifc.h b/contrib/interconnect/udp/ic_udpifc.h index 76403abb3f3..af3ca72ba3b 100644 --- a/contrib/interconnect/udp/ic_udpifc.h +++ b/contrib/interconnect/udp/ic_udpifc.h @@ -90,6 +90,9 @@ typedef struct icpkthdr */ uint32 seq; uint32 extraSeq; + uint64_t send_time; + uint64_t recv_time; + uint8_t retry_times; } icpkthdr; typedef struct ICBuffer ICBuffer; diff --git a/src/backend/cdb/cdbvars.c b/src/backend/cdb/cdbvars.c index 04c81848b05..7984a9d61a4 100644 --- a/src/backend/cdb/cdbvars.c +++ b/src/backend/cdb/cdbvars.c @@ -200,6 +200,7 @@ int Gp_interconnect_queue_depth = 4; /* max number of messages * waiting in rx-queue before * we drop. */ int Gp_interconnect_snd_queue_depth = 2; +int Gp_interconnect_mem_size = 10; int Gp_interconnect_timer_period = 5; int Gp_interconnect_timer_checking_period = 20; int Gp_interconnect_default_rtt = 20; diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index cc98e66c089..3cfbfeb12aa 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -559,6 +559,8 @@ static const struct config_enum_entry gp_autostats_modes[] = { static const struct config_enum_entry gp_interconnect_fc_methods[] = { {"loss", INTERCONNECT_FC_METHOD_LOSS}, {"capacity", INTERCONNECT_FC_METHOD_CAPACITY}, + {"loss_advance", INTERCONNECT_FC_METHOD_LOSS_ADVANCE}, + {"loss_timer", INTERCONNECT_FC_METHOD_LOSS_TIMER}, {NULL, 0} }; @@ -3759,6 +3761,16 @@ struct config_int ConfigureNamesInt_gp[] = NULL, NULL, NULL }, + { + {"gp_interconnect_mem_size", PGC_USERSET, GP_ARRAY_TUNING, + gettext_noop("Sets the maximum size(in MB) of the send/recv queue memory for all connections in the UDP interconnect"), + NULL + }, + &Gp_interconnect_mem_size, + 10, 1, 1024, + NULL, NULL, NULL + }, + { {"gp_interconnect_timer_period", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the timer period (in ms) for UDP interconnect"), diff --git a/src/include/cdb/cdbvars.h b/src/include/cdb/cdbvars.h index 534f957978d..fb94a3960b5 100644 --- a/src/include/cdb/cdbvars.h +++ b/src/include/cdb/cdbvars.h @@ -335,6 +335,8 @@ typedef enum GpVars_Interconnect_Method { INTERCONNECT_FC_METHOD_CAPACITY = 0, INTERCONNECT_FC_METHOD_LOSS = 2, + INTERCONNECT_FC_METHOD_LOSS_ADVANCE = 3, + INTERCONNECT_FC_METHOD_LOSS_TIMER = 4, } GpVars_Interconnect_Method; extern int Gp_interconnect_fc_method; @@ -368,6 +370,7 @@ extern int Gp_interconnect_min_rto; extern int Gp_interconnect_transmit_timeout; extern int Gp_interconnect_min_retries_before_timeout; extern int Gp_interconnect_debug_retry_interval; +extern int Gp_interconnect_mem_size; /* UDP recv buf size in KB. For testing */ extern int Gp_udp_bufsize_k; diff --git a/src/include/utils/sync_guc_name.h b/src/include/utils/sync_guc_name.h index 7cecf083727..7a867660754 100644 --- a/src/include/utils/sync_guc_name.h +++ b/src/include/utils/sync_guc_name.h @@ -85,6 +85,7 @@ "gp_interconnect_queue_depth", "gp_interconnect_setup_timeout", "gp_interconnect_snd_queue_depth", + "gp_interconnect_mem_size", "gp_interconnect_tcp_listener_backlog", "gp_interconnect_timer_checking_period", "gp_interconnect_timer_period", diff --git a/src/test/regress/expected/icudp/gp_interconnect_fc_method.out b/src/test/regress/expected/icudp/gp_interconnect_fc_method.out index b115c95a393..4dcda3b8124 100644 --- a/src/test/regress/expected/icudp/gp_interconnect_fc_method.out +++ b/src/test/regress/expected/icudp/gp_interconnect_fc_method.out @@ -96,3 +96,49 @@ SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(len 29 | 100 | 2600 (30 rows) +SET gp_interconnect_fc_method = "loss_advance"; +SHOW gp_interconnect_fc_method; + gp_interconnect_fc_method +--------------------------- + loss_advance +(1 row) + +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + diff --git a/src/test/regress/expected/icudp/queue_depth_combination_capacity.out b/src/test/regress/expected/icudp/queue_depth_combination_capacity.out index ec8ea9594d6..64c177e36d5 100644 --- a/src/test/regress/expected/icudp/queue_depth_combination_capacity.out +++ b/src/test/regress/expected/icudp/queue_depth_combination_capacity.out @@ -266,3 +266,260 @@ SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(len 29 | 100 | 2600 (30 rows) +-- Skew with gather+redistribute +SET gp_interconnect_fc_method = "loss_advance"; +SHOW gp_interconnect_fc_method; + gp_interconnect_fc_method +--------------------------- + loss_advance +(1 row) + +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1; +SET gp_interconnect_queue_depth = 1; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 4096; +SET gp_interconnect_queue_depth = 4096; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1; +SET gp_interconnect_queue_depth = 4096; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 4096; +SET gp_interconnect_queue_depth = 1; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1024; +SET gp_interconnect_queue_depth = 1024; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + diff --git a/src/test/regress/expected/icudp/queue_depth_combination_loss_advance.out b/src/test/regress/expected/icudp/queue_depth_combination_loss_advance.out new file mode 100644 index 00000000000..c509dd84ef7 --- /dev/null +++ b/src/test/regress/expected/icudp/queue_depth_combination_loss_advance.out @@ -0,0 +1,260 @@ +-- +-- @description Interconncet flow control test case: combination guc value +-- @created 2025-09-12 +-- Set mode +SET gp_interconnect_fc_method = "loss_advance"; +-- Create a table +CREATE TEMP TABLE small_table(dkey INT, jkey INT, rval REAL, tval TEXT default 'abcdefghijklmnopqrstuvwxyz') DISTRIBUTED BY (dkey); +-- Generate some data +INSERT INTO small_table VALUES(generate_series(1, 5000), generate_series(5001, 10000), sqrt(generate_series(5001, 10000))); +-- Functional tests +-- Skew with gather+redistribute +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1; +SET gp_interconnect_queue_depth = 1; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 4096; +SET gp_interconnect_queue_depth = 4096; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1; +SET gp_interconnect_queue_depth = 4096; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 4096; +SET gp_interconnect_queue_depth = 1; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1024; +SET gp_interconnect_queue_depth = 1024; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + rval2 | count | sum_len_tval +-------+-------+-------------- + 0 | 100 | 2600 + 1 | 100 | 2600 + 2 | 100 | 2600 + 3 | 100 | 2600 + 4 | 100 | 2600 + 5 | 100 | 2600 + 6 | 100 | 2600 + 7 | 100 | 2600 + 8 | 100 | 2600 + 9 | 100 | 2600 + 10 | 100 | 2600 + 11 | 100 | 2600 + 12 | 100 | 2600 + 13 | 100 | 2600 + 14 | 100 | 2600 + 15 | 100 | 2600 + 16 | 100 | 2600 + 17 | 100 | 2600 + 18 | 100 | 2600 + 19 | 100 | 2600 + 20 | 100 | 2600 + 21 | 100 | 2600 + 22 | 100 | 2600 + 23 | 100 | 2600 + 24 | 100 | 2600 + 25 | 100 | 2600 + 26 | 100 | 2600 + 27 | 100 | 2600 + 28 | 100 | 2600 + 29 | 100 | 2600 +(30 rows) + diff --git a/src/test/regress/greenplum_schedule b/src/test/regress/greenplum_schedule index 37594732def..ecf37e73029 100755 --- a/src/test/regress/greenplum_schedule +++ b/src/test/regress/greenplum_schedule @@ -75,7 +75,7 @@ test: gp_dump_query_oids analyze gp_owner_permission incremental_analyze truncat test: indexjoin as_alias regex_gp gpparams with_clause transient_types gp_rules dispatch_encoding motion_gp gp_pullup_expr # interconnect tests -test: icudp/gp_interconnect_queue_depth icudp/gp_interconnect_queue_depth_longtime icudp/gp_interconnect_snd_queue_depth icudp/gp_interconnect_snd_queue_depth_longtime icudp/gp_interconnect_min_retries_before_timeout icudp/gp_interconnect_transmit_timeout icudp/gp_interconnect_cache_future_packets icudp/gp_interconnect_default_rtt icudp/gp_interconnect_fc_method icudp/gp_interconnect_min_rto icudp/gp_interconnect_timer_checking_period icudp/gp_interconnect_timer_period icudp/queue_depth_combination_loss icudp/queue_depth_combination_capacity +test: icudp/gp_interconnect_queue_depth icudp/gp_interconnect_queue_depth_longtime icudp/gp_interconnect_snd_queue_depth icudp/gp_interconnect_snd_queue_depth_longtime icudp/gp_interconnect_min_retries_before_timeout icudp/gp_interconnect_transmit_timeout icudp/gp_interconnect_cache_future_packets icudp/gp_interconnect_default_rtt icudp/gp_interconnect_fc_method icudp/gp_interconnect_min_rto icudp/gp_interconnect_timer_checking_period icudp/gp_interconnect_timer_period icudp/queue_depth_combination_loss icudp/queue_depth_combination_capacity icudp/queue_depth_combination_loss_advance # event triggers cannot run concurrently with any test that runs DDL test: event_trigger_gp diff --git a/src/test/regress/icudp_schedule b/src/test/regress/icudp_schedule index 6a2e3d44a3f..f0332edb7d3 100644 --- a/src/test/regress/icudp_schedule +++ b/src/test/regress/icudp_schedule @@ -4,7 +4,7 @@ # Below cases are also in greenplum_schedule, but as they are fast enough # we duplicate them here to make this pipeline cover more on icudp. -test: icudp/gp_interconnect_queue_depth icudp/gp_interconnect_queue_depth_longtime icudp/gp_interconnect_snd_queue_depth icudp/gp_interconnect_snd_queue_depth_longtime icudp/gp_interconnect_min_retries_before_timeout icudp/gp_interconnect_transmit_timeout icudp/gp_interconnect_cache_future_packets icudp/gp_interconnect_default_rtt icudp/gp_interconnect_fc_method icudp/gp_interconnect_min_rto icudp/gp_interconnect_timer_checking_period icudp/gp_interconnect_timer_period icudp/queue_depth_combination_loss icudp/queue_depth_combination_capacity icudp/icudp_regression +test: icudp/gp_interconnect_queue_depth icudp/gp_interconnect_queue_depth_longtime icudp/gp_interconnect_snd_queue_depth icudp/gp_interconnect_snd_queue_depth_longtime icudp/gp_interconnect_min_retries_before_timeout icudp/gp_interconnect_transmit_timeout icudp/gp_interconnect_cache_future_packets icudp/gp_interconnect_default_rtt icudp/gp_interconnect_fc_method icudp/gp_interconnect_min_rto icudp/gp_interconnect_timer_checking_period icudp/gp_interconnect_timer_period icudp/queue_depth_combination_loss icudp/queue_depth_combination_capacity icudp/icudp_regression icudp/queue_depth_combination_loss_advance # Below case is very slow, do not add it in greenplum_schedule. test: icudp/icudp_full diff --git a/src/test/regress/sql/icudp/gp_interconnect_fc_method.sql b/src/test/regress/sql/icudp/gp_interconnect_fc_method.sql index 52af4a220a1..929cd9c5d42 100644 --- a/src/test/regress/sql/icudp/gp_interconnect_fc_method.sql +++ b/src/test/regress/sql/icudp/gp_interconnect_fc_method.sql @@ -27,3 +27,11 @@ SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(len JOIN small_table USING(jkey) GROUP BY rval2 ORDER BY rval2; + +SET gp_interconnect_fc_method = "loss_advance"; +SHOW gp_interconnect_fc_method; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; diff --git a/src/test/regress/sql/icudp/queue_depth_combination_capacity.sql b/src/test/regress/sql/icudp/queue_depth_combination_capacity.sql index 7e7348d09ca..43aed3fd59e 100644 --- a/src/test/regress/sql/icudp/queue_depth_combination_capacity.sql +++ b/src/test/regress/sql/icudp/queue_depth_combination_capacity.sql @@ -66,3 +66,58 @@ SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(len JOIN small_table USING(jkey) GROUP BY rval2 ORDER BY rval2; + +-- Skew with gather+redistribute +SET gp_interconnect_fc_method = "loss_advance"; +SHOW gp_interconnect_fc_method; + +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1; +SET gp_interconnect_queue_depth = 1; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 4096; +SET gp_interconnect_queue_depth = 4096; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1; +SET gp_interconnect_queue_depth = 4096; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 4096; +SET gp_interconnect_queue_depth = 1; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1024; +SET gp_interconnect_queue_depth = 1024; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; diff --git a/src/test/regress/sql/icudp/queue_depth_combination_loss_advance.sql b/src/test/regress/sql/icudp/queue_depth_combination_loss_advance.sql new file mode 100644 index 00000000000..a214e2a48ba --- /dev/null +++ b/src/test/regress/sql/icudp/queue_depth_combination_loss_advance.sql @@ -0,0 +1,65 @@ +-- +-- @description Interconncet flow control test case: combination guc value +-- @created 2025-09-12 + +-- Set mode +SET gp_interconnect_fc_method = "loss_advance"; + +-- Create a table +CREATE TEMP TABLE small_table(dkey INT, jkey INT, rval REAL, tval TEXT default 'abcdefghijklmnopqrstuvwxyz') DISTRIBUTED BY (dkey); + +-- Generate some data +INSERT INTO small_table VALUES(generate_series(1, 5000), generate_series(5001, 10000), sqrt(generate_series(5001, 10000))); + +-- Functional tests +-- Skew with gather+redistribute +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1; +SET gp_interconnect_queue_depth = 1; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 4096; +SET gp_interconnect_queue_depth = 4096; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1; +SET gp_interconnect_queue_depth = 4096; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 4096; +SET gp_interconnect_queue_depth = 1; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; + +-- Set GUC values +SET gp_interconnect_snd_queue_depth = 1024; +SET gp_interconnect_queue_depth = 1024; +SELECT ROUND(foo.rval * foo.rval)::INT % 30 AS rval2, COUNT(*) AS count, SUM(length(foo.tval)) AS sum_len_tval + FROM (SELECT 5001 AS jkey, rval, tval FROM small_table ORDER BY dkey LIMIT 3000) foo + JOIN small_table USING(jkey) + GROUP BY rval2 + ORDER BY rval2; From 0c9f87bffdfc5dcdbb336194ef6d322009d9eff3 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Mon, 22 Sep 2025 22:13:43 +0800 Subject: [PATCH 165/260] Revert "ORCA: Support create plan in singlenode mode" This reverts commit 36c1e7a92c23ebd3cbdf670f3fd1ab0089c60dab. --- .github/workflows/build-cloudberry.yml | 6 +- .../gpopt/config/CConfigParamMapping.cpp | 8 +- .../gpopt/translate/CTranslatorQueryToDXL.cpp | 47 ------- .../gpopt/translate/CTranslatorUtils.cpp | 1 - src/backend/gpopt/utils/COptTasks.cpp | 7 +- .../include/naucrates/traceflags/traceflags.h | 3 - src/backend/optimizer/plan/planner.c | 2 +- src/backend/utils/misc/guc_gp.c | 11 ++ .../gpopt/translate/CTranslatorQueryToDXL.h | 2 - src/include/utils/guc.h | 1 + src/include/utils/unsync_guc_name.h | 1 + .../expected/lockmodes.out | 116 +++++++++--------- .../singlenode_regress/expected/explain.out | 1 - .../expected/rowsecurity.out | 38 +++--- .../singlenode_regress/expected/select.out | 13 +- 15 files changed, 103 insertions(+), 154 deletions(-) diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index 76dc06ced80..fecd44a9637 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -273,8 +273,7 @@ jobs: "make_configs":["src/test/isolation:installcheck-singlenode", "src/test/singlenode_regress:installcheck-singlenode", "src/test/singlenode_isolation2:installcheck-singlenode"], - "num_primary_mirror_pairs":0, - "pg_settings":{"optimizer":"off"} + "num_primary_mirror_pairs":0 }, {"test":"ic-resgroup-v2", "make_configs":["src/test/isolation2:installcheck-resgroup-v2"], @@ -319,6 +318,9 @@ jobs: }, {"test":"ic-parallel-retrieve-cursor", "make_configs":["src/test/isolation2:installcheck-parallel-retrieve-cursor"] + }, + {"test":"ic-cbdb-parallel", + "make_configs":["src/test/regress:installcheck-cbdb-parallel"] } ] }' diff --git a/src/backend/gpopt/config/CConfigParamMapping.cpp b/src/backend/gpopt/config/CConfigParamMapping.cpp index 2968a31829d..603855c50ec 100644 --- a/src/backend/gpopt/config/CConfigParamMapping.cpp +++ b/src/backend/gpopt/config/CConfigParamMapping.cpp @@ -15,7 +15,7 @@ extern "C" { #include "postgres.h" -#include "cdb/cdbvars.h" + #include "utils/guc.h" } @@ -386,12 +386,6 @@ CConfigParamMapping::PackConfigParamInBitset( } } - if (IS_SINGLENODE()) { - traceflag_bitset->ExchangeSet(EopttraceSingleNodeMode); - } else { - traceflag_bitset->ExchangeClear(EopttraceSingleNodeMode); - } - if (!optimizer_enable_nljoin) { CBitSet *nl_join_bitset = CXform::PbsNLJoinXforms(mp); diff --git a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp index 34b045b6807..20cc6557c28 100644 --- a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp +++ b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp @@ -210,9 +210,6 @@ CTranslatorQueryToDXL::CTranslatorQueryToDXL( } } - // check if query has insert/update/delete when is_master_only is true. - CheckUnsupportedDDLInSingleMode(m_mp, query); - // check if the query has any unsupported node types CheckUnsupportedNodeTypes(query); @@ -283,50 +280,6 @@ CTranslatorQueryToDXL::~CTranslatorQueryToDXL() } } -//--------------------------------------------------------------------------- -// @function: -// CTranslatorQueryToDXL::CheckUnsupportedNodeTypes -// -// @doc: -// Check for unsupported node types, and throws an exception when found -// -//--------------------------------------------------------------------------- -void -CTranslatorQueryToDXL::CheckUnsupportedDDLInSingleMode(CMemoryPool *mp, Query *query) -{ - static const SUnsupportedFeature unsupported_features[] = { - {T_SubLink, GPOS_WSZ_LIT("Sublink")}, - {T_SubqueryScan, GPOS_WSZ_LIT("Subscan")}, - }; - - List *unsupported_list = NIL; - for (ULONG ul = 0; ul < GPOS_ARRAY_SIZE(unsupported_features); ul++) - { - unsupported_list = gpdb::LAppendInt(unsupported_list, - unsupported_features[ul].node_tag); - } - - INT unsupported_node = gpdb::FindNodes((Node *) query, unsupported_list); - gpdb::GPDBFree(unsupported_list); - - if (GPOS_FTRACE(EopttraceSingleNodeMode) || GPOS_FTRACE(EopttraceDisableMotions)) { - if (query->commandType == CMD_INSERT || query->commandType == CMD_UPDATE || - query->commandType == CMD_DELETE) { - GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiQuery2DXLUnsupportedFeature, - GPOS_WSZ_LIT("Single-mode not support insert/update/delete")); - } - - if (0 <= unsupported_node) { - CWStringDynamic error_message(mp); - error_message.AppendFormat(GPOS_WSZ_LIT("Single-mode not support %s"), - unsupported_features[unsupported_node].m_feature_name); - - GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiQuery2DXLUnsupportedFeature, - error_message.GetBuffer()); - } - } -} - //--------------------------------------------------------------------------- // @function: // CTranslatorQueryToDXL::CheckUnsupportedNodeTypes diff --git a/src/backend/gpopt/translate/CTranslatorUtils.cpp b/src/backend/gpopt/translate/CTranslatorUtils.cpp index 356f2668919..0887c72725c 100644 --- a/src/backend/gpopt/translate/CTranslatorUtils.cpp +++ b/src/backend/gpopt/translate/CTranslatorUtils.cpp @@ -150,7 +150,6 @@ CTranslatorUtils::GetTableDescr(CMemoryPool *mp, CMDAccessor *md_accessor, } else if (IMDRelation::ErelstorageForeign != rel->RetrieveRelStorageType() && !optimizer_enable_master_only_queries && - !GPOS_FTRACE(EopttraceSingleNodeMode) && (IMDRelation::EreldistrMasterOnly == distribution_policy)) { // fall back to the planner for queries on master-only table if they are disabled with Orca. This is due to diff --git a/src/backend/gpopt/utils/COptTasks.cpp b/src/backend/gpopt/utils/COptTasks.cpp index afdbcc4665c..dd0e61116d8 100644 --- a/src/backend/gpopt/utils/COptTasks.cpp +++ b/src/backend/gpopt/utils/COptTasks.cpp @@ -953,9 +953,10 @@ COptTasks::OptimizeTask(void *ptr) query_to_dxl_translator->GetCTEs(); GPOS_ASSERT(nullptr != query_output_dxlnode_array); - BOOL is_master_only = GPOS_FTRACE(EopttraceDisableMotions) || - GPOS_FTRACE(EopttraceSingleNodeMode) || - !query_to_dxl_translator->HasDistributedTables(); + BOOL is_master_only = + !optimizer_enable_motions || + (!optimizer_enable_motions_masteronly_queries && + !query_to_dxl_translator->HasDistributedTables()); // See NoteDistributionPolicyOpclasses() in src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp BOOL use_legacy_opfamilies = (query_to_dxl_translator->GetDistributionHashOpsKind() == diff --git a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h index 0693a374fbf..2e489f214e5 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h @@ -83,9 +83,6 @@ enum EOptTraceFlag // print debug info of CTE EopttraceDebugCTE = 101020, - // Is singlenode - EopttraceSingleNodeMode = 101021, - /////////////////////////////////////////////////////// ////////////////// transformations flags ////////////// /////////////////////////////////////////////////////// diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 5abd5ca8709..da5acb23ebf 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -384,7 +384,7 @@ standard_planner(Query *parse, const char *query_string, int cursorOptions, * PARALLEL RETRIEVE CURSOR is not supported by ORCA yet. */ if (optimizer && - IS_QD_OR_SINGLENODE() && + GP_ROLE_DISPATCH == Gp_role && IS_QUERY_DISPATCHER() && (cursorOptions & CURSOR_OPT_SKIP_FOREIGN_PARTITIONS) == 0 && (cursorOptions & CURSOR_OPT_PARALLEL_RETRIEVE) == 0) diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 3cfbfeb12aa..18d33966de2 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -324,6 +324,7 @@ char *optimizer_search_strategy_path = NULL; /* GUCs to tell Optimizer to enable a physical operator */ bool optimizer_enable_nljoin; bool optimizer_enable_indexjoin; +bool optimizer_enable_motions_masteronly_queries; bool optimizer_enable_motions; bool optimizer_enable_motion_broadcast; bool optimizer_enable_motion_gather; @@ -2180,6 +2181,16 @@ struct config_bool ConfigureNamesBool_gp[] = true, NULL, NULL, NULL }, + { + {"optimizer_enable_motions_masteronly_queries", PGC_USERSET, DEVELOPER_OPTIONS, + gettext_noop("Enable plans with Motion operators in the optimizer for queries with no distributed tables."), + NULL, + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + }, + &optimizer_enable_motions_masteronly_queries, + false, + NULL, NULL, NULL + }, { {"optimizer_enable_motions", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Enable plans with Motion operators in the optimizer."), diff --git a/src/include/gpopt/translate/CTranslatorQueryToDXL.h b/src/include/gpopt/translate/CTranslatorQueryToDXL.h index 392af626d29..c74892e5df2 100644 --- a/src/include/gpopt/translate/CTranslatorQueryToDXL.h +++ b/src/include/gpopt/translate/CTranslatorQueryToDXL.h @@ -147,8 +147,6 @@ class CTranslatorQueryToDXL // node is found static void CheckUnsupportedNodeTypes(Query *query); - static void CheckUnsupportedDDLInSingleMode(CMemoryPool *mp, Query *query); - // walker to check if SUBLINK node is present in the security quals static BOOL CheckSublinkInSecurityQuals(Node *node, void *context); diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 13d7e79e262..4b62b663f0b 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -507,6 +507,7 @@ extern char *optimizer_search_strategy_path; /* GUCs to tell Optimizer to enable a physical operator */ extern bool optimizer_enable_nljoin; extern bool optimizer_enable_indexjoin; +extern bool optimizer_enable_motions_masteronly_queries; extern bool optimizer_enable_motions; extern bool optimizer_enable_motion_broadcast; extern bool optimizer_enable_motion_gather; diff --git a/src/include/utils/unsync_guc_name.h b/src/include/utils/unsync_guc_name.h index 97b9df29814..4c956e14fbf 100644 --- a/src/include/utils/unsync_guc_name.h +++ b/src/include/utils/unsync_guc_name.h @@ -422,6 +422,7 @@ "optimizer_enable_motion_gather", "optimizer_enable_motion_redistribute", "optimizer_enable_motions", + "optimizer_enable_motions_masteronly_queries", "optimizer_enable_multiple_distinct_aggs", "optimizer_enable_nljoin", "optimizer_enable_outerjoin_rewrite", diff --git a/src/test/singlenode_isolation2/expected/lockmodes.out b/src/test/singlenode_isolation2/expected/lockmodes.out index 40835b507ca..0caadff3922 100644 --- a/src/test/singlenode_isolation2/expected/lockmodes.out +++ b/src/test/singlenode_isolation2/expected/lockmodes.out @@ -159,13 +159,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods, t_lockmods1 for update; - QUERY PLAN -------------------------------------------------------------------- - Nested Loop (cost=0.00..1324032.37 rows=5 width=8) - Join Filter: true - -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4) - -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4) - Optimizer: GPORCA + QUERY PLAN +------------------------------------------------------------------------ + Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20) + -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10) + -> Materialize (cost=0.00..1.07 rows=5 width=10) + -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10) + Optimizer: Postgres query optimizer (5 rows) 1: select * from t_lockmods, t_lockmods1 for update; c | c @@ -185,13 +185,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods, t_lockmods1 for no key update; - QUERY PLAN -------------------------------------------------------------------- - Nested Loop (cost=0.00..1324032.37 rows=5 width=8) - Join Filter: true - -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4) - -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4) - Optimizer: GPORCA + QUERY PLAN +------------------------------------------------------------------------ + Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20) + -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10) + -> Materialize (cost=0.00..1.07 rows=5 width=10) + -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10) + Optimizer: Postgres query optimizer (5 rows) 1: select * from t_lockmods, t_lockmods1 for no key update; c | c @@ -211,13 +211,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods, t_lockmods1 for share; - QUERY PLAN -------------------------------------------------------------------- - Nested Loop (cost=0.00..1324032.37 rows=5 width=8) - Join Filter: true - -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4) - -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4) - Optimizer: GPORCA + QUERY PLAN +------------------------------------------------------------------------ + Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20) + -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10) + -> Materialize (cost=0.00..1.07 rows=5 width=10) + -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10) + Optimizer: Postgres query optimizer (5 rows) 1: select * from t_lockmods, t_lockmods1 for share; c | c @@ -237,13 +237,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods, t_lockmods1 for key share; - QUERY PLAN -------------------------------------------------------------------- - Nested Loop (cost=0.00..1324032.37 rows=5 width=8) - Join Filter: true - -> Seq Scan on t_lockmods1 (cost=0.00..431.00 rows=1 width=4) - -> Seq Scan on t_lockmods (cost=0.00..431.00 rows=5 width=4) - Optimizer: GPORCA + QUERY PLAN +------------------------------------------------------------------------ + Nested Loop (cost=10000000000.00..10000000752.74 rows=51150 width=20) + -> Seq Scan on t_lockmods1 (cost=0.00..112.30 rows=10230 width=10) + -> Materialize (cost=0.00..1.07 rows=5 width=10) + -> Seq Scan on t_lockmods (cost=0.00..1.05 rows=5 width=10) + Optimizer: Postgres query optimizer (5 rows) 1: select * from t_lockmods, t_lockmods1 for key share; c | c @@ -583,14 +583,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods_ao, t_lockmods_ao1 for update; - QUERY PLAN ----------------------------------------------------------------------- - Nested Loop (cost=0.00..1324032.57 rows=8 width=8) - Join Filter: true - -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4) - -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4) - Optimizer: GPORCA -(5 rows) + QUERY PLAN +--------------------------------------------------------------------- + Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20) + -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10) + -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10) + Optimizer: Postgres query optimizer +(4 rows) 1: select * from t_lockmods_ao, t_lockmods_ao1 for update; c | c ---+--- @@ -609,14 +608,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods_ao, t_lockmods_ao1 for no key update; - QUERY PLAN ----------------------------------------------------------------------- - Nested Loop (cost=0.00..1324032.57 rows=8 width=8) - Join Filter: true - -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4) - -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4) - Optimizer: GPORCA -(5 rows) + QUERY PLAN +--------------------------------------------------------------------- + Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20) + -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10) + -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10) + Optimizer: Postgres query optimizer +(4 rows) 1: select * from t_lockmods_ao, t_lockmods_ao1 for no key update; c | c ---+--- @@ -635,14 +633,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods_ao, t_lockmods_ao1 for share; - QUERY PLAN ----------------------------------------------------------------------- - Nested Loop (cost=0.00..1324032.57 rows=8 width=8) - Join Filter: true - -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4) - -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4) - Optimizer: GPORCA -(5 rows) + QUERY PLAN +--------------------------------------------------------------------- + Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20) + -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10) + -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10) + Optimizer: Postgres query optimizer +(4 rows) 1: select * from t_lockmods_ao, t_lockmods_ao1 for share; c | c ---+--- @@ -661,14 +658,13 @@ ABORT 1: begin; BEGIN 1: explain select * from t_lockmods_ao, t_lockmods_ao1 for key share; - QUERY PLAN ----------------------------------------------------------------------- - Nested Loop (cost=0.00..1324032.57 rows=8 width=8) - Join Filter: true - -> Seq Scan on t_lockmods_ao1 (cost=0.00..431.00 rows=1 width=4) - -> Seq Scan on t_lockmods_ao (cost=0.00..431.00 rows=8 width=4) - Optimizer: GPORCA -(5 rows) + QUERY PLAN +--------------------------------------------------------------------- + Nested Loop (cost=10000000000.00..10000000001.24 rows=8 width=20) + -> Seq Scan on t_lockmods_ao (cost=0.00..1.08 rows=8 width=10) + -> Seq Scan on t_lockmods_ao1 (cost=0.00..0.01 rows=1 width=10) + Optimizer: Postgres query optimizer +(4 rows) 1: select * from t_lockmods_ao, t_lockmods_ao1 for key share; c | c ---+--- diff --git a/src/test/singlenode_regress/expected/explain.out b/src/test/singlenode_regress/expected/explain.out index 2c9f373b894..2803a0b2c50 100644 --- a/src/test/singlenode_regress/expected/explain.out +++ b/src/test/singlenode_regress/expected/explain.out @@ -471,7 +471,6 @@ select jsonb_pretty( }, + "Settings": { + "Optimizer": "Postgres query optimizer",+ - "optimizer": "off", + "parallel_setup_cost": "0", + "parallel_tuple_cost": "0", + "min_parallel_table_scan_size": "0" + diff --git a/src/test/singlenode_regress/expected/rowsecurity.out b/src/test/singlenode_regress/expected/rowsecurity.out index d2b3baec80d..60b1eb0a261 100644 --- a/src/test/singlenode_regress/expected/rowsecurity.out +++ b/src/test/singlenode_regress/expected/rowsecurity.out @@ -783,16 +783,15 @@ SELECT * FROM t1 FOR SHARE; EXPLAIN (COSTS OFF) SELECT * FROM t1 FOR SHARE; QUERY PLAN ------------------------------------- - LockRows - -> Append - -> Seq Scan on t1 t1_1 - Filter: ((a % 2) = 0) - -> Seq Scan on t2 t1_2 - Filter: ((a % 2) = 0) - -> Seq Scan on t3 t1_3 - Filter: ((a % 2) = 0) + Append + -> Seq Scan on t1 t1_1 + Filter: ((a % 2) = 0) + -> Seq Scan on t2 t1_2 + Filter: ((a % 2) = 0) + -> Seq Scan on t3 t1_3 + Filter: ((a % 2) = 0) Optimizer: Postgres query optimizer -(9 rows) +(8 rows) SELECT * FROM t1 WHERE f_leak(b) FOR SHARE; NOTICE: f_leak => bbb @@ -810,18 +809,17 @@ NOTICE: f_leak => yyy (5 rows) EXPLAIN (COSTS OFF) SELECT * FROM t1 WHERE f_leak(b) FOR SHARE; - QUERY PLAN ------------------------------------------------------ - LockRows - -> Append - -> Seq Scan on t1 t1_1 - Filter: (((a % 2) = 0) AND f_leak(b)) - -> Seq Scan on t2 t1_2 - Filter: (((a % 2) = 0) AND f_leak(b)) - -> Seq Scan on t3 t1_3 - Filter: (((a % 2) = 0) AND f_leak(b)) + QUERY PLAN +----------------------------------------------- + Append + -> Seq Scan on t1 t1_1 + Filter: (((a % 2) = 0) AND f_leak(b)) + -> Seq Scan on t2 t1_2 + Filter: (((a % 2) = 0) AND f_leak(b)) + -> Seq Scan on t3 t1_3 + Filter: (((a % 2) = 0) AND f_leak(b)) Optimizer: Postgres query optimizer -(9 rows) +(8 rows) -- union all query SELECT a, b, tableoid::regclass FROM t2 UNION ALL SELECT a, b, tableoid::regclass FROM t3; diff --git a/src/test/singlenode_regress/expected/select.out b/src/test/singlenode_regress/expected/select.out index f393c638962..a7014af1f98 100644 --- a/src/test/singlenode_regress/expected/select.out +++ b/src/test/singlenode_regress/expected/select.out @@ -816,14 +816,13 @@ select unique2 from onek2 where unique2 = 11 and stringu1 < 'B'; -- but if it's an update target, must retest anyway explain (costs off) select unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update; - QUERY PLAN ------------------------------------------------ - LockRows - -> Index Scan using onek2_u2_prtl on onek2 - Index Cond: (unique2 = 11) - Filter: (stringu1 < 'B'::name) + QUERY PLAN +----------------------------------------- + Index Scan using onek2_u2_prtl on onek2 + Index Cond: (unique2 = 11) + Filter: (stringu1 < 'B'::name) Optimizer: Postgres query optimizer -(5 rows) +(4 rows) select unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update; unique2 From bf272df65c178957b73503879c06c42314c5d499 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Mon, 22 Sep 2025 16:21:50 +0800 Subject: [PATCH 166/260] Fix parallel worker assignment for partial paths fix https://github.com/apache/cloudberry/issues/1366 Update parallel_workers assignment to handle cases where partial paths may have parallel_workers = 0 after parallel-oblivious append. Move assignment before assertion and use pathnode->parallel_workers in the check. Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/optimizer/util/pathnode.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 0347fe5030c..24b795dde17 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -2156,12 +2156,17 @@ set_append_path_locus(PlannerInfo *root, Path *pathnode, RelOptInfo *rel, * Partially fixed append issue. * But there are still several locus can't be parallel so that we can't handle it currently. */ - AssertImply(parallel_workers > 1 && + /* + * After we try parallel-bolivious append, there could be possible that partial paths with + * parallel_workers = 0, ex: a partial path and Motion to a path with parallel_workers = 0. + */ + pathnode->parallel_workers = targetlocus.parallel_workers; + + AssertImply(pathnode->parallel_workers > 1 && !CdbPathLocus_IsEntry(targetlocus) && !CdbPathLocus_IsOuterQuery(targetlocus) && !CdbPathLocus_IsGeneral(targetlocus) && !CdbPathLocus_IsSingleQE(targetlocus), targetlocus.parallel_workers > 1); - pathnode->parallel_workers = targetlocus.parallel_workers; *subpaths_out = new_subpaths; From f4b4c41682c1169f0faf5c64900e385dd1827e1e Mon Sep 17 00:00:00 2001 From: Ed Espino Date: Tue, 7 Oct 2025 08:41:17 -0700 Subject: [PATCH 167/260] Improve CI reliability and developer productivity through test scheduling optimizations, mirror stability fixes, and a new artifact reuse feature. (#1379) * Document disk-intensive test placement in greenplum_schedule Add comment explaining why autovacuum-template0-segment and profile tests are positioned early in the test schedule. These tests consume significant disk space through WAL generation, XID consumption, and autovacuum operations. Running them early when ~20GB disk space is available (vs ~10GB later) helps avoid disk exhaustion issues during test execution. * Fix Rocky Linux mirror instability in CI Add repository metadata refresh and retry logic to handle transient mirror failures during RPM installation. This addresses frequent 404 errors from Rocky Linux mirrors that cause CI failures. Changes: - Run 'dnf clean all' and 'dnf makecache --refresh' before installation - Add '--setopt=retries=10' to dnf install command - Apply fix to both rpm-install-test and test jobs This improves CI reliability without changing functionality. * Add artifact reuse feature for faster test iteration Enable reusing build artifacts from previous workflow runs to speed up test iteration by ~50-70 minutes. This is useful for debugging test failures without rebuilding. Changes: - Add 'reuse_artifacts_from_run_id' workflow input parameter - Skip build job when reusing artifacts from specified run - Skip rpm-install-test job when reusing artifacts - Update artifact download steps to support cross-run downloads - Add proper job conditionals to handle skipped build job Usage: Manually trigger workflow and specify a previous run ID in the 'reuse_artifacts_from_run_id' input field. Leave empty to build fresh. This maintains backward compatibility - default behavior unchanged. * Add GitHub Actions workflow documentation for developers Create comprehensive documentation for GitHub Actions workflows, focusing on features that help developers iterate faster when debugging CI issues. Key sections: - Manual workflow triggers and input parameters - Artifact reuse feature with step-by-step guide - Running workflows in forked repositories - Troubleshooting common issues This documentation enables developers to: - Reuse build artifacts to save ~50-70 minutes per test iteration - Run CI validation in their forks before submitting PRs - Understand available workflow options and test selections - Debug test failures more efficiently * Pin Rocky Linux repos to stable 9.x release Use --releasever=9 to pin dnf to stable Rocky Linux 9.x repos instead of bleeding-edge point releases (e.g., 9.6) that may not be fully synced across all mirrors. Rocky Linux maintains binary compatibility within major versions, so pinning to 9 ensures we get stable, widely-mirrored packages while remaining compatible with the 9.6 container OS. This complements the earlier retry/refresh logic by addressing the root cause: new point releases have metadata sync lag across mirror network. * Move all autovacuum tests to early execution Move autovacuum and autovacuum-segment tests alongside autovacuum-template0-segment to run early in the schedule when more disk space is available. All three autovacuum tests are disk-intensive and benefit from running when ~20GB is available rather than later when space may be constrained. This grouping also improves test organization by keeping related tests together. * Clarify secrets configuration in workflow documentation Update README to clarify that no manual secret configuration is required for normal development workflows: - GITHUB_TOKEN is automatically provided by GitHub - Only used for artifact reuse feature (downloading previous run artifacts) - DockerHub secrets only needed for custom container image builds (advanced/maintainer use case) This removes confusion about required setup steps for fork users. --- .github/workflows/README.md | 258 +++++++++++++++++++++++++ .github/workflows/build-cloudberry.yml | 39 +++- src/test/regress/greenplum_schedule | 16 +- 3 files changed, 303 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/README.md diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 00000000000..ae1651742e0 --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,258 @@ + + +# GitHub Actions Workflows + +This directory contains GitHub Actions workflows for Apache Cloudberry CI/CD. + +## Table of Contents + +- [Available Workflows](#available-workflows) +- [Manual Workflow Triggers](#manual-workflow-triggers) +- [Artifact Reuse for Faster Testing](#artifact-reuse-for-faster-testing) +- [Running Workflows in Forked Repositories](#running-workflows-in-forked-repositories) + +## Available Workflows + +| Workflow | Purpose | Trigger | +|----------|---------|---------| +| `build-cloudberry.yml` | Main CI: build, test, create RPMs | Push, PR, Manual | +| `build-dbg-cloudberry.yml` | Debug build with assertions enabled | Push, PR, Manual | +| `apache-rat-audit.yml` | License header compliance check | Push, PR | +| `coverity.yml` | Static code analysis with Coverity | Weekly, Manual | +| `sonarqube.yml` | Code quality analysis with SonarQube | Push to main | +| `docker-cbdb-build-containers.yml` | Build Docker images for CI | Manual | +| `docker-cbdb-test-containers.yml` | Build test Docker images | Manual | + +## Manual Workflow Triggers + +Many workflows support manual triggering via `workflow_dispatch`, allowing developers to run CI jobs on-demand. + +### How to Manually Trigger a Workflow + +1. Navigate to the **Actions** tab in GitHub +2. Select the workflow from the left sidebar (e.g., "Build and Test Cloudberry") +3. Click **Run workflow** button (top right) +4. Select your branch +5. Configure input parameters (if available) +6. Click **Run workflow** + +### Workflow Input Parameters + +#### `build-cloudberry.yml` - Main CI + +| Parameter | Description | Default | Example | +|-----------|-------------|---------|---------| +| `test_selection` | Comma-separated list of tests to run, or "all" | `all` | `ic-good-opt-off,ic-contrib` | +| `reuse_artifacts_from_run_id` | Run ID to reuse build artifacts from (see below) | _(empty)_ | `12345678901` | + +**Available test selections:** +- `all` - Run all test suites +- `ic-good-opt-off` - Installcheck with optimizer off +- `ic-good-opt-on` - Installcheck with optimizer on +- `ic-contrib` - Contrib extension tests +- `ic-resgroup` - Resource group tests +- `ic-resgroup-v2` - Resource group v2 tests +- `ic-resgroup-v2-memory-accounting` - Resource group memory tests +- `ic-singlenode` - Single-node mode tests +- `make-installcheck-world` - Full test suite +- And more... (see workflow for complete list) + +## Artifact Reuse for Faster Testing + +When debugging test failures, rebuilding Cloudberry (~50-70 minutes) on every iteration is inefficient. The artifact reuse feature allows you to reuse build artifacts from a previous successful run. + +### How It Works + +1. Build artifacts (RPMs, source tarballs) from a previous workflow run are downloaded +2. Build job is skipped (saves ~45-60 minutes) +3. RPM installation test is skipped (saves ~5-10 minutes) +4. Test jobs run with the reused artifacts +5. You can iterate on test configurations without rebuilding + +### Step-by-Step Guide + +#### 1. Find the Run ID + +After a successful build (even if tests failed), get the run ID: + +**Option A: From GitHub Actions UI** +- Go to **Actions** tab β†’ Click on a completed workflow run +- The URL will be: `https://github.com/apache/cloudberry/actions/runs/12345678901` +- The run ID is `12345678901` + +**Option B: From GitHub API** +```bash +# List recent workflow runs +gh run list --workflow=build-cloudberry.yml --limit 5 + +# Get run ID from specific branch +gh run list --workflow=build-cloudberry.yml --branch=my-feature --limit 1 +``` + +#### 2. Trigger New Run with Artifact Reuse + +**Via GitHub UI:** +1. Go to **Actions** β†’ **Build and Test Cloudberry** +2. Click **Run workflow** +3. Enter the run ID in **"Reuse build artifacts from a previous run ID"** +4. Optionally customize **test_selection** +5. Click **Run workflow** + +**Via GitHub CLI:** +```bash +# Reuse artifacts from run 12345678901, run only specific tests +gh workflow run build-cloudberry.yml \ + --field reuse_artifacts_from_run_id=12345678901 \ + --field test_selection=ic-good-opt-off +``` + +#### 3. Monitor Test Execution + +- Build job will be skipped (shows as "Skipped" in Actions UI) +- RPM Install Test will be skipped +- Test jobs will run with artifacts from the specified run ID +- Total time: ~15-30 minutes (vs ~65-100 minutes for full build+test) + +### Use Cases + +**Debugging a specific test failure:** +```bash +# Run 1: Full build + all tests (finds test failure in ic-good-opt-off) +gh workflow run build-cloudberry.yml + +# Get the run ID from output +RUN_ID=$(gh run list --workflow=build-cloudberry.yml --limit 1 --json databaseId --jq '.[0].databaseId') + +# Run 2: Reuse artifacts, run only failing test +gh workflow run build-cloudberry.yml \ + --field reuse_artifacts_from_run_id=$RUN_ID \ + --field test_selection=ic-good-opt-off +``` + +**Testing different configurations:** +```bash +# Test with optimizer off, then on, using same build +gh workflow run build-cloudberry.yml \ + --field reuse_artifacts_from_run_id=$RUN_ID \ + --field test_selection=ic-good-opt-off + +gh workflow run build-cloudberry.yml \ + --field reuse_artifacts_from_run_id=$RUN_ID \ + --field test_selection=ic-good-opt-on +``` + +### Limitations + +- Artifacts expire after 90 days (GitHub default retention) +- Run ID must be from the same repository (or accessible fork) +- Artifacts must include both RPM and source build artifacts +- Cannot reuse artifacts across different OS/architecture combinations +- Changes to source code require a fresh build + +## Running Workflows in Forked Repositories + +GitHub Actions workflows are enabled in forks, allowing you to validate changes before submitting a Pull Request. + +### Initial Setup (One-Time) + +1. **Fork the repository** to your GitHub account + +2. **Enable GitHub Actions** in your fork: + - Go to your fork's **Actions** tab + - Click **"I understand my workflows, go ahead and enable them"** + +**Secrets Configuration:** + +No manual secret configuration is required for the main build and test workflows. + +- `GITHUB_TOKEN` is automatically provided by GitHub and used when downloading artifacts from previous runs (artifact reuse feature) +- DockerHub secrets (`DOCKERHUB_USER`, `DOCKERHUB_TOKEN`) are only required for building custom container images (advanced/maintainer use case, not needed for typical development) + +### Workflow Behavior in Forks + +- βœ… **Automated triggers work**: Push and PR events trigger workflows +- βœ… **Manual triggers work**: `workflow_dispatch` is fully functional +- βœ… **Artifact reuse works**: Can reuse artifacts from previous runs in your fork +- ⚠️ **Cross-fork artifact reuse**: Not supported (security restriction) +- ⚠️ **Some features may be limited**: Certain features requiring organization-level secrets may not work + +### Best Practices for Fork Development + +1. **Test locally first** when possible (faster iteration) +2. **Use manual triggers** to avoid burning GitHub Actions minutes unnecessarily +3. **Use artifact reuse** to iterate on test failures efficiently +4. **Push to feature branches** to trigger automated CI +5. **Review Actions tab** to ensure workflows completed successfully before opening PR + +### Example Fork Workflow + +```bash +# 1. Create feature branch in fork +git checkout -b fix-test-failure + +# 2. Make changes and push to fork +git commit -am "Fix test failure" +git push origin fix-test-failure + +# 3. CI runs automatically on push + +# 4. If tests fail, iterate using artifact reuse +# Get run ID from your fork's Actions tab +gh workflow run build-cloudberry.yml \ + --field reuse_artifacts_from_run_id=12345678901 \ + --field test_selection=ic-good-opt-off + +# 5. Once tests pass, open PR to upstream +gh pr create --web +``` + +## Troubleshooting + +### "Build job was skipped but tests failed to start" + +**Cause:** Artifacts from specified run ID not found or expired + +**Solution:** +- Verify the run ID is correct +- Check that run completed successfully (built artifacts) +- Run a fresh build if artifacts expired (>90 days) + +### "Workflow not found in fork" + +**Cause:** GitHub Actions not enabled in fork + +**Solution:** +- Go to fork's **Actions** tab +- Click to enable workflows + +### "Resource not accessible by integration" + +**Cause:** Workflow trying to access artifacts from different repository + +**Solution:** +- Can only reuse artifacts from same repository +- Run a fresh build in your fork first, then reuse those artifacts + +## Additional Resources + +- [GitHub Actions Documentation](https://docs.github.com/en/actions) +- [Cloudberry Contributing Guide](../../CONTRIBUTING.md) +- [Cloudberry Build Guide](../../deploy/build/README.md) +- [DevOps Scripts](../../devops/README.md) diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index fecd44a9637..04d5e827b6e 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -113,6 +113,11 @@ on: required: false default: 'all' type: string + reuse_artifacts_from_run_id: + description: 'Reuse build artifacts from a previous run ID (leave empty to build fresh)' + required: false + default: '' + type: string concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -412,6 +417,7 @@ jobs: needs: [check-skip] runs-on: ubuntu-22.04 timeout-minutes: 120 + if: github.event.inputs.reuse_artifacts_from_run_id == '' outputs: build_timestamp: ${{ steps.set_timestamp.outputs.timestamp }} @@ -687,6 +693,10 @@ jobs: rpm-install-test: name: RPM Install Test Apache Cloudberry needs: [check-skip, build] + if: | + !cancelled() && + (needs.build.result == 'success' || needs.build.result == 'skipped') && + github.event.inputs.reuse_artifacts_from_run_id == '' runs-on: ubuntu-22.04 timeout-minutes: 120 @@ -710,6 +720,8 @@ jobs: name: apache-cloudberry-db-incubating-rpm-build-artifacts path: ${{ github.workspace }}/rpm_build_artifacts merge-multiple: false + run-id: ${{ github.event.inputs.reuse_artifacts_from_run_id || github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} - name: Cloudberry Environment Initialization if: needs.check-skip.outputs.should_skip != 'true' @@ -814,12 +826,18 @@ jobs: echo "Version: ${RPM_VERSION}" echo "Release: ${RPM_RELEASE}" + # Refresh repository metadata to avoid mirror issues + echo "Refreshing repository metadata..." + dnf clean all + dnf makecache --refresh || dnf makecache + # Clean install location rm -rf /usr/local/cloudberry-db - # Install RPM + # Install RPM with retry logic for mirror issues + # Use --releasever=9 to pin to stable Rocky Linux 9 repos (not bleeding-edge 9.6) echo "Starting installation..." - if ! time dnf install -y "${RPM_FILE}"; then + if ! time dnf install -y --setopt=retries=10 --releasever=9 "${RPM_FILE}"; then echo "::error::RPM installation failed" exit 1 fi @@ -858,6 +876,9 @@ jobs: test: name: ${{ matrix.test }} needs: [check-skip, build, prepare-test-matrix] + if: | + !cancelled() && + (needs.build.result == 'success' || needs.build.result == 'skipped') runs-on: ubuntu-22.04 timeout-minutes: 120 # actionlint-allow matrix[*].pg_settings @@ -1087,6 +1108,8 @@ jobs: name: apache-cloudberry-db-incubating-rpm-build-artifacts path: ${{ github.workspace }}/rpm_build_artifacts merge-multiple: false + run-id: ${{ github.event.inputs.reuse_artifacts_from_run_id || github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} - name: Download Cloudberry Source build artifacts if: needs.check-skip.outputs.should_skip != 'true' @@ -1095,6 +1118,8 @@ jobs: name: apache-cloudberry-db-incubating-source-build-artifacts path: ${{ github.workspace }}/source_build_artifacts merge-multiple: false + run-id: ${{ github.event.inputs.reuse_artifacts_from_run_id || github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} - name: Verify downloaded artifacts if: needs.check-skip.outputs.should_skip != 'true' @@ -1186,12 +1211,18 @@ jobs: echo "Version: ${RPM_VERSION}" echo "Release: ${RPM_RELEASE}" + # Refresh repository metadata to avoid mirror issues + echo "Refreshing repository metadata..." + dnf clean all + dnf makecache --refresh || dnf makecache + # Clean install location rm -rf /usr/local/cloudberry-db - # Install RPM + # Install RPM with retry logic for mirror issues + # Use --releasever=9 to pin to stable Rocky Linux 9 repos (not bleeding-edge 9.6) echo "Starting installation..." - if ! time dnf install -y "${RPM_FILE}"; then + if ! time dnf install -y --setopt=retries=10 --releasever=9 "${RPM_FILE}"; then echo "::error::RPM installation failed" exit 1 fi diff --git a/src/test/regress/greenplum_schedule b/src/test/regress/greenplum_schedule index ecf37e73029..039e8d7e9c4 100755 --- a/src/test/regress/greenplum_schedule +++ b/src/test/regress/greenplum_schedule @@ -15,6 +15,16 @@ # hitting max_connections limit on segments. # +# Run disk-intensive tests early when maximum disk space is available. +# These tests consume significant disk space through WAL generation, XID consumption, +# and autovacuum operations. Running them early helps avoid disk exhaustion issues. +test: autovacuum +test: autovacuum-segment +test: autovacuum-template0-segment + +# check profile feature +test: profile + # test for builtin namespace pg_ext_aux test: pg_ext_aux @@ -321,9 +331,6 @@ test: oid_wraparound # hence it should be run in isolation. test: fts_recovery_in_progress ignore: mirror_replay -test: autovacuum -test: autovacuum-segment -test: autovacuum-template0-segment # gpexpand introduce the partial tables, check them if they can run correctly test: gangsize gang_reuse @@ -334,9 +341,6 @@ test: run_utility_gpexpand_phase1 # check correct error message when create extension error on segment test: create_extension_fail -# check profile feature -test: profile - # check offload entry root slice to QE feature test: offload_entry_to_qe From 4cea3c93e739bf8b6cbceffb96e8ae566876a556 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Fri, 12 Sep 2025 11:38:15 +0800 Subject: [PATCH 168/260] Release: add commit changelog generator script Add a bash script to generate markdown changelog between two git references (tags/commits) with automatic GitHub PR association. Features: - Extracts commit info using git log with custom format - Links commits to GitHub PRs via GitHub API - Supports custom repository specification The script requires GITHUB_TOKEN environment variable and jq for JSON parsing. Outputs markdown format suitable for release notes. You can see a demo case in our 2.0.0 changelog: - https://cloudberry.apache.org/releases/2.0.0-incubating --- devops/release/generate-changelog.sh | 101 +++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100755 devops/release/generate-changelog.sh diff --git a/devops/release/generate-changelog.sh b/devops/release/generate-changelog.sh new file mode 100755 index 00000000000..9977971179c --- /dev/null +++ b/devops/release/generate-changelog.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env bash +# ====================================================================== +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ====================================================================== +# +# Generate changelog between two git references (tags/commits) +# Usage: ./generate-changelog.sh [repo_owner/repo_name] +# +# Examples: +# ./generate-changelog.sh 1a40e1f 8178d4f +# ./generate-changelog.sh v1.0.0 v1.1.0 +# ./generate-changelog.sh 1a40e1f 8178d4f apache/cloudberry +# ./generate-changelog.sh v1.0.0 v1.1.0 apache/cloudberry +# +# GitHub Token Setup: +# 1. Go to GitHub Settings > Developer settings > Personal access tokens > Tokens (classic) +# 2. Generate new token with 'repo' scope (for private repos) or 'public_repo' scope (for public repos) +# 3. Export the token: export GITHUB_TOKEN=your_token_here + +set -e + +# Default values +DEFAULT_REPO="apache/cloudberry" +GITHUB_API_BASE="https://api.github.com" + +# Function to display usage +usage() { + echo "Usage: $0 [repo_owner/repo_name]" + echo "" + echo "Examples:" + echo " $0 1a40e1f 8178d4f" + echo " $0 v1.0.0 v1.1.0" + echo " $0 1a40e1f 8178d4f apache/cloudberry" + echo " $0 v1.0.0 v1.1.0 apache/cloudberry" + echo "" + echo "Environment variables:" + echo " GITHUB_TOKEN - GitHub personal access token (required)" + exit 1 +} + +# Check arguments +if [ $# -lt 2 ] || [ $# -gt 3 ]; then + usage +fi + +FROM_REF="$1" +TO_REF="$2" +REPO="${3:-$DEFAULT_REPO}" + +# Check if GITHUB_TOKEN is set +if [ -z "$GITHUB_TOKEN" ]; then + echo "Error: GITHUB_TOKEN environment variable is required" + echo "Please set it with: export GITHUB_TOKEN=your_token_here" + exit 1 +fi + +# Check if jq is installed +if ! command -v jq &> /dev/null; then + echo "Error: jq is required but not installed" + echo "Please install jq using your system's package manager" + exit 1 +fi + +# Count total commits first +total_commits=$(git log --oneline "$FROM_REF..$TO_REF" | wc -l | tr -d ' ') + +echo "Generating changelog for $REPO from $FROM_REF to $TO_REF..." +echo "Found $total_commits commits to process" +echo "" + +# Generate changelog +git log --oneline --pretty=format:"%h|%H|%s|%an" "$FROM_REF..$TO_REF" | while IFS='|' read -r short_sha full_sha subject author; do + # Get PR number for this commit + pr_number=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ + "$GITHUB_API_BASE/repos/$REPO/commits/$full_sha/pulls" | \ + jq -r '.[0].number // empty') + + if [ -n "$pr_number" ]; then + echo "* [\`$short_sha\`](https://github.com/$REPO/commit/$full_sha) - $subject ($author) [#$pr_number](https://github.com/$REPO/pull/$pr_number)" + else + echo "* [\`$short_sha\`](https://github.com/$REPO/commit/$full_sha) - $subject ($author)" + fi +done + +echo "" +echo "Changelog generation completed!" From f9f5060dbee16b3cb5a97be6395680cb83358c9e Mon Sep 17 00:00:00 2001 From: Xun Gong Date: Wed, 8 Oct 2025 23:24:47 +0800 Subject: [PATCH 169/260] perf: use unique_ptr instead of shared_ptr (#1374) performance: replace unnecessary shared_ptr with unique_ptr to eliminate atomic refcounting and reduce contention on hot insert paths. --- .../src/cpp/storage/columns/pax_column.cc | 12 ++--- .../src/cpp/storage/columns/pax_column.h | 16 +++--- .../cpp/storage/columns/pax_column_test.cc | 26 +++++----- .../storage/columns/pax_encoding_column.cc | 6 +-- .../cpp/storage/columns/pax_encoding_column.h | 2 +- .../columns/pax_encoding_non_fixed_column.cc | 12 ++--- .../columns/pax_encoding_non_fixed_column.h | 4 +- .../src/cpp/storage/orc/orc_format_reader.cc | 52 +++++++++---------- 8 files changed, 66 insertions(+), 64 deletions(-) diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc index 7d4daf6aaf0..eb1a47aa41e 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc @@ -208,7 +208,7 @@ std::string PaxColumn::DebugString() { template PaxCommColumn::PaxCommColumn(uint32 capacity) { - data_ = std::make_shared>(capacity * sizeof(T)); + data_ = std::make_unique>(capacity * sizeof(T)); } template @@ -218,7 +218,7 @@ template // NOLINT: redirect constructor PaxCommColumn::PaxCommColumn() : PaxCommColumn(DEFAULT_CAPACITY) {} template -void PaxCommColumn::Set(std::shared_ptr> data) { +void PaxCommColumn::Set(std::unique_ptr> data) { data_ = std::move(data); } @@ -318,8 +318,8 @@ template class PaxCommColumn; PaxNonFixedColumn::PaxNonFixedColumn(uint32 data_capacity, uint32 offsets_capacity) : estimated_size_(0), - data_(std::make_shared>(data_capacity)), - offsets_(std::make_shared>(offsets_capacity)), + data_(std::make_unique>(data_capacity)), + offsets_(std::make_unique>(offsets_capacity)), next_offsets_(0) {} PaxNonFixedColumn::PaxNonFixedColumn() @@ -327,8 +327,8 @@ PaxNonFixedColumn::PaxNonFixedColumn() PaxNonFixedColumn::~PaxNonFixedColumn() {} -void PaxNonFixedColumn::Set(std::shared_ptr> data, - std::shared_ptr> offsets, +void PaxNonFixedColumn::Set(std::unique_ptr> data, + std::unique_ptr> offsets, size_t total_size) { estimated_size_ = total_size; data_ = std::move(data); diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column.h b/contrib/pax_storage/src/cpp/storage/columns/pax_column.h index 45c78bc0de0..569293fb512 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_column.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column.h @@ -239,7 +239,9 @@ class PaxColumn { } // Get the null bitmap - inline const std::unique_ptr& GetBitmap() const { return null_bitmap_; } + inline const std::unique_ptr &GetBitmap() const { + return null_bitmap_; + } // Set the column kv attributes void SetAttributes(const std::map &attrs); @@ -425,7 +427,7 @@ class PaxCommColumn : public PaxColumn { PaxCommColumn(); - virtual void Set(std::shared_ptr> data); + virtual void Set(std::unique_ptr> data); PaxColumnTypeInMem GetPaxColumnTypeInMem() const override; @@ -455,7 +457,7 @@ class PaxCommColumn : public PaxColumn { int32 GetTypeLength() const override; protected: - std::shared_ptr> data_; + std::unique_ptr> data_; }; extern template class PaxCommColumn; @@ -474,8 +476,8 @@ class PaxNonFixedColumn : public PaxColumn { ~PaxNonFixedColumn() override; - virtual void Set(std::shared_ptr> data, - std::shared_ptr> offsets, + virtual void Set(std::unique_ptr> data, + std::unique_ptr> offsets, size_t total_size); void Append(char *buffer, size_t size) override; @@ -514,13 +516,13 @@ class PaxNonFixedColumn : public PaxColumn { protected: size_t estimated_size_; - std::shared_ptr> data_; + std::unique_ptr> data_; // orc needs to serialize int32 array // the length of a single tuple field will not exceed 2GB, // so a variable-length element of the offsets stream can use int32 // to represent the length - std::shared_ptr> offsets_; + std::unique_ptr> offsets_; // used to record next offset in write path // in read path, next_offsets_ always be -1 diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc index f39e453cfee..b1c75c39217 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc @@ -137,7 +137,7 @@ static std::unique_ptr CreateDecodeColumn( std::unique_ptr column_rc; switch (bits) { case 16: { - auto buffer_for_read = std::make_shared>( + auto buffer_for_read = std::make_unique>( reinterpret_cast(encoded_buff), encoded_len, false, false); buffer_for_read->Brush(encoded_len); @@ -145,19 +145,19 @@ static std::unique_ptr CreateDecodeColumn( auto int_column = ColumnOptCreateTraits::create_decoding( origin_len / sizeof(int16), std::move(decoding_option)); - int_column->Set(buffer_for_read); + int_column->Set(std::move(buffer_for_read)); column_rc = std::move(int_column); } else { auto int_column = ColumnOptCreateTraits::create_decoding( origin_len / sizeof(int16), std::move(decoding_option)); - int_column->Set(buffer_for_read, column_not_nulls); + int_column->Set(std::move(buffer_for_read), column_not_nulls); column_rc = std::move(int_column); } break; } case 32: { - auto buffer_for_read = std::make_shared>( + auto buffer_for_read = std::make_unique>( reinterpret_cast(encoded_buff), encoded_len, false, false); buffer_for_read->Brush(encoded_len); @@ -165,19 +165,19 @@ static std::unique_ptr CreateDecodeColumn( auto int_column = ColumnOptCreateTraits::create_decoding( origin_len / sizeof(int32), std::move(decoding_option)); - int_column->Set(buffer_for_read); + int_column->Set(std::move(buffer_for_read)); column_rc = std::move(int_column); } else { auto int_column = ColumnOptCreateTraits::create_decoding( origin_len / sizeof(int32), std::move(decoding_option)); - int_column->Set(buffer_for_read, column_not_nulls); + int_column->Set(std::move(buffer_for_read), column_not_nulls); column_rc = std::move(int_column); } break; } case 64: { - auto buffer_for_read = std::make_shared>( + auto buffer_for_read = std::make_unique>( reinterpret_cast(encoded_buff), encoded_len, false, false); buffer_for_read->Brush(encoded_len); @@ -185,13 +185,13 @@ static std::unique_ptr CreateDecodeColumn( auto int_column = ColumnOptCreateTraits::create_decoding( origin_len / sizeof(int64), std::move(decoding_option)); - int_column->Set(buffer_for_read); + int_column->Set(std::move(buffer_for_read)); column_rc = std::move(int_column); } else { auto int_column = ColumnOptCreateTraits::create_decoding( origin_len / sizeof(int64), std::move(decoding_option)); - int_column->Set(buffer_for_read, column_not_nulls); + int_column->Set(std::move(buffer_for_read), column_not_nulls); column_rc = std::move(int_column); } break; @@ -749,14 +749,14 @@ TEST_P(PaxNonFixedColumnCompressTest, auto non_fixed_column_for_read = new PaxNonFixedEncodingColumn( number_of_rows * number, sizeof(int32) * number_of_rows, std::move(decoding_option)); - auto data_buffer_for_read = std::make_shared>( + auto data_buffer_for_read = std::make_unique>( encoded_buff, encoded_len, false, false); data_buffer_for_read->Brush(encoded_len); - auto length_buffer_cpy = std::make_shared>( + auto length_buffer_cpy = std::make_unique>( (int32 *)offset_stream_buff, offset_stream_len, false, false); length_buffer_cpy->BrushAll(); - non_fixed_column_for_read->Set(data_buffer_for_read, length_buffer_cpy, - origin_len); + non_fixed_column_for_read->Set(std::move(data_buffer_for_read), + std::move(length_buffer_cpy), origin_len); ASSERT_EQ(non_fixed_column_for_read->GetCompressLevel(), 5); char *verify_buff; size_t verify_len; diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.cc index b59a5b879c1..0f93467812b 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.cc @@ -124,7 +124,7 @@ void PaxEncodingColumn::InitDecoder() { } template -void PaxEncodingColumn::Set(std::shared_ptr> data) { +void PaxEncodingColumn::Set(std::unique_ptr> data) { if (decoder_) { // should not decoding null if (data->Used() != 0) { @@ -155,7 +155,7 @@ void PaxEncodingColumn::Set(std::shared_ptr> data) { Assert(!data->IsMemTakeOver()); } else { - PaxCommColumn::Set(data); + PaxCommColumn::Set(std::move(data)); } } @@ -175,7 +175,7 @@ std::pair PaxEncodingColumn::GetBuffer() { if (encoder_) { // changed streaming encode to blocking encode // because we still need store a origin data in `PaxCommColumn` - auto origin_data_buffer = PaxCommColumn::data_; + auto origin_data_buffer = PaxCommColumn::data_.get(); shared_data_ = std::make_shared>(origin_data_buffer->Used()); encoder_->SetDataBuffer(shared_data_); diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.h b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.h index 773a7848f2f..5a5f1c378ba 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.h @@ -44,7 +44,7 @@ class PaxEncodingColumn : public PaxCommColumn { ~PaxEncodingColumn() override; - void Set(std::shared_ptr> data) override; + void Set(std::unique_ptr> data) override; std::pair GetBuffer() override; diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc index 90060050236..359a1c483a9 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc @@ -145,8 +145,8 @@ PaxNonFixedEncodingColumn::PaxNonFixedEncodingColumn( PaxNonFixedEncodingColumn::~PaxNonFixedEncodingColumn() {} -void PaxNonFixedEncodingColumn::Set(std::shared_ptr> data, - std::shared_ptr> offsets, +void PaxNonFixedEncodingColumn::Set(std::unique_ptr> data, + std::unique_ptr> offsets, size_t total_size) { bool exist_decoder; Assert(data && offsets); @@ -179,7 +179,7 @@ void PaxNonFixedEncodingColumn::Set(std::shared_ptr> data, // `data_` have the same buffer with `shared_data_` PaxNonFixedColumn::data_->Brush(shared_data_->Used()); // no delete the origin data - shared_data_ = data; + shared_data_ = std::move(data); } }; @@ -228,16 +228,16 @@ void PaxNonFixedEncodingColumn::Set(std::shared_ptr> data, PaxNonFixedColumn::next_offsets_ = -1; } else if (exist_decoder && !has_offsets_processor) { data_decompress(); - PaxNonFixedColumn::offsets_ = offsets; + PaxNonFixedColumn::offsets_ = std::move(offsets); PaxNonFixedColumn::estimated_size_ = total_size; PaxNonFixedColumn::next_offsets_ = -1; } else if (!exist_decoder && has_offsets_processor) { - PaxNonFixedColumn::data_ = data; + PaxNonFixedColumn::data_ = std::move(data); offsets_decompress(); PaxNonFixedColumn::estimated_size_ = total_size; PaxNonFixedColumn::next_offsets_ = -1; } else { // (!compressor_ && !offsets_compressor_) - PaxNonFixedColumn::Set(data, offsets, total_size); + PaxNonFixedColumn::Set(std::move(data), std::move(offsets), total_size); } } diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h index 06b60d02ac2..f5f5fd82128 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h @@ -42,8 +42,8 @@ class PaxNonFixedEncodingColumn : public PaxNonFixedColumn { ~PaxNonFixedEncodingColumn() override; - void Set(std::shared_ptr> data, - std::shared_ptr> offsets, + void Set(std::unique_ptr> data, + std::unique_ptr> offsets, size_t total_size) override; std::pair GetBuffer() override; diff --git a/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc b/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc index 2fa58790d97..9e939305c61 100644 --- a/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc +++ b/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc @@ -413,14 +413,14 @@ static std::unique_ptr BuildEncodingColumn( const ColumnEncoding &data_encoding, bool is_vec) { uint32 not_null_rows = 0; uint64 data_stream_len = 0; - std::shared_ptr> data_stream_buffer; + std::unique_ptr> data_stream_buffer; Assert(data_stream.kind() == pax::porc::proto::Stream_Kind_DATA); not_null_rows = static_cast(data_stream.column()); data_stream_len = static_cast(data_stream.length()); - data_stream_buffer = std::make_shared>( + data_stream_buffer = std::make_unique>( reinterpret_cast(data_buffer->GetAvailableBuffer()), data_stream_len, false, false); @@ -443,7 +443,7 @@ static std::unique_ptr BuildEncodingColumn( auto pax_column = traits::ColumnOptCreateTraits::create_decoding( alloc_size, decoding_option); - pax_column->Set(data_stream_buffer, (size_t)not_null_rows); + pax_column->Set(std::move(data_stream_buffer), (size_t)not_null_rows); return pax_column; } else { AssertImply(data_encoding.kind() == @@ -455,7 +455,7 @@ static std::unique_ptr BuildEncodingColumn( auto pax_column = traits::ColumnOptCreateTraits::create_decoding( alloc_size, decoding_option); - pax_column->Set(data_stream_buffer); + pax_column->Set(std::move(data_stream_buffer)); return pax_column; } } @@ -466,14 +466,14 @@ static std::unique_ptr BuildEncodingBitPackedColumn( bool is_vec) { uint32 not_null_rows = 0; uint64 column_data_len = 0; - std::shared_ptr> column_data_buffer; + std::unique_ptr> column_data_buffer; Assert(data_stream.kind() == pax::porc::proto::Stream_Kind_DATA); not_null_rows = static_cast(data_stream.column()); column_data_len = static_cast(data_stream.length()); - column_data_buffer = std::make_shared>( + column_data_buffer = std::make_unique>( reinterpret_cast(data_buffer->GetAvailableBuffer()), column_data_len, false, false); @@ -496,7 +496,7 @@ static std::unique_ptr BuildEncodingBitPackedColumn( auto pax_column = traits::ColumnOptCreateTraits2::create_decoding( alloc_size, decoding_option); - pax_column->Set(column_data_buffer, (size_t)not_null_rows); + pax_column->Set(std::move(column_data_buffer), (size_t)not_null_rows); return pax_column; } else { AssertImply(data_encoding.kind() == @@ -508,7 +508,7 @@ static std::unique_ptr BuildEncodingBitPackedColumn( auto pax_column = traits::ColumnOptCreateTraits2::create_decoding( alloc_size, decoding_option); - pax_column->Set(column_data_buffer); + pax_column->Set(std::move(column_data_buffer)); return pax_column; } } @@ -521,8 +521,8 @@ static std::unique_ptr BuildEncodingDecimalColumn( uint32 not_null_rows = 0; uint64 offset_stream_len = 0; uint64 data_stream_len = 0; - std::shared_ptr> offset_stream_buffer; - std::shared_ptr> data_stream_buffer; + std::unique_ptr> offset_stream_buffer; + std::unique_ptr> data_stream_buffer; std::unique_ptr pax_column; uint64 padding = 0; @@ -530,7 +530,7 @@ static std::unique_ptr BuildEncodingDecimalColumn( offset_stream_len = static_cast(len_stream.length()); padding = len_stream.padding(); - offset_stream_buffer = std::make_shared>( + offset_stream_buffer = std::make_unique>( reinterpret_cast(data_buffer->GetAvailableBuffer()), offset_stream_len, false, false); @@ -560,7 +560,7 @@ static std::unique_ptr BuildEncodingDecimalColumn( } #endif - data_stream_buffer = std::make_shared>( + data_stream_buffer = std::make_unique>( data_buffer->GetAvailableBuffer(), data_stream_len, false, false); data_stream_buffer->BrushAll(); data_buffer->Brush(data_stream_len); @@ -591,7 +591,7 @@ static std::unique_ptr BuildEncodingDecimalColumn( data_cap, offsets_cap, std::move(decoding_option)); // current memory will be freed in pax_columns->data_ - pax_column->Set(data_stream_buffer, offset_stream_buffer, data_stream_len); + pax_column->Set(std::move(data_stream_buffer), std::move(offset_stream_buffer), data_stream_len); return pax_column; } @@ -601,7 +601,7 @@ static std::unique_ptr BuildVecEncodingDecimalColumn( const ColumnEncoding &data_encoding, bool is_vec) { uint32 not_null_rows = 0; uint64 data_stream_len = 0; - std::shared_ptr> data_stream_buffer; + std::unique_ptr> data_stream_buffer; CBDB_CHECK(is_vec, cbdb::CException::ExType::kExTypeLogicError); @@ -610,7 +610,7 @@ static std::unique_ptr BuildVecEncodingDecimalColumn( not_null_rows = static_cast(data_stream.column()); data_stream_len = static_cast(data_stream.length()); - data_stream_buffer = std::make_shared>( + data_stream_buffer = std::make_unique>( reinterpret_cast(data_buffer->GetAvailableBuffer()), data_stream_len, false, false); @@ -630,7 +630,7 @@ static std::unique_ptr BuildVecEncodingDecimalColumn( auto pax_column = traits::ColumnOptCreateTraits2:: // create_decoding(alloc_size, decoding_option); - pax_column->Set(data_stream_buffer, (size_t)not_null_rows); + pax_column->Set(std::move(data_stream_buffer), (size_t)not_null_rows); return pax_column; } @@ -644,8 +644,8 @@ static std::unique_ptr BuildEncodingVecNonFixedColumn( uint64 offset_stream_len = 0; uint64 padding = 0; uint64 data_stream_len = 0; - std::shared_ptr> offset_stream_buffer; - std::shared_ptr> data_stream_buffer; + std::unique_ptr> offset_stream_buffer; + std::unique_ptr> data_stream_buffer; std::unique_ptr pax_column; PaxDecoder::DecodingOption decoding_option; size_t data_cap, offsets_cap; @@ -658,7 +658,7 @@ static std::unique_ptr BuildEncodingVecNonFixedColumn( offset_stream_len = static_cast(len_stream.length()); padding = len_stream.padding(); - offset_stream_buffer = std::make_shared>( + offset_stream_buffer = std::make_unique>( reinterpret_cast(data_buffer->GetAvailableBuffer()), offset_stream_len, false, false); @@ -676,7 +676,7 @@ static std::unique_ptr BuildEncodingVecNonFixedColumn( } data_buffer->Brush(offset_stream_len); - data_stream_buffer = std::make_shared>( + data_stream_buffer = std::make_unique>( data_buffer->GetAvailableBuffer(), data_stream_len, false, false); decoding_option.column_encode_type = data_encoding.kind(); @@ -730,7 +730,7 @@ static std::unique_ptr BuildEncodingVecNonFixedColumn( create_decoding(data_cap, offsets_cap, std::move(decoding_option)); } } - pax_column->Set(data_stream_buffer, offset_stream_buffer, data_stream_len, + pax_column->Set(std::move(data_stream_buffer), std::move(offset_stream_buffer), data_stream_len, not_null_rows); return pax_column; } @@ -743,8 +743,8 @@ static std::unique_ptr BuildEncodingNonFixedColumn( [[maybe_unused]] uint32 not_null_rows = 0; uint64 offset_stream_len = 0; uint64 data_stream_len = 0; - std::shared_ptr> offset_stream_buffer; - std::shared_ptr> data_stream_buffer; + std::unique_ptr> offset_stream_buffer; + std::unique_ptr> data_stream_buffer; std::unique_ptr pax_column; uint64 padding = 0; PaxDecoder::DecodingOption decoding_option; @@ -754,7 +754,7 @@ static std::unique_ptr BuildEncodingNonFixedColumn( offset_stream_len = static_cast(len_stream.length()); padding = len_stream.padding(); - offset_stream_buffer = std::make_shared>( + offset_stream_buffer = std::make_unique>( reinterpret_cast(data_buffer->GetAvailableBuffer()), offset_stream_len, false, false); @@ -776,7 +776,7 @@ static std::unique_ptr BuildEncodingNonFixedColumn( } #endif - data_stream_buffer = std::make_shared>( + data_stream_buffer = std::make_unique>( data_buffer->GetAvailableBuffer(), data_stream_len, false, false); data_stream_buffer->BrushAll(); data_buffer->Brush(data_stream_len); @@ -819,7 +819,7 @@ static std::unique_ptr BuildEncodingNonFixedColumn( } // current memory will be freed in pax_columns->data_ - pax_column->Set(data_stream_buffer, offset_stream_buffer, data_stream_len); + pax_column->Set(std::move(data_stream_buffer), std::move(offset_stream_buffer), data_stream_len); return pax_column; } From 5cc6d16d68b96d4236f316ab0227fc98842492fc Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Mon, 29 Sep 2025 17:38:32 +0800 Subject: [PATCH 170/260] Fix NULL locus of Shared Scan. The shared scan needs its locus type and parallel number to be explicitly set when `gp_cte_sharing` is used, even without parallelism. Failing to do so resulted in an incorrect NULL locus appearing in the query plan. Fix https://github.com/apache/cloudberry/issues/1376 Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/optimizer/plan/planshare.c | 3 ++ src/test/regress/expected/cbdb_parallel.out | 54 ++++++++++++++++++++- src/test/regress/sql/cbdb_parallel.sql | 15 +++++- 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/src/backend/optimizer/plan/planshare.c b/src/backend/optimizer/plan/planshare.c index f60f45f933e..f3b716364ca 100644 --- a/src/backend/optimizer/plan/planshare.c +++ b/src/backend/optimizer/plan/planshare.c @@ -52,6 +52,9 @@ make_shareinputscan(PlannerInfo *root, Plan *inputplan) sisc->scan.plan.plan_rows = inputplan->plan_rows; sisc->scan.plan.plan_width = inputplan->plan_width; + sisc->scan.plan.locustype = inputplan->locustype; + sisc->scan.plan.parallel = 0; /* No parallel ShareInputScan */ + return sisc; } diff --git a/src/test/regress/expected/cbdb_parallel.out b/src/test/regress/expected/cbdb_parallel.out index 942705e7471..da3216896ff 100644 --- a/src/test/regress/expected/cbdb_parallel.out +++ b/src/test/regress/expected/cbdb_parallel.out @@ -3516,7 +3516,59 @@ WHERE e.salary > ( David (2 rows) - +-- +-- Test https://github.com/apache/cloudberry/issues/1376 +-- +create table t1(a int, b int); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +create table t2 (like t1); +NOTICE: table doesn't have 'DISTRIBUTED BY' clause, defaulting to distribution columns from LIKE table +set gp_cte_sharing = on; +explain(locus, costs off) with x as + (select a, count(*) as b from t1 group by a union all + select a, count(*) as b from t2 group by a) + select count(*) from x a join x b on a.a = b.b; + QUERY PLAN +------------------------------------------------------------------------ + Finalize Aggregate + Locus: Entry + -> Gather Motion 3:1 (slice1; segments: 3) + Locus: Entry + -> Partial Aggregate + Locus: Hashed + -> Hash Join + Locus: Hashed + Hash Cond: (b.b = a.a) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Locus: Hashed + Hash Key: b.b + -> Subquery Scan on b + Locus: Strewn + -> Shared Scan (share slice:id 2:0) + Locus: Hashed + -> Hash + Locus: Hashed + -> Subquery Scan on a + Locus: Hashed + -> Shared Scan (share slice:id 1:0) + Locus: Hashed + -> Append + Locus: Hashed + -> HashAggregate + Locus: Hashed + Group Key: t1.a + -> Seq Scan on t1 + Locus: Hashed + -> HashAggregate + Locus: Hashed + Group Key: t2.a + -> Seq Scan on t2 + Locus: Hashed + Optimizer: Postgres query optimizer +(35 rows) + +reset gp_cte_sharing; reset enable_parallel; reset min_parallel_table_scan_size; -- start_ignore diff --git a/src/test/regress/sql/cbdb_parallel.sql b/src/test/regress/sql/cbdb_parallel.sql index 0ee6f72cb2a..f9d01dd8a00 100644 --- a/src/test/regress/sql/cbdb_parallel.sql +++ b/src/test/regress/sql/cbdb_parallel.sql @@ -1132,7 +1132,20 @@ WHERE e.salary > ( SELECT AVG(salary) FROM employees WHERE department_id = e.department_id); - + +-- +-- Test https://github.com/apache/cloudberry/issues/1376 +-- +create table t1(a int, b int); +create table t2 (like t1); +set gp_cte_sharing = on; + +explain(locus, costs off) with x as + (select a, count(*) as b from t1 group by a union all + select a, count(*) as b from t2 group by a) + select count(*) from x a join x b on a.a = b.b; + +reset gp_cte_sharing; reset enable_parallel; reset min_parallel_table_scan_size; From 20db402b60c87e57f08f09f4e12711db89460135 Mon Sep 17 00:00:00 2001 From: GongXun Date: Thu, 9 Oct 2025 16:57:32 +0800 Subject: [PATCH 171/260] Optimize OrcWriter: precompute varlena indices to skip invalid loops Reduces per-tuple branching and cache touches, especially on schemas with many fixed-length/byval columns 1. Add OrcWriter member: std::vector varlena_slowpath_indices_ 2. Precompute non-byval, typlen == -1 (varlena) column indices in constructor from tuple_desc 3. Update PrepareWriteTuple to iterate only precomputed indices, skipping fixed-length and byval columns --- .../src/cpp/storage/orc/orc_writer.cc | 18 ++++++++++++------ contrib/pax_storage/src/cpp/storage/orc/porc.h | 3 +++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc b/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc index 6c8d49502e5..5c8b52272d0 100644 --- a/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc +++ b/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc @@ -249,6 +249,16 @@ OrcWriter::OrcWriter( group_stats_.Initialize(writer_options.enable_min_max_col_idxs, writer_options.enable_bf_col_idxs); + + // Precompute slowpath indices for varlena columns (non-byval and typlen == -1) + varlena_slowpath_indices_.clear(); + varlena_slowpath_indices_.reserve(writer_options.rel_tuple_desc->natts); + for (int i = 0; i < writer_options.rel_tuple_desc->natts; ++i) { + auto attrs = TupleDescAttr(writer_options.rel_tuple_desc, i); + if (!attrs->attbyval && attrs->attlen == -1) { + varlena_slowpath_indices_.push_back(i); + } + } } OrcWriter::~OrcWriter() {} @@ -311,8 +321,6 @@ void OrcWriter::Flush() { std::vector> OrcWriter::PrepareWriteTuple( TupleTableSlot *table_slot) { TupleDesc tuple_desc; - int16 type_len; - bool type_by_val; bool is_null; Datum tts_value; char type_storage; @@ -323,18 +331,16 @@ std::vector> OrcWriter::PrepareWriteTuple( Assert(tuple_desc); const auto &required_stats_cols = group_stats_.GetRequiredStatsColsMask(); - for (int i = 0; i < tuple_desc->natts; i++) { + for (int i : varlena_slowpath_indices_) { bool save_origin_datum; auto attrs = TupleDescAttr(tuple_desc, i); - type_len = attrs->attlen; - type_by_val = attrs->attbyval; is_null = table_slot->tts_isnull[i]; tts_value = table_slot->tts_values[i]; type_storage = attrs->attstorage; AssertImply(attrs->attisdropped, is_null); - if (is_null || type_by_val || type_len != -1) { + if (is_null) { continue; } diff --git a/contrib/pax_storage/src/cpp/storage/orc/porc.h b/contrib/pax_storage/src/cpp/storage/orc/porc.h index 4bfccb6dec3..69a10ffaad7 100644 --- a/contrib/pax_storage/src/cpp/storage/orc/porc.h +++ b/contrib/pax_storage/src/cpp/storage/orc/porc.h @@ -138,6 +138,9 @@ class OrcWriter : public MicroPartitionWriter { ::pax::porc::proto::Footer file_footer_; ::pax::porc::proto::PostScript post_script_; ::pax::MicroPartitionStats group_stats_; + + // indices of columns that are non-byval and have typlen == -1 (varlena) + std::vector varlena_slowpath_indices_; }; class OrcReader : public MicroPartitionReader { From fd3d2b48da6ee45457811b0193ab99efa9cfe8d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Oct 2025 09:37:54 +0000 Subject: [PATCH 172/260] Bump SonarSource/sonarqube-scan-action from 5 to 6 in /.github/workflows Bumps [SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action) from 5 to 6. - [Release notes](https://github.com/sonarsource/sonarqube-scan-action/releases) - [Commits](https://github.com/sonarsource/sonarqube-scan-action/compare/v5...v6) --- updated-dependencies: - dependency-name: SonarSource/sonarqube-scan-action dependency-version: '6' dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .github/workflows/sonarqube.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index 6dcbb3eae4e..c883b5dd5f1 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -74,7 +74,7 @@ jobs: fi - name: Install Build Wrapper - uses: SonarSource/sonarqube-scan-action/install-build-wrapper@v5 + uses: SonarSource/sonarqube-scan-action/install-build-wrapper@v6 - name: Run Build Wrapper run: | @@ -112,7 +112,7 @@ jobs: build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} make -j$(nproc) - name: SonarQube Scan - uses: SonarSource/sonarqube-scan-action@v5 + uses: SonarSource/sonarqube-scan-action@v6 env: SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }} with: From 1f626d43dad35fcc5809c72936621344ec4632ba Mon Sep 17 00:00:00 2001 From: GongXun Date: Sun, 21 Sep 2025 21:17:22 +0800 Subject: [PATCH 173/260] Enhancement: simple code optimization 1. Explicit inline functions. 2. Instead of checking the physical size of the file every time a tuple is inserted, it is checked every 16 tuples. performance result ``` create table t1(a int, b int, c int, d int, e text, f text,g text, h text) using pax with(compresstype =zstd,compresslevel=5); gpadmin=# insert into t1 select i, i+1,i+2,i+3, i::text, i::text, i::text, i::text from generate_series(1,5000000) i; INSERT 0 5000000 Time: 6124.535 ms (00:06.125) gpadmin=# insert into t1 select i, i+1,i+2,i+3, i::text, i::text, i::text, i::text from generate_series(1,5000000) i; INSERT 0 5000000 Time: 5993.682 ms (00:05.994) -- optimized with this commit create table t1(a int, b int, c int, d int, e text, f text,g text, h text) using pax with(compresstype =zstd,compresslevel=5); gpadmin=# insert into t1 select i, i+1,i+2,i+3, i::text, i::text, i::text, i::text from generate_series(1,5000000) i; INSERT 0 5000000 Time: 5713.184 ms (00:05.713) gpadmin=# insert into t1 select i, i+1,i+2,i+3, i::text, i::text, i::text, i::text from generate_series(1,5000000) i; INSERT 0 5000000 Time: 5430.221 ms (00:05.430) ``` --- .../src/cpp/access/pax_dml_state.cc | 4 +-- .../pax_storage/src/cpp/comm/cbdb_wrappers.cc | 6 ---- .../pax_storage/src/cpp/comm/cbdb_wrappers.h | 6 ++-- .../src/cpp/storage/orc/orc_writer.cc | 6 +++- contrib/pax_storage/src/cpp/storage/pax.cc | 19 ++++++++-- contrib/pax_storage/src/cpp/storage/pax.h | 1 + .../src/cpp/storage/vec/pax_porc_adpater.cc | 36 ++++++++++++++++--- 7 files changed, 60 insertions(+), 18 deletions(-) diff --git a/contrib/pax_storage/src/cpp/access/pax_dml_state.cc b/contrib/pax_storage/src/cpp/access/pax_dml_state.cc index 0a7d367d34f..40cb6bdcdcd 100644 --- a/contrib/pax_storage/src/cpp/access/pax_dml_state.cc +++ b/contrib/pax_storage/src/cpp/access/pax_dml_state.cc @@ -104,7 +104,7 @@ void CPaxDmlStateLocal::Reset() { cbdb::pax_memory_context = nullptr; } CPaxDmlStateLocal::CPaxDmlStateLocal() : last_oid_(InvalidOid), cb_{.func = DmlStateResetCallback, .arg = NULL} {} -std::shared_ptr +pg_attribute_always_inline std::shared_ptr CPaxDmlStateLocal::RemoveDmlState(const Oid &oid) { std::shared_ptr value; @@ -121,7 +121,7 @@ CPaxDmlStateLocal::RemoveDmlState(const Oid &oid) { return value; } -std::shared_ptr +pg_attribute_always_inline std::shared_ptr CPaxDmlStateLocal::FindDmlState(const Oid &oid) { Assert(OidIsValid(oid)); diff --git a/contrib/pax_storage/src/cpp/comm/cbdb_wrappers.cc b/contrib/pax_storage/src/cpp/comm/cbdb_wrappers.cc index b9d1a723028..3e54e965698 100644 --- a/contrib/pax_storage/src/cpp/comm/cbdb_wrappers.cc +++ b/contrib/pax_storage/src/cpp/comm/cbdb_wrappers.cc @@ -124,12 +124,6 @@ void cbdb::MemoryCtxRegisterResetCallback(MemoryContext context, CBDB_WRAP_END; } -Oid cbdb::RelationGetRelationId(Relation rel) { - CBDB_WRAP_START; - { return RelationGetRelid(rel); } - CBDB_WRAP_END; -} - #ifdef RUN_GTEST Datum cbdb::DatumFromCString(const char *src, size_t length) { CBDB_WRAP_START; diff --git a/contrib/pax_storage/src/cpp/comm/cbdb_wrappers.h b/contrib/pax_storage/src/cpp/comm/cbdb_wrappers.h index 05738a4b2ab..2031662357d 100644 --- a/contrib/pax_storage/src/cpp/comm/cbdb_wrappers.h +++ b/contrib/pax_storage/src/cpp/comm/cbdb_wrappers.h @@ -114,8 +114,6 @@ void MemoryCtxDelete(MemoryContext memory_context); void MemoryCtxRegisterResetCallback(MemoryContext context, MemoryContextCallback *cb); -Oid RelationGetRelationId(Relation rel); - static inline void *DatumToPointer(Datum d) noexcept { return DatumGetPointer(d); } @@ -164,6 +162,10 @@ static inline float8 DatumToFloat8(Datum d) noexcept { return DatumGetFloat8(d); } +static pg_attribute_always_inline Oid RelationGetRelationId(Relation rel) noexcept { + return RelationGetRelid(rel); +} + BpChar *BpcharInput(const char *s, size_t len, int32 atttypmod); VarChar *VarcharInput(const char *s, size_t len, int32 atttypmod); text *CstringToText(const char *s, size_t len); diff --git a/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc b/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc index 5c8b52272d0..a33d2de0fc1 100644 --- a/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc +++ b/contrib/pax_storage/src/cpp/storage/orc/orc_writer.cc @@ -367,7 +367,11 @@ std::vector> OrcWriter::PrepareWriteTuple( // Numeric always need ensure that with the 4B header, otherwise it will // be converted twice in the vectorization path. if (required_stats_cols[i] || VARATT_IS_COMPRESSED(tts_value_vl) || - VARATT_IS_EXTERNAL(tts_value_vl) || attrs->atttypid == NUMERICOID) { + VARATT_IS_EXTERNAL(tts_value_vl) +#ifdef VEC_BUILD + || attrs->atttypid == NUMERICOID +#endif + ) { // still detoast the origin toast detoast_vl = cbdb::PgDeToastDatum(tts_value_vl); Assert(detoast_vl != nullptr); diff --git a/contrib/pax_storage/src/cpp/storage/pax.cc b/contrib/pax_storage/src/cpp/storage/pax.cc index c8d29bbb6ce..69282738f4c 100644 --- a/contrib/pax_storage/src/cpp/storage/pax.cc +++ b/contrib/pax_storage/src/cpp/storage/pax.cc @@ -49,6 +49,8 @@ #include "storage/vec/pax_vec_reader.h" #endif +#define PAX_SPLIT_STRATEGY_CHECK_INTERVAL (16) + namespace paxc { class IndexUpdaterInternal { public: @@ -280,14 +282,25 @@ void TableWriter::Open() { // insert tuple into the aux table before inserting any tuples. cbdb::InsertMicroPartitionPlaceHolder(RelationGetRelid(relation_), current_blockno_); + cur_physical_size_ = 0; } void TableWriter::WriteTuple(TupleTableSlot *slot) { Assert(writer_); Assert(strategy_); - // should check split strategy before write tuple - // otherwise, may got a empty file in the disk - if (strategy_->ShouldSplit(writer_->PhysicalSize(), num_tuples_)) { + // Because of the CTID constraint, we have to strictly enforce the accuracy of + // the tuple count and make sure it doesn't exceed + // PAX_MAX_NUM_TUPLES_PER_FILE. That's why we kept this precise check here. + + // On the other hand,the biggest performance hit here is the PhysicalSize() + // function.So to reduce the overhead of calling it so often, + // we only update the file size every PAX_SPLIT_STRATEGY_CHECK_INTERVAL + // tuples. + if ((num_tuples_ % PAX_SPLIT_STRATEGY_CHECK_INTERVAL) == 0) { + cur_physical_size_ = writer_->PhysicalSize(); + } + + if (strategy_->ShouldSplit(cur_physical_size_, num_tuples_)) { writer_->Close(); writer_ = nullptr; Open(); diff --git a/contrib/pax_storage/src/cpp/storage/pax.h b/contrib/pax_storage/src/cpp/storage/pax.h index 1d7a2f6b3fc..fec97e613f3 100644 --- a/contrib/pax_storage/src/cpp/storage/pax.h +++ b/contrib/pax_storage/src/cpp/storage/pax.h @@ -131,6 +131,7 @@ class TableWriter { std::vector> encoding_opts_; bool is_dfs_table_space_; + size_t cur_physical_size_ = 0; }; class TableReader final { diff --git a/contrib/pax_storage/src/cpp/storage/vec/pax_porc_adpater.cc b/contrib/pax_storage/src/cpp/storage/vec/pax_porc_adpater.cc index 65eeb4e88ae..7545e053b6e 100644 --- a/contrib/pax_storage/src/cpp/storage/vec/pax_porc_adpater.cc +++ b/contrib/pax_storage/src/cpp/storage/vec/pax_porc_adpater.cc @@ -29,6 +29,8 @@ #ifdef VEC_BUILD +#include + #include "comm/vec_numeric.h" #include "storage/columns/pax_column_traits.h" #include "storage/toast/pax_toast.h" @@ -38,6 +40,22 @@ #endif namespace pax { +static inline struct varlena *VarlenaShortTo4B(struct varlena *attr) { + Assert(attr != nullptr); + Assert(VARATT_IS_SHORT(attr)); + Size data_size = VARSIZE_SHORT(attr) - VARHDRSZ_SHORT; + Size new_size = data_size + VARHDRSZ; + + struct varlena *new_attr = + reinterpret_cast(malloc(new_size)); + + Assert(new_attr != nullptr); + + SET_VARSIZE(new_attr, new_size); + memcpy(VARDATA(new_attr), VARDATA_SHORT(attr), data_size); + return new_attr; +} + static void CopyFixedRawBufferWithNull( PaxColumn *column, std::shared_ptr visibility_map_bitset, size_t bitset_index_begin, size_t range_begin, size_t range_lens, @@ -235,16 +253,22 @@ static void CopyDecimalBuffer(PaxColumn *column, out_data_buffer->Brush(type_len); } else { Numeric numeric; + bool should_free = false; size_t num_len = 0; std::tie(buffer, buffer_len) = column->GetBuffer(data_index_begin + non_null_offset); auto vl = (struct varlena *)DatumGetPointer(buffer); - Assert(!(VARATT_IS_EXTERNAL(vl) || VARATT_IS_COMPRESSED(vl) || - VARATT_IS_SHORT(vl))); + Assert(!(VARATT_IS_EXTERNAL(vl) || VARATT_IS_COMPRESSED(vl))); num_len = VARSIZE_ANY_EXHDR(vl); - // direct cast - numeric = (Numeric)(buffer); + // it has been detoasted in OrcWriter::PrepareWriteTuple, except numeric + // type with short header should be detoasted to 4B header + if (unlikely(VARATT_IS_SHORT(vl))) { + numeric = VarlenaShortTo4B(vl); + should_free = true; + } else { // direct cast + numeric = (Numeric)(buffer); + } char *dest_buff = out_data_buffer->GetAvailableBuffer(); Assert(out_data_buffer->Available() >= (size_t)type_len); @@ -253,6 +277,10 @@ static void CopyDecimalBuffer(PaxColumn *column, (int64 *)(dest_buff + sizeof(int64))); out_data_buffer->Brush(type_len); non_null_offset++; + + if (should_free) { + free(numeric); + } } } From fb2f6c0cf3b4c6eece93ddf063bb4d30c6b59b71 Mon Sep 17 00:00:00 2001 From: kongfanhsen Date: Mon, 29 Sep 2025 15:36:56 +0800 Subject: [PATCH 174/260] Wait more time for writer gang The mechanism of fork gang adopts the asynchronous mode, Search for writer proc entry and retry only 5 times. Waiting for a total of 5 * 2=10 milliseconds, the writer process may not have started. Add the guc parameter find_writer_proc_retry_time to control the number of retries. When the fork gang takes a long time, you can increase the parameters. --- src/backend/storage/lmgr/lock.c | 4 +++- src/backend/utils/misc/guc.c | 10 ++++++++++ src/include/storage/lock.h | 1 + src/include/utils/sync_guc_name.h | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 016ad29072c..cbc873e0b70 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -330,6 +330,8 @@ static LOCALLOCK *StrongLockInProgress; LOCALLOCK *awaitedLock; ResourceOwner awaitedOwner; +/* find writer proc entry retry time */ +int find_writer_proc_retry_time = 5; #ifdef LOCK_DEBUG @@ -938,7 +940,7 @@ LockAcquireExtended(const LOCKTAG *locktag, /* Find the guy who should manage our locks */ volatile PGPROC * proc = FindProcByGpSessionId(gp_session_id); int count = 0; - while(proc==NULL && count < 5) + while(proc==NULL && count < find_writer_proc_retry_time) { pg_usleep( /* microseconds */ 2000); count++; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index d8cdf027df5..fb09180ebe9 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2652,6 +2652,16 @@ static struct config_int ConfigureNamesInt[] = NULL, NULL, NULL }, + { + {"find_writer_proc_retry_time", PGC_USERSET, DEVELOPER_OPTIONS, + gettext_noop("Sets the retry time of find writer proc entry."), + NULL + }, + &find_writer_proc_retry_time, + 5, 1, 5000, + NULL, NULL, NULL + }, + #ifdef LOCK_DEBUG { {"trace_lock_oidmin", PGC_SUSET, DEVELOPER_OPTIONS, diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h index 0c0284c9ed3..2c594cd68d8 100644 --- a/src/include/storage/lock.h +++ b/src/include/storage/lock.h @@ -35,6 +35,7 @@ typedef struct PROC_QUEUE /* GUC variables */ extern int max_locks_per_xact; +extern int find_writer_proc_retry_time; #ifdef LOCK_DEBUG extern int Trace_lock_oidmin; diff --git a/src/include/utils/sync_guc_name.h b/src/include/utils/sync_guc_name.h index 7a867660754..ca9f7ef45f8 100644 --- a/src/include/utils/sync_guc_name.h +++ b/src/include/utils/sync_guc_name.h @@ -199,3 +199,4 @@ "wal_sender_timeout", "work_mem", "zero_damaged_pages", + "find_writer_proc_retry_time", From 71e7c07da37d7d3820cbde60e4f6f5934fe120e9 Mon Sep 17 00:00:00 2001 From: GongXun Date: Fri, 10 Oct 2025 01:57:10 +0800 Subject: [PATCH 175/260] Optimize null bitmap handling for better append performance 1. Pre-allocate null bitmap capacity to pax_max_tuples_per_group to avoid capacity checks 2. initialize null bitmap with all bits set to 1 (0xff) by default, assuming non-null values are more frequent --- contrib/pax_storage/src/cpp/comm/bitmap.h | 62 +++++++++++++------ .../src/cpp/storage/columns/pax_column.cc | 15 +++-- .../src/cpp/storage/columns/pax_column.h | 12 +++- 3 files changed, 65 insertions(+), 24 deletions(-) diff --git a/contrib/pax_storage/src/cpp/comm/bitmap.h b/contrib/pax_storage/src/cpp/comm/bitmap.h index 793f85d668c..4e811dddc8e 100644 --- a/contrib/pax_storage/src/cpp/comm/bitmap.h +++ b/contrib/pax_storage/src/cpp/comm/bitmap.h @@ -134,12 +134,28 @@ struct BitmapRaw final { static_assert(BM_WORD_BITS == (1 << BM_WORD_SHIFTS)); return (index >> BM_WORD_SHIFTS) < size; } - inline bool Empty() const { + + inline bool Empty(uint32 end_index) const { if (!bitmap) return true; - for (size_t i = 0; i < size; i++) - if (bitmap[i]) return false; + + uint32 end_word = BM_INDEX_WORD_OFF(end_index); + uint32 end_bit_offset = BM_INDEX_BIT_OFF(end_index); + + for (uint32 i = 0; i < end_word && i < size; i++) { + if (bitmap[i] != 0) return false; + } + + // Check partial word at end + if (end_word < size && end_bit_offset > 0) { + T mask = (T(1) << end_bit_offset) - 1; + if (bitmap[end_word] & mask) return false; + } + return true; } + + inline bool Empty() const { return Empty(size * sizeof(T) * 8ULL); } + BitmapRaw() = default; BitmapRaw(T *buffer, size_t size) : bitmap(buffer), size(size) {} BitmapRaw(const BitmapRaw &) = delete; @@ -160,13 +176,14 @@ struct BitmapRaw final { template class BitmapTpl final { public: - using BitmapMemoryPolicy = void (*)(BitmapRaw &, uint32); - explicit BitmapTpl(uint32 initial_size = 16) { + using BitmapMemoryPolicy = void (*)(BitmapRaw &, uint32, uint8); + explicit BitmapTpl(uint32 initial_size = 16, uint8 init_value = 0) { static_assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8); static_assert(BM_WORD_BITS == (1 << BM_WORD_SHIFTS)); policy_ = DefaultBitmapMemoryPolicy; - policy_(raw_, Max(initial_size, 16)); + policy_(raw_, Max(initial_size, 16), init_value); + init_value_ = init_value; } explicit BitmapTpl(const BitmapRaw &raw) { static_assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || @@ -177,8 +194,7 @@ class BitmapTpl final { raw_.size = raw.size; } BitmapTpl(const BitmapTpl &tpl) = delete; - BitmapTpl(BitmapTpl &&tpl) - : raw_(std::move(tpl.raw_)), policy_(tpl.policy_) { + BitmapTpl(BitmapTpl &&tpl) : raw_(std::move(tpl.raw_)), policy_(tpl.policy_) { tpl.raw_.bitmap = nullptr; tpl.policy_ = ReadOnlyRefBitmap; } @@ -188,8 +204,7 @@ class BitmapTpl final { BitmapTpl &operator=(BitmapTpl &&tpl) = delete; ~BitmapTpl() { // Reference doesn't free the memory - if (policy_ == DefaultBitmapMemoryPolicy) - PAX_DELETE_ARRAY(raw_.bitmap); + if (policy_ == DefaultBitmapMemoryPolicy) PAX_DELETE_ARRAY(raw_.bitmap); raw_.bitmap = nullptr; } @@ -205,11 +220,13 @@ class BitmapTpl final { inline size_t WordBits() const { return BM_WORD_BITS; } inline void Set(uint32 index) { - if (unlikely(!raw_.HasEnoughSpace(index))) policy_(raw_, index); + if (unlikely(!raw_.HasEnoughSpace(index))) + policy_(raw_, index, init_value_); raw_.Set(index); } inline void SetN(uint32 index) { - if (unlikely(!raw_.HasEnoughSpace(index))) policy_(raw_, index); + if (unlikely(!raw_.HasEnoughSpace(index))) + policy_(raw_, index, init_value_); raw_.SetN(index); } inline void Clear(uint32 index) { @@ -228,7 +245,8 @@ class BitmapTpl final { } // invert the bit and return the old value. inline bool Toggle(uint32 index) { - if (unlikely(!raw_.HasEnoughSpace(index))) policy_(raw_, index); + if (unlikely(!raw_.HasEnoughSpace(index))) + policy_(raw_, index, init_value_); return raw_.Toggle(index); } // count bits in range [0, index] @@ -248,23 +266,28 @@ class BitmapTpl final { inline bool Empty() const { return raw_.Empty(); } + // check if the bitmap is empty in the range [0, end_index) + inline bool Empty(uint32 end_index) const { return raw_.Empty(end_index); } + BitmapMemoryPolicy Policy() const { return policy_; } const BitmapRaw &Raw() const { return raw_; } BitmapRaw &Raw() { return raw_; } - static void DefaultBitmapMemoryPolicy(BitmapRaw &raw, uint32 index) { + static void DefaultBitmapMemoryPolicy(BitmapRaw &raw, uint32 index, + uint8 init_value = 0) { auto old_bitmap = raw.bitmap; auto old_size = raw.size; auto size = Max(BM_INDEX_WORD_OFF(index) + 1, old_size * 2); auto p = PAX_NEW_ARRAY(size); if (old_size > 0) memcpy(p, old_bitmap, sizeof(T) * old_size); - memset(&p[old_size], 0, sizeof(T) * (size - old_size)); + memset(&p[old_size], init_value, sizeof(T) * (size - old_size)); raw.bitmap = p; raw.size = size; PAX_DELETE_ARRAY(old_bitmap); } - static void ReadOnlyRefBitmap(BitmapRaw & /*raw*/, uint32 /*index*/) { + static void ReadOnlyRefBitmap(BitmapRaw & /*raw*/, uint32 /*index*/, + uint8 /*init_value*/) { // raise CBDB_RAISE(cbdb::CException::kExTypeInvalidMemoryOperation); } @@ -280,12 +303,14 @@ class BitmapTpl final { return nwords * sizeof(T); } - static std::unique_ptr> BitmapTplCopy(const BitmapTpl *bitmap) { + static std::unique_ptr> BitmapTplCopy( + const BitmapTpl *bitmap) { if (bitmap == nullptr) return nullptr; return bitmap->Clone(); } - static std::unique_ptr> Union(const BitmapTpl *a, const BitmapTpl *b) { + static std::unique_ptr> Union(const BitmapTpl *a, + const BitmapTpl *b) { std::unique_ptr> result; const BitmapTpl *large; const BitmapTpl *small; @@ -315,6 +340,7 @@ class BitmapTpl final { BitmapRaw raw_; BitmapMemoryPolicy policy_; + uint8 init_value_ = 0; }; using Bitmap8 = BitmapTpl; diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc b/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc index eb1a47aa41e..7dc2ffcd146 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc @@ -83,13 +83,21 @@ size_t PaxColumn::GetRangeNonNullRows(size_t start_pos, size_t len) { void PaxColumn::CreateNulls(size_t cap) { Assert(!null_bitmap_); - null_bitmap_ = std::make_unique(cap); - null_bitmap_->SetN(total_rows_); + // By default, initialize every bit in the null bitmap to 1. + // This is based on the assumption that null values are much less frequent + // than non-null values in most datasets. As a result, when appending non-null + // values, we can simply skip setting the bit to 1, since it is already set. + // Only when appending a null value do we need to explicitly clear the + // corresponding bit. + null_bitmap_ = std::make_unique(cap, 0xff); } void PaxColumn::AppendNull() { if (!null_bitmap_) { - CreateNulls(DEFAULT_CAPACITY); + // Ensure that the capacity of null_bitmap_ is pax_max_tuples_per_group. + // This design allows the use of raw_bitmap in normal cases without + // incurring the overhead of checking the bitmap's capacity. + CreateNulls(pax::pax_max_tuples_per_group); } null_bitmap_->Clear(total_rows_); ++total_rows_; @@ -111,7 +119,6 @@ void PaxColumn::AppendToast(char *buffer, size_t size) { } void PaxColumn::Append(char * /*buffer*/, size_t /*size*/) { - if (null_bitmap_) null_bitmap_->Set(total_rows_); ++total_rows_; ++non_null_rows_; } diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column.h b/contrib/pax_storage/src/cpp/storage/columns/pax_column.h index 569293fb512..0adacb06829 100644 --- a/contrib/pax_storage/src/cpp/storage/columns/pax_column.h +++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column.h @@ -46,7 +46,8 @@ namespace pax { -#define DEFAULT_CAPACITY MIN(2048, MAX(16, MAXALIGN(pax::pax_max_tuples_per_group))) +#define DEFAULT_CAPACITY \ + MIN(2048, MAX(16, MAXALIGN(pax::pax_max_tuples_per_group))) // Used to mapping pg_type enum PaxColumnTypeInMem { @@ -230,7 +231,14 @@ class PaxColumn { inline bool HasNull() { return null_bitmap_ != nullptr; } // Are all values null? - inline bool AllNull() const { return null_bitmap_ && null_bitmap_->Empty(); } + // Check whether all bits in the specified range are zero. + // In pax_column, to avoid checking the capacity of the null bitmap, we + // allocate memory based on pax_max_tuples_per_group. As a result, the last + // group may contain fewer tuples than pax_max_tuples_per_group, so we need to + // check whether all bits in the range [0, total_rows_) are zero. + inline bool AllNull() const { + return null_bitmap_ && null_bitmap_->Empty(total_rows_); + } // Set the null bitmap inline void SetBitmap(std::unique_ptr null_bitmap) { From a348167978f780007014c7b0ef6259802aeb5766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=B9=B310304955?= Date: Thu, 16 Oct 2025 17:30:08 +0800 Subject: [PATCH 176/260] Add libssh2-devel package for gpfdist SFTP protocol gpfdist, Cloudberry's parallel file distribution program, traditionally required data files to be co-located with the gpfdist process. This limitation made it cumbersome to load data from remote servers, often requiring an extra data transfer step. This commit addresses the issue of gpfdist logs continuously growing and occupying a large amount of disk space in a persistent working scenario. libssh2-devel is introduced as a dependency package for the new feature in the PR apache#1226. --- devops/deploy/docker/build/rocky8/Dockerfile | 1 + devops/deploy/docker/build/rocky9/Dockerfile | 1 + 2 files changed, 2 insertions(+) diff --git a/devops/deploy/docker/build/rocky8/Dockerfile b/devops/deploy/docker/build/rocky8/Dockerfile index daef18a4e4e..7bcb8c645d5 100644 --- a/devops/deploy/docker/build/rocky8/Dockerfile +++ b/devops/deploy/docker/build/rocky8/Dockerfile @@ -132,6 +132,7 @@ RUN dnf makecache && \ zlib-devel && \ dnf install -y -d0 --enablerepo=devel \ libuv-devel \ + libssh2-devel \ libyaml-devel \ perl-IPC-Run \ protobuf-devel && \ diff --git a/devops/deploy/docker/build/rocky9/Dockerfile b/devops/deploy/docker/build/rocky9/Dockerfile index 6246ae79d75..6e19b850cbe 100644 --- a/devops/deploy/docker/build/rocky9/Dockerfile +++ b/devops/deploy/docker/build/rocky9/Dockerfile @@ -135,6 +135,7 @@ RUN dnf makecache && \ zlib-devel && \ dnf install -y --enablerepo=crb \ libuv-devel \ + libssh2-devel \ libyaml-devel \ perl-IPC-Run \ protobuf-devel && \ From 7669bc20698dae3aad3af83a8b1ff99cf72c0227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=B9=B310304955?= Date: Thu, 16 Oct 2025 19:25:34 +0800 Subject: [PATCH 177/260] Add libssh2-devel package for gpfdist SFTP protocol MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Installing libssh2 Dependencies on Ubuntu (dockerfileοΌ‰ --- devops/deploy/docker/build/ubuntu22.04/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/devops/deploy/docker/build/ubuntu22.04/Dockerfile b/devops/deploy/docker/build/ubuntu22.04/Dockerfile index 7a3abd61c85..09cf79dd555 100644 --- a/devops/deploy/docker/build/ubuntu22.04/Dockerfile +++ b/devops/deploy/docker/build/ubuntu22.04/Dockerfile @@ -110,6 +110,7 @@ RUN apt-get update && \ libperl-dev \ libprotobuf-dev \ libreadline-dev \ + libssh2-1-dev \ libssl-dev \ libuv1-dev \ libxerces-c-dev \ From f5050412cf8a9998bcee2aaf2c1c6c782dd187a5 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Thu, 16 Oct 2025 15:02:15 +0800 Subject: [PATCH 178/260] Make gp_cte_sharing globally configurable During CTE feature development, we discovered that the gp_cte_sharing GUC cannot be configured at the server level, which complicates testing of CTE sharing functionality. This GUC was introduced ten years ago, and there is no apparent reason why it should not be configurable globally. This change enables more flexible testing and deployment configurations. Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/utils/misc/guc_gp.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 18d33966de2..d2fa30ea762 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -1796,8 +1796,7 @@ struct config_bool ConfigureNamesBool_gp[] = { {"gp_cte_sharing", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("This guc enables sharing of plan fragments for common table expressions."), - NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + NULL }, &gp_cte_sharing, false, From 39c17957a46bed432e458c09163b1d1d30d5b304 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Wed, 15 Oct 2025 00:08:51 +0800 Subject: [PATCH 179/260] [ORCA] Fix segmentation fault when appending group statistics Previously, if a group reused statistics from its duplicate, appending new statistics could cause a segmentation fault when trying to release a NULL pointer. Fixed by appending directly to the duplicate's statistics instead. --- .../gporca/libgpopt/src/search/CGroup.cpp | 6 + .../libgpopt/src/search/CGroupExpression.cpp | 18 +++ .../src/unittest/gpopt/base/CGroupTest.cpp | 20 +++ src/test/regress/expected/gporca.out | 141 ++++++++++++++++++ .../regress/expected/gporca_optimizer.out | 141 ++++++++++++++++++ src/test/regress/sql/gporca.sql | 19 +++ 6 files changed, 345 insertions(+) diff --git a/src/backend/gporca/libgpopt/src/search/CGroup.cpp b/src/backend/gporca/libgpopt/src/search/CGroup.cpp index ed317dc302f..18b4cf44e5b 100644 --- a/src/backend/gporca/libgpopt/src/search/CGroup.cpp +++ b/src/backend/gporca/libgpopt/src/search/CGroup.cpp @@ -861,6 +861,12 @@ CGroup::AppendStats(CMemoryPool *mp, IStatistics *stats) GPOS_ASSERT(nullptr != stats); GPOS_ASSERT(nullptr != Pstats()); + if (FDuplicateGroup()) + { + PgroupDuplicate()->AppendStats(mp, stats); + return; + } + IStatistics *stats_copy = Pstats()->CopyStats(mp); stats_copy->AppendStats(mp, stats); diff --git a/src/backend/gporca/libgpopt/src/search/CGroupExpression.cpp b/src/backend/gporca/libgpopt/src/search/CGroupExpression.cpp index 0ff250dd0a0..dffd10cb35f 100644 --- a/src/backend/gporca/libgpopt/src/search/CGroupExpression.cpp +++ b/src/backend/gporca/libgpopt/src/search/CGroupExpression.cpp @@ -1098,6 +1098,16 @@ CGroupExpression::OsPrintCostContexts(IOstream &os, const CHAR *szPrefix) const // 4: CLogicalInnerJoin [ 6 7 3 ] Origin: (xform: CXformExpandNAryJoinGreedy, Grp: 4, GrpExpr: 3) // // Group 0 (#GExprs: 0, Duplicate Group: 4): +// +// There is also a chance that one of the group's expressions refers to the same group. +// This can happen if one of the groups has a link to another group, which in turn is its duplicate. +// Example: Group 0 is a duplicate of group 12, while it has an expression 1 +// that refers to group 12. After the groups merge, this expression will end up +// in group 12, which will lead to a cyclical relationship. +// Group 0 (#GExprs: 3, Duplicate Group: 12): +// 0: CLogicalCTEConsumer (1), Columns: ["a" (98), "b" (99), "c" (100)] [ ] +// 1: CLogicalSelect [ 12 3 ] +// 2: CLogicalNAryJoin [ 13 14 15 ] BOOL CGroupExpression::ContainsCircularDependencies() { @@ -1118,6 +1128,14 @@ CGroupExpression::ContainsCircularDependencies() { continue; } + + if (child_group->Id() == m_pgroup->Id()) + { + m_ecirculardependency = CGroupExpression::ecdCircularDependency; + GPOS_ASSERT(Pgroup()->UlGExprs() > 1); + break; + } + CGroup *child_duplicate_group = child_group->PgroupDuplicate(); if (child_duplicate_group != nullptr) { diff --git a/src/backend/gporca/server/src/unittest/gpopt/base/CGroupTest.cpp b/src/backend/gporca/server/src/unittest/gpopt/base/CGroupTest.cpp index cb5355964ed..a6e37b2a07a 100644 --- a/src/backend/gporca/server/src/unittest/gpopt/base/CGroupTest.cpp +++ b/src/backend/gporca/server/src/unittest/gpopt/base/CGroupTest.cpp @@ -99,6 +99,24 @@ CGroupTest::EresUnittest_FResetStatsOnCGroupWithDuplicateGroup() return GPOS_FAILED; } + CStatistics *stat = + GPOS_NEW(mp) CStatistics(mp, GPOS_NEW(mp) UlongToHistogramMap(mp), + GPOS_NEW(mp) UlongToDoubleMap(mp), 0, false); + + IStatistics *oldStats = pmemo->Pgroup(0)->Pstats(); + pmemo->Pgroup(0)->AppendStats(mp, stat); + + // By appending stats on group (0), we really are appending the stats on + // group (1). group (0) stats is never set in the first place. + if (oldStats == pmemo->Pgroup(1)->Pstats()) + { + stat->Release(); + GPOS_DELETE(pmemo); + pexprGet1->Release(); + pexprGet2->Release(); + return GPOS_FAILED; + } + pmemo->Pgroup(0)->FResetStats(); // After resetting stats on group (0), we should have also reset stats on @@ -106,12 +124,14 @@ CGroupTest::EresUnittest_FResetStatsOnCGroupWithDuplicateGroup() if (pmemo->Pgroup(0)->Pstats() != nullptr || pmemo->Pgroup(1)->Pstats() != nullptr) { + stat->Release(); GPOS_DELETE(pmemo); pexprGet1->Release(); pexprGet2->Release(); return GPOS_FAILED; } + stat->Release(); GPOS_DELETE(pmemo); pexprGet1->Release(); pexprGet2->Release(); diff --git a/src/test/regress/expected/gporca.out b/src/test/regress/expected/gporca.out index fc5adfd566c..4b2f0dac012 100644 --- a/src/test/regress/expected/gporca.out +++ b/src/test/regress/expected/gporca.out @@ -15012,3 +15012,144 @@ explain (costs off) select max(s1) from foo inner join bar on j1 = j2 group by g drop table foo; drop table bar; reset optimizer_enable_eageragg; +-- +-- Test CTE with nested joins to verify fix for infinite recursion during statistic derivation +-- This test case exercises ORCA's ability to handle CTEs with complex join patterns +-- and redistribution motions without falling into infinite recursion +-- +create table cte_test1 (a int, b int, c int) distributed randomly; +create table cte_test2 (a int, b int, c int) distributed randomly; +create table cte_test3 (a int, b int, c int) distributed randomly; +explain (costs off) with cte1 as ( + select cte_test1.a, cte_test2.b, cte_test1.c from cte_test1 inner join cte_test2 on cte_test1.a = cte_test2.b +), +cte2 as (select * from cte1) +select * from cte2 inner join cte_test3 on cte2.c = cte_test3.a; + QUERY PLAN +------------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) + -> Hash Join + Hash Cond: (cte_test1.c = cte_test3.a) + -> Hash Join + Hash Cond: (cte_test1.a = cte_test2.b) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: cte_test1.a + -> Seq Scan on cte_test1 + -> Hash + -> Redistribute Motion 3:3 (slice3; segments: 3) + Hash Key: cte_test2.b + -> Seq Scan on cte_test2 + -> Hash + -> Broadcast Motion 3:3 (slice4; segments: 3) + -> Seq Scan on cte_test3 + Optimizer: Postgres query optimizer +(16 rows) + +drop table cte_test1; +drop table cte_test2; +drop table cte_test3; +-- start_ignore +DROP SCHEMA orca CASCADE; +NOTICE: drop cascades to 190 other objects +DETAIL: drop cascades to table bar1 +drop cascades to table bar2 +drop cascades to table r +drop cascades to table s +drop cascades to table m +drop cascades to table m1 +drop cascades to table orca_w1 +drop cascades to table orca_w2 +drop cascades to table orca_w3 +drop cascades to table rcte +drop cascades to table onek +drop cascades to table pp +drop cascades to table multilevel_p +drop cascades to table t +drop cascades to table t_date +drop cascades to table t_text +drop cascades to table t_ceeval_ints +drop cascades to function csq_f(integer) +drop cascades to table csq_r +drop cascades to table fooh1 +drop cascades to table fooh2 +drop cascades to table t77 +drop cascades to table prod9 +drop cascades to table toanalyze +drop cascades to table ur +drop cascades to table us +drop cascades to table ut +drop cascades to table uu +drop cascades to table twf1 +drop cascades to table twf2 +drop cascades to table tab1 +drop cascades to table tab2 +drop cascades to function sum_sfunc(anyelement,anyelement) +drop cascades to function sum_combinefunc(anyelement,anyelement) +drop cascades to function myagg1(anyelement) +drop cascades to function sum_sfunc2(anyelement,anyelement,anyelement) +drop cascades to function myagg2(anyelement,anyelement) +drop cascades to function gptfp(anyarray,anyelement) +drop cascades to function gpffp(anyarray) +drop cascades to function myagg3(anyelement) +drop cascades to table array_table +drop cascades to table mpp22453 +drop cascades to table mpp22791 +drop cascades to table p1 +drop cascades to table tmp_verd_s_pp_provtabs_agt_0015_extract1 +drop cascades to table arrtest +drop cascades to table foo_missing_stats +drop cascades to table bar_missing_stats +drop cascades to table table_with_small_statistic_precision_diff +drop cascades to table cust +drop cascades to table datedim +drop cascades to function plusone(integer) +drop cascades to table bm_test +drop cascades to table bm_dyn_test +drop cascades to table bm_dyn_test_onepart +drop cascades to table bm_dyn_test_multilvl_part +drop cascades to table my_tt_agg_opt +drop cascades to table my_tq_agg_opt_part +drop cascades to function plusone(numeric) +drop cascades to table ggg +drop cascades to table t3 +drop cascades to table index_test +drop cascades to table btree_test +drop cascades to table bitmap_test +drop cascades to type rainbow +drop cascades to table foo_ctas +drop cascades to table input_tab1 +drop cascades to table input_tab2 +drop cascades to table tab_1 +drop cascades to table tab_2 +drop cascades to table tab_3 +drop cascades to table t_outer +drop cascades to table t_inner +drop cascades to table wst0 +drop cascades to table wst1 +drop cascades to table wst2 +drop cascades to table test1 +drop cascades to table t_new +drop cascades to table x_tab +drop cascades to table y_tab +drop cascades to table z_tab +drop cascades to function test_func_pg_stats() +drop cascades to function myintin(cstring) +drop cascades to type myint +drop cascades to function myintout(myint) +drop cascades to function myint_int8(myint) +drop cascades to table csq_cast_param_outer +drop cascades to table csq_cast_param_inner +drop cascades to function myint_numeric(myint) +drop cascades to cast from myint to numeric +drop cascades to table onetimefilter1 +drop cascades to table onetimefilter2 +drop cascades to table ffoo +drop cascades to table fbar +drop cascades to table touter +drop cascades to table tinnerbitmap +drop cascades to table tinnerbtree +drop cascades to table ds_part +drop cascades to table non_part1 +drop cascades to table non_part2 +and 90 other objects (see server log for list) +-- end_ignore diff --git a/src/test/regress/expected/gporca_optimizer.out b/src/test/regress/expected/gporca_optimizer.out index a1a315a1d6e..b8b83e01ab2 100644 --- a/src/test/regress/expected/gporca_optimizer.out +++ b/src/test/regress/expected/gporca_optimizer.out @@ -15049,3 +15049,144 @@ explain (costs off) select max(s1) from foo inner join bar on j1 = j2 group by g drop table foo; drop table bar; reset optimizer_enable_eageragg; +-- +-- Test CTE with nested joins to verify fix for infinite recursion during statistic derivation +-- This test case exercises ORCA's ability to handle CTEs with complex join patterns +-- and redistribution motions without falling into infinite recursion +-- +create table cte_test1 (a int, b int, c int) distributed randomly; +create table cte_test2 (a int, b int, c int) distributed randomly; +create table cte_test3 (a int, b int, c int) distributed randomly; +explain (costs off) with cte1 as ( + select cte_test1.a, cte_test2.b, cte_test1.c from cte_test1 inner join cte_test2 on cte_test1.a = cte_test2.b +), +cte2 as (select * from cte1) +select * from cte2 inner join cte_test3 on cte2.c = cte_test3.a; + QUERY PLAN +--------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + -> Hash Join + Hash Cond: (cte_test1.c = cte_test3.a) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: cte_test1.c + -> Hash Join + Hash Cond: (cte_test1.a = cte_test2.b) + -> Seq Scan on cte_test1 + -> Hash + -> Broadcast Motion 3:3 (slice3; segments: 3) + -> Seq Scan on cte_test2 + -> Hash + -> Redistribute Motion 3:3 (slice4; segments: 3) + Hash Key: cte_test3.a + -> Seq Scan on cte_test3 + Optimizer: GPORCA +(16 rows) + +drop table cte_test1; +drop table cte_test2; +drop table cte_test3; +-- start_ignore +DROP SCHEMA orca CASCADE; +NOTICE: drop cascades to 190 other objects +DETAIL: drop cascades to table bar1 +drop cascades to table bar2 +drop cascades to table r +drop cascades to table s +drop cascades to table m +drop cascades to table m1 +drop cascades to table orca_w1 +drop cascades to table orca_w2 +drop cascades to table orca_w3 +drop cascades to table rcte +drop cascades to table onek +drop cascades to table pp +drop cascades to table multilevel_p +drop cascades to table t +drop cascades to table t_date +drop cascades to table t_text +drop cascades to table t_ceeval_ints +drop cascades to function csq_f(integer) +drop cascades to table csq_r +drop cascades to table fooh1 +drop cascades to table fooh2 +drop cascades to table t77 +drop cascades to table prod9 +drop cascades to table toanalyze +drop cascades to table ur +drop cascades to table us +drop cascades to table ut +drop cascades to table uu +drop cascades to table twf1 +drop cascades to table twf2 +drop cascades to table tab1 +drop cascades to table tab2 +drop cascades to function sum_sfunc(anyelement,anyelement) +drop cascades to function sum_combinefunc(anyelement,anyelement) +drop cascades to function myagg1(anyelement) +drop cascades to function sum_sfunc2(anyelement,anyelement,anyelement) +drop cascades to function myagg2(anyelement,anyelement) +drop cascades to function gptfp(anyarray,anyelement) +drop cascades to function gpffp(anyarray) +drop cascades to function myagg3(anyelement) +drop cascades to table array_table +drop cascades to table mpp22453 +drop cascades to table mpp22791 +drop cascades to table p1 +drop cascades to table tmp_verd_s_pp_provtabs_agt_0015_extract1 +drop cascades to table arrtest +drop cascades to table foo_missing_stats +drop cascades to table bar_missing_stats +drop cascades to table table_with_small_statistic_precision_diff +drop cascades to table cust +drop cascades to table datedim +drop cascades to function plusone(integer) +drop cascades to table bm_test +drop cascades to table bm_dyn_test +drop cascades to table bm_dyn_test_onepart +drop cascades to table bm_dyn_test_multilvl_part +drop cascades to table my_tt_agg_opt +drop cascades to table my_tq_agg_opt_part +drop cascades to function plusone(numeric) +drop cascades to table ggg +drop cascades to table t3 +drop cascades to table index_test +drop cascades to table btree_test +drop cascades to table bitmap_test +drop cascades to type rainbow +drop cascades to table foo_ctas +drop cascades to table input_tab1 +drop cascades to table input_tab2 +drop cascades to table tab_1 +drop cascades to table tab_2 +drop cascades to table tab_3 +drop cascades to table t_outer +drop cascades to table t_inner +drop cascades to table wst0 +drop cascades to table wst1 +drop cascades to table wst2 +drop cascades to table test1 +drop cascades to table t_new +drop cascades to table x_tab +drop cascades to table y_tab +drop cascades to table z_tab +drop cascades to function test_func_pg_stats() +drop cascades to function myintin(cstring) +drop cascades to type myint +drop cascades to function myintout(myint) +drop cascades to function myint_int8(myint) +drop cascades to table csq_cast_param_outer +drop cascades to table csq_cast_param_inner +drop cascades to function myint_numeric(myint) +drop cascades to cast from myint to numeric +drop cascades to table onetimefilter1 +drop cascades to table onetimefilter2 +drop cascades to table ffoo +drop cascades to table fbar +drop cascades to table touter +drop cascades to table tinnerbitmap +drop cascades to table tinnerbtree +drop cascades to table ds_part +drop cascades to table non_part1 +drop cascades to table non_part2 +and 90 other objects (see server log for list) +-- end_ignore diff --git a/src/test/regress/sql/gporca.sql b/src/test/regress/sql/gporca.sql index 2305773ecf0..29481d859dc 100644 --- a/src/test/regress/sql/gporca.sql +++ b/src/test/regress/sql/gporca.sql @@ -3743,6 +3743,25 @@ drop table foo; drop table bar; reset optimizer_enable_eageragg; +-- +-- Test CTE with nested joins to verify fix for infinite recursion during statistic derivation +-- This test case exercises ORCA's ability to handle CTEs with complex join patterns +-- and redistribution motions without falling into infinite recursion +-- +create table cte_test1 (a int, b int, c int) distributed randomly; +create table cte_test2 (a int, b int, c int) distributed randomly; +create table cte_test3 (a int, b int, c int) distributed randomly; + +explain (costs off) with cte1 as ( + select cte_test1.a, cte_test2.b, cte_test1.c from cte_test1 inner join cte_test2 on cte_test1.a = cte_test2.b +), +cte2 as (select * from cte1) +select * from cte2 inner join cte_test3 on cte2.c = cte_test3.a; + +drop table cte_test1; +drop table cte_test2; +drop table cte_test3; + -- start_ignore DROP SCHEMA orca CASCADE; -- end_ignore From f60a409097c5fd92668c3c5d8dc578c194d54aaf Mon Sep 17 00:00:00 2001 From: Weinan WANG Date: Mon, 20 Oct 2025 18:49:20 +0800 Subject: [PATCH 180/260] Fix Segment NDV number underflow issue (#1387) For the ratio of NDV, the function `abs` accepts an int value as parameter, the double value `-0.x` cast to `int(0)`, which lead to unefficient plan picked. Fix `abs` -> `fabs` --- .../expected/bfv_aggregate_optimizer.out | 2 +- .../regress/expected/gp_dqa_optimizer.out | 60 ++++++++--------- .../expected/groupingsets_optimizer.out | 14 ++-- .../test/regress/expected/limit_optimizer.out | 31 +++++---- src/backend/commands/analyze.c | 5 +- .../expected/bfv_aggregate_optimizer.out | 2 +- .../regress/expected/gp_dqa_optimizer.out | 66 +++++++++---------- .../expected/groupingsets_optimizer.out | 14 ++-- src/test/regress/expected/limit_optimizer.out | 33 +++++----- 9 files changed, 105 insertions(+), 122 deletions(-) diff --git a/contrib/pax_storage/src/test/regress/expected/bfv_aggregate_optimizer.out b/contrib/pax_storage/src/test/regress/expected/bfv_aggregate_optimizer.out index f8508db62b0..72f0a78988c 100644 --- a/contrib/pax_storage/src/test/regress/expected/bfv_aggregate_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/bfv_aggregate_optimizer.out @@ -188,7 +188,7 @@ set optimizer_force_multistage_agg = on; select count_operator('select count(*) from multi_stage_test group by b;','GroupAggregate'); count_operator ---------------- - 1 + 2 (1 row) set optimizer_force_multistage_agg = off; diff --git a/contrib/pax_storage/src/test/regress/expected/gp_dqa_optimizer.out b/contrib/pax_storage/src/test/regress/expected/gp_dqa_optimizer.out index 250ad329a5e..db4d467570b 100644 --- a/contrib/pax_storage/src/test/regress/expected/gp_dqa_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/gp_dqa_optimizer.out @@ -65,20 +65,18 @@ select count(distinct d) from dqa_t1 group by i; (12 rows) explain (costs off) select count(distinct d) from dqa_t1 group by i; - QUERY PLAN ------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------ Gather Motion 3:1 (slice1; segments: 3) - -> Finalize HashAggregate + -> GroupAggregate Group Key: i - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: i - -> Partial GroupAggregate - Group Key: i - -> Sort - Sort Key: i, d - -> Seq Scan on dqa_t1 + -> Sort + Sort Key: i + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: i + -> Seq Scan on dqa_t1 Optimizer: Pivotal Optimizer (GPORCA) version 3.83.0 -(11 rows) +(9 rows) select count(distinct d), sum(distinct d) from dqa_t1 group by i; count | sum @@ -98,20 +96,18 @@ select count(distinct d), sum(distinct d) from dqa_t1 group by i; (12 rows) explain (costs off) select count(distinct d), sum(distinct d) from dqa_t1 group by i; - QUERY PLAN ------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------ Gather Motion 3:1 (slice1; segments: 3) - -> Finalize HashAggregate + -> GroupAggregate Group Key: i - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: i - -> Partial GroupAggregate - Group Key: i - -> Sort - Sort Key: i, d - -> Seq Scan on dqa_t1 + -> Sort + Sort Key: i + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: i + -> Seq Scan on dqa_t1 Optimizer: Pivotal Optimizer (GPORCA) version 3.83.0 -(11 rows) +(9 rows) select count(distinct d), count(distinct dt) from dqa_t1; count | count @@ -1909,20 +1905,18 @@ select count(distinct d) from dqa_t1 group by i; (12 rows) explain (costs off) select count(distinct d) from dqa_t1 group by i; - QUERY PLAN ------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------ Gather Motion 3:1 (slice1; segments: 3) - -> Finalize HashAggregate + -> GroupAggregate Group Key: i - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: i - -> Partial GroupAggregate - Group Key: i - -> Sort - Sort Key: i, d - -> Seq Scan on dqa_t1 + -> Sort + Sort Key: i + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: i + -> Seq Scan on dqa_t1 Optimizer: Pivotal Optimizer (GPORCA) version 3.83.0 -(11 rows) +(9 rows) select count(distinct d), count(distinct c), count(distinct dt) from dqa_t1; count | count | count diff --git a/contrib/pax_storage/src/test/regress/expected/groupingsets_optimizer.out b/contrib/pax_storage/src/test/regress/expected/groupingsets_optimizer.out index b2ac9ce9ddc..b3da68b1f9d 100644 --- a/contrib/pax_storage/src/test/regress/expected/groupingsets_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/groupingsets_optimizer.out @@ -1891,12 +1891,11 @@ explain (costs off) -> Streaming Partial HashAggregate Group Key: share0_ref5.hundred -> Shared Scan (share slice:id 5:0) - -> Finalize HashAggregate + -> HashAggregate Group Key: share0_ref6.thousand -> Redistribute Motion 3:3 (slice6; segments: 3) Hash Key: share0_ref6.thousand - -> Streaming Partial HashAggregate - Group Key: share0_ref6.thousand + -> Result -> Shared Scan (share slice:id 6:0) -> HashAggregate Group Key: share0_ref7.twothousand @@ -1908,7 +1907,7 @@ explain (costs off) Group Key: share0_ref8.unique1 -> Shared Scan (share slice:id 1:0) Optimizer: Pivotal Optimizer (GPORCA) -(50 rows) +(49 rows) explain (costs off) select unique1, @@ -1999,12 +1998,11 @@ explain (costs off) -> Streaming Partial HashAggregate Group Key: share0_ref5.hundred -> Shared Scan (share slice:id 5:0) - -> Finalize HashAggregate + -> HashAggregate Group Key: share0_ref6.thousand -> Redistribute Motion 3:3 (slice6; segments: 3) Hash Key: share0_ref6.thousand - -> Streaming Partial HashAggregate - Group Key: share0_ref6.thousand + -> Result -> Shared Scan (share slice:id 6:0) -> HashAggregate Group Key: share0_ref7.twothousand @@ -2016,7 +2014,7 @@ explain (costs off) Group Key: share0_ref8.unique1 -> Shared Scan (share slice:id 1:0) Optimizer: Pivotal Optimizer (GPORCA) -(50 rows) +(49 rows) reset hash_mem_multiplier; -- check collation-sensitive matching between grouping expressions diff --git a/contrib/pax_storage/src/test/regress/expected/limit_optimizer.out b/contrib/pax_storage/src/test/regress/expected/limit_optimizer.out index b8562703a6c..dea74df2b5d 100644 --- a/contrib/pax_storage/src/test/regress/expected/limit_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/limit_optimizer.out @@ -358,29 +358,28 @@ order by s2 desc; explain (verbose, costs off) select sum(tenthous) as s1, sum(tenthous) + random()*0 as s2 from tenk1 group by thousand order by thousand limit 3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------- Result - Output: (sum(tenthous)), (((sum(tenthous))::double precision + (random() * '0'::double precision))) + Output: (sum(tenthous)), ((((sum(tenthous)))::double precision + (random() * '0'::double precision))) -> Limit - Output: (sum(tenthous)), (((sum(tenthous))::double precision + (random() * '0'::double precision))), thousand + Output: (sum(tenthous)), ((((sum(tenthous)))::double precision + (random() * '0'::double precision))), thousand -> Gather Motion 3:1 (slice1; segments: 3) - Output: (sum(tenthous)), (((sum(tenthous))::double precision + (random() * '0'::double precision))), thousand + Output: (sum(tenthous)), ((((sum(tenthous)))::double precision + (random() * '0'::double precision))), thousand Merge Key: thousand -> Limit - Output: (sum(tenthous)), (((sum(tenthous))::double precision + (random() * '0'::double precision))), thousand - -> Finalize GroupAggregate - Output: sum(tenthous), ((sum(tenthous))::double precision + (random() * '0'::double precision)), thousand - Group Key: tenk1.thousand + Output: (sum(tenthous)), ((((sum(tenthous)))::double precision + (random() * '0'::double precision))), thousand + -> Result + Output: (sum(tenthous)), (((sum(tenthous)))::double precision + (random() * '0'::double precision)), thousand -> Sort - Output: thousand, (PARTIAL sum(tenthous)), (PARTIAL sum(tenthous)) + Output: (sum(tenthous)), (sum(tenthous)), thousand Sort Key: tenk1.thousand - -> Redistribute Motion 3:3 (slice2; segments: 3) - Output: thousand, (PARTIAL sum(tenthous)), (PARTIAL sum(tenthous)) - Hash Key: thousand - -> Streaming Partial HashAggregate - Output: thousand, PARTIAL sum(tenthous), PARTIAL sum(tenthous) - Group Key: tenk1.thousand + -> HashAggregate + Output: sum(tenthous), sum(tenthous), thousand + Group Key: tenk1.thousand + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: thousand, tenthous + Hash Key: thousand -> Seq Scan on public.tenk1 Output: thousand, tenthous Optimizer: Pivotal Optimizer (GPORCA) diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index ce642dc84e7..6f5c4c5c42c 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -2871,12 +2871,13 @@ process_sample_rows(Portal portal, arrayVal = DatumGetArrayTypeP(funcRetValues[3]); deconstruct_array(arrayVal, FLOAT8OID, 8, true, 'd', &colndv, &nulls, &numelems); - for (i = 0; i < relDesc->natts; i++) + Assert(numelems == relDesc->natts); + for (i = 0; i < numelems; i++) { double this_colndv = DatumGetFloat8(colndv[i]); if (this_colndv < 0) { Assert(this_colndv >= -1); - colNDVBySeg[i] += abs(this_colndv) * this_totalrows; + colNDVBySeg[i] += fabs(this_colndv) * this_totalrows; } else { /* if current segment have any data, then ndv won't be 0. * if current segment have no rows, ndv is 0. diff --git a/src/test/regress/expected/bfv_aggregate_optimizer.out b/src/test/regress/expected/bfv_aggregate_optimizer.out index 51fd134f587..47ae7048795 100644 --- a/src/test/regress/expected/bfv_aggregate_optimizer.out +++ b/src/test/regress/expected/bfv_aggregate_optimizer.out @@ -188,7 +188,7 @@ set optimizer_force_multistage_agg = on; select count_operator('select count(*) from multi_stage_test group by b;','GroupAggregate'); count_operator ---------------- - 1 + 2 (1 row) set optimizer_force_multistage_agg = off; diff --git a/src/test/regress/expected/gp_dqa_optimizer.out b/src/test/regress/expected/gp_dqa_optimizer.out index acbd713866d..278b719e933 100644 --- a/src/test/regress/expected/gp_dqa_optimizer.out +++ b/src/test/regress/expected/gp_dqa_optimizer.out @@ -66,20 +66,18 @@ select count(distinct d) from dqa_t1 group by i; (12 rows) explain (costs off) select count(distinct d) from dqa_t1 group by i; - QUERY PLAN ------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------ Gather Motion 3:1 (slice1; segments: 3) - -> Finalize HashAggregate + -> GroupAggregate Group Key: i - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: i - -> Partial GroupAggregate - Group Key: i - -> Sort - Sort Key: i, d - -> Seq Scan on dqa_t1 - Optimizer: Pivotal Optimizer (GPORCA) version 3.83.0 -(11 rows) + -> Sort + Sort Key: i + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: i + -> Seq Scan on dqa_t1 + Optimizer: GPORCA +(9 rows) select count(distinct d), sum(distinct d) from dqa_t1 group by i; count | sum @@ -99,20 +97,18 @@ select count(distinct d), sum(distinct d) from dqa_t1 group by i; (12 rows) explain (costs off) select count(distinct d), sum(distinct d) from dqa_t1 group by i; - QUERY PLAN ------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------ Gather Motion 3:1 (slice1; segments: 3) - -> Finalize HashAggregate + -> GroupAggregate Group Key: i - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: i - -> Partial GroupAggregate - Group Key: i - -> Sort - Sort Key: i, d - -> Seq Scan on dqa_t1 - Optimizer: Pivotal Optimizer (GPORCA) version 3.83.0 -(11 rows) + -> Sort + Sort Key: i + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: i + -> Seq Scan on dqa_t1 + Optimizer: GPORCA +(9 rows) select count(distinct d), count(distinct dt) from dqa_t1; INFO: GPORCA failed to produce a plan, falling back to Postgres-based planner @@ -2022,20 +2018,18 @@ select count(distinct d) from dqa_t1 group by i; (12 rows) explain (costs off) select count(distinct d) from dqa_t1 group by i; - QUERY PLAN ------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------ Gather Motion 3:1 (slice1; segments: 3) - -> Finalize HashAggregate + -> GroupAggregate Group Key: i - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: i - -> Partial GroupAggregate - Group Key: i - -> Sort - Sort Key: i, d - -> Seq Scan on dqa_t1 - Optimizer: Pivotal Optimizer (GPORCA) version 3.83.0 -(11 rows) + -> Sort + Sort Key: i + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: i + -> Seq Scan on dqa_t1 + Optimizer: GPORCA +(9 rows) select count(distinct d), count(distinct c), count(distinct dt) from dqa_t1; INFO: GPORCA failed to produce a plan, falling back to Postgres-based planner diff --git a/src/test/regress/expected/groupingsets_optimizer.out b/src/test/regress/expected/groupingsets_optimizer.out index 39fad5a1c8a..08ef4c1a68c 100644 --- a/src/test/regress/expected/groupingsets_optimizer.out +++ b/src/test/regress/expected/groupingsets_optimizer.out @@ -1968,12 +1968,11 @@ explain (costs off) -> Streaming Partial HashAggregate Group Key: share0_ref5.hundred -> Shared Scan (share slice:id 5:0) - -> Finalize HashAggregate + -> HashAggregate Group Key: share0_ref6.thousand -> Redistribute Motion 3:3 (slice6; segments: 3) Hash Key: share0_ref6.thousand - -> Streaming Partial HashAggregate - Group Key: share0_ref6.thousand + -> Result -> Shared Scan (share slice:id 6:0) -> HashAggregate Group Key: share0_ref7.twothousand @@ -1985,7 +1984,7 @@ explain (costs off) Group Key: share0_ref8.unique1 -> Shared Scan (share slice:id 1:0) Optimizer: Pivotal Optimizer (GPORCA) -(50 rows) +(49 rows) explain (costs off) select unique1, @@ -2076,12 +2075,11 @@ explain (costs off) -> Streaming Partial HashAggregate Group Key: share0_ref5.hundred -> Shared Scan (share slice:id 5:0) - -> Finalize HashAggregate + -> HashAggregate Group Key: share0_ref6.thousand -> Redistribute Motion 3:3 (slice6; segments: 3) Hash Key: share0_ref6.thousand - -> Streaming Partial HashAggregate - Group Key: share0_ref6.thousand + -> Result -> Shared Scan (share slice:id 6:0) -> HashAggregate Group Key: share0_ref7.twothousand @@ -2093,7 +2091,7 @@ explain (costs off) Group Key: share0_ref8.unique1 -> Shared Scan (share slice:id 1:0) Optimizer: Pivotal Optimizer (GPORCA) -(50 rows) +(49 rows) reset hash_mem_multiplier; -- check collation-sensitive matching between grouping expressions diff --git a/src/test/regress/expected/limit_optimizer.out b/src/test/regress/expected/limit_optimizer.out index 6508365fc81..e8a00fe3a40 100644 --- a/src/test/regress/expected/limit_optimizer.out +++ b/src/test/regress/expected/limit_optimizer.out @@ -358,32 +358,31 @@ order by s2 desc; explain (verbose, costs off) select sum(tenthous) as s1, sum(tenthous) + random()*0 as s2 from tenk1 group by thousand order by thousand limit 3; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------- Result - Output: (sum(tenthous)), (((sum(tenthous))::double precision + (random() * '0'::double precision))) + Output: (sum(tenthous)), ((((sum(tenthous)))::double precision + (random() * '0'::double precision))) -> Limit - Output: (sum(tenthous)), (((sum(tenthous))::double precision + (random() * '0'::double precision))), thousand + Output: (sum(tenthous)), ((((sum(tenthous)))::double precision + (random() * '0'::double precision))), thousand -> Gather Motion 3:1 (slice1; segments: 3) - Output: (sum(tenthous)), (((sum(tenthous))::double precision + (random() * '0'::double precision))), thousand + Output: (sum(tenthous)), ((((sum(tenthous)))::double precision + (random() * '0'::double precision))), thousand Merge Key: thousand -> Limit - Output: (sum(tenthous)), (((sum(tenthous))::double precision + (random() * '0'::double precision))), thousand - -> Finalize GroupAggregate - Output: sum(tenthous), ((sum(tenthous))::double precision + (random() * '0'::double precision)), thousand - Group Key: tenk1.thousand + Output: (sum(tenthous)), ((((sum(tenthous)))::double precision + (random() * '0'::double precision))), thousand + -> Result + Output: (sum(tenthous)), (((sum(tenthous)))::double precision + (random() * '0'::double precision)), thousand -> Sort - Output: thousand, (PARTIAL sum(tenthous)), (PARTIAL sum(tenthous)) + Output: (sum(tenthous)), (sum(tenthous)), thousand Sort Key: tenk1.thousand - -> Redistribute Motion 3:3 (slice2; segments: 3) - Output: thousand, (PARTIAL sum(tenthous)), (PARTIAL sum(tenthous)) - Hash Key: thousand - -> Streaming Partial HashAggregate - Output: thousand, PARTIAL sum(tenthous), PARTIAL sum(tenthous) - Group Key: tenk1.thousand + -> HashAggregate + Output: sum(tenthous), sum(tenthous), thousand + Group Key: tenk1.thousand + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: thousand, tenthous + Hash Key: thousand -> Seq Scan on public.tenk1 Output: thousand, tenthous - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (24 rows) select sum(tenthous) as s1, sum(tenthous) + random()*0 as s2 From 93d1c44f2cf5c98cdfc0c7df81513ce03115690d Mon Sep 17 00:00:00 2001 From: hanwei Date: Fri, 17 Oct 2025 10:46:59 +0800 Subject: [PATCH 181/260] Fix readable CTE with SELECT INTO clause. In https://github.com/apache/cloudberry/pull/1215 bugfix, it add a check for writable CTE with SELECT INTO clause. It will invoke `transformWithClause` twice, even it's readable CTE. But Cloudberry currently only support one WITH clause per query level, so it will lead to crash. So we can give up invoking `transformWithClause` function when check and iterate through each CTE to verify if it is writable. At the same time, we add comprehensive test cases to validate. --- src/backend/parser/analyze.c | 38 ++++++---- src/test/regress/expected/with.out | 73 ++++++++++++++++++++ src/test/regress/expected/with_optimizer.out | 73 ++++++++++++++++++++ src/test/regress/sql/with.sql | 49 +++++++++++++ 4 files changed, 218 insertions(+), 15 deletions(-) diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 552d2e1aa28..d8091c6c4f4 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -343,21 +343,29 @@ transformOptionalSelectInto(ParseState *pstate, Node *parseTree) if (stmt->withClause) { - /* - * Just transform to check p_hasModifyingCTE, cte list will be transformed inside SELECT stmt. - */ - transformWithClause(pstate, stmt->withClause); - /* - * Since Cloudberry currently only support a single writer gang, only one - * writable clause is permitted per CTE. Once we get flexible gangs - * with more than one writer gang we can lift this restriction. - */ - if (pstate->p_hasModifyingCTE) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("writable CTE queries cannot be used with writable queries"), - errdetail("Apache Cloudberry currently only support CTEs with one writable clause, called in a non-writable context."), - errhint("Rewrite the query to only include one writable clause."))); + ListCell *lc; + foreach(lc, stmt->withClause->ctes) + { + CommonTableExpr *cte = (CommonTableExpr *) lfirst(lc); + if (!IsA(cte->ctequery, SelectStmt)) + { + /* must be a data-modifying statement */ + Assert(IsA(cte->ctequery, InsertStmt) || + IsA(cte->ctequery, UpdateStmt) || + IsA(cte->ctequery, DeleteStmt)); + + /* + * Since Cloudberry currently only support a single writer gang, only one + * writable clause is permitted per CTE. Once we get flexible gangs + * with more than one writer gang we can lift this restriction. + */ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("writable CTE queries cannot be used with writable queries"), + errdetail("Apache Cloudberry currently only support CTEs with one writable clause, called in a non-writable context."), + errhint("Rewrite the query to only include one writable clause."))); + } + } } } } diff --git a/src/test/regress/expected/with.out b/src/test/regress/expected/with.out index ca8771a01fc..6c643fec8d4 100644 --- a/src/test/regress/expected/with.out +++ b/src/test/regress/expected/with.out @@ -3264,3 +3264,76 @@ ERROR: writable CTE queries cannot be used with writable queries DETAIL: Apache Cloudberry currently only support CTEs with one writable clause, called in a non-writable context. HINT: Rewrite the query to only include one writable clause. DROP TABLE t_w_cte_relp; +-- +-- readable CTE with SELECT INTO clause. +-- +WITH sel AS ( + SELECT 1 as a +) +SELECT a INTO t_r_cte FROM sel; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entry. +SELECT * FROM t_r_cte; + a +--- + 1 +(1 row) + +DROP TABLE t_r_cte; +-- +-- Multiple readable CTEs with SELECT INTO +-- +WITH cte1 AS (SELECT 1 as a), + cte2 AS (SELECT 2 as b) +SELECT a, b INTO t_multi_r_cte FROM cte1, cte2; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entry. +SELECT * FROM t_multi_r_cte; + a | b +---+--- + 1 | 2 +(1 row) + +DROP TABLE t_multi_r_cte; +-- +-- Nested SELECT in CTE with SELECT INTO +-- +WITH nested_cte AS ( + SELECT * FROM (SELECT 100 as val, 'test'::text as name) subq +) +SELECT val, name INTO t_nested_r_cte FROM nested_cte; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entry. +SELECT * FROM t_nested_r_cte; + val | name +-----+------ + 100 | test +(1 row) + +DROP TABLE t_nested_r_cte; +-- +-- CTE with JOIN and SELECT INTO +-- +WITH cte1 AS (SELECT 1 as id, 'foo' as val), + cte2 AS (SELECT 1 as id, 'bar' as val) +SELECT cte1.id, cte1.val as val1, cte2.val as val2 +INTO t_join_r_cte +FROM cte1 JOIN cte2 ON cte1.id = cte2.id; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entry. +SELECT * FROM t_join_r_cte; + id | val1 | val2 +----+------+------ + 1 | foo | bar +(1 row) + +DROP TABLE t_join_r_cte; +-- +-- Verify mixed readable and writable CTEs blocked (negative test) +-- +CREATE TABLE t_mixed_test (a int); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +WITH read_cte AS (SELECT 1 as x), + write_cte AS (INSERT INTO t_mixed_test VALUES (1) RETURNING *) +SELECT x INTO t_should_fail2 FROM read_cte; -- should fail +ERROR: writable CTE queries cannot be used with writable queries +DETAIL: Apache Cloudberry currently only support CTEs with one writable clause, called in a non-writable context. +HINT: Rewrite the query to only include one writable clause. +DROP TABLE t_mixed_test; diff --git a/src/test/regress/expected/with_optimizer.out b/src/test/regress/expected/with_optimizer.out index ca81f919f2a..76404cfde44 100644 --- a/src/test/regress/expected/with_optimizer.out +++ b/src/test/regress/expected/with_optimizer.out @@ -3284,3 +3284,76 @@ ERROR: writable CTE queries cannot be used with writable queries DETAIL: Apache Cloudberry currently only support CTEs with one writable clause, called in a non-writable context. HINT: Rewrite the query to only include one writable clause. DROP TABLE t_w_cte_relp; +-- +-- readable CTE with SELECT INTO clause. +-- +WITH sel AS ( + SELECT 1 as a +) +SELECT a INTO t_r_cte FROM sel; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entry. +SELECT * FROM t_r_cte; + a +--- + 1 +(1 row) + +DROP TABLE t_r_cte; +-- +-- Multiple readable CTEs with SELECT INTO +-- +WITH cte1 AS (SELECT 1 as a), + cte2 AS (SELECT 2 as b) +SELECT a, b INTO t_multi_r_cte FROM cte1, cte2; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entry. +SELECT * FROM t_multi_r_cte; + a | b +---+--- + 1 | 2 +(1 row) + +DROP TABLE t_multi_r_cte; +-- +-- Nested SELECT in CTE with SELECT INTO +-- +WITH nested_cte AS ( + SELECT * FROM (SELECT 100 as val, 'test'::text as name) subq +) +SELECT val, name INTO t_nested_r_cte FROM nested_cte; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entry. +SELECT * FROM t_nested_r_cte; + val | name +-----+------ + 100 | test +(1 row) + +DROP TABLE t_nested_r_cte; +-- +-- CTE with JOIN and SELECT INTO +-- +WITH cte1 AS (SELECT 1 as id, 'foo' as val), + cte2 AS (SELECT 1 as id, 'bar' as val) +SELECT cte1.id, cte1.val as val1, cte2.val as val2 +INTO t_join_r_cte +FROM cte1 JOIN cte2 ON cte1.id = cte2.id; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entry. +SELECT * FROM t_join_r_cte; + id | val1 | val2 +----+------+------ + 1 | foo | bar +(1 row) + +DROP TABLE t_join_r_cte; +-- +-- Verify mixed readable and writable CTEs blocked (negative test) +-- +CREATE TABLE t_mixed_test (a int); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +WITH read_cte AS (SELECT 1 as x), + write_cte AS (INSERT INTO t_mixed_test VALUES (1) RETURNING *) +SELECT x INTO t_should_fail2 FROM read_cte; -- should fail +ERROR: writable CTE queries cannot be used with writable queries +DETAIL: Apache Cloudberry currently only support CTEs with one writable clause, called in a non-writable context. +HINT: Rewrite the query to only include one writable clause. +DROP TABLE t_mixed_test; diff --git a/src/test/regress/sql/with.sql b/src/test/regress/sql/with.sql index b211e3eceed..0b3da6cd98c 100644 --- a/src/test/regress/sql/with.sql +++ b/src/test/regress/sql/with.sql @@ -1594,3 +1594,52 @@ EXPLAIN(COSTS OFF, VERBOSE) WITH ins AS ( ) SELECT sum(a) INTO t_w_cte_relp_1 FROM ins; DROP TABLE t_w_cte_relp; + +-- +-- readable CTE with SELECT INTO clause. +-- +WITH sel AS ( + SELECT 1 as a +) +SELECT a INTO t_r_cte FROM sel; +SELECT * FROM t_r_cte; +DROP TABLE t_r_cte; + +-- +-- Multiple readable CTEs with SELECT INTO +-- +WITH cte1 AS (SELECT 1 as a), + cte2 AS (SELECT 2 as b) +SELECT a, b INTO t_multi_r_cte FROM cte1, cte2; +SELECT * FROM t_multi_r_cte; +DROP TABLE t_multi_r_cte; + +-- +-- Nested SELECT in CTE with SELECT INTO +-- +WITH nested_cte AS ( + SELECT * FROM (SELECT 100 as val, 'test'::text as name) subq +) +SELECT val, name INTO t_nested_r_cte FROM nested_cte; +SELECT * FROM t_nested_r_cte; +DROP TABLE t_nested_r_cte; + +-- +-- CTE with JOIN and SELECT INTO +-- +WITH cte1 AS (SELECT 1 as id, 'foo' as val), + cte2 AS (SELECT 1 as id, 'bar' as val) +SELECT cte1.id, cte1.val as val1, cte2.val as val2 +INTO t_join_r_cte +FROM cte1 JOIN cte2 ON cte1.id = cte2.id; +SELECT * FROM t_join_r_cte; +DROP TABLE t_join_r_cte; + +-- +-- Verify mixed readable and writable CTEs blocked (negative test) +-- +CREATE TABLE t_mixed_test (a int); +WITH read_cte AS (SELECT 1 as x), + write_cte AS (INSERT INTO t_mixed_test VALUES (1) RETURNING *) +SELECT x INTO t_should_fail2 FROM read_cte; -- should fail +DROP TABLE t_mixed_test; From abc407ecf4bda40642460f37fe76cbabdc06bc1d Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Mon, 20 Oct 2025 14:39:47 +0800 Subject: [PATCH 182/260] CI: fix libssh2-devel installation for gpfdist SFTP protocol libssh2-devel is introduced as a dependency package for the new feature in the PR apache#1226. libssh2-devel is included in rocky-release-hpc, so we need to rocky-release-hpc before installing libssh2-devel: ``` dnf install rocky-release-hpc dnf install libssh2-devel ``` --- devops/deploy/docker/build/rocky8/Dockerfile | 3 ++- devops/deploy/docker/build/rocky9/Dockerfile | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/devops/deploy/docker/build/rocky8/Dockerfile b/devops/deploy/docker/build/rocky8/Dockerfile index 7bcb8c645d5..10519fa69cd 100644 --- a/devops/deploy/docker/build/rocky8/Dockerfile +++ b/devops/deploy/docker/build/rocky8/Dockerfile @@ -72,6 +72,7 @@ ENV USER=gpadmin RUN dnf makecache && \ dnf install -y \ epel-release \ + rocky-release-hpc \ git && \ dnf makecache && \ dnf config-manager --disable epel && \ @@ -98,6 +99,7 @@ RUN dnf makecache && \ krb5-devel \ libcurl-devel \ libevent-devel \ + libssh2-devel \ libuuid-devel \ libxml2-devel \ libzstd-devel \ @@ -132,7 +134,6 @@ RUN dnf makecache && \ zlib-devel && \ dnf install -y -d0 --enablerepo=devel \ libuv-devel \ - libssh2-devel \ libyaml-devel \ perl-IPC-Run \ protobuf-devel && \ diff --git a/devops/deploy/docker/build/rocky9/Dockerfile b/devops/deploy/docker/build/rocky9/Dockerfile index 6e19b850cbe..0307ae78b94 100644 --- a/devops/deploy/docker/build/rocky9/Dockerfile +++ b/devops/deploy/docker/build/rocky9/Dockerfile @@ -72,6 +72,7 @@ ENV USER=gpadmin RUN dnf makecache && \ dnf install -y \ epel-release \ + rocky-release-hpc \ git && \ dnf config-manager --disable epel-cisco-openh264 && \ dnf makecache && \ @@ -117,6 +118,7 @@ RUN dnf makecache && \ java-11-openjdk-devel \ krb5-devel \ libcurl-devel \ + libssh2-devel \ libevent-devel \ libxml2-devel \ libuuid-devel \ @@ -135,7 +137,6 @@ RUN dnf makecache && \ zlib-devel && \ dnf install -y --enablerepo=crb \ libuv-devel \ - libssh2-devel \ libyaml-devel \ perl-IPC-Run \ protobuf-devel && \ From df70b3cd70c590dc1a8c30060ecb040271a7c7a9 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Mon, 20 Oct 2025 10:52:06 +0800 Subject: [PATCH 183/260] Fix duplicate distribution keys from subqueries. The parser normally prevents duplicate distribution keys in main query grammar, but they can still originate from subqueries - particularly in window function PARTITION BY clauses with equivalent expressions. When duplicate distribution keys are detected, we now properly fall back to alternative processing. The caller already handles this fallback scenario correctly; this fix ensures the fallback is triggered when needed. --- .../regress/expected/create_table_distpol.out | 2 -- src/backend/cdb/cdbllize.c | 19 +++++++++++++++---- .../regress/expected/create_table_distpol.out | 2 -- src/test/regress/expected/gp_create_table.out | 5 +++++ src/test/regress/sql/gp_create_table.sql | 4 ++++ 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/contrib/pax_storage/src/test/regress/expected/create_table_distpol.out b/contrib/pax_storage/src/test/regress/expected/create_table_distpol.out index 545d14625f4..46479ca2126 100644 --- a/contrib/pax_storage/src/test/regress/expected/create_table_distpol.out +++ b/contrib/pax_storage/src/test/regress/expected/create_table_distpol.out @@ -128,9 +128,7 @@ select distkey from gp_distribution_policy where localoid = 'distpol_person_copy RESET gp_create_table_random_default_distribution; -- Test duplicate distribute keys CREATE TABLE ctas_dup_dk as SELECT distinct age as c1, age as c2 from distpol_person; -ERROR: duplicate DISTRIBUTED BY column 'c1' SELECT distinct age c1, age c2 into ctas_dup_dk_1 from distpol_person; -ERROR: duplicate DISTRIBUTED BY column 'c1' -- -- Test deriving distribution key from the query's distribution in -- CREATE TABLE AS diff --git a/src/backend/cdb/cdbllize.c b/src/backend/cdb/cdbllize.c index a4037c36158..da702806be5 100644 --- a/src/backend/cdb/cdbllize.c +++ b/src/backend/cdb/cdbllize.c @@ -161,6 +161,7 @@ get_partitioned_policy_from_path(PlannerInfo *root, Path *path) ListCell *dk_cell; ListCell *ec_cell; ListCell *em_cell; + bool duplicate_keys_detected = false; /* * Is it a Hashed distribution? @@ -184,6 +185,9 @@ get_partitioned_policy_from_path(PlannerInfo *root, Path *path) DistributionKey *dk = lfirst(dk_cell); bool found_expr = false; + if (duplicate_keys_detected) + return NULL; + foreach(ec_cell, dk->dk_eclasses) { EquivalenceClass *ec = lfirst(ec_cell); @@ -230,10 +234,17 @@ get_partitioned_policy_from_path(PlannerInfo *root, Path *path) Assert(list_length(policykeys) < MaxPolicyAttributeNumber); if (list_member_int(policykeys, attno)) - ereport(ERROR, - (errcode(ERRCODE_DUPLICATE_COLUMN), - errmsg("duplicate DISTRIBUTED BY column '%s'", - target->resname ? target->resname : "???"))); + { + /* + * Although the parser prevents duplicate distribution keys in regular grammar, + * they can still occur in subqueries(e.g., window function PARTITION BY columns + * with equivalent expressions). + * We fall back to an alternative approach when duplicate distribution keys are detected; + * the caller handles this scenario appropriately. + */ + duplicate_keys_detected = true; + break; + } /* * We know the btree operator family corresponding to diff --git a/src/test/regress/expected/create_table_distpol.out b/src/test/regress/expected/create_table_distpol.out index 545d14625f4..46479ca2126 100644 --- a/src/test/regress/expected/create_table_distpol.out +++ b/src/test/regress/expected/create_table_distpol.out @@ -128,9 +128,7 @@ select distkey from gp_distribution_policy where localoid = 'distpol_person_copy RESET gp_create_table_random_default_distribution; -- Test duplicate distribute keys CREATE TABLE ctas_dup_dk as SELECT distinct age as c1, age as c2 from distpol_person; -ERROR: duplicate DISTRIBUTED BY column 'c1' SELECT distinct age c1, age c2 into ctas_dup_dk_1 from distpol_person; -ERROR: duplicate DISTRIBUTED BY column 'c1' -- -- Test deriving distribution key from the query's distribution in -- CREATE TABLE AS diff --git a/src/test/regress/expected/gp_create_table.out b/src/test/regress/expected/gp_create_table.out index 88b126e4e65..8a26a9a7e33 100644 --- a/src/test/regress/expected/gp_create_table.out +++ b/src/test/regress/expected/gp_create_table.out @@ -202,3 +202,8 @@ c1 int,c2 int,c3 int,c4 int,c5 int,c6 int,c7 int,c8 int,c9 int,c10 int,c11 int,c c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c30,c31,c32,c33,c34,c35,c36,c37,c38,c39,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c50,c51,c52,c53,c54,c55,c56,c57,c58,c59,c60,c61,c62,c63,c64,c65,c66,c67,c68,c69,c70,c71,c72,c73,c74,c75,c76,c77,c78,c79,c80,c81,c82,c83,c84,c85,c86,c87,c88,c89,c90,c91,c92,c93,c94,c95,c96,c97,c98,c99,c100,c101,c102,c103,c104,c105,c106,c107,c108,c109,c110,c111,c112,c113,c114,c115,c116,c117,c118,c119,c120,c121,c122,c123,c124,c125,c126,c127,c128,c129,c130,c131,c132,c133,c134,c135,c136,c137,c138,c139,c140,c141,c142,c143,c144,c145,c146,c147,c148,c149,c150,c151,c152,c153,c154,c155,c156,c157,c158,c159,c160,c161,c162,c163,c164,c165,c166,c167,c168,c169,c170,c171,c172,c173,c174,c175,c176,c177,c178,c179,c180,c181,c182,c183,c184,c185,c186,c187,c188,c189,c190,c191,c192,c193,c194,c195,c196,c197,c198,c199,c200,c201,c202,c203,c204,c205,c206,c207,c208,c209,c210,c211,c212,c213,c214,c215,c216,c217,c218,c219,c220,c221,c222,c223,c224,c225,c226,c227,c228,c229,c230,c231,c232,c233,c234,c235,c236,c237,c238,c239,c240,c241,c242,c243,c244,c245,c246,c247,c248,c249,c250,c251,c252,c253,c254,c255,c256,c257,c258,c259,c260,c261,c262,c263,c264,c265,c266,c267,c268,c269,c270,c271,c272,c273,c274,c275,c276,c277,c278,c279,c280,c281,c282,c283,c284,c285,c286,c287,c288,c289,c290,c291,c292,c293,c294,c295,c296,c297,c298,c299,c300,c301,c302,c303,c304,c305,c306,c307,c308,c309,c310,c311,c312,c313,c314,c315,c316,c317,c318,c319,c320,c321,c322,c323,c324,c325,c326,c327,c328,c329,c330,c331,c332,c333,c334,c335,c336,c337,c338,c339,c340,c341,c342,c343,c344,c345,c346,c347,c348,c349,c350,c351,c352,c353,c354,c355,c356,c357,c358,c359,c360,c361,c362,c363,c364,c365,c366,c367,c368,c369,c370,c371,c372,c373,c374,c375,c376,c377,c378,c379,c380,c381,c382,c383,c384,c385,c386,c387,c388,c389,c390,c391,c392,c393,c394,c395,c396,c397,c398,c399,c400,c401,c402,c403,c404,c405,c406,c407,c408,c409,c410,c411,c412,c413,c414,c415,c416,c417,c418,c419,c420,c421,c422,c423,c424,c425,c426,c427,c428,c429,c430,c431,c432,c433,c434,c435,c436,c437,c438,c439,c440,c441,c442,c443,c444,c445,c446,c447,c448,c449,c450,c451,c452,c453,c454,c455,c456,c457,c458,c459,c460,c461,c462,c463,c464,c465,c466,c467,c468,c469,c470,c471,c472,c473,c474,c475,c476,c477,c478,c479,c480,c481,c482,c483,c484,c485,c486,c487,c488,c489,c490,c491,c492,c493,c494,c495,c496,c497,c498,c499,c500,c501,c502,c503,c504,c505,c506,c507,c508,c509,c510,c511,c512,c513,c514,c515,c516,c517,c518,c519,c520,c521,c522,c523,c524,c525,c526,c527,c528,c529,c530,c531,c532,c533,c534,c535,c536,c537,c538,c539,c540,c541,c542,c543,c544,c545,c546,c547,c548,c549,c550,c551,c552,c553,c554,c555,c556,c557,c558,c559,c560,c561,c562,c563,c564,c565,c566,c567,c568,c569,c570,c571,c572,c573,c574,c575,c576,c577,c578,c579,c580,c581,c582,c583,c584,c585,c586,c587,c588,c589,c590,c591,c592,c593,c594,c595,c596,c597,c598,c599,c600,c601,c602,c603,c604,c605,c606,c607,c608,c609,c610,c611,c612,c613,c614,c615,c616,c617,c618,c619,c620,c621,c622,c623,c624,c625,c626,c627,c628,c629,c630,c631,c632,c633,c634,c635,c636,c637,c638,c639,c640,c641,c642,c643,c644,c645,c646,c647,c648,c649,c650,c651,c652,c653,c654,c655,c656,c657,c658,c659,c660,c661,c662,c663,c664,c665,c666,c667,c668,c669,c670,c671,c672,c673,c674,c675,c676,c677,c678,c679,c680,c681,c682,c683,c684,c685,c686,c687,c688,c689,c690,c691,c692,c693,c694,c695,c696,c697,c698,c699,c700,c701,c702,c703,c704,c705,c706,c707,c708,c709,c710,c711,c712,c713,c714,c715,c716,c717,c718,c719,c720,c721,c722,c723,c724,c725,c726,c727,c728,c729,c730,c731,c732,c733,c734,c735,c736,c737,c738,c739,c740,c741,c742,c743,c744,c745,c746,c747,c748,c749,c750,c751,c752,c753,c754,c755,c756,c757,c758,c759,c760,c761,c762,c763,c764,c765,c766,c767,c768,c769,c770,c771,c772,c773,c774,c775,c776,c777,c778,c779,c780,c781,c782,c783,c784,c785,c786,c787,c788,c789,c790,c791,c792,c793,c794,c795,c796,c797,c798,c799,c800,c801,c802,c803,c804,c805,c806,c807,c808,c809,c810,c811,c812,c813,c814,c815,c816,c817,c818,c819,c820,c821,c822,c823,c824,c825,c826,c827,c828,c829,c830,c831,c832,c833,c834,c835,c836,c837,c838,c839,c840,c841,c842,c843,c844,c845,c846,c847,c848,c849,c850,c851,c852,c853,c854,c855,c856,c857,c858,c859,c860,c861,c862,c863,c864,c865,c866,c867,c868,c869,c870,c871,c872,c873,c874,c875,c876,c877,c878,c879,c880,c881,c882,c883,c884,c885,c886,c887,c888,c889,c890,c891,c892,c893,c894,c895,c896,c897,c898,c899,c900,c901,c902,c903,c904,c905,c906,c907,c908,c909,c910,c911,c912,c913,c914,c915,c916,c917,c918,c919,c920,c921,c922,c923,c924,c925,c926,c927,c928,c929,c930,c931,c932,c933,c934,c935,c936,c937,c938,c939,c940,c941,c942,c943,c944,c945,c946,c947,c948,c949,c950,c951,c952,c953,c954,c955,c956,c957,c958,c959,c960,c961,c962,c963,c964,c965,c966,c967,c968,c969,c970,c971,c972,c973,c974,c975,c976,c977,c978,c979,c980,c981,c982,c983,c984,c985,c986,c987,c988,c989,c990,c991,c992,c993,c994,c995,c996,c997,c998,c999,c1000,c1001,c1002,c1003,c1004,c1005,c1006,c1007,c1008,c1009,c1010,c1011,c1012,c1013,c1014,c1015,c1016,c1017,c1018,c1019,c1020,c1021,c1022,c1023,c1024,c1025,c1026,c1027,c1028,c1029,c1030,c1031,c1032,c1033,c1034,c1035,c1036,c1037,c1038,c1039,c1040,c1041,c1042,c1043,c1044,c1045,c1046,c1047,c1048,c1049,c1050,c1051,c1052,c1053,c1054,c1055,c1056,c1057,c1058,c1059,c1060,c1061,c1062,c1063,c1064,c1065,c1066,c1067,c1068,c1069,c1070,c1071,c1072,c1073,c1074,c1075,c1076,c1077,c1078,c1079,c1080,c1081,c1082,c1083,c1084,c1085,c1086,c1087,c1088,c1089,c1090,c1091,c1092,c1093,c1094,c1095,c1096,c1097,c1098,c1099,c1100,c1101,c1102,c1103,c1104,c1105,c1106,c1107,c1108,c1109,c1110,c1111,c1112,c1113,c1114,c1115,c1116,c1117,c1118,c1119,c1120,c1121,c1122,c1123,c1124,c1125,c1126,c1127,c1128,c1129,c1130,c1131,c1132,c1133,c1134,c1135,c1136,c1137,c1138,c1139,c1140,c1141,c1142,c1143,c1144,c1145,c1146,c1147,c1148,c1149,c1150,c1151,c1152,c1153,c1154,c1155,c1156,c1157,c1158,c1159,c1160,c1161,c1162,c1163,c1164,c1165,c1166,c1167,c1168,c1169,c1170,c1171,c1172,c1173,c1174,c1175,c1176,c1177,c1178,c1179,c1180,c1181,c1182,c1183,c1184,c1185,c1186,c1187,c1188,c1189,c1190,c1191,c1192,c1193,c1194,c1195,c1196,c1197,c1198,c1199,c1200,c1201,c1202,c1203,c1204,c1205,c1206,c1207,c1208,c1209,c1210,c1211,c1212,c1213,c1214,c1215,c1216,c1217,c1218,c1219,c1220,c1221,c1222,c1223,c1224,c1225,c1226,c1227,c1228,c1229,c1230,c1231,c1232,c1233,c1234,c1235,c1236,c1237,c1238,c1239,c1240,c1241,c1242,c1243,c1244,c1245,c1246,c1247,c1248,c1249,c1250,c1251,c1252,c1253,c1254,c1255,c1256,c1257,c1258,c1259,c1260,c1261,c1262,c1263,c1264,c1265,c1266,c1267,c1268,c1269,c1270,c1271,c1272,c1273,c1274,c1275,c1276,c1277,c1278,c1279,c1280,c1281,c1282,c1283,c1284,c1285,c1286,c1287,c1288,c1289,c1290,c1291,c1292,c1293,c1294,c1295,c1296,c1297,c1298,c1299,c1300,c1301,c1302,c1303,c1304,c1305,c1306,c1307,c1308,c1309,c1310,c1311,c1312,c1313,c1314,c1315,c1316,c1317,c1318,c1319,c1320,c1321,c1322,c1323,c1324,c1325,c1326,c1327,c1328,c1329,c1330,c1331,c1332,c1333,c1334,c1335,c1336,c1337,c1338,c1339,c1340,c1341,c1342,c1343,c1344,c1345,c1346,c1347,c1348,c1349,c1350,c1351,c1352,c1353,c1354,c1355,c1356,c1357,c1358,c1359,c1360,c1361,c1362,c1363,c1364,c1365,c1366,c1367,c1368,c1369,c1370,c1371,c1372,c1373,c1374,c1375,c1376,c1377,c1378,c1379,c1380,c1381,c1382,c1383,c1384,c1385,c1386,c1387,c1388,c1389,c1390,c1391,c1392,c1393,c1394,c1395,c1396,c1397,c1398,c1399,c1400,c1401,c1402,c1403,c1404,c1405,c1406,c1407,c1408,c1409,c1410,c1411,c1412,c1413,c1414,c1415,c1416,c1417,c1418,c1419,c1420,c1421,c1422,c1423,c1424,c1425,c1426,c1427,c1428,c1429,c1430,c1431,c1432,c1433,c1434,c1435,c1436,c1437,c1438,c1439,c1440,c1441,c1442,c1443,c1444,c1445,c1446,c1447,c1448,c1449,c1450,c1451,c1452,c1453,c1454,c1455,c1456,c1457,c1458,c1459,c1460,c1461,c1462,c1463,c1464,c1465,c1466,c1467,c1468,c1469,c1470,c1471,c1472,c1473,c1474,c1475,c1476,c1477,c1478,c1479,c1480,c1481,c1482,c1483,c1484,c1485,c1486,c1487,c1488,c1489,c1490,c1491,c1492,c1493,c1494,c1495,c1496,c1497,c1498,c1499,c1500,c1501,c1502,c1503,c1504,c1505,c1506,c1507,c1508,c1509,c1510,c1511,c1512,c1513,c1514,c1515,c1516,c1517,c1518,c1519,c1520,c1521,c1522,c1523,c1524,c1525,c1526,c1527,c1528,c1529,c1530,c1531,c1532,c1533,c1534,c1535,c1536,c1537,c1538,c1539,c1540,c1541,c1542,c1543,c1544,c1545,c1546,c1547,c1548,c1549,c1550,c1551,c1552,c1553,c1554,c1555,c1556,c1557,c1558,c1559,c1560,c1561,c1562,c1563,c1564,c1565,c1566,c1567,c1568,c1569,c1570,c1571,c1572,c1573,c1574,c1575,c1576,c1577,c1578,c1579,c1580,c1581,c1582,c1583,c1584,c1585,c1586,c1587,c1588,c1589,c1590,c1591,c1592,c1593,c1594,c1595,c1596,c1597,c1598,c1599,c1600,c1601 ); ERROR: tables can have at most 1600 columns +create table dup_key_t(a int, b int, c int) distributed randomly; +create temp table ctas_dump_key_t as select rn, a, b from + (select a, b, row_number() over (partition by a, b order by c) rn from dup_key_t where dup_key_t.a = dup_key_t.b) x; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'rn' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. diff --git a/src/test/regress/sql/gp_create_table.sql b/src/test/regress/sql/gp_create_table.sql index 503ccfa43e1..5b39b216d34 100644 --- a/src/test/regress/sql/gp_create_table.sql +++ b/src/test/regress/sql/gp_create_table.sql @@ -129,3 +129,7 @@ c1 int,c2 int,c3 int,c4 int,c5 int,c6 int,c7 int,c8 int,c9 int,c10 int,c11 int,c ( c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c30,c31,c32,c33,c34,c35,c36,c37,c38,c39,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c50,c51,c52,c53,c54,c55,c56,c57,c58,c59,c60,c61,c62,c63,c64,c65,c66,c67,c68,c69,c70,c71,c72,c73,c74,c75,c76,c77,c78,c79,c80,c81,c82,c83,c84,c85,c86,c87,c88,c89,c90,c91,c92,c93,c94,c95,c96,c97,c98,c99,c100,c101,c102,c103,c104,c105,c106,c107,c108,c109,c110,c111,c112,c113,c114,c115,c116,c117,c118,c119,c120,c121,c122,c123,c124,c125,c126,c127,c128,c129,c130,c131,c132,c133,c134,c135,c136,c137,c138,c139,c140,c141,c142,c143,c144,c145,c146,c147,c148,c149,c150,c151,c152,c153,c154,c155,c156,c157,c158,c159,c160,c161,c162,c163,c164,c165,c166,c167,c168,c169,c170,c171,c172,c173,c174,c175,c176,c177,c178,c179,c180,c181,c182,c183,c184,c185,c186,c187,c188,c189,c190,c191,c192,c193,c194,c195,c196,c197,c198,c199,c200,c201,c202,c203,c204,c205,c206,c207,c208,c209,c210,c211,c212,c213,c214,c215,c216,c217,c218,c219,c220,c221,c222,c223,c224,c225,c226,c227,c228,c229,c230,c231,c232,c233,c234,c235,c236,c237,c238,c239,c240,c241,c242,c243,c244,c245,c246,c247,c248,c249,c250,c251,c252,c253,c254,c255,c256,c257,c258,c259,c260,c261,c262,c263,c264,c265,c266,c267,c268,c269,c270,c271,c272,c273,c274,c275,c276,c277,c278,c279,c280,c281,c282,c283,c284,c285,c286,c287,c288,c289,c290,c291,c292,c293,c294,c295,c296,c297,c298,c299,c300,c301,c302,c303,c304,c305,c306,c307,c308,c309,c310,c311,c312,c313,c314,c315,c316,c317,c318,c319,c320,c321,c322,c323,c324,c325,c326,c327,c328,c329,c330,c331,c332,c333,c334,c335,c336,c337,c338,c339,c340,c341,c342,c343,c344,c345,c346,c347,c348,c349,c350,c351,c352,c353,c354,c355,c356,c357,c358,c359,c360,c361,c362,c363,c364,c365,c366,c367,c368,c369,c370,c371,c372,c373,c374,c375,c376,c377,c378,c379,c380,c381,c382,c383,c384,c385,c386,c387,c388,c389,c390,c391,c392,c393,c394,c395,c396,c397,c398,c399,c400,c401,c402,c403,c404,c405,c406,c407,c408,c409,c410,c411,c412,c413,c414,c415,c416,c417,c418,c419,c420,c421,c422,c423,c424,c425,c426,c427,c428,c429,c430,c431,c432,c433,c434,c435,c436,c437,c438,c439,c440,c441,c442,c443,c444,c445,c446,c447,c448,c449,c450,c451,c452,c453,c454,c455,c456,c457,c458,c459,c460,c461,c462,c463,c464,c465,c466,c467,c468,c469,c470,c471,c472,c473,c474,c475,c476,c477,c478,c479,c480,c481,c482,c483,c484,c485,c486,c487,c488,c489,c490,c491,c492,c493,c494,c495,c496,c497,c498,c499,c500,c501,c502,c503,c504,c505,c506,c507,c508,c509,c510,c511,c512,c513,c514,c515,c516,c517,c518,c519,c520,c521,c522,c523,c524,c525,c526,c527,c528,c529,c530,c531,c532,c533,c534,c535,c536,c537,c538,c539,c540,c541,c542,c543,c544,c545,c546,c547,c548,c549,c550,c551,c552,c553,c554,c555,c556,c557,c558,c559,c560,c561,c562,c563,c564,c565,c566,c567,c568,c569,c570,c571,c572,c573,c574,c575,c576,c577,c578,c579,c580,c581,c582,c583,c584,c585,c586,c587,c588,c589,c590,c591,c592,c593,c594,c595,c596,c597,c598,c599,c600,c601,c602,c603,c604,c605,c606,c607,c608,c609,c610,c611,c612,c613,c614,c615,c616,c617,c618,c619,c620,c621,c622,c623,c624,c625,c626,c627,c628,c629,c630,c631,c632,c633,c634,c635,c636,c637,c638,c639,c640,c641,c642,c643,c644,c645,c646,c647,c648,c649,c650,c651,c652,c653,c654,c655,c656,c657,c658,c659,c660,c661,c662,c663,c664,c665,c666,c667,c668,c669,c670,c671,c672,c673,c674,c675,c676,c677,c678,c679,c680,c681,c682,c683,c684,c685,c686,c687,c688,c689,c690,c691,c692,c693,c694,c695,c696,c697,c698,c699,c700,c701,c702,c703,c704,c705,c706,c707,c708,c709,c710,c711,c712,c713,c714,c715,c716,c717,c718,c719,c720,c721,c722,c723,c724,c725,c726,c727,c728,c729,c730,c731,c732,c733,c734,c735,c736,c737,c738,c739,c740,c741,c742,c743,c744,c745,c746,c747,c748,c749,c750,c751,c752,c753,c754,c755,c756,c757,c758,c759,c760,c761,c762,c763,c764,c765,c766,c767,c768,c769,c770,c771,c772,c773,c774,c775,c776,c777,c778,c779,c780,c781,c782,c783,c784,c785,c786,c787,c788,c789,c790,c791,c792,c793,c794,c795,c796,c797,c798,c799,c800,c801,c802,c803,c804,c805,c806,c807,c808,c809,c810,c811,c812,c813,c814,c815,c816,c817,c818,c819,c820,c821,c822,c823,c824,c825,c826,c827,c828,c829,c830,c831,c832,c833,c834,c835,c836,c837,c838,c839,c840,c841,c842,c843,c844,c845,c846,c847,c848,c849,c850,c851,c852,c853,c854,c855,c856,c857,c858,c859,c860,c861,c862,c863,c864,c865,c866,c867,c868,c869,c870,c871,c872,c873,c874,c875,c876,c877,c878,c879,c880,c881,c882,c883,c884,c885,c886,c887,c888,c889,c890,c891,c892,c893,c894,c895,c896,c897,c898,c899,c900,c901,c902,c903,c904,c905,c906,c907,c908,c909,c910,c911,c912,c913,c914,c915,c916,c917,c918,c919,c920,c921,c922,c923,c924,c925,c926,c927,c928,c929,c930,c931,c932,c933,c934,c935,c936,c937,c938,c939,c940,c941,c942,c943,c944,c945,c946,c947,c948,c949,c950,c951,c952,c953,c954,c955,c956,c957,c958,c959,c960,c961,c962,c963,c964,c965,c966,c967,c968,c969,c970,c971,c972,c973,c974,c975,c976,c977,c978,c979,c980,c981,c982,c983,c984,c985,c986,c987,c988,c989,c990,c991,c992,c993,c994,c995,c996,c997,c998,c999,c1000,c1001,c1002,c1003,c1004,c1005,c1006,c1007,c1008,c1009,c1010,c1011,c1012,c1013,c1014,c1015,c1016,c1017,c1018,c1019,c1020,c1021,c1022,c1023,c1024,c1025,c1026,c1027,c1028,c1029,c1030,c1031,c1032,c1033,c1034,c1035,c1036,c1037,c1038,c1039,c1040,c1041,c1042,c1043,c1044,c1045,c1046,c1047,c1048,c1049,c1050,c1051,c1052,c1053,c1054,c1055,c1056,c1057,c1058,c1059,c1060,c1061,c1062,c1063,c1064,c1065,c1066,c1067,c1068,c1069,c1070,c1071,c1072,c1073,c1074,c1075,c1076,c1077,c1078,c1079,c1080,c1081,c1082,c1083,c1084,c1085,c1086,c1087,c1088,c1089,c1090,c1091,c1092,c1093,c1094,c1095,c1096,c1097,c1098,c1099,c1100,c1101,c1102,c1103,c1104,c1105,c1106,c1107,c1108,c1109,c1110,c1111,c1112,c1113,c1114,c1115,c1116,c1117,c1118,c1119,c1120,c1121,c1122,c1123,c1124,c1125,c1126,c1127,c1128,c1129,c1130,c1131,c1132,c1133,c1134,c1135,c1136,c1137,c1138,c1139,c1140,c1141,c1142,c1143,c1144,c1145,c1146,c1147,c1148,c1149,c1150,c1151,c1152,c1153,c1154,c1155,c1156,c1157,c1158,c1159,c1160,c1161,c1162,c1163,c1164,c1165,c1166,c1167,c1168,c1169,c1170,c1171,c1172,c1173,c1174,c1175,c1176,c1177,c1178,c1179,c1180,c1181,c1182,c1183,c1184,c1185,c1186,c1187,c1188,c1189,c1190,c1191,c1192,c1193,c1194,c1195,c1196,c1197,c1198,c1199,c1200,c1201,c1202,c1203,c1204,c1205,c1206,c1207,c1208,c1209,c1210,c1211,c1212,c1213,c1214,c1215,c1216,c1217,c1218,c1219,c1220,c1221,c1222,c1223,c1224,c1225,c1226,c1227,c1228,c1229,c1230,c1231,c1232,c1233,c1234,c1235,c1236,c1237,c1238,c1239,c1240,c1241,c1242,c1243,c1244,c1245,c1246,c1247,c1248,c1249,c1250,c1251,c1252,c1253,c1254,c1255,c1256,c1257,c1258,c1259,c1260,c1261,c1262,c1263,c1264,c1265,c1266,c1267,c1268,c1269,c1270,c1271,c1272,c1273,c1274,c1275,c1276,c1277,c1278,c1279,c1280,c1281,c1282,c1283,c1284,c1285,c1286,c1287,c1288,c1289,c1290,c1291,c1292,c1293,c1294,c1295,c1296,c1297,c1298,c1299,c1300,c1301,c1302,c1303,c1304,c1305,c1306,c1307,c1308,c1309,c1310,c1311,c1312,c1313,c1314,c1315,c1316,c1317,c1318,c1319,c1320,c1321,c1322,c1323,c1324,c1325,c1326,c1327,c1328,c1329,c1330,c1331,c1332,c1333,c1334,c1335,c1336,c1337,c1338,c1339,c1340,c1341,c1342,c1343,c1344,c1345,c1346,c1347,c1348,c1349,c1350,c1351,c1352,c1353,c1354,c1355,c1356,c1357,c1358,c1359,c1360,c1361,c1362,c1363,c1364,c1365,c1366,c1367,c1368,c1369,c1370,c1371,c1372,c1373,c1374,c1375,c1376,c1377,c1378,c1379,c1380,c1381,c1382,c1383,c1384,c1385,c1386,c1387,c1388,c1389,c1390,c1391,c1392,c1393,c1394,c1395,c1396,c1397,c1398,c1399,c1400,c1401,c1402,c1403,c1404,c1405,c1406,c1407,c1408,c1409,c1410,c1411,c1412,c1413,c1414,c1415,c1416,c1417,c1418,c1419,c1420,c1421,c1422,c1423,c1424,c1425,c1426,c1427,c1428,c1429,c1430,c1431,c1432,c1433,c1434,c1435,c1436,c1437,c1438,c1439,c1440,c1441,c1442,c1443,c1444,c1445,c1446,c1447,c1448,c1449,c1450,c1451,c1452,c1453,c1454,c1455,c1456,c1457,c1458,c1459,c1460,c1461,c1462,c1463,c1464,c1465,c1466,c1467,c1468,c1469,c1470,c1471,c1472,c1473,c1474,c1475,c1476,c1477,c1478,c1479,c1480,c1481,c1482,c1483,c1484,c1485,c1486,c1487,c1488,c1489,c1490,c1491,c1492,c1493,c1494,c1495,c1496,c1497,c1498,c1499,c1500,c1501,c1502,c1503,c1504,c1505,c1506,c1507,c1508,c1509,c1510,c1511,c1512,c1513,c1514,c1515,c1516,c1517,c1518,c1519,c1520,c1521,c1522,c1523,c1524,c1525,c1526,c1527,c1528,c1529,c1530,c1531,c1532,c1533,c1534,c1535,c1536,c1537,c1538,c1539,c1540,c1541,c1542,c1543,c1544,c1545,c1546,c1547,c1548,c1549,c1550,c1551,c1552,c1553,c1554,c1555,c1556,c1557,c1558,c1559,c1560,c1561,c1562,c1563,c1564,c1565,c1566,c1567,c1568,c1569,c1570,c1571,c1572,c1573,c1574,c1575,c1576,c1577,c1578,c1579,c1580,c1581,c1582,c1583,c1584,c1585,c1586,c1587,c1588,c1589,c1590,c1591,c1592,c1593,c1594,c1595,c1596,c1597,c1598,c1599,c1600,c1601 ); + +create table dup_key_t(a int, b int, c int) distributed randomly; +create temp table ctas_dump_key_t as select rn, a, b from + (select a, b, row_number() over (partition by a, b order by c) rn from dup_key_t where dup_key_t.a = dup_key_t.b) x; From 9faddca772a45269eca7704c4f2930fad8e89f7d Mon Sep 17 00:00:00 2001 From: "Jianghua.yjh" Date: Wed, 22 Oct 2025 10:42:19 +0800 Subject: [PATCH 184/260] ORCA: skip MVCC system columns for standalone AO tables (#1409) Fix ORCA fallback error when querying AO tables with multiple DISTINCT aggregates: "Invalid system target list found for AO table" AO tables don't support MVCC system columns (xmin, xmax, cmin, cmax). Skip these columns when building metadata for standalone AO tables, but preserve them for partitioned tables to maintain column mapping consistency. --- .../regress/expected/gporca_optimizer.out | 376 ++++++++++-------- .../test/regress/expected/tsrf_optimizer.out | 17 +- .../translate/CTranslatorRelcacheToDXL.cpp | 20 +- src/test/regress/expected/gp_dqa.out | 46 +++ .../regress/expected/gp_dqa_optimizer.out | 62 +++ .../regress/expected/rowhints_optimizer.out | 22 +- src/test/regress/sql/gp_dqa.sql | 11 +- 7 files changed, 359 insertions(+), 195 deletions(-) diff --git a/contrib/pax_storage/src/test/regress/expected/gporca_optimizer.out b/contrib/pax_storage/src/test/regress/expected/gporca_optimizer.out index 2cdb519c35e..c6b03a95ae1 100644 --- a/contrib/pax_storage/src/test/regress/expected/gporca_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/gporca_optimizer.out @@ -2396,9 +2396,9 @@ explain select case when bar1.x2 = bar2.x2 then coalesce((select 1 from orca.foo from orca.bar1 inner join orca.bar2 on (bar1.x2 = bar2.x2) order by bar1.x1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ - Sort (cost=0.00..1765423.13 rows=20 width=8) + Sort (cost=0.00..1765423.00 rows=20 width=8) Sort Key: bar1.x1 - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1765423.13 rows=20 width=8) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1765423.00 rows=20 width=8) -> Hash Join (cost=0.00..862.00 rows=7 width=12) Hash Cond: (bar1.x2 = bar2.x2) -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=7 width=8) @@ -2416,7 +2416,7 @@ from orca.bar1 inner join orca.bar2 on (bar1.x2 = bar2.x2) order by bar1.x1; -> Materialize (cost=0.00..431.00 rows=10 width=4) -> Broadcast Motion 3:3 (slice4; segments: 3) (cost=0.00..431.00 rows=10 width=4) -> Seq Scan on foo (cost=0.00..431.00 rows=4 width=4) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (21 rows) select case when bar1.x2 = bar2.x2 then coalesce((select 1 from orca.foo where bar1.x2 = bar2.x2 and bar1.x2 = random() and foo.x2 = bar2.x2),0) else 1 end as col1, bar1.x1 @@ -9907,15 +9907,15 @@ analyze orca.bm_test; create index bm_test_idx on orca.bm_test using bitmap (i); set optimizer_enable_bitmapscan=on; explain select * from orca.bm_test where i=2 and t='2'; - QUERY PLAN + QUERY PLAN -------------------------------------------------------------------------------- - Gather Motion 1:1 (slice1; segments: 1) (cost=0.00..204.39 rows=2 width=6) - -> Bitmap Heap Scan on bm_test (cost=0.00..204.39 rows=2 width=6) + Gather Motion 1:1 (slice1; segments: 1) (cost=0.00..397.98 rows=2 width=6) + -> Bitmap Heap Scan on bm_test (cost=0.00..397.98 rows=1 width=6) Recheck Cond: (i = 2) Filter: (t = '2'::text) -> Bitmap Index Scan on bm_test_idx (cost=0.00..0.00 rows=0 width=0) Index Cond: (i = 2) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) select * from orca.bm_test where i=2 and t='2'; @@ -10050,10 +10050,10 @@ create index bm_multi_test_idx_part on orca.bm_dyn_test_multilvl_part using bitm analyze orca.bm_dyn_test_multilvl_part; -- print name of parent index explain select * from orca.bm_dyn_test_multilvl_part where year = 2019; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..7.95 rows=53 width=18) - -> Append (cost=0.00..6.89 rows=18 width=18) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..5.13 rows=59 width=18) + -> Append (cost=0.00..4.34 rows=20 width=18) -> Seq Scan on bm_dyn_test_multilvl_part_1_prt_2_2_prt_1_3_prt_usa bm_dyn_test_multilvl_part_1 (cost=0.00..1.01 rows=1 width=44) Filter: (year = 2019) -> Seq Scan on bm_dyn_test_multilvl_part_1_prt_2_2_prt_1_3_prt_other_regions bm_dyn_test_multilvl_part_2 (cost=0.00..1.01 rows=1 width=44) @@ -10290,8 +10290,8 @@ WHERE tq.sym = tt.symbol AND tt.event_ts < tq.end_ts GROUP BY 1 ORDER BY 1 asc ; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------- GroupAggregate (cost=0.00..862.00 rows=1 width=16) Group Key: ((((tt.event_ts / 100000) / 5) * 5)) -> Sort (cost=0.00..862.00 rows=1 width=8) @@ -10306,7 +10306,7 @@ ORDER BY 1 asc ; Number of partitions to scan: 2 (out of 2) -> Hash (cost=431.00..431.00 rows=1 width=24) -> Seq Scan on my_tt_agg_opt tt (cost=0.00..431.00 rows=1 width=24) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (15 rows) -- MPP-25661: IndexScan crashing for qual with reference to outer tuple @@ -10349,8 +10349,8 @@ explain select id, comment from idxscan_outer as o join idxscan_inner as i on o. where ordernum between 10 and 20; QUERY PLAN ------------------------------------------------------------------------------------------------------ - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.01 rows=3 width=9) - -> Nested Loop (cost=0.00..1324033.01 rows=1 width=9) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324032.98 rows=3 width=9) + -> Nested Loop (cost=0.00..1324032.98 rows=1 width=9) Join Filter: (o.id = i.productid) -> Seq Scan on idxscan_outer o (cost=0.00..431.00 rows=3 width=4) -> Materialize (cost=0.00..431.00 rows=1 width=9) @@ -10530,45 +10530,45 @@ select disable_xform('CXformSelect2IndexGet'); EXPLAIN SELECT * FROM btree_test WHERE a in (1, 47); QUERY PLAN ------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..204.38 rows=3 width=8) - -> Bitmap Heap Scan on btree_test (cost=0.00..204.38 rows=1 width=8) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..387.97 rows=3 width=8) + -> Bitmap Heap Scan on btree_test (cost=0.00..387.97 rows=1 width=8) Recheck Cond: (a = ANY ('{1,47}'::integer[])) -> Bitmap Index Scan on btree_test_index (cost=0.00..0.00 rows=0 width=0) Index Cond: (a = ANY ('{1,47}'::integer[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) EXPLAIN SELECT * FROM btree_test WHERE a in ('2', 47); QUERY PLAN ------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..204.38 rows=3 width=8) - -> Bitmap Heap Scan on btree_test (cost=0.00..204.38 rows=1 width=8) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..387.97 rows=3 width=8) + -> Bitmap Heap Scan on btree_test (cost=0.00..387.97 rows=1 width=8) Recheck Cond: (a = ANY ('{2,47}'::integer[])) -> Bitmap Index Scan on btree_test_index (cost=0.00..0.00 rows=0 width=0) Index Cond: (a = ANY ('{2,47}'::integer[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) EXPLAIN SELECT * FROM btree_test WHERE a in ('1', '2'); QUERY PLAN ------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..204.38 rows=3 width=8) - -> Bitmap Heap Scan on btree_test (cost=0.00..204.38 rows=1 width=8) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..387.97 rows=3 width=8) + -> Bitmap Heap Scan on btree_test (cost=0.00..387.97 rows=1 width=8) Recheck Cond: (a = ANY ('{1,2}'::integer[])) -> Bitmap Index Scan on btree_test_index (cost=0.00..0.00 rows=0 width=0) Index Cond: (a = ANY ('{1,2}'::integer[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) EXPLAIN SELECT * FROM btree_test WHERE a in ('1', '2', 47); QUERY PLAN ------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..613.15 rows=4 width=8) - -> Bitmap Heap Scan on btree_test (cost=0.00..613.15 rows=2 width=8) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..387.97 rows=4 width=8) + -> Bitmap Heap Scan on btree_test (cost=0.00..387.97 rows=2 width=8) Recheck Cond: (a = ANY ('{1,2,47}'::integer[])) -> Bitmap Index Scan on btree_test_index (cost=0.00..0.00 rows=0 width=0) Index Cond: (a = ANY ('{1,2,47}'::integer[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) SELECT * FROM btree_test WHERE a in ('1', '2', 47); @@ -10614,56 +10614,56 @@ CREATE INDEX bitmap_index ON bitmap_test USING BITMAP(a); EXPLAIN SELECT * FROM bitmap_test WHERE a in (1); QUERY PLAN --------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..68.82 rows=2 width=4) - -> Bitmap Heap Scan on bitmap_test (cost=0.00..68.82 rows=1 width=4) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..391.30 rows=1 width=4) + -> Bitmap Heap Scan on bitmap_test (cost=0.00..391.30 rows=1 width=4) Recheck Cond: (a = 1) -> Bitmap Index Scan on bitmap_index (cost=0.00..0.00 rows=0 width=0) Index Cond: (a = 1) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) EXPLAIN SELECT * FROM bitmap_test WHERE a in (1, 47); QUERY PLAN --------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..204.38 rows=3 width=4) - -> Bitmap Heap Scan on bitmap_test (cost=0.00..204.38 rows=1 width=4) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..407.97 rows=3 width=4) + -> Bitmap Heap Scan on bitmap_test (cost=0.00..407.97 rows=1 width=4) Recheck Cond: (a = ANY ('{1,47}'::integer[])) -> Bitmap Index Scan on bitmap_index (cost=0.00..0.00 rows=0 width=0) Index Cond: (a = ANY ('{1,47}'::integer[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) EXPLAIN SELECT * FROM bitmap_test WHERE a in ('2', 47); QUERY PLAN --------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..204.38 rows=3 width=4) - -> Bitmap Heap Scan on bitmap_test (cost=0.00..204.38 rows=1 width=4) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..407.97 rows=3 width=4) + -> Bitmap Heap Scan on bitmap_test (cost=0.00..407.97 rows=1 width=4) Recheck Cond: (a = ANY ('{2,47}'::integer[])) -> Bitmap Index Scan on bitmap_index (cost=0.00..0.00 rows=0 width=0) Index Cond: (a = ANY ('{2,47}'::integer[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) EXPLAIN SELECT * FROM bitmap_test WHERE a in ('1', '2'); - QUERY PLAN + QUERY PLAN --------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..204.38 rows=3 width=4) - -> Bitmap Heap Scan on bitmap_test (cost=0.00..204.38 rows=1 width=4) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..407.97 rows=3 width=4) + -> Bitmap Heap Scan on bitmap_test (cost=0.00..407.97 rows=1 width=4) Recheck Cond: (a = ANY ('{1,2}'::integer[])) -> Bitmap Index Scan on bitmap_index (cost=0.00..0.00 rows=0 width=0) Index Cond: (a = ANY ('{1,2}'::integer[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) EXPLAIN SELECT * FROM bitmap_test WHERE a in ('1', '2', 47); - QUERY PLAN + QUERY PLAN --------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..417.97 rows=4 width=4) -> Bitmap Heap Scan on bitmap_test (cost=0.00..417.97 rows=2 width=4) Recheck Cond: (a = ANY ('{1,2,47}'::integer[])) -> Bitmap Index Scan on bitmap_index (cost=0.00..0.00 rows=0 width=0) Index Cond: (a = ANY ('{1,2,47}'::integer[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) -- Test Logging for unsupported features in ORCA @@ -10825,7 +10825,7 @@ explain select * from foo where b in ('1', '2'); Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=12) -> Seq Scan on foo (cost=0.00..431.00 rows=1 width=12) Filter: ((b)::text = ANY ('{1,2}'::text[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (4 rows) set optimizer_enable_ctas = off; @@ -10855,8 +10855,8 @@ set optimizer_force_multistage_agg = off; set optimizer_force_three_stage_scalar_dqa = off; -- end_ignore explain (costs off) select count(*), t2.c from input_tab1 t1 left join input_tab2 t2 on t1.a = t2.c group by t2.c; - QUERY PLAN --------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------ Gather Motion 3:1 (slice1; segments: 3) -> GroupAggregate Group Key: t2.c @@ -10869,7 +10869,7 @@ explain (costs off) select count(*), t2.c from input_tab1 t1 left join input_tab -> Seq Scan on input_tab1 t1 -> Hash -> Seq Scan on input_tab2 t2 - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (13 rows) select count(*), t2.c from input_tab1 t1 left join input_tab2 t2 on t1.a = t2.c group by t2.c; @@ -10923,7 +10923,7 @@ FROM (SELECT * -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=1 width=7) -> Seq Scan on tab_2 (cost=0.00..431.00 rows=1 width=7) -> Seq Scan on tab_3 (cost=0.00..431.00 rows=1 width=8) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (11 rows) SELECT Count(*) @@ -11158,15 +11158,15 @@ INSERT INTO csq_cast_param_inner VALUES EXPLAIN SELECT a FROM csq_cast_param_outer WHERE b in (SELECT CASE WHEN a > 1 THEN d ELSE '42' END FROM csq_cast_param_inner); QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324032.56 rows=2 width=4) - -> Seq Scan on csq_cast_param_outer (cost=0.00..1324032.56 rows=1 width=4) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324032.38 rows=1 width=4) + -> Seq Scan on csq_cast_param_outer (cost=0.00..1324032.38 rows=1 width=4) Filter: (SubPlan 1) SubPlan 1 - -> Result (cost=0.00..431.00 rows=2 width=4) - -> Materialize (cost=0.00..431.00 rows=2 width=4) - -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=2 width=4) + -> Result (cost=0.00..431.00 rows=1 width=4) + -> Materialize (cost=0.00..431.00 rows=1 width=4) + -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=1 width=4) -> Seq Scan on csq_cast_param_inner (cost=0.00..431.00 rows=1 width=4) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (9 rows) SELECT a FROM csq_cast_param_outer WHERE b in (SELECT CASE WHEN a > 1 THEN d ELSE '42' END FROM csq_cast_param_inner); @@ -11182,15 +11182,15 @@ CREATE CAST (myint AS numeric) WITH FUNCTION myint_numeric(myint) AS IMPLICIT; EXPLAIN SELECT a FROM csq_cast_param_outer WHERE b in (SELECT CASE WHEN a > 1 THEN d ELSE '42' END FROM csq_cast_param_inner); QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324032.56 rows=2 width=4) - -> Seq Scan on csq_cast_param_outer (cost=0.00..1324032.56 rows=1 width=4) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324032.38 rows=1 width=4) + -> Seq Scan on csq_cast_param_outer (cost=0.00..1324032.38 rows=1 width=4) Filter: (SubPlan 1) SubPlan 1 - -> Result (cost=0.00..431.00 rows=2 width=4) - -> Materialize (cost=0.00..431.00 rows=2 width=4) - -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=2 width=4) + -> Result (cost=0.00..431.00 rows=1 width=4) + -> Materialize (cost=0.00..431.00 rows=1 width=4) + -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=1 width=4) -> Seq Scan on csq_cast_param_inner (cost=0.00..431.00 rows=1 width=4) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (9 rows) SELECT a FROM csq_cast_param_outer WHERE b in (SELECT CASE WHEN a > 1 THEN d ELSE '42' END FROM csq_cast_param_inner); @@ -11211,19 +11211,19 @@ SELECT a FROM ggg WHERE a IN (NULL, 'x'); EXPLAIN SELECT a FROM ggg WHERE a NOT IN (NULL, ''); QUERY PLAN ------------------------------------------------------------------------------ - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=2) - -> Seq Scan on ggg (cost=0.00..431.00 rows=1 width=2) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=8) + -> Seq Scan on ggg (cost=0.00..431.00 rows=1 width=8) Filter: (a <> ALL ('{NULL,""}'::bpchar[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (4 rows) EXPLAIN SELECT a FROM ggg WHERE a IN (NULL, 'x'); QUERY PLAN ------------------------------------------------------------------------------ - Gather Motion 1:1 (slice1; segments: 1) (cost=0.00..431.00 rows=1 width=2) - -> Seq Scan on ggg (cost=0.00..431.00 rows=1 width=2) + Gather Motion 1:1 (slice1; segments: 1) (cost=0.00..431.00 rows=1 width=8) + -> Seq Scan on ggg (cost=0.00..431.00 rows=1 width=8) Filter: (a = ANY ('{NULL,x}'::bpchar[])) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (4 rows) -- result node with one time filter and filter @@ -11408,28 +11408,39 @@ SELECT * FROM ds_part, non_part2 WHERE ds_part.c = non_part2.e AND non_part2.f = (0 rows) explain analyze SELECT * FROM ds_part, non_part2 WHERE ds_part.c = non_part2.e AND non_part2.f = 10 AND a IN ( SELECT b + 1 FROM non_part1); - QUERY PLAN --------------------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324481.18 rows=1 width=20) - -> Hash Join (cost=0.00..1324481.18 rows=1 width=20) + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324480.95 rows=1 width=20) (actual time=4.000..4.000 rows=0 loops=1) + -> Hash Join (cost=0.00..1324480.95 rows=1 width=20) (actual time=4.000..4.000 rows=0 loops=1) Hash Cond: (ds_part.c = non_part2.e) - -> Dynamic Seq Scan on ds_part (cost=0.00..1324050.11 rows=334 width=12) + -> Dynamic Seq Scan on ds_part (cost=0.00..1324049.89 rows=334 width=12) (actual time=0.000..0.000 rows=0 loops=1) Number of partitions to scan: 6 (out of 6) Filter: ((a = (b + 1)) AND (SubPlan 1)) + Partitions scanned: Avg 1.0 x 3 workers. Max 1 parts (seg0). SubPlan 1 - -> Materialize (cost=0.00..431.00 rows=1 width=4) - -> Broadcast Motion 1:3 (slice2) (cost=0.00..431.00 rows=1 width=4) - -> Limit (cost=0.00..431.00 rows=1 width=4) - -> Gather Motion 3:1 (slice3; segments: 3) (cost=0.00..431.00 rows=1 width=4) - -> Limit (cost=0.00..431.00 rows=1 width=4) - -> Seq Scan on non_part1 (cost=0.00..431.00 rows=34 width=4) - -> Hash (cost=431.00..431.00 rows=1 width=8) - -> Partition Selector (selector id: $0) (cost=0.00..431.00 rows=1 width=8) - -> Broadcast Motion 3:3 (slice4; segments: 3) (cost=0.00..431.00 rows=1 width=8) - -> Seq Scan on non_part2 (cost=0.00..431.00 rows=1 width=8) + -> Materialize (cost=0.00..431.00 rows=1 width=4) (never executed) + -> Broadcast Motion 1:3 (slice2) (cost=0.00..431.00 rows=1 width=4) (never executed) + -> Limit (cost=0.00..431.00 rows=1 width=4) (actual time=4.000..4.000 rows=1 loops=1) + -> Gather Motion 3:1 (slice3; segments: 3) (cost=0.00..431.00 rows=1 width=4) (actual time=4.000..4.000 rows=1 loops=1) + -> Limit (cost=0.00..431.00 rows=1 width=4) (actual time=0.000..0.000 rows=1 loops=1) + -> Seq Scan on non_part1 (cost=0.00..431.00 rows=34 width=4) (actual time=0.000..0.000 rows=1 loops=1) + -> Hash (cost=431.00..431.00 rows=1 width=8) (actual time=4.000..4.000 rows=1 loops=1) + Buckets: 262144 Batches: 1 Memory Usage: 2049kB + -> Partition Selector (selector id: $0) (cost=0.00..431.00 rows=1 width=8) (actual time=4.000..4.000 rows=1 loops=1) + -> Broadcast Motion 3:3 (slice4; segments: 3) (cost=0.00..431.00 rows=1 width=8) (actual time=4.000..4.000 rows=1 loops=1) + -> Seq Scan on non_part2 (cost=0.00..431.00 rows=1 width=8) (actual time=0.000..0.000 rows=1 loops=1) Filter: (f = 10) - Optimizer: Pivotal Optimizer (GPORCA) -(19 rows) + Rows Removed by Filter: 24 + Planning Time: 24.393 ms + (slice0) Executor memory: 81K bytes. + (slice1) Executor memory: 2231K bytes avg x 3x(0) workers, 2231K bytes max (seg0). Work_mem: 2049K bytes max. + (slice2) Executor memory: 20K bytes (entry db). + (slice3) Executor memory: 118K bytes avg x 3x(0) workers, 118K bytes max (seg0). + (slice4) Executor memory: 115K bytes avg x 3x(0) workers, 115K bytes max (seg0). + Memory used: 128000kB + Optimizer: GPORCA + Execution Time: 2.262 ms +(30 rows) SELECT *, a IN ( SELECT b + 1 FROM non_part1) FROM ds_part, non_part2 WHERE ds_part.c = non_part2.e AND non_part2.f = 10 AND a IN ( SELECT b FROM non_part1); a | b | c | e | f | ?column? @@ -11619,12 +11630,12 @@ update gp_distribution_policy set numsegments = numsegments-1 where localoid = ' reset allow_system_table_mods; -- populate the tables on this smaller cluster explain insert into gpexp_hash select i, i from generate_series(1,50) i; - QUERY PLAN --------------------------------------------------------------------------------------------- - Insert on gpexp_hash (cost=0.00..30.00 rows=500 width=8) - -> Redistribute Motion 1:2 (slice1; segments: 1) (cost=0.00..30.00 rows=1000 width=8) + QUERY PLAN +----------------------------------------------------------------------------------------- + Insert on gpexp_hash (cost=0.00..1.25 rows=0 width=0) + -> Redistribute Motion 1:2 (slice1; segments: 1) (cost=0.00..1.25 rows=25 width=8) Hash Key: i.i - -> Function Scan on generate_series i (cost=0.00..10.00 rows=500 width=8) + -> Function Scan on generate_series i (cost=0.00..0.50 rows=50 width=8) Optimizer: Postgres query optimizer (5 rows) @@ -11692,14 +11703,14 @@ select b, count(*) from gpexp_hash group by b order by b; explain update gpexp_rand set b=(select b from gpexp_hash where gpexp_rand.a = gpexp_hash.a); QUERY PLAN ---------------------------------------------------------------------------------------------------------- - Update on gpexp_rand (cost=0.00..216.00 rows=25 width=18) - -> Seq Scan on gpexp_rand (cost=0.00..215.00 rows=25 width=18) + Update on gpexp_rand (cost=0.00..70.00 rows=0 width=0) + -> Seq Scan on gpexp_rand (cost=0.00..70.00 rows=25 width=46) SubPlan 1 - -> Result (cost=0.00..4.25 rows=50 width=4) + -> Result (cost=0.00..2.75 rows=50 width=4) Filter: (gpexp_rand.a = gpexp_hash.a) - -> Materialize (cost=0.00..3.75 rows=50 width=8) - -> Broadcast Motion 2:2 (slice1; segments: 2) (cost=0.00..3.50 rows=25 width=8) - -> Seq Scan on gpexp_hash (cost=0.00..2.50 rows=25 width=8) + -> Materialize (cost=0.00..2.25 rows=50 width=8) + -> Broadcast Motion 2:2 (slice1; segments: 2) (cost=0.00..2.00 rows=50 width=8) + -> Seq Scan on gpexp_hash (cost=0.00..1.25 rows=25 width=8) Optimizer: Postgres query optimizer (9 rows) @@ -11725,7 +11736,7 @@ delete from gpexp_repl where b >= 20; explain insert into gpexp_repl values (20, 20); QUERY PLAN -------------------------------------------------------- - Insert on gpexp_repl (cost=0.00..0.01 rows=1 width=8) + Insert on gpexp_repl (cost=0.00..0.01 rows=0 width=0) -> Result (cost=0.00..0.01 rows=1 width=8) Optimizer: Postgres query optimizer (3 rows) @@ -11791,21 +11802,21 @@ analyze part2_1_prt_2; -- the plan should contain a 2 stage limit. If we incorrectly estimate that the -- relation is empty, we would end up choosing a single stage limit. explain select * from part1, part2 where part1.b = part2.b limit 5; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ - Limit (cost=0.00..862.14 rows=5 width=16) + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------- + Limit (cost=0.00..862.13 rows=5 width=16) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..862.13 rows=5 width=16) -> Limit (cost=0.00..862.13 rows=2 width=16) - -> Hash Join (cost=0.00..862.13 rows=334 width=16) + -> Hash Join (cost=0.00..862.13 rows=333 width=16) Hash Cond: (part1.b = part2.b) - -> Dynamic Seq Scan on part1 (cost=0.00..431.01 rows=334 width=8) + -> Dynamic Seq Scan on part1 (cost=0.00..431.01 rows=333 width=8) Number of partitions to scan: 4 (out of 4) - -> Hash (cost=431.02..431.02 rows=100 width=8) - -> Partition Selector (selector id: $0) (cost=0.00..431.02 rows=100 width=8) - -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.02 rows=100 width=8) - -> Dynamic Seq Scan on part2 (cost=0.00..431.00 rows=34 width=8) + -> Hash (cost=431.02..431.02 rows=97 width=8) + -> Partition Selector (selector id: $0) (cost=0.00..431.02 rows=97 width=8) + -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.02 rows=97 width=8) + -> Dynamic Seq Scan on part2 (cost=0.00..431.00 rows=33 width=8) Number of partitions to scan: 4 (out of 4) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (13 rows) -- test opfamily handling in ORCA @@ -11857,14 +11868,14 @@ ANALYZE btab_old_hash; EXPLAIN SELECT a, b FROM atab_old_hash INNER JOIN btab_old_hash ON a |=| b; QUERY PLAN --------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice2; segments: 3) (cost=0.00..1324032.87 rows=5 width=8) - -> Nested Loop (cost=0.00..1324032.87 rows=2 width=8) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324032.86 rows=5 width=8) + -> Nested Loop (cost=0.00..1324032.86 rows=2 width=8) Join Filter: (atab_old_hash.a |=| btab_old_hash.b) -> Seq Scan on btab_old_hash (cost=0.00..431.00 rows=2 width=4) -> Materialize (cost=0.00..431.00 rows=3 width=4) - -> Broadcast Motion 3:3 (slice1; segments: 3) (cost=0.00..431.00 rows=3 width=4) + -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=3 width=4) -> Seq Scan on atab_old_hash (cost=0.00..431.00 rows=1 width=4) - Optimizer: Pivotal Optimizer (GPORCA) version 3.93.0 + Optimizer: GPORCA (8 rows) SELECT a, b FROM atab_old_hash INNER JOIN btab_old_hash ON a |=| b; @@ -11950,20 +11961,37 @@ select disable_xform('CXformFullOuterJoin2HashJoin'); -- fallback reason: Invalid system target list found for AO table EXPLAIN SELECT a, b FROM atab_old_hash FULL JOIN btab_old_hash ON a |=| b; - QUERY PLAN ----------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=1.06..2.31 rows=6 width=8) - -> Hash Full Join (cost=1.06..2.23 rows=2 width=8) - Hash Cond: (atab_old_hash.a |=| btab_old_hash.b) - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..1.03 rows=1 width=4) - Hash Key: atab_old_hash.a - -> Seq Scan on atab_old_hash (cost=0.00..1.01 rows=1 width=4) - -> Hash (cost=1.04..1.04 rows=1 width=4) - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..1.04 rows=1 width=4) - Hash Key: btab_old_hash.b - -> Seq Scan on btab_old_hash (cost=0.00..1.01 rows=1 width=4) - Optimizer: Postgres query optimizer -(11 rows) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..2586.00 rows=10 width=8) + -> Result (cost=0.00..2586.00 rows=4 width=8) + -> Sequence (cost=0.00..2586.00 rows=4 width=8) + -> Shared Scan (share slice:id 1:2) (cost=0.00..431.00 rows=2 width=1) + -> Seq Scan on btab_old_hash (cost=0.00..431.00 rows=2 width=22) + -> Sequence (cost=0.00..2155.00 rows=4 width=8) + -> Shared Scan (share slice:id 1:3) (cost=0.00..431.00 rows=1 width=1) + -> Seq Scan on atab_old_hash (cost=0.00..431.00 rows=1 width=22) + -> Append (cost=0.00..1724.00 rows=4 width=8) + -> Hash Left Join (cost=0.00..862.00 rows=3 width=8) + Hash Cond: (share2_ref2.b |=| share3_ref2.a) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=2 width=4) + Hash Key: share2_ref2.b + -> Shared Scan (share slice:id 2:2) (cost=0.00..431.00 rows=2 width=4) + -> Hash (cost=431.00..431.00 rows=1 width=4) + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.00 rows=1 width=4) + Hash Key: share3_ref2.a + -> Shared Scan (share slice:id 3:3) (cost=0.00..431.00 rows=1 width=4) + -> Hash Anti Join (cost=0.00..862.00 rows=1 width=4) + Hash Cond: (share3_ref3.a |=| share2_ref3.b) + -> Redistribute Motion 3:3 (slice4; segments: 3) (cost=0.00..431.00 rows=1 width=4) + Hash Key: share3_ref3.a + -> Shared Scan (share slice:id 4:3) (cost=0.00..431.00 rows=1 width=4) + -> Hash (cost=431.00..431.00 rows=2 width=4) + -> Redistribute Motion 3:3 (slice5; segments: 3) (cost=0.00..431.00 rows=2 width=4) + Hash Key: share2_ref3.b + -> Shared Scan (share slice:id 5:2) (cost=0.00..431.00 rows=2 width=4) + Optimizer: GPORCA +(28 rows) SELECT a, b FROM atab_old_hash FULL JOIN btab_old_hash ON a |=| b; a | b @@ -12019,9 +12047,9 @@ select disable_xform('CXformImplementInnerJoin'); EXPLAIN SELECT 1 FROM foo1 left join foo2 on foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); QUERY PLAN --------------------------------------------------------------------------------------------------------------------- - Result (cost=0.00..1721310.84 rows=2 width=4) - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1721310.84 rows=2 width=1) - -> Nested Loop Left Join (cost=0.00..1721310.84 rows=1 width=1) + Result (cost=0.00..1721310.83 rows=2 width=4) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1721310.83 rows=2 width=1) + -> Nested Loop Left Join (cost=0.00..1721310.83 rows=1 width=1) Join Filter: (foo1.a = foo2.a) -> Seq Scan on foo1 (cost=0.00..431.00 rows=1 width=4) -> Materialize (cost=0.00..818.97 rows=1 width=4) @@ -12034,7 +12062,7 @@ EXPLAIN SELECT 1 FROM foo1 left join foo2 on foo1.a = foo2.a AND foo2.c = 3 AND -> Hash (cost=431.00..431.00 rows=2 width=4) -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=2 width=4) -> Seq Scan on foo3 (cost=0.00..431.00 rows=1 width=4) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (16 rows) SELECT 1 FROM foo1 left join foo2 on foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); @@ -12078,8 +12106,8 @@ SELECT DISTINCT L1.c, L1.lid FROM t55 L1 CROSS JOIN META WHERE L1.lid = int4in(textout(meta.load_id)); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entry. - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------- Result (cost=0.00..431.09 rows=1 width=8) Output: c, lid -> Redistribute Motion 3:3 (slice1; segments: 3) (cost=0.00..431.07 rows=1 width=8) @@ -12093,15 +12121,15 @@ NOTICE: Table doesn't have 'DISTRIBUTED BY' clause. Creating a NULL policy entr -> Hash Join (cost=0.00..431.07 rows=1 width=8) Output: c, lid Hash Cond: (l1.lid = int4in(textout(('99'::text)))) - -> Seq Scan on orca.t55 l1 (cost=0.00..431.01 rows=334 width=8) + -> Seq Scan on orca.t55 l1 (cost=0.00..431.00 rows=334 width=8) Output: c, lid -> Hash (cost=0.00..0.00 rows=1 width=8) Output: ('2020-01-01'::text), ('99'::text) -> Result (cost=0.00..0.00 rows=1 width=1) Output: '2020-01-01'::text, '99'::text - Optimizer: Pivotal Optimizer (GPORCA) - Settings: optimizer_enable_coordinator_only_queries = 'on', optimizer_enable_master_only_queries = 'on', optimizer_join_order = 'query', optimizer_segments = '3' -(25 rows) + Settings: enable_incremental_sort = 'on', optimizer = 'on', optimizer_enable_dynamicbitmapscan = 'on', optimizer_join_order = 'query' + Optimizer: GPORCA +(21 rows) CREATE TABLE TP AS WITH META AS (SELECT '2020-01-01' AS VALID_DT, '99' AS LOAD_ID) @@ -12131,8 +12159,8 @@ explain select * from lossycastrangepart where b::int = 10; Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=16) -> Dynamic Seq Scan on lossycastrangepart (cost=0.00..431.00 rows=1 width=16) Number of partitions to scan: 4 (out of 4) - Filter: (int4(b) = 10) - Optimizer: Pivotal Optimizer (GPORCA) + Filter: ((b)::integer = 10) + Optimizer: GPORCA (5 rows) select * from lossycastrangepart where b::int = 10; @@ -12148,8 +12176,8 @@ explain select * from lossycastrangepart where b::int = 11; Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=16) -> Dynamic Seq Scan on lossycastrangepart (cost=0.00..431.00 rows=1 width=16) Number of partitions to scan: 4 (out of 4) - Filter: (int4(b) = 11) - Optimizer: Pivotal Optimizer (GPORCA) + Filter: ((b)::integer = 11) + Optimizer: GPORCA (5 rows) select * from lossycastrangepart where b::int = 11; @@ -12165,8 +12193,8 @@ explain select * from lossycastrangepart where b::int < 10; Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=16) -> Dynamic Seq Scan on lossycastrangepart (cost=0.00..431.00 rows=1 width=16) Number of partitions to scan: 4 (out of 4) - Filter: (int4(b) < 10) - Optimizer: Pivotal Optimizer (GPORCA) + Filter: ((b)::integer < 10) + Optimizer: GPORCA (5 rows) select * from lossycastrangepart where b::int < 10; @@ -12336,12 +12364,12 @@ where out.b in (select coalesce(tcorr2.a, 99) from tcorr1 left outer join tcorr2 on tcorr1.a=tcorr2.a+out.a); QUERY PLAN -------------------------------------------------------------------------------------------------- - Result (cost=0.00..1356692031.36 rows=1 width=8) + Result (cost=0.00..1356692012.89 rows=1 width=8) Filter: (SubPlan 1) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=8) -> Seq Scan on tcorr1 "out" (cost=0.00..431.00 rows=1 width=8) SubPlan 1 - -> Nested Loop Left Join (cost=0.00..1324032.56 rows=2 width=4) + -> Nested Loop Left Join (cost=0.00..1324032.54 rows=2 width=4) Join Filter: (tcorr1.a = (tcorr2.a + "out".a)) -> Materialize (cost=0.00..431.00 rows=1 width=4) -> Gather Motion 3:1 (slice3; segments: 3) (cost=0.00..431.00 rows=1 width=4) @@ -12370,7 +12398,7 @@ where out.b in (select max(tcorr2.b + out.b - 1) where tcorr2.a=out.a); QUERY PLAN -------------------------------------------------------------------------------------------------------- - Result (cost=0.00..1324032.63 rows=1 width=8) + Result (cost=0.00..1324032.61 rows=1 width=8) Filter: (SubPlan 1) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=8) -> Seq Scan on tcorr1 "out" (cost=0.00..431.00 rows=1 width=8) @@ -12405,12 +12433,12 @@ where out.b in (select coalesce(tcorr2_d.c, 99) group by a) tcorr2_d on tcorr1.a=tcorr2_d.a); QUERY PLAN -------------------------------------------------------------------------------------------------------------------- - Result (cost=0.00..1356692228.44 rows=1 width=8) + Result (cost=0.00..1356692209.98 rows=1 width=8) Filter: (SubPlan 1) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=8) -> Seq Scan on tcorr1 "out" (cost=0.00..431.00 rows=1 width=8) SubPlan 1 - -> Nested Loop Left Join (cost=0.00..1324032.75 rows=3 width=8) + -> Nested Loop Left Join (cost=0.00..1324032.74 rows=3 width=8) Join Filter: (tcorr1.a = tcorr2.a) -> Materialize (cost=0.00..431.00 rows=1 width=4) -> Gather Motion 3:1 (slice3; segments: 3) (cost=0.00..431.00 rows=1 width=4) @@ -12424,7 +12452,7 @@ where out.b in (select coalesce(tcorr2_d.c, 99) -> Materialize (cost=0.00..431.00 rows=1 width=8) -> Gather Motion 3:1 (slice2; segments: 3) (cost=0.00..431.00 rows=1 width=8) -> Seq Scan on tcorr2 (cost=0.00..431.00 rows=1 width=8) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (20 rows) -- expect 1 row @@ -12458,12 +12486,12 @@ where out.b in (select coalesce(tcorr2.a, 99) from tcorr1 left outer join tcorr2 on tcorr1.a=tcorr2.a+out.a); QUERY PLAN -------------------------------------------------------------------------------------------------- - Result (cost=0.00..1356692031.36 rows=1 width=8) + Result (cost=0.00..1356692012.89 rows=1 width=8) Filter: (SubPlan 1) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=8) -> Seq Scan on tcorr1 "out" (cost=0.00..431.00 rows=1 width=8) SubPlan 1 - -> Nested Loop Left Join (cost=0.00..1324032.56 rows=2 width=4) + -> Nested Loop Left Join (cost=0.00..1324032.54 rows=2 width=4) Join Filter: (tcorr1.a = (tcorr2.a + "out".a)) -> Materialize (cost=0.00..431.00 rows=1 width=4) -> Gather Motion 3:1 (slice3; segments: 3) (cost=0.00..431.00 rows=1 width=4) @@ -12471,7 +12499,7 @@ where out.b in (select coalesce(tcorr2.a, 99) -> Materialize (cost=0.00..431.00 rows=1 width=4) -> Gather Motion 3:1 (slice2; segments: 3) (cost=0.00..431.00 rows=1 width=4) -> Seq Scan on tcorr2 (cost=0.00..431.00 rows=1 width=4) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (14 rows) -- expect 1 row @@ -12492,7 +12520,7 @@ where out.b in (select max(tcorr2.b + out.b - 1) where tcorr2.a=out.a); QUERY PLAN -------------------------------------------------------------------------------------------------------- - Result (cost=0.00..1324032.63 rows=1 width=8) + Result (cost=0.00..1324032.61 rows=1 width=8) Filter: (SubPlan 1) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=8) -> Seq Scan on tcorr1 "out" (cost=0.00..431.00 rows=1 width=8) @@ -12527,12 +12555,12 @@ where out.b in (select coalesce(tcorr2_d.c, 99) group by a) tcorr2_d on tcorr1.a=tcorr2_d.a); QUERY PLAN -------------------------------------------------------------------------------------------------------------------- - Result (cost=0.00..1356692228.44 rows=1 width=8) + Result (cost=0.00..1356692209.98 rows=1 width=8) Filter: (SubPlan 1) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..431.00 rows=1 width=8) -> Seq Scan on tcorr1 "out" (cost=0.00..431.00 rows=1 width=8) SubPlan 1 - -> Nested Loop Left Join (cost=0.00..1324032.75 rows=3 width=8) + -> Nested Loop Left Join (cost=0.00..1324032.74 rows=3 width=8) Join Filter: (tcorr1.a = tcorr2.a) -> Materialize (cost=0.00..431.00 rows=1 width=4) -> Gather Motion 3:1 (slice3; segments: 3) (cost=0.00..431.00 rows=1 width=4) @@ -12546,7 +12574,7 @@ where out.b in (select coalesce(tcorr2_d.c, 99) -> Materialize (cost=0.00..431.00 rows=1 width=8) -> Gather Motion 3:1 (slice2; segments: 3) (cost=0.00..431.00 rows=1 width=8) -> Seq Scan on tcorr2 (cost=0.00..431.00 rows=1 width=8) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (20 rows) -- expect 1 row @@ -13738,8 +13766,8 @@ set enable_hashjoin=off; explain select r.a, r.b, r.c, l.c from left_outer_index_nl_foo r left outer join left_outer_index_nl_bar l on r.b=l.b; QUERY PLAN --------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.80 rows=7 width=16) - -> Nested Loop Left Join (cost=0.00..1324033.80 rows=3 width=16) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.78 rows=7 width=16) + -> Nested Loop Left Join (cost=0.00..1324033.78 rows=3 width=16) Join Filter: (r.b = l.b) -> Seq Scan on left_outer_index_nl_foo r (cost=0.00..431.00 rows=2 width=12) -> Materialize (cost=0.00..431.00 rows=5 width=8) @@ -13772,8 +13800,8 @@ analyze left_outer_index_nl_bar_hash; explain select r.a, r.b, r.c, l.c from left_outer_index_nl_foo_hash r left outer join left_outer_index_nl_bar l on r.b=l.b; QUERY PLAN --------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.77 rows=7 width=14) - -> Nested Loop Left Join (cost=0.00..1324033.77 rows=3 width=14) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.75 rows=7 width=14) + -> Nested Loop Left Join (cost=0.00..1324033.75 rows=3 width=14) Join Filter: (r.b = l.b) -> Seq Scan on left_outer_index_nl_foo_hash r (cost=0.00..431.00 rows=2 width=10) -> Materialize (cost=0.00..431.00 rows=5 width=8) @@ -13793,10 +13821,10 @@ select r.a, r.b, r.c, l.c from left_outer_index_nl_foo_hash r left outer join le --- verify that a motion is introduced such that joins on each segment are internal to that segment (distributed by join key) explain select r.a, r.b, r.c, l.c from left_outer_index_nl_foo_hash r left outer join left_outer_index_nl_bar_hash l on r.b=l.b; - QUERY PLAN ------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.54 rows=7 width=12) - -> Nested Loop Left Join (cost=0.00..1324033.54 rows=3 width=12) + QUERY PLAN +-------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.52 rows=7 width=12) + -> Nested Loop Left Join (cost=0.00..1324033.52 rows=3 width=12) Join Filter: (r.b = l.b) -> Seq Scan on left_outer_index_nl_foo_hash r (cost=0.00..431.00 rows=2 width=10) -> Materialize (cost=0.00..431.00 rows=5 width=6) @@ -13825,8 +13853,8 @@ analyze left_outer_index_nl_bar_repl; explain select r.a, r.b, r.c, l.c from left_outer_index_nl_foo_repl r left outer join left_outer_index_nl_bar_repl l on r.b=l.b; QUERY PLAN ---------------------------------------------------------------------------------------------- - Gather Motion 1:1 (slice1; segments: 1) (cost=0.00..1324035.09 rows=7 width=16) - -> Nested Loop Left Join (cost=0.00..1324035.09 rows=21 width=16) + Gather Motion 1:1 (slice1; segments: 1) (cost=0.00..1324035.01 rows=7 width=16) + -> Nested Loop Left Join (cost=0.00..1324035.01 rows=21 width=16) Join Filter: (r.b = l.b) -> Seq Scan on left_outer_index_nl_foo_repl r (cost=0.00..431.00 rows=12 width=12) -> Seq Scan on left_outer_index_nl_bar_repl l (cost=0.00..431.00 rows=15 width=8) @@ -13844,10 +13872,10 @@ select r.a, r.b, r.c, l.c from left_outer_index_nl_foo_repl r left outer join le --- outer side replicated, inner side hashed can have interesting cases (gather + join on one segment of inner side and redistribute + join + gather are both valid) explain select r.a, r.b, r.c, l.c from left_outer_index_nl_foo_repl r left outer join left_outer_index_nl_bar_hash l on r.b=l.b; - QUERY PLAN ------------------------------------------------------------------------------------------------------- - Gather Motion 1:1 (slice1; segments: 1) (cost=0.00..1324035.41 rows=7 width=14) - -> Nested Loop Left Join (cost=0.00..1324035.41 rows=21 width=14) + QUERY PLAN +-------------------------------------------------------------------------------------------------------- + Gather Motion 1:1 (slice1; segments: 1) (cost=0.00..1324035.37 rows=7 width=14) + -> Nested Loop Left Join (cost=0.00..1324035.37 rows=21 width=14) Join Filter: (r.b = l.b) -> Seq Scan on left_outer_index_nl_foo_repl r (cost=0.00..431.00 rows=12 width=12) -> Materialize (cost=0.00..431.00 rows=15 width=6) @@ -13883,8 +13911,8 @@ ANALYZE tt2; EXPLAIN SELECT b FROM tt1 WHERE NOT EXISTS (SELECT * FROM tt2 WHERE (tt2.d = tt1.b) IS DISTINCT FROM false); QUERY PLAN --------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.03 rows=4 width=4) - -> Nested Loop Anti Join (cost=0.00..1324033.03 rows=2 width=4) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.01 rows=4 width=4) + -> Nested Loop Anti Join (cost=0.00..1324033.01 rows=2 width=4) Join Filter: ((tt2.d = tt1.b) IS DISTINCT FROM false) -> Seq Scan on tt1 (cost=0.00..431.00 rows=2 width=4) -> Materialize (cost=0.00..431.00 rows=4 width=4) @@ -13901,8 +13929,8 @@ SELECT b FROM tt1 WHERE NOT EXISTS (SELECT * FROM tt2 WHERE (tt2.d = tt1.b) IS D EXPLAIN SELECT b FROM tt1 WHERE NOT EXISTS (SELECT * FROM tt2 WHERE (tt2.d = tt1.b) IS DISTINCT FROM true); QUERY PLAN --------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.03 rows=4 width=4) - -> Nested Loop Anti Join (cost=0.00..1324033.03 rows=2 width=4) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.01 rows=4 width=4) + -> Nested Loop Anti Join (cost=0.00..1324033.01 rows=2 width=4) Join Filter: ((tt2.d = tt1.b) IS DISTINCT FROM true) -> Seq Scan on tt1 (cost=0.00..431.00 rows=2 width=4) -> Materialize (cost=0.00..431.00 rows=4 width=4) @@ -13919,8 +13947,8 @@ SELECT b FROM tt1 WHERE NOT EXISTS (SELECT * FROM tt2 WHERE (tt2.d = tt1.b) IS D EXPLAIN SELECT b FROM tt1 WHERE NOT EXISTS (SELECT * FROM tt2 WHERE (tt1.b = tt2.d) IS DISTINCT FROM NULL); QUERY PLAN --------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.03 rows=4 width=4) - -> Nested Loop Anti Join (cost=0.00..1324033.03 rows=2 width=4) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324033.01 rows=4 width=4) + -> Nested Loop Anti Join (cost=0.00..1324033.01 rows=2 width=4) Join Filter: (NOT ((tt1.b = tt2.d) IS NULL)) -> Seq Scan on tt1 (cost=0.00..431.00 rows=2 width=4) -> Materialize (cost=0.00..431.00 rows=4 width=4) @@ -14753,8 +14781,8 @@ analyze ts_tbl; explain select * from ts_tbl where ts = to_timestamp('99991231'::text, 'YYYYMMDD'::text); QUERY PLAN ------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..6.01 rows=40 width=8) - -> Index Only Scan using ts_tbl_idx on ts_tbl (cost=0.00..6.00 rows=14 width=8) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..6.01 rows=1 width=8) + -> Index Only Scan using ts_tbl_idx on ts_tbl (cost=0.00..6.01 rows=1 width=8) Index Cond: (ts = 'Fri Dec 31 00:00:00 9999 PST'::timestamp with time zone) Optimizer: Pivotal Optimizer (GPORCA) (4 rows) diff --git a/contrib/pax_storage/src/test/regress/expected/tsrf_optimizer.out b/contrib/pax_storage/src/test/regress/expected/tsrf_optimizer.out index 187b086d4cb..90a3a352a98 100644 --- a/contrib/pax_storage/src/test/regress/expected/tsrf_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/tsrf_optimizer.out @@ -88,15 +88,16 @@ ANALYZE few; -- SRF with a provably-dummy relation explain (verbose, costs off) SELECT unnest(ARRAY[1, 2]) FROM few WHERE false; - QUERY PLAN --------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------- ProjectSet Output: unnest('{1,2}'::integer[]) -> Result - Output: NULL::integer, NULL::tid, NULL::xid, NULL::cid, NULL::xid, NULL::cid, NULL::oid, NULL::integer, NULL::oid + Output: NULL::integer, NULL::tid, NULL::oid, NULL::integer, NULL::oid One-Time Filter: false - Optimizer: Pivotal Optimizer (GPORCA) -(6 rows) + Settings: optimizer = 'on' + Optimizer: GPORCA +(7 rows) SELECT unnest(ARRAY[1, 2]) FROM few WHERE false; unnest @@ -117,12 +118,12 @@ SELECT * FROM few f1, -> ProjectSet Output: unnest('{1,2}'::integer[]) -> Result - Output: NULL::integer, NULL::tid, NULL::xid, NULL::cid, NULL::xid, NULL::cid, NULL::oid, NULL::integer, NULL::oid + Output: NULL::integer, NULL::tid, NULL::oid, NULL::integer, NULL::oid One-Time Filter: false -> Seq Scan on public.few f1 Output: id, dataa, datab - Settings: enable_parallel = 'off', optimizer = 'on' - Optimizer: Pivotal Optimizer (GPORCA) + Settings: optimizer = 'on' + Optimizer: GPORCA (14 rows) SELECT * FROM few f1, diff --git a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp index 469d69fb60f..d8e1da28f0d 100644 --- a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp +++ b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp @@ -862,13 +862,31 @@ CTranslatorRelcacheToDXL::RetrieveRelDistributionOpFamilies(CMemoryPool *mp, void CTranslatorRelcacheToDXL::AddSystemColumns(CMemoryPool *mp, CMDColumnArray *mdcol_array, - Relation /*rel*/) + Relation rel) { + // Get storage type to determine which system columns are supported + IMDRelation::Erelstoragetype rel_storage_type = RetrieveRelStorageType(rel); + BOOL is_standalone_ao_table = ((rel_storage_type == IMDRelation::ErelstorageAppendOnlyRows || + rel_storage_type == IMDRelation::ErelstorageAppendOnlyCols || + rel_storage_type == IMDRelation::ErelstoragePAX)) && + rel->rd_rel->relkind != RELKIND_PARTITIONED_TABLE && + !rel->rd_rel->relispartition; + for (INT i = SelfItemPointerAttributeNumber; i > FirstLowInvalidHeapAttributeNumber; i--) { AttrNumber attno = AttrNumber(i); GPOS_ASSERT(0 != attno); + // AO tables don't support MVCC-related system columns (xmin, cmin, xmax, cmax) + // Skip these columns for AO tables to avoid "Invalid system target list" errors + if (is_standalone_ao_table && + (attno == MinTransactionIdAttributeNumber || // xmin (-2) + attno == MinCommandIdAttributeNumber || // cmin (-3) + attno == MaxTransactionIdAttributeNumber || // xmax (-4) + attno == MaxCommandIdAttributeNumber)) // cmax (-5) + { + continue; + } const FormData_pg_attribute *att_tup = SystemAttributeDefinition(attno); diff --git a/src/test/regress/expected/gp_dqa.out b/src/test/regress/expected/gp_dqa.out index e5d42dad5a7..d53a1794a44 100644 --- a/src/test/regress/expected/gp_dqa.out +++ b/src/test/regress/expected/gp_dqa.out @@ -3067,5 +3067,51 @@ select count(distinct a), count(distinct b) from dqa_f4 group by c; 1 | 1 (3 rows) +-- Test AO table dqa with multiple distinct aggs +create table dqa_f5(a int, b int, c int) using ao_column; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +insert into dqa_f5 values(null, null, null); +insert into dqa_f5 values(1, 1, 1); +insert into dqa_f5 values(2, 2, 2); +explain (verbose on, costs off) select count(distinct a), count(distinct b) from dqa_f5 group by c; + QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Finalize HashAggregate + Output: count(a), count(b), c + Group Key: dqa_f5.c + -> Gather Motion 3:1 (slice1; segments: 3) + Output: c, (PARTIAL count(a)), (PARTIAL count(b)) + -> Partial HashAggregate + Output: c, PARTIAL count(a), PARTIAL count(b) + Group Key: dqa_f5.c + -> HashAggregate + Output: c, a, b, (AggExprId) + Group Key: (AggExprId), dqa_f5.a, dqa_f5.b, dqa_f5.c + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: c, a, b, (AggExprId) + Hash Key: c, a, b, (AggExprId) + -> Streaming HashAggregate + Output: c, a, b, (AggExprId) + Group Key: AggExprId, dqa_f5.a, dqa_f5.b, dqa_f5.c + -> TupleSplit + Output: c, a, b, AggExprId + Split by Col: (dqa_f5.a), (dqa_f5.b) + Group Key: dqa_f5.c + -> Seq Scan on public.dqa_f5 + Output: c, a, b + Settings: enable_groupagg = 'off', enable_hashagg = 'on', gp_motion_cost_per_row = '2', optimizer = 'off' + Optimizer: Postgres query optimizer +(25 rows) + +select count(distinct a), count(distinct b) from dqa_f5 group by c; + count | count +-------+------- + 0 | 0 + 1 | 1 + 1 | 1 +(3 rows) + reset optimizer_enable_multiple_distinct_aggs; drop table dqa_f4; +drop table dqa_f5; diff --git a/src/test/regress/expected/gp_dqa_optimizer.out b/src/test/regress/expected/gp_dqa_optimizer.out index 278b719e933..5307bd0f909 100644 --- a/src/test/regress/expected/gp_dqa_optimizer.out +++ b/src/test/regress/expected/gp_dqa_optimizer.out @@ -3304,5 +3304,67 @@ select count(distinct a), count(distinct b) from dqa_f4 group by c; 0 | 0 (3 rows) +-- Test AO table dqa with multiple distinct aggs +create table dqa_f5(a int, b int, c int) using ao_column; +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +insert into dqa_f5 values(null, null, null); +insert into dqa_f5 values(1, 1, 1); +insert into dqa_f5 values(2, 2, 2); +explain (verbose on, costs off) select count(distinct a), count(distinct b) from dqa_f5 group by c; + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) + Output: (count(DISTINCT share0_ref3.a)), (count(DISTINCT share0_ref2.b)) + -> Sequence + Output: (count(DISTINCT share0_ref3.a)), (count(DISTINCT share0_ref2.b)) + -> Shared Scan (share slice:id 1:0) + Output: share0_ref1.a, share0_ref1.b, share0_ref1.c, share0_ref1.ctid, share0_ref1.tableoid, share0_ref1.gp_segment_id, share0_ref1.gp_foreign_server + -> Seq Scan on public.dqa_f5 + Output: dqa_f5.a, dqa_f5.b, dqa_f5.c, dqa_f5.ctid, dqa_f5.tableoid, dqa_f5.gp_segment_id, dqa_f5.gp_foreign_server + -> Hash Join + Output: (count(DISTINCT share0_ref3.a)), (count(DISTINCT share0_ref2.b)) + Hash Cond: (NOT (share0_ref3.c IS DISTINCT FROM share0_ref2.c)) + -> GroupAggregate + Output: count(DISTINCT share0_ref3.a), share0_ref3.c + Group Key: share0_ref3.c + -> Sort + Output: share0_ref3.a, share0_ref3.c + Sort Key: share0_ref3.c + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: share0_ref3.a, share0_ref3.c + Hash Key: share0_ref3.c + -> Result + Output: share0_ref3.a, share0_ref3.c + -> Shared Scan (share slice:id 2:0) + Output: share0_ref3.a, share0_ref3.b, share0_ref3.c + -> Hash + Output: (count(DISTINCT share0_ref2.b)), share0_ref2.c + -> GroupAggregate + Output: count(DISTINCT share0_ref2.b), share0_ref2.c + Group Key: share0_ref2.c + -> Sort + Output: share0_ref2.b, share0_ref2.c + Sort Key: share0_ref2.c + -> Redistribute Motion 3:3 (slice3; segments: 3) + Output: share0_ref2.b, share0_ref2.c + Hash Key: share0_ref2.c + -> Result + Output: share0_ref2.b, share0_ref2.c + -> Shared Scan (share slice:id 3:0) + Output: share0_ref2.a, share0_ref2.b, share0_ref2.c + Settings: enable_groupagg = 'off', enable_hashagg = 'on', gp_motion_cost_per_row = '2' + Optimizer: GPORCA +(41 rows) + +select count(distinct a), count(distinct b) from dqa_f5 group by c; + count | count +-------+------- + 1 | 1 + 0 | 0 + 1 | 1 +(3 rows) + reset optimizer_enable_multiple_distinct_aggs; drop table dqa_f4; +drop table dqa_f5; diff --git a/src/test/regress/expected/rowhints_optimizer.out b/src/test/regress/expected/rowhints_optimizer.out index 391afa5a6d9..f9266812319 100644 --- a/src/test/regress/expected/rowhints_optimizer.out +++ b/src/test/regress/expected/rowhints_optimizer.out @@ -33,14 +33,14 @@ ANALYZE my_table, your_table, our_table; EXPLAIN SELECT t1.a, t2.a FROM my_table AS t1, your_table AS t2, our_table AS t3; QUERY PLAN ----------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1356765552.28 rows=1000000 width=8) - -> Nested Loop (cost=0.00..1356765522.47 rows=333334 width=8) + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1356765398.57 rows=1000000 width=8) + -> Nested Loop (cost=0.00..1356765368.75 rows=333334 width=8) Join Filter: true -> Broadcast Motion 3:3 (slice3; segments: 3) (cost=0.00..431.01 rows=100 width=4) - -> Seq Scan on your_table t2 (cost=0.00..431.00 rows=34 width=4) - -> Nested Loop (cost=0.00..1324091.78 rows=3334 width=4) - Join Filter: true -> Seq Scan on my_table t1 (cost=0.00..431.00 rows=34 width=4) + -> Nested Loop (cost=0.00..1324091.63 rows=3334 width=4) + Join Filter: true + -> Seq Scan on your_table t2 (cost=0.00..431.00 rows=34 width=4) -> Materialize (cost=0.00..431.00 rows=100 width=1) -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=100 width=1) -> Dynamic Seq Scan on our_table t3 (cost=0.00..431.00 rows=34 width=1) @@ -78,10 +78,10 @@ not used hint: -> Nested Loop (cost=xxx..xxx rows=41 width=xxx) Join Filter: true -> Broadcast Motion 3:3 (slice3; segments: 3) (cost=xxx..xxx rows=100 width=xxx) - -> Seq Scan on your_table t2 (cost=xxx..xxx rows=34 width=xxx) + -> Seq Scan on my_table t1 (cost=xxx..xxx rows=34 width=xxx) -> Nested Loop (cost=xxx..xxx rows=3334 width=xxx) Join Filter: true - -> Seq Scan on my_table t1 (cost=xxx..xxx rows=34 width=xxx) + -> Seq Scan on your_table t2 (cost=xxx..xxx rows=34 width=xxx) -> Materialize (cost=xxx..xxx rows=100 width=xxx) -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=xxx..xxx rows=100 width=xxx) -> Dynamic Seq Scan on our_table t3 (cost=xxx..xxx rows=34 width=xxx) @@ -110,10 +110,10 @@ not used hint: -> Nested Loop (cost=xxx..xxx rows=333375 width=xxx) Join Filter: true -> Broadcast Motion 3:3 (slice3; segments: 3) (cost=xxx..xxx rows=100 width=xxx) - -> Seq Scan on your_table t2 (cost=xxx..xxx rows=34 width=xxx) + -> Seq Scan on my_table t1 (cost=xxx..xxx rows=34 width=xxx) -> Nested Loop (cost=xxx..xxx rows=3334 width=xxx) Join Filter: true - -> Seq Scan on my_table t1 (cost=xxx..xxx rows=34 width=xxx) + -> Seq Scan on your_table t2 (cost=xxx..xxx rows=34 width=xxx) -> Materialize (cost=xxx..xxx rows=100 width=xxx) -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=xxx..xxx rows=100 width=xxx) -> Dynamic Seq Scan on our_table t3 (cost=xxx..xxx rows=34 width=xxx) @@ -142,10 +142,10 @@ not used hint: -> Nested Loop (cost=xxx..xxx rows=333293 width=xxx) Join Filter: true -> Broadcast Motion 3:3 (slice3; segments: 3) (cost=xxx..xxx rows=100 width=xxx) - -> Seq Scan on your_table t2 (cost=xxx..xxx rows=34 width=xxx) + -> Seq Scan on my_table t1 (cost=xxx..xxx rows=34 width=xxx) -> Nested Loop (cost=xxx..xxx rows=3334 width=xxx) Join Filter: true - -> Seq Scan on my_table t1 (cost=xxx..xxx rows=34 width=xxx) + -> Seq Scan on your_table t2 (cost=xxx..xxx rows=34 width=xxx) -> Materialize (cost=xxx..xxx rows=100 width=xxx) -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=xxx..xxx rows=100 width=xxx) -> Dynamic Seq Scan on our_table t3 (cost=xxx..xxx rows=34 width=xxx) diff --git a/src/test/regress/sql/gp_dqa.sql b/src/test/regress/sql/gp_dqa.sql index 8e1c80c60a4..fc243d74e5e 100644 --- a/src/test/regress/sql/gp_dqa.sql +++ b/src/test/regress/sql/gp_dqa.sql @@ -604,6 +604,15 @@ select count(distinct a), count(distinct b) from dqa_f4 group by c; set optimizer_enable_multiple_distinct_aggs=on; explain (verbose on, costs off) select count(distinct a), count(distinct b) from dqa_f4 group by c; select count(distinct a), count(distinct b) from dqa_f4 group by c; -reset optimizer_enable_multiple_distinct_aggs; +-- Test AO table dqa with multiple distinct aggs +create table dqa_f5(a int, b int, c int) using ao_column; +insert into dqa_f5 values(null, null, null); +insert into dqa_f5 values(1, 1, 1); +insert into dqa_f5 values(2, 2, 2); +explain (verbose on, costs off) select count(distinct a), count(distinct b) from dqa_f5 group by c; +select count(distinct a), count(distinct b) from dqa_f5 group by c; + +reset optimizer_enable_multiple_distinct_aggs; drop table dqa_f4; +drop table dqa_f5; From 21eca33d0fff123a5b36fd21c1e69cf7050c5381 Mon Sep 17 00:00:00 2001 From: liushengsong Date: Mon, 13 Oct 2025 17:15:57 +0800 Subject: [PATCH 185/260] Fix: check and ereport error in external table In external table with CFTYPE_EXEC. We check and ereport error when external_getnext return null. --- gpcontrib/gp_exttable_fdw/extaccess.c | 23 +++++++++++++++++++ src/test/regress/input/external_table.source | 3 +++ src/test/regress/output/external_table.source | 4 ++++ .../output/external_table_optimizer.source | 4 ++++ 4 files changed, 34 insertions(+) diff --git a/gpcontrib/gp_exttable_fdw/extaccess.c b/gpcontrib/gp_exttable_fdw/extaccess.c index 08f6a431c66..f52e4c50052 100644 --- a/gpcontrib/gp_exttable_fdw/extaccess.c +++ b/gpcontrib/gp_exttable_fdw/extaccess.c @@ -491,6 +491,27 @@ external_getnext_init(PlanState *state) return desc; } +static void +check_error(FileScanDesc scan) +{ + char *relname = RelationGetRelationName(scan->fs_rd); + int ebuflen = 512; + char ebuf[512]; + + ebuf[0] = '\0'; + /* current only CFTYPE_EXEC will read stderr to ebuf */ + if (url_ferror(scan->fs_file, -1, ebuf, ebuflen)) + { + if (*ebuf && strlen(ebuf) > 0) + ereport(ERROR, + (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), + errmsg("external table %s command ended with error. %s", + (relname ? relname : ""), ebuf), + errdetail("Command: %s", scan->fs_file->url))); + } + +} + /* ---------------------------------------------------------------- * external_getnext * @@ -530,6 +551,8 @@ external_getnext(FileScanDesc scan, ScanDirection direction, ExternalSelectDesc { FILEDEBUG_2; /* external_getnext returning EOS */ + check_error(scan); + return NULL; } diff --git a/src/test/regress/input/external_table.source b/src/test/regress/input/external_table.source index a6c9871215e..662b490fc8d 100644 --- a/src/test/regress/input/external_table.source +++ b/src/test/regress/input/external_table.source @@ -3700,3 +3700,6 @@ SELECT logerrors, options from pg_exttable a, pg_class b where a.reloid = b.oid DROP EXTERNAL TABLE ext_false; DROP EXTERNAL TABLE ext_true; DROP EXTERNAL TABLE ext_persistently; + +CREATE EXTERNAL WEB TEMP TABLE test_program_not_exist(content text) EXECUTE '/xx/seq 1 5' ON MASTER FORMAT 'TEXT'; +SELECT * FROM test_program_not_exist; \ No newline at end of file diff --git a/src/test/regress/output/external_table.source b/src/test/regress/output/external_table.source index 014c50f55d3..5ef3d1fa5de 100644 --- a/src/test/regress/output/external_table.source +++ b/src/test/regress/output/external_table.source @@ -5052,3 +5052,7 @@ SELECT logerrors, options from pg_exttable a, pg_class b where a.reloid = b.oid DROP EXTERNAL TABLE ext_false; DROP EXTERNAL TABLE ext_true; DROP EXTERNAL TABLE ext_persistently; +CREATE EXTERNAL WEB TEMP TABLE test_program_not_exist(content text) EXECUTE '/xx/seq 1 5' ON MASTER FORMAT 'TEXT'; +SELECT * FROM test_program_not_exist; +DETAIL: Command: execute:/xx/seq 1 5 +ERROR: external table test_program_not_exist command ended with error. sh: line 1: /xx/seq: No such file or directory diff --git a/src/test/regress/output/external_table_optimizer.source b/src/test/regress/output/external_table_optimizer.source index 4e853662fb3..912c9999c19 100644 --- a/src/test/regress/output/external_table_optimizer.source +++ b/src/test/regress/output/external_table_optimizer.source @@ -5054,3 +5054,7 @@ SELECT logerrors, options from pg_exttable a, pg_class b where a.reloid = b.oid DROP EXTERNAL TABLE ext_false; DROP EXTERNAL TABLE ext_true; DROP EXTERNAL TABLE ext_persistently; +CREATE EXTERNAL WEB TEMP TABLE test_program_not_exist(content text) EXECUTE '/xx/seq 1 5' ON MASTER FORMAT 'TEXT'; +SELECT * FROM test_program_not_exist; +DETAIL: Command: execute:/xx/seq 1 5 +ERROR: external table test_program_not_exist command ended with error. sh: line 1: /xx/seq: No such file or directory From 878582465a1008295a86055062b50afcdb22d810 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Wed, 15 Oct 2025 06:22:54 +0000 Subject: [PATCH 186/260] Comment: Correct comments on varlena headers The comment on varlena headers is not correct. The layout of varlena headers of Cloudberry is exactly the same as Postgresql upstream, but different from Greenplum. This commit also aligns the comment with Postgresql upstream. --- src/include/postgres.h | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/include/postgres.h b/src/include/postgres.h index bde5a8b01b1..90fd1f29d39 100644 --- a/src/include/postgres.h +++ b/src/include/postgres.h @@ -186,30 +186,38 @@ typedef struct } varattrib_1b_e; /* - * Bit layouts for varlena headers: (GPDB always stores this big-endian format) + * Bit layouts for varlena headers on big-endian machines: * * 00xxxxxx 4-byte length word, aligned, uncompressed data (up to 1G) * 01xxxxxx 4-byte length word, aligned, *compressed* data (up to 1G) * 10000000 1-byte length word, unaligned, TOAST pointer * 1xxxxxxx 1-byte length word, unaligned, uncompressed data (up to 126b) * - * Cloudberry differs from PostgreSQL here... In Postgres, they use different - * macros for big-endian and little-endian machines, so the length is contiguous, - * while the 4 byte lengths are stored in native endian format. + * Bit layouts for varlena headers on little-endian machines: * - * Cloudberry stored the 4 byte varlena header in network byte order, so it always - * look big-endian in the tuple. This is a bit ugly, but changing it would require - * all our customers to initdb. + * xxxxxx00 4-byte length word, aligned, uncompressed data (up to 1G) + * xxxxxx10 4-byte length word, aligned, *compressed* data (up to 1G) + * 00000001 1-byte length word, unaligned, TOAST pointer + * xxxxxxx1 1-byte length word, unaligned, uncompressed data (up to 126b) * * The "xxx" bits are the length field (which includes itself in all cases). - * In the big-endian case we mask to extract the length. - * Note that in both cases the flag bits are in the physically + * In the big-endian case we mask to extract the length, in the little-endian + * case we shift. Note that in both cases the flag bits are in the physically * first byte. Also, it is not possible for a 1-byte length word to be zero; * this lets us disambiguate alignment padding bytes from the start of an * unaligned datum. (We now *require* pad bytes to be filled with zero!) * * In TOAST pointers the va_tag field (see varattrib_1b_e) is used to discern * the specific type and length of the pointer datum. + * + * NOTE: + * Greenplum differs from PostgreSQL here... In Postgres, it use different + * macros for big-endian and little-endian machines, so the length is contiguous, + * while the 4 byte lengths are stored in native endian format. + * + * Greenplum stored the 4 byte varlena header in network byte order, so it always + * look big-endian in the tuple. + * */ /* From 568e2c18ede2b72b922a9988a559574e4a288ace Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Thu, 19 Jun 2025 14:26:33 +0800 Subject: [PATCH 187/260] CI: update the must passed jobs' name in .asf.yaml For the contexts, should be the names of checks that must pass, which are the jobs' `name` property, instead of the steps' id value. --- .asf.yaml | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/.asf.yaml b/.asf.yaml index eb828d3bb41..254027a6a73 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -87,24 +87,11 @@ github: contexts: - rat-check - check-skip - - Build Apache Cloudberry RPM - - RPM Install Test Apache Cloudberry - - ic-good-opt-off - - ic-good-opt-on - - pax-ic-good-opt-off - - pax-ic-good-opt-on - - pax-ic-isolation2-opt-off - - pax-ic-isolation2-opt-on - - ic-expandshrink - - ic-singlenode - - ic-resgroup-v2 - - ic-contrib - - ic-gpcontrib - - ic-fixme - - ic-isolation2 - - ic-isolation2-crash - - ic-parallel-retrieve-cursor - - Generate Apache Cloudberry Build Report + - prepare-test-matrix + - build + - rpm-install-test + - test + - report # Pull request review requirements required_pull_request_reviews: From 64a79018f67ea2c7dff2e99047a06bbe618b0046 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Fri, 24 Oct 2025 09:56:17 +0800 Subject: [PATCH 188/260] Revert "CI: update the must passed jobs' name in .asf.yaml" This reverts commit 494a5602cc70d27f88ccb7e7e941e5a3d2980ca1. --- .asf.yaml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/.asf.yaml b/.asf.yaml index 254027a6a73..eb828d3bb41 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -87,11 +87,24 @@ github: contexts: - rat-check - check-skip - - prepare-test-matrix - - build - - rpm-install-test - - test - - report + - Build Apache Cloudberry RPM + - RPM Install Test Apache Cloudberry + - ic-good-opt-off + - ic-good-opt-on + - pax-ic-good-opt-off + - pax-ic-good-opt-on + - pax-ic-isolation2-opt-off + - pax-ic-isolation2-opt-on + - ic-expandshrink + - ic-singlenode + - ic-resgroup-v2 + - ic-contrib + - ic-gpcontrib + - ic-fixme + - ic-isolation2 + - ic-isolation2-crash + - ic-parallel-retrieve-cursor + - Generate Apache Cloudberry Build Report # Pull request review requirements required_pull_request_reviews: From 7db75dc4456a3452bc30401aaba6e5194ddd26c0 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Wed, 29 Oct 2025 17:19:05 +0800 Subject: [PATCH 189/260] CI: support run docker build/test on PR Enable both docker-cbdb-build-containers and docker-cbdb-test-containers workflows to run on pull_request when files under their respective Docker paths change. Main changes: * Add pull_request triggers with path filters: - build: devops/deploy/docker/build/** - test: devops/deploy/docker/test/** Guard Docker hub login and multi-arch push steps so they run only push to refs/heads/main. --- .../docker-cbdb-build-containers.yml | 19 +++++++++++++++++-- .../workflows/docker-cbdb-test-containers.yml | 18 ++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker-cbdb-build-containers.yml b/.github/workflows/docker-cbdb-build-containers.yml index 62973613a48..1b13e9ff3f4 100644 --- a/.github/workflows/docker-cbdb-build-containers.yml +++ b/.github/workflows/docker-cbdb-build-containers.yml @@ -61,6 +61,9 @@ on: - 'devops/deploy/docker/build/rocky8/**' - 'devops/deploy/docker/build/rocky9/**' - 'devops/deploy/docker/build/ubuntu22.04/**' + pull_request: + paths: + - 'devops/deploy/docker/build/**' workflow_dispatch: # Manual trigger # Prevent multiple workflow runs from interfering with each other @@ -116,7 +119,7 @@ jobs: # Login to DockerHub for pushing images # Requires DOCKERHUB_USER and DOCKERHUB_TOKEN secrets to be set - name: Login to Docker Hub - if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main' }} uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USER }} @@ -165,7 +168,7 @@ jobs: # Build and push multi-architecture images # This creates a manifest list that supports both architectures - name: Build and Push Multi-arch Docker images - if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main' }} uses: docker/build-push-action@v6 with: context: ./devops/deploy/docker/build/${{ matrix.platform }} @@ -187,6 +190,18 @@ jobs: - name: Build Summary if: always() run: | + # Add PR context notification + if [[ "${{ github.event_name }}" == "pull_request" ]]; then + echo "#### ℹ️ Pull Request Build" >> $GITHUB_STEP_SUMMARY + echo "This is a validation build. Images are built and tested locally but **not pushed to Docker Hub** for security." >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "- βœ… Dockerfile syntax validated" >> $GITHUB_STEP_SUMMARY + echo "- βœ… Multi-architecture builds tested" >> $GITHUB_STEP_SUMMARY + echo "- βœ… TestInfra tests executed" >> $GITHUB_STEP_SUMMARY + echo "- ⏭️ Docker Hub push skipped (requires main branch)" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + fi + echo "### Build Summary for ${{ matrix.platform }} πŸš€" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "#### πŸ” Build Information" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/docker-cbdb-test-containers.yml b/.github/workflows/docker-cbdb-test-containers.yml index 57d8819bcd3..fcee6fa41b6 100644 --- a/.github/workflows/docker-cbdb-test-containers.yml +++ b/.github/workflows/docker-cbdb-test-containers.yml @@ -50,6 +50,9 @@ on: - 'devops/deploy/docker/test/rocky8/**' - 'devops/deploy/docker/test/rocky9/**' - 'devops/deploy/docker/test/ubuntu22.04/**' + pull_request: + paths: + - 'devops/deploy/docker/test/**' workflow_dispatch: # Manual trigger # Prevent multiple workflow runs from interfering with each other @@ -104,7 +107,7 @@ jobs: # Login to DockerHub for pushing images - name: Login to Docker Hub - if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main' }} uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USER }} @@ -135,7 +138,7 @@ jobs: # Build and push multi-architecture images # Creates a manifest list that supports both architectures - name: Build and Push Multi-arch Docker images - if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' }} + if: ${{ steps.platform-filter.outputs[matrix.platform] == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main' }} uses: docker/build-push-action@v6 with: context: ./devops/deploy/docker/test/${{ matrix.platform }} @@ -161,6 +164,17 @@ jobs: - name: Build Summary if: always() run: | + # Add PR context notification + if [[ "${{ github.event_name }}" == "pull_request" ]]; then + echo "#### ℹ️ Pull Request Build" >> $GITHUB_STEP_SUMMARY + echo "This is a validation build. Images are built and tested locally but **not pushed to Docker Hub** for security." >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "- βœ… Dockerfile syntax validated" >> $GITHUB_STEP_SUMMARY + echo "- βœ… Multi-architecture builds tested" >> $GITHUB_STEP_SUMMARY + echo "- ⏭️ Docker Hub push skipped (requires main branch)" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + fi + echo "### Build Summary for ${{ matrix.platform }} πŸš€" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "#### πŸ” Build Information" >> $GITHUB_STEP_SUMMARY From ed43e9e1a79a96e4e775de9914451bc493a540d7 Mon Sep 17 00:00:00 2001 From: kongfanshen Date: Mon, 27 Oct 2025 17:29:29 +0800 Subject: [PATCH 190/260] Fix: fix bug When the TDE feature is enabled, backend panic will cause the database to be in an abnormal state When the backend process panics and the postmaster restarts the database, it is necessary to reinitialize the shared memory related to TDE and set the relevant global variables. --- src/backend/postmaster/postmaster.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 5c11b8125f9..92e830164e8 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -1541,9 +1541,6 @@ PostmasterMain(int argc, char *argv[]) } #endif - InitializeKmgr(); - InitializeBufferEncryption(); - if (terminal_fd != -1) close(terminal_fd); @@ -3202,6 +3199,14 @@ reset_shared(void) * clean up dead IPC objects if the postmaster crashes and is restarted. */ CreateSharedMemoryAndSemaphores(); + + /* + * When backend process crashes, postmaster restart database, + * we need to init kmgr share memory. + */ + InitializeKmgr(); + InitializeBufferEncryption(); + } From f208de240543bd53176f1717cfcd761db0911170 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Mon, 27 Oct 2025 21:26:01 +0800 Subject: [PATCH 191/260] Switch to Streaming HashAgg for multiple phase aggregation. This commit changes the Postgres planner to use Streaming HashAgg for multi-phase aggregation plans, matching Orca's approach. While non-streaming aggregation may spill to disk when data per segment is largely unique, streaming incurs minimal overhead and proves beneficial overall based on empirical evidence. Authored-by: Zhang Mingli avamingli@gmail.com --- src/backend/cdb/cdbgroupingpaths.c | 2 +- src/test/regress/expected/agg_pushdown.out | 2 +- src/test/regress/expected/aggregates.out | 14 ++++++------- src/test/regress/expected/aqumv.out | 20 +++++++++---------- src/test/regress/expected/bfv_aggregate.out | 6 +++--- src/test/regress/expected/cbdb_parallel.out | 8 ++++---- src/test/regress/expected/cte_prune.out | 6 +++--- src/test/regress/expected/direct_dispatch.out | 2 +- src/test/regress/expected/eagerfree.out | 8 ++++---- .../regress/expected/gp_aggregates_costs.out | 6 +++--- .../regress/expected/gp_distinct_plans.out | 2 +- src/test/regress/expected/gp_dqa.out | 2 +- src/test/regress/expected/gp_hashagg.out | 8 ++++---- src/test/regress/expected/gpctas.out | 6 +++--- src/test/regress/expected/gporca.out | 6 +++--- src/test/regress/expected/indexjoin.out | 2 +- src/test/regress/expected/limit_gp.out | 4 ++-- src/test/regress/expected/olap_plans.out | 6 +++--- .../regress/expected/partition_aggregate.out | 6 +++--- src/test/regress/expected/partition_join.out | 2 +- src/test/regress/expected/qp_misc_jiras.out | 2 +- src/test/regress/expected/select_distinct.out | 2 +- src/test/regress/expected/shared_scan.out | 4 ++-- src/test/regress/expected/subselect.out | 2 +- src/test/regress/expected/window.out | 2 +- src/test/regress/expected/write_parallel.out | 8 ++++---- 26 files changed, 69 insertions(+), 69 deletions(-) diff --git a/src/backend/cdb/cdbgroupingpaths.c b/src/backend/cdb/cdbgroupingpaths.c index 7ed1fec34b9..4fff89b19dc 100644 --- a/src/backend/cdb/cdbgroupingpaths.c +++ b/src/backend/cdb/cdbgroupingpaths.c @@ -1264,7 +1264,7 @@ add_first_stage_hash_agg_path(PlannerInfo *root, ctx->partial_grouping_target, AGG_HASHED, ctx->hasAggs ? AGGSPLIT_INITIAL_SERIAL : AGGSPLIT_SIMPLE, - false, /* streaming */ + true, /* streaming */ ctx->groupClause, NIL, ctx->agg_partial_costs, diff --git a/src/test/regress/expected/agg_pushdown.out b/src/test/regress/expected/agg_pushdown.out index 2895c8e69a8..9ed0c09f782 100644 --- a/src/test/regress/expected/agg_pushdown.out +++ b/src/test/regress/expected/agg_pushdown.out @@ -204,7 +204,7 @@ AS c1 ON c1.parent = p.x GROUP BY p.i; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: p.i, (PARTIAL avg(c1.v)) Hash Key: p.i - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: p.i, PARTIAL avg(c1.v) Group Key: p.i -> Hash Join diff --git a/src/test/regress/expected/aggregates.out b/src/test/regress/expected/aggregates.out index e2105a3af40..51e113ef8b6 100644 --- a/src/test/regress/expected/aggregates.out +++ b/src/test/regress/expected/aggregates.out @@ -1315,7 +1315,7 @@ explain (costs off) select a,c from t1 group by a,c,d; Group Key: a, c, d -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: a, c, d - -> HashAggregate + -> Streaming HashAggregate Group Key: a, c, d -> Seq Scan on t1 Optimizer: Postgres query optimizer @@ -3317,7 +3317,7 @@ having sum(tgb1.v3 * tgb2.v3) > 100 and AggRefs(TargetList): [(0, 0)] -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=145944.41..145974.41 rows=1000 width=84) Hash Key: tgb2.v2 - -> Partial HashAggregate (cost=145944.41..145954.41 rows=1000 width=84) + -> Streaming Partial HashAggregate (cost=145944.41..145954.41 rows=1000 width=84) Group Key: tgb2.v2 AggRefs(TargetList): [(0, 0), (1, 1), (2, 2), (3, 3)] -> Hash Join (cost=618.25..105488.34 rows=2022803 width=20) @@ -3372,7 +3372,7 @@ having sum(tgb1.v3 * tgb2.v3) > 100 and AggRefs(TargetList): [(0, 0)] -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=145944.41..145974.41 rows=1000 width=84) Hash Key: tgb2.v2 - -> Partial HashAggregate (cost=145944.41..145954.41 rows=1000 width=84) + -> Streaming Partial HashAggregate (cost=145944.41..145954.41 rows=1000 width=84) Group Key: tgb2.v2 AggRefs(TargetList): [(0, 0), (1, 1), (2, 2), (3, 3)] -> Hash Join (cost=618.25..105488.34 rows=2022803 width=20) @@ -3417,7 +3417,7 @@ explain (costs off) select v2,v3 from pds_t1 group by v2,v3; Group Key: v2, v3 -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: v2, v3 - -> HashAggregate + -> Streaming HashAggregate Group Key: v2, v3 -> Seq Scan on pds_t1 Optimizer: Postgres query optimizer @@ -3432,7 +3432,7 @@ explain (costs off) select v2,v3 from pds_t1 group by v2,v3; Group Key: v2, v3 -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: v2, v3 - -> HashAggregate + -> Streaming HashAggregate Group Key: v2, v3 -> Seq Scan on pds_t1 Optimizer: Postgres query optimizer @@ -3447,7 +3447,7 @@ explain (costs off) select v2,v3 from pds_t1 group by v2,v3; Group Key: v2, v3 -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: v2, v3 - -> HashAggregate + -> Streaming HashAggregate Group Key: v2, v3 -> Seq Scan on pds_t1 Optimizer: Postgres query optimizer @@ -3462,7 +3462,7 @@ explain (costs off) select v2,v3,v4,v5,v6 from pds_t1 group by v2,v3,v4,v5,v6; Group Key: v2, v3, v4, v5, v6 -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: v2, v3, v4, v5, v6 - -> HashAggregate + -> Streaming HashAggregate Group Key: v2, v3, v4, v5, v6 -> Seq Scan on pds_t1 Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/aqumv.out b/src/test/regress/expected/aqumv.out index 926ef05cd32..608b4db85a4 100644 --- a/src/test/regress/expected/aqumv.out +++ b/src/test/regress/expected/aqumv.out @@ -3412,7 +3412,7 @@ select c, b, sum(a), count(b) from t0 group by b, c; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: c, b, (PARTIAL sum(a)), (PARTIAL count(b)) Hash Key: b, c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: c, b, PARTIAL sum(a), PARTIAL count(b) Group Key: t0.b, t0.c -> Seq Scan on aqumv.t0 @@ -3468,7 +3468,7 @@ select b, sum(a), c, count(b) from t0 group by c, b; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, c, (PARTIAL sum(a)), (PARTIAL count(b)) Hash Key: c, b - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: b, c, PARTIAL sum(a), PARTIAL count(b) Group Key: t0.c, t0.b -> Seq Scan on aqumv.t0 @@ -3524,7 +3524,7 @@ select b + c + 1, sum(a) + count(b) from t0 group by c, b; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: c, b, (PARTIAL sum(a)), (PARTIAL count(b)) Hash Key: c, b - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: c, b, PARTIAL sum(a), PARTIAL count(b) Group Key: t0.c, t0.b -> Seq Scan on aqumv.t0 @@ -3580,7 +3580,7 @@ select c, count(b) from t0 group by c ; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: c, (PARTIAL count(b)) Hash Key: c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: c, PARTIAL count(b) Group Key: t0.c -> Seq Scan on aqumv.t0 @@ -3612,7 +3612,7 @@ select c, count(b) from t0 group by c ; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: c, (PARTIAL count(b)) Hash Key: c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: c, PARTIAL count(b) Group Key: t0.c -> Seq Scan on aqumv.t0 @@ -3645,7 +3645,7 @@ select c, b, count(b) from t0 where a > 3 group by c, b; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: c, b, (PARTIAL count(b)) Hash Key: c, b - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: c, b, PARTIAL count(b) Group Key: t0.c, t0.b -> Seq Scan on aqumv.t0 @@ -3696,7 +3696,7 @@ select count(b), b, c from t0 where a > 3 group by b, c; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, c, (PARTIAL count(b)) Hash Key: b, c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: b, c, PARTIAL count(b) Group Key: t0.b, t0.c -> Seq Scan on aqumv.t0 @@ -3747,7 +3747,7 @@ select count(b) + 1, b + 1, c from t0 where a > 3 group by b, c; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: c, b, (PARTIAL count(b)) Hash Key: b, c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: c, b, PARTIAL count(b) Group Key: t0.b, t0.c -> Seq Scan on aqumv.t0 @@ -3798,7 +3798,7 @@ select b, c, count(b) from t0 where a > 3 and b > 1 group by b, c; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, c, (PARTIAL count(b)) Hash Key: b, c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: b, c, PARTIAL count(b) Group Key: t0.b, t0.c -> Seq Scan on aqumv.t0 @@ -3828,7 +3828,7 @@ select b, c, count(b) from t0 where a > 3 and b > 1 group by b, c; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, c, (PARTIAL count(b)) Hash Key: b, c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: b, c, PARTIAL count(b) Group Key: t0.b, t0.c -> Seq Scan on aqumv.t0 diff --git a/src/test/regress/expected/bfv_aggregate.out b/src/test/regress/expected/bfv_aggregate.out index e80bd8e5405..472e2ca98b3 100644 --- a/src/test/regress/expected/bfv_aggregate.out +++ b/src/test/regress/expected/bfv_aggregate.out @@ -1686,7 +1686,7 @@ SELECT a.x, sum(b.x) FROM pagg_tab1 a FULL OUTER JOIN pagg_tab2 b ON a.x = b.y G Group Key: a.x -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: a.x - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: a.x -> Hash Full Join Hash Cond: (a.x = b.y) @@ -1961,7 +1961,7 @@ explain (verbose on, costs off) select ex2.b/2, sum(ex1.a) from ex1, (select a, -> Redistribute Motion 3:3 (slice2; segments: 3) Output: ((COALESCE(ex2.b, 1) / 2)), (PARTIAL sum(ex1.a)) Hash Key: ((COALESCE(ex2.b, 1) / 2)) - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: ((COALESCE(ex2.b, 1) / 2)), PARTIAL sum(ex1.a) Group Key: (COALESCE(ex2.b, 1) / 2) -> Hash Join @@ -1999,7 +1999,7 @@ explain (verbose on, costs off) SELECT b/2, sum(b) * (b/2) FROM ex1 GROUP BY b/ -> Redistribute Motion 3:3 (slice2; segments: 3) Output: ((b / 2)), (PARTIAL sum(b)) Hash Key: ((b / 2)) - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: ((b / 2)), PARTIAL sum(b) Group Key: (ex1.b / 2) -> Seq Scan on bfv_aggregate.ex1 diff --git a/src/test/regress/expected/cbdb_parallel.out b/src/test/regress/expected/cbdb_parallel.out index da3216896ff..35e90eebfa1 100644 --- a/src/test/regress/expected/cbdb_parallel.out +++ b/src/test/regress/expected/cbdb_parallel.out @@ -3105,7 +3105,7 @@ select distinct a from t_distinct_0; Group Key: a -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: a - -> HashAggregate + -> Streaming HashAggregate Group Key: a -> Seq Scan on t_distinct_0 Optimizer: Postgres query optimizer @@ -3286,14 +3286,14 @@ select distinct a from t_distinct_0 union select distinct b from t_distinct_0; Group Key: t_distinct_0.a -> Redistribute Motion 3:3 (slice3; segments: 3) Hash Key: t_distinct_0.a - -> HashAggregate + -> Streaming HashAggregate Group Key: t_distinct_0.a -> Seq Scan on t_distinct_0 -> HashAggregate Group Key: t_distinct_0_1.b -> Redistribute Motion 3:3 (slice4; segments: 3) Hash Key: t_distinct_0_1.b - -> HashAggregate + -> Streaming HashAggregate Group Key: t_distinct_0_1.b -> Seq Scan on t_distinct_0 t_distinct_0_1 Optimizer: Postgres query optimizer @@ -3459,7 +3459,7 @@ WHERE e.salary > ( Group Key: employees.department_id -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=90.50..122.67 rows=990 width=36) Hash Key: employees.department_id - -> Partial HashAggregate (cost=90.50..102.87 rows=990 width=36) + -> Streaming Partial HashAggregate (cost=90.50..102.87 rows=990 width=36) Group Key: employees.department_id -> Seq Scan on employees (cost=0.00..71.67 rows=3767 width=36) Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/cte_prune.out b/src/test/regress/expected/cte_prune.out index a76bc064ce2..fb8a8fb933d 100644 --- a/src/test/regress/expected/cte_prune.out +++ b/src/test/regress/expected/cte_prune.out @@ -1230,11 +1230,11 @@ LIMIT 10; -> HashAggregate (cost=102580688686565152.00..102596190789768272.00 rows=247107000000000 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b Group Key: cup.c, cup.d, cup.e, t.d, t.b - Planned Partitions: 512 + Planned Partitions: 256 -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=93196181903903024.00..102459992361252656.00 rows=741321000000000 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b Hash Key: cup.c, cup.d, cup.e, t.d, t.b - -> HashAggregate (cost=93196181903903024.00..102445165941252656.00 rows=741321000000000 width=48) + -> Streaming HashAggregate (cost=93196181903903024.00..102445165941252656.00 rows=741321000000000 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b Group Key: cup.c, cup.d, cup.e, t.d, t.b Planned Partitions: 512 @@ -1590,7 +1590,7 @@ order by OUTERMOST_FOO.region,bad_headofstates.headofstate LIMIT 40; -> Redistribute Motion 3:3 (slice4; segments: 3) (cost=2625.14..2655.14 rows=1000 width=64) Output: country_2.region, (PARTIAL avg(country_2.population)) Hash Key: country_2.region - -> Partial HashAggregate (cost=2625.14..2635.14 rows=1000 width=64) + -> Streaming Partial HashAggregate (cost=2625.14..2635.14 rows=1000 width=64) Output: country_2.region, PARTIAL avg(country_2.population) Group Key: country_2.region -> Hash Join (cost=1662.17..2425.51 rows=39927 width=36) diff --git a/src/test/regress/expected/direct_dispatch.out b/src/test/regress/expected/direct_dispatch.out index 7fc4b3e4516..488260e790a 100644 --- a/src/test/regress/expected/direct_dispatch.out +++ b/src/test/regress/expected/direct_dispatch.out @@ -659,7 +659,7 @@ explain (costs off) select gp_segment_id, count(*) from bar_randDistr group by g Group Key: gp_segment_id -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: gp_segment_id - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: gp_segment_id -> Seq Scan on bar_randdistr Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/eagerfree.out b/src/test/regress/expected/eagerfree.out index 53be6095c14..9658e9a8dd6 100644 --- a/src/test/regress/expected/eagerfree.out +++ b/src/test/regress/expected/eagerfree.out @@ -49,7 +49,7 @@ explain analyze select d, count(*) from smallt group by d; Peak Memory Usage: 0 kB -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=1.50..3.47 rows=18 width=12) (actual time=0.395..1.643 rows=7 loops=1) Hash Key: d - -> Partial HashAggregate (cost=1.50..1.68 rows=18 width=12) (actual time=0.058..0.061 rows=10 loops=1) + -> Streaming Partial HashAggregate (cost=1.50..1.68 rows=18 width=12) (actual time=0.000..0.000 rows=10 loops=1) Group Key: d Peak Memory Usage: 0 kB -> Seq Scan on smallt (cost=0.00..1.33 rows=33 width=4) (actual time=0.017..0.024 rows=50 loops=1) @@ -183,7 +183,7 @@ where t1.d = t2.d; Peak Memory Usage: 0 kB -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=1.50..3.47 rows=18 width=12) (actual time=0.659..1.284 rows=7 loops=1) Hash Key: smallt.d - -> Partial HashAggregate (cost=1.50..1.68 rows=18 width=12) (actual time=0.055..0.058 rows=10 loops=1) + -> Streaming Partial HashAggregate (cost=1.50..1.68 rows=18 width=12) (actual time=0.000..0.000 rows=10 loops=1) Group Key: smallt.d Peak Memory Usage: 0 kB -> Seq Scan on smallt (cost=0.00..1.33 rows=33 width=4) (actual time=0.015..0.022 rows=50 loops=1) @@ -193,7 +193,7 @@ where t1.d = t2.d; Peak Memory Usage: 0 kB -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=1.50..3.47 rows=18 width=12) (actual time=0.003..0.470 rows=7 loops=1) Hash Key: smallt_1.d - -> Partial HashAggregate (cost=1.50..1.68 rows=18 width=12) (actual time=0.084..0.090 rows=10 loops=1) + -> Streaming Partial HashAggregate (cost=1.50..1.68 rows=18 width=12) (actual time=0.000..0.000 rows=10 loops=1) Group Key: smallt_1.d Peak Memory Usage: 0 kB -> Seq Scan on smallt smallt_1 (cost=0.00..1.33 rows=33 width=8) (actual time=0.022..0.033 rows=50 loops=1) @@ -282,7 +282,7 @@ explain analyze select d, count(*) from smallt group by d limit 5; -> Sort (cost=2.05..2.10 rows=18 width=12) (actual time=0.173..0.178 rows=10 loops=1) Sort Key: d Sort Method: quicksort Memory: 81kB - -> Partial HashAggregate (cost=1.50..1.68 rows=18 width=12) (actual time=0.108..0.130 rows=10 loops=1) + -> Streaming Partial HashAggregate (cost=1.50..1.68 rows=18 width=12) (actual time=0.000..0.000 rows=10 loops=1) Group Key: d Extra Text: (seg0) Hash chain length 1.1 avg, 2 max, using 9 of 32 buckets; total 0 expansions. -> Seq Scan on smallt (cost=0.00..1.33 rows=33 width=4) (actual time=0.025..0.036 rows=50 loops=1) diff --git a/src/test/regress/expected/gp_aggregates_costs.out b/src/test/regress/expected/gp_aggregates_costs.out index d4761c78b8f..1865c9ff746 100644 --- a/src/test/regress/expected/gp_aggregates_costs.out +++ b/src/test/regress/expected/gp_aggregates_costs.out @@ -22,7 +22,7 @@ explain select avg(b) from cost_agg_t1 group by c; Group Key: c -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=5449.00..5509.00 rows=2000 width=36) Hash Key: c - -> Partial HashAggregate (cost=5449.00..5469.00 rows=2000 width=36) + -> Streaming Partial HashAggregate (cost=5449.00..5469.00 rows=2000 width=36) Group Key: c -> Seq Scan on cost_agg_t1 (cost=0.00..3782.33 rows=333333 width=8) Optimizer: Postgres query optimizer @@ -61,7 +61,7 @@ explain select avg(b) from cost_agg_t2 group by c; Planned Partitions: 8 -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=6538.00..9602.35 rows=102145 width=36) Hash Key: c - -> Partial HashAggregate (cost=6538.00..7559.45 rows=102145 width=36) + -> Streaming Partial HashAggregate (cost=6538.00..7574.83 rows=103683 width=36) Group Key: c Planned Partitions: 8 -> Seq Scan on cost_agg_t2 (cost=0.00..4538.00 rows=400000 width=8) @@ -103,7 +103,7 @@ explain (costs off) select b, sum(a) from t_planner_force_multi_stage group by b Finalize HashAggregate Group Key: b -> Gather Motion 3:1 (slice1; segments: 3) - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: b -> Seq Scan on t_planner_force_multi_stage Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/gp_distinct_plans.out b/src/test/regress/expected/gp_distinct_plans.out index ea9d2e06952..15f5f039bc4 100644 --- a/src/test/regress/expected/gp_distinct_plans.out +++ b/src/test/regress/expected/gp_distinct_plans.out @@ -45,7 +45,7 @@ explain select distinct b from distinct_test; Group Key: b -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=46.67..46.85 rows=6 width=4) Hash Key: b - -> HashAggregate (cost=46.67..46.73 rows=6 width=4) + -> Streaming HashAggregate (cost=46.67..46.73 rows=6 width=4) Group Key: b -> Seq Scan on distinct_test (cost=0.00..38.33 rows=3333 width=4) Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/gp_dqa.out b/src/test/regress/expected/gp_dqa.out index d53a1794a44..0b8222c9a25 100644 --- a/src/test/regress/expected/gp_dqa.out +++ b/src/test/regress/expected/gp_dqa.out @@ -2831,7 +2831,7 @@ explain (verbose on, costs off) select distinct sum(Distinct c), count(a), sum(d Group Key: (sum(DISTINCT dqa_f3.c)), (count(dqa_f3.a)), (sum(dqa_f3.d)) -> Gather Motion 3:1 (slice1; segments: 3) Output: (sum(DISTINCT c)), (count(a)), (sum(d)), b - -> HashAggregate + -> Streaming HashAggregate Output: (sum(DISTINCT c)), (count(a)), (sum(d)), b Group Key: sum(DISTINCT dqa_f3.c), count(dqa_f3.a), sum(dqa_f3.d) -> GroupAggregate diff --git a/src/test/regress/expected/gp_hashagg.out b/src/test/regress/expected/gp_hashagg.out index 38a293a684b..210ec705398 100644 --- a/src/test/regress/expected/gp_hashagg.out +++ b/src/test/regress/expected/gp_hashagg.out @@ -154,7 +154,7 @@ EXPLAIN (COSTS OFF, VERBOSE) :qry; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, (PARTIAL sum(a) FILTER (WHERE false)), (PARTIAL max(c)) Hash Key: b - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: b, PARTIAL sum(a) FILTER (WHERE false), PARTIAL max(c) Group Key: test_combinefn_null.b -> Seq Scan on public.test_combinefn_null @@ -189,7 +189,7 @@ EXPLAIN (COSTS OFF, VERBOSE) :qry; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, (PARTIAL var_pop((a)::integer) FILTER (WHERE false)), (PARTIAL max(c)) Hash Key: b - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: b, PARTIAL var_pop((a)::integer) FILTER (WHERE false), PARTIAL max(c) Group Key: test_combinefn_null.b -> Seq Scan on public.test_combinefn_null @@ -224,7 +224,7 @@ EXPLAIN (COSTS OFF, VERBOSE) :qry; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, (PARTIAL sum((a)::numeric) FILTER (WHERE false)), (PARTIAL max(c)) Hash Key: b - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: b, PARTIAL sum((a)::numeric) FILTER (WHERE false), PARTIAL max(c) Group Key: test_combinefn_null.b -> Seq Scan on public.test_combinefn_null @@ -259,7 +259,7 @@ EXPLAIN (COSTS OFF, VERBOSE) :qry; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: b, (PARTIAL var_pop((a)::numeric) FILTER (WHERE false)), (PARTIAL max(c)) Hash Key: b - -> Partial HashAggregate + -> Streaming Partial HashAggregate Output: b, PARTIAL var_pop((a)::numeric) FILTER (WHERE false), PARTIAL max(c) Group Key: test_combinefn_null.b -> Seq Scan on public.test_combinefn_null diff --git a/src/test/regress/expected/gpctas.out b/src/test/regress/expected/gpctas.out index cb0c2536bfe..d50f1b61065 100644 --- a/src/test/regress/expected/gpctas.out +++ b/src/test/regress/expected/gpctas.out @@ -28,7 +28,7 @@ SELECT attr, class, (select count(distinct class) from ctas_src) as dclass FROM -> Seq Scan on ctas_src ctas_src_1 -> Redistribute Motion 3:3 (slice1; segments: 3) Hash Key: ctas_src.attr - -> HashAggregate + -> Streaming HashAggregate Group Key: ctas_src.attr, ctas_src.class -> Seq Scan on ctas_src Optimizer: Postgres query optimizer @@ -57,7 +57,7 @@ SELECT attr, class, (select max(class) from ctas_src) as maxclass FROM ctas_src -> Seq Scan on ctas_src ctas_src_1 -> Redistribute Motion 3:3 (slice1; segments: 3) Hash Key: ctas_src.attr - -> HashAggregate + -> Streaming HashAggregate Group Key: ctas_src.attr, ctas_src.class -> Seq Scan on ctas_src Optimizer: Postgres query optimizer @@ -102,7 +102,7 @@ SELECT attr, class, (select count(distinct class) from ctas_src) as dclass, (sel -> Seq Scan on ctas_src ctas_src_3 -> Redistribute Motion 3:3 (slice1; segments: 3) Hash Key: ctas_src.attr - -> HashAggregate + -> Streaming HashAggregate Group Key: ctas_src.attr, ctas_src.class -> Seq Scan on ctas_src Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/gporca.out b/src/test/regress/expected/gporca.out index 4b2f0dac012..50da048fb61 100644 --- a/src/test/regress/expected/gporca.out +++ b/src/test/regress/expected/gporca.out @@ -10297,7 +10297,7 @@ ORDER BY 1 asc ; Group Key: ((((tt.event_ts / 100000) / 5) * 5)) -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=39875.47..39912.97 rows=1000 width=16) Hash Key: ((((tt.event_ts / 100000) / 5) * 5)) - -> Partial HashAggregate (cost=39875.47..39892.97 rows=1000 width=16) + -> Streaming Partial HashAggregate (cost=39875.47..39892.97 rows=1000 width=16) Group Key: (((tt.event_ts / 100000) / 5) * 5) -> Hash Join (cost=202.00..39819.05 rows=11283 width=8) Hash Cond: ((tq.sym)::bpchar = tt.symbol) @@ -13084,7 +13084,7 @@ select * from foo join (select min_a, count(*) as cnt from (select min(a) as min Group Key: (min(tbitmap.a)) -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: (min(tbitmap.a)) - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: min(tbitmap.a) -> HashAggregate Group Key: tbitmap.b @@ -14999,7 +14999,7 @@ explain (costs off) select max(s1) from foo inner join bar on j1 = j2 group by g Group Key: foo.g1 -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: foo.g1 - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: foo.g1 -> Hash Join Hash Cond: (foo.j1 = bar.j2) diff --git a/src/test/regress/expected/indexjoin.out b/src/test/regress/expected/indexjoin.out index 6b032575f12..a154a134aeb 100644 --- a/src/test/regress/expected/indexjoin.out +++ b/src/test/regress/expected/indexjoin.out @@ -37,7 +37,7 @@ ORDER BY 1 asc ; Group Key: ((((tt.event_ts / 100000) / 5) * 5)) -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=1236.97..1252.45 rows=413 width=16) Hash Key: ((((tt.event_ts / 100000) / 5) * 5)) - -> Partial HashAggregate (cost=1236.97..1244.19 rows=413 width=16) + -> Streaming Partial HashAggregate (cost=1236.97..1244.19 rows=413 width=16) Group Key: (((tt.event_ts / 100000) / 5) * 5) -> Hash Join (cost=17.20..1161.31 rows=15131 width=8) Hash Cond: (tt.symbol = (tq.sym)::bpchar) diff --git a/src/test/regress/expected/limit_gp.out b/src/test/regress/expected/limit_gp.out index 1c067690068..5d075e30e71 100644 --- a/src/test/regress/expected/limit_gp.out +++ b/src/test/regress/expected/limit_gp.out @@ -136,7 +136,7 @@ explain select distinct(a), sum(b) from t_volatile_limit_1 group by a order by a Group Key: a -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=464.50..494.50 rows=1000 width=12) Hash Key: a - -> Partial HashAggregate (cost=464.50..474.50 rows=1000 width=12) + -> Streaming Partial HashAggregate (cost=464.50..474.50 rows=1000 width=12) Group Key: a -> Seq Scan on t_volatile_limit_1 (cost=0.00..321.00 rows=28700 width=8) Optimizer: Postgres query optimizer @@ -156,7 +156,7 @@ explain select distinct(a), sum(b) from t_volatile_limit_1 group by a order by a Group Key: a -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=464.50..494.50 rows=1000 width=12) Hash Key: a - -> Partial HashAggregate (cost=464.50..474.50 rows=1000 width=12) + -> Streaming Partial HashAggregate (cost=464.50..474.50 rows=1000 width=12) Group Key: a -> Seq Scan on t_volatile_limit_1 (cost=0.00..321.00 rows=28700 width=8) Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/olap_plans.out b/src/test/regress/expected/olap_plans.out index f5ddcc039d4..8861e4a5c5f 100644 --- a/src/test/regress/expected/olap_plans.out +++ b/src/test/regress/expected/olap_plans.out @@ -86,7 +86,7 @@ explain select a, sum(d) from olap_test group by a; Group Key: a -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=56.00..56.09 rows=3 width=12) Hash Key: a - -> Partial HashAggregate (cost=56.00..56.03 rows=3 width=12) + -> Streaming Partial HashAggregate (cost=56.00..56.03 rows=3 width=12) Group Key: a -> Seq Scan on olap_test (cost=0.00..39.33 rows=3333 width=8) Optimizer: Postgres query optimizer @@ -306,7 +306,7 @@ explain create table bar_ctas as select * from foo_ctas group by a, b distribute Group Key: a, b -> Redistribute Motion 3:3 (slice1; segments: 3) (cost=1.50..11.42 rows=10 width=8) Hash Key: b - -> HashAggregate (cost=1.50..1.60 rows=10 width=8) + -> Streaming HashAggregate (cost=1.50..1.60 rows=10 width=8) Group Key: a, b -> Seq Scan on foo_ctas (cost=0.00..1.33 rows=33 width=8) Optimizer: Postgres query optimizer @@ -325,7 +325,7 @@ explain insert into bar_ctas select * from foo_ctas group by a, b; Group Key: foo_ctas.a, foo_ctas.b -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=1.50..11.42 rows=10 width=8) Hash Key: foo_ctas.a, foo_ctas.b - -> HashAggregate (cost=1.50..1.60 rows=10 width=8) + -> Streaming HashAggregate (cost=1.50..1.60 rows=10 width=8) Group Key: foo_ctas.a, foo_ctas.b -> Seq Scan on foo_ctas (cost=0.00..1.33 rows=33 width=8) Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/partition_aggregate.out b/src/test/regress/expected/partition_aggregate.out index 871b8e3c39a..e8d78fc6643 100644 --- a/src/test/regress/expected/partition_aggregate.out +++ b/src/test/regress/expected/partition_aggregate.out @@ -39,7 +39,7 @@ SELECT c, sum(a), avg(b), count(*), min(a), max(b) FROM pagg_tab GROUP BY c HAVI Filter: (avg(pagg_tab.d) < '15'::numeric) -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: pagg_tab.c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: pagg_tab.c -> Seq Scan on pagg_tab_p1 pagg_tab -> Finalize HashAggregate @@ -47,7 +47,7 @@ SELECT c, sum(a), avg(b), count(*), min(a), max(b) FROM pagg_tab GROUP BY c HAVI Filter: (avg(pagg_tab_1.d) < '15'::numeric) -> Redistribute Motion 3:3 (slice3; segments: 3) Hash Key: pagg_tab_1.c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: pagg_tab_1.c -> Seq Scan on pagg_tab_p2 pagg_tab_1 -> Finalize GroupAggregate @@ -57,7 +57,7 @@ SELECT c, sum(a), avg(b), count(*), min(a), max(b) FROM pagg_tab GROUP BY c HAVI Sort Key: pagg_tab_2.c -> Redistribute Motion 3:3 (slice4; segments: 3) Hash Key: pagg_tab_2.c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: pagg_tab_2.c -> Seq Scan on pagg_tab_p3 pagg_tab_2 Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/partition_join.out b/src/test/regress/expected/partition_join.out index 107cbc746e5..98431e7a104 100644 --- a/src/test/regress/expected/partition_join.out +++ b/src/test/regress/expected/partition_join.out @@ -1881,7 +1881,7 @@ SELECT avg(t1.a), avg(t2.b), t1.c, t2.c FROM plt1 t1 RIGHT JOIN plt2 t2 ON t1.c Group Key: t1.c, t2.c -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: t1.c, t1.c - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: t1.c, t2.c -> Append -> Hash Join diff --git a/src/test/regress/expected/qp_misc_jiras.out b/src/test/regress/expected/qp_misc_jiras.out index 4cbafc3e684..3ed092217fd 100644 --- a/src/test/regress/expected/qp_misc_jiras.out +++ b/src/test/regress/expected/qp_misc_jiras.out @@ -4732,7 +4732,7 @@ else 'Unidentify' end Group Key: (CASE WHEN (ir_call_supplementary_svc_code = ANY ('{S20,S21}'::bpchar[])) THEN 'MO'::text ELSE 'foo'::text END), (CASE WHEN ((ir_call_type_group_code)::text = ANY ('{H,VH,PCB}'::text[])) THEN 'Thailland'::text ELSE 'Unidentify'::text END) -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=75.08..180.27 rows=905 width=102) Hash Key: (CASE WHEN (ir_call_supplementary_svc_code = ANY ('{S20,S21}'::bpchar[])) THEN 'MO'::text ELSE 'foo'::text END), (CASE WHEN ((ir_call_type_group_code)::text = ANY ('{H,VH,PCB}'::text[])) THEN 'Thailland'::text ELSE 'Unidentify'::text END) - -> HashAggregate (cost=75.08..89.79 rows=905 width=102) + -> Streaming HashAggregate (cost=75.08..89.79 rows=905 width=64) Group Key: CASE WHEN (ir_call_supplementary_svc_code = ANY ('{S20,S21}'::bpchar[])) THEN 'MO'::text ELSE 'foo'::text END, CASE WHEN ((ir_call_type_group_code)::text = ANY ('{H,VH,PCB}'::text[])) THEN 'Thailland'::text ELSE 'Unidentify'::text END -> Seq Scan on ir_voice_sms_and_data (cost=0.00..65.42 rows=1933 width=102) Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/select_distinct.out b/src/test/regress/expected/select_distinct.out index 9d2882fd143..ce0f24e9f8f 100644 --- a/src/test/regress/expected/select_distinct.out +++ b/src/test/regress/expected/select_distinct.out @@ -144,7 +144,7 @@ SELECT count(*) FROM -> Redistribute Motion 3:3 (slice2; segments: 3) Output: tenk1.two, tenk1.four, tenk1.two Hash Key: tenk1.two, tenk1.four, tenk1.two - -> HashAggregate + -> Streaming HashAggregate Output: tenk1.two, tenk1.four, tenk1.two Group Key: tenk1.two, tenk1.four, tenk1.two -> Seq Scan on public.tenk1 diff --git a/src/test/regress/expected/shared_scan.out b/src/test/regress/expected/shared_scan.out index 2e4548d7235..2673aff0f8c 100644 --- a/src/test/regress/expected/shared_scan.out +++ b/src/test/regress/expected/shared_scan.out @@ -206,7 +206,7 @@ where Group Key: pk_list.schema_name, pk_list.table_name -> Redistribute Motion 3:3 (slice3; segments: 3) Hash Key: pk_list.schema_name, pk_list.table_name - -> HashAggregate + -> Streaming HashAggregate Group Key: pk_list.schema_name, pk_list.table_name -> Seq Scan on pk_list -> Materialize @@ -219,7 +219,7 @@ where Group Key: pk_list_1.schema_name, pk_list_1.table_name -> Redistribute Motion 3:3 (slice5; segments: 3) Hash Key: pk_list_1.schema_name, pk_list_1.table_name - -> HashAggregate + -> Streaming HashAggregate Group Key: pk_list_1.schema_name, pk_list_1.table_name -> Seq Scan on pk_list pk_list_1 SubPlan 1 diff --git a/src/test/regress/expected/subselect.out b/src/test/regress/expected/subselect.out index ea96cc3ca7b..8c3f7dfe580 100644 --- a/src/test/regress/expected/subselect.out +++ b/src/test/regress/expected/subselect.out @@ -2046,7 +2046,7 @@ group by j, q1; -> Redistribute Motion 3:3 (slice2; segments: 3) Output: t.j, ((SubPlan 1)) Hash Key: t.j, ((SubPlan 1)) - -> HashAggregate + -> Streaming HashAggregate Output: t.j, ((SubPlan 1)) Group Key: t.j, (SubPlan 1) -> Seq Scan on public.t diff --git a/src/test/regress/expected/window.out b/src/test/regress/expected/window.out index 36ea794ff8a..568a3feb0b0 100644 --- a/src/test/regress/expected/window.out +++ b/src/test/regress/expected/window.out @@ -1111,7 +1111,7 @@ select first_value(max(x)) over (), y Group Key: ((tenk1.ten + tenk1.four)) -> Redistribute Motion 3:3 (slice2; segments: 3) Hash Key: ((tenk1.ten + tenk1.four)) - -> Partial HashAggregate + -> Streaming Partial HashAggregate Group Key: (tenk1.ten + tenk1.four) -> Seq Scan on tenk1 Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/write_parallel.out b/src/test/regress/expected/write_parallel.out index 55c03f7eb3e..c204b514ecf 100644 --- a/src/test/regress/expected/write_parallel.out +++ b/src/test/regress/expected/write_parallel.out @@ -21,7 +21,7 @@ HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sur Group Key: (length((stringu1)::text)) -> Redistribute Motion 3:3 (slice1; segments: 3) Hash Key: (length((stringu1)::text)) - -> HashAggregate + -> Streaming HashAggregate Group Key: length((stringu1)::text) -> Seq Scan on tenk1 Optimizer: Postgres query optimizer @@ -42,7 +42,7 @@ HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sur Group Key: (length((stringu1)::text)) -> Redistribute Motion 3:3 (slice1; segments: 3) Hash Key: (length((stringu1)::text)) - -> HashAggregate + -> Streaming HashAggregate Group Key: length((stringu1)::text) -> Seq Scan on tenk1 Optimizer: Postgres query optimizer @@ -63,7 +63,7 @@ HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sur Group Key: (length((stringu1)::text)) -> Redistribute Motion 3:3 (slice1; segments: 3) Hash Key: (length((stringu1)::text)) - -> HashAggregate + -> Streaming HashAggregate Group Key: length((stringu1)::text) -> Seq Scan on tenk1 Optimizer: Postgres query optimizer @@ -89,7 +89,7 @@ HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sur Group Key: (length((stringu1)::text)) -> Redistribute Motion 3:3 (slice1; segments: 3) Hash Key: (length((stringu1)::text)) - -> HashAggregate + -> Streaming HashAggregate Group Key: length((stringu1)::text) -> Seq Scan on tenk1 Optimizer: Postgres query optimizer From db7e280d2527976df36e5e28540678a5b9cc7843 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Tue, 28 Oct 2025 10:01:32 +0800 Subject: [PATCH 192/260] fix cases --- src/test/regress/expected/cte_prune.out | 2 +- src/test/regress/expected/shared_scan_optimizer.out | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/regress/expected/cte_prune.out b/src/test/regress/expected/cte_prune.out index fb8a8fb933d..f3b0260628a 100644 --- a/src/test/regress/expected/cte_prune.out +++ b/src/test/regress/expected/cte_prune.out @@ -1230,7 +1230,7 @@ LIMIT 10; -> HashAggregate (cost=102580688686565152.00..102596190789768272.00 rows=247107000000000 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b Group Key: cup.c, cup.d, cup.e, t.d, t.b - Planned Partitions: 256 + Planned Partitions: 512 -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=93196181903903024.00..102459992361252656.00 rows=741321000000000 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b Hash Key: cup.c, cup.d, cup.e, t.d, t.b diff --git a/src/test/regress/expected/shared_scan_optimizer.out b/src/test/regress/expected/shared_scan_optimizer.out index a256c71063a..57ec36089d2 100644 --- a/src/test/regress/expected/shared_scan_optimizer.out +++ b/src/test/regress/expected/shared_scan_optimizer.out @@ -214,7 +214,7 @@ where Group Key: pk_list.schema_name, pk_list.table_name -> Redistribute Motion 3:3 (slice3; segments: 3) Hash Key: pk_list.schema_name, pk_list.table_name - -> HashAggregate + -> Streaming HashAggregate Group Key: pk_list.schema_name, pk_list.table_name -> Seq Scan on pk_list -> Materialize @@ -227,7 +227,7 @@ where Group Key: pk_list_1.schema_name, pk_list_1.table_name -> Redistribute Motion 3:3 (slice5; segments: 3) Hash Key: pk_list_1.schema_name, pk_list_1.table_name - -> HashAggregate + -> Streaming HashAggregate Group Key: pk_list_1.schema_name, pk_list_1.table_name -> Seq Scan on pk_list pk_list_1 SubPlan 1 From 48e27c9c3dbe0c24aa7dc64c91580e4f4a3701f5 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Tue, 28 Oct 2025 10:24:53 +0800 Subject: [PATCH 193/260] Add GUC gp_use_streaming_hashagg Swtich GUC to check results and avoid a lot of plan diffs in pax test cases. Authored-by: Zhang Mingli avamingli@gmail.com --- .../pax_storage/src/test/regress/sql/agg_pushdown.sql | 3 +++ .../pax_storage/src/test/regress/sql/aggregates.sql | 3 +++ .../src/test/regress/sql/bfv_aggregate.sql | 3 +++ .../src/test/regress/sql/direct_dispatch.sql | 3 +++ .../pax_storage/src/test/regress/sql/eagerfree.sql | 3 +++ .../src/test/regress/sql/gp_aggregates_costs.sql | 3 +++ .../pax_storage/src/test/regress/sql/gp_hashagg.sql | 3 +++ contrib/pax_storage/src/test/regress/sql/gporca.sql | 3 +++ .../pax_storage/src/test/regress/sql/indexjoin.sql | 3 +++ contrib/pax_storage/src/test/regress/sql/limit_gp.sql | 3 +++ .../pax_storage/src/test/regress/sql/olap_plans.sql | 3 +++ .../src/test/regress/sql/partition_aggregate.sql | 3 +++ .../src/test/regress/sql/partition_join.sql | 3 +++ .../src/test/regress/sql/select_distinct.sql | 3 +++ .../pax_storage/src/test/regress/sql/shared_scan.sql | 3 +++ contrib/pax_storage/src/test/regress/sql/window.sql | 3 +++ src/backend/cdb/cdbgroupingpaths.c | 2 +- src/backend/utils/misc/guc_gp.c | 11 +++++++++++ src/include/utils/guc.h | 1 + src/include/utils/unsync_guc_name.h | 1 + 20 files changed, 62 insertions(+), 1 deletion(-) diff --git a/contrib/pax_storage/src/test/regress/sql/agg_pushdown.sql b/contrib/pax_storage/src/test/regress/sql/agg_pushdown.sql index 3378f8b64e6..0d1e45ae992 100644 --- a/contrib/pax_storage/src/test/regress/sql/agg_pushdown.sql +++ b/contrib/pax_storage/src/test/regress/sql/agg_pushdown.sql @@ -1,5 +1,8 @@ -- disable ORCA SET optimizer TO off; +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- Test case group 1: basic functions CREATE TABLE agg_pushdown_parent ( diff --git a/contrib/pax_storage/src/test/regress/sql/aggregates.sql b/contrib/pax_storage/src/test/regress/sql/aggregates.sql index 158223e2633..136c70fb384 100644 --- a/contrib/pax_storage/src/test/regress/sql/aggregates.sql +++ b/contrib/pax_storage/src/test/regress/sql/aggregates.sql @@ -1,6 +1,9 @@ -- -- AGGREGATES -- +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- start_ignore -- end_ignore diff --git a/contrib/pax_storage/src/test/regress/sql/bfv_aggregate.sql b/contrib/pax_storage/src/test/regress/sql/bfv_aggregate.sql index 92d90ae72d9..8bc9d97c513 100644 --- a/contrib/pax_storage/src/test/regress/sql/bfv_aggregate.sql +++ b/contrib/pax_storage/src/test/regress/sql/bfv_aggregate.sql @@ -1,5 +1,8 @@ create schema bfv_aggregate; set search_path=bfv_aggregate; +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- -- Window function with outer references in PARTITION BY/ORDER BY clause diff --git a/contrib/pax_storage/src/test/regress/sql/direct_dispatch.sql b/contrib/pax_storage/src/test/regress/sql/direct_dispatch.sql index d9e7b562a0a..783c6cf77f6 100644 --- a/contrib/pax_storage/src/test/regress/sql/direct_dispatch.sql +++ b/contrib/pax_storage/src/test/regress/sql/direct_dispatch.sql @@ -1,5 +1,8 @@ -- turn off autostats so we don't have to worry about the logging of the autostat queries set gp_autostats_mode = None; +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- create needed tables (in a transaction, for speed) begin; diff --git a/contrib/pax_storage/src/test/regress/sql/eagerfree.sql b/contrib/pax_storage/src/test/regress/sql/eagerfree.sql index 81500e4575b..e2b79d19f9a 100644 --- a/contrib/pax_storage/src/test/regress/sql/eagerfree.sql +++ b/contrib/pax_storage/src/test/regress/sql/eagerfree.sql @@ -1,5 +1,8 @@ create schema eagerfree; set search_path=eagerfree; +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore create table smallt (i int, t text, d date) distributed by (i); insert into smallt select i%10, 'text ' || (i%15), '2011-01-01'::date + ((i%20) || ' days')::interval diff --git a/contrib/pax_storage/src/test/regress/sql/gp_aggregates_costs.sql b/contrib/pax_storage/src/test/regress/sql/gp_aggregates_costs.sql index c1337de6083..8c3263a58bf 100644 --- a/contrib/pax_storage/src/test/regress/sql/gp_aggregates_costs.sql +++ b/contrib/pax_storage/src/test/regress/sql/gp_aggregates_costs.sql @@ -5,6 +5,9 @@ insert into cost_agg_t2 select i, random() * 99999, i % 300000 from generate_ser analyze cost_agg_t1; analyze cost_agg_t2; +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- -- Test planner's decisions on aggregates when only little memory is available. -- diff --git a/contrib/pax_storage/src/test/regress/sql/gp_hashagg.sql b/contrib/pax_storage/src/test/regress/sql/gp_hashagg.sql index 36000de8af8..7b880c4e62c 100644 --- a/contrib/pax_storage/src/test/regress/sql/gp_hashagg.sql +++ b/contrib/pax_storage/src/test/regress/sql/gp_hashagg.sql @@ -10,6 +10,9 @@ insert into hashagg_test values (1,1,'1/1/2006','hi',2); insert into hashagg_test values (1,1,'1/2/2006','hi',3); insert into hashagg_test values (1,1,'1/3/2006','hi',4); +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- this will get the wrong answer (right number of rows, wrong aggregates) set enable_seqscan=off; select grp,sum(v) from hashagg_test where id1 = 1 and id2 = 1 and day between '1/1/2006' and '1/31/2006' group by grp order by sum(v) desc; diff --git a/contrib/pax_storage/src/test/regress/sql/gporca.sql b/contrib/pax_storage/src/test/regress/sql/gporca.sql index 573c1726dfd..b19afd60d7b 100644 --- a/contrib/pax_storage/src/test/regress/sql/gporca.sql +++ b/contrib/pax_storage/src/test/regress/sql/gporca.sql @@ -1,6 +1,9 @@ -- -- ORCA tests -- +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- show version SELECT count(*) from gp_opt_version(); diff --git a/contrib/pax_storage/src/test/regress/sql/indexjoin.sql b/contrib/pax_storage/src/test/regress/sql/indexjoin.sql index b99b561e42c..59290287e3b 100644 --- a/contrib/pax_storage/src/test/regress/sql/indexjoin.sql +++ b/contrib/pax_storage/src/test/regress/sql/indexjoin.sql @@ -4,6 +4,9 @@ CREATE TABLE my_tt_agg_small ( trade_price numeric, trade_volume bigint ) DISTRIBUTED BY (symbol); +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore CREATE TABLE my_tq_agg_small ( diff --git a/contrib/pax_storage/src/test/regress/sql/limit_gp.sql b/contrib/pax_storage/src/test/regress/sql/limit_gp.sql index 88c934c0779..0a1b4e8fd58 100644 --- a/contrib/pax_storage/src/test/regress/sql/limit_gp.sql +++ b/contrib/pax_storage/src/test/regress/sql/limit_gp.sql @@ -2,6 +2,9 @@ -- Check for MPP-19310 and MPP-19857 where mksort produces wrong result -- on OPT build, and fails assertion on debug build if a "LIMIT" query -- spills to disk. +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore CREATE TABLE mksort_limit_test_table(dkey INT, jkey INT, rval REAL, tval TEXT default repeat('abcdefghijklmnopqrstuvwxyz', 300)) DISTRIBUTED BY (dkey); INSERT INTO mksort_limit_test_table VALUES(generate_series(1, 10000), generate_series(10001, 20000), sqrt(generate_series(10001, 20000))); diff --git a/contrib/pax_storage/src/test/regress/sql/olap_plans.sql b/contrib/pax_storage/src/test/regress/sql/olap_plans.sql index c4242a34565..5b7ed221f18 100644 --- a/contrib/pax_storage/src/test/regress/sql/olap_plans.sql +++ b/contrib/pax_storage/src/test/regress/sql/olap_plans.sql @@ -2,6 +2,9 @@ -- Test the planner's ability to produce different kinds of plans to implement -- grouping and aggregation. -- +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore drop table if exists olap_test; drop table if exists olap_test_single; diff --git a/contrib/pax_storage/src/test/regress/sql/partition_aggregate.sql b/contrib/pax_storage/src/test/regress/sql/partition_aggregate.sql index 0e1ea0eec80..d93f5cffc2c 100644 --- a/contrib/pax_storage/src/test/regress/sql/partition_aggregate.sql +++ b/contrib/pax_storage/src/test/regress/sql/partition_aggregate.sql @@ -5,6 +5,9 @@ -- Note: to ensure plan stability, it's a good idea to make the partitions of -- any one partitioned table in this test all have different numbers of rows. -- +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- Disable ORCA since it does support partition-wise aggregates set optimizer to off; diff --git a/contrib/pax_storage/src/test/regress/sql/partition_join.sql b/contrib/pax_storage/src/test/regress/sql/partition_join.sql index 1d188d1476f..311384e85b2 100644 --- a/contrib/pax_storage/src/test/regress/sql/partition_join.sql +++ b/contrib/pax_storage/src/test/regress/sql/partition_join.sql @@ -2,6 +2,9 @@ -- PARTITION_JOIN -- Test partitionwise join between partitioned tables -- +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- Disable ORCA since it does support partition-wise joins set optimizer to off; diff --git a/contrib/pax_storage/src/test/regress/sql/select_distinct.sql b/contrib/pax_storage/src/test/regress/sql/select_distinct.sql index 27b63e699a0..35facaa9ca3 100644 --- a/contrib/pax_storage/src/test/regress/sql/select_distinct.sql +++ b/contrib/pax_storage/src/test/regress/sql/select_distinct.sql @@ -1,6 +1,9 @@ -- -- SELECT_DISTINCT -- +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- -- awk '{print $3;}' onek.data | sort -n | uniq diff --git a/contrib/pax_storage/src/test/regress/sql/shared_scan.sql b/contrib/pax_storage/src/test/regress/sql/shared_scan.sql index 7234cef6e4a..d37eca9cdce 100644 --- a/contrib/pax_storage/src/test/regress/sql/shared_scan.sql +++ b/contrib/pax_storage/src/test/regress/sql/shared_scan.sql @@ -2,6 +2,9 @@ -- Queries that lead to hanging (not dead lock) when we don't handle synchronization properly in shared scan -- Queries that lead to wrong result when we don't finish executing the subtree below the shared scan being squelched. -- +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore CREATE SCHEMA shared_scan; diff --git a/contrib/pax_storage/src/test/regress/sql/window.sql b/contrib/pax_storage/src/test/regress/sql/window.sql index 6fd72f478e4..3ef1bc824c6 100644 --- a/contrib/pax_storage/src/test/regress/sql/window.sql +++ b/contrib/pax_storage/src/test/regress/sql/window.sql @@ -2,6 +2,9 @@ -- wrong result for some core case. Turn it on to run the existing tests -- and minimize the difference from upstream. set enable_incremental_sort=on; +-- start_ignore +set gp_use_streaming_hashagg = off; +-- end_ignore -- -- WINDOW FUNCTIONS diff --git a/src/backend/cdb/cdbgroupingpaths.c b/src/backend/cdb/cdbgroupingpaths.c index 4fff89b19dc..be2e0ad496a 100644 --- a/src/backend/cdb/cdbgroupingpaths.c +++ b/src/backend/cdb/cdbgroupingpaths.c @@ -1264,7 +1264,7 @@ add_first_stage_hash_agg_path(PlannerInfo *root, ctx->partial_grouping_target, AGG_HASHED, ctx->hasAggs ? AGGSPLIT_INITIAL_SERIAL : AGGSPLIT_SIMPLE, - true, /* streaming */ + gp_use_streaming_hashagg, /* streaming */ ctx->groupClause, NIL, ctx->agg_partial_costs, diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index d2fa30ea762..891044157b9 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -153,6 +153,7 @@ bool enable_parallel_semi_join = true; bool enable_parallel_dedup_semi_join = true; bool enable_parallel_dedup_semi_reverse_join = true; bool parallel_query_use_streaming_hashagg = false; +bool gp_use_streaming_hashagg = true; int gp_appendonly_insert_files = 0; int gp_appendonly_insert_files_tuples_range = 0; int gp_random_insert_segments = 0; @@ -1898,6 +1899,16 @@ struct config_bool ConfigureNamesBool_gp[] = false, NULL, NULL }, + { + {"gp_use_streaming_hashagg", PGC_USERSET, QUERY_TUNING_METHOD, + gettext_noop("Use streaming hash agg in the first phase for multi-phase aggregations."), + NULL, + GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + }, + &gp_use_streaming_hashagg, + true, NULL, NULL + }, + { {"gp_force_random_redistribution", PGC_USERSET, CUSTOM_OPTIONS, gettext_noop("Force redistribution of insert for randomly-distributed."), diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 4b62b663f0b..aa34138a4b5 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -294,6 +294,7 @@ extern bool enable_parallel_semi_join; extern bool enable_parallel_dedup_semi_join; extern bool enable_parallel_dedup_semi_reverse_join; extern bool parallel_query_use_streaming_hashagg; +extern bool gp_use_streaming_hashagg; extern int gp_appendonly_insert_files; extern int gp_appendonly_insert_files_tuples_range; extern int gp_random_insert_segments; diff --git a/src/include/utils/unsync_guc_name.h b/src/include/utils/unsync_guc_name.h index 4c956e14fbf..cba11770a81 100644 --- a/src/include/utils/unsync_guc_name.h +++ b/src/include/utils/unsync_guc_name.h @@ -289,6 +289,7 @@ "gp_subtrans_warn_limit", "gp_vmem_idle_resource_timeout", "gp_use_legacy_hashops", + "gp_use_streaming_hashagg", "gp_vmem_limit_per_query", "gp_vmem_protect_limit", "gp_vmem_protect_segworker_cache_limit", From cbe1a71f3231934260df3832ed24028f9b48b4ff Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Tue, 28 Oct 2025 11:23:13 +0800 Subject: [PATCH 194/260] fix unstable cte_prune --- src/test/regress/expected/cte_prune.out | 91 +++++++++-------- .../regress/expected/cte_prune_optimizer.out | 99 ++++++++++--------- src/test/regress/sql/cte_prune.sql | 2 + 3 files changed, 99 insertions(+), 93 deletions(-) diff --git a/src/test/regress/expected/cte_prune.out b/src/test/regress/expected/cte_prune.out index f3b0260628a..bdda6b89c9c 100644 --- a/src/test/regress/expected/cte_prune.out +++ b/src/test/regress/expected/cte_prune.out @@ -1192,6 +1192,8 @@ HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sur CREATE TABLE t4 AS SELECT i as c, i+1 as d from generate_series(1,10)i; NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'c' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +analyze t3; +analyze t4; -- Additional filtering conditions are added to the consumer. -- This is caused by `PexprInferPredicates` in the ORCA preprocessor. explain verbose WITH t(a,b,d) AS @@ -1206,91 +1208,88 @@ t WHERE cup.e < 10 GROUP BY cup.c,cup.d, cup.e ,t.d, t.b ORDER BY 1,2,3,4 LIMIT 10; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Limit (cost=102679372549802016.00..102679372549802016.00 rows=10 width=56) + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Limit (cost=20000000031.26..20000000031.40 rows=10 width=56) Output: cup.c, cup.d, cup.e, (sum(t.d) OVER (?)), t.d, t.b - -> Gather Motion 3:1 (slice1; segments: 3) (cost=102679372549802016.00..102679372549802016.00 rows=30 width=56) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=20000000031.26..20000000031.68 rows=30 width=56) Output: cup.c, cup.d, cup.e, (sum(t.d) OVER (?)), t.d, t.b Merge Key: cup.c, cup.d, cup.e, (sum(t.d) OVER (?)) - -> Limit (cost=102679372549802016.00..102679372549802016.00 rows=10 width=56) + -> Limit (cost=20000000031.26..20000000031.28 rows=10 width=56) Output: cup.c, cup.d, cup.e, (sum(t.d) OVER (?)), t.d, t.b - -> Sort (cost=102679372549802016.00..102679990317302016.00 rows=247107000000000 width=56) + -> Sort (cost=20000000031.26..20000000031.54 rows=111 width=56) Output: cup.c, cup.d, cup.e, (sum(t.d) OVER (?)), t.d, t.b Sort Key: cup.c, cup.d, cup.e, (sum(t.d) OVER (?)) - -> WindowAgg (cost=102669708283873296.00..102674032656373296.00 rows=247107000000000 width=56) + -> WindowAgg (cost=20000000026.91..20000000028.86 rows=111 width=56) Output: cup.c, cup.d, cup.e, sum(t.d) OVER (?), t.d, t.b Partition By: t.b - -> Sort (cost=102669708283873296.00..102670326051373296.00 rows=247107000000000 width=48) + -> Sort (cost=20000000026.91..20000000027.19 rows=111 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b Sort Key: t.b - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=102580688686565152.00..102601132929768272.00 rows=247107000000000 width=48) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=20000000018.14..20000000023.14 rows=111 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b Hash Key: t.b - -> HashAggregate (cost=102580688686565152.00..102596190789768272.00 rows=247107000000000 width=48) + -> GroupAggregate (cost=20000000018.14..20000000020.92 rows=111 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b Group Key: cup.c, cup.d, cup.e, t.d, t.b - Planned Partitions: 512 - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=93196181903903024.00..102459992361252656.00 rows=741321000000000 width=48) + -> Sort (cost=20000000018.14..20000000018.42 rows=111 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b - Hash Key: cup.c, cup.d, cup.e, t.d, t.b - -> Streaming HashAggregate (cost=93196181903903024.00..102445165941252656.00 rows=741321000000000 width=48) + Sort Key: cup.c, cup.d, cup.e, t.d, t.b + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=20000000008.36..20000000014.36 rows=111 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b - Group Key: cup.c, cup.d, cup.e, t.d, t.b - Planned Partitions: 512 - -> Nested Loop (cost=67221234716.02..7598699218584692.00 rows=525742695955889984 width=48) + Hash Key: cup.c, cup.d, cup.e, t.d, t.b + -> Nested Loop (cost=20000000008.36..20000000012.14 rows=111 width=48) Output: cup.c, cup.d, cup.e, t.d, t.b - -> Broadcast Motion 3:3 (slice4; segments: 3) (cost=679.75..228161.25 rows=7413210 width=8) + -> Broadcast Motion 3:3 (slice4; segments: 3) (cost=1.08..2.35 rows=10 width=8) Output: t.d, t.b - -> Subquery Scan on t (cost=679.75..129318.45 rows=2471070 width=8) + -> Subquery Scan on t (cost=1.08..2.22 rows=3 width=8) Output: t.d, t.b - -> Hash Join (cost=679.75..129318.45 rows=2471070 width=12) + -> Hash Join (cost=1.08..2.22 rows=3 width=12) Output: t3.a, t3.b, t4.d Hash Cond: (t4.d = t3.a) - -> Redistribute Motion 3:3 (slice5; segments: 3) (cost=0.00..895.00 rows=28700 width=4) + -> Redistribute Motion 3:3 (slice5; segments: 3) (cost=0.00..1.10 rows=3 width=4) Output: t4.d Hash Key: t4.d - -> Seq Scan on cte_prune.t4 (cost=0.00..321.00 rows=28700 width=4) + -> Seq Scan on cte_prune.t4 (cost=0.00..1.03 rows=3 width=4) Output: t4.d - -> Hash (cost=321.00..321.00 rows=28700 width=8) + -> Hash (cost=1.03..1.03 rows=3 width=8) Output: t3.a, t3.b - -> Seq Scan on cte_prune.t3 (cost=0.00..321.00 rows=28700 width=8) + -> Seq Scan on cte_prune.t3 (cost=0.00..1.03 rows=3 width=8) Output: t3.a, t3.b - -> Materialize (cost=57221234036.27..64629019265.77 rows=70919709000 width=40) + -> Materialize (cost=10000000007.29..10000000008.43 rows=11 width=40) Output: cup.c, cup.d, cup.e - -> Subquery Scan on cup (cost=57221234036.27..64135905663.77 rows=70919709000 width=40) + -> Subquery Scan on cup (cost=10000000007.29..10000000008.37 rows=11 width=40) Output: cup.c, cup.d, cup.e Filter: (cup.e < '10'::numeric) - -> WindowAgg (cost=57221234036.27..61476416576.27 rows=212759127000 width=48) + -> WindowAgg (cost=10000000007.29..10000000007.95 rows=33 width=48) Output: t4_1.c, t4_1.d, avg(t3_1.b) OVER (?), t3_1.b, t3_1.a Partition By: t3_1.a Order By: t3_1.b - -> Sort (cost=57221234036.27..57753131853.77 rows=212759127000 width=16) + -> Sort (cost=10000000007.29..10000000007.37 rows=33 width=16) Output: t3_1.b, t3_1.a, t4_1.c, t4_1.d Sort Key: t3_1.a, t3_1.b DESC - -> Nested Loop (cost=10000000679.75..14463131602.75 rows=212759127000 width=16) + -> Nested Loop (cost=10000000001.08..10000000006.44 rows=33 width=16) Output: t3_1.b, t3_1.a, t4_1.c, t4_1.d - -> Broadcast Motion 3:3 (slice6; segments: 3) (cost=0.00..1469.00 rows=86100 width=8) - Output: t4_1.c, t4_1.d - -> Seq Scan on cte_prune.t4 t4_1 (cost=0.00..321.00 rows=28700 width=8) - Output: t4_1.c, t4_1.d - -> Materialize (cost=679.75..141673.80 rows=2471070 width=8) + -> Hash Join (cost=1.08..2.22 rows=3 width=12) Output: t3_1.a, t3_1.b, t4_2.d - -> Hash Join (cost=679.75..129318.45 rows=2471070 width=12) - Output: t3_1.a, t3_1.b, t4_2.d - Hash Cond: (t4_2.d = t3_1.a) - -> Redistribute Motion 3:3 (slice7; segments: 3) (cost=0.00..895.00 rows=28700 width=4) + Hash Cond: (t4_2.d = t3_1.a) + -> Redistribute Motion 3:3 (slice6; segments: 3) (cost=0.00..1.10 rows=3 width=4) + Output: t4_2.d + Hash Key: t4_2.d + -> Seq Scan on cte_prune.t4 t4_2 (cost=0.00..1.03 rows=3 width=4) Output: t4_2.d - Hash Key: t4_2.d - -> Seq Scan on cte_prune.t4 t4_2 (cost=0.00..321.00 rows=28700 width=4) - Output: t4_2.d - -> Hash (cost=321.00..321.00 rows=28700 width=8) + -> Hash (cost=1.03..1.03 rows=3 width=8) + Output: t3_1.a, t3_1.b + -> Seq Scan on cte_prune.t3 t3_1 (cost=0.00..1.03 rows=3 width=8) Output: t3_1.a, t3_1.b - -> Seq Scan on cte_prune.t3 t3_1 (cost=0.00..321.00 rows=28700 width=8) - Output: t3_1.a, t3_1.b - Settings: enable_parallel = 'off', optimizer = 'off' + -> Materialize (cost=0.00..1.22 rows=10 width=8) + Output: t4_1.c, t4_1.d + -> Broadcast Motion 3:3 (slice7; segments: 3) (cost=0.00..1.17 rows=10 width=8) + Output: t4_1.c, t4_1.d + -> Seq Scan on cte_prune.t4 t4_1 (cost=0.00..1.03 rows=3 width=8) + Output: t4_1.c, t4_1.d Optimizer: Postgres query optimizer -(82 rows) +(80 rows) WITH t(a,b,d) AS ( diff --git a/src/test/regress/expected/cte_prune_optimizer.out b/src/test/regress/expected/cte_prune_optimizer.out index ed3516845b2..d0573b3f2d4 100644 --- a/src/test/regress/expected/cte_prune_optimizer.out +++ b/src/test/regress/expected/cte_prune_optimizer.out @@ -1260,6 +1260,8 @@ drop table t2; -- comm cases CREATE TABLE t3 AS SELECT i as a, i+1 as b from generate_series(1,10)i; CREATE TABLE t4 AS SELECT i as c, i+1 as d from generate_series(1,10)i; +analyze t3; +analyze t4; -- Additional filtering conditions are added to the consumer. -- This is caused by `PexprInferPredicates` in the ORCA preprocessor. explain verbose WITH t(a,b,d) AS @@ -1274,99 +1276,102 @@ t WHERE cup.e < 10 GROUP BY cup.c,cup.d, cup.e ,t.d, t.b ORDER BY 1,2,3,4 LIMIT 10; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1356692546.41 rows=1 width=24) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1356697001.21 rows=10 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) Merge Key: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) - -> Sort (cost=0.00..1356692546.41 rows=1 width=24) + -> Sort (cost=0.00..1356697001.21 rows=4 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) Sort Key: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) - -> Sequence (cost=0.00..1356692546.41 rows=1 width=24) + -> Sequence (cost=0.00..1356697001.21 rows=4 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) - -> Shared Scan (share slice:id 1:0) (cost=0.00..862.00 rows=1 width=1) + -> Shared Scan (share slice:id 1:0) (cost=0.00..862.00 rows=4 width=1) Output: share0_ref1.a, share0_ref1.b, share0_ref1.d - -> Hash Join (cost=0.00..862.00 rows=1 width=12) + -> Hash Join (cost=0.00..862.00 rows=4 width=12) Output: t3.a, t3.b, t4.d Hash Cond: (t3.a = t4.d) - -> Seq Scan on cte_prune.t3 (cost=0.00..431.00 rows=1 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=4 width=8) Output: t3.a, t3.b - -> Hash (cost=431.00..431.00 rows=1 width=4) + Hash Key: t3.a + -> Seq Scan on cte_prune.t3 (cost=0.00..431.00 rows=4 width=8) + Output: t3.a, t3.b + -> Hash (cost=431.00..431.00 rows=4 width=4) Output: t4.d - -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=1 width=4) + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..431.00 rows=4 width=4) Output: t4.d - -> Seq Scan on cte_prune.t4 (cost=0.00..431.00 rows=1 width=4) + Hash Key: t4.d + -> Seq Scan on cte_prune.t4 (cost=0.00..431.00 rows=4 width=4) Output: t4.d - -> Redistribute Motion 1:3 (slice3) (cost=0.00..1356691684.41 rows=1 width=24) + -> Redistribute Motion 1:3 (slice4) (cost=0.00..1356696139.21 rows=4 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) - -> Limit (cost=0.00..1356691684.41 rows=1 width=24) + -> Limit (cost=0.00..1356696139.20 rows=10 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) - -> Gather Motion 3:1 (slice4; segments: 3) (cost=0.00..1356691684.41 rows=1 width=24) + -> Gather Motion 3:1 (slice5; segments: 3) (cost=0.00..1356696139.20 rows=10 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) Merge Key: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) - -> Result (cost=0.00..1356691684.41 rows=1 width=24) + -> Limit (cost=0.00..1356696139.20 rows=4 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) - -> Sort (cost=0.00..1356691684.41 rows=1 width=24) - Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)), share0_ref2.b - Sort Key: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) - -> WindowAgg (cost=0.00..1356691684.40 rows=1 width=24) - Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), sum(share0_ref2.d) OVER (?), share0_ref2.b - Partition By: share0_ref2.b - -> Sort (cost=0.00..1356691684.40 rows=1 width=24) - Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.b, share0_ref2.d - Sort Key: share0_ref2.b - -> Redistribute Motion 3:3 (slice5; segments: 3) (cost=0.00..1356691684.40 rows=1 width=24) + -> Result (cost=0.00..1356696139.20 rows=134 width=24) + Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) + -> Sort (cost=0.00..1356696139.20 rows=134 width=24) + Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)), share0_ref2.b + Sort Key: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), (sum(share0_ref2.d) OVER (?)) + -> WindowAgg (cost=0.00..1356696139.08 rows=134 width=24) + Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), sum(share0_ref2.d) OVER (?), share0_ref2.b + Partition By: share0_ref2.b + -> Sort (cost=0.00..1356696139.08 rows=134 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.b, share0_ref2.d - Hash Key: share0_ref2.b - -> GroupAggregate (cost=0.00..1356691684.40 rows=1 width=24) + Sort Key: share0_ref2.b + -> Redistribute Motion 3:3 (slice6; segments: 3) (cost=0.00..1356696138.95 rows=134 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.b, share0_ref2.d - Group Key: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.d, share0_ref2.b - -> Sort (cost=0.00..1356691684.40 rows=1 width=24) + Hash Key: share0_ref2.b + -> HashAggregate (cost=0.00..1356696138.94 rows=134 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.b, share0_ref2.d - Sort Key: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.d, share0_ref2.b - -> Redistribute Motion 3:3 (slice6; segments: 3) (cost=0.00..1356691684.40 rows=1 width=24) + Group Key: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.d, share0_ref2.b + -> Redistribute Motion 3:3 (slice7; segments: 3) (cost=0.00..1356696138.85 rows=134 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.b, share0_ref2.d Hash Key: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.d, share0_ref2.b - -> Nested Loop (cost=0.00..1356691684.40 rows=1 width=24) + -> Nested Loop (cost=0.00..1356696138.84 rows=134 width=24) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)), share0_ref2.b, share0_ref2.d Join Filter: true - -> Result (cost=0.00..1324032.22 rows=1 width=16) + -> Result (cost=0.00..1324036.56 rows=14 width=16) Output: t4_1.c, t4_1.d, (avg(share0_ref3.b) OVER (?)) Filter: ((avg(share0_ref3.b) OVER (?)) < '10'::numeric) - -> WindowAgg (cost=0.00..1324032.22 rows=1 width=16) + -> WindowAgg (cost=0.00..1324036.56 rows=34 width=16) Output: avg(share0_ref3.b) OVER (?), share0_ref3.a, share0_ref3.b, t4_1.c, t4_1.d Partition By: share0_ref3.a Order By: share0_ref3.b - -> Sort (cost=0.00..1324032.22 rows=1 width=16) + -> Sort (cost=0.00..1324036.56 rows=34 width=16) Output: share0_ref3.a, share0_ref3.b, t4_1.c, t4_1.d Sort Key: share0_ref3.a, share0_ref3.b DESC - -> Redistribute Motion 3:3 (slice8; segments: 3) (cost=0.00..1324032.22 rows=1 width=16) + -> Redistribute Motion 3:3 (slice9; segments: 3) (cost=0.00..1324036.54 rows=34 width=16) Output: share0_ref3.a, share0_ref3.b, t4_1.c, t4_1.d Hash Key: share0_ref3.a - -> Nested Loop (cost=0.00..1324032.22 rows=1 width=16) + -> Nested Loop (cost=0.00..1324036.54 rows=34 width=16) Output: share0_ref3.a, share0_ref3.b, t4_1.c, t4_1.d Join Filter: true - -> Broadcast Motion 3:3 (slice9; segments: 3) (cost=0.00..431.00 rows=1 width=8) + -> Broadcast Motion 3:3 (slice10; segments: 3) (cost=0.00..431.00 rows=10 width=8) Output: share0_ref3.a, share0_ref3.b - -> Result (cost=0.00..431.00 rows=1 width=8) + -> Result (cost=0.00..431.00 rows=4 width=8) Output: share0_ref3.a, share0_ref3.b Filter: (share0_ref3.a = share0_ref3.d) - -> Shared Scan (share slice:id 9:0) (cost=0.00..431.00 rows=1 width=12) + -> Shared Scan (share slice:id 10:0) (cost=0.00..431.00 rows=4 width=12) Output: share0_ref3.a, share0_ref3.b, share0_ref3.d - -> Seq Scan on cte_prune.t4 t4_1 (cost=0.00..431.00 rows=1 width=8) + -> Seq Scan on cte_prune.t4 t4_1 (cost=0.00..431.00 rows=4 width=8) Output: t4_1.c, t4_1.d - -> Materialize (cost=0.00..431.00 rows=1 width=8) + -> Materialize (cost=0.00..431.00 rows=10 width=8) Output: share0_ref2.b, share0_ref2.d - -> Broadcast Motion 3:3 (slice7; segments: 3) (cost=0.00..431.00 rows=1 width=8) + -> Broadcast Motion 3:3 (slice8; segments: 3) (cost=0.00..431.00 rows=10 width=8) Output: share0_ref2.b, share0_ref2.d - -> Result (cost=0.00..431.00 rows=1 width=8) + -> Result (cost=0.00..431.00 rows=4 width=8) Output: share0_ref2.b, share0_ref2.d Filter: (share0_ref2.a = share0_ref2.d) - -> Shared Scan (share slice:id 7:0) (cost=0.00..431.00 rows=1 width=12) + -> Shared Scan (share slice:id 8:0) (cost=0.00..431.00 rows=4 width=12) Output: share0_ref2.a, share0_ref2.b, share0_ref2.d - Settings: enable_parallel = 'off', optimizer = 'on' + Settings: optimizer = 'on' Optimizer: GPORCA -(90 rows) +(93 rows) WITH t(a,b,d) AS ( diff --git a/src/test/regress/sql/cte_prune.sql b/src/test/regress/sql/cte_prune.sql index db2351b134e..ae3c7671f11 100644 --- a/src/test/regress/sql/cte_prune.sql +++ b/src/test/regress/sql/cte_prune.sql @@ -255,6 +255,8 @@ drop table t2; CREATE TABLE t3 AS SELECT i as a, i+1 as b from generate_series(1,10)i; CREATE TABLE t4 AS SELECT i as c, i+1 as d from generate_series(1,10)i; +analyze t3; +analyze t4; -- Additional filtering conditions are added to the consumer. -- This is caused by `PexprInferPredicates` in the ORCA preprocessor. From 3969846df621d823b5e11fbd8e7c03cb42c87880 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Tue, 28 Oct 2025 17:05:33 +0800 Subject: [PATCH 195/260] fix unstable cte_prune again --- src/test/regress/expected/cte_prune.out | 1 + src/test/regress/expected/cte_prune_optimizer.out | 11 ++++++----- src/test/regress/sql/cte_prune.sql | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/test/regress/expected/cte_prune.out b/src/test/regress/expected/cte_prune.out index bdda6b89c9c..84f6f0b7d10 100644 --- a/src/test/regress/expected/cte_prune.out +++ b/src/test/regress/expected/cte_prune.out @@ -8,6 +8,7 @@ insert into t1 values(generate_series(1, 10), generate_series(11, 20), generate_ analyze t1; create table t2(v1 int, v2 int, v3 int); insert into t2 values(generate_series(0, 100), generate_series(100, 200), generate_series(200, 300)); +analyze t2; -- should pruned both seq scan and shared scan explain verbose with c1 as (select v1, v2, v3 from t1) select c11.v1 from c1 as c11 left join c1 as c22 on c11.v1=c22.v1 where c11.v1 < 5; QUERY PLAN diff --git a/src/test/regress/expected/cte_prune_optimizer.out b/src/test/regress/expected/cte_prune_optimizer.out index d0573b3f2d4..e7f2339a0eb 100644 --- a/src/test/regress/expected/cte_prune_optimizer.out +++ b/src/test/regress/expected/cte_prune_optimizer.out @@ -12,6 +12,7 @@ create table t2(v1 int, v2 int, v3 int); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'v1' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. insert into t2 values(generate_series(0, 100), generate_series(100, 200), generate_series(200, 300)); +analyze t2; -- should pruned both seq scan and shared scan explain verbose with c1 as (select v1, v2, v3 from t1) select c11.v1 from c1 as c11 left join c1 as c22 on c11.v1=c22.v1 where c11.v1 < 5; QUERY PLAN @@ -867,12 +868,12 @@ select c11.v1 from c1 as c11 left join c1 as c22 on c11.v1=c22.v1; -> Hash Join (cost=0.00..862.00 rows=1 width=4) Output: t1.v1 Hash Cond: (t1.v1 = t2.v1) - -> Seq Scan on cte_prune.t1 (cost=0.00..431.00 rows=4 width=4) - Output: t1.v1 - -> Hash (cost=431.00..431.00 rows=1 width=4) + -> Seq Scan on cte_prune.t2 (cost=0.00..431.00 rows=4 width=4) Output: t2.v1 - -> Seq Scan on cte_prune.t2 (cost=0.00..431.00 rows=1 width=4) - Output: t2.v1 + -> Hash (cost=431.00..431.00 rows=1 width=4) + Output: t1.v1 + -> Seq Scan on cte_prune.t1 (cost=0.00..431.00 rows=1 width=4) + Output: t1.v1 -> Hash Left Join (cost=0.00..862.00 rows=1 width=4) Output: share0_ref3.v1 Hash Cond: (share0_ref3.v1 = share0_ref2.v1) diff --git a/src/test/regress/sql/cte_prune.sql b/src/test/regress/sql/cte_prune.sql index ae3c7671f11..2083a4b7e10 100644 --- a/src/test/regress/sql/cte_prune.sql +++ b/src/test/regress/sql/cte_prune.sql @@ -10,6 +10,7 @@ analyze t1; create table t2(v1 int, v2 int, v3 int); insert into t2 values(generate_series(0, 100), generate_series(100, 200), generate_series(200, 300)); +analyze t2; -- should pruned both seq scan and shared scan explain verbose with c1 as (select v1, v2, v3 from t1) select c11.v1 from c1 as c11 left join c1 as c22 on c11.v1=c22.v1 where c11.v1 < 5; From 9f7a81459c6f8ddd15f19b327cb044a273468dcf Mon Sep 17 00:00:00 2001 From: zhangwenchao <656540940@qq.com> Date: Tue, 28 Oct 2025 14:37:24 +0800 Subject: [PATCH 196/260] Fix orca judgement of whether relation is empty is not accurate. When retrieve RelStats, orca use reltuples is whether -1 to decide relation is empty. However, reltuples 0 also means relation is empty. Authored-by: Zhang Wenchao --- .../expected/DML_over_joins_optimizer.out | 29 +++++++------- .../regress/expected/bfv_joins_optimizer.out | 40 +++++++++---------- .../translate/CTranslatorRelcacheToDXL.cpp | 2 +- .../expected/DML_over_joins_optimizer.out | 29 +++++++------- .../regress/expected/bfv_joins_optimizer.out | 40 +++++++++---------- 5 files changed, 69 insertions(+), 71 deletions(-) diff --git a/contrib/pax_storage/src/test/regress/expected/DML_over_joins_optimizer.out b/contrib/pax_storage/src/test/regress/expected/DML_over_joins_optimizer.out index aa87cea2a3e..abdad77c7f7 100644 --- a/contrib/pax_storage/src/test/regress/expected/DML_over_joins_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/DML_over_joins_optimizer.out @@ -1613,22 +1613,21 @@ HINT: For non-partitioned tables, run analyze (). For QUERY PLAN ------------------------------------------------------------------------------ Delete on tab1 - -> Result - -> Redistribute Motion 3:3 (slice1; segments: 3) - Hash Key: tab1.b - -> Hash Join - Hash Cond: (tab2.a = tab1.a) - -> Seq Scan on tab2 - -> Hash - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: tab1.a - -> Hash Join - Hash Cond: (tab3.b = tab1.b) - -> Seq Scan on tab3 - -> Hash - -> Seq Scan on tab1 + -> Hash Join + Hash Cond: (tab3.b = tab1.b) + -> Seq Scan on tab3 + -> Hash + -> Redistribute Motion 3:3 (slice1; segments: 3) + Hash Key: tab1.b + -> Hash Join + Hash Cond: (tab2.a = tab1.a) + -> Seq Scan on tab2 + -> Hash + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: tab1.a + -> Seq Scan on tab1 Optimizer: GPORCA -(16 rows) +(15 rows) -- ---------------------------------------------------------------------- -- Test: teardown.sql diff --git a/contrib/pax_storage/src/test/regress/expected/bfv_joins_optimizer.out b/contrib/pax_storage/src/test/regress/expected/bfv_joins_optimizer.out index cc84f9983ff..236f6b93542 100644 --- a/contrib/pax_storage/src/test/regress/expected/bfv_joins_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/bfv_joins_optimizer.out @@ -2982,27 +2982,27 @@ ON (member_group.group_id IN (12,13,14,15) AND member_subgroup.subgroup_name = r QUERY PLAN --------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) - -> Hash Join - Hash Cond: (member."group_id" = member_group."group_id") - -> Seq Scan on member - -> Hash - -> Broadcast Motion 3:3 (slice2; segments: 3) - -> Hash Left Join - Hash Cond: (member_subgroup.subgroup_name = (region.county_name)::text) - Join Filter: (member_group."group_id" = ANY ('{12,13,14,15}'::integer[])) - -> Redistribute Motion 3:3 (slice3; segments: 3) - Hash Key: member_subgroup.subgroup_name - -> Hash Join - Hash Cond: (member_subgroup."group_id" = member_group."group_id") - -> Redistribute Motion 3:3 (slice4; segments: 3) - Hash Key: member_subgroup."group_id" + -> Hash Left Join + Hash Cond: (member_subgroup.subgroup_name = (region.county_name)::text) + Join Filter: (member_group."group_id" = ANY ('{12,13,14,15}'::integer[])) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: member_subgroup.subgroup_name + -> Hash Join + Hash Cond: (member."group_id" = member_group."group_id") + -> Redistribute Motion 3:3 (slice3; segments: 3) + Hash Key: member."group_id" + -> Hash Join + Hash Cond: (member."group_id" = member_subgroup."group_id") + -> Seq Scan on member + -> Hash + -> Broadcast Motion 3:3 (slice4; segments: 3) -> Seq Scan on member_subgroup - -> Hash - -> Seq Scan on member_group - -> Hash - -> Redistribute Motion 3:3 (slice5; segments: 3) - Hash Key: region.county_name - -> Seq Scan on region + -> Hash + -> Seq Scan on member_group + -> Hash + -> Redistribute Motion 3:3 (slice5; segments: 3) + Hash Key: region.county_name + -> Seq Scan on region Optimizer: Pivotal Optimizer (GPORCA) (23 rows) diff --git a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp index d8e1da28f0d..6a5d679a11f 100644 --- a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp +++ b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp @@ -1836,7 +1836,7 @@ CTranslatorRelcacheToDXL::RetrieveRelStats(CMemoryPool *mp, IMDId *mdid) * count of the partition table is -1. */ BOOL relation_empty = false; - if (num_rows == -1.0) + if (num_rows == -1.0 || num_rows == 0.0) { relation_empty = true; } diff --git a/src/test/regress/expected/DML_over_joins_optimizer.out b/src/test/regress/expected/DML_over_joins_optimizer.out index c0d7286affd..77a90f888c2 100644 --- a/src/test/regress/expected/DML_over_joins_optimizer.out +++ b/src/test/regress/expected/DML_over_joins_optimizer.out @@ -1774,22 +1774,21 @@ HINT: For non-partitioned tables, run analyze (). For QUERY PLAN ------------------------------------------------------------------------------ Delete on tab1 - -> Result - -> Redistribute Motion 3:3 (slice1; segments: 3) - Hash Key: tab1.b - -> Hash Join - Hash Cond: (tab2.a = tab1.a) - -> Seq Scan on tab2 - -> Hash - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: tab1.a - -> Hash Join - Hash Cond: (tab3.b = tab1.b) - -> Seq Scan on tab3 - -> Hash - -> Seq Scan on tab1 + -> Hash Join + Hash Cond: (tab3.b = tab1.b) + -> Seq Scan on tab3 + -> Hash + -> Redistribute Motion 3:3 (slice1; segments: 3) + Hash Key: tab1.b + -> Hash Join + Hash Cond: (tab2.a = tab1.a) + -> Seq Scan on tab2 + -> Hash + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: tab1.a + -> Seq Scan on tab1 Optimizer: GPORCA -(16 rows) +(15 rows) -- ---------------------------------------------------------------------- -- Test delete on partition table from join on another partition table diff --git a/src/test/regress/expected/bfv_joins_optimizer.out b/src/test/regress/expected/bfv_joins_optimizer.out index cccfe3db059..6ae5ea6d30c 100644 --- a/src/test/regress/expected/bfv_joins_optimizer.out +++ b/src/test/regress/expected/bfv_joins_optimizer.out @@ -3294,27 +3294,27 @@ ON (member_group.group_id IN (12,13,14,15) AND member_subgroup.subgroup_name = r QUERY PLAN --------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) - -> Hash Join - Hash Cond: (member."group_id" = member_group."group_id") - -> Seq Scan on member - -> Hash - -> Broadcast Motion 3:3 (slice2; segments: 3) - -> Hash Left Join - Hash Cond: (member_subgroup.subgroup_name = (region.county_name)::text) - Join Filter: (member_group."group_id" = ANY ('{12,13,14,15}'::integer[])) - -> Redistribute Motion 3:3 (slice3; segments: 3) - Hash Key: member_subgroup.subgroup_name - -> Hash Join - Hash Cond: (member_subgroup."group_id" = member_group."group_id") - -> Redistribute Motion 3:3 (slice4; segments: 3) - Hash Key: member_subgroup."group_id" + -> Hash Left Join + Hash Cond: (member_subgroup.subgroup_name = (region.county_name)::text) + Join Filter: (member_group."group_id" = ANY ('{12,13,14,15}'::integer[])) + -> Redistribute Motion 3:3 (slice2; segments: 3) + Hash Key: member_subgroup.subgroup_name + -> Hash Join + Hash Cond: (member."group_id" = member_group."group_id") + -> Redistribute Motion 3:3 (slice3; segments: 3) + Hash Key: member."group_id" + -> Hash Join + Hash Cond: (member."group_id" = member_subgroup."group_id") + -> Seq Scan on member + -> Hash + -> Broadcast Motion 3:3 (slice4; segments: 3) -> Seq Scan on member_subgroup - -> Hash - -> Seq Scan on member_group - -> Hash - -> Redistribute Motion 3:3 (slice5; segments: 3) - Hash Key: region.county_name - -> Seq Scan on region + -> Hash + -> Seq Scan on member_group + -> Hash + -> Redistribute Motion 3:3 (slice5; segments: 3) + Hash Key: region.county_name + -> Seq Scan on region Optimizer: Pivotal Optimizer (GPORCA) (23 rows) From 0b30d024bb9e5fcab12a70d78a5c1e0d74ecdc88 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Mon, 10 Nov 2025 14:40:45 +0000 Subject: [PATCH 197/260] Fix compile issue for higher version of gcc/g++ 1. return std::move(temp_value) will report error in high version of g++, keep the behavior align with higher version of g++. 2. remove some maybe uninitialized varible. 3. add -Wno-error=array-bounds, so protobuf header will not report errors. --- contrib/pax_storage/CMakeLists.txt | 2 +- .../pax_storage/src/cpp/storage/micro_partition_iterator.cc | 4 ++-- contrib/pax_storage/src/cpp/storage/micro_partition_stats.cc | 2 -- contrib/pax_storage/src/cpp/storage/toast/pax_toast.cc | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/contrib/pax_storage/CMakeLists.txt b/contrib/pax_storage/CMakeLists.txt index 29c3a347dd8..5942f3bd913 100644 --- a/contrib/pax_storage/CMakeLists.txt +++ b/contrib/pax_storage/CMakeLists.txt @@ -21,7 +21,7 @@ set(CMAKE_CXX_STANDARD 17) set(TOP_DIR ${PROJECT_SOURCE_DIR}/../..) set(CBDB_INCLUDE_DIR ${TOP_DIR}/src/include) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-unused-function -Wno-error=ignored-qualifiers -Wuninitialized -Winit-self -Wstrict-aliasing -Wno-missing-field-initializers -Wno-unused-parameter -Wno-clobbered -Wno-sized-deallocation -g") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Werror=pessimizing-move -Wno-unused-function -Wno-error=ignored-qualifiers -Wno-error=array-bounds -Wuninitialized -Winit-self -Wstrict-aliasing -Wno-missing-field-initializers -Wno-unused-parameter -Wno-clobbered -Wno-sized-deallocation -g") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-unused-parameter -Wno-parameter-name") option(USE_MANIFEST_API "Use manifest API" OFF) diff --git a/contrib/pax_storage/src/cpp/storage/micro_partition_iterator.cc b/contrib/pax_storage/src/cpp/storage/micro_partition_iterator.cc index 9c9a1f8c8cd..bb9590ca5e9 100644 --- a/contrib/pax_storage/src/cpp/storage/micro_partition_iterator.cc +++ b/contrib/pax_storage/src/cpp/storage/micro_partition_iterator.cc @@ -164,7 +164,7 @@ MicroPartitionMetadata MicroPartitionInfoIterator::Next() { Assert(tuple); tuple_ = nullptr; - return std::move(ToValue(tuple)); + return ToValue(tuple); } void MicroPartitionInfoIterator::Rewind() { @@ -375,7 +375,7 @@ MicroPartitionMetadata MicroPartitionInfoParallelIterator::Next() { Assert(tuple); tuple_ = nullptr; - return std::move(ToValue(tuple)); + return ToValue(tuple); } void MicroPartitionInfoParallelIterator::Rewind() { diff --git a/contrib/pax_storage/src/cpp/storage/micro_partition_stats.cc b/contrib/pax_storage/src/cpp/storage/micro_partition_stats.cc index b18ab952527..53342ad0e2a 100644 --- a/contrib/pax_storage/src/cpp/storage/micro_partition_stats.cc +++ b/contrib/pax_storage/src/cpp/storage/micro_partition_stats.cc @@ -173,7 +173,6 @@ static bool PrepareStatisticsInfoCombine( auto attr = TupleDescAttr(desc, i); auto collation = attr->attcollation; - FmgrInfo finfo; bool get_pg_oper_succ = false; funcs.emplace_back(std::make_pair(nullptr, nullptr)); @@ -207,7 +206,6 @@ static bool PrepareStatisticsInfoCombine( GetStrategyProcinfo(attr->atttypid, attr->atttypid, funcs[i]); if (allow_fallback_to_pg) { - finfos[i] = {finfo, finfo}; get_pg_oper_succ = GetStrategyProcinfo(attr->atttypid, attr->atttypid, finfos[i]); } diff --git a/contrib/pax_storage/src/cpp/storage/toast/pax_toast.cc b/contrib/pax_storage/src/cpp/storage/toast/pax_toast.cc index f51bee8a07f..7da38f6ae06 100644 --- a/contrib/pax_storage/src/cpp/storage/toast/pax_toast.cc +++ b/contrib/pax_storage/src/cpp/storage/toast/pax_toast.cc @@ -331,7 +331,7 @@ static std::pair> pax_make_external_toast( std::pair> pax_make_toast( Datum d, char storage_type) { std::shared_ptr mobj; - Datum result; + Datum result = d; if (!pax_enable_toast) { return {d, nullptr}; From 6de047977bce39d5df437d297b004b7a21b8132a Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Mon, 10 Nov 2025 15:33:05 +0000 Subject: [PATCH 198/260] Move the global ext_dml_init_hook/ext_dml_fini_hook to AM scoped The hooks ext_dml_init_hook and ext_dml_fini_hook are used to initialize and cleanup resources for table DML operation. It's table AM specific. The current behavior uses global function pointers. The side effect is that the hooks must check whether the relation is expected and call the hook chain for other table AM implementations. This commit moves the hooks to the table AM structure, so the above assumption could be discarded. --- .../src/cpp/access/pax_access_handle.cc | 9 ++---- .../src/cpp/access/pax_access_handle.h | 3 -- src/backend/access/aocs/aocsam_handler.c | 6 ++-- .../access/appendonly/appendonlyam_handler.c | 6 ++-- src/backend/access/table/tableamapi.c | 2 ++ src/backend/commands/copyfrom.c | 26 ++-------------- src/backend/commands/createas.c | 15 +--------- src/backend/commands/matview.c | 7 +---- src/backend/commands/tablecmds.c | 8 ++--- src/backend/executor/execPartition.c | 14 ++------- src/backend/executor/nodeModifyTable.c | 18 ++--------- src/include/access/tableam.h | 30 ++++++++++++++----- src/include/cdb/cdbaocsam.h | 3 -- src/include/cdb/cdbappendonlyam.h | 2 -- 14 files changed, 44 insertions(+), 105 deletions(-) diff --git a/contrib/pax_storage/src/cpp/access/pax_access_handle.cc b/contrib/pax_storage/src/cpp/access/pax_access_handle.cc index 6dcaecd3205..12caf0e9f64 100644 --- a/contrib/pax_storage/src/cpp/access/pax_access_handle.cc +++ b/contrib/pax_storage/src/cpp/access/pax_access_handle.cc @@ -412,8 +412,6 @@ void CCPaxAccessMethod::FinishBulkInsert(Relation relation, int options) { } void CCPaxAccessMethod::ExtDmlInit(Relation rel, CmdType operation) { - if (!RELATION_IS_PAX(rel)) return; - CBDB_TRY(); { pax::CPaxDmlStateLocal::Instance()->InitDmlState(rel, operation); } CBDB_CATCH_DEFAULT(); @@ -422,8 +420,6 @@ void CCPaxAccessMethod::ExtDmlInit(Relation rel, CmdType operation) { } void CCPaxAccessMethod::ExtDmlFini(Relation rel, CmdType operation) { - if (!RELATION_IS_PAX(rel)) return; - CBDB_TRY(); { pax::CPaxDmlStateLocal::Instance()->FinishDmlState(rel, operation); } CBDB_CATCH_DEFAULT(); @@ -791,6 +787,8 @@ static const TableAmRoutine kPaxColumnMethods = { .scan_sample_next_block = pax::CCPaxAccessMethod::ScanSampleNextBlock, .scan_sample_next_tuple = pax::CCPaxAccessMethod::ScanSampleNextTuple, + .dml_init = pax::CCPaxAccessMethod::ExtDmlInit, + .dml_fini = pax::CCPaxAccessMethod::ExtDmlFini, .amoptions = paxc::PaxAccessMethod::AmOptions, .swap_relation_files = paxc::PaxAccessMethod::SwapRelationFiles, .validate_column_encoding_clauses = @@ -1191,9 +1189,6 @@ void _PG_init(void) { // NOLINT prev_object_access_hook = object_access_hook; object_access_hook = PaxObjectAccessHook; - ext_dml_init_hook = pax::CCPaxAccessMethod::ExtDmlInit; - ext_dml_finish_hook = pax::CCPaxAccessMethod::ExtDmlFini; - prev_ProcessUtilit_hook = ProcessUtility_hook; ProcessUtility_hook = paxProcessUtility; diff --git a/contrib/pax_storage/src/cpp/access/pax_access_handle.h b/contrib/pax_storage/src/cpp/access/pax_access_handle.h index d541a400d2b..9ed827b4709 100644 --- a/contrib/pax_storage/src/cpp/access/pax_access_handle.h +++ b/contrib/pax_storage/src/cpp/access/pax_access_handle.h @@ -197,6 +197,3 @@ class CCPaxAccessMethod final { }; } // namespace pax - -extern ext_dml_func_hook_type ext_dml_init_hook; -extern ext_dml_func_hook_type ext_dml_finish_hook; diff --git a/src/backend/access/aocs/aocsam_handler.c b/src/backend/access/aocs/aocsam_handler.c index 22ca114cfe0..c2faa538e10 100644 --- a/src/backend/access/aocs/aocsam_handler.c +++ b/src/backend/access/aocs/aocsam_handler.c @@ -270,7 +270,7 @@ remove_dml_state(const Oid relationOid) * * This function should be called exactly once per relation. */ -void +static void aoco_dml_init(Relation relation, CmdType operation) { init_aoco_dml_states(); @@ -280,7 +280,7 @@ aoco_dml_init(Relation relation, CmdType operation) /* * This function should be called exactly once per relation. */ -void +static void aoco_dml_finish(Relation relation, CmdType operation) { AOCODMLState *state; @@ -2658,6 +2658,8 @@ static TableAmRoutine ao_column_methods = { .scan_sample_next_block = aoco_scan_sample_next_block, .scan_sample_next_tuple = aoco_scan_sample_next_tuple, + .dml_init = aoco_dml_init, + .dml_fini = aoco_dml_finish, .amoptions = ao_amoptions, .swap_relation_files = aoco_swap_relation_files, .validate_column_encoding_clauses = aoco_validate_column_encoding_clauses, diff --git a/src/backend/access/appendonly/appendonlyam_handler.c b/src/backend/access/appendonly/appendonlyam_handler.c index 218ade630d4..715cebd7579 100644 --- a/src/backend/access/appendonly/appendonlyam_handler.c +++ b/src/backend/access/appendonly/appendonlyam_handler.c @@ -228,7 +228,7 @@ remove_dml_state(const Oid relationOid) * * This function should be called exactly once per relation. */ -void +static void appendonly_dml_init(Relation relation, CmdType operation) { init_appendonly_dml_states(); @@ -238,7 +238,7 @@ appendonly_dml_init(Relation relation, CmdType operation) /* * This function should be called exactly once per relation. */ -void +static void appendonly_dml_finish(Relation relation, CmdType operation) { AppendOnlyDMLState *state; @@ -2360,6 +2360,8 @@ static const TableAmRoutine ao_row_methods = { .scan_sample_next_block = appendonly_scan_sample_next_block, .scan_sample_next_tuple = appendonly_scan_sample_next_tuple, + .dml_init = appendonly_dml_init, + .dml_fini = appendonly_dml_finish, .amoptions = ao_amoptions, .swap_relation_files = appendonly_swap_relation_files, }; diff --git a/src/backend/access/table/tableamapi.c b/src/backend/access/table/tableamapi.c index f9008164433..8257dc92d03 100644 --- a/src/backend/access/table/tableamapi.c +++ b/src/backend/access/table/tableamapi.c @@ -104,6 +104,8 @@ GetTableAmRoutine(Oid amhandler) (routine->scan_bitmap_next_tuple == NULL)); Assert(routine->scan_sample_next_block != NULL); Assert(routine->scan_sample_next_tuple != NULL); + /* dml_init and dml_fini should both set or ignored */ + Assert((routine->dml_init != NULL) == (routine->dml_fini != NULL)); return routine; } diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index 18585a27e35..9cdee90fbe5 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -2007,18 +2007,7 @@ CopyFrom(CopyFromState cstate) CopyInitDataParser(cstate); - /* - * GPDB_12_MERGE_FIXME: We still have to perform the initialization - * here for AO relations. It is preferreable by all means to perform the - * initialization via the table AP API, however it simply does not - * provide a good enough interface for this yet. - */ - if (RelationIsAoRows(resultRelInfo->ri_RelationDesc)) - appendonly_dml_init(resultRelInfo->ri_RelationDesc, CMD_INSERT); - else if (RelationIsAoCols(resultRelInfo->ri_RelationDesc)) - aoco_dml_init(resultRelInfo->ri_RelationDesc, CMD_INSERT); - else if (ext_dml_init_hook) - ext_dml_init_hook(resultRelInfo->ri_RelationDesc, CMD_INSERT); + table_dml_init(resultRelInfo->ri_RelationDesc, CMD_INSERT); for (;;) { @@ -2451,18 +2440,7 @@ CopyFrom(CopyFromState cstate) if (bistate != NULL) FreeBulkInsertState(bistate); - /* - * GPDB_12_MERGE_FIXME: We still have to perform the finishment - * here for AO relations. It is preferreable by all means to perform the - * finishment via the table AP API, however it simply does not - * provide a good enough interface for this yet. - */ - if (RelationIsAoRows(resultRelInfo->ri_RelationDesc)) - appendonly_dml_finish(resultRelInfo->ri_RelationDesc, CMD_INSERT); - else if (RelationIsAoCols(resultRelInfo->ri_RelationDesc)) - aoco_dml_finish(resultRelInfo->ri_RelationDesc, CMD_INSERT); - else if (ext_dml_finish_hook) - ext_dml_finish_hook(resultRelInfo->ri_RelationDesc, CMD_INSERT); + table_dml_fini(resultRelInfo->ri_RelationDesc, CMD_INSERT); MemoryContextSwitchTo(oldcontext); diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c index 72db9a51e7c..6822032fe0d 100644 --- a/src/backend/commands/createas.c +++ b/src/backend/commands/createas.c @@ -838,21 +838,8 @@ CreateIntoRelDestReceiver(IntoClause *intoClause) static void intorel_startup_dummy(DestReceiver *self, int operation, TupleDesc typeinfo) { - /* - * In PostgreSQL, this is a no-op, but in GPDB, AO relations do need some - * initialization of state, because the tableam API does not provide a - * good enough interface for handling with this later, we need to - * specifically all the init at start up. - */ - /* See intorel_initplan() for explanation */ - - if (RelationIsAoRows(((DR_intorel *)self)->rel)) - appendonly_dml_init(((DR_intorel *)self)->rel, CMD_INSERT); - else if (RelationIsAoCols(((DR_intorel *)self)->rel)) - aoco_dml_init(((DR_intorel *)self)->rel, CMD_INSERT); - else if (ext_dml_init_hook) - ext_dml_init_hook(((DR_intorel *)self)->rel, CMD_INSERT); + table_dml_init(((DR_intorel *)self)->rel, CMD_INSERT); } /* diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index ea3408654c2..1555ea9d334 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -966,12 +966,7 @@ transientrel_startup(DestReceiver *self, int operation, TupleDesc typeinfo) myState->bistate = GetBulkInsertState(); myState->processed = 0; - if (RelationIsAoRows(myState->transientrel)) - appendonly_dml_init(myState->transientrel, CMD_INSERT); - else if (RelationIsAoCols(myState->transientrel)) - aoco_dml_init(myState->transientrel, CMD_INSERT); - else if (ext_dml_init_hook) - ext_dml_init_hook(myState->transientrel, CMD_INSERT); + table_dml_init(myState->transientrel, CMD_INSERT); /* * Valid smgr_targblock implies something already wrote to the relation. diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index e731e37142c..42e00efe81d 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -7560,12 +7560,8 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode) snapshot = RegisterSnapshot(GetLatestSnapshot()); scan = table_beginscan(oldrel, snapshot, 0, NULL); - if (newrel && RelationIsAoRows(newrel)) - appendonly_dml_init(newrel, CMD_INSERT); - else if (newrel && RelationIsAoCols(newrel)) - aoco_dml_init(newrel, CMD_INSERT); - else if (newrel && ext_dml_init_hook) - ext_dml_init_hook(newrel, CMD_INSERT); + if (newrel) + table_dml_init(newrel, CMD_INSERT); /* * Switch to per-tuple memory context and reset it for each tuple diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 679d861e485..629eca05483 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -916,12 +916,7 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, lappend(estate->es_tuple_routing_result_relations, leaf_part_rri); - if (RelationIsAoRows(leaf_part_rri->ri_RelationDesc)) - appendonly_dml_init(leaf_part_rri->ri_RelationDesc, mtstate->operation); - else if (RelationIsAoCols(leaf_part_rri->ri_RelationDesc)) - aoco_dml_init(leaf_part_rri->ri_RelationDesc, mtstate->operation); - else if (ext_dml_init_hook) - ext_dml_init_hook(leaf_part_rri->ri_RelationDesc, mtstate->operation); + table_dml_init(leaf_part_rri->ri_RelationDesc, mtstate->operation); MemoryContextSwitchTo(oldcxt); @@ -1234,12 +1229,7 @@ ExecCleanupTupleRouting(ModifyTableState *mtstate, * Only leaf node can have a valid access method. If we find an * appendoptimized table, ensure the DML operation is finished. */ - if (RelationIsAoRows(resultRelInfo->ri_RelationDesc)) - appendonly_dml_finish(resultRelInfo->ri_RelationDesc, mtstate->operation); - else if (RelationIsAoCols(resultRelInfo->ri_RelationDesc)) - aoco_dml_finish(resultRelInfo->ri_RelationDesc, mtstate->operation); - else if (ext_dml_finish_hook) - ext_dml_finish_hook(resultRelInfo->ri_RelationDesc, mtstate->operation); + table_dml_fini(resultRelInfo->ri_RelationDesc, mtstate->operation); ExecCloseIndices(resultRelInfo); table_close(resultRelInfo->ri_RelationDesc, NoLock); diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 1d6bd2e8a93..27b48152195 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -70,9 +70,6 @@ #include "libpq/libpq.h" #include "libpq/pqformat.h" -ext_dml_func_hook_type ext_dml_init_hook = NULL; -ext_dml_func_hook_type ext_dml_finish_hook = NULL; - typedef struct MTTargetRelLookup { Oid relationOid; /* hash key, must be first */ @@ -3261,12 +3258,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) "supported in serializable transactions"))); } - if (RelationIsAoRows(resultRelInfo->ri_RelationDesc)) - appendonly_dml_init(resultRelInfo->ri_RelationDesc, operation); - else if (RelationIsAoCols(resultRelInfo->ri_RelationDesc)) - aoco_dml_init(resultRelInfo->ri_RelationDesc, operation); - else if (ext_dml_init_hook) - ext_dml_init_hook(resultRelInfo->ri_RelationDesc, operation); + table_dml_init(resultRelInfo->ri_RelationDesc, operation); resultRelInfo++; i++; @@ -3717,13 +3709,7 @@ ExecEndModifyTable(ModifyTableState *node) resultRelInfo->ri_FdwRoutine->EndForeignModify(node->ps.state, resultRelInfo); - if (RelationIsAoRows(resultRelInfo->ri_RelationDesc)) - appendonly_dml_finish(resultRelInfo->ri_RelationDesc, - node->operation); - else if (RelationIsAoCols(resultRelInfo->ri_RelationDesc)) - aoco_dml_finish(resultRelInfo->ri_RelationDesc, node->operation); - else if (ext_dml_finish_hook) - ext_dml_finish_hook(resultRelInfo->ri_RelationDesc, node->operation); + table_dml_fini(resultRelInfo->ri_RelationDesc, node->operation); /* * Cleanup the initialized batch slots. This only matters for FDWs diff --git a/src/include/access/tableam.h b/src/include/access/tableam.h index 4a877e857b1..2253e400efb 100644 --- a/src/include/access/tableam.h +++ b/src/include/access/tableam.h @@ -39,6 +39,7 @@ struct SampleScanState; struct TBMIterateResult; struct VacuumParams; struct ValidateIndexState; +enum CmdType; /** * Flags represented the supported features of scan. @@ -955,6 +956,14 @@ typedef struct TableAmRoutine struct SampleScanState *scanstate, TupleTableSlot *slot); + /** + * The pair of callbacks are invoked to perform any initialization and + * cleanup required for DML operations (INSERT, UPDATE, DELETE) on a + * relation of this table AM. + */ + void (*dml_init) (Relation relation, enum CmdType operation); + void (*dml_fini) (Relation relation, enum CmdType operation); + /* * This callback is used to parse reloptions for relation/matview/toast. */ @@ -1791,6 +1800,19 @@ table_finish_bulk_insert(Relation rel, int options) rel->rd_tableam->finish_bulk_insert(rel, options); } +static inline void +table_dml_init(Relation rel, enum CmdType operation) +{ + if (rel->rd_tableam && rel->rd_tableam->dml_init) + rel->rd_tableam->dml_init(rel, operation); +} + +static inline void +table_dml_fini(Relation rel, enum CmdType operation) +{ + if (rel->rd_tableam && rel->rd_tableam->dml_fini) + rel->rd_tableam->dml_fini(rel, operation); +} /* ------------------------------------------------------------------------ * DDL related functionality. @@ -2357,13 +2379,5 @@ extern const TableAmRoutine *GetHeapamTableAmRoutine(void); extern bool check_default_table_access_method(char **newval, void **extra, GucSource source); -/* ---------------------------------------------------------------------------- - * Hook function to run init/fini for storage extensions - * ---------------------------------------------------------------------------- - */ -enum CmdType; -typedef void (*ext_dml_func_hook_type) (Relation relation, enum CmdType operation); -extern PGDLLIMPORT ext_dml_func_hook_type ext_dml_init_hook; -extern PGDLLIMPORT ext_dml_func_hook_type ext_dml_finish_hook; #endif /* TABLEAM_H */ diff --git a/src/include/cdb/cdbaocsam.h b/src/include/cdb/cdbaocsam.h index ab990e2bf01..c18f86db1fd 100644 --- a/src/include/cdb/cdbaocsam.h +++ b/src/include/cdb/cdbaocsam.h @@ -421,9 +421,6 @@ extern void aocs_addcol_setfirstrownum(AOCSAddColumnDesc desc, extern bool aocs_get_target_tuple(AOCSScanDesc aoscan, int64 targrow, TupleTableSlot *slot); -extern void aoco_dml_init(Relation relation, CmdType operation); -extern void aoco_dml_finish(Relation relation, CmdType operation); - extern bool extractcolumns_from_node(Node *expr, bool *cols, AttrNumber natts); extern ExprState * aocs_predicate_pushdown_prepare(AOCSScanDesc scan, List *qual, diff --git a/src/include/cdb/cdbappendonlyam.h b/src/include/cdb/cdbappendonlyam.h index 58fc77d8f5c..1d2622a8ff2 100644 --- a/src/include/cdb/cdbappendonlyam.h +++ b/src/include/cdb/cdbappendonlyam.h @@ -488,14 +488,12 @@ extern bool appendonly_fetch( AOTupleId *aoTid, TupleTableSlot *slot); extern void appendonly_fetch_finish(AppendOnlyFetchDesc aoFetchDesc); -extern void appendonly_dml_init(Relation relation, CmdType operation); extern AppendOnlyInsertDesc appendonly_insert_init(Relation rel, int segno); extern void appendonly_insert( AppendOnlyInsertDesc aoInsertDesc, MemTuple instup, AOTupleId *aoTupleId); extern void appendonly_insert_finish(AppendOnlyInsertDesc aoInsertDesc, dlist_head *head); -extern void appendonly_dml_finish(Relation relation, CmdType operation); extern AppendOnlyDeleteDesc appendonly_delete_init(Relation rel); extern TM_Result appendonly_delete( From 2b61a8f5fcf7d0916d06fbc950ffe7730d78f480 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Fri, 14 Nov 2025 00:54:50 +0000 Subject: [PATCH 199/260] Fix calculating size of a database or tablespace pg_database_size only counts phyical files in database directory. The sub-directory under database directory can't represent the real storage size. The same issue happens on calculating the size of tablespace as well. Currently, PAX creates a separate directory to storage all its phyical files, like micro-partition files, visibility-map files, etc. To include the phyical files occupied by PAX tables, `db_dir_size` should calculate its sub-directories recursively. --- src/backend/utils/adt/dbsize.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index e41dc619b89..d163a7f38ea 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -153,6 +153,15 @@ db_dir_size(const char *path) continue; snprintf(filename, sizeof(filename), "%s/%s", path, direntry->d_name); + if (direntry->d_type == DT_DIR) + { + /** + * Recurse into subdirectory. PAX stores data file in a separate + * directory, so we need to account for that. + */ + dirsize += db_dir_size(filename); + continue; + } if (stat(filename, &fst) < 0) { From 8e73f432b37f25e70ab6ab0f6e25fc312d2194e7 Mon Sep 17 00:00:00 2001 From: Zhang Mingli Date: Thu, 13 Nov 2025 15:26:24 +0800 Subject: [PATCH 200/260] fix: correct EXITS typo to EXISTS in SQL and code - Fix 'EXITS' to 'EXISTS' in DROP TABLE IF EXISTS statements - Fix same typo in other code locations The original error was causing SQL syntax failures: ERROR: syntax error at or near "EXITS" LINE 1: DROP TABLE IF EXITS cte_bug.store_sales; ^ Authored-by: Zhang Mingli avamingli@gmail.com --- gpMgmt/bin/gppylib/utils.py | 2 +- .../appendonly/appendonlyblockdirectory.c | 2 +- .../operators/CExpressionPreprocessorTest.h | 2 +- src/backend/utils/misc/guc_gp.c | 2 +- src/test/regress/expected/tpcds_q04.out | 25 ++++--------------- .../regress/expected/tpcds_q04_optimizer.out | 25 ++++--------------- src/test/regress/sql/tpcds_q04.sql | 10 ++++---- 7 files changed, 19 insertions(+), 49 deletions(-) diff --git a/gpMgmt/bin/gppylib/utils.py b/gpMgmt/bin/gppylib/utils.py index fead818d3ac..1adb1e68cdc 100644 --- a/gpMgmt/bin/gppylib/utils.py +++ b/gpMgmt/bin/gppylib/utils.py @@ -290,7 +290,7 @@ def deleteBlock(fileName,beginPattern, endPattern): print(("IOERROR", IOError)) sys.exit() else: - print("***********%s file does not exits"%(fileName)) + print("***********%s file does not exist"%(fileName)) def make_inf_hosts(hp, hstart, hend, istart, iend, hf=None): hfArr = [] diff --git a/src/backend/access/appendonly/appendonlyblockdirectory.c b/src/backend/access/appendonly/appendonlyblockdirectory.c index 2f9a9f4522a..1e3e3cb4c0b 100644 --- a/src/backend/access/appendonly/appendonlyblockdirectory.c +++ b/src/backend/access/appendonly/appendonlyblockdirectory.c @@ -1285,7 +1285,7 @@ load_last_minipage(AppendOnlyBlockDirectory *blockDirectory, * find_minipage_entry * * Find the minipage entry that covers the given rowNum. - * If such an entry does not exists, -1 is returned. Otherwise + * If such an entry does not exist, -1 is returned. Otherwise * the index to such an entry in the minipage array is returned. */ static int diff --git a/src/backend/gporca/server/include/unittest/gpopt/operators/CExpressionPreprocessorTest.h b/src/backend/gporca/server/include/unittest/gpopt/operators/CExpressionPreprocessorTest.h index c87830560dc..462a656f9bc 100644 --- a/src/backend/gporca/server/include/unittest/gpopt/operators/CExpressionPreprocessorTest.h +++ b/src/backend/gporca/server/include/unittest/gpopt/operators/CExpressionPreprocessorTest.h @@ -59,7 +59,7 @@ class CExpressionPreprocessorTest // check if a given expression has a subquery exists node static BOOL FHasSubqueryExists(CExpression *pexpr); - // check if a given expression has a subquery not exitst node + // check if a given expression has a subquery not exists node static BOOL FHasSubqueryNotExists(CExpression *pexpr); // check if a given expression has an ALL subquery diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 891044157b9..4eb88be4220 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -5522,7 +5522,7 @@ check_hot_dr(bool *newval, void **extra, GucSource source) if (*newval && IS_QUERY_DISPATCHER() && !checkGpSegConfigFtsFiles()) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("cannot enable \"hot_dr\" since DR cluster segment configuration file does not exits"))); + errmsg("cannot enable \"hot_dr\" since DR cluster segment configuration file does not exist"))); return true; } diff --git a/src/test/regress/expected/tpcds_q04.out b/src/test/regress/expected/tpcds_q04.out index 2bdcd377f85..be34e94a761 100644 --- a/src/test/regress/expected/tpcds_q04.out +++ b/src/test/regress/expected/tpcds_q04.out @@ -20,10 +20,7 @@ SET default_table_access_method = ao_column; -- -- Name: catalog_sales; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.catalog_sales; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.catalog_sales; - ^ +DROP TABLE IF EXISTS cte_bug.catalog_sales; CREATE TABLE cte_bug.catalog_sales ( cs_sold_date_sk integer, cs_sold_time_sk integer, @@ -98,10 +95,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: customer; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.customer; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.customer; - ^ +DROP TABLE IF EXISTS cte_bug.customer; CREATE TABLE cte_bug.customer ( c_customer_sk integer NOT NULL, c_customer_id character varying(16) NOT NULL, @@ -144,10 +138,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: date_dim; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.date_dim; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.date_dim; - ^ +DROP TABLE IF EXISTS cte_bug.date_dim; CREATE TABLE cte_bug.date_dim ( d_date_sk integer NOT NULL, d_date_id character varying(16) NOT NULL, @@ -210,10 +201,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: store_sales; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.store_sales; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.store_sales; - ^ +DROP TABLE IF EXISTS cte_bug.store_sales; CREATE TABLE cte_bug.store_sales ( ss_sold_date_sk integer, ss_sold_time_sk integer, @@ -266,10 +254,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: web_sales; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.web_sales; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.web_sales; - ^ +DROP TABLE IF EXISTS cte_bug.web_sales; CREATE TABLE cte_bug.web_sales ( ws_sold_date_sk integer, ws_sold_time_sk integer, diff --git a/src/test/regress/expected/tpcds_q04_optimizer.out b/src/test/regress/expected/tpcds_q04_optimizer.out index d0d3b7688ef..15208a03b56 100644 --- a/src/test/regress/expected/tpcds_q04_optimizer.out +++ b/src/test/regress/expected/tpcds_q04_optimizer.out @@ -20,10 +20,7 @@ SET default_table_access_method = ao_column; -- -- Name: catalog_sales; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.catalog_sales; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.catalog_sales; - ^ +DROP TABLE IF EXISTS cte_bug.catalog_sales; CREATE TABLE cte_bug.catalog_sales ( cs_sold_date_sk integer, cs_sold_time_sk integer, @@ -98,10 +95,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: customer; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.customer; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.customer; - ^ +DROP TABLE IF EXISTS cte_bug.customer; CREATE TABLE cte_bug.customer ( c_customer_sk integer NOT NULL, c_customer_id character varying(16) NOT NULL, @@ -144,10 +138,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: date_dim; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.date_dim; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.date_dim; - ^ +DROP TABLE IF EXISTS cte_bug.date_dim; CREATE TABLE cte_bug.date_dim ( d_date_sk integer NOT NULL, d_date_id character varying(16) NOT NULL, @@ -210,10 +201,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: store_sales; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.store_sales; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.store_sales; - ^ +DROP TABLE IF EXISTS cte_bug.store_sales; CREATE TABLE cte_bug.store_sales ( ss_sold_date_sk integer, ss_sold_time_sk integer, @@ -266,10 +254,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: web_sales; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.web_sales; -ERROR: syntax error at or near "EXITS" -LINE 1: DROP TABLE IF EXITS cte_bug.web_sales; - ^ +DROP TABLE IF EXISTS cte_bug.web_sales; CREATE TABLE cte_bug.web_sales ( ws_sold_date_sk integer, ws_sold_time_sk integer, diff --git a/src/test/regress/sql/tpcds_q04.sql b/src/test/regress/sql/tpcds_q04.sql index eaa50502e81..ea427b30076 100644 --- a/src/test/regress/sql/tpcds_q04.sql +++ b/src/test/regress/sql/tpcds_q04.sql @@ -19,7 +19,7 @@ SET default_table_access_method = ao_column; -- -- Name: catalog_sales; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.catalog_sales; +DROP TABLE IF EXISTS cte_bug.catalog_sales; CREATE TABLE cte_bug.catalog_sales ( cs_sold_date_sk integer, @@ -98,7 +98,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- Name: customer; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.customer; +DROP TABLE IF EXISTS cte_bug.customer; CREATE TABLE cte_bug.customer ( c_customer_sk integer NOT NULL, @@ -144,7 +144,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: date_dim; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.date_dim; +DROP TABLE IF EXISTS cte_bug.date_dim; CREATE TABLE cte_bug.date_dim ( d_date_sk integer NOT NULL, @@ -210,7 +210,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: store_sales; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.store_sales; +DROP TABLE IF EXISTS cte_bug.store_sales; CREATE TABLE cte_bug.store_sales ( ss_sold_date_sk integer, @@ -266,7 +266,7 @@ WITH (appendonly = true, orientation = column, compresstype=zstd, compresslevel= -- -- Name: web_sales; Type: TABLE; Schema: cte_bug; Owner: - -- -DROP TABLE IF EXITS cte_bug.web_sales; +DROP TABLE IF EXISTS cte_bug.web_sales; CREATE TABLE cte_bug.web_sales ( ws_sold_date_sk integer, From aa9eaedb24be3e5f15f270c5ce8309cfecd74fa0 Mon Sep 17 00:00:00 2001 From: Zhao Xi Date: Thu, 13 Nov 2025 10:54:40 +0800 Subject: [PATCH 201/260] In resource-constrained environments, 10TB-scale 8-parallel processing in cloudberry may encounter specific anomalies related to Motion layer UDP communication. Below are four key scenarios and how the code modifications address them. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four Anomaly Scenarios 1. Capacity Mismatch: The receiving end’s buffer becomes full, but the sender is unaware. As a result, the sender’s unacknowledged packet queue continues transmitting, leading to unnecessary retransmissions and packet drops. 2. False Deadlock Detection: The peer node processes heartbeat packets but fails to free up buffer capacity. This triggers a false deadlock judgment, incorrectly flagging network anomalies. 3. Unprocessed Packets Require Main Thread Wakeup: When the receive queue is full, incoming data packets are discarded. However, the main thread still needs to be awakened to process backlogged packets in the queue, preventing permanent stalling. 4. Execution Time Mismatch Across Nodes: Issues like data skew, computational performance gaps, or I/O bottlenecks cause significant differences in execution time between nodes. For example, in a hash join, if the inner table’s is not ready, the node cannot process data from other nodes, leading to packet timeouts. *Example Plan*: Packets from to (via ) timeout because the in remains unready, blocking packet processing. Code Modifications and Their Impact The code changes target the above scenarios by enhancing UDP communication feedback, adjusting deadlock checks, and ensuring proper thread wakeup. Key modifications: 1. Addressing Capacity Mismatch: - Added (256) to flag when the receive buffer is full. - When the receive queue is full (), a response with is sent to the sender (). This notifies the sender to pause or adjust transmission, preventing blind retransmissions. 2. Fixing False Deadlock Detection: - Modified to accept as a parameter, enabling ACK polling during deadlock checks. - Extended the initial timeout for deadlock suspicion from to 600 seconds, reducing premature network error reports. - If no response is received after 600 seconds, the buffer capacity is incrementally increased () to alleviate false bottlenecks, with detailed logging before triggering an error. 3. Ensuring Main Thread Wakeup on Full Queue: - In , even when packets are dropped due to a full queue, the main thread is awakened () if the packet matches the waiting query/node/route. This ensures backlogged packets in the queue are processed. 4. Mitigating Node Execution Mismatches: - Added logging for retransmissions after attempts, providing visibility into prolonged packet delays (e.g., due to unready ). - Reset after successful ACK polling, preventing excessive retry counts from triggering false timeouts. --- contrib/interconnect/udp/ic_udpifc.c | 79 +++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 12 deletions(-) diff --git a/contrib/interconnect/udp/ic_udpifc.c b/contrib/interconnect/udp/ic_udpifc.c index 548f71116c0..d11e4577cd6 100644 --- a/contrib/interconnect/udp/ic_udpifc.c +++ b/contrib/interconnect/udp/ic_udpifc.c @@ -209,6 +209,7 @@ int #define UDPIC_FLAGS_DISORDER (32) #define UDPIC_FLAGS_DUPLICATE (64) #define UDPIC_FLAGS_CAPACITY (128) +#define UDPIC_FLAGS_FULL (256) /* * ConnHtabBin @@ -835,7 +836,7 @@ static void initUdpManager(mudp_manager_t mptr); static inline void checkNetworkTimeout(ICBuffer *buf, uint64 now, bool *networkTimeoutIsLogged); static void checkExpiration(ChunkTransportState *transportStates, ChunkTransportStateEntry *pEntry, MotionConn *triggerConn, uint64 now); -static void checkDeadlock(ChunkTransportStateEntry *pChunkEntry, MotionConn *conn); +static void checkDeadlock(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChunkEntry, MotionConn *conn); static bool cacheFuturePacket(icpkthdr *pkt, struct sockaddr_storage *peer, int peer_len); static void cleanupStartupCache(void); @@ -5220,6 +5221,12 @@ handleAcks(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChun shouldSendBuffers |= (handleAckForDisorderPkt(transportStates, &pEntry->entry, &ackConn->mConn, pkt)); break; } + else if (pkt->flags & UDPIC_FLAGS_FULL) + { + if (DEBUG1 >= log_min_messages) + write_log("Recv buff is full [seq %d] from route %d; srcpid %d dstpid %d cmd %d flags 0x%x connseq %d", pkt->seq, ackConn->route, pkt->srcPid, pkt->dstPid, pkt->icId, pkt->flags, ackConn->conn_info.seq); + break; + } /* * don't get out of the loop if pkt->seq equals to @@ -6099,6 +6106,7 @@ checkExpiration(ChunkTransportState *transportStates, if (pollAcks(transportStates, pEntryUdp->txfd, wait_time)) { handleAcks(transportStates, pEntry, false); + curBuf->nRetry = 0; break; } @@ -6120,6 +6128,12 @@ checkExpiration(ChunkTransportState *transportStates, }; } + if (loop_ack > Gp_interconnect_min_retries_before_timeout / 5) + write_log("Resending packet (seq %d) to %s (pid %d cid %d) with %d retries in %lu seconds", + curBuf->pkt->seq, curBuf->conn->remoteHostAndPort, + curBuf->pkt->dstPid, curBuf->pkt->dstContentId, curBuf->nRetry, + (now - curBuf->sentTime) / 1000 / 1000); + currBuffConn = CONTAINER_OF(curBuf->conn, MotionConnUDP, mConn); retransmits++; @@ -6214,7 +6228,7 @@ checkExpiration(ChunkTransportState *transportStates, * */ static void -checkDeadlock(ChunkTransportStateEntry *pChunkEntry, MotionConn *mConn) +checkDeadlock(ChunkTransportState *transportStates, ChunkTransportStateEntry *pChunkEntry, MotionConn *mConn) { uint64 deadlockCheckTime; ChunkTransportStateEntryUDP *pEntry = NULL; @@ -6251,17 +6265,31 @@ checkDeadlock(ChunkTransportStateEntry *pChunkEntry, MotionConn *mConn) ic_control_info.lastDeadlockCheckTime = now; ic_statistics.statusQueryMsgNum++; + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE && pollAcks(transportStates, pEntry->txfd, 50)) + { + handleAcks(transportStates, pChunkEntry, false); + conn->deadlockCheckBeginTime = now; + } + /* check network error. */ - if ((now - conn->deadlockCheckBeginTime) > ((uint64) Gp_interconnect_transmit_timeout * 1000 * 1000)) + if ((now - conn->deadlockCheckBeginTime) > ((uint64) Gp_interconnect_transmit_timeout * 100 * 1000)) { - ereport(ERROR, - (errcode(ERRCODE_GP_INTERCONNECTION_ERROR), - errmsg("interconnect encountered a network error, please check your network"), - errdetail("Did not get any response from %s (pid %d cid %d) in %d seconds.", - conn->mConn.remoteHostAndPort, - conn->conn_info.dstPid, - conn->conn_info.dstContentId, - Gp_interconnect_transmit_timeout))); + write_log("Did not get any response from %s (pid %d cid %d) in 600 seconds.",conn->mConn.remoteHostAndPort, + conn->conn_info.dstPid, + conn->conn_info.dstContentId); + + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER) + conn->capacity += 1; + + if ((now - conn->deadlockCheckBeginTime) > ((uint64) Gp_interconnect_transmit_timeout * 1000 * 1000)) + ereport(ERROR, + (errcode(ERRCODE_GP_INTERCONNECTION_ERROR), + errmsg("interconnect encountered a network error, please check your network"), + errdetail("Did not get any response from %s (pid %d cid %d) in %d seconds.", + conn->mConn.remoteHostAndPort, + conn->conn_info.dstPid, + conn->conn_info.dstContentId, + Gp_interconnect_transmit_timeout))); } } } @@ -6393,7 +6421,7 @@ checkExceptions(ChunkTransportState *transportStates, if ((retry & 0x3) == 2) { - checkDeadlock(pEntry, conn); + checkDeadlock(transportStates, pEntry, conn); checkRxThreadError(); ML_CHECK_FOR_INTERRUPTS(transportStates->teardownActive); } @@ -6543,6 +6571,9 @@ SendChunkUDPIFC(ChunkTransportState *transportStates, } checkExceptions(transportStates, &pEntry->entry, &conn->mConn, retry++, timeout); doCheckExpiration = false; + + if (!doCheckExpiration && icBufferListLength(&conn->unackQueue) == 0 && conn->capacity > 0 && icBufferListLength(&conn->sndQueue) > 0) + sendBuffers(transportStates, &pEntry->entry, &conn->mConn); } conn->mConn.pBuff = (uint8 *) conn->curBuff->pkt; @@ -7136,6 +7167,30 @@ handleDataPacket(MotionConn *mConn, icpkthdr *pkt, struct sockaddr_storage *peer logPkt("Interconnect error: received a packet when the queue is full ", pkt); ic_statistics.disorderedPktNum++; conn->stat_count_dropped++; + + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER && rx_control_info.mainWaitingState.waiting && + rx_control_info.mainWaitingState.waitingNode == pkt->motNodeId && + rx_control_info.mainWaitingState.waitingQuery == pkt->icId) + { + if (rx_control_info.mainWaitingState.waitingRoute == ANY_ROUTE) + { + if (rx_control_info.mainWaitingState.reachRoute == ANY_ROUTE) + rx_control_info.mainWaitingState.reachRoute = conn->route; + } + else if (rx_control_info.mainWaitingState.waitingRoute == conn->route) + { + if (DEBUG2 >= log_min_messages) + write_log("rx thread: main_waiting waking it route %d", rx_control_info.mainWaitingState.waitingRoute); + rx_control_info.mainWaitingState.reachRoute = conn->route; + } + /* WAKE MAIN THREAD HERE */ + *wakeup_mainthread = true; + } + + if (Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE) + { + setAckSendParam(param, &conn->mConn, UDPIC_FLAGS_FULL, conn->conn_info.seq - 1, conn->conn_info.extraSeq); + } return false; } From 1ea1172b8097266c01ff2a0b193c3b377390c671 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Thu, 11 Sep 2025 15:20:36 +0800 Subject: [PATCH 202/260] Doc: update the Cloudberry branding in PAX tests This commit is used to rename the old brand to the new one in the PAX test SQL files. --- .../src/test/regress/expected/limit.out | 2 +- .../test/regress/expected/limit_optimizer.out | 2 +- .../src/test/regress/expected/qp_misc.out | 12 ++++++------ .../regress/expected/qp_misc_rio_join_small.out | 6 +++--- .../pax_storage/src/test/regress/sql/limit.sql | 2 +- .../pax_storage/src/test/regress/sql/qp_misc.sql | 16 ++++++++-------- .../test/regress/sql/qp_misc_rio_join_small.sql | 8 ++++---- .../src/test/regress/sql/tidrangescan.sql | 2 +- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/contrib/pax_storage/src/test/regress/expected/limit.out b/contrib/pax_storage/src/test/regress/expected/limit.out index 4b6e5e1f0a6..b03d00ce77e 100644 --- a/contrib/pax_storage/src/test/regress/expected/limit.out +++ b/contrib/pax_storage/src/test/regress/expected/limit.out @@ -131,7 +131,7 @@ select * from int8_tbl offset (case when random() < 0.5 then null::bigint end); (5 rows) -- Test assorted cases involving backwards fetch from a LIMIT plan node --- Disable backward scan test which is not supported in this version of Cloudberry Database +-- Disable backward scan test which is not supported in this version of Apache Cloudberry --start_ignore /* * begin; diff --git a/contrib/pax_storage/src/test/regress/expected/limit_optimizer.out b/contrib/pax_storage/src/test/regress/expected/limit_optimizer.out index dea74df2b5d..4892a3bb414 100644 --- a/contrib/pax_storage/src/test/regress/expected/limit_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/limit_optimizer.out @@ -131,7 +131,7 @@ select * from int8_tbl offset (case when random() < 0.5 then null::bigint end); (5 rows) -- Test assorted cases involving backwards fetch from a LIMIT plan node --- Disable backward scan test which is not supported in this version of Cloudberry Database +-- Disable backward scan test which is not supported in this version of Apache Cloudberry --start_ignore /* * begin; diff --git a/contrib/pax_storage/src/test/regress/expected/qp_misc.out b/contrib/pax_storage/src/test/regress/expected/qp_misc.out index 5dbf5419ad6..28adde90fe9 100644 --- a/contrib/pax_storage/src/test/regress/expected/qp_misc.out +++ b/contrib/pax_storage/src/test/regress/expected/qp_misc.out @@ -745,7 +745,7 @@ f1,f2,f3 -- SubqueryInCase_p1 -- test expected to fail until function supported in GPDB --- GPDB Limitation ERROR: Cloudberry Database does not yet support that query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support that query. DETAIL: The query contains a multi-row subquery. select 'SubqueryInCase_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1,f2,f3, count(*) c from ( @@ -848,7 +848,7 @@ f1,f2,f3 -- SubqueryPredicateNotIn_p1 -- test expected to fail until function supported in GPDB --- GPDB Limitation ERROR: Cloudberry Database does not yet support that query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support that query. DETAIL: The query contains a multi-row subquery. select 'SubqueryPredicateNotIn_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1,f2,f3, count(*) c from ( @@ -923,7 +923,7 @@ f1,f2,f3 -- SubqueryQuantifiedPredicateEmpty_p1 -- test expected to fail until GPDB support this function --- GPDB Limitation ERROR: Cloudberry Database does not yet support this query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support this query. DETAIL: The query contains a multi-row subquery. select 'SubqueryQuantifiedPredicateEmpty_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1,f2,f3, count(*) c from ( @@ -943,7 +943,7 @@ f1,f2,f3 -- SubqueryQuantifiedPredicateLarge_p1 -- test expected to fail until GPDB supports this function --- GPDB Limitation ERROR: Cloudberry Database does not yet support that query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support that query. DETAIL: The query contains a multi-row subquery. select 'SubqueryQuantifiedPredicateLarge_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1,f2,f3, count(*) c from ( @@ -2732,7 +2732,7 @@ f1 -- SubqueryQuantifiedPredicateNull_gp_p1 -- test expected to fail until GPDB support function --- GPDB Limitation ERROR: Cloudberry Database does not yet support this query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support this query. DETAIL: The query contains a multi-row subquery. select 'SubqueryQuantifiedPredicateNull_gp_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1, count(*) c from ( @@ -2749,7 +2749,7 @@ f1 -- SubqueryQuantifiedPredicateSmall_gp_p1 -- test expected to fail until GPDB supports function --- GPDB Limitation ERROR: Cloudberry Database does not yet support this query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support this query. DETAIL: The query contains a multi-row subquery. select 'SubqueryQuantifiedPredicateSmall_gp_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1, count(*) c from ( diff --git a/contrib/pax_storage/src/test/regress/expected/qp_misc_rio_join_small.out b/contrib/pax_storage/src/test/regress/expected/qp_misc_rio_join_small.out index 9c38612fbcd..334180e2645 100644 --- a/contrib/pax_storage/src/test/regress/expected/qp_misc_rio_join_small.out +++ b/contrib/pax_storage/src/test/regress/expected/qp_misc_rio_join_small.out @@ -31,10 +31,10 @@ CREATE TABLE my_tt_agg_small ( -- COPY my_tt_agg_small (symbol, event_ts, trade_price, trade_volume) FROM stdin; -- --- Cloudberry Database database dump complete +-- Apache Cloudberry database dump complete -- -- --- Cloudberry Database database dump +-- Apache Cloudberry database dump -- -- -- Name: my_tq_agg_small; Type: TABLE; Schema: public; Tablespace: @@ -55,7 +55,7 @@ COPY my_tq_agg_small (ets, sym, bid_price, ask_price, end_ts) FROM stdin; -- CREATE INDEX my_tq_agg_small_ets_end_ts_ix ON my_tq_agg_small USING btree (ets, end_ts); -- --- Cloudberry Database database dump complete +-- Apache Cloudberry database dump complete -- set enable_hashjoin=off; create index my_tt_agg_small_event_ts_ix on my_tt_agg_small(event_ts); diff --git a/contrib/pax_storage/src/test/regress/sql/limit.sql b/contrib/pax_storage/src/test/regress/sql/limit.sql index e47b3f9bf29..ab44f3b5e36 100644 --- a/contrib/pax_storage/src/test/regress/sql/limit.sql +++ b/contrib/pax_storage/src/test/regress/sql/limit.sql @@ -37,7 +37,7 @@ select * from int8_tbl limit (case when random() < 0.5 then null::bigint end); select * from int8_tbl offset (case when random() < 0.5 then null::bigint end); -- Test assorted cases involving backwards fetch from a LIMIT plan node --- Disable backward scan test which is not supported in this version of Cloudberry Database +-- Disable backward scan test which is not supported in this version of Apache Cloudberry --start_ignore /* * begin; diff --git a/contrib/pax_storage/src/test/regress/sql/qp_misc.sql b/contrib/pax_storage/src/test/regress/sql/qp_misc.sql index 7aacbfd5268..3d4e81761b3 100644 --- a/contrib/pax_storage/src/test/regress/sql/qp_misc.sql +++ b/contrib/pax_storage/src/test/regress/sql/qp_misc.sql @@ -1,6 +1,6 @@ -- start_ignore -- --- Cloudberry Database database dump +-- Apache Cloudberry database dump -- SET client_encoding = 'UTF8'; @@ -1153,7 +1153,7 @@ ALTER TABLE ONLY tclob ADD CONSTRAINT clobpk PRIMARY KEY (rnum); -- --- Cloudberry Database database dump complete +-- Apache Cloudberry database dump complete -- -- end_ignore @@ -1379,7 +1379,7 @@ f1,f2,f3 ) Q ) P; -- SubqueryInCase_p1 -- test expected to fail until function supported in GPDB --- GPDB Limitation ERROR: Cloudberry Database does not yet support that query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support that query. DETAIL: The query contains a multi-row subquery. select 'SubqueryInCase_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1,f2,f3, count(*) c from ( @@ -1452,7 +1452,7 @@ f1,f2,f3 ) Q ) P; -- SubqueryPredicateNotIn_p1 -- test expected to fail until function supported in GPDB --- GPDB Limitation ERROR: Cloudberry Database does not yet support that query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support that query. DETAIL: The query contains a multi-row subquery. select 'SubqueryPredicateNotIn_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1,f2,f3, count(*) c from ( @@ -1507,7 +1507,7 @@ f1,f2,f3 ) Q ) P; -- SubqueryQuantifiedPredicateEmpty_p1 -- test expected to fail until GPDB support this function --- GPDB Limitation ERROR: Cloudberry Database does not yet support this query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support this query. DETAIL: The query contains a multi-row subquery. select 'SubqueryQuantifiedPredicateEmpty_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1,f2,f3, count(*) c from ( @@ -1522,7 +1522,7 @@ f1,f2,f3 ) Q ) P; -- SubqueryQuantifiedPredicateLarge_p1 -- test expected to fail until GPDB supports this function --- GPDB Limitation ERROR: Cloudberry Database does not yet support that query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support that query. DETAIL: The query contains a multi-row subquery. select 'SubqueryQuantifiedPredicateLarge_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1,f2,f3, count(*) c from ( @@ -2801,7 +2801,7 @@ f1 ) Q ) P; -- SubqueryQuantifiedPredicateNull_gp_p1 -- test expected to fail until GPDB support function --- GPDB Limitation ERROR: Cloudberry Database does not yet support this query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support this query. DETAIL: The query contains a multi-row subquery. select 'SubqueryQuantifiedPredicateNull_gp_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1, count(*) c from ( @@ -2813,7 +2813,7 @@ f1 ) Q ) P; -- SubqueryQuantifiedPredicateSmall_gp_p1 -- test expected to fail until GPDB supports function --- GPDB Limitation ERROR: Cloudberry Database does not yet support this query. DETAIL: The query contains a multi-row subquery. +-- GPDB Limitation ERROR: Apache Cloudberry does not yet support this query. DETAIL: The query contains a multi-row subquery. select 'SubqueryQuantifiedPredicateSmall_gp_p1' test_name_part, case when c = 1 then 1 else 0 end pass_ind from ( select count(distinct c) c from ( select f1, count(*) c from ( diff --git a/contrib/pax_storage/src/test/regress/sql/qp_misc_rio_join_small.sql b/contrib/pax_storage/src/test/regress/sql/qp_misc_rio_join_small.sql index bd20eedc202..0ababb42098 100644 --- a/contrib/pax_storage/src/test/regress/sql/qp_misc_rio_join_small.sql +++ b/contrib/pax_storage/src/test/regress/sql/qp_misc_rio_join_small.sql @@ -5,7 +5,7 @@ drop index if exists my_tt_agg_small_event_ts_ix; -- --- Cloudberry Database database dump +-- Apache Cloudberry database dump -- SET client_encoding = 'UTF8'; @@ -4042,11 +4042,11 @@ SSO 20101126114705550 415500 200 \. -- --- Cloudberry Database database dump complete +-- Apache Cloudberry database dump complete -- -- --- Cloudberry Database database dump +-- Apache Cloudberry database dump -- -- @@ -24078,7 +24078,7 @@ CREATE INDEX my_tq_agg_small_ets_end_ts_ix ON my_tq_agg_small USING btree (ets, -- --- Cloudberry Database database dump complete +-- Apache Cloudberry database dump complete -- set enable_hashjoin=off; diff --git a/contrib/pax_storage/src/test/regress/sql/tidrangescan.sql b/contrib/pax_storage/src/test/regress/sql/tidrangescan.sql index 562ec68a792..0f7a99a040c 100644 --- a/contrib/pax_storage/src/test/regress/sql/tidrangescan.sql +++ b/contrib/pax_storage/src/test/regress/sql/tidrangescan.sql @@ -97,7 +97,7 @@ DECLARE c SCROLL CURSOR FOR SELECT ctid FROM tidrangescan WHERE ctid < '(1,0)'; FETCH NEXT c; FETCH NEXT c; --start_ignore -/* backward scan is not supported in this version of Cloudberry Database */ +/* backward scan is not supported in this version of Apache Cloudberry */ /* FETCH PRIOR c; FETCH FIRST c; From 4543319e33b8eb526a9081364f0e4043f18929f4 Mon Sep 17 00:00:00 2001 From: zhangwenchao <656540940@qq.com> Date: Mon, 17 Nov 2025 15:15:35 +0800 Subject: [PATCH 203/260] Fix analyze paritioned table in somecase will coredump. Fix leaf_parts_analyzed will return false directly without execute analyze when reltuples is 0 and relpages is 0 that means the table is an empty partition table. Authored-by: Zhang Wenchao --- src/backend/commands/analyzeutils.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/commands/analyzeutils.c b/src/backend/commands/analyzeutils.c index c0d048c9a64..c4f9fa5dedb 100644 --- a/src/backend/commands/analyzeutils.c +++ b/src/backend/commands/analyzeutils.c @@ -1252,9 +1252,10 @@ leaf_parts_analyzed(Oid attrelid, Oid relid_exclude, List *va_cols, int elevel) continue; float4 relTuples = get_rel_reltuples(partRelid); + int32 relpages = get_rel_relpages(partRelid); /* Partition is not analyzed */ - if (relTuples < 0.0) + if (relTuples < 0.0 || (relTuples == 0.0 && relpages == 0)) { if (relid_exclude == InvalidOid) ereport(elevel, From 9ffef19327da6379525b43d04f897b75ac30bc6f Mon Sep 17 00:00:00 2001 From: kongfanshen Date: Fri, 31 Oct 2025 16:36:56 +0800 Subject: [PATCH 204/260] Fix: tde encrypt buffer context don't use share memory Now we Fix: tde encrypt buffer context don't use share memory We did not calculate the size of shared memory for BufEncCtx and BufDecCtx in the CreateSharedMemoryAndMemories function, which is a potential issue. There is actually no need to use shared memory here, as the parent process does not read the values of BufEncCtx and BufDecCtx. When we use AES algorithm the BufEncCtx and BufDecCtx also does not use shared memory. In order to maintain a consistent code style,we use malloc. cann't use palloc to apply for memory here, as TopmemoryContext is NULL during initialization and the memoryContext has not been setted yet. --- src/backend/crypto/bufenc.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/backend/crypto/bufenc.c b/src/backend/crypto/bufenc.c index 4e6f244c879..2c390618a7e 100644 --- a/src/backend/crypto/bufenc.c +++ b/src/backend/crypto/bufenc.c @@ -36,6 +36,8 @@ static unsigned char buf_encryption_iv[BUFENC_IV_SIZE]; void *BufEncCtx = NULL; void *BufDecCtx = NULL; +static sm4_ctx sm4_enc_ctx; +static sm4_ctx sm4_dec_ctx; static void set_buffer_encryption_iv(Page page, BlockNumber blkno); @@ -47,16 +49,28 @@ InitializeBufferEncryption(void) if (!FileEncryptionEnabled) return; + /* + * To avoid memory leaks, when the postmaster resets the cluster, + * need to release the memory which was alloced at last time. + */ + if (BufEncCtx && BufEncCtx != &sm4_enc_ctx) + { + pg_cipher_ctx_free(BufEncCtx); + BufEncCtx = NULL; + } + if (BufDecCtx && BufDecCtx != &sm4_dec_ctx) + { + pg_cipher_ctx_free(BufDecCtx); + BufDecCtx = NULL; + } + key = KmgrGetKey(KMGR_KEY_ID_REL); if (CheckIsSM4Method()) { - bool found; - BufEncCtx = ShmemInitStruct("sm4 encryption method encrypt ctx", - sizeof(sm4_ctx), &found); + BufEncCtx = &sm4_enc_ctx; + BufDecCtx = &sm4_dec_ctx; - BufDecCtx = ShmemInitStruct("sm4 encryption method decrypt ctx", - sizeof(sm4_ctx), &found); sm4_ofb_setkey_enc((sm4_ctx *)BufEncCtx, (unsigned char *)key->key); sm4_ofb_setkey_dec((sm4_ctx *)BufDecCtx, (unsigned char *)key->key); } From c5dbacda161a71ca3352bfa1f125f22aeaf9e78f Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Tue, 14 Oct 2025 17:01:05 +0800 Subject: [PATCH 205/260] Initial: squash cloudberry-bootcamp into devops/sandbox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit imports only the essential apache/cloudberry-bootcamp repo assets (000-Cloudberry Sandbox) into the current repo under the devops/sandbox/ directory. Non-essential content such as tutorials (101–104), documentation, and large binary assets are excluded from this import to keep the repository lightweight and focused on the Sandbox deployment. This import is squashed into a single commit to provide a clean baseline for subsequent sandbox configuration and cleanup. initial commit: https://github.com/apache/cloudberry-bootcamp/commit/f7531936d5784d5710b76fe7635f217d7df65269 See: https://lists.apache.org/thread/p6otyrrnosg8fsbyr6ok7hl8wxpx4ss2 Original contributors information are as follows: Co-authored-by: Ed Espino Co-authored-by: Antonio Petrole Co-authored-by: Liang Chen Co-authored-by: Ryan Wei Co-authored-by: Fenggang Wang Co-authored-by: TomShawn Co-authored-by: Dianjin Wang --- devops/sandbox/000-cbdb-sandbox/.env | 2 + .../Dockerfile.RELEASE.rockylinux9 | 155 ++++++++++++++++ .../Dockerfile.main.rockylinux9 | 160 ++++++++++++++++ devops/sandbox/000-cbdb-sandbox/README.md | 171 ++++++++++++++++++ .../configs/90-cbdb-limits.conf | 10 + .../configs/90-cbdb-sysctl.conf | 35 ++++ .../configs/gpinitsystem_multinode | 119 ++++++++++++ .../configs/gpinitsystem_singlenode | 121 +++++++++++++ .../000-cbdb-sandbox/configs/init_system.sh | 130 +++++++++++++ .../configs/multinode-gpinit-hosts | 2 + .../docker-compose-rockylinux9.yml | 45 +++++ devops/sandbox/000-cbdb-sandbox/run.sh | 139 ++++++++++++++ devops/sandbox/images/sandbox-deployment.jpg | Bin 0 -> 143855 bytes 13 files changed, 1089 insertions(+) create mode 100644 devops/sandbox/000-cbdb-sandbox/.env create mode 100644 devops/sandbox/000-cbdb-sandbox/Dockerfile.RELEASE.rockylinux9 create mode 100644 devops/sandbox/000-cbdb-sandbox/Dockerfile.main.rockylinux9 create mode 100644 devops/sandbox/000-cbdb-sandbox/README.md create mode 100644 devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-limits.conf create mode 100644 devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-sysctl.conf create mode 100644 devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_multinode create mode 100644 devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_singlenode create mode 100755 devops/sandbox/000-cbdb-sandbox/configs/init_system.sh create mode 100644 devops/sandbox/000-cbdb-sandbox/configs/multinode-gpinit-hosts create mode 100644 devops/sandbox/000-cbdb-sandbox/docker-compose-rockylinux9.yml create mode 100755 devops/sandbox/000-cbdb-sandbox/run.sh create mode 100644 devops/sandbox/images/sandbox-deployment.jpg diff --git a/devops/sandbox/000-cbdb-sandbox/.env b/devops/sandbox/000-cbdb-sandbox/.env new file mode 100644 index 00000000000..5f1596515d2 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/.env @@ -0,0 +1,2 @@ +CODEBASE_VERSION=1.6.0 +OS_VERSION=rockylinux9 diff --git a/devops/sandbox/000-cbdb-sandbox/Dockerfile.RELEASE.rockylinux9 b/devops/sandbox/000-cbdb-sandbox/Dockerfile.RELEASE.rockylinux9 new file mode 100644 index 00000000000..948bbfa7986 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/Dockerfile.RELEASE.rockylinux9 @@ -0,0 +1,155 @@ +FROM rockylinux/rockylinux:9 + +ARG CODEBASE_VERSION_VAR=${CODEBASE_VERSION_VAR} +ARG TIMEZONE_VAR="Asia/Shanghai" + +ENV container=docker +ENV MULTINODE=false + +RUN dnf update -y && \ + dnf install -y systemd \ + systemd-libs && \ + dnf clean all + +# Clean up unnecessary systemd units +RUN [ -d /lib/systemd/system/sysinit.target.wants ] && find /lib/systemd/system/sysinit.target.wants/ -type l -not -name 'systemd-tmpfiles-setup.service' -delete || echo "Directory /lib/systemd/system/sysinit.target.wants does not exist" && \ + [ -d /lib/systemd/system/multi-user.target.wants ] && find /lib/systemd/system/multi-user.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/multi-user.target.wants does not exist" && \ + find /etc/systemd/system/*.wants/ -type l -delete || echo "Directory /etc/systemd/system/*.wants does not exist" && \ + [ -d /lib/systemd/system/local-fs.target.wants ] && find /lib/systemd/system/local-fs.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/local-fs.target.wants does not exist" && \ + [ -d /lib/systemd/system/sockets.target.wants ] && find /lib/systemd/system/sockets.target.wants/ -type l -not -name '*udev*' -delete || echo "Directory /lib/systemd/system/sockets.target.wants does not exist" && \ + [ -d /lib/systemd/system/basic.target.wants ] && find /lib/systemd/system/basic.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/basic.target.wants does not exist" && \ + [ -d /lib/systemd/system/anaconda.target.wants ] && find /lib/systemd/system/anaconda.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/anaconda.target.wants does not exist" + +COPY ./configs/* /tmp/ + +RUN echo root:cbdb@123 | chpasswd && \ + dnf makecache && \ + dnf install -y yum-utils \ + epel-release \ + git && \ + yum-config-manager --disable epel-cisco-openh264 && \ + dnf makecache && \ + yum-config-manager --disable epel && \ + dnf install -y --enablerepo=epel \ + the_silver_searcher \ + bat \ + htop && \ + dnf install -y bison \ + cmake3 \ + ed \ + flex \ + gcc \ + gcc-c++ \ + glibc-langpack-en \ + go \ + initscripts \ + iproute \ + less \ + m4 \ + net-tools \ + openssh-clients \ + openssh-server \ + passwd \ + perl \ + rsync \ + sudo \ + tar \ + unzip \ + util-linux-ng \ + wget \ + sshpass \ + which && \ + dnf install -y apr-devel \ + bzip2-devel \ + krb5-devel \ + libcurl-devel \ + libevent-devel \ + libxml2-devel \ + libzstd-devel \ + openldap-devel \ + openssl-devel \ + pam-devel \ + perl-ExtUtils-Embed \ + perl-Test-Simple \ + perl-core \ + python3-devel \ + readline-devel \ + zlib-devel && \ + dnf install -y --enablerepo=crb \ + libuv-devel \ + libyaml-devel \ + perl-IPC-Run && \ + dnf install -y --enablerepo=epel \ + xerces-c-devel + +RUN cp /tmp/90-cbdb-sysctl.conf /etc/sysctl.conf && \ + cp /tmp/90-cbdb-limits.conf /etc/security/limits.d/90-cbdb-limits.conf && \ + cat /usr/share/zoneinfo/${TIMEZONE_VAR} > /etc/localtime && \ + echo "cdw" > /tmp/gpdb-hosts && \ + echo "/usr/local/lib" >> /etc/ld.so.conf && \ + echo "/usr/local/lib64" >> /etc/ld.so.conf && \ + ldconfig && \ + chmod 777 /tmp/gpinitsystem_singlenode && \ + chmod 777 /tmp/init_system.sh && \ + hostname > ~/orig_hostname && \ + /usr/sbin/groupadd gpadmin && \ + /usr/sbin/useradd gpadmin -g gpadmin -G wheel && \ + setcap cap_net_raw+ep /usr/bin/ping && \ + echo "cbdb@123"|passwd --stdin gpadmin && \ + echo "gpadmin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ + echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ + echo "export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1" >> /home/gpadmin/.bashrc && \ + echo "source /usr/local/cloudberry-db/greenplum_path.sh" >> /home/gpadmin/.bashrc && \ + mkdir -p /data0/database/coordinator /data0/database/primary /data0/database/mirror && \ + chown -R gpadmin:gpadmin /data0 && \ + ssh-keygen -A && \ + echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config + +RUN cd /tmp/ && \ + unzip -d /tmp /tmp/cloudberrydb-${CODEBASE_VERSION_VAR}.zip && \ + mv /tmp/cloudberrydb-${CODEBASE_VERSION_VAR} /tmp/cloudberry + +RUN cd /tmp/cloudberry && \ + ./configure --prefix=/usr/local/cloudberry-db \ + --enable-cassert \ + --enable-debug-extensions \ + --enable-ic-proxy \ + --enable-mapreduce \ + --enable-orafce \ + --enable-orca \ + --enable-pxf \ + --enable-tap-tests \ + --with-gssapi \ + --with-ldap \ + --with-libxml \ + --with-openssl \ + --with-pam \ + --with-perl \ + --with-pgport=5432 \ + --with-python \ + --with-pythonsrc-ext + +RUN cd /tmp/cloudberry && \ + make -j$(nproc) && \ + make install + +RUN cd /tmp/cloudberry/contrib && \ + make -j$(nproc) && \ + make install + +# ---------------------------------------------------------------------- +# Set the Default User and Command +# ---------------------------------------------------------------------- +# The default user is set to 'gpadmin', and the container starts by +# running the init_system.sh script. This container serves as a base +# environment, and the Apache Cloudberry RPM can be installed for +# testing and functional verification. +# ---------------------------------------------------------------------- +USER gpadmin +ENV USER=gpadmin +WORKDIR /home/gpadmin + +EXPOSE 5432 22 + +VOLUME [ "/sys/fs/cgroup" ] +CMD ["bash","-c","/tmp/init_system.sh"] diff --git a/devops/sandbox/000-cbdb-sandbox/Dockerfile.main.rockylinux9 b/devops/sandbox/000-cbdb-sandbox/Dockerfile.main.rockylinux9 new file mode 100644 index 00000000000..2073ebcb2a6 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/Dockerfile.main.rockylinux9 @@ -0,0 +1,160 @@ +FROM rockylinux/rockylinux:9 + +# Argument for configuring the timezone +ARG TIMEZONE_VAR="America/Los_Angeles" + +# Environment variables +ENV container=docker +ENV MULTINODE=false + +RUN dnf update -y && \ + dnf install -y systemd \ + systemd-libs && \ + dnf clean all + +# Clean up unnecessary systemd units +RUN [ -d /lib/systemd/system/sysinit.target.wants ] && find /lib/systemd/system/sysinit.target.wants/ -type l -not -name 'systemd-tmpfiles-setup.service' -delete || echo "Directory /lib/systemd/system/sysinit.target.wants does not exist" && \ + [ -d /lib/systemd/system/multi-user.target.wants ] && find /lib/systemd/system/multi-user.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/multi-user.target.wants does not exist" && \ + find /etc/systemd/system/*.wants/ -type l -delete || echo "Directory /etc/systemd/system/*.wants does not exist" && \ + [ -d /lib/systemd/system/local-fs.target.wants ] && find /lib/systemd/system/local-fs.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/local-fs.target.wants does not exist" && \ + [ -d /lib/systemd/system/sockets.target.wants ] && find /lib/systemd/system/sockets.target.wants/ -type l -not -name '*udev*' -delete || echo "Directory /lib/systemd/system/sockets.target.wants does not exist" && \ + [ -d /lib/systemd/system/basic.target.wants ] && find /lib/systemd/system/basic.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/basic.target.wants does not exist" && \ + [ -d /lib/systemd/system/anaconda.target.wants ] && find /lib/systemd/system/anaconda.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/anaconda.target.wants does not exist" + +COPY ./configs/* /tmp/ + +RUN dnf makecache && \ + dnf install -y yum-utils \ + epel-release \ + git && \ + yum-config-manager --disable epel-cisco-openh264 && \ + dnf makecache && \ + yum-config-manager --disable epel && \ + dnf install -y --enablerepo=epel \ + the_silver_searcher \ + bat \ + htop && \ + dnf install -y bison \ + cmake3 \ + ed \ + flex \ + gcc \ + gcc-c++ \ + glibc-langpack-en \ + go \ + initscripts \ + iproute \ + less \ + m4 \ + net-tools \ + openssh-clients \ + openssh-server \ + passwd \ + perl \ + rsync \ + sudo \ + tar \ + unzip \ + util-linux-ng \ + wget \ + sshpass \ + which && \ + dnf install -y apr-devel \ + bzip2-devel \ + krb5-devel \ + libcurl-devel \ + libevent-devel \ + libxml2-devel \ + libuuid-devel \ + libzstd-devel \ + lz4-devel \ + openldap-devel \ + openssl-devel \ + pam-devel \ + perl-ExtUtils-Embed \ + perl-Test-Simple \ + perl-core \ + python3-devel \ + readline-devel \ + zlib-devel && \ + dnf install -y --enablerepo=crb \ + libuv-devel \ + libyaml-devel \ + protobuf-devel \ + perl-IPC-Run && \ + dnf install -y --enablerepo=epel \ + xerces-c-devel + +RUN cp /tmp/90-cbdb-sysctl.conf /etc/sysctl.conf && \ + cp /tmp/90-cbdb-limits.conf /etc/security/limits.d/90-cbdb-limits.conf && \ + cat /usr/share/zoneinfo/${TIMEZONE_VAR} > /etc/localtime && \ + echo "cdw" > /tmp/gpdb-hosts && \ + echo "/usr/local/lib" >> /etc/ld.so.conf && \ + echo "/usr/local/lib64" >> /etc/ld.so.conf && \ + ldconfig && \ + chmod 777 /tmp/gpinitsystem_singlenode && \ + chmod 777 /tmp/init_system.sh && \ + hostname > ~/orig_hostname && \ + /usr/sbin/groupadd gpadmin && \ + /usr/sbin/useradd gpadmin -g gpadmin -G wheel && \ + setcap cap_net_raw+ep /usr/bin/ping && \ + echo "cbdb@123"|passwd --stdin gpadmin && \ + echo "gpadmin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ + echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ + echo "export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1" >> /home/gpadmin/.bashrc && \ + echo "source /usr/local/cloudberry-db/greenplum_path.sh" >> /home/gpadmin/.bashrc && \ + mkdir -p /data0/database/coordinator /data0/database/primary /data0/database/mirror && \ + chown -R gpadmin:gpadmin /data0 && \ + ssh-keygen -A && \ + echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config + +RUN cd /tmp/ && \ + git clone --recurse-submodules --branch main --single-branch --depth=1 https://github.com/apache/cloudberry.git + +RUN cd /tmp/cloudberry && \ + ./configure --prefix=/usr/local/cloudberry-db \ + --enable-cassert \ + --enable-debug-extensions \ + --enable-gpcloud \ + --enable-ic-proxy \ + --enable-mapreduce \ + --enable-orafce \ + --enable-orca \ + --enable-pax \ + --enable-pxf \ + --enable-tap-tests \ + --with-gssapi \ + --with-ldap \ + --with-libxml \ + --with-lz4 \ + --with-openssl \ + --with-pam \ + --with-perl \ + --with-pgport=5432 \ + --with-python \ + --with-pythonsrc-ext + +RUN cd /tmp/cloudberry && \ + make -j$(nproc) && \ + make install + +RUN cd /tmp/cloudberry/contrib && \ + make -j$(nproc) && \ + make install + +# ---------------------------------------------------------------------- +# Set the Default User and Command +# ---------------------------------------------------------------------- +# The default user is set to 'gpadmin', and the container starts by +# running the init_system.sh script. This container serves as a base +# environment, and the Apache Cloudberry RPM can be installed for +# testing and functional verification. +# ---------------------------------------------------------------------- +USER gpadmin +ENV USER=gpadmin +WORKDIR /home/gpadmin + +EXPOSE 5432 22 + +VOLUME [ "/sys/fs/cgroup" ] +CMD ["bash","-c","/tmp/init_system.sh"] diff --git a/devops/sandbox/000-cbdb-sandbox/README.md b/devops/sandbox/000-cbdb-sandbox/README.md new file mode 100644 index 00000000000..b8e0043c574 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/README.md @@ -0,0 +1,171 @@ +--- +title: Sandbox of Apache Cloudberry +--- + +# Install Apache Cloudberry With Docker + +This document guides you on how to quickly set up and connect to a Apache Cloudberry in a Docker environment. You can try out Apache Cloudberry by performing some basic operations and running SQL commands. + +> [!WARNING] +> This guide is intended for testing or development. DO NOT use it for production. + + +## Prerequisites + +Make sure that your environment meets the following requirements: + +- Platform requirement: Any platform with Docker runtime. For details, refer to [Get Started with Docker](https://www.docker.com/get-started/). +- Other dependencies: Git, SSH, and internet connection + +## Build the Sandbox + +When building and deploying Cloudberry in Docker, you will have 2 different deployment options as well as different build options. + +**Deployment Options** +1. **Single Container** (Default) - With the single container option, you will have the coordinator as well as the Cloudberry segments all running on a single container. This is the default behavior when deploying using the `run.sh` script provided. +2. **Multi-Container** - Deploying with the multi-container option will give you a more realistic deployment of what actual production Cloudberry clusters look like. With multi-node, you will have the coordinator, the standby coordinator, and 2 segment hosts all on their own respective containers. This is to both highlight the distributed nature of Apache Cloudberry as well as highlight how high availability (HA) features work in the event of a server (or in this case a container) failing. This is enabled by passing the -m flag to the `run.sh` script which will be highlighted below. + +![cloudberry Sandbox Deployments](../images/sandbox-deployment.jpg) + +**Build Options** + +1. Compile with the source code of the latest Apache Cloudberry (released in [Apache Cloudberry Release Page](https://github.com/apache/cloudberry/releases)). The base OS will be Rocky Linux 9 Docker image. +2. Method 2 - Compile with the latest Apache Cloudberry [main](https://github.com/apache/cloudberry/tree/main) branch. The base OS will be Rocky Linux 9 Docker image. + +Build and deploy steps: + +1. Start Docker Desktop and make sure it is running properly on your host platform. + +2. Download this repository (which is [apache/cloudberry-bootcamp](https://github.com/apache/cloudberry-bootcamp)) to the target machine. + + ```shell + git clone https://github.com/apache/cloudberry-bootcamp.git + ``` + +3. Enter the repository and run the `run.sh` script to start the Docker container. This will start the automatic installation process. Depending on your environment, you may need to run this with 'sudo' command. + + - For latest Cloudberry DB release running on a single container + + ```shell + cd bootcamp/000-cbdb-sandbox + ./run.sh + ``` + - For latest Cloudberry DB release running across multiple containers + + ```shell + cd bootcamp/000-cbdb-sandbox + ./run.sh -m + ``` + - For latest main branch running on a single container + + ```shell + cd bootcamp/000-cbdb-sandbox + ./run.sh -c main + ``` + + - For latest main branch running across multiple containers + + ```shell + cd bootcamp/000-cbdb-sandbox + ./run.sh -c main -m + ``` + + Once the script finishes without error, the sandbox is built and running successfully. The `docker run` and `docker compose` commands use the --detach option allowing you to ssh or access the running CBDB instance remotely. + + Please review run.sh script for additional options (e.g. setting Timezone in running container, only building container). You can also execute `./run.sh -h` to see the usage. + +## Connect to the database + +> [!NOTE] +> When deploying the multi-container Cloudberry environment it may take extra time for the database to initialize, so you may need to wait a few minutes before you can execute the psql prompt successfully. You can run `docker logs cbdb-cdw -f` to see the current state of the database initialization process, you'll know the process is finished when you see the "Deployment Successful" output. + +You can now connect to the database and try some basic operations. + +1. Connect to the Docker container from the host machine: + + ```shell + docker exec -it cbdb-cdw /bin/bash + ``` + + If it is successful, you will see the following prompt: + + ```shell + [gpadmin@cdw /]$ + ``` + +2. Log into Apache Cloudberry in Docker. See the following commands and example outputs: + + ```shell + [gpadmin@cdw ~]$ psql # Connects to the database with the default database name "gpadmin". + + # psql (14.4, server 14.4) + # Type "help" for help. + ``` + + ```sql + gpadmin=# SELECT VERSION(); -- Checks the database version. + + PostgreSQL 14.4 (Apache Cloudberry 1.0.0 build dev) on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 10.2.1 20210130 (Red Hat 10.2.1-11), 64-bit compiled on Oct 24 2023 10:24:28 + (1 row) + ``` + +Now you have a Apache Cloudberry and can continue with [Apache Cloudberry Tutorials Based on Docker Installation](https://github.com/apache/cloudberry-bootcamp/blob/main/101-cbdb-tutorials/README.md)! Enjoy! + +## Working with your Cloudberry Docker environment + +When working with the Cloudberry Docker environment there are a few commands that will be useful to you. + +**Stopping Your Single Container Deployment With Docker** + +To stop the **single container** deployment while _keeping the data and state_ within the container, you can run the command below. This means that you can later start the container again and any changes you made to the containers will be persisted between runs. + +```shell +docker stop cbdb-cdw +``` + +To stop the **single container** deployment and also remove the volume that belongs to the container, you can run the following command. Keep in mind this will remove the volume as well as the container associated which means any changes you've made inside of the container or any database state will be wiped and unrecoverable. + +```shell +docker rm -f cbdb-cdw +``` + +**Stopping Your Multi-Container Deployment With Docker** + +To stop the **multi-container** deployment while _keeping the data and state_ within the container, you can run the command below. This means that you can later start the container again and any changes you made to the containers will be persisted between runs. + +```shell +docker compose -f docker-compose-rockylinux9.yml stop +``` + +To stop the **multi-container** deployment and also remove the network and volumes that belong to the containers, you can run the command below. Running this command means it will delete the containers as well as remove the volumes that the containers are associated with. This means any changes you've made inside of the containers or any database state will be wiped and unrecoverable. + +```shell +docker compose -f docker-compose-rockylinux9.yml down -v +``` + +**Starting A Stopped Single Container Cloudberry Docker Deployment** + +If you've run any of the commands above that keep the Docker volumes persisted between shutting the containers down, you can use the following commands to bring that same deployment back up with it's previous state. + +To start a **single container** deployment after it was shut down, you can simply run the following + +```shell +docker start cbdb-cdw +``` + +**Starting A Stopped Multi-Container Cloudberry Docker Deployment** + +To start a **multi-container** deployment after it was shut down, you can run the following command. + +```shell +docker compose -f docker-compose-rockylinux9.yml start +``` + +> [!NOTE] +> When starting a previously stopped Cloudberry Docker environment, you'll need to manually start the database back up. To do this, just run the following commands once the container(s) are back up and running. The `gpstart` command is used for starting the database, and -a is a flag saying to start the database without prompting (non-interactive). + +```shell +docker exec -it cbdb-cdw /bin/bash + +[gpadmin@cdw /] gpstart -a +``` diff --git a/devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-limits.conf b/devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-limits.conf new file mode 100644 index 00000000000..d2bf601095b --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-limits.conf @@ -0,0 +1,10 @@ +###################### +# CBDB CONFIG PARAMS # +###################### + + * soft core unlimited + * hard core unlimited + * soft nofile 524288 + * hard nofile 524288 + * soft nproc 131072 + * hard nproc 131072 diff --git a/devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-sysctl.conf b/devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-sysctl.conf new file mode 100644 index 00000000000..ed806a5d8d1 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-sysctl.conf @@ -0,0 +1,35 @@ +###################### +# CBDB CONFIG PARAMS # +###################### + +kernel.shmmax = 1000000000 +kernel.shmall = 4000000000 +kernel.shmmni = 4096 +vm.overcommit_memory = 2 +vm.overcommit_ratio = 95 +net.ipv4.ip_local_port_range = 10000 65535 +kernel.sem = 250 2048000 200 8192 +kernel.sysrq = 1 +kernel.core_uses_pid = 1 +kernel.msgmnb = 65536 +kernel.msgmax = 65536 +kernel.msgmni = 2048 +net.ipv4.tcp_syncookies = 1 +net.ipv4.conf.default.accept_source_route = 0 +net.ipv4.tcp_max_syn_backlog = 4096 +net.ipv4.conf.all.arp_filter = 1 +net.ipv4.ipfrag_high_thresh = 41943040 +net.ipv4.ipfrag_low_thresh = 31457280 +net.ipv4.ipfrag_time = 60 +net.core.netdev_max_backlog = 10000 +net.core.rmem_max = 2097152 +net.core.wmem_max = 2097152 +vm.swappiness = 10 +vm.zone_reclaim_mode = 0 +vm.dirty_expire_centisecs = 500 +vm.dirty_writeback_centisecs = 100 +vm.dirty_background_ratio = 0 +vm.dirty_ratio = 0 +vm.dirty_background_bytes = 1610612736 +vm.dirty_bytes = 4294967296 +kernel.core_pattern=/var/core/core.%h.%t diff --git a/devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_multinode b/devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_multinode new file mode 100644 index 00000000000..ef96d730068 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_multinode @@ -0,0 +1,119 @@ +# FILE NAME: gpinitsystem_singlenode + +# A configuration file is needed by the gpinitsystem utility. +# This sample file initializes a Apache Cloudberry Single Node +# Edition (SNE) system with one coordinator and two segment instances +# on the local host. This file is referenced when you run gpinitsystem. + +################################################ +# REQUIRED PARAMETERS +################################################ + +# A name for the array you are configuring. You can use any name you +# like. Enclose the name in quotes if the name contains spaces. + +ARRAY_NAME="Sandbox: Apache Cloudberry Cluster" + +# This specifies the file that contains the list of segment host names +# that comprise the Greenplum system. For a single-node system, this +# file contains the local OS-configured hostname (as output by the +# hostname command). If the file does not reside in the same +# directory where the gpinitsystem utility is executed, specify +# the absolute path to the file. + +MACHINE_LIST_FILE=/tmp/gpdb-hosts + +# This specifies a prefix that will be used to name the data directories +# of the coordinator and segment instances. The naming convention for data +# directories in a Apache Cloudberry system is SEG_PREFIX +# where starts with 0 for segment instances and the coordinator +# is always -1. So for example, if you choose the prefix gpsne, your +# coordinator instance data directory would be named gpsne-1, and the segment +# instances would be named gpsne0, gpsne1, gpsne2, gpsne3, and so on. + +SEG_PREFIX=gpseg + +# Base port number on which primary segment instances will be +# started on a segment host. The base port number will be +# incremented by one for each segment instance started on a host. + +PORT_BASE=40000 + +# This specifies the data storage location(s) where the script will +# create the primary segment data directories. The script creates a +# unique data directory for each segment instance. If you want multiple +# segment instances per host, list a data storage area for each primary +# segment you want created. The recommended number is one primary segment +# per CPU. It is OK to list the same data storage area multiple times +# if you want your data directories created in the same location. The +# number of data directory locations specified will determine the number +# of primary segment instances created per host. +# You must make sure that the user who runs gpinitsystem (for example, +# the gpadmin user) has permissions to write to these directories. You +# may want to create these directories on the segment hosts before running +# gpinitsystem and chown them to the appropriate user. + +declare -a DATA_DIRECTORY=(/data0/database/primary \ + /data0/database/primary) + +# The OS-configured hostname of the Apache Cloudberry coordinator instance. + +COORDINATOR_HOSTNAME=cdw + +# The location where the data directory will be created on the +# Greenplum coordinator host. +# You must make sure that the user who runs gpinitsystem +# has permissions to write to this directory. You may want to +# create this directory on the coordinator host before running +# gpinitsystem and chown it to the appropriate user. + +COORDINATOR_DIRECTORY=/data0/database/coordinator + +# The port number for the coordinator instance. This is the port number +# that users and client connections will use when accessing the +# Apache Cloudberry system. + +COORDINATOR_PORT=5432 + +# The shell the gpinitsystem script uses to execute +# commands on remote hosts. Allowed value is ssh. You must set up +# your trusted host environment before running the gpinitsystem +# script. You can use gpssh-exkeys to do this. + +TRUSTED_SHELL=ssh + +# Maximum distance between automatic write ahead log (WAL) +# checkpoints, in log file segments (each segment is normally 16 +# megabytes). This will set the checkpoint_segments parameter +# in the postgresql.conf file for each segment instance in the +# Apache Cloudberry system. + +CHECK_POINT_SEGMENTS=8 + +# The character set encoding to use. Greenplum supports the +# same character sets as PostgreSQL. See 'Character Set Support' +# in the PostgreSQL documentation for allowed character sets. +# Should correspond to the OS locale specified with the +# gpinitsystem -n option. + +ENCODING=UNICODE + +################################################ +# OPTIONAL PARAMETERS +################################################ + +# Optional. Uncomment to create a database of this name after the +# system is initialized. You can always create a database later using +# the CREATE DATABASE command or the createdb script. + +DATABASE_NAME=gpadmin + +# Mirror configuration + +MIRROR_PORT_BASE=50000 + +declare -a MIRROR_DATA_DIRECTORY=(/data0/database/mirror \ + /data0/database/mirror) + +# REPLICATION_PORT_BASE=41000 +# MIRROR_REPLICATION_PORT_BASE=51000 diff --git a/devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_singlenode b/devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_singlenode new file mode 100644 index 00000000000..baaaebfba83 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_singlenode @@ -0,0 +1,121 @@ +# FILE NAME: gpinitsystem_singlenode + +# A configuration file is needed by the gpinitsystem utility. +# This sample file initializes a Apache Cloudberry Single Node +# Edition (SNE) system with one coordinator and two segment instances +# on the local host. This file is referenced when you run gpinitsystem. + +################################################ +# REQUIRED PARAMETERS +################################################ + +# A name for the array you are configuring. You can use any name you +# like. Enclose the name in quotes if the name contains spaces. + +ARRAY_NAME="Sandbox: Apache Cloudberry Cluster" + +# This specifies the file that contains the list of segment host names +# that comprise the Greenplum system. For a single-node system, this +# file contains the local OS-configured hostname (as output by the +# hostname command). If the file does not reside in the same +# directory where the gpinitsystem utility is executed, specify +# the absolute path to the file. + +MACHINE_LIST_FILE=/tmp/gpdb-hosts + +# This specifies a prefix that will be used to name the data directories +# of the coordinator and segment instances. The naming convention for data +# directories in a Apache Cloudberry system is SEG_PREFIX +# where starts with 0 for segment instances and the coordinator +# is always -1. So for example, if you choose the prefix gpsne, your +# coordinator instance data directory would be named gpsne-1, and the segment +# instances would be named gpsne0, gpsne1, gpsne2, gpsne3, and so on. + +SEG_PREFIX=gpseg + +# Base port number on which primary segment instances will be +# started on a segment host. The base port number will be +# incremented by one for each segment instance started on a host. + +PORT_BASE=40000 + +# This specifies the data storage location(s) where the script will +# create the primary segment data directories. The script creates a +# unique data directory for each segment instance. If you want multiple +# segment instances per host, list a data storage area for each primary +# segment you want created. The recommended number is one primary segment +# per CPU. It is OK to list the same data storage area multiple times +# if you want your data directories created in the same location. The +# number of data directory locations specified will determine the number +# of primary segment instances created per host. +# You must make sure that the user who runs gpinitsystem (for example, +# the gpadmin user) has permissions to write to these directories. You +# may want to create these directories on the segment hosts before running +# gpinitsystem and chown them to the appropriate user. + +declare -a DATA_DIRECTORY=(/data0/database/primary \ + /data0/database/primary \ + /data0/database/primary) + +# The OS-configured hostname of the Apache Cloudberry coordinator instance. + +COORDINATOR_HOSTNAME=cdw + +# The location where the data directory will be created on the +# Greenplum coordinator host. +# You must make sure that the user who runs gpinitsystem +# has permissions to write to this directory. You may want to +# create this directory on the coordinator host before running +# gpinitsystem and chown it to the appropriate user. + +COORDINATOR_DIRECTORY=/data0/database/coordinator + +# The port number for the coordinator instance. This is the port number +# that users and client connections will use when accessing the +# Apache Cloudberry system. + +COORDINATOR_PORT=5432 + +# The shell the gpinitsystem script uses to execute +# commands on remote hosts. Allowed value is ssh. You must set up +# your trusted host environment before running the gpinitsystem +# script. You can use gpssh-exkeys to do this. + +TRUSTED_SHELL=ssh + +# Maximum distance between automatic write ahead log (WAL) +# checkpoints, in log file segments (each segment is normally 16 +# megabytes). This will set the checkpoint_segments parameter +# in the postgresql.conf file for each segment instance in the +# Apache Cloudberry system. + +CHECK_POINT_SEGMENTS=8 + +# The character set encoding to use. Greenplum supports the +# same character sets as PostgreSQL. See 'Character Set Support' +# in the PostgreSQL documentation for allowed character sets. +# Should correspond to the OS locale specified with the +# gpinitsystem -n option. + +ENCODING=UNICODE + +################################################ +# OPTIONAL PARAMETERS +################################################ + +# Optional. Uncomment to create a database of this name after the +# system is initialized. You can always create a database later using +# the CREATE DATABASE command or the createdb script. + +DATABASE_NAME=gpadmin + +# Mirror configuration + +MIRROR_PORT_BASE=50000 + +declare -a MIRROR_DATA_DIRECTORY=(/data0/database/mirror \ + /data0/database/mirror \ + /data0/database/mirror) + +# REPLICATION_PORT_BASE=41000 +# MIRROR_REPLICATION_PORT_BASE=51000 diff --git a/devops/sandbox/000-cbdb-sandbox/configs/init_system.sh b/devops/sandbox/000-cbdb-sandbox/configs/init_system.sh new file mode 100755 index 00000000000..73dafa9b001 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/configs/init_system.sh @@ -0,0 +1,130 @@ +#!/bin/bash +## ====================================================================== +## Container initialization script +## ====================================================================== + +# ---------------------------------------------------------------------- +# Start SSH daemon and setup for SSH access +# ---------------------------------------------------------------------- +# The SSH daemon is started to allow remote access to the container via +# SSH. This is useful for development and debugging purposes. If the SSH +# daemon fails to start, the script exits with an error. +# ---------------------------------------------------------------------- +if ! sudo /usr/sbin/sshd; then + echo "Failed to start SSH daemon" >&2 + exit 1 +fi + +# ---------------------------------------------------------------------- +# Remove /run/nologin to allow logins +# ---------------------------------------------------------------------- +# The /run/nologin file, if present, prevents users from logging into +# the system. This file is removed to ensure that users can log in via SSH. +# ---------------------------------------------------------------------- +sudo rm -rf /run/nologin + +# ## Set gpadmin ownership - Clouberry install directory and supporting +# ## cluster creation files. +sudo chown -R gpadmin.gpadmin /usr/local/cloudberry-db \ + /tmp/gpinitsystem_singlenode \ + /tmp/gpinitsystem_multinode \ + /tmp/gpdb-hosts \ + /tmp/multinode-gpinit-hosts \ + /tmp/faa.tar.gz \ + /tmp/smoke-test.sh + +# ---------------------------------------------------------------------- +# Configure passwordless SSH access for 'gpadmin' user +# ---------------------------------------------------------------------- +# The script sets up SSH key-based authentication for the 'gpadmin' user, +# allowing passwordless SSH access. It generates a new SSH key pair if one +# does not already exist, and configures the necessary permissions. +# ---------------------------------------------------------------------- +mkdir -p /home/gpadmin/.ssh +chmod 700 /home/gpadmin/.ssh + +if [ ! -f /home/gpadmin/.ssh/id_rsa ]; then + ssh-keygen -t rsa -b 4096 -C gpadmin -f /home/gpadmin/.ssh/id_rsa -P "" > /dev/null 2>&1 +fi + +cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys +chmod 600 /home/gpadmin/.ssh/authorized_keys + +# Add the container's hostname to the known_hosts file to avoid SSH warnings +ssh-keyscan -t rsa cdw > /home/gpadmin/.ssh/known_hosts 2>/dev/null + +# Source Cloudberry environment variables and set +# COORDINATOR_DATA_DIRECTORY +source /usr/local/cloudberry-db/greenplum_path.sh +export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1 + +# Initialize single node Cloudberry cluster +if [[ $MULTINODE == "false" && $HOSTNAME == "cdw" ]]; then + gpinitsystem -a \ + -c /tmp/gpinitsystem_singlenode \ + -h /tmp/gpdb-hosts \ + --max_connections=100 +# Initialize multi node Cloudberry cluster +elif [[ $MULTINODE == "true" && $HOSTNAME == "cdw" ]]; then + sshpass -p "cbdb@123" ssh-copy-id -o StrictHostKeyChecking=no sdw1 + sshpass -p "cbdb@123" ssh-copy-id -o StrictHostKeyChecking=no sdw2 + sshpass -p "cbdb@123" ssh-copy-id -o StrictHostKeyChecking=no scdw + gpinitsystem -a \ + -c /tmp/gpinitsystem_multinode \ + -h /tmp/multinode-gpinit-hosts \ + --max_connections=100 + gpinitstandby -s scdw -a + printf "sdw1\nsdw2\n" >> /tmp/gpdb-hosts +fi + +if [ $HOSTNAME == "cdw" ]; then + ## Allow any host access the Cloudberry Cluster + echo 'host all all 0.0.0.0/0 trust' >> /data0/database/coordinator/gpseg-1/pg_hba.conf + gpstop -u + + psql -d template1 \ + -c "ALTER USER gpadmin PASSWORD 'cbdb@123'" + + cat <<-'EOF' + +====================================================================== + ____ _ _ _ + / ___| | ___ _ _ __| | |__ ___ _ __ _ __ _ _ + | | | |/ _ \| | | |/ _` | '_ \ / _ \ '__| '__| | | | + | |___| | (_) | |_| | (_| | |_) | __/ | | | | |_| | + \____|_|\___/ \__,_|\__,_|_.__/ \___|_| |_| \__, | + |___/ +====================================================================== +EOF + + cat <<-'EOF' + +====================================================================== +Sandbox: Apache Cloudberry Cluster details +====================================================================== + +EOF + + echo "Current time: $(date)" + source /etc/os-release + echo "OS Version: ${NAME} ${VERSION}" + + ## Set gpadmin password, display version and cluster configuration + psql -P pager=off -d template1 -c "SELECT VERSION()" + psql -P pager=off -d template1 -c "SELECT * FROM gp_segment_configuration ORDER BY dbid" + psql -P pager=off -d template1 -c "SHOW optimizer" +fi + +echo """ +=========================== += DEPLOYMENT SUCCESSFUL = +=========================== +""" + +# ---------------------------------------------------------------------- +# Start an interactive bash shell +# ---------------------------------------------------------------------- +# Finally, the script starts an interactive bash shell to keep the +# container running and allow the user to interact with the environment. +# ---------------------------------------------------------------------- +/bin/bash diff --git a/devops/sandbox/000-cbdb-sandbox/configs/multinode-gpinit-hosts b/devops/sandbox/000-cbdb-sandbox/configs/multinode-gpinit-hosts new file mode 100644 index 00000000000..a85b4c3f097 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/configs/multinode-gpinit-hosts @@ -0,0 +1,2 @@ +sdw1 +sdw2 \ No newline at end of file diff --git a/devops/sandbox/000-cbdb-sandbox/docker-compose-rockylinux9.yml b/devops/sandbox/000-cbdb-sandbox/docker-compose-rockylinux9.yml new file mode 100644 index 00000000000..37cccc98ca6 --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/docker-compose-rockylinux9.yml @@ -0,0 +1,45 @@ +services: + cbdb-coordinator: + container_name: cbdb-cdw + image: cbdb-${CODEBASE_VERSION}:${OS_VERSION} + ports: + - "15432:5432" + hostname: cdw + tty: true + networks: + interconnect: + ipv4_address: 10.5.0.10 + environment: + MULTINODE: "true" + cbdb-standby-coordinator: + container_name: cbdb-scdw + image: cbdb-${CODEBASE_VERSION}:${OS_VERSION} + hostname: scdw + tty: true + networks: + interconnect: + ipv4_address: 10.5.0.11 + cbdb-segment-host-1: + container_name: cbdb-sdw1 + image: cbdb-${CODEBASE_VERSION}:${OS_VERSION} + hostname: sdw1 + tty: true + networks: + interconnect: + ipv4_address: 10.5.0.12 + cbdb-segment-host-2: + container_name: cbdb-sdw2 + image: cbdb-${CODEBASE_VERSION}:${OS_VERSION} + hostname: sdw2 + tty: true + networks: + interconnect: + ipv4_address: 10.5.0.13 +networks: + interconnect: + name: cbdb-interconnect + driver: bridge + ipam: + config: + - subnet: 10.5.0.0/16 + gateway: 10.5.0.1 diff --git a/devops/sandbox/000-cbdb-sandbox/run.sh b/devops/sandbox/000-cbdb-sandbox/run.sh new file mode 100755 index 00000000000..d42b55e1ecf --- /dev/null +++ b/devops/sandbox/000-cbdb-sandbox/run.sh @@ -0,0 +1,139 @@ +#!/bin/bash +set -eu + +# Default values +DEFAULT_OS_VERSION="rockylinux9" +DEFAULT_TIMEZONE_VAR="America/Los_Angeles" +DEFAULT_PIP_INDEX_URL_VAR="https://pypi.org/simple" +BUILD_ONLY="false" +MULTINODE="false" + +# Use environment variables if set, otherwise use default values +# Export set for some variables to be used referenced docker compose file +export OS_VERSION="${OS_VERSION:-$DEFAULT_OS_VERSION}" +BUILD_ONLY="${BUILD_ONLY:-false}" +export CODEBASE_VERSION="${CODEBASE_VERSION:-}" +TIMEZONE_VAR="${TIMEZONE_VAR:-$DEFAULT_TIMEZONE_VAR}" +PIP_INDEX_URL_VAR="${PIP_INDEX_URL_VAR:-$DEFAULT_PIP_INDEX_URL_VAR}" + +# Function to display help message +function usage() { + echo "Usage: $0 [-o ] [-c ] [-b] [-m]" + echo " -c Codebase version (valid values: main, or determined from release zip file name)" + echo " -t Timezone (default: America/Los_Angeles, or set via TIMEZONE_VAR environment variable)" + echo " -p Python Package Index (PyPI) (default: https://pypi.org/simple, or set via PIP_INDEX_URL_VAR environment variable)" + echo " -b Build only, do not run the container (default: false, or set via BUILD_ONLY environment variable)" + echo " -m Multinode, this creates a multinode (multi-container) Cloudberry cluster using docker compose (requires compose to be installed)" + exit 1 +} + +# Parse command-line options +while getopts "c:t:p:bmh" opt; do + case "${opt}" in + c) + CODEBASE_VERSION=${OPTARG} + ;; + t) + TIMEZONE_VAR=${OPTARG} + ;; + p) + PIP_INDEX_URL_VAR=${OPTARG} + ;; + b) + BUILD_ONLY="true" + ;; + m) + MULTINODE="true" + ;; + h) + usage + ;; + *) + usage + ;; + esac +done + +if [[ $MULTINODE == "true" ]] && ! docker compose version; then + echo "Error: Multinode -m flag found in run arguments but calling docker compose failed. Please install Docker Compose by following the instructions at https://docs.docker.com/compose/install/. Exiting" + exit 1 +fi + +if [[ "${MULTINODE}" == "true" && "${BUILD_ONLY}" == "true" ]]; then + echo "Error: Cannot pass both multinode deployment [m] and build only [b] flags together" + exit 1 +fi + +# If CODEBASE_VERSION is not specified, determine it from the file name +if [[ -z "$CODEBASE_VERSION" ]]; then + BASE_CODEBASE_FILE=$(ls configs/cloudberrydb-*.zip 2>/dev/null) + + if [[ -z "$BASE_CODEBASE_FILE" ]]; then + echo "Error: No configs/cloudberrydb-*.zip file found and codebase version not specified." + exit 1 + fi + + CODEBASE_FILE=$(basename ${BASE_CODEBASE_FILE}) + + if [[ $CODEBASE_FILE =~ cloudberrydb-([0-9]+\.[0-9]+\.[0-9]+)\.zip ]]; then + CODEBASE_VERSION="${BASH_REMATCH[1]}" + else + echo "Error: Cannot extract version from file name $CODEBASE_FILE" + exit 1 + fi +fi + +# Validate OS_VERSION and map to appropriate Docker image +case "${OS_VERSION}" in + rockylinux9) + OS_DOCKER_IMAGE="rockylinux9" + ;; + *) + echo "Invalid OS version: ${OS_VERSION}" + usage + ;; +esac + +# Validate CODEBASE_VERSION +if [[ "${CODEBASE_VERSION}" != "main" && ! "${CODEBASE_VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Invalid codebase version: ${CODEBASE_VERSION}" + usage +fi + +# Build image +if [[ "${CODEBASE_VERSION}" = "main" ]]; then + DOCKERFILE=Dockerfile.${CODEBASE_VERSION}.${OS_VERSION} + + docker build --file ${DOCKERFILE} \ + --build-arg TIMEZONE_VAR="${TIMEZONE_VAR}" \ + --tag cbdb-${CODEBASE_VERSION}:${OS_VERSION} . +else + DOCKERFILE=Dockerfile.RELEASE.${OS_VERSION} + + docker build --file ${DOCKERFILE} \ + --build-arg TIMEZONE_VAR="${TIMEZONE_VAR}" \ + --build-arg PIP_INDEX_URL_VAR="${PIP_INDEX_URL_VAR}" \ + --build-arg CODEBASE_VERSION_VAR="${CODEBASE_VERSION}" \ + --tag cbdb-${CODEBASE_VERSION}:${OS_VERSION} . +fi + +# Check if build only flag is set +if [ "${BUILD_ONLY}" == "true" ]; then + echo "Docker image built successfully with OS version ${OS_VERSION} and codebase version ${CODEBASE_VERSION}. Build only mode, not running the container." + exit 0 +fi + +# Deploy container(s) +if [ "${MULTINODE}" == "true" ]; then + docker compose -f docker-compose-$OS_VERSION.yml up --detach +else + docker run --interactive \ + --tty \ + --name cbdb-cdw \ + --detach \ + --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \ + --publish 122:22 \ + --publish 15432:5432 \ + --hostname cdw \ + cbdb-${CODEBASE_VERSION}:${OS_VERSION} +fi diff --git a/devops/sandbox/images/sandbox-deployment.jpg b/devops/sandbox/images/sandbox-deployment.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb1b2dc07418d3a2c2b3f6be47de05a09c8a5039 GIT binary patch literal 143855 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�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

      S2s; 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 ZjKrSwp1k>=!QS7z)&Gf~KKyIu{{peTtVaL< literal 0 HcmV?d00001 From 628aa436d77f028c60f34ef9c1348d8f24a04b0c Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Tue, 14 Oct 2025 17:20:00 +0800 Subject: [PATCH 206/260] Reorgnize the files in sandbox --- devops/sandbox/{000-cbdb-sandbox => }/.env | 0 .../Dockerfile.RELEASE.rockylinux9 | 0 .../Dockerfile.main.rockylinux9 | 0 devops/sandbox/{000-cbdb-sandbox => }/README.md | 0 .../configs/90-cbdb-limits.conf | 0 .../configs/90-cbdb-sysctl.conf | 0 .../configs/gpinitsystem_multinode | 0 .../configs/gpinitsystem_singlenode | 0 .../{000-cbdb-sandbox => }/configs/init_system.sh | 0 .../configs/multinode-gpinit-hosts | 0 .../docker-compose-rockylinux9.yml | 0 devops/sandbox/{000-cbdb-sandbox => }/run.sh | 0 devops/sandbox/{images => }/sandbox-deployment.jpg | Bin 13 files changed, 0 insertions(+), 0 deletions(-) rename devops/sandbox/{000-cbdb-sandbox => }/.env (100%) rename devops/sandbox/{000-cbdb-sandbox => }/Dockerfile.RELEASE.rockylinux9 (100%) rename devops/sandbox/{000-cbdb-sandbox => }/Dockerfile.main.rockylinux9 (100%) rename devops/sandbox/{000-cbdb-sandbox => }/README.md (100%) rename devops/sandbox/{000-cbdb-sandbox => }/configs/90-cbdb-limits.conf (100%) rename devops/sandbox/{000-cbdb-sandbox => }/configs/90-cbdb-sysctl.conf (100%) rename devops/sandbox/{000-cbdb-sandbox => }/configs/gpinitsystem_multinode (100%) rename devops/sandbox/{000-cbdb-sandbox => }/configs/gpinitsystem_singlenode (100%) rename devops/sandbox/{000-cbdb-sandbox => }/configs/init_system.sh (100%) rename devops/sandbox/{000-cbdb-sandbox => }/configs/multinode-gpinit-hosts (100%) rename devops/sandbox/{000-cbdb-sandbox => }/docker-compose-rockylinux9.yml (100%) rename devops/sandbox/{000-cbdb-sandbox => }/run.sh (100%) rename devops/sandbox/{images => }/sandbox-deployment.jpg (100%) diff --git a/devops/sandbox/000-cbdb-sandbox/.env b/devops/sandbox/.env similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/.env rename to devops/sandbox/.env diff --git a/devops/sandbox/000-cbdb-sandbox/Dockerfile.RELEASE.rockylinux9 b/devops/sandbox/Dockerfile.RELEASE.rockylinux9 similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/Dockerfile.RELEASE.rockylinux9 rename to devops/sandbox/Dockerfile.RELEASE.rockylinux9 diff --git a/devops/sandbox/000-cbdb-sandbox/Dockerfile.main.rockylinux9 b/devops/sandbox/Dockerfile.main.rockylinux9 similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/Dockerfile.main.rockylinux9 rename to devops/sandbox/Dockerfile.main.rockylinux9 diff --git a/devops/sandbox/000-cbdb-sandbox/README.md b/devops/sandbox/README.md similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/README.md rename to devops/sandbox/README.md diff --git a/devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-limits.conf b/devops/sandbox/configs/90-cbdb-limits.conf similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-limits.conf rename to devops/sandbox/configs/90-cbdb-limits.conf diff --git a/devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-sysctl.conf b/devops/sandbox/configs/90-cbdb-sysctl.conf similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/configs/90-cbdb-sysctl.conf rename to devops/sandbox/configs/90-cbdb-sysctl.conf diff --git a/devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_multinode b/devops/sandbox/configs/gpinitsystem_multinode similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_multinode rename to devops/sandbox/configs/gpinitsystem_multinode diff --git a/devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_singlenode b/devops/sandbox/configs/gpinitsystem_singlenode similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/configs/gpinitsystem_singlenode rename to devops/sandbox/configs/gpinitsystem_singlenode diff --git a/devops/sandbox/000-cbdb-sandbox/configs/init_system.sh b/devops/sandbox/configs/init_system.sh similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/configs/init_system.sh rename to devops/sandbox/configs/init_system.sh diff --git a/devops/sandbox/000-cbdb-sandbox/configs/multinode-gpinit-hosts b/devops/sandbox/configs/multinode-gpinit-hosts similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/configs/multinode-gpinit-hosts rename to devops/sandbox/configs/multinode-gpinit-hosts diff --git a/devops/sandbox/000-cbdb-sandbox/docker-compose-rockylinux9.yml b/devops/sandbox/docker-compose-rockylinux9.yml similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/docker-compose-rockylinux9.yml rename to devops/sandbox/docker-compose-rockylinux9.yml diff --git a/devops/sandbox/000-cbdb-sandbox/run.sh b/devops/sandbox/run.sh similarity index 100% rename from devops/sandbox/000-cbdb-sandbox/run.sh rename to devops/sandbox/run.sh diff --git a/devops/sandbox/images/sandbox-deployment.jpg b/devops/sandbox/sandbox-deployment.jpg similarity index 100% rename from devops/sandbox/images/sandbox-deployment.jpg rename to devops/sandbox/sandbox-deployment.jpg From 3fcf9a7210fc6c1a3de25164cd58501909808266 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Tue, 17 Jun 2025 14:48:33 +0800 Subject: [PATCH 207/260] Sandbox: updates for the main branch/release In this commit, main changes are included: - Add the standard Apache license headers for files - Refactor the Dockerfile.*.rockylinux 9 - Adopt a more friendly way to support running the sandbox with multi-nodes. - Strengthen the robustness of sandbox. --- README.md | 9 +- devops/sandbox/.env | 21 +- devops/sandbox/Dockerfile.RELEASE.rockylinux9 | 420 ++++++++++++------ devops/sandbox/Dockerfile.main.rockylinux9 | 380 +++++++++------- devops/sandbox/README.md | 92 ++-- devops/sandbox/configs/90-cbdb-limits.conf | 19 + devops/sandbox/configs/90-cbdb-sysctl.conf | 19 + devops/sandbox/configs/gpinitsystem_multinode | 27 +- .../sandbox/configs/gpinitsystem_singlenode | 19 + devops/sandbox/configs/init_system.sh | 168 ++++--- devops/sandbox/configs/multinode-gpinit-hosts | 2 +- devops/sandbox/docker-compose-rockylinux9.yml | 36 ++ devops/sandbox/run.sh | 46 +- pom.xml | 4 + 14 files changed, 857 insertions(+), 405 deletions(-) diff --git a/README.md b/README.md index 1c467c6e471..a72c42fd266 100644 --- a/README.md +++ b/README.md @@ -68,9 +68,8 @@ Linux OS (including RHEL/Rocky Linux, and Ubuntu) and macOS. ### Try out quickly Welcome to try out Cloudberry via building [one Docker-based -Sandbox](https://github.com/apache/cloudberry-bootcamp), which is tailored to -help you gain a basic understanding of Cloudberry's capabilities and features -a range of materials, including tutorials, sample code, and crash courses. +Sandbox](./devops/sandbox), which is tailored to help you gain a basic +understanding of Cloudberry's capabilities and features. ## Repositories @@ -79,10 +78,8 @@ this, there are several ecosystem repositories for Cloudberry, including the website, extensions, connectors, adapters, and other utilities. * [apache/cloudberry-site](https://github.com/apache/cloudberry-site): website and documentation sources. -* [apache/cloudberry-bootcamp](https://github.com/apache/cloudberry-bootcamp): help you quickly try out Cloudberry via one Docker-based Sandbox. -* [apache/cloudberry-gpbackup](https://github.com/apache/cloudberry-gpbackup): backup utility for Cloudberry. +* [apache/cloudberry-backup](https://github.com/apache/cloudberry-backup): backup utility for Cloudberry. * [apache/cloudberry-go-libs](https://github.com/apache/cloudberry-go-libs): go-libs for Cloudberry. -* [apache/cloudberry-gpbackup-s3-plugin](https://github.com/apache/cloudberry-gpbackup-s3-plugin): S3 plugin for use with Cloudberry backup utility. * [apache/cloudberry-pxf](https://github.com/apache/cloudberry-pxf): Platform Extension Framework (PXF) for Cloudberry. ## Community & Support diff --git a/devops/sandbox/.env b/devops/sandbox/.env index 5f1596515d2..233d7c5b1b5 100644 --- a/devops/sandbox/.env +++ b/devops/sandbox/.env @@ -1,2 +1,21 @@ -CODEBASE_VERSION=1.6.0 +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +CODEBASE_VERSION=2.0.0 OS_VERSION=rockylinux9 diff --git a/devops/sandbox/Dockerfile.RELEASE.rockylinux9 b/devops/sandbox/Dockerfile.RELEASE.rockylinux9 index 948bbfa7986..f9f422f57f6 100644 --- a/devops/sandbox/Dockerfile.RELEASE.rockylinux9 +++ b/devops/sandbox/Dockerfile.RELEASE.rockylinux9 @@ -1,155 +1,287 @@ -FROM rockylinux/rockylinux:9 - -ARG CODEBASE_VERSION_VAR=${CODEBASE_VERSION_VAR} -ARG TIMEZONE_VAR="Asia/Shanghai" - -ENV container=docker -ENV MULTINODE=false - -RUN dnf update -y && \ - dnf install -y systemd \ - systemd-libs && \ - dnf clean all - -# Clean up unnecessary systemd units -RUN [ -d /lib/systemd/system/sysinit.target.wants ] && find /lib/systemd/system/sysinit.target.wants/ -type l -not -name 'systemd-tmpfiles-setup.service' -delete || echo "Directory /lib/systemd/system/sysinit.target.wants does not exist" && \ - [ -d /lib/systemd/system/multi-user.target.wants ] && find /lib/systemd/system/multi-user.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/multi-user.target.wants does not exist" && \ - find /etc/systemd/system/*.wants/ -type l -delete || echo "Directory /etc/systemd/system/*.wants does not exist" && \ - [ -d /lib/systemd/system/local-fs.target.wants ] && find /lib/systemd/system/local-fs.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/local-fs.target.wants does not exist" && \ - [ -d /lib/systemd/system/sockets.target.wants ] && find /lib/systemd/system/sockets.target.wants/ -type l -not -name '*udev*' -delete || echo "Directory /lib/systemd/system/sockets.target.wants does not exist" && \ - [ -d /lib/systemd/system/basic.target.wants ] && find /lib/systemd/system/basic.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/basic.target.wants does not exist" && \ - [ -d /lib/systemd/system/anaconda.target.wants ] && find /lib/systemd/system/anaconda.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/anaconda.target.wants does not exist" - -COPY ./configs/* /tmp/ - -RUN echo root:cbdb@123 | chpasswd && \ - dnf makecache && \ - dnf install -y yum-utils \ - epel-release \ - git && \ - yum-config-manager --disable epel-cisco-openh264 && \ - dnf makecache && \ - yum-config-manager --disable epel && \ - dnf install -y --enablerepo=epel \ - the_silver_searcher \ - bat \ - htop && \ - dnf install -y bison \ - cmake3 \ - ed \ - flex \ - gcc \ - gcc-c++ \ - glibc-langpack-en \ - go \ - initscripts \ - iproute \ - less \ - m4 \ - net-tools \ - openssh-clients \ - openssh-server \ - passwd \ - perl \ - rsync \ - sudo \ - tar \ - unzip \ - util-linux-ng \ - wget \ - sshpass \ - which && \ - dnf install -y apr-devel \ - bzip2-devel \ - krb5-devel \ - libcurl-devel \ - libevent-devel \ - libxml2-devel \ - libzstd-devel \ - openldap-devel \ - openssl-devel \ - pam-devel \ - perl-ExtUtils-Embed \ - perl-Test-Simple \ - perl-core \ - python3-devel \ - readline-devel \ - zlib-devel && \ - dnf install -y --enablerepo=crb \ - libuv-devel \ - libyaml-devel \ - perl-IPC-Run && \ - dnf install -y --enablerepo=epel \ - xerces-c-devel - -RUN cp /tmp/90-cbdb-sysctl.conf /etc/sysctl.conf && \ - cp /tmp/90-cbdb-limits.conf /etc/security/limits.d/90-cbdb-limits.conf && \ - cat /usr/share/zoneinfo/${TIMEZONE_VAR} > /etc/localtime && \ - echo "cdw" > /tmp/gpdb-hosts && \ - echo "/usr/local/lib" >> /etc/ld.so.conf && \ - echo "/usr/local/lib64" >> /etc/ld.so.conf && \ - ldconfig && \ - chmod 777 /tmp/gpinitsystem_singlenode && \ - chmod 777 /tmp/init_system.sh && \ - hostname > ~/orig_hostname && \ - /usr/sbin/groupadd gpadmin && \ - /usr/sbin/useradd gpadmin -g gpadmin -G wheel && \ - setcap cap_net_raw+ep /usr/bin/ping && \ - echo "cbdb@123"|passwd --stdin gpadmin && \ - echo "gpadmin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ - echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ - echo "export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1" >> /home/gpadmin/.bashrc && \ - echo "source /usr/local/cloudberry-db/greenplum_path.sh" >> /home/gpadmin/.bashrc && \ - mkdir -p /data0/database/coordinator /data0/database/primary /data0/database/mirror && \ - chown -R gpadmin:gpadmin /data0 && \ - ssh-keygen -A && \ - echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config - -RUN cd /tmp/ && \ - unzip -d /tmp /tmp/cloudberrydb-${CODEBASE_VERSION_VAR}.zip && \ - mv /tmp/cloudberrydb-${CODEBASE_VERSION_VAR} /tmp/cloudberry - -RUN cd /tmp/cloudberry && \ - ./configure --prefix=/usr/local/cloudberry-db \ - --enable-cassert \ - --enable-debug-extensions \ - --enable-ic-proxy \ - --enable-mapreduce \ - --enable-orafce \ - --enable-orca \ - --enable-pxf \ - --enable-tap-tests \ - --with-gssapi \ - --with-ldap \ - --with-libxml \ - --with-openssl \ - --with-pam \ - --with-perl \ - --with-pgport=5432 \ - --with-python \ - --with-pythonsrc-ext - -RUN cd /tmp/cloudberry && \ - make -j$(nproc) && \ - make install - -RUN cd /tmp/cloudberry/contrib && \ - make -j$(nproc) && \ - make install +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# Multi-stage Dockerfile for Apache Cloudberry Sandbox Environment (Release) +# -------------------------------------------------------------------- +# This Dockerfile compiles and installs a specific release version of +# Cloudberry, then creates a runtime environment for testing and development. +# -------------------------------------------------------------------- + +# -------------------------------------------------------------------- +# Build stage: Rocky Linux 9 builder to compile Cloudberry (release tarball) +# -------------------------------------------------------------------- +FROM rockylinux/rockylinux:9.6 AS builder + +# Install build toolchains and development headers (avoid coreutils/curl conflicts on arm64) +RUN dnf makecache && \ + dnf install -y \ + epel-release \ + git && \ + dnf config-manager --disable epel-cisco-openh264 && \ + dnf makecache && \ + dnf config-manager --disable epel && \ + dnf install -y --enablerepo=epel \ + the_silver_searcher \ + bat \ + htop && \ + dnf install -y \ + bison \ + cmake3 \ + ed \ + file \ + flex \ + gcc \ + gcc-c++ \ + gdb \ + glibc-langpack-en \ + glibc-locale-source \ + initscripts \ + iproute \ + less \ + lsof \ + m4 \ + net-tools \ + openssh-clients \ + openssh-server \ + perl \ + rpm-build \ + rpmdevtools \ + rsync \ + sudo \ + tar \ + unzip \ + util-linux-ng \ + wget \ + sshpass \ + which && \ + dnf install -y \ + apr-devel \ + bzip2-devel \ + java-11-openjdk \ + java-11-openjdk-devel \ + krb5-devel \ + libcurl-devel \ + libevent-devel \ + libxml2-devel \ + libuuid-devel \ + libzstd-devel \ + lz4 \ + lz4-devel \ + openldap-devel \ + openssl-devel \ + pam-devel \ + perl-ExtUtils-Embed \ + perl-Test-Simple \ + perl-core \ + python3-devel \ + python3-pytest \ + readline-devel \ + zlib-devel && \ + dnf install -y --enablerepo=crb \ + libuv-devel \ + libyaml-devel \ + perl-IPC-Run \ + protobuf-devel && \ + dnf clean all && \ + cd && XERCES_LATEST_RELEASE=3.3.0 && \ + wget -nv "https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-${XERCES_LATEST_RELEASE}.tar.gz" && \ + echo "$(curl -sL https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-${XERCES_LATEST_RELEASE}.tar.gz.sha256)" | sha256sum -c - && \ + tar xf "xerces-c-${XERCES_LATEST_RELEASE}.tar.gz"; rm "xerces-c-${XERCES_LATEST_RELEASE}.tar.gz" && \ + cd xerces-c-${XERCES_LATEST_RELEASE} && \ + ./configure --prefix=/usr/local/xerces-c && \ + make -j$(nproc) && \ + make install -C ~/xerces-c-${XERCES_LATEST_RELEASE} && \ + rm -rf ~/xerces-c* + +# Create gpadmin user and grant passwordless sudo in builder +RUN groupadd -r gpadmin && \ + useradd -m -r -g gpadmin -s /bin/bash gpadmin && \ + echo "gpadmin ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/gpadmin && \ + chmod 440 /etc/sudoers.d/gpadmin + +# Switch to gpadmin user +USER gpadmin +WORKDIR /home/gpadmin + +# Release version to build (Apache official tarball) +ARG CB_RELEASE_VERSION=2.0.0-incubating + +# Download and extract the specified release version from Apache +RUN wget -nv "https://downloads.apache.org/incubator/cloudberry/${CB_RELEASE_VERSION}/apache-cloudberry-${CB_RELEASE_VERSION}-src.tar.gz" -O /home/gpadmin/apache-cloudberry-${CB_RELEASE_VERSION}-src.tar.gz && \ + tar -xzf /home/gpadmin/apache-cloudberry-${CB_RELEASE_VERSION}-src.tar.gz -C /home/gpadmin && \ + rm -f /home/gpadmin/apache-cloudberry-${CB_RELEASE_VERSION}-src.tar.gz && \ + mv /home/gpadmin/apache-cloudberry-${CB_RELEASE_VERSION} /home/gpadmin/cloudberry + +# Build Cloudberry using the official build scripts +RUN cd /home/gpadmin/cloudberry && \ + export SRC_DIR=/home/gpadmin/cloudberry && \ + mkdir -p "${SRC_DIR}/build-logs" && \ + # Ensure Cloudberry lib dir exists and has Xerces libs available + sudo rm -rf /usr/local/cloudberry-db && \ + sudo mkdir -p /usr/local/cloudberry-db/lib && \ + sudo cp -v /usr/local/xerces-c/lib/libxerces-c.so \ + /usr/local/xerces-c/lib/libxerces-c-3.*.so \ + /usr/local/cloudberry-db/lib/ && \ + sudo chown -R gpadmin:gpadmin /usr/local/cloudberry-db && \ + # Configure with required features and paths + export LD_LIBRARY_PATH=/usr/local/cloudberry-db/lib:$LD_LIBRARY_PATH && \ + ./configure --prefix=/usr/local/cloudberry-db \ + --disable-external-fts \ + --enable-debug \ + --enable-cassert \ + --enable-debug-extensions \ + --enable-gpcloud \ + --enable-ic-proxy \ + --enable-mapreduce \ + --enable-orafce \ + --enable-orca \ + --enable-pax \ + --enable-pxf \ + --enable-tap-tests \ + --with-gssapi \ + --with-ldap \ + --with-libxml \ + --with-lz4 \ + --with-pam \ + --with-perl \ + --with-pgport=5432 \ + --with-python \ + --with-pythonsrc-ext \ + --with-ssl=openssl \ + --with-uuid=e2fs \ + --with-includes=/usr/local/xerces-c/include \ + --with-libraries=/usr/local/cloudberry-db/lib && \ + # Build and install + make -j$(nproc) --directory ${SRC_DIR} && \ + make -j$(nproc) --directory ${SRC_DIR}/contrib && \ + make install --directory ${SRC_DIR} && \ + make install --directory "${SRC_DIR}/contrib" + +# -------------------------------------------------------------------- +# Runtime stage: Rocky Linux 9 runtime with required dependencies +# -------------------------------------------------------------------- +FROM rockylinux/rockylinux:9.6 + +# Install required runtime dependencies, SSH server, sudo, and tools +# Note: Use dnf on Rocky Linux 9 +RUN dnf -y update && \ + dnf -y install \ + openssh-server openssh-clients \ + sudo shadow-utils \ + bash procps-ng \ + ca-certificates \ + python3 \ + apr \ + bzip2-libs \ + krb5-libs \ + libevent \ + libicu \ + libuuid \ + libxml2 \ + libyaml \ + libzstd \ + lz4 \ + ncurses \ + openldap \ + openssl \ + pam \ + pcre2 \ + perl \ + protobuf \ + readline \ + zlib \ + glibc-langpack-en \ + libuv \ + iproute \ + net-tools \ + which \ + rsync \ + keyutils \ + libstdc++ && \ + dnf clean all && rm -rf /var/cache/dnf + +# Create gpadmin user and group, grant passwordless sudo +RUN groupadd -r gpadmin && \ + useradd -m -r -g gpadmin -s /bin/bash gpadmin && \ + echo "gpadmin ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/gpadmin && \ + chmod 440 /etc/sudoers.d/gpadmin + +# Prepare SSH daemon: generate host keys, ensure runtime dir, and allow gpadmin to start it +RUN ssh-keygen -A && mkdir -p /run/sshd && chmod u+s /usr/sbin/sshd + +# Copy built Cloudberry from builder stage +COPY --from=builder /usr/local/cloudberry-db /usr/local/cloudberry-db + +# Bring Xerces libs into Cloudberry lib dir +COPY --from=builder /usr/local/xerces-c/lib/libxerces-c.so /usr/local/cloudberry-db/lib/ +COPY --from=builder /usr/local/xerces-c/lib/libxerces-c-3.*.so /usr/local/cloudberry-db/lib/ + +# Copy configuration files to their final destinations +COPY ./configs/90-cbdb-limits.conf /etc/security/limits.d/90-cbdb-limits.conf +COPY ./configs/90-cbdb-sysctl.conf /etc/sysctl.d/90-cbdb-sysctl.conf +COPY ./configs/gpinitsystem_singlenode /tmp/gpinitsystem_singlenode +COPY ./configs/gpinitsystem_multinode /tmp/gpinitsystem_multinode +COPY ./configs/multinode-gpinit-hosts /tmp/multinode-gpinit-hosts +COPY ./configs/init_system.sh /tmp/init_system.sh + +# Runtime configuration +RUN echo "cdw" > /tmp/gpdb-hosts && \ + chmod 755 /tmp/gpinitsystem_singlenode && \ + chmod 755 /tmp/gpinitsystem_multinode && \ + chmod 755 /tmp/init_system.sh && \ + mkdir -p /data0/database/coordinator /data0/database/primary /data0/database/mirror && \ + chown -R gpadmin:gpadmin \ + /usr/local/cloudberry-db \ + /tmp/gpinitsystem_singlenode \ + /tmp/gpinitsystem_multinode \ + /tmp/gpdb-hosts \ + /tmp/multinode-gpinit-hosts \ + /data0 && \ + echo "export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1" >> /home/gpadmin/.bashrc && \ + echo -e '\n# Add Cloudberry entries\nif [ -f /usr/local/cloudberry-db/cloudberry-env.sh ]; then\n source /usr/local/cloudberry-db/cloudberry-env.sh\nfi\n# Add Greenplum compatibility entries\nif [ -f /usr/local/cloudberry-db/greenplum_path.sh ]; then\n source /usr/local/cloudberry-db/greenplum_path.sh\nfi' >> /home/gpadmin/.bashrc # ---------------------------------------------------------------------- -# Set the Default User and Command +# Generate SSH keypair for gpadmin user at build time # ---------------------------------------------------------------------- -# The default user is set to 'gpadmin', and the container starts by -# running the init_system.sh script. This container serves as a base -# environment, and the Apache Cloudberry RPM can be installed for -# testing and functional verification. +# WARNING: This embeds a fixed SSH keypair in the Docker image for +# sandbox convenience. This is ONLY suitable for local testing and +# development. DO NOT use this image in production or any environment +# where security is a concern. # ---------------------------------------------------------------------- +RUN mkdir -p /home/gpadmin/.ssh && \ + ssh-keygen -t rsa -b 4096 -N '' -C 'gpadmin@cloudberry-sandbox' \ + -f /home/gpadmin/.ssh/id_rsa && \ + cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys && \ + chmod 700 /home/gpadmin/.ssh && \ + chmod 600 /home/gpadmin/.ssh/id_rsa && \ + chmod 644 /home/gpadmin/.ssh/id_rsa.pub && \ + chmod 600 /home/gpadmin/.ssh/authorized_keys && \ + chown -R gpadmin:gpadmin /home/gpadmin/.ssh + +# Set default user and working directory USER gpadmin -ENV USER=gpadmin WORKDIR /home/gpadmin EXPOSE 5432 22 +# cgroup mount (provided by compose/run) VOLUME [ "/sys/fs/cgroup" ] + +# Start the container by running the initialization script CMD ["bash","-c","/tmp/init_system.sh"] diff --git a/devops/sandbox/Dockerfile.main.rockylinux9 b/devops/sandbox/Dockerfile.main.rockylinux9 index 2073ebcb2a6..cd8725c130a 100644 --- a/devops/sandbox/Dockerfile.main.rockylinux9 +++ b/devops/sandbox/Dockerfile.main.rockylinux9 @@ -1,160 +1,242 @@ -FROM rockylinux/rockylinux:9 - -# Argument for configuring the timezone -ARG TIMEZONE_VAR="America/Los_Angeles" - -# Environment variables -ENV container=docker -ENV MULTINODE=false - -RUN dnf update -y && \ - dnf install -y systemd \ - systemd-libs && \ - dnf clean all - -# Clean up unnecessary systemd units -RUN [ -d /lib/systemd/system/sysinit.target.wants ] && find /lib/systemd/system/sysinit.target.wants/ -type l -not -name 'systemd-tmpfiles-setup.service' -delete || echo "Directory /lib/systemd/system/sysinit.target.wants does not exist" && \ - [ -d /lib/systemd/system/multi-user.target.wants ] && find /lib/systemd/system/multi-user.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/multi-user.target.wants does not exist" && \ - find /etc/systemd/system/*.wants/ -type l -delete || echo "Directory /etc/systemd/system/*.wants does not exist" && \ - [ -d /lib/systemd/system/local-fs.target.wants ] && find /lib/systemd/system/local-fs.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/local-fs.target.wants does not exist" && \ - [ -d /lib/systemd/system/sockets.target.wants ] && find /lib/systemd/system/sockets.target.wants/ -type l -not -name '*udev*' -delete || echo "Directory /lib/systemd/system/sockets.target.wants does not exist" && \ - [ -d /lib/systemd/system/basic.target.wants ] && find /lib/systemd/system/basic.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/basic.target.wants does not exist" && \ - [ -d /lib/systemd/system/anaconda.target.wants ] && find /lib/systemd/system/anaconda.target.wants/ -type l -delete || echo "Directory /lib/systemd/system/anaconda.target.wants does not exist" - -COPY ./configs/* /tmp/ - -RUN dnf makecache && \ - dnf install -y yum-utils \ - epel-release \ - git && \ - yum-config-manager --disable epel-cisco-openh264 && \ - dnf makecache && \ - yum-config-manager --disable epel && \ - dnf install -y --enablerepo=epel \ - the_silver_searcher \ - bat \ - htop && \ - dnf install -y bison \ - cmake3 \ - ed \ - flex \ - gcc \ - gcc-c++ \ - glibc-langpack-en \ - go \ - initscripts \ - iproute \ - less \ - m4 \ - net-tools \ - openssh-clients \ - openssh-server \ - passwd \ - perl \ - rsync \ - sudo \ - tar \ - unzip \ - util-linux-ng \ - wget \ - sshpass \ - which && \ - dnf install -y apr-devel \ - bzip2-devel \ - krb5-devel \ - libcurl-devel \ - libevent-devel \ - libxml2-devel \ - libuuid-devel \ - libzstd-devel \ - lz4-devel \ - openldap-devel \ - openssl-devel \ - pam-devel \ - perl-ExtUtils-Embed \ - perl-Test-Simple \ - perl-core \ - python3-devel \ - readline-devel \ - zlib-devel && \ - dnf install -y --enablerepo=crb \ - libuv-devel \ - libyaml-devel \ - protobuf-devel \ - perl-IPC-Run && \ - dnf install -y --enablerepo=epel \ - xerces-c-devel - -RUN cp /tmp/90-cbdb-sysctl.conf /etc/sysctl.conf && \ - cp /tmp/90-cbdb-limits.conf /etc/security/limits.d/90-cbdb-limits.conf && \ - cat /usr/share/zoneinfo/${TIMEZONE_VAR} > /etc/localtime && \ - echo "cdw" > /tmp/gpdb-hosts && \ - echo "/usr/local/lib" >> /etc/ld.so.conf && \ - echo "/usr/local/lib64" >> /etc/ld.so.conf && \ - ldconfig && \ - chmod 777 /tmp/gpinitsystem_singlenode && \ - chmod 777 /tmp/init_system.sh && \ - hostname > ~/orig_hostname && \ - /usr/sbin/groupadd gpadmin && \ - /usr/sbin/useradd gpadmin -g gpadmin -G wheel && \ - setcap cap_net_raw+ep /usr/bin/ping && \ - echo "cbdb@123"|passwd --stdin gpadmin && \ - echo "gpadmin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ - echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ - echo "export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1" >> /home/gpadmin/.bashrc && \ - echo "source /usr/local/cloudberry-db/greenplum_path.sh" >> /home/gpadmin/.bashrc && \ - mkdir -p /data0/database/coordinator /data0/database/primary /data0/database/mirror && \ - chown -R gpadmin:gpadmin /data0 && \ - ssh-keygen -A && \ - echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config - -RUN cd /tmp/ && \ - git clone --recurse-submodules --branch main --single-branch --depth=1 https://github.com/apache/cloudberry.git - -RUN cd /tmp/cloudberry && \ - ./configure --prefix=/usr/local/cloudberry-db \ - --enable-cassert \ - --enable-debug-extensions \ - --enable-gpcloud \ - --enable-ic-proxy \ - --enable-mapreduce \ - --enable-orafce \ - --enable-orca \ - --enable-pax \ - --enable-pxf \ - --enable-tap-tests \ - --with-gssapi \ - --with-ldap \ - --with-libxml \ - --with-lz4 \ - --with-openssl \ - --with-pam \ - --with-perl \ - --with-pgport=5432 \ - --with-python \ - --with-pythonsrc-ext - -RUN cd /tmp/cloudberry && \ - make -j$(nproc) && \ - make install - -RUN cd /tmp/cloudberry/contrib && \ - make -j$(nproc) && \ - make install +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# Multi-stage Dockerfile for Apache Cloudberry Sandbox Environment +# -------------------------------------------------------------------- +# This Dockerfile uses pre-built Apache Cloudberry build images to +# compile and install Cloudberry from the main branch, then creates +# a runtime environment for testing and development. +# -------------------------------------------------------------------- + +# Build stage: Use pre-built image to compile Cloudberry +FROM rockylinux/rockylinux:9.6 AS builder + +# Install build toolchains and development headers (avoid coreutils/curl conflicts on arm64) +RUN dnf makecache && \ + dnf install -y \ + epel-release \ + git && \ + dnf config-manager --disable epel-cisco-openh264 && \ + dnf makecache && \ + dnf config-manager --disable epel && \ + dnf install -y --enablerepo=epel \ + the_silver_searcher \ + bat \ + htop && \ + dnf install -y \ + bison \ + cmake3 \ + ed \ + file \ + flex \ + gcc \ + gcc-c++ \ + gdb \ + glibc-langpack-en \ + glibc-locale-source \ + initscripts \ + iproute \ + less \ + lsof \ + m4 \ + net-tools \ + openssh-clients \ + openssh-server \ + perl \ + rpm-build \ + rpmdevtools \ + rsync \ + sudo \ + tar \ + unzip \ + util-linux-ng \ + wget \ + sshpass \ + which && \ + dnf install -y \ + apr-devel \ + bzip2-devel \ + java-11-openjdk \ + java-11-openjdk-devel \ + krb5-devel \ + libcurl-devel \ + libevent-devel \ + libxml2-devel \ + libuuid-devel \ + libzstd-devel \ + lz4 \ + lz4-devel \ + openldap-devel \ + openssl-devel \ + pam-devel \ + perl-ExtUtils-Embed \ + perl-Test-Simple \ + perl-core \ + python3-devel \ + python3-pytest \ + readline-devel \ + zlib-devel && \ + dnf install -y --enablerepo=crb \ + libuv-devel \ + libyaml-devel \ + perl-IPC-Run \ + protobuf-devel && \ + dnf clean all && \ + cd && XERCES_LATEST_RELEASE=3.3.0 && \ + wget -nv "https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-${XERCES_LATEST_RELEASE}.tar.gz" && \ + echo "$(curl -sL https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-${XERCES_LATEST_RELEASE}.tar.gz.sha256)" | sha256sum -c - && \ + tar xf "xerces-c-${XERCES_LATEST_RELEASE}.tar.gz"; rm "xerces-c-${XERCES_LATEST_RELEASE}.tar.gz" && \ + cd xerces-c-${XERCES_LATEST_RELEASE} && \ + ./configure --prefix=/usr/local/xerces-c && \ + make -j$(nproc) && \ + make install -C ~/xerces-c-${XERCES_LATEST_RELEASE} && \ + rm -rf ~/xerces-c* + +# Create gpadmin user and grant passwordless sudo in builder +RUN groupadd -r gpadmin && \ + useradd -m -r -g gpadmin -s /bin/bash gpadmin && \ + echo "gpadmin ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/gpadmin && \ + chmod 440 /etc/sudoers.d/gpadmin + +# Switch to gpadmin user +USER gpadmin +WORKDIR /home/gpadmin + +# Clone the latest Cloudberry source code +RUN git clone --recurse-submodules --branch main --single-branch --depth=1 https://github.com/apache/cloudberry.git + +# Build Cloudberry using the official build scripts +RUN cd /home/gpadmin/cloudberry && \ + export SRC_DIR=/home/gpadmin/cloudberry && \ + mkdir -p ${SRC_DIR}/build-logs && \ + ./devops/build/automation/cloudberry/scripts/configure-cloudberry.sh && \ + ./devops/build/automation/cloudberry/scripts/build-cloudberry.sh + +# -------------------------------------------------------------------- +# Runtime stage: Switch to a slimmer base image (Rocky Linux 9) +# -------------------------------------------------------------------- +FROM rockylinux/rockylinux:9.6 + +# Install required runtime dependencies, SSH server, sudo, and tools +# Note: Use dnf on Rocky Linux 9 +RUN dnf -y update && \ + dnf -y install \ + openssh-server openssh-clients \ + sudo shadow-utils \ + bash procps-ng \ + ca-certificates \ + python3 \ + apr \ + bzip2-libs \ + krb5-libs \ + libevent \ + libicu \ + libuuid \ + libxml2 \ + libyaml \ + libzstd \ + lz4 \ + ncurses \ + openldap \ + openssl \ + pam \ + pcre2 \ + perl \ + protobuf \ + readline \ + zlib \ + glibc-langpack-en \ + libuv \ + iproute \ + net-tools \ + which \ + rsync \ + keyutils \ + libstdc++ && \ + dnf clean all && rm -rf /var/cache/dnf + +# Create gpadmin user and group, grant passwordless sudo +RUN groupadd -r gpadmin && \ + useradd -m -r -g gpadmin -s /bin/bash gpadmin && \ + echo "gpadmin ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/gpadmin && \ + chmod 440 /etc/sudoers.d/gpadmin + +# Prepare SSH daemon: generate host keys, ensure runtime dir, and allow gpadmin to start it +RUN ssh-keygen -A && mkdir -p /run/sshd && chmod u+s /usr/sbin/sshd + +# Copy built Cloudberry from builder stage +COPY --from=builder /usr/local/cloudberry-db /usr/local/cloudberry-db + +# Bring Xerces libs into Cloudberry lib dir and normalize SONAME via builder-installed versioned prefix +COPY --from=builder /usr/local/xerces-c/lib/libxerces-c.so /usr/local/cloudberry-db/lib/ +COPY --from=builder /usr/local/xerces-c/lib/libxerces-c-3.*.so /usr/local/cloudberry-db/lib/ + +# Copy configuration files to their final destinations +COPY ./configs/90-cbdb-limits.conf /etc/security/limits.d/90-cbdb-limits.conf +COPY ./configs/90-cbdb-sysctl.conf /etc/sysctl.d/90-cbdb-sysctl.conf +COPY ./configs/gpinitsystem_singlenode /tmp/gpinitsystem_singlenode +COPY ./configs/gpinitsystem_multinode /tmp/gpinitsystem_multinode +COPY ./configs/multinode-gpinit-hosts /tmp/multinode-gpinit-hosts +COPY ./configs/init_system.sh /tmp/init_system.sh + +# Runtime configuration +RUN echo "cdw" > /tmp/gpdb-hosts && \ + chmod 755 /tmp/gpinitsystem_singlenode && \ + chmod 755 /tmp/gpinitsystem_multinode && \ + chmod 755 /tmp/init_system.sh && \ + mkdir -p /data0/database/coordinator /data0/database/primary /data0/database/mirror && \ + chown -R gpadmin:gpadmin \ + /usr/local/cloudberry-db \ + /tmp/gpinitsystem_singlenode \ + /tmp/gpinitsystem_multinode \ + /tmp/gpdb-hosts \ + /tmp/multinode-gpinit-hosts \ + /data0 && \ + echo "export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1" >> /home/gpadmin/.bashrc && \ + echo -e '\n# Add Cloudberry entries\nif [ -f /usr/local/cloudberry-db/cloudberry-env.sh ]; then\n source /usr/local/cloudberry-db/cloudberry-env.sh\nfi' >> /home/gpadmin/.bashrc # ---------------------------------------------------------------------- -# Set the Default User and Command +# Generate SSH keypair for gpadmin user at build time # ---------------------------------------------------------------------- -# The default user is set to 'gpadmin', and the container starts by -# running the init_system.sh script. This container serves as a base -# environment, and the Apache Cloudberry RPM can be installed for -# testing and functional verification. +# WARNING: This embeds a fixed SSH keypair in the Docker image for +# sandbox convenience. This is ONLY suitable for local testing and +# development. DO NOT use this image in production or any environment +# where security is a concern. # ---------------------------------------------------------------------- +RUN mkdir -p /home/gpadmin/.ssh && \ + ssh-keygen -t rsa -b 4096 -N '' -C 'gpadmin@cloudberry-sandbox' \ + -f /home/gpadmin/.ssh/id_rsa && \ + cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys && \ + chmod 700 /home/gpadmin/.ssh && \ + chmod 600 /home/gpadmin/.ssh/id_rsa && \ + chmod 644 /home/gpadmin/.ssh/id_rsa.pub && \ + chmod 600 /home/gpadmin/.ssh/authorized_keys && \ + chown -R gpadmin:gpadmin /home/gpadmin/.ssh + +# Set default user and working directory USER gpadmin -ENV USER=gpadmin WORKDIR /home/gpadmin EXPOSE 5432 22 +# cgroup mount (provided by compose/run) VOLUME [ "/sys/fs/cgroup" ] + +# Start the container by running the initialization script CMD ["bash","-c","/tmp/init_system.sh"] diff --git a/devops/sandbox/README.md b/devops/sandbox/README.md index b8e0043c574..bf39e5348fd 100644 --- a/devops/sandbox/README.md +++ b/devops/sandbox/README.md @@ -1,14 +1,39 @@ + --- title: Sandbox of Apache Cloudberry --- # Install Apache Cloudberry With Docker -This document guides you on how to quickly set up and connect to a Apache Cloudberry in a Docker environment. You can try out Apache Cloudberry by performing some basic operations and running SQL commands. +This document guides you on how to quickly set up and connect to Apache Cloudberry in a Docker environment. You can try out Apache Cloudberry by performing some basic operations and running SQL commands. > [!WARNING] > This guide is intended for testing or development. DO NOT use it for production. +> [!WARNING] +> **Security Notice: Embedded SSH Keys** +> +> For ease of use, this sandbox environment includes **pre-generated SSH keys embedded in the Docker image**. All containers built from the same image share the same SSH keypair, allowing passwordless SSH communication between nodes. +> +> **This is ONLY acceptable for local testing and development environments.** These embedded keys are **NOT secure** and must **NEVER** be used in production or any environment where security is a concern. Anyone with access to the Docker image can extract these keys. + ## Prerequisites @@ -19,13 +44,13 @@ Make sure that your environment meets the following requirements: ## Build the Sandbox -When building and deploying Cloudberry in Docker, you will have 2 different deployment options as well as different build options. +When building and deploying Apache Cloudberry in Docker, you will have 2 different deployment options as well as different build options. **Deployment Options** -1. **Single Container** (Default) - With the single container option, you will have the coordinator as well as the Cloudberry segments all running on a single container. This is the default behavior when deploying using the `run.sh` script provided. -2. **Multi-Container** - Deploying with the multi-container option will give you a more realistic deployment of what actual production Cloudberry clusters look like. With multi-node, you will have the coordinator, the standby coordinator, and 2 segment hosts all on their own respective containers. This is to both highlight the distributed nature of Apache Cloudberry as well as highlight how high availability (HA) features work in the event of a server (or in this case a container) failing. This is enabled by passing the -m flag to the `run.sh` script which will be highlighted below. +1. **Single Container** (Default) - With the single container option, you will have the coordinator as well as the Apache Cloudberry segments all running on a single container. This is the default behavior when deploying using the `run.sh` script provided. +2. **Multi-Container** - Deploying with the multi-container option will give you a more realistic deployment of what actual production Apache Cloudberry clusters look like. With multi-node, you will have the coordinator, the standby coordinator, and 2 segment hosts all on their own respective containers. This is to both highlight the distributed nature of Apache Cloudberry as well as highlight how high availability (HA) features work in the event of a server (or in this case a container) failing. This is enabled by passing the -m flag to the `run.sh` script which will be highlighted below. -![cloudberry Sandbox Deployments](../images/sandbox-deployment.jpg) +![cloudberry Sandbox Deployments](./sandbox-deployment.jpg) **Build Options** @@ -36,48 +61,48 @@ Build and deploy steps: 1. Start Docker Desktop and make sure it is running properly on your host platform. -2. Download this repository (which is [apache/cloudberry-bootcamp](https://github.com/apache/cloudberry-bootcamp)) to the target machine. +2. Clone the Apache Cloudberry repository to the target machine. ```shell - git clone https://github.com/apache/cloudberry-bootcamp.git + git clone https://github.com/apache/cloudberry.git ``` 3. Enter the repository and run the `run.sh` script to start the Docker container. This will start the automatic installation process. Depending on your environment, you may need to run this with 'sudo' command. - - For latest Cloudberry DB release running on a single container + - For latest Apache Cloudberry release running on a single container ```shell - cd bootcamp/000-cbdb-sandbox - ./run.sh + cd cloudberry/devops/sandbox + ./run.sh -c 2.0.0 ``` - - For latest Cloudberry DB release running across multiple containers + - For latest Apache Cloudberry release running across multiple containers ```shell - cd bootcamp/000-cbdb-sandbox - ./run.sh -m + cd cloudberry/devops/sandbox + ./run.sh -c 2.0.0 -m ``` - For latest main branch running on a single container ```shell - cd bootcamp/000-cbdb-sandbox + cd cloudberry/devops/sandbox ./run.sh -c main ``` - For latest main branch running across multiple containers ```shell - cd bootcamp/000-cbdb-sandbox + cd cloudberry/devops/sandbox ./run.sh -c main -m ``` - Once the script finishes without error, the sandbox is built and running successfully. The `docker run` and `docker compose` commands use the --detach option allowing you to ssh or access the running CBDB instance remotely. + Once the script finishes without error, the sandbox is built and running successfully. The `docker run` and `docker compose` commands use the --detach option allowing you to ssh or access the running Apache Cloudberry instance remotely. Please review run.sh script for additional options (e.g. setting Timezone in running container, only building container). You can also execute `./run.sh -h` to see the usage. ## Connect to the database > [!NOTE] -> When deploying the multi-container Cloudberry environment it may take extra time for the database to initialize, so you may need to wait a few minutes before you can execute the psql prompt successfully. You can run `docker logs cbdb-cdw -f` to see the current state of the database initialization process, you'll know the process is finished when you see the "Deployment Successful" output. +> When deploying the multi-container Apache Cloudberry environment it may take extra time for the database to initialize, so you may need to wait a few minutes before you can execute the psql prompt successfully. You can run `docker logs cbdb-cdw -f` to see the current state of the database initialization process, you'll know the process is finished when you see the "Deployment Successful" output. You can now connect to the database and try some basic operations. @@ -97,23 +122,38 @@ You can now connect to the database and try some basic operations. ```shell [gpadmin@cdw ~]$ psql # Connects to the database with the default database name "gpadmin". - + # psql (14.4, server 14.4) # Type "help" for help. + # Note: No password is required for the gpadmin user in this sandbox environment. ``` ```sql gpadmin=# SELECT VERSION(); -- Checks the database version. - + PostgreSQL 14.4 (Apache Cloudberry 1.0.0 build dev) on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 10.2.1 20210130 (Red Hat 10.2.1-11), 64-bit compiled on Oct 24 2023 10:24:28 (1 row) ``` -Now you have a Apache Cloudberry and can continue with [Apache Cloudberry Tutorials Based on Docker Installation](https://github.com/apache/cloudberry-bootcamp/blob/main/101-cbdb-tutorials/README.md)! Enjoy! +3. Alternatively, you can connect to the database directly from your host machine without entering the container: -## Working with your Cloudberry Docker environment + The Apache Cloudberry coordinator port (default 5432) is mapped to port **15432** on your host machine. You can use the `psql` client on your host to connect directly: -When working with the Cloudberry Docker environment there are a few commands that will be useful to you. + ```shell + # Connect from host machine + psql -h localhost -p 15432 -d postgres -U gpadmin + ``` + + > [!NOTE] + > - No password is required for the `gpadmin` user in this sandbox environment. + > - Make sure you have PostgreSQL client (`psql`) installed on your host machine. + > - The port mapping is: Container port `5432` β†’ Host port `15432` + +Now you have an Apache Cloudberry and can continue with [Apache Cloudberry Tutorials](https://cloudberry.apache.org/docs/)! Enjoy! + +## Working with your Apache Cloudberry Docker environment + +When working with the Apache Cloudberry Docker environment there are a few commands that will be useful to you. **Stopping Your Single Container Deployment With Docker** @@ -143,7 +183,7 @@ To stop the **multi-container** deployment and also remove the network and volum docker compose -f docker-compose-rockylinux9.yml down -v ``` -**Starting A Stopped Single Container Cloudberry Docker Deployment** +**Starting A Stopped Single Container Apache Cloudberry Docker Deployment** If you've run any of the commands above that keep the Docker volumes persisted between shutting the containers down, you can use the following commands to bring that same deployment back up with it's previous state. @@ -153,7 +193,7 @@ To start a **single container** deployment after it was shut down, you can simpl docker start cbdb-cdw ``` -**Starting A Stopped Multi-Container Cloudberry Docker Deployment** +**Starting A Stopped Multi-Container Apache Cloudberry Docker Deployment** To start a **multi-container** deployment after it was shut down, you can run the following command. @@ -162,10 +202,10 @@ docker compose -f docker-compose-rockylinux9.yml start ``` > [!NOTE] -> When starting a previously stopped Cloudberry Docker environment, you'll need to manually start the database back up. To do this, just run the following commands once the container(s) are back up and running. The `gpstart` command is used for starting the database, and -a is a flag saying to start the database without prompting (non-interactive). +> When starting a previously stopped Apache Cloudberry Docker environment, you'll need to manually start the database back up. To do this, just run the following commands once the container(s) are back up and running. The `gpstart` command is used for starting the database, and -a is a flag saying to start the database without prompting (non-interactive). ```shell docker exec -it cbdb-cdw /bin/bash [gpadmin@cdw /] gpstart -a -``` +``` \ No newline at end of file diff --git a/devops/sandbox/configs/90-cbdb-limits.conf b/devops/sandbox/configs/90-cbdb-limits.conf index d2bf601095b..33088f92278 100644 --- a/devops/sandbox/configs/90-cbdb-limits.conf +++ b/devops/sandbox/configs/90-cbdb-limits.conf @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- ###################### # CBDB CONFIG PARAMS # ###################### diff --git a/devops/sandbox/configs/90-cbdb-sysctl.conf b/devops/sandbox/configs/90-cbdb-sysctl.conf index ed806a5d8d1..9f0b7c576e4 100644 --- a/devops/sandbox/configs/90-cbdb-sysctl.conf +++ b/devops/sandbox/configs/90-cbdb-sysctl.conf @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- ###################### # CBDB CONFIG PARAMS # ###################### diff --git a/devops/sandbox/configs/gpinitsystem_multinode b/devops/sandbox/configs/gpinitsystem_multinode index ef96d730068..d6a46d4d410 100644 --- a/devops/sandbox/configs/gpinitsystem_multinode +++ b/devops/sandbox/configs/gpinitsystem_multinode @@ -1,9 +1,28 @@ -# FILE NAME: gpinitsystem_singlenode +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# FILE NAME: gpinitsystem_multinode # A configuration file is needed by the gpinitsystem utility. -# This sample file initializes a Apache Cloudberry Single Node -# Edition (SNE) system with one coordinator and two segment instances -# on the local host. This file is referenced when you run gpinitsystem. +# This sample file initializes an Apache Cloudberry multi-node cluster +# with one coordinator, one standby coordinator, and segment instances +# across multiple hosts. This file is referenced when you run gpinitsystem. ################################################ # REQUIRED PARAMETERS diff --git a/devops/sandbox/configs/gpinitsystem_singlenode b/devops/sandbox/configs/gpinitsystem_singlenode index baaaebfba83..f221d81938c 100644 --- a/devops/sandbox/configs/gpinitsystem_singlenode +++ b/devops/sandbox/configs/gpinitsystem_singlenode @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- # FILE NAME: gpinitsystem_singlenode # A configuration file is needed by the gpinitsystem utility. diff --git a/devops/sandbox/configs/init_system.sh b/devops/sandbox/configs/init_system.sh index 73dafa9b001..455341ff46c 100755 --- a/devops/sandbox/configs/init_system.sh +++ b/devops/sandbox/configs/init_system.sh @@ -1,74 +1,130 @@ #!/bin/bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- ## ====================================================================== -## Container initialization script +## Container initialization script for Apache Cloudberry Sandbox ## ====================================================================== # ---------------------------------------------------------------------- # Start SSH daemon and setup for SSH access # ---------------------------------------------------------------------- # The SSH daemon is started to allow remote access to the container via -# SSH. This is useful for development and debugging purposes. If the SSH -# daemon fails to start, the script exits with an error. +# SSH. This is useful for development and debugging purposes. # ---------------------------------------------------------------------- -if ! sudo /usr/sbin/sshd; then + +# Ensure SSH directory exists (created at build time; ignore errors if any) +mkdir -p /run/sshd 2>/dev/null || true + +# Start SSH daemon directly (binary is setuid-root in the image) +if ! /usr/sbin/sshd; then echo "Failed to start SSH daemon" >&2 exit 1 fi +# Give SSH daemon time to start +sleep 5 + # ---------------------------------------------------------------------- # Remove /run/nologin to allow logins # ---------------------------------------------------------------------- # The /run/nologin file, if present, prevents users from logging into # the system. This file is removed to ensure that users can log in via SSH. # ---------------------------------------------------------------------- -sudo rm -rf /run/nologin - -# ## Set gpadmin ownership - Clouberry install directory and supporting -# ## cluster creation files. -sudo chown -R gpadmin.gpadmin /usr/local/cloudberry-db \ - /tmp/gpinitsystem_singlenode \ - /tmp/gpinitsystem_multinode \ - /tmp/gpdb-hosts \ - /tmp/multinode-gpinit-hosts \ - /tmp/faa.tar.gz \ - /tmp/smoke-test.sh +rm -f /run/nologin 2>/dev/null || true # ---------------------------------------------------------------------- # Configure passwordless SSH access for 'gpadmin' user # ---------------------------------------------------------------------- -# The script sets up SSH key-based authentication for the 'gpadmin' user, -# allowing passwordless SSH access. It generates a new SSH key pair if one -# does not already exist, and configures the necessary permissions. +# SSH keys are already generated and configured in the Docker image at +# build time. All containers from the same image share the same keypair, +# which allows passwordless SSH between containers. +# +# This is ONLY suitable for sandbox/testing environments. +# DO NOT use this approach in production. # ---------------------------------------------------------------------- -mkdir -p /home/gpadmin/.ssh -chmod 700 /home/gpadmin/.ssh +# Verify SSH keys exist (they should be in the image already) if [ ! -f /home/gpadmin/.ssh/id_rsa ]; then - ssh-keygen -t rsa -b 4096 -C gpadmin -f /home/gpadmin/.ssh/id_rsa -P "" > /dev/null 2>&1 + echo "ERROR: SSH keys not found in image. This should not happen." + exit 1 fi -cat /home/gpadmin/.ssh/id_rsa.pub >> /home/gpadmin/.ssh/authorized_keys -chmod 600 /home/gpadmin/.ssh/authorized_keys - -# Add the container's hostname to the known_hosts file to avoid SSH warnings -ssh-keyscan -t rsa cdw > /home/gpadmin/.ssh/known_hosts 2>/dev/null - -# Source Cloudberry environment variables and set -# COORDINATOR_DATA_DIRECTORY -source /usr/local/cloudberry-db/greenplum_path.sh -export COORDINATOR_DATA_DIRECTORY=/data0/database/coordinator/gpseg-1 +# Add container hostnames to the known_hosts file to avoid SSH warnings +if [[ "${MULTINODE:-false}" == "true" ]]; then + ssh-keyscan -t rsa cdw scdw sdw1 sdw2 > /home/gpadmin/.ssh/known_hosts 2>/dev/null || true +else + ssh-keyscan -t rsa cdw > /home/gpadmin/.ssh/known_hosts 2>/dev/null || true +fi +chmod 600 /home/gpadmin/.ssh/known_hosts +chown gpadmin:gpadmin /home/gpadmin/.ssh/known_hosts + +# Load Cloudberry/Greenplum environment with fallback, then ensure PATH +if [ -f "/usr/local/cloudberry-db/cloudberry-env.sh" ]; then + # shellcheck disable=SC1091 + . /usr/local/cloudberry-db/cloudberry-env.sh +elif [ -f "/usr/local/cloudberry-db/greenplum_path.sh" ]; then + # shellcheck disable=SC1091 + . /usr/local/cloudberry-db/greenplum_path.sh +else + # Fallback: minimal env to find gp* tools + export GPHOME="/usr/local/cloudberry-db" +fi +# Ensure coordinator data dir variable is set +export COORDINATOR_DATA_DIRECTORY="${COORDINATOR_DATA_DIRECTORY:-/data0/database/coordinator/gpseg-1}" +# Ensure PATH includes Cloudberry bin +if [ -d "/usr/local/cloudberry-db/bin" ]; then + case ":$PATH:" in + *":/usr/local/cloudberry-db/bin:"*) : ;; + *) export PATH="/usr/local/cloudberry-db/bin:$PATH" ;; + esac +fi # Initialize single node Cloudberry cluster -if [[ $MULTINODE == "false" && $HOSTNAME == "cdw" ]]; then +if [[ "${MULTINODE:-false}" == "false" && "$HOSTNAME" == "cdw" ]]; then gpinitsystem -a \ -c /tmp/gpinitsystem_singlenode \ -h /tmp/gpdb-hosts \ --max_connections=100 # Initialize multi node Cloudberry cluster -elif [[ $MULTINODE == "true" && $HOSTNAME == "cdw" ]]; then - sshpass -p "cbdb@123" ssh-copy-id -o StrictHostKeyChecking=no sdw1 - sshpass -p "cbdb@123" ssh-copy-id -o StrictHostKeyChecking=no sdw2 - sshpass -p "cbdb@123" ssh-copy-id -o StrictHostKeyChecking=no scdw +elif [[ "${MULTINODE:-false}" == "true" && "$HOSTNAME" == "cdw" ]]; then + # Wait for other containers' SSH to become reachable (max 120s per host) + for host in sdw1 sdw2 scdw; do + MAX_WAIT=120 + WAITED=0 + until ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=5 gpadmin@${host} "echo Connected to ${host}" 2>/dev/null; do + if [ $WAITED -ge $MAX_WAIT ]; then + echo "Timeout waiting for SSH on ${host}" + exit 1 + fi + sleep 5 + WAITED=$((WAITED+5)) + done + done + + # Clean up any existing data directories to avoid conflicts + rm -rf /data0/database/coordinator/* /data0/database/primary/* /data0/database/mirror/* 2>/dev/null || true + + # Ensure database directories exist with proper permissions + mkdir -p /data0/database/coordinator /data0/database/primary /data0/database/mirror + chmod -R 700 /data0/database + gpinitsystem -a \ -c /tmp/gpinitsystem_multinode \ -h /tmp/multinode-gpinit-hosts \ @@ -77,19 +133,23 @@ elif [[ $MULTINODE == "true" && $HOSTNAME == "cdw" ]]; then printf "sdw1\nsdw2\n" >> /tmp/gpdb-hosts fi -if [ $HOSTNAME == "cdw" ]; then - ## Allow any host access the Cloudberry Cluster - echo 'host all all 0.0.0.0/0 trust' >> /data0/database/coordinator/gpseg-1/pg_hba.conf - gpstop -u - - psql -d template1 \ - -c "ALTER USER gpadmin PASSWORD 'cbdb@123'" +# ---------------------------------------------------------------------- +# Post-initialization configuration (applies to both single and multi-node) +# ---------------------------------------------------------------------- +# Configure pg_hba.conf to allow passwordless access from any host, +# remove password requirement for gpadmin user, and display cluster info. +# This section runs on the coordinator node after cluster initialization. +# ---------------------------------------------------------------------- +if [ "$HOSTNAME" == "cdw" ]; then + ## Allow any host access the Cloudberry Cluster + echo 'host all all 0.0.0.0/0 trust' >> /data0/database/coordinator/gpseg-1/pg_hba.conf + gpstop -u - cat <<-'EOF' + cat <<-'EOF' ====================================================================== - ____ _ _ _ - / ___| | ___ _ _ __| | |__ ___ _ __ _ __ _ _ + ____ _ _ _ + / ___| | ___ _ _ __| | |__ ___ _ __ _ __ _ _ | | | |/ _ \| | | |/ _` | '_ \ / _ \ '__| '__| | | | | |___| | (_) | |_| | (_| | |_) | __/ | | | | |_| | \____|_|\___/ \__,_|\__,_|_.__/ \___|_| |_| \__, | @@ -97,7 +157,7 @@ if [ $HOSTNAME == "cdw" ]; then ====================================================================== EOF - cat <<-'EOF' + cat <<-'EOF' ====================================================================== Sandbox: Apache Cloudberry Cluster details @@ -105,14 +165,14 @@ Sandbox: Apache Cloudberry Cluster details EOF - echo "Current time: $(date)" - source /etc/os-release - echo "OS Version: ${NAME} ${VERSION}" + echo "Current time: $(date)" + source /etc/os-release + echo "OS Version: ${NAME} ${VERSION}" - ## Set gpadmin password, display version and cluster configuration - psql -P pager=off -d template1 -c "SELECT VERSION()" - psql -P pager=off -d template1 -c "SELECT * FROM gp_segment_configuration ORDER BY dbid" - psql -P pager=off -d template1 -c "SHOW optimizer" + ## Display version and cluster configuration + psql -P pager=off -d template1 -c "SELECT VERSION()" + psql -P pager=off -d template1 -c "SELECT * FROM gp_segment_configuration ORDER BY dbid" + psql -P pager=off -d template1 -c "SHOW optimizer" fi echo """ diff --git a/devops/sandbox/configs/multinode-gpinit-hosts b/devops/sandbox/configs/multinode-gpinit-hosts index a85b4c3f097..6da00621266 100644 --- a/devops/sandbox/configs/multinode-gpinit-hosts +++ b/devops/sandbox/configs/multinode-gpinit-hosts @@ -1,2 +1,2 @@ sdw1 -sdw2 \ No newline at end of file +sdw2 diff --git a/devops/sandbox/docker-compose-rockylinux9.yml b/devops/sandbox/docker-compose-rockylinux9.yml index 37cccc98ca6..c37471898d1 100644 --- a/devops/sandbox/docker-compose-rockylinux9.yml +++ b/devops/sandbox/docker-compose-rockylinux9.yml @@ -1,3 +1,23 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- + services: cbdb-coordinator: container_name: cbdb-cdw @@ -11,6 +31,9 @@ services: ipv4_address: 10.5.0.10 environment: MULTINODE: "true" + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + cbdb-standby-coordinator: container_name: cbdb-scdw image: cbdb-${CODEBASE_VERSION}:${OS_VERSION} @@ -19,6 +42,10 @@ services: networks: interconnect: ipv4_address: 10.5.0.11 + environment: + MULTINODE: "true" + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro cbdb-segment-host-1: container_name: cbdb-sdw1 image: cbdb-${CODEBASE_VERSION}:${OS_VERSION} @@ -27,6 +54,10 @@ services: networks: interconnect: ipv4_address: 10.5.0.12 + environment: + MULTINODE: "true" + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro cbdb-segment-host-2: container_name: cbdb-sdw2 image: cbdb-${CODEBASE_VERSION}:${OS_VERSION} @@ -35,6 +66,11 @@ services: networks: interconnect: ipv4_address: 10.5.0.13 + environment: + MULTINODE: "true" + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + networks: interconnect: name: cbdb-interconnect diff --git a/devops/sandbox/run.sh b/devops/sandbox/run.sh index d42b55e1ecf..5e1888498ab 100755 --- a/devops/sandbox/run.sh +++ b/devops/sandbox/run.sh @@ -1,5 +1,24 @@ -#!/bin/bash -set -eu +#!/usr/bin/env bash +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +set -euo pipefail # Default values DEFAULT_OS_VERSION="rockylinux9" @@ -19,7 +38,7 @@ PIP_INDEX_URL_VAR="${PIP_INDEX_URL_VAR:-$DEFAULT_PIP_INDEX_URL_VAR}" # Function to display help message function usage() { echo "Usage: $0 [-o ] [-c ] [-b] [-m]" - echo " -c Codebase version (valid values: main, or determined from release zip file name)" + echo " -c Codebase version (valid values: main, or other available version like 2.0.0)" echo " -t Timezone (default: America/Los_Angeles, or set via TIMEZONE_VAR environment variable)" echo " -p Python Package Index (PyPI) (default: https://pypi.org/simple, or set via PIP_INDEX_URL_VAR environment variable)" echo " -b Build only, do not run the container (default: false, or set via BUILD_ONLY environment variable)" @@ -64,23 +83,10 @@ if [[ "${MULTINODE}" == "true" && "${BUILD_ONLY}" == "true" ]]; then exit 1 fi -# If CODEBASE_VERSION is not specified, determine it from the file name +# CODEBASE_VERSION must be specified via -c argument or CODEBASE_VERSION environment variable if [[ -z "$CODEBASE_VERSION" ]]; then - BASE_CODEBASE_FILE=$(ls configs/cloudberrydb-*.zip 2>/dev/null) - - if [[ -z "$BASE_CODEBASE_FILE" ]]; then - echo "Error: No configs/cloudberrydb-*.zip file found and codebase version not specified." - exit 1 - fi - - CODEBASE_FILE=$(basename ${BASE_CODEBASE_FILE}) - - if [[ $CODEBASE_FILE =~ cloudberrydb-([0-9]+\.[0-9]+\.[0-9]+)\.zip ]]; then - CODEBASE_VERSION="${BASH_REMATCH[1]}" - else - echo "Error: Cannot extract version from file name $CODEBASE_FILE" - exit 1 - fi + echo "Error: CODEBASE_VERSION must be specified via environment variable or '-c' command line parameter." + usage fi # Validate OS_VERSION and map to appropriate Docker image @@ -104,6 +110,7 @@ fi if [[ "${CODEBASE_VERSION}" = "main" ]]; then DOCKERFILE=Dockerfile.${CODEBASE_VERSION}.${OS_VERSION} + # Single image build docker build --file ${DOCKERFILE} \ --build-arg TIMEZONE_VAR="${TIMEZONE_VAR}" \ --tag cbdb-${CODEBASE_VERSION}:${OS_VERSION} . @@ -112,7 +119,6 @@ else docker build --file ${DOCKERFILE} \ --build-arg TIMEZONE_VAR="${TIMEZONE_VAR}" \ - --build-arg PIP_INDEX_URL_VAR="${PIP_INDEX_URL_VAR}" \ --build-arg CODEBASE_VERSION_VAR="${CODEBASE_VERSION}" \ --tag cbdb-${CODEBASE_VERSION}:${OS_VERSION} . fi diff --git a/pom.xml b/pom.xml index cc14b7e237d..ddb0af30549 100644 --- a/pom.xml +++ b/pom.xml @@ -1748,6 +1748,10 @@ code or new licensing patterns. --> devops/build/packaging/deb/ubuntu22.04/** + + devops/sandbox/configs/multinode-gpinit-hosts + + +# UDP2 Interconnect Protocol Implementation + +## Project Background + +UDP2 is a next-generation interconnect protocol implementation based on the original UDP protocol, located in the `contrib/udp2` directory. In CloudBerry Database, the interconnect is responsible for data transmission and synchronization between nodes, serving as a core component for distributed query execution. + +Currently, the database supports three interconnect protocol implementations: +- **TCP** (`contrib/interconnect/tcp`) - Reliable transmission based on TCP protocol +- **UDP** (`contrib/interconnect/udp`) - High-performance transmission based on UDP protocol +- **Proxy** (`contrib/interconnect/proxy`) - Proxy-based transmission + +UDP2 is an architectural refactoring based on the original UDP protocol implementation, aimed at achieving complete separation between interconnect and the database kernel. + +## Project Goals + +The core objectives of the UDP2 protocol implementation are: + +1. **Architecture Decoupling**: Completely separate the interconnect protocol implementation from the database kernel, enabling independent development and evolution +2. **Independent Testing**: Enable end-to-end functional and performance testing of interconnect without depending on the database kernel +3. **Rapid Diagnosis**: Quickly identify whether issues are at the interconnect level or database kernel level +4. **Modular Design**: Provide clear interface boundaries for easier extension and maintenance + +## Current Project Implementation Architecture + +### Overall Architecture Design + +UDP2 adopts a layered architecture design, primarily divided into two layers: + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Database Kernel Layer β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ contrib/udp2/ β”‚ β”‚ +β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ +β”‚ β”‚ β”‚ ic_modules.c β”‚ β”‚ ic_udp2.c β”‚ β”‚ β”‚ +β”‚ β”‚ β”‚ ic_modules.h β”‚ β”‚ ic_udp2.h β”‚ β”‚ β”‚ +β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ +β”‚ β”‚ Adapter Layer (Database Adapter) β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”‚ C/C++ Interface + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Independent IC Communication Library β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ contrib/udp2/ic_common/ β”‚ β”‚ +β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ +β”‚ β”‚ β”‚ ic_types.h β”‚ β”‚ ic_utility.hpp β”‚ β”‚ β”‚ +β”‚ β”‚ β”‚ ic_except.hpp β”‚ β”‚ ic_faultinjection.h β”‚ β”‚ β”‚ +β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ +β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ +β”‚ β”‚ β”‚ contrib/udp2/ic_common/udp2/ β”‚ β”‚ β”‚ +β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ +β”‚ β”‚ β”‚ β”‚ ic_udp2.h β”‚ β”‚ ic_udp2.hpp β”‚ β”‚ β”‚ β”‚ +β”‚ β”‚ β”‚ β”‚ ic_udp2.cpp β”‚ β”‚ic_udp2_internal.hpp β”‚ β”‚ β”‚ β”‚ +β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ +β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ +β”‚ β”‚ Core Communication Library β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### Core Component Description + +#### 1. Adapter Layer (`contrib/udp2/`) +- **ic_modules.c/h**: Module registration and initialization, implementing the `MotionIPCLayer` interface +- **ic_udp2.c/h**: Adapter layer between database kernel and ic_common library +- Responsible for converting database kernel data structures to ic_common library standard interfaces + +#### 2. Core Communication Library (`contrib/udp2/ic_common/`) +- **ic_types.h**: Defines core data types and interfaces, decoupled from database kernel +- **ic_utility.hpp**: Common utility functions and logging system +- **ic_except.hpp**: Exception handling mechanism +- **ic_faultinjection.h**: Fault injection testing support + +#### 3. UDP2 Protocol Implementation (`contrib/udp2/ic_common/udp2/`) +- **ic_udp2.h**: C language interface definition +- **ic_udp2.hpp**: C++ interface definition +- **ic_udp2.cpp**: Core protocol implementation +- **ic_udp2_internal.hpp**: Internal implementation details + +### Build System + +UDP2 uses CMake build system with support for independent compilation: + +``` +contrib/udp2/ +β”œβ”€β”€ CMakeLists.txt # Main build configuration +β”œβ”€β”€ Makefile # PostgreSQL-compatible Makefile +└── ic_common/ + β”œβ”€β”€ CMakeLists.txt # ic_common library build configuration + └── build/ # Build output directory +``` + +Build process: +1. First build the `ic_common` dynamic library (`libic_common.so`) +2. Then build the `udp2` module (`udp2.so`), linking against the `ic_common` library + +## How to Switch Database to This Protocol Implementation + +### Enable UDP2 Support at Compile Time + +1. **Configure compilation options**: +```bash +./configure --enable-ic-udp2 [other options] +make && make install +``` + +2. **Verify compilation results**: +```bash +# Check if udp2.so is generated +ls -la $GPHOME/lib/postgresql/udp2.so + +# Check if ic_common library is installed +ls -la $GPHOME/lib/libic_common.so +``` + +### Runtime Configuration + +```bash +# Set cluster to use UDP2 by default +gpconfig -c gp_interconnect_type -v udp2 + +# Reload configuration +gpstop -air +``` + +```sql +-- Check current interconnect type +SHOW gp_interconnect_type; +``` + +## Technical Details + +### Interface Design + +UDP2 achieves decoupling between database kernel and communication library through standardized C interfaces: + +```c +// Core interface functions (ic_common/udp2/ic_udp2.h) +extern ICChunkTransportState* UDP2_SetupUDP(ICSliceTable *sliceTable, + SessionMotionLayerIPCParam *param); +extern void UDP2_TeardownUDP(ICChunkTransportState *transportStates, bool hasErrors); + +// Data send/receive interfaces +extern bool UDP2_SendData(ICChunkTransportState *transportStates, + int16 motNodeID, int16 targetRoute, + DataBlock *pblocks, int num, bool broadcast); +extern void UDP2_RecvAny(ICChunkTransportState *transportStates, + int16 motNodeID, int16 *srcRoute, + GetDataLenInPacket getLen, DataBlock *data); +``` + +### Data Structure Mapping + +UDP2 defines lightweight data structures to replace complex database kernel structures: + +```c +// Lightweight process information (replaces CdbProcess) +typedef struct ICCdbProcess { + bool valid; + char *listenerAddr; + int listenerPort; + int pid; + int contentid; + int dbid; +} ICCdbProcess; + +// Lightweight slice information (replaces ExecSlice) +typedef struct ICExecSlice { + int sliceIndex; + int parentIndex; + int numChildren; + int *children; + int numSegments; + int numPrimaryProcesses; + ICCdbProcess *primaryProcesses; +} ICExecSlice; +``` + +### Error Handling Mechanism + +UDP2 implements a unified error handling mechanism: + +```c +typedef enum ErrorLevel { + LEVEL_OK, + LEVEL_ERROR, + LEVEL_FATAL, +} ErrorLevel; + +// Error handling interfaces +extern void SetLastError(ErrorLevel level, const char *msg); +extern ICError* GetLastError(); +extern void ResetLastError(); +``` + +## Development and Debugging + +### Independent Compilation Testing + +```bash +# Enter ic_common directory +cd contrib/udp2/ic_common + +# Create build directory +mkdir build && cd build + +# Configure and compile +cmake -DCMAKE_BUILD_TYPE=Debug .. +make -j +``` + +### Debug Configuration + +Enable verbose logging in development environment: + +```sql +-- Enable interconnect debug logging +SET gp_log_interconnect = 'debug'; + +-- Set log level +SET log_min_messages = 'debug1'; + +-- Enable detailed error information +SET gp_interconnect_log_stats = on; +``` diff --git a/contrib/udp2/ic_common/CMakeLists.txt b/contrib/udp2/ic_common/CMakeLists.txt new file mode 100644 index 00000000000..2c26e002b84 --- /dev/null +++ b/contrib/udp2/ic_common/CMakeLists.txt @@ -0,0 +1,95 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +cmake_minimum_required(VERSION 3.11.0) +project(ic_common) + +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED True) + +# Get the top-level project directory +set(TOP_DIR ${PROJECT_SOURCE_DIR}/../../..) +set(CBDB_INCLUDE_DIR ${TOP_DIR}/src/include) + +# CMAKE_INSTALL_PREFIX should be set by the calling Makefile +# If not set, we'll use a reasonable default but warn about it +if(NOT DEFINED CMAKE_INSTALL_PREFIX OR CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") + message(WARNING "CMAKE_INSTALL_PREFIX not set by parent build system, using default") + set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Install prefix" FORCE) +endif() + +# Check for debug/release configuration from main project +include(CheckSymbolExists) +set(PG_CONFIG_HEADER_FILE "${CBDB_INCLUDE_DIR}/pg_config.h") +if(EXISTS "${PG_CONFIG_HEADER_FILE}") + CHECK_SYMBOL_EXISTS(USE_ASSERT_CHECKING "${PG_CONFIG_HEADER_FILE}" IC_USE_DEBUG) + if(IC_USE_DEBUG) + set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE) + message(STATUS "Setting CMAKE_BUILD_TYPE to 'Debug' based on main project configuration") + else() + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) + message(STATUS "Setting CMAKE_BUILD_TYPE to 'Release' based on main project configuration") + endif() +else() + # Fallback to Release if pg_config.h is not found + if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) + message(STATUS "Setting default CMAKE_BUILD_TYPE to 'Release'") + endif() +endif() + +file(GLOB SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/udp2/*.cpp") + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/udp2) + +add_library(ic_common SHARED ${SOURCES}) + +set_target_properties(ic_common PROPERTIES OUTPUT_NAME "ic_common") + +# Set compiler flags consistent with main project +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -Wall -Wpointer-arith -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wformat-security -fno-strict-aliasing -fwrapv") + +if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -g -ggdb") + message(STATUS "Building ic_common in Debug mode") +elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O2 -DNDEBUG") + message(STATUS "Building ic_common in Release mode") +endif() + +# Install headers to the main project's include directory +install(FILES + "${CMAKE_CURRENT_SOURCE_DIR}/ic_types.h" + "${CMAKE_CURRENT_SOURCE_DIR}/ic_except.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/ic_utility.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/ic_faultinjection.h" + DESTINATION "${CMAKE_INSTALL_PREFIX}/include/postgresql/" +) + +install(FILES + "${CMAKE_CURRENT_SOURCE_DIR}/udp2/ic_udp2.h" + "${CMAKE_CURRENT_SOURCE_DIR}/udp2/ic_udp2.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/udp2/ic_udp2_internal.hpp" + DESTINATION "${CMAKE_INSTALL_PREFIX}/include/postgresql/udp2/" +) + +# Install library to the main project's lib directory +install(TARGETS ic_common + LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/" + ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/" +) diff --git a/contrib/udp2/ic_common/ic_except.hpp b/contrib/udp2/ic_common/ic_except.hpp new file mode 100644 index 00000000000..9761d499487 --- /dev/null +++ b/contrib/udp2/ic_common/ic_except.hpp @@ -0,0 +1,75 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_except.hpp + * + * IDENTIFICATION + * contrib/udp2/ic_common/ic_except.hpp + * + *------------------------------------------------------------------------- + */ +#ifndef IC_EXCEPT_HPP +#define IC_EXCEPT_HPP + +class ICException: public std::runtime_error { +public: + ICException(const std::string & arg, const char *file, int line): std::runtime_error(arg) { + std::stringstream ss; + ss << arg << " from " << file << ":" << line << std::endl; + detail = ss.str(); + } + ~ICException() throw() {} + + virtual const char *msg() const { + return detail.c_str(); + } + +protected: + std::string detail; +}; + +class ICFatalException: public ICException { +public: + ICFatalException(const std::string & arg, const char *file, int line): + ICException(arg, file, line) {} + ~ICFatalException() throw () {} +}; + +class ICInvalidIndex: public ICException { +public: + ICInvalidIndex(const std::string & arg, const char *file, int line): + ICException(arg, file, line) {} + ~ICInvalidIndex() throw () {} +}; + +class ICNetworkException: public ICException { +public: + ICNetworkException(const std::string & arg, const char *file, int line): + ICException(arg, file, line) {} + ~ICNetworkException() throw () {} +}; + +class ICReceiveThreadException: public ICException { +public: + ICReceiveThreadException(const std::string & arg, const char *file, int line): + ICException(arg, file, line) {} + ~ICReceiveThreadException() throw () {} +}; + +#endif // IC_EXCEPT_HPP \ No newline at end of file diff --git a/contrib/udp2/ic_common/ic_faultinjection.h b/contrib/udp2/ic_common/ic_faultinjection.h new file mode 100644 index 00000000000..b79cfed28dd --- /dev/null +++ b/contrib/udp2/ic_common/ic_faultinjection.h @@ -0,0 +1,620 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_faultinjection.h + * + * IDENTIFICATION + * contrib/udp2/ic_common/ic_faultinjection.h + * + *------------------------------------------------------------------------- + */ + +#ifndef IC_FAULTINJECTION_H +#define IC_FAULTINJECTION_H + +#ifdef HAVE_POLL_H +#include +#endif + +#ifdef HAVE_SYS_POLL_H +#include +#endif + +#ifdef USE_ASSERT_CHECKING + +static bool udp_testmode = false; + +static inline void +set_test_mode() +{ + if (session_param.gp_udpic_dropseg != UNDEF_SEGMENT + || session_param.gp_udpic_dropacks_percent != 0 + || session_param.gp_udpic_dropxmit_percent != 0 + || session_param.gp_udpic_fault_inject_percent != 0) + udp_testmode = true; + else + udp_testmode = false; +} + +/* + * testmode_inject_fault + * Return whether we inject a fault given a probability. + * + */ +static inline bool +testmode_inject_fault(int percent) +{ + if (udp_testmode && + (session_param.gp_udpic_dropseg == UNDEF_SEGMENT || session_param.gp_udpic_dropseg == global_param.segindex)) + { + if (random() % 100 < percent) + return true; + } + + return false; +} + +/* Track the malloc times */ +static pthread_mutex_t icudp_malloc_tracking_lock = PTHREAD_MUTEX_INITIALIZER; +static int64 icudp_malloc_times = 0; + +/* Fault type enumeration. */ +typedef enum { + /* These are used to inject packet content corruption. */ + FINC_PKT_HEADER_SHORTEN = 0, + FINC_PKT_PKT_SHORTEN = 1, + FINC_PKT_CRC_CORRUPT = 2, + FINC_PKT_HEADER_LEN_ZERO = 3, + FINC_PKT_HEADER_LEN_NEGATIVE = 4, + FINC_PKT_MISMATCH = 5, + + /* These are used to inject query cancel and process die. */ + FINC_INTR_QUERY_CANCEL = 12, + FINC_INTR_PROC_DIE = 13, + + /* These are used to inject OS API errors. */ + FINC_OS_EAGAIN = 16, + FINC_OS_EINTR = 17, + FINC_OS_EWOULDBLOCK = 18, + FINC_OS_NET_INTERFACE = 19, + FINC_OS_MEM_INTERFACE = 20, + FINC_OS_CREATE_THREAD = 21, + FINC_PKT_TOO_LONG = 22, + + /* These are used to inject network faults. */ + FINC_NET_RECV_ERROR = 23, + FINC_NET_PKT_DUP = 24, + FINC_NET_RECV_ZERO = 25, + + /* This is a fault which is used to introduce a specific null return of malloc in bg thread */ + FINC_RX_BUF_NULL = 29, + + /* The last guard item, don't put anything behind this one. */ + FINC_MAX_LIMITATION = 31, +} FAULT_INJECTION_TYPE; + +#define FINC_HAS_FAULT(type) (session_param.gp_udpic_fault_inject_bitmap & (1U << (type))) + +/* +* FAULT_TYPE_FUNCTION +* define the all test function name which uses fault injection test. +*/ +typedef enum { + FUNC_TESTMODE_RECVFROM, + FUNC_TESTMODE_MAX +} FAULT_TYPE_FUNCTION; + +/* +* fault_type_array_length +* record acutal fault type number for every test function which uses fault injection test. +*/ +static unsigned int fault_type_array_length[FUNC_TESTMODE_MAX][1] = { 0 }; + +/* +* fault_type_array +* define the fault type for for every test function which uses fault injection test. +*/ +static const unsigned int fault_type_array[][FINC_MAX_LIMITATION + 1] = { + { FINC_OS_EAGAIN, FINC_OS_EINTR, FINC_OS_EWOULDBLOCK, FINC_NET_RECV_ZERO, FINC_OS_NET_INTERFACE, FINC_NET_RECV_ERROR, FINC_MAX_LIMITATION } +}; + +/* + * testmode_check_interrupts + * ML_CHECK_FOR_INTERRUPTS in test mode with interrupts injected. + */ +static inline void +testmode_check_interrupts(const char *caller_name, bool teardownActive) +{ +} + +/* We needs a private copy to corrupt the packet. */ +#define FAULT_INJECT_BACKUP_PKT() \ +do { \ + pktModified = true; \ + memcpy(&hdrbk, (void *) buffer, sizeof(icpkthdr)); \ +} while (0) + +/* + * get_fault_type_array_length + * Retrive test function fault type size recorded in array fault_type_array_length. + */ +static inline unsigned int +get_fault_type_array_length(unsigned int func_name) +{ + if (!fault_type_array_length[func_name][0]) { + for (unsigned int i = 0; i < FINC_MAX_LIMITATION + 1; i++) { + if (fault_type_array[func_name][i] == FINC_MAX_LIMITATION) { + fault_type_array_length[func_name][0] = i; + break; + } + } + } + return fault_type_array_length[func_name][0]; +} + +/* + * random_with_range + * Generate the random value predefined in fault_type_array. + */ +static inline int +random_with_array(unsigned int func_name) +{ + Assert((func_name < FUNC_TESTMODE_MAX) && (fault_type_array!= NULL)); + unsigned int length = get_fault_type_array_length(func_name); + Assert((length != 0) && (length < FINC_MAX_LIMITATION)); + return fault_type_array[func_name][(rand() % length)]; +} + +/* + * testmode_sendto + * Many kinds of fault packets are injected in this function. + */ +static ssize_t +testmode_sendto(const char *caller_name, int socket, const void *buffer, + size_t length, int flags, const struct sockaddr *dest_addr, + socklen_t dest_len) +{ + int n; + int testmode_length = length; + size_t icpkthdr_size = sizeof(icpkthdr); + bool is_pkt = false; + bool pktModified = false; + int fault_type; + icpkthdr hdrbk; + icpkthdr *msg = (icpkthdr *) buffer; + + if (!testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + goto no_fault_inject; + + /* + * Generate a fault type. + */ + fault_type = random() % FINC_MAX_LIMITATION; + + /* Make sure we are modifying a packet. */ + if (length >= icpkthdr_size) + is_pkt = true; + + /* Inject a fault */ + switch (fault_type) + { + case FINC_PKT_HEADER_SHORTEN: + if (!FINC_HAS_FAULT(fault_type) || !is_pkt) + break; + testmode_length = icpkthdr_size - 1; + LOG(INFO, "inject fault to sendto: FINC_PKT_HEADER_SHORTEN"); + break; + + case FINC_PKT_PKT_SHORTEN: + if (!FINC_HAS_FAULT(fault_type) || !is_pkt) + break; + if (length > icpkthdr_size) + testmode_length--; + LOG(INFO, "inject fault to sendto: FINC_PKT_PKT_SHORTEN"); + break; + + case FINC_PKT_CRC_CORRUPT: + if (!FINC_HAS_FAULT(fault_type) || !is_pkt) + break; + FAULT_INJECT_BACKUP_PKT(); + if (!session_param.gp_interconnect_full_crc) + break; + msg->crc++; + LOG(INFO, "inject fault to sendto: FINC_PKT_CRC_CORRUPT"); + break; + + case FINC_PKT_HEADER_LEN_ZERO: + if (!FINC_HAS_FAULT(fault_type) || !is_pkt) + break; + FAULT_INJECT_BACKUP_PKT(); + msg->len = 0; + LOG(INFO, "inject fault to sendto: FINC_PKT_HEADER_LEN_ZERO"); + break; + + case FINC_PKT_HEADER_LEN_NEGATIVE: + if (!FINC_HAS_FAULT(fault_type) || !is_pkt) + break; + FAULT_INJECT_BACKUP_PKT(); + msg->len = -1; + LOG(INFO, "inject fault to sendto: FINC_PKT_HEADER_LEN_NEGATIVE"); + break; + + case FINC_PKT_MISMATCH: + if (!FINC_HAS_FAULT(fault_type) || !is_pkt) + break; + FAULT_INJECT_BACKUP_PKT(); + msg->srcPid = -1; /* There is no such pid. */ + msg->icId = 0; + msg->seq = 1; + LOG(INFO, "inject fault to sendto: FINC_PKT_MISMATCH"); + break; + + case FINC_OS_EAGAIN: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to sendto: FINC_OS_EAGAIN"); + errno = EAGAIN; + return -1; + + case FINC_OS_EINTR: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to sendto: FINC_OS_EINTR"); + errno = EINTR; + return -1; + + case FINC_NET_PKT_DUP: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to sendto: FINC_NET_PKT_DUP"); + if ((n = sendto(socket, buffer, testmode_length, flags, dest_addr, dest_len)) != (int)length) + return n; + break; + + case FINC_OS_NET_INTERFACE: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to sendto: FINC_OS_NET_INTERFACE"); + errno = EFAULT; + return -1; + + case FINC_PKT_TOO_LONG: + if (!FINC_HAS_FAULT(fault_type) || !is_pkt) + break; + LOG(INFO, "inject fault to sendto: FINC_PKT_TOO_LONG"); + errno = EMSGSIZE; + return -1; + + default: + break; + } + +no_fault_inject: + n = sendto(socket, buffer, testmode_length, flags, dest_addr, dest_len); + + if (pktModified) + memcpy((void *) buffer, &hdrbk, sizeof(icpkthdr)); + return n; +} + +/* + * testmode_recvfrom + * recvfrom function with faults injected. + */ +static ssize_t +testmode_recvfrom(const char *caller_name, int socket, void *buffer, + size_t length, int flags, struct sockaddr *address, + socklen_t *address_len) +{ + int fault_type; + + if (!testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + goto no_fault_inject; + + fault_type = random_with_array(FUNC_TESTMODE_RECVFROM); + + switch (fault_type) + { + case FINC_OS_EAGAIN: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to recvfrom: FINC_OS_EAGAIN"); + errno = EAGAIN; + return -1; + + case FINC_OS_EINTR: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to recvfrom: FINC_OS_EINTR"); + errno = EINTR; + return -1; + + case FINC_OS_EWOULDBLOCK: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to recvfrom: FINC_OS_EWOULDBLOCK"); + errno = EWOULDBLOCK; + return -1; + + case FINC_NET_RECV_ZERO: + if (!FINC_HAS_FAULT(fault_type)) + break; + + memset(buffer, 0, length); + LOG(INFO, "inject fault to recvfrom: FINC_NET_RECV_ZERO"); + return 0; + + case FINC_OS_NET_INTERFACE: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to recvfrom: FINC_OS_NET_INTERFACE"); + errno = EFAULT; + return -1; + + case FINC_NET_RECV_ERROR: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to recvfrom: FINC_NET_RECV_ERROR"); + errno = EFAULT; + return -1; + + default: + break; + } + +no_fault_inject: + return recvfrom(socket, buffer, length, flags, address, address_len); +} + +/* + * testmode_poll + * poll function with faults injected. + */ +static int +testmode_poll(const char *caller_name, struct pollfd fds[], nfds_t nfds, + int timeout) +{ + int fault_type; + + if (!testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + goto no_fault_inject; + + fault_type = random() % FINC_MAX_LIMITATION; + + switch (fault_type) + { + case FINC_OS_EINTR: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to poll: FINC_OS_EINTR"); + errno = EINTR; + return -1; + + case FINC_OS_NET_INTERFACE: + if (!FINC_HAS_FAULT(fault_type)) + break; + LOG(INFO, "inject fault to poll: FINC_OS_NET_INTERFACE"); + errno = EFAULT; + return -1; + + default: + break; + } + +no_fault_inject: + return poll(fds, nfds, timeout); +} + +/* + * testmode_socket + * socket function with faults injected. + * + */ +static int +testmode_socket(const char *caller_name, int domain, int type, int protocol) +{ + if (FINC_HAS_FAULT(FINC_OS_NET_INTERFACE) && + testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + { + LOG(INFO, "inject fault to socket: FINC_OS_NET_INTERFACE"); + errno = ENOMEM; + return -1; + } + + return socket(domain, type, protocol); +} + +/* + * testmode_bind + * bind function with fault injected. + * + */ +static int +testmode_bind(const char *caller_name, int socket, + const struct sockaddr *address, socklen_t address_len) +{ + if (FINC_HAS_FAULT(FINC_OS_NET_INTERFACE) && + testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + { + LOG(INFO, "inject fault to bind: FINC_OS_NET_INTERFACE"); + errno = EFAULT; + return -1; + } + + return bind(socket, address, address_len); +} + +/* + * testmode_getsockname + * getsockname function with faults injected. + * + */ +static int +testmode_getsockname(const char *caller_name, int socket, + struct sockaddr *address, + socklen_t *address_len) +{ + if (FINC_HAS_FAULT(FINC_OS_NET_INTERFACE) && + testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + { + LOG(INFO, "inject fault to getsockname: FINC_OS_NET_INTERFACE"); + errno = EFAULT; + return -1; + } + + return getsockname(socket, address, address_len); +} + +/* + * testmode_setsockopt + * setsockopt with faults injected. + */ +static int +testmode_setsockopt(const char *caller_name, int socket, int level, + int option_name, const void *option_value, + socklen_t option_len) +{ + if (FINC_HAS_FAULT(FINC_OS_NET_INTERFACE) && + testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + { + LOG(INFO, "inject fault to setsockopt: FINC_OS_NET_INTERFACE"); + errno = ENOMEM; + return -1; + } + + return setsockopt(socket, level, option_name, option_value, option_len); +} + +/* + * testmode_pg_getaddrinfo_all + * pg_getaddrinfo_all with faults injected. + */ +static int +testmode_pg_getaddrinfo_all(const char *caller_name, const char *hostname, + const char *servname, const struct addrinfo *hints, + struct addrinfo **res) +{ + if (FINC_HAS_FAULT(FINC_OS_NET_INTERFACE) && + testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + { + LOG(INFO, "inject fault to pg_getaddrinfo_all: FINC_OS_NET_INTERFACE"); + return -1; + } + + //return pg_getaddrinfo_all(hostname, servname, hints, res); + return getaddrinfo(hostname, servname, hints, res); +} + +/* + * testmode_free + * free function with free time tracking added. + */ +static void +testmode_free(const char *caller_name, void *ptr) +{ + if (ptr == NULL) + return; + + pthread_mutex_lock(&icudp_malloc_tracking_lock); + icudp_malloc_times--; + pthread_mutex_unlock(&icudp_malloc_tracking_lock); + free(ptr); +} + +/* + * testmode_pthread_create + * pthread_create with faults injected. + */ +static int +testmode_pthread_create(const char *caller_name, pthread_t *thread, + const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg) +{ + if (FINC_HAS_FAULT(FINC_OS_CREATE_THREAD) && + testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + { + LOG(INFO, "inject fault to pthread_create: FINC_OS_CREATE_THREAD"); + return ENOMEM; + } + + return pthread_create(thread, attr, start_routine, arg); +} + +#ifdef ML_CHECK_FOR_INTERRUPTS +#undef ML_CHECK_FOR_INTERRUPTS +#endif +#undef sendto +#undef recvfrom +#undef poll +#undef socket +#undef bind +#undef getsockname +#undef getsockopt +#undef setsockopt +#undef pg_getaddrinfo_all +#undef malloc +#undef free +#undef palloc0 +#undef pthread_create + +#define ML_CHECK_FOR_INTERRUPTS(teardownActive) \ + testmode_check_interrupts(__FUNCTION__, teardownActive) + +#define sendto(socket, buffer, length, flags, dest_addr, dest_len) \ + testmode_sendto(__FUNCTION__, socket, buffer, length, flags, dest_addr, dest_len) + +#define recvfrom(socket, buffer, length, flags, address, address_len) \ + testmode_recvfrom(__FUNCTION__, socket, buffer, length, flags, address, address_len) + +#define poll(fds, nfds, timeout) \ + testmode_poll(__FUNCTION__, fds, nfds, timeout) + +#define socket(domain, type, protocol) \ + testmode_socket(__FUNCTION__, domain, type, protocol) + +#define bind(socket, address, address_len) \ + testmode_bind(__FUNCTION__, socket, address, address_len) + +#define getsockname(socket, address, address_len) \ + testmode_getsockname(__FUNCTION__, socket, address, address_len) + +#define getsockopt(socket, level, option_name, option_value, option_len) \ + testmode_getsockopt(__FUNCTION__, socket, level, option_name, option_value, option_len) + +#define setsockopt(socket, level, option_name, option_value, option_len) \ + testmode_setsockopt(__FUNCTION__, socket, level, option_name, option_value, option_len) + +#define getaddrinfo(hostname, servname, hints, res) \ + testmode_pg_getaddrinfo_all(__FUNCTION__, hostname, servname, hints, res) + +#define malloc(size) \ + testmode_malloc(__FUNCTION__, size) + +#define free(ptr) \ + testmode_free(__FUNCTION__, ptr) + +/* +#define ic_malloc0(size) \ + testmode_malloc0(__FUNCTION__, size) +*/ + +#define pthread_create(thread, attr, start_routine, arg) \ + testmode_pthread_create(__FUNCTION__, thread, attr, start_routine, arg) +#endif + +#endif \ No newline at end of file diff --git a/contrib/udp2/ic_common/ic_types.h b/contrib/udp2/ic_common/ic_types.h new file mode 100644 index 00000000000..e31d02e493d --- /dev/null +++ b/contrib/udp2/ic_common/ic_types.h @@ -0,0 +1,212 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_types.h + * + * IDENTIFICATION + * contrib/udp2/ic_common/ic_types.h + * + *------------------------------------------------------------------------- + */ +#ifndef IC_TYPES_H +#define IC_TYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * data type + */ +typedef signed char int8; /* == 8 bits */ +typedef signed short int16; /* == 16 bits */ +typedef signed int int32; /* == 32 bits */ +typedef unsigned char uint8; /* == 8 bits */ +typedef unsigned short uint16; /* == 16 bits */ +typedef unsigned int uint32; /* == 32 bits */ +typedef long int int64; +typedef unsigned long int uint64; + +typedef uint64 DistributedTransactionId; + +/* the lite version of CdbProcess */ +typedef struct ICCdbProcess +{ + bool valid; + char *listenerAddr; /* Interconnect listener IPv4 address, a C-string */ + int listenerPort; /* Interconnect listener port */ + int pid; /* Backend PID of the process. */ + int contentid; + int dbid; + +} ICCdbProcess; + +/* the lite version of ExecSlice */ +typedef struct ICExecSlice +{ + int sliceIndex; + int parentIndex; + + int numChildren; + int *children; + + int numSegments; + + int numPrimaryProcesses; + ICCdbProcess *primaryProcesses; + +} ICExecSlice; + +/* the lite version of SliceTable */ +typedef struct ICSliceTable +{ + int localSlice; /* Index of the slice to execute. */ + int numSlices; + ICExecSlice *slices; /* Array of ICExecSlice, indexed by SliceIndex */ + uint32 ic_instance_id; + +} ICSliceTable; + +typedef struct ICChunkTransportState +{ + /* keeps track of if we've "activated" connections via SetupInterconnect(). */ + bool activated; + bool teardownActive; + + /* slice table stuff. */ + struct ICSliceTable *sliceTable; + int sliceId; + int icInstanceId; /* the same as sliceTable->ic_instance_id */ + + /* whether we've logged when network timeout happens */ + bool networkTimeoutIsLogged; + + /* save client's state */ + void *clientState; + +} ICChunkTransportState; + +struct MemoryBlock +{ + unsigned char *pos; + int len; +}; + +typedef struct MemoryBlock BufferBlock; +typedef struct MemoryBlock DataBlock; + +typedef int (*GetDataLenInPacket)(unsigned char *msg, int msg_size); + +/* + * GlobalMotionLayerIPCParam and SessionMotionLayerIPCParam + */ +typedef bool (*CheckPostmasterIsAliveCallback)(void); +typedef void (*CheckInterruptsCallback)(int teardownActive); +typedef void (*SimpleFaultInjectorCallback)(const char *faultname); +typedef void *(*CreateOpaqueDataWithConn)(void); +typedef void (*DestroyOpaqueDataInConn)(void **); +typedef void (*CheckCancelOnQDCallback)(ICChunkTransportState *pTransportStates); + +typedef struct GlobalMotionLayerIPCParam +{ + char *interconnect_address; /* postmaster.h */ + int Gp_role; /* Gp_role */ + int ic_htab_size; /* cdbgang.h */ + int segment_number; /* getgpsegmentCount() */ + int MyProcPid; /* miscadmin.h */ + int dbid; /* GpIdentity */ + int segindex; /* GpIdentity */ + bool MyProcPort; /* miscadmin.h */ + int myprocport_sock; /* MyProcPort->sock */ + int Gp_max_packet_size; /* default: 8192 */ + int Gp_udp_bufsize_k; /* default: 0 */ + int Gp_interconnect_address_type; /* default: INTERCONNECT_ADDRESS_TYPE_UNICAST_IC */ + + CheckPostmasterIsAliveCallback checkPostmasterIsAliveCallback; + CheckInterruptsCallback checkInterruptsCallback; + SimpleFaultInjectorCallback simpleFaultInjectorCallback; + + CreateOpaqueDataWithConn createOpaqueDataCallback; + DestroyOpaqueDataInConn destroyOpaqueDataCallback; + + CheckCancelOnQDCallback checkCancelOnQDCallback; + +} GlobalMotionLayerIPCParam; + +typedef struct SessionMotionLayerIPCParam +{ + int Gp_interconnect_queue_depth; /* default: 4 */ + int Gp_interconnect_snd_queue_depth; /* default: 2 */ + int Gp_interconnect_cursor_ic_table_size; /* default: 128 */ + int Gp_interconnect_timer_period; /* default: 5 */ + int Gp_interconnect_timer_checking_period; /* default: 20 */ + int Gp_interconnect_default_rtt; /* default: 20 */ + int Gp_interconnect_min_rto; /* default: 20 */ + int Gp_interconnect_transmit_timeout; /* default: 3600 */ + int Gp_interconnect_min_retries_before_timeout; /* default: 100 */ + int Gp_interconnect_debug_retry_interval; /* default: 10 */ + bool gp_interconnect_full_crc; /* default: false */ + bool gp_interconnect_aggressive_retry; /* default: true */ + bool gp_interconnect_cache_future_packets; /* default: true */ + bool gp_interconnect_log_stats; /* default: false */ + int interconnect_setup_timeout; /* default: 7200 */ + int gp_log_interconnect; /* default: terse */ + int gp_session_id; /* global unique id for session. */ + int Gp_interconnect_fc_method; /* default: INTERCONNECT_FC_METHOD_LOSS */ + int gp_command_count; + uint32 gp_interconnect_id; + int log_min_messages; /* default: IC_WARNING */ + DistributedTransactionId distTransId; /* default: 0 */ + + int gp_udpic_dropseg; /* default: -2 */ + int gp_udpic_dropacks_percent; /* default: 0 */ + int gp_udpic_dropxmit_percent; /* default: 0 */ + int gp_udpic_fault_inject_percent; /* default: 0 */ + int gp_udpic_fault_inject_bitmap; /* default: 0 */ + int gp_udpic_network_disable_ipv6; /* default: 0 */ + +} SessionMotionLayerIPCParam; + +/* + * handle error + */ +#define MSGLEN 1024 + +typedef enum ErrorLevel +{ + LEVEL_OK, + LEVEL_ERROR, + LEVEL_FATAL, +} ErrorLevel; + +typedef struct ICError +{ + ErrorLevel level; + char msg[MSGLEN]; +} ICError; + +extern void ResetLastError(); +extern ICError* GetLastError(); +extern void SetLastError(ErrorLevel level, const char *msg); + +#ifdef __cplusplus +} +#endif + +#endif // IC_TYPES_H \ No newline at end of file diff --git a/contrib/udp2/ic_common/ic_utility.cpp b/contrib/udp2/ic_common/ic_utility.cpp new file mode 100644 index 00000000000..7a5a0747238 --- /dev/null +++ b/contrib/udp2/ic_common/ic_utility.cpp @@ -0,0 +1,1371 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_utility.cpp + * + * IDENTIFICATION + * contrib/udp2/ic_common/ic_utility.cpp + * + *------------------------------------------------------------------------- + */ + +#include + +#include "ic_types.h" +#include "ic_utility.hpp" + +/* + * global_param and session_param; + */ +GlobalMotionLayerIPCParam global_param = + {NULL, /* interconnect_address */ + -1, /* Gp_role */ + 0, /* ic_htab_size */ + 0, /* segment_number */ + -1, /* MyProcPid */ + -1, /* dbid */ + -1, /* segindex */ + false,/* MyProcPort */ + -1, /* myprocport_sock */ + 8192, /* Gp_max_packet_size */ + 0, /* Gp_udp_bufsize_k */ + INTERCONNECT_ADDRESS_TYPE_UNICAST_IC, /* Gp_interconnect_address_type */ + NULL, /* CheckPostmasterIsAliveCallback */ + NULL, /* checkInterruptsCallback */ + NULL, /* simpleFaultInjectorCallback */ + NULL, /* createOpaqueDataCallback */ + NULL, /* destroyOpaqueDataCallback */ + NULL, /* checkCancelOnQDCallback */ + }; + +SessionMotionLayerIPCParam session_param = + {4, /* Gp_interconnect_queue_depth */ + 2, /* Gp_interconnect_snd_queue_depth */ + 128, /* Gp_interconnect_cursor_ic_table_size */ + 5, /* Gp_interconnect_timer_period */ + 20, /* Gp_interconnect_timer_checking_period */ + 20, /* Gp_interconnect_default_rtt */ + 20, /* Gp_interconnect_min_rto */ + 3600, /* Gp_interconnect_transmit_timeout */ + 100, /* Gp_interconnect_min_retries_before_timeout */ + 10, /* Gp_interconnect_debug_retry_interval */ + false,/* gp_interconnect_full_crc */ + true, /* gp_interconnect_aggressive_retry */ + true, /* gp_interconnect_cache_future_packets */ + false,/* gp_interconnect_log_stats */ + 7200, /* interconnect_setup_timeout */ + GPVARS_VERBOSITY_TERSE_IC, /* gp_log_interconnect */ + -1, /* gp_session_id */ + INTERCONNECT_FC_METHOD_LOSS_IC, /* Gp_interconnect_fc_method */ + -1, /* gp_command_count */ + 0, /* gp_interconnect_id */ + IC_WARNING, /* log_min_messages */ + 0, /* distTransId */ + + UNDEF_SEGMENT, /* gp_udpic_dropseg */ + 0, /* gp_udpic_dropacks_percent */ + 0, /* gp_udpic_dropxmit_percent */ + 0, /* gp_udpic_fault_inject_percent */ + 0, /* gp_udpic_fault_inject_bitmap */ + 0, /* gp_udpic_network_disable_ipv6 */ + }; + + +/* + * logger stuff + */ +Logger RootLogger; +static std::mutex LoggerMutex; +static thread_local std::once_flag Once; +static thread_local char ProcessId[64]; + +const char * SeverityName[] = { "FATAL", "ERROR", "WARNING", "INFO", "DEBUG1", + "DEBUG2", "DEBUG3", "DEBUG4", "DEBUG5" + }; + +static void InitProcessId() { + std::stringstream ss; + ss.imbue(std::locale::classic()); + ss << "p" << getpid() << ", th" << pthread_self(); + snprintf(ProcessId, sizeof(ProcessId), "%s", ss.str().c_str()); +} + +Logger::Logger() : + fd(STDERR_FILENO), severity(DEFAULT_LOG_LEVEL) { +} + +Logger::~Logger() { +} + +void Logger::setOutputFd(int f) { + fd = f; +} + +void Logger::setLogSeverity(LogSeverity l) { + severity.store(l, std::memory_order_relaxed); +} + +void Logger::printf(LogSeverity s, const char * fmt, ...) { + va_list ap; + + if (s > severity || fd < 0) { + return; + } + + try { + call_once(Once, InitProcessId); + std::vector buffer; + struct tm tm_time; + struct timeval tval; + memset(&tval, 0, sizeof(tval)); + gettimeofday(&tval, NULL); + localtime_r(&tval.tv_sec, &tm_time); + //determine buffer size + va_start(ap, fmt); + int size = vsnprintf(nullptr, 0, fmt, ap); + va_end(ap); + //100 is enough for prefix + buffer.resize(size + 100); + size = snprintf(buffer.data(), buffer.size(), "%04d-%02d-%02d %02d:%02d:%02d.%06ld, %s, %s ", tm_time.tm_year + 1900, + 1 + tm_time.tm_mon, tm_time.tm_mday, tm_time.tm_hour, + tm_time.tm_min, tm_time.tm_sec, static_cast(tval.tv_usec), ProcessId, SeverityName[s]); + va_start(ap, fmt); + size += vsnprintf(buffer.data() + size, buffer.size() - size, fmt, ap); + va_end(ap); + { + std::lock_guard lock(LoggerMutex); + dprintf(fd, "%s\n", buffer.data()); + } + return; + } catch (const std::exception & e) { + dprintf(fd, "%s:%d %s %s", __FILE__, __LINE__, + "FATAL: get an unexpected exception:", e.what()); + throw; + } +} + +/* + * crc32 + */ +static uint32 comp_crc32c_sb8(uint32 crc, const void *data, size_t len); + +/* + * Use slicing-by-8 algorithm. + * + * On big-endian systems, the intermediate value is kept in reverse byte + * order, to avoid byte-swapping during the calculation. FIN_CRC32C reverses + * the bytes to the final order. + */ +#define INIT_CRC32C(crc) ((crc) = 0xFFFFFFFF) +#define COMP_CRC32C(crc, data, len) \ + ((crc) = comp_crc32c_sb8((crc), (data), (len))) +#ifdef WORDS_BIGENDIAN +#define FIN_CRC32C(crc) ((crc) = ic_bswap32(crc) ^ 0xFFFFFFFF) +#else +#define FIN_CRC32C(crc) ((crc) ^= 0xFFFFFFFF) +#endif + +uint32 +ComputeCRC(const void *data, size_t len) +{ + uint32 local_crc; + + INIT_CRC32C(local_crc); + COMP_CRC32C(local_crc, data, len); + FIN_CRC32C(local_crc); + + return local_crc; +} + +/* + * Lookup tables for the slicing-by-8 algorithm, for the so-called Castagnoli + * polynomial (the same that is used e.g. in iSCSI), 0x1EDC6F41. Using + * Williams' terms, this is the "normal", not "reflected" version. However, on + * big-endian systems the values in the tables are stored in byte-reversed + * order (IOW, the tables are stored in little-endian order even on big-endian + * systems). + */ +static const uint32 crc32c_table[8][256] = { +#ifndef WORDS_BIGENDIAN + { + 0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, + 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, + 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, + 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, + 0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, + 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, + 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, + 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, + 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, + 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35, + 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, + 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, + 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, + 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A, + 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, + 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, + 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, + 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, + 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, + 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, + 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, + 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, + 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, + 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7, + 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, + 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, + 0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, + 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, + 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, + 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, + 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, + 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, + 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, + 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, + 0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, + 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, + 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, + 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, + 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, + 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, + 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, + 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, + 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, + 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982, + 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, + 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, + 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, + 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED, + 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, + 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, + 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, + 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, + 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, + 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540, + 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, + 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, + 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, + 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, + 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, + 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, + 0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, + 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, + 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, + 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 + }, + { + 0x00000000, 0x13A29877, 0x274530EE, 0x34E7A899, + 0x4E8A61DC, 0x5D28F9AB, 0x69CF5132, 0x7A6DC945, + 0x9D14C3B8, 0x8EB65BCF, 0xBA51F356, 0xA9F36B21, + 0xD39EA264, 0xC03C3A13, 0xF4DB928A, 0xE7790AFD, + 0x3FC5F181, 0x2C6769F6, 0x1880C16F, 0x0B225918, + 0x714F905D, 0x62ED082A, 0x560AA0B3, 0x45A838C4, + 0xA2D13239, 0xB173AA4E, 0x859402D7, 0x96369AA0, + 0xEC5B53E5, 0xFFF9CB92, 0xCB1E630B, 0xD8BCFB7C, + 0x7F8BE302, 0x6C297B75, 0x58CED3EC, 0x4B6C4B9B, + 0x310182DE, 0x22A31AA9, 0x1644B230, 0x05E62A47, + 0xE29F20BA, 0xF13DB8CD, 0xC5DA1054, 0xD6788823, + 0xAC154166, 0xBFB7D911, 0x8B507188, 0x98F2E9FF, + 0x404E1283, 0x53EC8AF4, 0x670B226D, 0x74A9BA1A, + 0x0EC4735F, 0x1D66EB28, 0x298143B1, 0x3A23DBC6, + 0xDD5AD13B, 0xCEF8494C, 0xFA1FE1D5, 0xE9BD79A2, + 0x93D0B0E7, 0x80722890, 0xB4958009, 0xA737187E, + 0xFF17C604, 0xECB55E73, 0xD852F6EA, 0xCBF06E9D, + 0xB19DA7D8, 0xA23F3FAF, 0x96D89736, 0x857A0F41, + 0x620305BC, 0x71A19DCB, 0x45463552, 0x56E4AD25, + 0x2C896460, 0x3F2BFC17, 0x0BCC548E, 0x186ECCF9, + 0xC0D23785, 0xD370AFF2, 0xE797076B, 0xF4359F1C, + 0x8E585659, 0x9DFACE2E, 0xA91D66B7, 0xBABFFEC0, + 0x5DC6F43D, 0x4E646C4A, 0x7A83C4D3, 0x69215CA4, + 0x134C95E1, 0x00EE0D96, 0x3409A50F, 0x27AB3D78, + 0x809C2506, 0x933EBD71, 0xA7D915E8, 0xB47B8D9F, + 0xCE1644DA, 0xDDB4DCAD, 0xE9537434, 0xFAF1EC43, + 0x1D88E6BE, 0x0E2A7EC9, 0x3ACDD650, 0x296F4E27, + 0x53028762, 0x40A01F15, 0x7447B78C, 0x67E52FFB, + 0xBF59D487, 0xACFB4CF0, 0x981CE469, 0x8BBE7C1E, + 0xF1D3B55B, 0xE2712D2C, 0xD69685B5, 0xC5341DC2, + 0x224D173F, 0x31EF8F48, 0x050827D1, 0x16AABFA6, + 0x6CC776E3, 0x7F65EE94, 0x4B82460D, 0x5820DE7A, + 0xFBC3FAF9, 0xE861628E, 0xDC86CA17, 0xCF245260, + 0xB5499B25, 0xA6EB0352, 0x920CABCB, 0x81AE33BC, + 0x66D73941, 0x7575A136, 0x419209AF, 0x523091D8, + 0x285D589D, 0x3BFFC0EA, 0x0F186873, 0x1CBAF004, + 0xC4060B78, 0xD7A4930F, 0xE3433B96, 0xF0E1A3E1, + 0x8A8C6AA4, 0x992EF2D3, 0xADC95A4A, 0xBE6BC23D, + 0x5912C8C0, 0x4AB050B7, 0x7E57F82E, 0x6DF56059, + 0x1798A91C, 0x043A316B, 0x30DD99F2, 0x237F0185, + 0x844819FB, 0x97EA818C, 0xA30D2915, 0xB0AFB162, + 0xCAC27827, 0xD960E050, 0xED8748C9, 0xFE25D0BE, + 0x195CDA43, 0x0AFE4234, 0x3E19EAAD, 0x2DBB72DA, + 0x57D6BB9F, 0x447423E8, 0x70938B71, 0x63311306, + 0xBB8DE87A, 0xA82F700D, 0x9CC8D894, 0x8F6A40E3, + 0xF50789A6, 0xE6A511D1, 0xD242B948, 0xC1E0213F, + 0x26992BC2, 0x353BB3B5, 0x01DC1B2C, 0x127E835B, + 0x68134A1E, 0x7BB1D269, 0x4F567AF0, 0x5CF4E287, + 0x04D43CFD, 0x1776A48A, 0x23910C13, 0x30339464, + 0x4A5E5D21, 0x59FCC556, 0x6D1B6DCF, 0x7EB9F5B8, + 0x99C0FF45, 0x8A626732, 0xBE85CFAB, 0xAD2757DC, + 0xD74A9E99, 0xC4E806EE, 0xF00FAE77, 0xE3AD3600, + 0x3B11CD7C, 0x28B3550B, 0x1C54FD92, 0x0FF665E5, + 0x759BACA0, 0x663934D7, 0x52DE9C4E, 0x417C0439, + 0xA6050EC4, 0xB5A796B3, 0x81403E2A, 0x92E2A65D, + 0xE88F6F18, 0xFB2DF76F, 0xCFCA5FF6, 0xDC68C781, + 0x7B5FDFFF, 0x68FD4788, 0x5C1AEF11, 0x4FB87766, + 0x35D5BE23, 0x26772654, 0x12908ECD, 0x013216BA, + 0xE64B1C47, 0xF5E98430, 0xC10E2CA9, 0xD2ACB4DE, + 0xA8C17D9B, 0xBB63E5EC, 0x8F844D75, 0x9C26D502, + 0x449A2E7E, 0x5738B609, 0x63DF1E90, 0x707D86E7, + 0x0A104FA2, 0x19B2D7D5, 0x2D557F4C, 0x3EF7E73B, + 0xD98EEDC6, 0xCA2C75B1, 0xFECBDD28, 0xED69455F, + 0x97048C1A, 0x84A6146D, 0xB041BCF4, 0xA3E32483 + }, + { + 0x00000000, 0xA541927E, 0x4F6F520D, 0xEA2EC073, + 0x9EDEA41A, 0x3B9F3664, 0xD1B1F617, 0x74F06469, + 0x38513EC5, 0x9D10ACBB, 0x773E6CC8, 0xD27FFEB6, + 0xA68F9ADF, 0x03CE08A1, 0xE9E0C8D2, 0x4CA15AAC, + 0x70A27D8A, 0xD5E3EFF4, 0x3FCD2F87, 0x9A8CBDF9, + 0xEE7CD990, 0x4B3D4BEE, 0xA1138B9D, 0x045219E3, + 0x48F3434F, 0xEDB2D131, 0x079C1142, 0xA2DD833C, + 0xD62DE755, 0x736C752B, 0x9942B558, 0x3C032726, + 0xE144FB14, 0x4405696A, 0xAE2BA919, 0x0B6A3B67, + 0x7F9A5F0E, 0xDADBCD70, 0x30F50D03, 0x95B49F7D, + 0xD915C5D1, 0x7C5457AF, 0x967A97DC, 0x333B05A2, + 0x47CB61CB, 0xE28AF3B5, 0x08A433C6, 0xADE5A1B8, + 0x91E6869E, 0x34A714E0, 0xDE89D493, 0x7BC846ED, + 0x0F382284, 0xAA79B0FA, 0x40577089, 0xE516E2F7, + 0xA9B7B85B, 0x0CF62A25, 0xE6D8EA56, 0x43997828, + 0x37691C41, 0x92288E3F, 0x78064E4C, 0xDD47DC32, + 0xC76580D9, 0x622412A7, 0x880AD2D4, 0x2D4B40AA, + 0x59BB24C3, 0xFCFAB6BD, 0x16D476CE, 0xB395E4B0, + 0xFF34BE1C, 0x5A752C62, 0xB05BEC11, 0x151A7E6F, + 0x61EA1A06, 0xC4AB8878, 0x2E85480B, 0x8BC4DA75, + 0xB7C7FD53, 0x12866F2D, 0xF8A8AF5E, 0x5DE93D20, + 0x29195949, 0x8C58CB37, 0x66760B44, 0xC337993A, + 0x8F96C396, 0x2AD751E8, 0xC0F9919B, 0x65B803E5, + 0x1148678C, 0xB409F5F2, 0x5E273581, 0xFB66A7FF, + 0x26217BCD, 0x8360E9B3, 0x694E29C0, 0xCC0FBBBE, + 0xB8FFDFD7, 0x1DBE4DA9, 0xF7908DDA, 0x52D11FA4, + 0x1E704508, 0xBB31D776, 0x511F1705, 0xF45E857B, + 0x80AEE112, 0x25EF736C, 0xCFC1B31F, 0x6A802161, + 0x56830647, 0xF3C29439, 0x19EC544A, 0xBCADC634, + 0xC85DA25D, 0x6D1C3023, 0x8732F050, 0x2273622E, + 0x6ED23882, 0xCB93AAFC, 0x21BD6A8F, 0x84FCF8F1, + 0xF00C9C98, 0x554D0EE6, 0xBF63CE95, 0x1A225CEB, + 0x8B277743, 0x2E66E53D, 0xC448254E, 0x6109B730, + 0x15F9D359, 0xB0B84127, 0x5A968154, 0xFFD7132A, + 0xB3764986, 0x1637DBF8, 0xFC191B8B, 0x595889F5, + 0x2DA8ED9C, 0x88E97FE2, 0x62C7BF91, 0xC7862DEF, + 0xFB850AC9, 0x5EC498B7, 0xB4EA58C4, 0x11ABCABA, + 0x655BAED3, 0xC01A3CAD, 0x2A34FCDE, 0x8F756EA0, + 0xC3D4340C, 0x6695A672, 0x8CBB6601, 0x29FAF47F, + 0x5D0A9016, 0xF84B0268, 0x1265C21B, 0xB7245065, + 0x6A638C57, 0xCF221E29, 0x250CDE5A, 0x804D4C24, + 0xF4BD284D, 0x51FCBA33, 0xBBD27A40, 0x1E93E83E, + 0x5232B292, 0xF77320EC, 0x1D5DE09F, 0xB81C72E1, + 0xCCEC1688, 0x69AD84F6, 0x83834485, 0x26C2D6FB, + 0x1AC1F1DD, 0xBF8063A3, 0x55AEA3D0, 0xF0EF31AE, + 0x841F55C7, 0x215EC7B9, 0xCB7007CA, 0x6E3195B4, + 0x2290CF18, 0x87D15D66, 0x6DFF9D15, 0xC8BE0F6B, + 0xBC4E6B02, 0x190FF97C, 0xF321390F, 0x5660AB71, + 0x4C42F79A, 0xE90365E4, 0x032DA597, 0xA66C37E9, + 0xD29C5380, 0x77DDC1FE, 0x9DF3018D, 0x38B293F3, + 0x7413C95F, 0xD1525B21, 0x3B7C9B52, 0x9E3D092C, + 0xEACD6D45, 0x4F8CFF3B, 0xA5A23F48, 0x00E3AD36, + 0x3CE08A10, 0x99A1186E, 0x738FD81D, 0xD6CE4A63, + 0xA23E2E0A, 0x077FBC74, 0xED517C07, 0x4810EE79, + 0x04B1B4D5, 0xA1F026AB, 0x4BDEE6D8, 0xEE9F74A6, + 0x9A6F10CF, 0x3F2E82B1, 0xD50042C2, 0x7041D0BC, + 0xAD060C8E, 0x08479EF0, 0xE2695E83, 0x4728CCFD, + 0x33D8A894, 0x96993AEA, 0x7CB7FA99, 0xD9F668E7, + 0x9557324B, 0x3016A035, 0xDA386046, 0x7F79F238, + 0x0B899651, 0xAEC8042F, 0x44E6C45C, 0xE1A75622, + 0xDDA47104, 0x78E5E37A, 0x92CB2309, 0x378AB177, + 0x437AD51E, 0xE63B4760, 0x0C158713, 0xA954156D, + 0xE5F54FC1, 0x40B4DDBF, 0xAA9A1DCC, 0x0FDB8FB2, + 0x7B2BEBDB, 0xDE6A79A5, 0x3444B9D6, 0x91052BA8 + }, + { + 0x00000000, 0xDD45AAB8, 0xBF672381, 0x62228939, + 0x7B2231F3, 0xA6679B4B, 0xC4451272, 0x1900B8CA, + 0xF64463E6, 0x2B01C95E, 0x49234067, 0x9466EADF, + 0x8D665215, 0x5023F8AD, 0x32017194, 0xEF44DB2C, + 0xE964B13D, 0x34211B85, 0x560392BC, 0x8B463804, + 0x924680CE, 0x4F032A76, 0x2D21A34F, 0xF06409F7, + 0x1F20D2DB, 0xC2657863, 0xA047F15A, 0x7D025BE2, + 0x6402E328, 0xB9474990, 0xDB65C0A9, 0x06206A11, + 0xD725148B, 0x0A60BE33, 0x6842370A, 0xB5079DB2, + 0xAC072578, 0x71428FC0, 0x136006F9, 0xCE25AC41, + 0x2161776D, 0xFC24DDD5, 0x9E0654EC, 0x4343FE54, + 0x5A43469E, 0x8706EC26, 0xE524651F, 0x3861CFA7, + 0x3E41A5B6, 0xE3040F0E, 0x81268637, 0x5C632C8F, + 0x45639445, 0x98263EFD, 0xFA04B7C4, 0x27411D7C, + 0xC805C650, 0x15406CE8, 0x7762E5D1, 0xAA274F69, + 0xB327F7A3, 0x6E625D1B, 0x0C40D422, 0xD1057E9A, + 0xABA65FE7, 0x76E3F55F, 0x14C17C66, 0xC984D6DE, + 0xD0846E14, 0x0DC1C4AC, 0x6FE34D95, 0xB2A6E72D, + 0x5DE23C01, 0x80A796B9, 0xE2851F80, 0x3FC0B538, + 0x26C00DF2, 0xFB85A74A, 0x99A72E73, 0x44E284CB, + 0x42C2EEDA, 0x9F874462, 0xFDA5CD5B, 0x20E067E3, + 0x39E0DF29, 0xE4A57591, 0x8687FCA8, 0x5BC25610, + 0xB4868D3C, 0x69C32784, 0x0BE1AEBD, 0xD6A40405, + 0xCFA4BCCF, 0x12E11677, 0x70C39F4E, 0xAD8635F6, + 0x7C834B6C, 0xA1C6E1D4, 0xC3E468ED, 0x1EA1C255, + 0x07A17A9F, 0xDAE4D027, 0xB8C6591E, 0x6583F3A6, + 0x8AC7288A, 0x57828232, 0x35A00B0B, 0xE8E5A1B3, + 0xF1E51979, 0x2CA0B3C1, 0x4E823AF8, 0x93C79040, + 0x95E7FA51, 0x48A250E9, 0x2A80D9D0, 0xF7C57368, + 0xEEC5CBA2, 0x3380611A, 0x51A2E823, 0x8CE7429B, + 0x63A399B7, 0xBEE6330F, 0xDCC4BA36, 0x0181108E, + 0x1881A844, 0xC5C402FC, 0xA7E68BC5, 0x7AA3217D, + 0x52A0C93F, 0x8FE56387, 0xEDC7EABE, 0x30824006, + 0x2982F8CC, 0xF4C75274, 0x96E5DB4D, 0x4BA071F5, + 0xA4E4AAD9, 0x79A10061, 0x1B838958, 0xC6C623E0, + 0xDFC69B2A, 0x02833192, 0x60A1B8AB, 0xBDE41213, + 0xBBC47802, 0x6681D2BA, 0x04A35B83, 0xD9E6F13B, + 0xC0E649F1, 0x1DA3E349, 0x7F816A70, 0xA2C4C0C8, + 0x4D801BE4, 0x90C5B15C, 0xF2E73865, 0x2FA292DD, + 0x36A22A17, 0xEBE780AF, 0x89C50996, 0x5480A32E, + 0x8585DDB4, 0x58C0770C, 0x3AE2FE35, 0xE7A7548D, + 0xFEA7EC47, 0x23E246FF, 0x41C0CFC6, 0x9C85657E, + 0x73C1BE52, 0xAE8414EA, 0xCCA69DD3, 0x11E3376B, + 0x08E38FA1, 0xD5A62519, 0xB784AC20, 0x6AC10698, + 0x6CE16C89, 0xB1A4C631, 0xD3864F08, 0x0EC3E5B0, + 0x17C35D7A, 0xCA86F7C2, 0xA8A47EFB, 0x75E1D443, + 0x9AA50F6F, 0x47E0A5D7, 0x25C22CEE, 0xF8878656, + 0xE1873E9C, 0x3CC29424, 0x5EE01D1D, 0x83A5B7A5, + 0xF90696D8, 0x24433C60, 0x4661B559, 0x9B241FE1, + 0x8224A72B, 0x5F610D93, 0x3D4384AA, 0xE0062E12, + 0x0F42F53E, 0xD2075F86, 0xB025D6BF, 0x6D607C07, + 0x7460C4CD, 0xA9256E75, 0xCB07E74C, 0x16424DF4, + 0x106227E5, 0xCD278D5D, 0xAF050464, 0x7240AEDC, + 0x6B401616, 0xB605BCAE, 0xD4273597, 0x09629F2F, + 0xE6264403, 0x3B63EEBB, 0x59416782, 0x8404CD3A, + 0x9D0475F0, 0x4041DF48, 0x22635671, 0xFF26FCC9, + 0x2E238253, 0xF36628EB, 0x9144A1D2, 0x4C010B6A, + 0x5501B3A0, 0x88441918, 0xEA669021, 0x37233A99, + 0xD867E1B5, 0x05224B0D, 0x6700C234, 0xBA45688C, + 0xA345D046, 0x7E007AFE, 0x1C22F3C7, 0xC167597F, + 0xC747336E, 0x1A0299D6, 0x782010EF, 0xA565BA57, + 0xBC65029D, 0x6120A825, 0x0302211C, 0xDE478BA4, + 0x31035088, 0xEC46FA30, 0x8E647309, 0x5321D9B1, + 0x4A21617B, 0x9764CBC3, 0xF54642FA, 0x2803E842 + }, + { + 0x00000000, 0x38116FAC, 0x7022DF58, 0x4833B0F4, + 0xE045BEB0, 0xD854D11C, 0x906761E8, 0xA8760E44, + 0xC5670B91, 0xFD76643D, 0xB545D4C9, 0x8D54BB65, + 0x2522B521, 0x1D33DA8D, 0x55006A79, 0x6D1105D5, + 0x8F2261D3, 0xB7330E7F, 0xFF00BE8B, 0xC711D127, + 0x6F67DF63, 0x5776B0CF, 0x1F45003B, 0x27546F97, + 0x4A456A42, 0x725405EE, 0x3A67B51A, 0x0276DAB6, + 0xAA00D4F2, 0x9211BB5E, 0xDA220BAA, 0xE2336406, + 0x1BA8B557, 0x23B9DAFB, 0x6B8A6A0F, 0x539B05A3, + 0xFBED0BE7, 0xC3FC644B, 0x8BCFD4BF, 0xB3DEBB13, + 0xDECFBEC6, 0xE6DED16A, 0xAEED619E, 0x96FC0E32, + 0x3E8A0076, 0x069B6FDA, 0x4EA8DF2E, 0x76B9B082, + 0x948AD484, 0xAC9BBB28, 0xE4A80BDC, 0xDCB96470, + 0x74CF6A34, 0x4CDE0598, 0x04EDB56C, 0x3CFCDAC0, + 0x51EDDF15, 0x69FCB0B9, 0x21CF004D, 0x19DE6FE1, + 0xB1A861A5, 0x89B90E09, 0xC18ABEFD, 0xF99BD151, + 0x37516AAE, 0x0F400502, 0x4773B5F6, 0x7F62DA5A, + 0xD714D41E, 0xEF05BBB2, 0xA7360B46, 0x9F2764EA, + 0xF236613F, 0xCA270E93, 0x8214BE67, 0xBA05D1CB, + 0x1273DF8F, 0x2A62B023, 0x625100D7, 0x5A406F7B, + 0xB8730B7D, 0x806264D1, 0xC851D425, 0xF040BB89, + 0x5836B5CD, 0x6027DA61, 0x28146A95, 0x10050539, + 0x7D1400EC, 0x45056F40, 0x0D36DFB4, 0x3527B018, + 0x9D51BE5C, 0xA540D1F0, 0xED736104, 0xD5620EA8, + 0x2CF9DFF9, 0x14E8B055, 0x5CDB00A1, 0x64CA6F0D, + 0xCCBC6149, 0xF4AD0EE5, 0xBC9EBE11, 0x848FD1BD, + 0xE99ED468, 0xD18FBBC4, 0x99BC0B30, 0xA1AD649C, + 0x09DB6AD8, 0x31CA0574, 0x79F9B580, 0x41E8DA2C, + 0xA3DBBE2A, 0x9BCAD186, 0xD3F96172, 0xEBE80EDE, + 0x439E009A, 0x7B8F6F36, 0x33BCDFC2, 0x0BADB06E, + 0x66BCB5BB, 0x5EADDA17, 0x169E6AE3, 0x2E8F054F, + 0x86F90B0B, 0xBEE864A7, 0xF6DBD453, 0xCECABBFF, + 0x6EA2D55C, 0x56B3BAF0, 0x1E800A04, 0x269165A8, + 0x8EE76BEC, 0xB6F60440, 0xFEC5B4B4, 0xC6D4DB18, + 0xABC5DECD, 0x93D4B161, 0xDBE70195, 0xE3F66E39, + 0x4B80607D, 0x73910FD1, 0x3BA2BF25, 0x03B3D089, + 0xE180B48F, 0xD991DB23, 0x91A26BD7, 0xA9B3047B, + 0x01C50A3F, 0x39D46593, 0x71E7D567, 0x49F6BACB, + 0x24E7BF1E, 0x1CF6D0B2, 0x54C56046, 0x6CD40FEA, + 0xC4A201AE, 0xFCB36E02, 0xB480DEF6, 0x8C91B15A, + 0x750A600B, 0x4D1B0FA7, 0x0528BF53, 0x3D39D0FF, + 0x954FDEBB, 0xAD5EB117, 0xE56D01E3, 0xDD7C6E4F, + 0xB06D6B9A, 0x887C0436, 0xC04FB4C2, 0xF85EDB6E, + 0x5028D52A, 0x6839BA86, 0x200A0A72, 0x181B65DE, + 0xFA2801D8, 0xC2396E74, 0x8A0ADE80, 0xB21BB12C, + 0x1A6DBF68, 0x227CD0C4, 0x6A4F6030, 0x525E0F9C, + 0x3F4F0A49, 0x075E65E5, 0x4F6DD511, 0x777CBABD, + 0xDF0AB4F9, 0xE71BDB55, 0xAF286BA1, 0x9739040D, + 0x59F3BFF2, 0x61E2D05E, 0x29D160AA, 0x11C00F06, + 0xB9B60142, 0x81A76EEE, 0xC994DE1A, 0xF185B1B6, + 0x9C94B463, 0xA485DBCF, 0xECB66B3B, 0xD4A70497, + 0x7CD10AD3, 0x44C0657F, 0x0CF3D58B, 0x34E2BA27, + 0xD6D1DE21, 0xEEC0B18D, 0xA6F30179, 0x9EE26ED5, + 0x36946091, 0x0E850F3D, 0x46B6BFC9, 0x7EA7D065, + 0x13B6D5B0, 0x2BA7BA1C, 0x63940AE8, 0x5B856544, + 0xF3F36B00, 0xCBE204AC, 0x83D1B458, 0xBBC0DBF4, + 0x425B0AA5, 0x7A4A6509, 0x3279D5FD, 0x0A68BA51, + 0xA21EB415, 0x9A0FDBB9, 0xD23C6B4D, 0xEA2D04E1, + 0x873C0134, 0xBF2D6E98, 0xF71EDE6C, 0xCF0FB1C0, + 0x6779BF84, 0x5F68D028, 0x175B60DC, 0x2F4A0F70, + 0xCD796B76, 0xF56804DA, 0xBD5BB42E, 0x854ADB82, + 0x2D3CD5C6, 0x152DBA6A, 0x5D1E0A9E, 0x650F6532, + 0x081E60E7, 0x300F0F4B, 0x783CBFBF, 0x402DD013, + 0xE85BDE57, 0xD04AB1FB, 0x9879010F, 0xA0686EA3 + }, + { + 0x00000000, 0xEF306B19, 0xDB8CA0C3, 0x34BCCBDA, + 0xB2F53777, 0x5DC55C6E, 0x697997B4, 0x8649FCAD, + 0x6006181F, 0x8F367306, 0xBB8AB8DC, 0x54BAD3C5, + 0xD2F32F68, 0x3DC34471, 0x097F8FAB, 0xE64FE4B2, + 0xC00C303E, 0x2F3C5B27, 0x1B8090FD, 0xF4B0FBE4, + 0x72F90749, 0x9DC96C50, 0xA975A78A, 0x4645CC93, + 0xA00A2821, 0x4F3A4338, 0x7B8688E2, 0x94B6E3FB, + 0x12FF1F56, 0xFDCF744F, 0xC973BF95, 0x2643D48C, + 0x85F4168D, 0x6AC47D94, 0x5E78B64E, 0xB148DD57, + 0x370121FA, 0xD8314AE3, 0xEC8D8139, 0x03BDEA20, + 0xE5F20E92, 0x0AC2658B, 0x3E7EAE51, 0xD14EC548, + 0x570739E5, 0xB83752FC, 0x8C8B9926, 0x63BBF23F, + 0x45F826B3, 0xAAC84DAA, 0x9E748670, 0x7144ED69, + 0xF70D11C4, 0x183D7ADD, 0x2C81B107, 0xC3B1DA1E, + 0x25FE3EAC, 0xCACE55B5, 0xFE729E6F, 0x1142F576, + 0x970B09DB, 0x783B62C2, 0x4C87A918, 0xA3B7C201, + 0x0E045BEB, 0xE13430F2, 0xD588FB28, 0x3AB89031, + 0xBCF16C9C, 0x53C10785, 0x677DCC5F, 0x884DA746, + 0x6E0243F4, 0x813228ED, 0xB58EE337, 0x5ABE882E, + 0xDCF77483, 0x33C71F9A, 0x077BD440, 0xE84BBF59, + 0xCE086BD5, 0x213800CC, 0x1584CB16, 0xFAB4A00F, + 0x7CFD5CA2, 0x93CD37BB, 0xA771FC61, 0x48419778, + 0xAE0E73CA, 0x413E18D3, 0x7582D309, 0x9AB2B810, + 0x1CFB44BD, 0xF3CB2FA4, 0xC777E47E, 0x28478F67, + 0x8BF04D66, 0x64C0267F, 0x507CEDA5, 0xBF4C86BC, + 0x39057A11, 0xD6351108, 0xE289DAD2, 0x0DB9B1CB, + 0xEBF65579, 0x04C63E60, 0x307AF5BA, 0xDF4A9EA3, + 0x5903620E, 0xB6330917, 0x828FC2CD, 0x6DBFA9D4, + 0x4BFC7D58, 0xA4CC1641, 0x9070DD9B, 0x7F40B682, + 0xF9094A2F, 0x16392136, 0x2285EAEC, 0xCDB581F5, + 0x2BFA6547, 0xC4CA0E5E, 0xF076C584, 0x1F46AE9D, + 0x990F5230, 0x763F3929, 0x4283F2F3, 0xADB399EA, + 0x1C08B7D6, 0xF338DCCF, 0xC7841715, 0x28B47C0C, + 0xAEFD80A1, 0x41CDEBB8, 0x75712062, 0x9A414B7B, + 0x7C0EAFC9, 0x933EC4D0, 0xA7820F0A, 0x48B26413, + 0xCEFB98BE, 0x21CBF3A7, 0x1577387D, 0xFA475364, + 0xDC0487E8, 0x3334ECF1, 0x0788272B, 0xE8B84C32, + 0x6EF1B09F, 0x81C1DB86, 0xB57D105C, 0x5A4D7B45, + 0xBC029FF7, 0x5332F4EE, 0x678E3F34, 0x88BE542D, + 0x0EF7A880, 0xE1C7C399, 0xD57B0843, 0x3A4B635A, + 0x99FCA15B, 0x76CCCA42, 0x42700198, 0xAD406A81, + 0x2B09962C, 0xC439FD35, 0xF08536EF, 0x1FB55DF6, + 0xF9FAB944, 0x16CAD25D, 0x22761987, 0xCD46729E, + 0x4B0F8E33, 0xA43FE52A, 0x90832EF0, 0x7FB345E9, + 0x59F09165, 0xB6C0FA7C, 0x827C31A6, 0x6D4C5ABF, + 0xEB05A612, 0x0435CD0B, 0x308906D1, 0xDFB96DC8, + 0x39F6897A, 0xD6C6E263, 0xE27A29B9, 0x0D4A42A0, + 0x8B03BE0D, 0x6433D514, 0x508F1ECE, 0xBFBF75D7, + 0x120CEC3D, 0xFD3C8724, 0xC9804CFE, 0x26B027E7, + 0xA0F9DB4A, 0x4FC9B053, 0x7B757B89, 0x94451090, + 0x720AF422, 0x9D3A9F3B, 0xA98654E1, 0x46B63FF8, + 0xC0FFC355, 0x2FCFA84C, 0x1B736396, 0xF443088F, + 0xD200DC03, 0x3D30B71A, 0x098C7CC0, 0xE6BC17D9, + 0x60F5EB74, 0x8FC5806D, 0xBB794BB7, 0x544920AE, + 0xB206C41C, 0x5D36AF05, 0x698A64DF, 0x86BA0FC6, + 0x00F3F36B, 0xEFC39872, 0xDB7F53A8, 0x344F38B1, + 0x97F8FAB0, 0x78C891A9, 0x4C745A73, 0xA344316A, + 0x250DCDC7, 0xCA3DA6DE, 0xFE816D04, 0x11B1061D, + 0xF7FEE2AF, 0x18CE89B6, 0x2C72426C, 0xC3422975, + 0x450BD5D8, 0xAA3BBEC1, 0x9E87751B, 0x71B71E02, + 0x57F4CA8E, 0xB8C4A197, 0x8C786A4D, 0x63480154, + 0xE501FDF9, 0x0A3196E0, 0x3E8D5D3A, 0xD1BD3623, + 0x37F2D291, 0xD8C2B988, 0xEC7E7252, 0x034E194B, + 0x8507E5E6, 0x6A378EFF, 0x5E8B4525, 0xB1BB2E3C + }, + { + 0x00000000, 0x68032CC8, 0xD0065990, 0xB8057558, + 0xA5E0C5D1, 0xCDE3E919, 0x75E69C41, 0x1DE5B089, + 0x4E2DFD53, 0x262ED19B, 0x9E2BA4C3, 0xF628880B, + 0xEBCD3882, 0x83CE144A, 0x3BCB6112, 0x53C84DDA, + 0x9C5BFAA6, 0xF458D66E, 0x4C5DA336, 0x245E8FFE, + 0x39BB3F77, 0x51B813BF, 0xE9BD66E7, 0x81BE4A2F, + 0xD27607F5, 0xBA752B3D, 0x02705E65, 0x6A7372AD, + 0x7796C224, 0x1F95EEEC, 0xA7909BB4, 0xCF93B77C, + 0x3D5B83BD, 0x5558AF75, 0xED5DDA2D, 0x855EF6E5, + 0x98BB466C, 0xF0B86AA4, 0x48BD1FFC, 0x20BE3334, + 0x73767EEE, 0x1B755226, 0xA370277E, 0xCB730BB6, + 0xD696BB3F, 0xBE9597F7, 0x0690E2AF, 0x6E93CE67, + 0xA100791B, 0xC90355D3, 0x7106208B, 0x19050C43, + 0x04E0BCCA, 0x6CE39002, 0xD4E6E55A, 0xBCE5C992, + 0xEF2D8448, 0x872EA880, 0x3F2BDDD8, 0x5728F110, + 0x4ACD4199, 0x22CE6D51, 0x9ACB1809, 0xF2C834C1, + 0x7AB7077A, 0x12B42BB2, 0xAAB15EEA, 0xC2B27222, + 0xDF57C2AB, 0xB754EE63, 0x0F519B3B, 0x6752B7F3, + 0x349AFA29, 0x5C99D6E1, 0xE49CA3B9, 0x8C9F8F71, + 0x917A3FF8, 0xF9791330, 0x417C6668, 0x297F4AA0, + 0xE6ECFDDC, 0x8EEFD114, 0x36EAA44C, 0x5EE98884, + 0x430C380D, 0x2B0F14C5, 0x930A619D, 0xFB094D55, + 0xA8C1008F, 0xC0C22C47, 0x78C7591F, 0x10C475D7, + 0x0D21C55E, 0x6522E996, 0xDD279CCE, 0xB524B006, + 0x47EC84C7, 0x2FEFA80F, 0x97EADD57, 0xFFE9F19F, + 0xE20C4116, 0x8A0F6DDE, 0x320A1886, 0x5A09344E, + 0x09C17994, 0x61C2555C, 0xD9C72004, 0xB1C40CCC, + 0xAC21BC45, 0xC422908D, 0x7C27E5D5, 0x1424C91D, + 0xDBB77E61, 0xB3B452A9, 0x0BB127F1, 0x63B20B39, + 0x7E57BBB0, 0x16549778, 0xAE51E220, 0xC652CEE8, + 0x959A8332, 0xFD99AFFA, 0x459CDAA2, 0x2D9FF66A, + 0x307A46E3, 0x58796A2B, 0xE07C1F73, 0x887F33BB, + 0xF56E0EF4, 0x9D6D223C, 0x25685764, 0x4D6B7BAC, + 0x508ECB25, 0x388DE7ED, 0x808892B5, 0xE88BBE7D, + 0xBB43F3A7, 0xD340DF6F, 0x6B45AA37, 0x034686FF, + 0x1EA33676, 0x76A01ABE, 0xCEA56FE6, 0xA6A6432E, + 0x6935F452, 0x0136D89A, 0xB933ADC2, 0xD130810A, + 0xCCD53183, 0xA4D61D4B, 0x1CD36813, 0x74D044DB, + 0x27180901, 0x4F1B25C9, 0xF71E5091, 0x9F1D7C59, + 0x82F8CCD0, 0xEAFBE018, 0x52FE9540, 0x3AFDB988, + 0xC8358D49, 0xA036A181, 0x1833D4D9, 0x7030F811, + 0x6DD54898, 0x05D66450, 0xBDD31108, 0xD5D03DC0, + 0x8618701A, 0xEE1B5CD2, 0x561E298A, 0x3E1D0542, + 0x23F8B5CB, 0x4BFB9903, 0xF3FEEC5B, 0x9BFDC093, + 0x546E77EF, 0x3C6D5B27, 0x84682E7F, 0xEC6B02B7, + 0xF18EB23E, 0x998D9EF6, 0x2188EBAE, 0x498BC766, + 0x1A438ABC, 0x7240A674, 0xCA45D32C, 0xA246FFE4, + 0xBFA34F6D, 0xD7A063A5, 0x6FA516FD, 0x07A63A35, + 0x8FD9098E, 0xE7DA2546, 0x5FDF501E, 0x37DC7CD6, + 0x2A39CC5F, 0x423AE097, 0xFA3F95CF, 0x923CB907, + 0xC1F4F4DD, 0xA9F7D815, 0x11F2AD4D, 0x79F18185, + 0x6414310C, 0x0C171DC4, 0xB412689C, 0xDC114454, + 0x1382F328, 0x7B81DFE0, 0xC384AAB8, 0xAB878670, + 0xB66236F9, 0xDE611A31, 0x66646F69, 0x0E6743A1, + 0x5DAF0E7B, 0x35AC22B3, 0x8DA957EB, 0xE5AA7B23, + 0xF84FCBAA, 0x904CE762, 0x2849923A, 0x404ABEF2, + 0xB2828A33, 0xDA81A6FB, 0x6284D3A3, 0x0A87FF6B, + 0x17624FE2, 0x7F61632A, 0xC7641672, 0xAF673ABA, + 0xFCAF7760, 0x94AC5BA8, 0x2CA92EF0, 0x44AA0238, + 0x594FB2B1, 0x314C9E79, 0x8949EB21, 0xE14AC7E9, + 0x2ED97095, 0x46DA5C5D, 0xFEDF2905, 0x96DC05CD, + 0x8B39B544, 0xE33A998C, 0x5B3FECD4, 0x333CC01C, + 0x60F48DC6, 0x08F7A10E, 0xB0F2D456, 0xD8F1F89E, + 0xC5144817, 0xAD1764DF, 0x15121187, 0x7D113D4F + }, + { + 0x00000000, 0x493C7D27, 0x9278FA4E, 0xDB448769, + 0x211D826D, 0x6821FF4A, 0xB3657823, 0xFA590504, + 0x423B04DA, 0x0B0779FD, 0xD043FE94, 0x997F83B3, + 0x632686B7, 0x2A1AFB90, 0xF15E7CF9, 0xB86201DE, + 0x847609B4, 0xCD4A7493, 0x160EF3FA, 0x5F328EDD, + 0xA56B8BD9, 0xEC57F6FE, 0x37137197, 0x7E2F0CB0, + 0xC64D0D6E, 0x8F717049, 0x5435F720, 0x1D098A07, + 0xE7508F03, 0xAE6CF224, 0x7528754D, 0x3C14086A, + 0x0D006599, 0x443C18BE, 0x9F789FD7, 0xD644E2F0, + 0x2C1DE7F4, 0x65219AD3, 0xBE651DBA, 0xF759609D, + 0x4F3B6143, 0x06071C64, 0xDD439B0D, 0x947FE62A, + 0x6E26E32E, 0x271A9E09, 0xFC5E1960, 0xB5626447, + 0x89766C2D, 0xC04A110A, 0x1B0E9663, 0x5232EB44, + 0xA86BEE40, 0xE1579367, 0x3A13140E, 0x732F6929, + 0xCB4D68F7, 0x827115D0, 0x593592B9, 0x1009EF9E, + 0xEA50EA9A, 0xA36C97BD, 0x782810D4, 0x31146DF3, + 0x1A00CB32, 0x533CB615, 0x8878317C, 0xC1444C5B, + 0x3B1D495F, 0x72213478, 0xA965B311, 0xE059CE36, + 0x583BCFE8, 0x1107B2CF, 0xCA4335A6, 0x837F4881, + 0x79264D85, 0x301A30A2, 0xEB5EB7CB, 0xA262CAEC, + 0x9E76C286, 0xD74ABFA1, 0x0C0E38C8, 0x453245EF, + 0xBF6B40EB, 0xF6573DCC, 0x2D13BAA5, 0x642FC782, + 0xDC4DC65C, 0x9571BB7B, 0x4E353C12, 0x07094135, + 0xFD504431, 0xB46C3916, 0x6F28BE7F, 0x2614C358, + 0x1700AEAB, 0x5E3CD38C, 0x857854E5, 0xCC4429C2, + 0x361D2CC6, 0x7F2151E1, 0xA465D688, 0xED59ABAF, + 0x553BAA71, 0x1C07D756, 0xC743503F, 0x8E7F2D18, + 0x7426281C, 0x3D1A553B, 0xE65ED252, 0xAF62AF75, + 0x9376A71F, 0xDA4ADA38, 0x010E5D51, 0x48322076, + 0xB26B2572, 0xFB575855, 0x2013DF3C, 0x692FA21B, + 0xD14DA3C5, 0x9871DEE2, 0x4335598B, 0x0A0924AC, + 0xF05021A8, 0xB96C5C8F, 0x6228DBE6, 0x2B14A6C1, + 0x34019664, 0x7D3DEB43, 0xA6796C2A, 0xEF45110D, + 0x151C1409, 0x5C20692E, 0x8764EE47, 0xCE589360, + 0x763A92BE, 0x3F06EF99, 0xE44268F0, 0xAD7E15D7, + 0x572710D3, 0x1E1B6DF4, 0xC55FEA9D, 0x8C6397BA, + 0xB0779FD0, 0xF94BE2F7, 0x220F659E, 0x6B3318B9, + 0x916A1DBD, 0xD856609A, 0x0312E7F3, 0x4A2E9AD4, + 0xF24C9B0A, 0xBB70E62D, 0x60346144, 0x29081C63, + 0xD3511967, 0x9A6D6440, 0x4129E329, 0x08159E0E, + 0x3901F3FD, 0x703D8EDA, 0xAB7909B3, 0xE2457494, + 0x181C7190, 0x51200CB7, 0x8A648BDE, 0xC358F6F9, + 0x7B3AF727, 0x32068A00, 0xE9420D69, 0xA07E704E, + 0x5A27754A, 0x131B086D, 0xC85F8F04, 0x8163F223, + 0xBD77FA49, 0xF44B876E, 0x2F0F0007, 0x66337D20, + 0x9C6A7824, 0xD5560503, 0x0E12826A, 0x472EFF4D, + 0xFF4CFE93, 0xB67083B4, 0x6D3404DD, 0x240879FA, + 0xDE517CFE, 0x976D01D9, 0x4C2986B0, 0x0515FB97, + 0x2E015D56, 0x673D2071, 0xBC79A718, 0xF545DA3F, + 0x0F1CDF3B, 0x4620A21C, 0x9D642575, 0xD4585852, + 0x6C3A598C, 0x250624AB, 0xFE42A3C2, 0xB77EDEE5, + 0x4D27DBE1, 0x041BA6C6, 0xDF5F21AF, 0x96635C88, + 0xAA7754E2, 0xE34B29C5, 0x380FAEAC, 0x7133D38B, + 0x8B6AD68F, 0xC256ABA8, 0x19122CC1, 0x502E51E6, + 0xE84C5038, 0xA1702D1F, 0x7A34AA76, 0x3308D751, + 0xC951D255, 0x806DAF72, 0x5B29281B, 0x1215553C, + 0x230138CF, 0x6A3D45E8, 0xB179C281, 0xF845BFA6, + 0x021CBAA2, 0x4B20C785, 0x906440EC, 0xD9583DCB, + 0x613A3C15, 0x28064132, 0xF342C65B, 0xBA7EBB7C, + 0x4027BE78, 0x091BC35F, 0xD25F4436, 0x9B633911, + 0xA777317B, 0xEE4B4C5C, 0x350FCB35, 0x7C33B612, + 0x866AB316, 0xCF56CE31, 0x14124958, 0x5D2E347F, + 0xE54C35A1, 0xAC704886, 0x7734CFEF, 0x3E08B2C8, + 0xC451B7CC, 0x8D6DCAEB, 0x56294D82, 0x1F1530A5 + } +#else /* !WORDS_BIGENDIAN */ + { + 0x00000000, 0x03836BF2, 0xF7703BE1, 0xF4F35013, + 0x1F979AC7, 0x1C14F135, 0xE8E7A126, 0xEB64CAD4, + 0xCF58D98A, 0xCCDBB278, 0x3828E26B, 0x3BAB8999, + 0xD0CF434D, 0xD34C28BF, 0x27BF78AC, 0x243C135E, + 0x6FC75E10, 0x6C4435E2, 0x98B765F1, 0x9B340E03, + 0x7050C4D7, 0x73D3AF25, 0x8720FF36, 0x84A394C4, + 0xA09F879A, 0xA31CEC68, 0x57EFBC7B, 0x546CD789, + 0xBF081D5D, 0xBC8B76AF, 0x487826BC, 0x4BFB4D4E, + 0xDE8EBD20, 0xDD0DD6D2, 0x29FE86C1, 0x2A7DED33, + 0xC11927E7, 0xC29A4C15, 0x36691C06, 0x35EA77F4, + 0x11D664AA, 0x12550F58, 0xE6A65F4B, 0xE52534B9, + 0x0E41FE6D, 0x0DC2959F, 0xF931C58C, 0xFAB2AE7E, + 0xB149E330, 0xB2CA88C2, 0x4639D8D1, 0x45BAB323, + 0xAEDE79F7, 0xAD5D1205, 0x59AE4216, 0x5A2D29E4, + 0x7E113ABA, 0x7D925148, 0x8961015B, 0x8AE26AA9, + 0x6186A07D, 0x6205CB8F, 0x96F69B9C, 0x9575F06E, + 0xBC1D7B41, 0xBF9E10B3, 0x4B6D40A0, 0x48EE2B52, + 0xA38AE186, 0xA0098A74, 0x54FADA67, 0x5779B195, + 0x7345A2CB, 0x70C6C939, 0x8435992A, 0x87B6F2D8, + 0x6CD2380C, 0x6F5153FE, 0x9BA203ED, 0x9821681F, + 0xD3DA2551, 0xD0594EA3, 0x24AA1EB0, 0x27297542, + 0xCC4DBF96, 0xCFCED464, 0x3B3D8477, 0x38BEEF85, + 0x1C82FCDB, 0x1F019729, 0xEBF2C73A, 0xE871ACC8, + 0x0315661C, 0x00960DEE, 0xF4655DFD, 0xF7E6360F, + 0x6293C661, 0x6110AD93, 0x95E3FD80, 0x96609672, + 0x7D045CA6, 0x7E873754, 0x8A746747, 0x89F70CB5, + 0xADCB1FEB, 0xAE487419, 0x5ABB240A, 0x59384FF8, + 0xB25C852C, 0xB1DFEEDE, 0x452CBECD, 0x46AFD53F, + 0x0D549871, 0x0ED7F383, 0xFA24A390, 0xF9A7C862, + 0x12C302B6, 0x11406944, 0xE5B33957, 0xE63052A5, + 0xC20C41FB, 0xC18F2A09, 0x357C7A1A, 0x36FF11E8, + 0xDD9BDB3C, 0xDE18B0CE, 0x2AEBE0DD, 0x29688B2F, + 0x783BF682, 0x7BB89D70, 0x8F4BCD63, 0x8CC8A691, + 0x67AC6C45, 0x642F07B7, 0x90DC57A4, 0x935F3C56, + 0xB7632F08, 0xB4E044FA, 0x401314E9, 0x43907F1B, + 0xA8F4B5CF, 0xAB77DE3D, 0x5F848E2E, 0x5C07E5DC, + 0x17FCA892, 0x147FC360, 0xE08C9373, 0xE30FF881, + 0x086B3255, 0x0BE859A7, 0xFF1B09B4, 0xFC986246, + 0xD8A47118, 0xDB271AEA, 0x2FD44AF9, 0x2C57210B, + 0xC733EBDF, 0xC4B0802D, 0x3043D03E, 0x33C0BBCC, + 0xA6B54BA2, 0xA5362050, 0x51C57043, 0x52461BB1, + 0xB922D165, 0xBAA1BA97, 0x4E52EA84, 0x4DD18176, + 0x69ED9228, 0x6A6EF9DA, 0x9E9DA9C9, 0x9D1EC23B, + 0x767A08EF, 0x75F9631D, 0x810A330E, 0x828958FC, + 0xC97215B2, 0xCAF17E40, 0x3E022E53, 0x3D8145A1, + 0xD6E58F75, 0xD566E487, 0x2195B494, 0x2216DF66, + 0x062ACC38, 0x05A9A7CA, 0xF15AF7D9, 0xF2D99C2B, + 0x19BD56FF, 0x1A3E3D0D, 0xEECD6D1E, 0xED4E06EC, + 0xC4268DC3, 0xC7A5E631, 0x3356B622, 0x30D5DDD0, + 0xDBB11704, 0xD8327CF6, 0x2CC12CE5, 0x2F424717, + 0x0B7E5449, 0x08FD3FBB, 0xFC0E6FA8, 0xFF8D045A, + 0x14E9CE8E, 0x176AA57C, 0xE399F56F, 0xE01A9E9D, + 0xABE1D3D3, 0xA862B821, 0x5C91E832, 0x5F1283C0, + 0xB4764914, 0xB7F522E6, 0x430672F5, 0x40851907, + 0x64B90A59, 0x673A61AB, 0x93C931B8, 0x904A5A4A, + 0x7B2E909E, 0x78ADFB6C, 0x8C5EAB7F, 0x8FDDC08D, + 0x1AA830E3, 0x192B5B11, 0xEDD80B02, 0xEE5B60F0, + 0x053FAA24, 0x06BCC1D6, 0xF24F91C5, 0xF1CCFA37, + 0xD5F0E969, 0xD673829B, 0x2280D288, 0x2103B97A, + 0xCA6773AE, 0xC9E4185C, 0x3D17484F, 0x3E9423BD, + 0x756F6EF3, 0x76EC0501, 0x821F5512, 0x819C3EE0, + 0x6AF8F434, 0x697B9FC6, 0x9D88CFD5, 0x9E0BA427, + 0xBA37B779, 0xB9B4DC8B, 0x4D478C98, 0x4EC4E76A, + 0xA5A02DBE, 0xA623464C, 0x52D0165F, 0x51537DAD, + }, + { + 0x00000000, 0x7798A213, 0xEE304527, 0x99A8E734, + 0xDC618A4E, 0xABF9285D, 0x3251CF69, 0x45C96D7A, + 0xB8C3149D, 0xCF5BB68E, 0x56F351BA, 0x216BF3A9, + 0x64A29ED3, 0x133A3CC0, 0x8A92DBF4, 0xFD0A79E7, + 0x81F1C53F, 0xF669672C, 0x6FC18018, 0x1859220B, + 0x5D904F71, 0x2A08ED62, 0xB3A00A56, 0xC438A845, + 0x3932D1A2, 0x4EAA73B1, 0xD7029485, 0xA09A3696, + 0xE5535BEC, 0x92CBF9FF, 0x0B631ECB, 0x7CFBBCD8, + 0x02E38B7F, 0x757B296C, 0xECD3CE58, 0x9B4B6C4B, + 0xDE820131, 0xA91AA322, 0x30B24416, 0x472AE605, + 0xBA209FE2, 0xCDB83DF1, 0x5410DAC5, 0x238878D6, + 0x664115AC, 0x11D9B7BF, 0x8871508B, 0xFFE9F298, + 0x83124E40, 0xF48AEC53, 0x6D220B67, 0x1ABAA974, + 0x5F73C40E, 0x28EB661D, 0xB1438129, 0xC6DB233A, + 0x3BD15ADD, 0x4C49F8CE, 0xD5E11FFA, 0xA279BDE9, + 0xE7B0D093, 0x90287280, 0x098095B4, 0x7E1837A7, + 0x04C617FF, 0x735EB5EC, 0xEAF652D8, 0x9D6EF0CB, + 0xD8A79DB1, 0xAF3F3FA2, 0x3697D896, 0x410F7A85, + 0xBC050362, 0xCB9DA171, 0x52354645, 0x25ADE456, + 0x6064892C, 0x17FC2B3F, 0x8E54CC0B, 0xF9CC6E18, + 0x8537D2C0, 0xF2AF70D3, 0x6B0797E7, 0x1C9F35F4, + 0x5956588E, 0x2ECEFA9D, 0xB7661DA9, 0xC0FEBFBA, + 0x3DF4C65D, 0x4A6C644E, 0xD3C4837A, 0xA45C2169, + 0xE1954C13, 0x960DEE00, 0x0FA50934, 0x783DAB27, + 0x06259C80, 0x71BD3E93, 0xE815D9A7, 0x9F8D7BB4, + 0xDA4416CE, 0xADDCB4DD, 0x347453E9, 0x43ECF1FA, + 0xBEE6881D, 0xC97E2A0E, 0x50D6CD3A, 0x274E6F29, + 0x62870253, 0x151FA040, 0x8CB74774, 0xFB2FE567, + 0x87D459BF, 0xF04CFBAC, 0x69E41C98, 0x1E7CBE8B, + 0x5BB5D3F1, 0x2C2D71E2, 0xB58596D6, 0xC21D34C5, + 0x3F174D22, 0x488FEF31, 0xD1270805, 0xA6BFAA16, + 0xE376C76C, 0x94EE657F, 0x0D46824B, 0x7ADE2058, + 0xF9FAC3FB, 0x8E6261E8, 0x17CA86DC, 0x605224CF, + 0x259B49B5, 0x5203EBA6, 0xCBAB0C92, 0xBC33AE81, + 0x4139D766, 0x36A17575, 0xAF099241, 0xD8913052, + 0x9D585D28, 0xEAC0FF3B, 0x7368180F, 0x04F0BA1C, + 0x780B06C4, 0x0F93A4D7, 0x963B43E3, 0xE1A3E1F0, + 0xA46A8C8A, 0xD3F22E99, 0x4A5AC9AD, 0x3DC26BBE, + 0xC0C81259, 0xB750B04A, 0x2EF8577E, 0x5960F56D, + 0x1CA99817, 0x6B313A04, 0xF299DD30, 0x85017F23, + 0xFB194884, 0x8C81EA97, 0x15290DA3, 0x62B1AFB0, + 0x2778C2CA, 0x50E060D9, 0xC94887ED, 0xBED025FE, + 0x43DA5C19, 0x3442FE0A, 0xADEA193E, 0xDA72BB2D, + 0x9FBBD657, 0xE8237444, 0x718B9370, 0x06133163, + 0x7AE88DBB, 0x0D702FA8, 0x94D8C89C, 0xE3406A8F, + 0xA68907F5, 0xD111A5E6, 0x48B942D2, 0x3F21E0C1, + 0xC22B9926, 0xB5B33B35, 0x2C1BDC01, 0x5B837E12, + 0x1E4A1368, 0x69D2B17B, 0xF07A564F, 0x87E2F45C, + 0xFD3CD404, 0x8AA47617, 0x130C9123, 0x64943330, + 0x215D5E4A, 0x56C5FC59, 0xCF6D1B6D, 0xB8F5B97E, + 0x45FFC099, 0x3267628A, 0xABCF85BE, 0xDC5727AD, + 0x999E4AD7, 0xEE06E8C4, 0x77AE0FF0, 0x0036ADE3, + 0x7CCD113B, 0x0B55B328, 0x92FD541C, 0xE565F60F, + 0xA0AC9B75, 0xD7343966, 0x4E9CDE52, 0x39047C41, + 0xC40E05A6, 0xB396A7B5, 0x2A3E4081, 0x5DA6E292, + 0x186F8FE8, 0x6FF72DFB, 0xF65FCACF, 0x81C768DC, + 0xFFDF5F7B, 0x8847FD68, 0x11EF1A5C, 0x6677B84F, + 0x23BED535, 0x54267726, 0xCD8E9012, 0xBA163201, + 0x471C4BE6, 0x3084E9F5, 0xA92C0EC1, 0xDEB4ACD2, + 0x9B7DC1A8, 0xECE563BB, 0x754D848F, 0x02D5269C, + 0x7E2E9A44, 0x09B63857, 0x901EDF63, 0xE7867D70, + 0xA24F100A, 0xD5D7B219, 0x4C7F552D, 0x3BE7F73E, + 0xC6ED8ED9, 0xB1752CCA, 0x28DDCBFE, 0x5F4569ED, + 0x1A8C0497, 0x6D14A684, 0xF4BC41B0, 0x8324E3A3, + }, + { + 0x00000000, 0x7E9241A5, 0x0D526F4F, 0x73C02EEA, + 0x1AA4DE9E, 0x64369F3B, 0x17F6B1D1, 0x6964F074, + 0xC53E5138, 0xBBAC109D, 0xC86C3E77, 0xB6FE7FD2, + 0xDF9A8FA6, 0xA108CE03, 0xD2C8E0E9, 0xAC5AA14C, + 0x8A7DA270, 0xF4EFE3D5, 0x872FCD3F, 0xF9BD8C9A, + 0x90D97CEE, 0xEE4B3D4B, 0x9D8B13A1, 0xE3195204, + 0x4F43F348, 0x31D1B2ED, 0x42119C07, 0x3C83DDA2, + 0x55E72DD6, 0x2B756C73, 0x58B54299, 0x2627033C, + 0x14FB44E1, 0x6A690544, 0x19A92BAE, 0x673B6A0B, + 0x0E5F9A7F, 0x70CDDBDA, 0x030DF530, 0x7D9FB495, + 0xD1C515D9, 0xAF57547C, 0xDC977A96, 0xA2053B33, + 0xCB61CB47, 0xB5F38AE2, 0xC633A408, 0xB8A1E5AD, + 0x9E86E691, 0xE014A734, 0x93D489DE, 0xED46C87B, + 0x8422380F, 0xFAB079AA, 0x89705740, 0xF7E216E5, + 0x5BB8B7A9, 0x252AF60C, 0x56EAD8E6, 0x28789943, + 0x411C6937, 0x3F8E2892, 0x4C4E0678, 0x32DC47DD, + 0xD98065C7, 0xA7122462, 0xD4D20A88, 0xAA404B2D, + 0xC324BB59, 0xBDB6FAFC, 0xCE76D416, 0xB0E495B3, + 0x1CBE34FF, 0x622C755A, 0x11EC5BB0, 0x6F7E1A15, + 0x061AEA61, 0x7888ABC4, 0x0B48852E, 0x75DAC48B, + 0x53FDC7B7, 0x2D6F8612, 0x5EAFA8F8, 0x203DE95D, + 0x49591929, 0x37CB588C, 0x440B7666, 0x3A9937C3, + 0x96C3968F, 0xE851D72A, 0x9B91F9C0, 0xE503B865, + 0x8C674811, 0xF2F509B4, 0x8135275E, 0xFFA766FB, + 0xCD7B2126, 0xB3E96083, 0xC0294E69, 0xBEBB0FCC, + 0xD7DFFFB8, 0xA94DBE1D, 0xDA8D90F7, 0xA41FD152, + 0x0845701E, 0x76D731BB, 0x05171F51, 0x7B855EF4, + 0x12E1AE80, 0x6C73EF25, 0x1FB3C1CF, 0x6121806A, + 0x47068356, 0x3994C2F3, 0x4A54EC19, 0x34C6ADBC, + 0x5DA25DC8, 0x23301C6D, 0x50F03287, 0x2E627322, + 0x8238D26E, 0xFCAA93CB, 0x8F6ABD21, 0xF1F8FC84, + 0x989C0CF0, 0xE60E4D55, 0x95CE63BF, 0xEB5C221A, + 0x4377278B, 0x3DE5662E, 0x4E2548C4, 0x30B70961, + 0x59D3F915, 0x2741B8B0, 0x5481965A, 0x2A13D7FF, + 0x864976B3, 0xF8DB3716, 0x8B1B19FC, 0xF5895859, + 0x9CEDA82D, 0xE27FE988, 0x91BFC762, 0xEF2D86C7, + 0xC90A85FB, 0xB798C45E, 0xC458EAB4, 0xBACAAB11, + 0xD3AE5B65, 0xAD3C1AC0, 0xDEFC342A, 0xA06E758F, + 0x0C34D4C3, 0x72A69566, 0x0166BB8C, 0x7FF4FA29, + 0x16900A5D, 0x68024BF8, 0x1BC26512, 0x655024B7, + 0x578C636A, 0x291E22CF, 0x5ADE0C25, 0x244C4D80, + 0x4D28BDF4, 0x33BAFC51, 0x407AD2BB, 0x3EE8931E, + 0x92B23252, 0xEC2073F7, 0x9FE05D1D, 0xE1721CB8, + 0x8816ECCC, 0xF684AD69, 0x85448383, 0xFBD6C226, + 0xDDF1C11A, 0xA36380BF, 0xD0A3AE55, 0xAE31EFF0, + 0xC7551F84, 0xB9C75E21, 0xCA0770CB, 0xB495316E, + 0x18CF9022, 0x665DD187, 0x159DFF6D, 0x6B0FBEC8, + 0x026B4EBC, 0x7CF90F19, 0x0F3921F3, 0x71AB6056, + 0x9AF7424C, 0xE46503E9, 0x97A52D03, 0xE9376CA6, + 0x80539CD2, 0xFEC1DD77, 0x8D01F39D, 0xF393B238, + 0x5FC91374, 0x215B52D1, 0x529B7C3B, 0x2C093D9E, + 0x456DCDEA, 0x3BFF8C4F, 0x483FA2A5, 0x36ADE300, + 0x108AE03C, 0x6E18A199, 0x1DD88F73, 0x634ACED6, + 0x0A2E3EA2, 0x74BC7F07, 0x077C51ED, 0x79EE1048, + 0xD5B4B104, 0xAB26F0A1, 0xD8E6DE4B, 0xA6749FEE, + 0xCF106F9A, 0xB1822E3F, 0xC24200D5, 0xBCD04170, + 0x8E0C06AD, 0xF09E4708, 0x835E69E2, 0xFDCC2847, + 0x94A8D833, 0xEA3A9996, 0x99FAB77C, 0xE768F6D9, + 0x4B325795, 0x35A01630, 0x466038DA, 0x38F2797F, + 0x5196890B, 0x2F04C8AE, 0x5CC4E644, 0x2256A7E1, + 0x0471A4DD, 0x7AE3E578, 0x0923CB92, 0x77B18A37, + 0x1ED57A43, 0x60473BE6, 0x1387150C, 0x6D1554A9, + 0xC14FF5E5, 0xBFDDB440, 0xCC1D9AAA, 0xB28FDB0F, + 0xDBEB2B7B, 0xA5796ADE, 0xD6B94434, 0xA82B0591, + }, + { + 0x00000000, 0xB8AA45DD, 0x812367BF, 0x39892262, + 0xF331227B, 0x4B9B67A6, 0x721245C4, 0xCAB80019, + 0xE66344F6, 0x5EC9012B, 0x67402349, 0xDFEA6694, + 0x1552668D, 0xADF82350, 0x94710132, 0x2CDB44EF, + 0x3DB164E9, 0x851B2134, 0xBC920356, 0x0438468B, + 0xCE804692, 0x762A034F, 0x4FA3212D, 0xF70964F0, + 0xDBD2201F, 0x637865C2, 0x5AF147A0, 0xE25B027D, + 0x28E30264, 0x904947B9, 0xA9C065DB, 0x116A2006, + 0x8B1425D7, 0x33BE600A, 0x0A374268, 0xB29D07B5, + 0x782507AC, 0xC08F4271, 0xF9066013, 0x41AC25CE, + 0x6D776121, 0xD5DD24FC, 0xEC54069E, 0x54FE4343, + 0x9E46435A, 0x26EC0687, 0x1F6524E5, 0xA7CF6138, + 0xB6A5413E, 0x0E0F04E3, 0x37862681, 0x8F2C635C, + 0x45946345, 0xFD3E2698, 0xC4B704FA, 0x7C1D4127, + 0x50C605C8, 0xE86C4015, 0xD1E56277, 0x694F27AA, + 0xA3F727B3, 0x1B5D626E, 0x22D4400C, 0x9A7E05D1, + 0xE75FA6AB, 0x5FF5E376, 0x667CC114, 0xDED684C9, + 0x146E84D0, 0xACC4C10D, 0x954DE36F, 0x2DE7A6B2, + 0x013CE25D, 0xB996A780, 0x801F85E2, 0x38B5C03F, + 0xF20DC026, 0x4AA785FB, 0x732EA799, 0xCB84E244, + 0xDAEEC242, 0x6244879F, 0x5BCDA5FD, 0xE367E020, + 0x29DFE039, 0x9175A5E4, 0xA8FC8786, 0x1056C25B, + 0x3C8D86B4, 0x8427C369, 0xBDAEE10B, 0x0504A4D6, + 0xCFBCA4CF, 0x7716E112, 0x4E9FC370, 0xF63586AD, + 0x6C4B837C, 0xD4E1C6A1, 0xED68E4C3, 0x55C2A11E, + 0x9F7AA107, 0x27D0E4DA, 0x1E59C6B8, 0xA6F38365, + 0x8A28C78A, 0x32828257, 0x0B0BA035, 0xB3A1E5E8, + 0x7919E5F1, 0xC1B3A02C, 0xF83A824E, 0x4090C793, + 0x51FAE795, 0xE950A248, 0xD0D9802A, 0x6873C5F7, + 0xA2CBC5EE, 0x1A618033, 0x23E8A251, 0x9B42E78C, + 0xB799A363, 0x0F33E6BE, 0x36BAC4DC, 0x8E108101, + 0x44A88118, 0xFC02C4C5, 0xC58BE6A7, 0x7D21A37A, + 0x3FC9A052, 0x8763E58F, 0xBEEAC7ED, 0x06408230, + 0xCCF88229, 0x7452C7F4, 0x4DDBE596, 0xF571A04B, + 0xD9AAE4A4, 0x6100A179, 0x5889831B, 0xE023C6C6, + 0x2A9BC6DF, 0x92318302, 0xABB8A160, 0x1312E4BD, + 0x0278C4BB, 0xBAD28166, 0x835BA304, 0x3BF1E6D9, + 0xF149E6C0, 0x49E3A31D, 0x706A817F, 0xC8C0C4A2, + 0xE41B804D, 0x5CB1C590, 0x6538E7F2, 0xDD92A22F, + 0x172AA236, 0xAF80E7EB, 0x9609C589, 0x2EA38054, + 0xB4DD8585, 0x0C77C058, 0x35FEE23A, 0x8D54A7E7, + 0x47ECA7FE, 0xFF46E223, 0xC6CFC041, 0x7E65859C, + 0x52BEC173, 0xEA1484AE, 0xD39DA6CC, 0x6B37E311, + 0xA18FE308, 0x1925A6D5, 0x20AC84B7, 0x9806C16A, + 0x896CE16C, 0x31C6A4B1, 0x084F86D3, 0xB0E5C30E, + 0x7A5DC317, 0xC2F786CA, 0xFB7EA4A8, 0x43D4E175, + 0x6F0FA59A, 0xD7A5E047, 0xEE2CC225, 0x568687F8, + 0x9C3E87E1, 0x2494C23C, 0x1D1DE05E, 0xA5B7A583, + 0xD89606F9, 0x603C4324, 0x59B56146, 0xE11F249B, + 0x2BA72482, 0x930D615F, 0xAA84433D, 0x122E06E0, + 0x3EF5420F, 0x865F07D2, 0xBFD625B0, 0x077C606D, + 0xCDC46074, 0x756E25A9, 0x4CE707CB, 0xF44D4216, + 0xE5276210, 0x5D8D27CD, 0x640405AF, 0xDCAE4072, + 0x1616406B, 0xAEBC05B6, 0x973527D4, 0x2F9F6209, + 0x034426E6, 0xBBEE633B, 0x82674159, 0x3ACD0484, + 0xF075049D, 0x48DF4140, 0x71566322, 0xC9FC26FF, + 0x5382232E, 0xEB2866F3, 0xD2A14491, 0x6A0B014C, + 0xA0B30155, 0x18194488, 0x219066EA, 0x993A2337, + 0xB5E167D8, 0x0D4B2205, 0x34C20067, 0x8C6845BA, + 0x46D045A3, 0xFE7A007E, 0xC7F3221C, 0x7F5967C1, + 0x6E3347C7, 0xD699021A, 0xEF102078, 0x57BA65A5, + 0x9D0265BC, 0x25A82061, 0x1C210203, 0xA48B47DE, + 0x88500331, 0x30FA46EC, 0x0973648E, 0xB1D92153, + 0x7B61214A, 0xC3CB6497, 0xFA4246F5, 0x42E80328, + }, + { + 0x00000000, 0xAC6F1138, 0x58DF2270, 0xF4B03348, + 0xB0BE45E0, 0x1CD154D8, 0xE8616790, 0x440E76A8, + 0x910B67C5, 0x3D6476FD, 0xC9D445B5, 0x65BB548D, + 0x21B52225, 0x8DDA331D, 0x796A0055, 0xD505116D, + 0xD361228F, 0x7F0E33B7, 0x8BBE00FF, 0x27D111C7, + 0x63DF676F, 0xCFB07657, 0x3B00451F, 0x976F5427, + 0x426A454A, 0xEE055472, 0x1AB5673A, 0xB6DA7602, + 0xF2D400AA, 0x5EBB1192, 0xAA0B22DA, 0x066433E2, + 0x57B5A81B, 0xFBDAB923, 0x0F6A8A6B, 0xA3059B53, + 0xE70BEDFB, 0x4B64FCC3, 0xBFD4CF8B, 0x13BBDEB3, + 0xC6BECFDE, 0x6AD1DEE6, 0x9E61EDAE, 0x320EFC96, + 0x76008A3E, 0xDA6F9B06, 0x2EDFA84E, 0x82B0B976, + 0x84D48A94, 0x28BB9BAC, 0xDC0BA8E4, 0x7064B9DC, + 0x346ACF74, 0x9805DE4C, 0x6CB5ED04, 0xC0DAFC3C, + 0x15DFED51, 0xB9B0FC69, 0x4D00CF21, 0xE16FDE19, + 0xA561A8B1, 0x090EB989, 0xFDBE8AC1, 0x51D19BF9, + 0xAE6A5137, 0x0205400F, 0xF6B57347, 0x5ADA627F, + 0x1ED414D7, 0xB2BB05EF, 0x460B36A7, 0xEA64279F, + 0x3F6136F2, 0x930E27CA, 0x67BE1482, 0xCBD105BA, + 0x8FDF7312, 0x23B0622A, 0xD7005162, 0x7B6F405A, + 0x7D0B73B8, 0xD1646280, 0x25D451C8, 0x89BB40F0, + 0xCDB53658, 0x61DA2760, 0x956A1428, 0x39050510, + 0xEC00147D, 0x406F0545, 0xB4DF360D, 0x18B02735, + 0x5CBE519D, 0xF0D140A5, 0x046173ED, 0xA80E62D5, + 0xF9DFF92C, 0x55B0E814, 0xA100DB5C, 0x0D6FCA64, + 0x4961BCCC, 0xE50EADF4, 0x11BE9EBC, 0xBDD18F84, + 0x68D49EE9, 0xC4BB8FD1, 0x300BBC99, 0x9C64ADA1, + 0xD86ADB09, 0x7405CA31, 0x80B5F979, 0x2CDAE841, + 0x2ABEDBA3, 0x86D1CA9B, 0x7261F9D3, 0xDE0EE8EB, + 0x9A009E43, 0x366F8F7B, 0xC2DFBC33, 0x6EB0AD0B, + 0xBBB5BC66, 0x17DAAD5E, 0xE36A9E16, 0x4F058F2E, + 0x0B0BF986, 0xA764E8BE, 0x53D4DBF6, 0xFFBBCACE, + 0x5CD5A26E, 0xF0BAB356, 0x040A801E, 0xA8659126, + 0xEC6BE78E, 0x4004F6B6, 0xB4B4C5FE, 0x18DBD4C6, + 0xCDDEC5AB, 0x61B1D493, 0x9501E7DB, 0x396EF6E3, + 0x7D60804B, 0xD10F9173, 0x25BFA23B, 0x89D0B303, + 0x8FB480E1, 0x23DB91D9, 0xD76BA291, 0x7B04B3A9, + 0x3F0AC501, 0x9365D439, 0x67D5E771, 0xCBBAF649, + 0x1EBFE724, 0xB2D0F61C, 0x4660C554, 0xEA0FD46C, + 0xAE01A2C4, 0x026EB3FC, 0xF6DE80B4, 0x5AB1918C, + 0x0B600A75, 0xA70F1B4D, 0x53BF2805, 0xFFD0393D, + 0xBBDE4F95, 0x17B15EAD, 0xE3016DE5, 0x4F6E7CDD, + 0x9A6B6DB0, 0x36047C88, 0xC2B44FC0, 0x6EDB5EF8, + 0x2AD52850, 0x86BA3968, 0x720A0A20, 0xDE651B18, + 0xD80128FA, 0x746E39C2, 0x80DE0A8A, 0x2CB11BB2, + 0x68BF6D1A, 0xC4D07C22, 0x30604F6A, 0x9C0F5E52, + 0x490A4F3F, 0xE5655E07, 0x11D56D4F, 0xBDBA7C77, + 0xF9B40ADF, 0x55DB1BE7, 0xA16B28AF, 0x0D043997, + 0xF2BFF359, 0x5ED0E261, 0xAA60D129, 0x060FC011, + 0x4201B6B9, 0xEE6EA781, 0x1ADE94C9, 0xB6B185F1, + 0x63B4949C, 0xCFDB85A4, 0x3B6BB6EC, 0x9704A7D4, + 0xD30AD17C, 0x7F65C044, 0x8BD5F30C, 0x27BAE234, + 0x21DED1D6, 0x8DB1C0EE, 0x7901F3A6, 0xD56EE29E, + 0x91609436, 0x3D0F850E, 0xC9BFB646, 0x65D0A77E, + 0xB0D5B613, 0x1CBAA72B, 0xE80A9463, 0x4465855B, + 0x006BF3F3, 0xAC04E2CB, 0x58B4D183, 0xF4DBC0BB, + 0xA50A5B42, 0x09654A7A, 0xFDD57932, 0x51BA680A, + 0x15B41EA2, 0xB9DB0F9A, 0x4D6B3CD2, 0xE1042DEA, + 0x34013C87, 0x986E2DBF, 0x6CDE1EF7, 0xC0B10FCF, + 0x84BF7967, 0x28D0685F, 0xDC605B17, 0x700F4A2F, + 0x766B79CD, 0xDA0468F5, 0x2EB45BBD, 0x82DB4A85, + 0xC6D53C2D, 0x6ABA2D15, 0x9E0A1E5D, 0x32650F65, + 0xE7601E08, 0x4B0F0F30, 0xBFBF3C78, 0x13D02D40, + 0x57DE5BE8, 0xFBB14AD0, 0x0F017998, 0xA36E68A0, + }, + { + 0x00000000, 0x196B30EF, 0xC3A08CDB, 0xDACBBC34, + 0x7737F5B2, 0x6E5CC55D, 0xB4977969, 0xADFC4986, + 0x1F180660, 0x0673368F, 0xDCB88ABB, 0xC5D3BA54, + 0x682FF3D2, 0x7144C33D, 0xAB8F7F09, 0xB2E44FE6, + 0x3E300CC0, 0x275B3C2F, 0xFD90801B, 0xE4FBB0F4, + 0x4907F972, 0x506CC99D, 0x8AA775A9, 0x93CC4546, + 0x21280AA0, 0x38433A4F, 0xE288867B, 0xFBE3B694, + 0x561FFF12, 0x4F74CFFD, 0x95BF73C9, 0x8CD44326, + 0x8D16F485, 0x947DC46A, 0x4EB6785E, 0x57DD48B1, + 0xFA210137, 0xE34A31D8, 0x39818DEC, 0x20EABD03, + 0x920EF2E5, 0x8B65C20A, 0x51AE7E3E, 0x48C54ED1, + 0xE5390757, 0xFC5237B8, 0x26998B8C, 0x3FF2BB63, + 0xB326F845, 0xAA4DC8AA, 0x7086749E, 0x69ED4471, + 0xC4110DF7, 0xDD7A3D18, 0x07B1812C, 0x1EDAB1C3, + 0xAC3EFE25, 0xB555CECA, 0x6F9E72FE, 0x76F54211, + 0xDB090B97, 0xC2623B78, 0x18A9874C, 0x01C2B7A3, + 0xEB5B040E, 0xF23034E1, 0x28FB88D5, 0x3190B83A, + 0x9C6CF1BC, 0x8507C153, 0x5FCC7D67, 0x46A74D88, + 0xF443026E, 0xED283281, 0x37E38EB5, 0x2E88BE5A, + 0x8374F7DC, 0x9A1FC733, 0x40D47B07, 0x59BF4BE8, + 0xD56B08CE, 0xCC003821, 0x16CB8415, 0x0FA0B4FA, + 0xA25CFD7C, 0xBB37CD93, 0x61FC71A7, 0x78974148, + 0xCA730EAE, 0xD3183E41, 0x09D38275, 0x10B8B29A, + 0xBD44FB1C, 0xA42FCBF3, 0x7EE477C7, 0x678F4728, + 0x664DF08B, 0x7F26C064, 0xA5ED7C50, 0xBC864CBF, + 0x117A0539, 0x081135D6, 0xD2DA89E2, 0xCBB1B90D, + 0x7955F6EB, 0x603EC604, 0xBAF57A30, 0xA39E4ADF, + 0x0E620359, 0x170933B6, 0xCDC28F82, 0xD4A9BF6D, + 0x587DFC4B, 0x4116CCA4, 0x9BDD7090, 0x82B6407F, + 0x2F4A09F9, 0x36213916, 0xECEA8522, 0xF581B5CD, + 0x4765FA2B, 0x5E0ECAC4, 0x84C576F0, 0x9DAE461F, + 0x30520F99, 0x29393F76, 0xF3F28342, 0xEA99B3AD, + 0xD6B7081C, 0xCFDC38F3, 0x151784C7, 0x0C7CB428, + 0xA180FDAE, 0xB8EBCD41, 0x62207175, 0x7B4B419A, + 0xC9AF0E7C, 0xD0C43E93, 0x0A0F82A7, 0x1364B248, + 0xBE98FBCE, 0xA7F3CB21, 0x7D387715, 0x645347FA, + 0xE88704DC, 0xF1EC3433, 0x2B278807, 0x324CB8E8, + 0x9FB0F16E, 0x86DBC181, 0x5C107DB5, 0x457B4D5A, + 0xF79F02BC, 0xEEF43253, 0x343F8E67, 0x2D54BE88, + 0x80A8F70E, 0x99C3C7E1, 0x43087BD5, 0x5A634B3A, + 0x5BA1FC99, 0x42CACC76, 0x98017042, 0x816A40AD, + 0x2C96092B, 0x35FD39C4, 0xEF3685F0, 0xF65DB51F, + 0x44B9FAF9, 0x5DD2CA16, 0x87197622, 0x9E7246CD, + 0x338E0F4B, 0x2AE53FA4, 0xF02E8390, 0xE945B37F, + 0x6591F059, 0x7CFAC0B6, 0xA6317C82, 0xBF5A4C6D, + 0x12A605EB, 0x0BCD3504, 0xD1068930, 0xC86DB9DF, + 0x7A89F639, 0x63E2C6D6, 0xB9297AE2, 0xA0424A0D, + 0x0DBE038B, 0x14D53364, 0xCE1E8F50, 0xD775BFBF, + 0x3DEC0C12, 0x24873CFD, 0xFE4C80C9, 0xE727B026, + 0x4ADBF9A0, 0x53B0C94F, 0x897B757B, 0x90104594, + 0x22F40A72, 0x3B9F3A9D, 0xE15486A9, 0xF83FB646, + 0x55C3FFC0, 0x4CA8CF2F, 0x9663731B, 0x8F0843F4, + 0x03DC00D2, 0x1AB7303D, 0xC07C8C09, 0xD917BCE6, + 0x74EBF560, 0x6D80C58F, 0xB74B79BB, 0xAE204954, + 0x1CC406B2, 0x05AF365D, 0xDF648A69, 0xC60FBA86, + 0x6BF3F300, 0x7298C3EF, 0xA8537FDB, 0xB1384F34, + 0xB0FAF897, 0xA991C878, 0x735A744C, 0x6A3144A3, + 0xC7CD0D25, 0xDEA63DCA, 0x046D81FE, 0x1D06B111, + 0xAFE2FEF7, 0xB689CE18, 0x6C42722C, 0x752942C3, + 0xD8D50B45, 0xC1BE3BAA, 0x1B75879E, 0x021EB771, + 0x8ECAF457, 0x97A1C4B8, 0x4D6A788C, 0x54014863, + 0xF9FD01E5, 0xE096310A, 0x3A5D8D3E, 0x2336BDD1, + 0x91D2F237, 0x88B9C2D8, 0x52727EEC, 0x4B194E03, + 0xE6E50785, 0xFF8E376A, 0x25458B5E, 0x3C2EBBB1, + }, + { + 0x00000000, 0xC82C0368, 0x905906D0, 0x587505B8, + 0xD1C5E0A5, 0x19E9E3CD, 0x419CE675, 0x89B0E51D, + 0x53FD2D4E, 0x9BD12E26, 0xC3A42B9E, 0x0B8828F6, + 0x8238CDEB, 0x4A14CE83, 0x1261CB3B, 0xDA4DC853, + 0xA6FA5B9C, 0x6ED658F4, 0x36A35D4C, 0xFE8F5E24, + 0x773FBB39, 0xBF13B851, 0xE766BDE9, 0x2F4ABE81, + 0xF50776D2, 0x3D2B75BA, 0x655E7002, 0xAD72736A, + 0x24C29677, 0xECEE951F, 0xB49B90A7, 0x7CB793CF, + 0xBD835B3D, 0x75AF5855, 0x2DDA5DED, 0xE5F65E85, + 0x6C46BB98, 0xA46AB8F0, 0xFC1FBD48, 0x3433BE20, + 0xEE7E7673, 0x2652751B, 0x7E2770A3, 0xB60B73CB, + 0x3FBB96D6, 0xF79795BE, 0xAFE29006, 0x67CE936E, + 0x1B7900A1, 0xD35503C9, 0x8B200671, 0x430C0519, + 0xCABCE004, 0x0290E36C, 0x5AE5E6D4, 0x92C9E5BC, + 0x48842DEF, 0x80A82E87, 0xD8DD2B3F, 0x10F12857, + 0x9941CD4A, 0x516DCE22, 0x0918CB9A, 0xC134C8F2, + 0x7A07B77A, 0xB22BB412, 0xEA5EB1AA, 0x2272B2C2, + 0xABC257DF, 0x63EE54B7, 0x3B9B510F, 0xF3B75267, + 0x29FA9A34, 0xE1D6995C, 0xB9A39CE4, 0x718F9F8C, + 0xF83F7A91, 0x301379F9, 0x68667C41, 0xA04A7F29, + 0xDCFDECE6, 0x14D1EF8E, 0x4CA4EA36, 0x8488E95E, + 0x0D380C43, 0xC5140F2B, 0x9D610A93, 0x554D09FB, + 0x8F00C1A8, 0x472CC2C0, 0x1F59C778, 0xD775C410, + 0x5EC5210D, 0x96E92265, 0xCE9C27DD, 0x06B024B5, + 0xC784EC47, 0x0FA8EF2F, 0x57DDEA97, 0x9FF1E9FF, + 0x16410CE2, 0xDE6D0F8A, 0x86180A32, 0x4E34095A, + 0x9479C109, 0x5C55C261, 0x0420C7D9, 0xCC0CC4B1, + 0x45BC21AC, 0x8D9022C4, 0xD5E5277C, 0x1DC92414, + 0x617EB7DB, 0xA952B4B3, 0xF127B10B, 0x390BB263, + 0xB0BB577E, 0x78975416, 0x20E251AE, 0xE8CE52C6, + 0x32839A95, 0xFAAF99FD, 0xA2DA9C45, 0x6AF69F2D, + 0xE3467A30, 0x2B6A7958, 0x731F7CE0, 0xBB337F88, + 0xF40E6EF5, 0x3C226D9D, 0x64576825, 0xAC7B6B4D, + 0x25CB8E50, 0xEDE78D38, 0xB5928880, 0x7DBE8BE8, + 0xA7F343BB, 0x6FDF40D3, 0x37AA456B, 0xFF864603, + 0x7636A31E, 0xBE1AA076, 0xE66FA5CE, 0x2E43A6A6, + 0x52F43569, 0x9AD83601, 0xC2AD33B9, 0x0A8130D1, + 0x8331D5CC, 0x4B1DD6A4, 0x1368D31C, 0xDB44D074, + 0x01091827, 0xC9251B4F, 0x91501EF7, 0x597C1D9F, + 0xD0CCF882, 0x18E0FBEA, 0x4095FE52, 0x88B9FD3A, + 0x498D35C8, 0x81A136A0, 0xD9D43318, 0x11F83070, + 0x9848D56D, 0x5064D605, 0x0811D3BD, 0xC03DD0D5, + 0x1A701886, 0xD25C1BEE, 0x8A291E56, 0x42051D3E, + 0xCBB5F823, 0x0399FB4B, 0x5BECFEF3, 0x93C0FD9B, + 0xEF776E54, 0x275B6D3C, 0x7F2E6884, 0xB7026BEC, + 0x3EB28EF1, 0xF69E8D99, 0xAEEB8821, 0x66C78B49, + 0xBC8A431A, 0x74A64072, 0x2CD345CA, 0xE4FF46A2, + 0x6D4FA3BF, 0xA563A0D7, 0xFD16A56F, 0x353AA607, + 0x8E09D98F, 0x4625DAE7, 0x1E50DF5F, 0xD67CDC37, + 0x5FCC392A, 0x97E03A42, 0xCF953FFA, 0x07B93C92, + 0xDDF4F4C1, 0x15D8F7A9, 0x4DADF211, 0x8581F179, + 0x0C311464, 0xC41D170C, 0x9C6812B4, 0x544411DC, + 0x28F38213, 0xE0DF817B, 0xB8AA84C3, 0x708687AB, + 0xF93662B6, 0x311A61DE, 0x696F6466, 0xA143670E, + 0x7B0EAF5D, 0xB322AC35, 0xEB57A98D, 0x237BAAE5, + 0xAACB4FF8, 0x62E74C90, 0x3A924928, 0xF2BE4A40, + 0x338A82B2, 0xFBA681DA, 0xA3D38462, 0x6BFF870A, + 0xE24F6217, 0x2A63617F, 0x721664C7, 0xBA3A67AF, + 0x6077AFFC, 0xA85BAC94, 0xF02EA92C, 0x3802AA44, + 0xB1B24F59, 0x799E4C31, 0x21EB4989, 0xE9C74AE1, + 0x9570D92E, 0x5D5CDA46, 0x0529DFFE, 0xCD05DC96, + 0x44B5398B, 0x8C993AE3, 0xD4EC3F5B, 0x1CC03C33, + 0xC68DF460, 0x0EA1F708, 0x56D4F2B0, 0x9EF8F1D8, + 0x174814C5, 0xDF6417AD, 0x87111215, 0x4F3D117D, + }, + { + 0x00000000, 0x277D3C49, 0x4EFA7892, 0x698744DB, + 0x6D821D21, 0x4AFF2168, 0x237865B3, 0x040559FA, + 0xDA043B42, 0xFD79070B, 0x94FE43D0, 0xB3837F99, + 0xB7862663, 0x90FB1A2A, 0xF97C5EF1, 0xDE0162B8, + 0xB4097684, 0x93744ACD, 0xFAF30E16, 0xDD8E325F, + 0xD98B6BA5, 0xFEF657EC, 0x97711337, 0xB00C2F7E, + 0x6E0D4DC6, 0x4970718F, 0x20F73554, 0x078A091D, + 0x038F50E7, 0x24F26CAE, 0x4D752875, 0x6A08143C, + 0x9965000D, 0xBE183C44, 0xD79F789F, 0xF0E244D6, + 0xF4E71D2C, 0xD39A2165, 0xBA1D65BE, 0x9D6059F7, + 0x43613B4F, 0x641C0706, 0x0D9B43DD, 0x2AE67F94, + 0x2EE3266E, 0x099E1A27, 0x60195EFC, 0x476462B5, + 0x2D6C7689, 0x0A114AC0, 0x63960E1B, 0x44EB3252, + 0x40EE6BA8, 0x679357E1, 0x0E14133A, 0x29692F73, + 0xF7684DCB, 0xD0157182, 0xB9923559, 0x9EEF0910, + 0x9AEA50EA, 0xBD976CA3, 0xD4102878, 0xF36D1431, + 0x32CB001A, 0x15B63C53, 0x7C317888, 0x5B4C44C1, + 0x5F491D3B, 0x78342172, 0x11B365A9, 0x36CE59E0, + 0xE8CF3B58, 0xCFB20711, 0xA63543CA, 0x81487F83, + 0x854D2679, 0xA2301A30, 0xCBB75EEB, 0xECCA62A2, + 0x86C2769E, 0xA1BF4AD7, 0xC8380E0C, 0xEF453245, + 0xEB406BBF, 0xCC3D57F6, 0xA5BA132D, 0x82C72F64, + 0x5CC64DDC, 0x7BBB7195, 0x123C354E, 0x35410907, + 0x314450FD, 0x16396CB4, 0x7FBE286F, 0x58C31426, + 0xABAE0017, 0x8CD33C5E, 0xE5547885, 0xC22944CC, + 0xC62C1D36, 0xE151217F, 0x88D665A4, 0xAFAB59ED, + 0x71AA3B55, 0x56D7071C, 0x3F5043C7, 0x182D7F8E, + 0x1C282674, 0x3B551A3D, 0x52D25EE6, 0x75AF62AF, + 0x1FA77693, 0x38DA4ADA, 0x515D0E01, 0x76203248, + 0x72256BB2, 0x555857FB, 0x3CDF1320, 0x1BA22F69, + 0xC5A34DD1, 0xE2DE7198, 0x8B593543, 0xAC24090A, + 0xA82150F0, 0x8F5C6CB9, 0xE6DB2862, 0xC1A6142B, + 0x64960134, 0x43EB3D7D, 0x2A6C79A6, 0x0D1145EF, + 0x09141C15, 0x2E69205C, 0x47EE6487, 0x609358CE, + 0xBE923A76, 0x99EF063F, 0xF06842E4, 0xD7157EAD, + 0xD3102757, 0xF46D1B1E, 0x9DEA5FC5, 0xBA97638C, + 0xD09F77B0, 0xF7E24BF9, 0x9E650F22, 0xB918336B, + 0xBD1D6A91, 0x9A6056D8, 0xF3E71203, 0xD49A2E4A, + 0x0A9B4CF2, 0x2DE670BB, 0x44613460, 0x631C0829, + 0x671951D3, 0x40646D9A, 0x29E32941, 0x0E9E1508, + 0xFDF30139, 0xDA8E3D70, 0xB30979AB, 0x947445E2, + 0x90711C18, 0xB70C2051, 0xDE8B648A, 0xF9F658C3, + 0x27F73A7B, 0x008A0632, 0x690D42E9, 0x4E707EA0, + 0x4A75275A, 0x6D081B13, 0x048F5FC8, 0x23F26381, + 0x49FA77BD, 0x6E874BF4, 0x07000F2F, 0x207D3366, + 0x24786A9C, 0x030556D5, 0x6A82120E, 0x4DFF2E47, + 0x93FE4CFF, 0xB48370B6, 0xDD04346D, 0xFA790824, + 0xFE7C51DE, 0xD9016D97, 0xB086294C, 0x97FB1505, + 0x565D012E, 0x71203D67, 0x18A779BC, 0x3FDA45F5, + 0x3BDF1C0F, 0x1CA22046, 0x7525649D, 0x525858D4, + 0x8C593A6C, 0xAB240625, 0xC2A342FE, 0xE5DE7EB7, + 0xE1DB274D, 0xC6A61B04, 0xAF215FDF, 0x885C6396, + 0xE25477AA, 0xC5294BE3, 0xACAE0F38, 0x8BD33371, + 0x8FD66A8B, 0xA8AB56C2, 0xC12C1219, 0xE6512E50, + 0x38504CE8, 0x1F2D70A1, 0x76AA347A, 0x51D70833, + 0x55D251C9, 0x72AF6D80, 0x1B28295B, 0x3C551512, + 0xCF380123, 0xE8453D6A, 0x81C279B1, 0xA6BF45F8, + 0xA2BA1C02, 0x85C7204B, 0xEC406490, 0xCB3D58D9, + 0x153C3A61, 0x32410628, 0x5BC642F3, 0x7CBB7EBA, + 0x78BE2740, 0x5FC31B09, 0x36445FD2, 0x1139639B, + 0x7B3177A7, 0x5C4C4BEE, 0x35CB0F35, 0x12B6337C, + 0x16B36A86, 0x31CE56CF, 0x58491214, 0x7F342E5D, + 0xA1354CE5, 0x864870AC, 0xEFCF3477, 0xC8B2083E, + 0xCCB751C4, 0xEBCA6D8D, 0x824D2956, 0xA530151F + } +#endif /* WORDS_BIGENDIAN */ +}; + +/* Accumulate one input byte */ +#ifdef WORDS_BIGENDIAN +#define CRC8(x) crc32c_table[0][((crc >> 24) ^ (x)) & 0xFF] ^ (crc << 8) +#else +#define CRC8(x) crc32c_table[0][(crc ^ (x)) & 0xFF] ^ (crc >> 8) +#endif + +uint32 +comp_crc32c_sb8(uint32 crc, const void *data, size_t len) +{ + const unsigned char *p = (const unsigned char *)data; + const uint32 *p4; + + /* + * Handle 0-3 initial bytes one at a time, so that the loop below starts + * with a pointer aligned to four bytes. + */ + while (len > 0 && ((uintptr_t) p & 3)) + { + crc = CRC8(*p++); + len--; + } + + /* + * Process eight bytes of data at a time. + */ + p4 = (const uint32 *) p; + while (len >= 8) + { + uint32 a = *p4++ ^ crc; + uint32 b = *p4++; + +#ifdef WORDS_BIGENDIAN + const uint8 c0 = b; + const uint8 c1 = b >> 8; + const uint8 c2 = b >> 16; + const uint8 c3 = b >> 24; + const uint8 c4 = a; + const uint8 c5 = a >> 8; + const uint8 c6 = a >> 16; + const uint8 c7 = a >> 24; +#else + const uint8 c0 = b >> 24; + const uint8 c1 = b >> 16; + const uint8 c2 = b >> 8; + const uint8 c3 = b; + const uint8 c4 = a >> 24; + const uint8 c5 = a >> 16; + const uint8 c6 = a >> 8; + const uint8 c7 = a; +#endif + + crc = + crc32c_table[0][c0] ^ crc32c_table[1][c1] ^ + crc32c_table[2][c2] ^ crc32c_table[3][c3] ^ + crc32c_table[4][c4] ^ crc32c_table[5][c5] ^ + crc32c_table[6][c6] ^ crc32c_table[7][c7]; + + len -= 8; + } + + /* + * Handle any remaining bytes one at a time. + */ + p = (const unsigned char *) p4; + while (len > 0) + { + crc = CRC8(*p++); + len--; + } + + return crc; +} + +/* + * error handle + */ +#ifdef __cplusplus +extern "C" { +#endif + +static thread_local ICError ic_error = {LEVEL_ERROR}; + +ICError* +GetLastError() +{ + return &ic_error; +} + +void +ResetLastError() +{ + ic_error.level = LEVEL_OK; +} + +void +SetLastError(ErrorLevel level, const char *msg) +{ + ic_error.level = level; + strncpy(ic_error.msg, msg, sizeof(ic_error.msg) - 1); + ic_error.msg[sizeof(ic_error.msg) - 1] = 0; +} + +#ifdef __cplusplus +} // extern "C" +#endif \ No newline at end of file diff --git a/contrib/udp2/ic_common/ic_utility.hpp b/contrib/udp2/ic_common/ic_utility.hpp new file mode 100644 index 00000000000..169c7b3cc18 --- /dev/null +++ b/contrib/udp2/ic_common/ic_utility.hpp @@ -0,0 +1,165 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_utility.hpp + * + * IDENTIFICATION + * contrib/udp2/ic_common/ic_utility.hpp + * + *------------------------------------------------------------------------- + */ +#ifndef IC_UTILITY_HPP +#define IC_UTILITY_HPP + +#include +#include +#include +#include + +#include +#include +#include + +/* Define this if you want tons of logs! */ +#undef AMS_VERBOSE_LOGGING + +#ifndef NDEBUG +#define USE_ASSERT_CHECKING 1 +#endif + +#define Assert(p) assert(p) +#define closesocket close + +#define IC_DEBUG5 10 +#define IC_DEBUG4 11 +#define IC_DEBUG3 12 +#define IC_DEBUG2 13 +#define IC_DEBUG1 14 +#define IC_LOG 15 +#define IC_WARNING 19 + +/* tupchunk.h */ +#define ANY_ROUTE -100 + +/* cdbvars.h */ +#define DEFAULT_PACKET_SIZE 8192 +#define MIN_PACKET_SIZE 512 +#define MAX_PACKET_SIZE 65507 /* Max payload for IPv4/UDP (subtract 20 more for IPv6 without extensions) */ +#define UNDEF_SEGMENT -2 + +/* c.h */ +#define Max(x, y) ((x) > (y) ? (x) : (y)) +#define Min(x, y) ((x) < (y) ? (x) : (y)) + +/* cdbinterconnect.h */ +#define CTS_INITIAL_SIZE (10) + +/* pg_list.h */ +#define NIL ((List *) NULL) + +/* transam.h */ +#define InvalidTransactionId (0) + +#define INVALID_SOCKET (-1) + +/* + * CONTAINER_OF + */ +#define CONTAINER_OF(ptr, type, member) \ + ( \ + reinterpret_cast(reinterpret_cast(ptr) - offsetof(type, member)) \ + ) + + +typedef enum GpVars_Verbosity_IC +{ + GPVARS_VERBOSITY_UNDEFINED_IC = 0, + GPVARS_VERBOSITY_OFF_IC, + GPVARS_VERBOSITY_TERSE_IC, + GPVARS_VERBOSITY_VERBOSE_IC, + GPVARS_VERBOSITY_DEBUG_IC, +} GpVars_Verbosity_IC; + +typedef enum GpVars_Interconnect_Method_IC +{ + INTERCONNECT_FC_METHOD_CAPACITY_IC = 0, + INTERCONNECT_FC_METHOD_LOSS_IC = 2, +} GpVars_Interconnect_Method_IC; + +typedef enum +{ + GP_ROLE_UNDEFINED_IC = 0, /* Should never see this role in use */ + GP_ROLE_UTILITY_IC, /* Operating as a simple database engine */ + GP_ROLE_DISPATCH_IC, /* Operating as the parallel query dispatcher */ + GP_ROLE_EXECUTE_IC, /* Operating as a parallel query executor */ +} GpRoleValue_IC; + +typedef enum GpVars_Interconnect_Address_Type_IC +{ + INTERCONNECT_ADDRESS_TYPE_UNICAST_IC = 0, + INTERCONNECT_ADDRESS_TYPE_WILDCARD_IC +} GpVars_Interconnect_Address_Type_IC; + + +/* + * global_param and session_param; + */ +extern GlobalMotionLayerIPCParam global_param; +extern SessionMotionLayerIPCParam session_param; + +/* + * logger stuff + */ +#define DEFAULT_LOG_LEVEL INFO +extern const char * SeverityName[9]; + +enum LogSeverity { + FATAL, LOG_ERROR, WARNING, INFO, DEBUG1, DEBUG2, DEBUG3, DEBUG4, DEBUG5 +}; + +class Logger; + +class Logger { +public: + Logger(); + + ~Logger(); + + void setOutputFd(int f); + + void setLogSeverity(LogSeverity l); + + void printf(LogSeverity s, const char * fmt, ...) __attribute__((format(printf, 3, 4))); + +private: + int fd; + std::atomic severity; +}; + +extern Logger RootLogger; + +#define LOG(s, fmt, ...) \ + RootLogger.printf(s, fmt, ##__VA_ARGS__) + +/* + * crc32 + */ +extern uint32 ComputeCRC(const void *data, size_t len); + +#endif // IC_UTILITY_HPP \ No newline at end of file diff --git a/contrib/udp2/ic_common/udp2/ic_udp2.cpp b/contrib/udp2/ic_common/udp2/ic_udp2.cpp new file mode 100644 index 00000000000..c09ea4e8434 --- /dev/null +++ b/contrib/udp2/ic_common/udp2/ic_udp2.cpp @@ -0,0 +1,6939 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_udp2.cpp + * + * IDENTIFICATION + * contrib/udp2/ic_common/udp2/ic_udp2.cpp + * + * +--------------+ + * | ic_types.h | + * +--------------+ + * / \ + * +--------------+ +---------------+ + * | C interface | | C++ interface | + * | ic_udp2.h | | ic_udp2.hpp | + * +--------------+ +---------------+ + * \ / + * +----------------------+ + * | C++ implement | + * | ic_udp2_internal.hpp| + * | ic_faultinjection.h | + * | ic_udp2.cpp | + * +----------------------+ + *------------------------------------------------------------------------- + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * interface header files + */ +#ifdef __cplusplus +extern "C" { +#endif + +#include "ic_types.h" +#include "ic_udp2.h" + +#ifdef __cplusplus +} +#endif + +#include "ic_udp2.hpp" + +/* + * internal header files + */ +#include "ic_utility.hpp" +#include "ic_udp2_internal.hpp" +#include "ic_faultinjection.h" + +static int timeoutArray[] = +{ + 1, + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 512 /* MAX_TRY */ +}; + +/* + * Main thread (Receiver) and background thread use the information in + * this data structure to handle data packets. + */ +static ReceiveControlInfo rx_control_info; + +/* + * The buffer pool used for keeping data packets. + * + * maxCount is set to 1 to make sure there is always a buffer + * for picking packets from OS buffer. + */ +static RxBufferPool rx_buffer_pool = {1, 0, NULL}; + +/* + * The sender side buffer pool. + */ +static SendBufferPool snd_buffer_pool; + +/* + * Main thread use the information in this data structure to do ack handling + * and congestion control. + */ +static SendControlInfo snd_control_info; + +/* + * Shared control information that is used by senders, receivers and background thread. + */ +static ICGlobalControlInfo ic_control_info; + +/* + * All connections in a process share this unack queue ring instance. + */ +static UnackQueueRing unack_queue_ring = {0, 0, 0}; + +static int ICSenderSocket = -1; +static int32 ICSenderPort = 0; +static int ICSenderFamily = 0; + +/* Statistics for UDP interconnect. */ +static ICStatistics ic_statistics; + +/* Cached sockaddr of the listening udp socket */ +static struct sockaddr_storage udp_dummy_packet_sockaddr; + +/* UDP listen fd */ +static int UDP_listenerFd = -1; + +/* UDP listen port */ +static int32 udp_listener_port = 0; + +static std::mutex mtx; +static std::condition_variable cv; + +CChunkTransportState *CChunkTransportStateImpl::state_ = nullptr; + +/* + * Identity the user of ic module by vector_engine_is_user: + * "false" means PG executor, "true" means Arrow executor. + */ +static thread_local bool vector_engine_is_user = false; +static thread_local bool thread_quit = false; + +#define CHECK_QUIT_FLAG() \ + do { \ + if (thread_quit) { \ + throw ICException("received thread quit flag.", __FILE__, __LINE__); \ + } \ + } while(0) + +#define CHECK_INTERRUPTS(state) \ + do { \ + if (vector_engine_is_user) { \ + CHECK_QUIT_FLAG(); \ + } else if (global_param.checkInterruptsCallback) { \ + global_param.checkInterruptsCallback((state)->teardownActive); \ + } \ + } while(0) + +#define CHECK_CANCEL(state) \ + do { \ + if (vector_engine_is_user) { \ + CHECK_QUIT_FLAG(); \ + } else if (global_param.checkCancelOnQDCallback) { \ + global_param.checkCancelOnQDCallback(state); \ + } \ + } while(0) + +#define CHECK_POSTMASTER_ALIVE() \ + do { \ + if (vector_engine_is_user) { \ + CHECK_QUIT_FLAG(); \ + } else if (global_param.checkPostmasterIsAliveCallback && !global_param.checkPostmasterIsAliveCallback()) { \ + throw ICFatalException("FATAL, interconnect failed to send chunks, Postmaster is not alive.", __FILE__, __LINE__); \ + } \ + } while(0) + +/*========================================================================= + * STATIC FUNCTIONS declarations + */ + +/* Background thread error handling functions. */ +static void checkRxThreadError(void); +static void setRxThreadError(int eno); +static void resetRxThreadError(void); + +static uint32 setUDPSocketBufferSize(int ic_socket, int buffer_type); +static void setupOutgoingUDPConnection(int icid, TransportEntry *pChunkEntry, UDPConn *conn); + +/* ICBufferList functions. */ +static inline void icBufferListInitHeadLink(ICBufferLink *link); + +static inline void InitMotionUDPIFC(int *listenerSocketFd, int32 *listenerPort); +static inline void CleanupMotionUDPIFC(void); + +static bool dispatcherAYT(void); +static void checkQDConnectionAlive(void); + +static void *rxThreadFunc(void *arg); + +static void putIntoUnackQueueRing(UnackQueueRing *uqr, ICBuffer *buf, uint64 expTime, uint64 now); + +static bool cacheFuturePacket(icpkthdr *pkt, struct sockaddr_storage *peer, int peer_len); +static void cleanupStartupCache(void); +static void handleCachedPackets(void); + +static uint64 getCurrentTime(void); +static void initMutex(pthread_mutex_t *mutex); + +static inline void logPkt(const char *prefix, icpkthdr *pkt); + +static void ConvertToIPv4MappedAddr(struct sockaddr_storage *sockaddr, socklen_t *o_len); +#if defined(__darwin__) +#define s6_addr32 __u6_addr.__u6_addr32 +static void ConvertIPv6WildcardToLoopback(struct sockaddr_storage* dest); +#endif + +static void setupUDPListeningSocket(int *listenerSocketFd, int32 *listenerPort, + int *txFamily, struct sockaddr_storage *listenerSockaddr); +static void getSockAddr(struct sockaddr_storage *peer, socklen_t *peer_len, const char *listenerAddr, int listenerPort); +static void SendDummyPacket(void); +static bool handleDataPacket(UDPConn *conn, icpkthdr *pkt, struct sockaddr_storage *peer, socklen_t *peerlen, AckSendParam *param, bool *wakeup_mainthread); +static bool handleMismatch(icpkthdr *pkt, struct sockaddr_storage *peer, int peer_len); +static void initUnackQueueRing(UnackQueueRing *uqr); + +static ssize_t sendtoWithRetry(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len, int retry, const char *errDetail); + +static char *format_sockaddr_udp(struct sockaddr_storage *sa, char *buf, size_t len); + +static char* flags2txt(uint32 pkt_flags); + +static const char* flags_text[] = + {"recv2send", "ack", "stop", "eos", "nak", "disorder", "duplicate", "capacity"}; + +static char* +flags2txt(uint32 pkt_flags) +{ + thread_local static char flags[64]; + + char *p = flags; + *p = '\0'; + int bytes = 0; + for (size_t i = 0; i < sizeof(flags_text)/sizeof(flags_text[0]); ++i) { + if (pkt_flags & (1 << i)) + bytes += snprintf(p + bytes, 64, "%s | ", flags_text[i]); + } + + if (bytes > 0) + bytes -= 3; + *(p + bytes) = '\0'; + + return flags; +} + +/* + * CursorICHistoryTable::prune + * Prune entries in the hash table. + */ +void +CursorICHistoryTable::prune(uint32 icId) { + for (uint32 index = 0; index < size; index++) { + CursorICHistoryEntry *p = table[index], *q = NULL; + while (p) { + /* remove an entry if it is older than the prune-point */ + if (p->icId < icId) { + if (!q) + table[index] = p->next; + else + q->next = p->next; + + /* set up next loop */ + CursorICHistoryEntry *trash = p; + p = trash->next; + ic_free(trash); + + count--; + } else { + q = p; + p = p->next; + } + } + } +} + +#ifdef TRANSFER_PROTOCOL_STATS +typedef enum TransProtoEvent +{ + TPE_DATA_PKT_SEND, + TPE_ACK_PKT_QUERY +} TransProtoEvent; + +typedef struct TransProtoStatEntry TransProtoStatEntry; +struct TransProtoStatEntry +{ + TransProtoStatEntry *next; + + /* Basic information */ + uint32 time; + TransProtoEvent event; + int dstPid; + uint32 seq; + + /* more attributes can be added on demand. */ + + /* + * float cwnd; + * int capacity; + */ +}; + +typedef struct TransProtoStats TransProtoStats; +struct TransProtoStats +{ + std::mutex lock; + TransProtoStatEntry *head; + TransProtoStatEntry *tail; + uint64 count; + uint64 startTime; + + void init(); + void update(TransProtoEvent event, icpkthdr *pkt); + void dump(); +}; + +static TransProtoStats trans_proto_stats = +{ + {}, NULL, NULL, 0 +}; + +/* + * init + * Initialize the transport protocol states data structures. + */ +void +TransProtoStats::init() +{ + std::lock_guard guard(this->lock); + + while (this->head) { + TransProtoStatEntry *cur = this->head; + this->head = this->head->next; + ic_free(cur); + this->count--; + } + + this->head = NULL; + this->tail = NULL; + this->count = 0; + this->startTime = getCurrentTime(); +} + +void +TransProtoStats::update(TransProtoEvent event, icpkthdr *pkt) +{ + /* Add to list */ + TransProtoStatEntry *entry = (TransProtoStatEntry *) ic_malloc(sizeof(TransProtoStatEntry)); + if (!entry) + return; + + memset(entry, 0, sizeof(*entry)); + + /* change the list */ + std::lock_guard guard(this->lock); + if (this->count == 0) { + /* 1st element */ + this->head = entry; + this->tail = entry; + } else { + this->tail->next = entry; + this->tail = entry; + } + this->count++; + + entry->time = getCurrentTime() - this->startTime; + entry->event = event; + entry->dstPid = pkt->dstPid; + entry->seq = pkt->seq; + + /* + * Other attributes can be added on demand new->cwnd = + * snd_control_info.cwnd; new->capacity = conn->capacity; + */ +} + +void +TransProtoStats::dump() +{ + char tmpbuf[32]; + + snprintf(tmpbuf, 32, "%d.%lu.txt", global_param.MyProcPid, getCurrentTime()); + FILE *ofile = fopen(tmpbuf, "w+"); + + std::lock_guard guard(this->lock); + while (this->head) + { + TransProtoStatEntry *cur = NULL; + + cur = this->head; + this->head = this->head->next; + + fprintf(ofile, "time %d event %d seq %d destpid %d\n", cur->time, cur->event, cur->seq, cur->dstPid); + ic_free(cur); + this->count--; + } + + this->tail = NULL; + fclose(ofile); +} + +#endif /* TRANSFER_PROTOCOL_STATS */ + +/* + * initConnHashTable + * Initialize a connection hash table. + */ +bool +ConnHashTable::init() +{ + this->size = global_param.Gp_role == GP_ROLE_DISPATCH_IC ? + (global_param.segment_number * 2) : global_param.ic_htab_size; + Assert(this->size > 0); + + this->table = (struct ConnHtabBin **) ic_malloc(this->size * sizeof(struct ConnHtabBin *)); + if (this->table == NULL) + return false; + + for (int i = 0; i < this->size; i++) + this->table[i] = NULL; + + return true; +} + +/* + * connAddHash + * Add a connection to the hash table + * + * Note: we want to add a connection to the hashtable if it isn't + * already there ... so we just have to check the pointer values -- no + * need to use CONN_HASH_MATCH() at all! + */ +bool +ConnHashTable::add(UDPConn *conn) +{ + uint32 hashcode = CONN_HASH_VALUE(&conn->conn_info) % this->size; + + /* + * check for collision -- if we already have an entry for this connection, + * don't add another one. + */ + for (struct ConnHtabBin *bin = this->table[hashcode]; bin != NULL; bin = bin->next) + { + if (bin->conn == conn) + { + LOG(DEBUG5, "ConnHashTable::add(): duplicate ?! node %d route %d", conn->conn_info.motNodeId, conn->route); + return true; /* false *only* indicates memory-alloc + * failure. */ + } + } + + struct ConnHtabBin *newbin = (struct ConnHtabBin *) ic_malloc(sizeof(struct ConnHtabBin)); + if (newbin == NULL) + return false; + + newbin->conn = conn; + newbin->next = this->table[hashcode]; + this->table[hashcode] = newbin; + + ic_statistics.activeConnectionsNum++; + + return true; +} + +/* + * remove + * Delete a connection from the hash table + * + * Note: we want to remove a connection from the hashtable if it is + * there ... so we just have to check the pointer values -- no need to + * use CONN_HASH_MATCH() at all! + */ +void +ConnHashTable::remove(UDPConn *conn) +{ + uint32 hashcode; + struct ConnHtabBin *c, + *p, + *trash; + + hashcode = CONN_HASH_VALUE(&conn->conn_info) % this->size; + + c = this->table[hashcode]; + + /* find entry */ + p = NULL; + while (c != NULL) + { + /* found ? */ + if (c->conn == conn) + break; + + p = c; + c = c->next; + } + + /* not found ? */ + if (c == NULL) + { + return; + } + + /* found the connection, remove from the chain. */ + trash = c; + + if (p == NULL) + this->table[hashcode] = c->next; + else + p->next = c->next; + + ic_free(trash); + + ic_statistics.activeConnectionsNum--; + + return; +} + +/* + * findConnByHeader + * Find the corresponding connection given a pkt header information. + * + * With the new mirroring scheme, the interconnect is no longer involved: + * we don't have to disambiguate anymore. + * + * NOTE: the icpkthdr field dstListenerPort is used for disambiguation. + * on receivers it may not match the actual port (it may have an extra bit + * set (1<<31)). + */ +UDPConn * +ConnHashTable::find(icpkthdr *hdr) { + + uint32 hashcode = CONN_HASH_VALUE(hdr) % this->size; + for (struct ConnHtabBin *bin = this->table[hashcode]; bin != NULL; bin = bin->next) { + UDPConn *conn = bin->conn; + + if (CONN_HASH_MATCH(&conn->conn_info, hdr)) { + UDPConn *ret = conn; + if (IC_DEBUG5 >= session_param.log_min_messages) + LOG(DEBUG5, "ConnHashTable::find: found. route %d state %d hashcode %d conn %p", + conn->route, ret->state, hashcode, ret); + + return ret; + } + } + + if (IC_DEBUG5 >= session_param.log_min_messages) + LOG(DEBUG5, "ConnHashTable::find: not found! (hdr->srcPid %d hdr->srcContentId %d " + "hdr->dstContentId %d hdr->dstPid %d sess(%d:%d) cmd(%d:%d)) hashcode %d", + hdr->srcPid, hdr->srcContentId, hdr->dstContentId, hdr->dstPid, hdr->sessionId, + session_param.gp_session_id, hdr->icId, ic_control_info.ic_instance_id, hashcode); + + return NULL; +} + +void +ConnHashTable::destroy() { + for (int i = 0; i < this->size; i++) { + while (this->table[i] != NULL) { + struct ConnHtabBin *trash = this->table[i]; + this->table[i] = trash->next; + ic_free(trash); + } + } + + ic_free(this->table); + this->table = NULL; + this->size = 0; +} + +/* + * icBufferListInitHeadLink + * Initialize the pointers in the head link to point to itself. + */ +static inline void +icBufferListInitHeadLink(ICBufferLink *link) +{ + link->next = link->prev = link; +} + + +#if defined(USE_ASSERT_CHECKING) || defined(AMS_VERBOSE_LOGGING) + +/* + * icBufferListLog + * Log the buffer list. + */ +void +ICBufferList::icBufferListLog() +{ + LOG(INFO, "Length %d, type %d headptr %p", this->len, this->type, &this->head); + + ICBufferLink *bufLink = this->head.next; + + int len = this->len; + int i = 0; + + while (bufLink != &this->head && len > 0) + { + ICBuffer *buf = (this->type == ICBufferListType_Primary ? GET_ICBUFFER_FROM_PRIMARY(bufLink) + : GET_ICBUFFER_FROM_SECONDARY(bufLink)); + + LOG(INFO, "Node %d, linkptr %p", i++, bufLink); + + logPkt("from list", buf->pkt); + bufLink = bufLink->next; + len--; + } +} +#endif + +#ifdef USE_ASSERT_CHECKING +/* + * icBufferListCheck + * Buffer list sanity check. + */ +void +ICBufferList::icBufferListCheck(const char *prefix) +{ + int len = this->len; + ICBufferLink *link = this->head.next; + + if (len < 0) + { + LOG(LOG_ERROR, "ICBufferList ERROR %s: list length %d < 0 ", prefix, this->length()); + goto error; + } + + if (len == 0 && (this->head.prev != this->head.next && this->head.prev != &this->head)) + { + LOG(LOG_ERROR, "ICBufferList ERROR %s: length is 0, &list->head %p, prev %p, next %p", + prefix, &this->head, this->head.prev, this->head.next); + this->icBufferListLog(); + goto error; + } + + while (len > 0) + { + link = link->next; + len--; + } + + if (link != &this->head) + { + LOG(LOG_ERROR, "ICBufferList ERROR: %s len %d", prefix, this->len); + this->icBufferListLog(); + goto error; + } + + return; + +error: + LOG(INFO, "wait for 120s and then abort."); + ic_usleep(120000000); + abort(); +} +#endif + +/* + * ICBufferList::init + * Initialize the buffer list with the given type. + */ +void +ICBufferList::init(ICBufferListType atype) +{ + Assert(atype == ICBufferListType_Primary|| atype == ICBufferListType_Secondary); + + type = atype; + len = 0; + + icBufferListInitHeadLink(&head); + +#ifdef USE_ASSERT_CHECKING + this->icBufferListCheck("ICBufferList::init"); +#endif +} + +/* + * ICBufferList::is_head + * Return whether the given link is the head link of the list. + * + * This function is often used as the end condition of an iteration of the list. + */ +bool +ICBufferList::is_head(ICBufferLink *link) +{ +#ifdef USE_ASSERT_CHECKING + this->icBufferListCheck("ICBufferList::is_head"); +#endif + return (link == &head); +} + +/* + * ICBufferList::first + * Return the first link after the head link. + * + * Note that the head link is a pseudo link used to only to ease the operations of the link list. + * If the list only contains the head link, this function will return the head link. + */ +ICBufferLink * +ICBufferList::first() +{ +#ifdef USE_ASSERT_CHECKING + this->icBufferListCheck("ICBufferList::first"); +#endif + return head.next; +} + +/* + * ICBufferList::length + * Get the list length. + */ +int +ICBufferList::length() +{ + return len; +} + +/* + * ICBufferList::delete + * Remove an buffer from the buffer list and return the buffer. + */ +ICBuffer * +ICBufferList::remove(ICBuffer *buf) +{ +#ifdef USE_ASSERT_CHECKING + this->icBufferListCheck("ICBufferList::delete"); +#endif + + ICBufferLink *bufLink = NULL; + + bufLink = (this->type == ICBufferListType_Primary ? &buf->primary : &buf->secondary); + + bufLink->prev->next = bufLink->next; + bufLink->next->prev = bufLink->prev; + + len--; + + return buf; +} + +/* + * ICBufferList::pop + * Remove the head buffer from the list. + */ +ICBuffer * +ICBufferList::pop() +{ + ICBuffer *buf = NULL; + ICBufferLink *bufLink = NULL; + +#ifdef USE_ASSERT_CHECKING + this->icBufferListCheck("ICBufferList::pop"); +#endif + + if (this->len == 0) + return NULL; + + bufLink = this->first(); + buf = (this->type == ICBufferListType_Primary ? GET_ICBUFFER_FROM_PRIMARY(bufLink) + : GET_ICBUFFER_FROM_SECONDARY(bufLink)); + + bufLink->prev->next = bufLink->next; + bufLink->next->prev = bufLink->prev; + + this->len--; + + return buf; +} + +/* + * ICBufferList::free + * Free all the buffers in the list. + */ +void +ICBufferList::destroy() +{ + ICBuffer *buf = NULL; + +#ifdef USE_ASSERT_CHECKING + this->icBufferListCheck("ICBufferList::free"); +#endif + + while ((buf = this->pop()) != NULL) + ic_free(buf); +} + +/* + * ICBufferList::append + * Append a buffer to the tail of a double-link list. + */ +ICBuffer * +ICBufferList::append(ICBuffer *buf) +{ + Assert(buf); + +#ifdef USE_ASSERT_CHECKING + this->icBufferListCheck("ICBufferList::append"); +#endif + + ICBufferLink *bufLink = NULL; + + bufLink = (this->type == ICBufferListType_Primary ? &buf->primary : &buf->secondary); + + bufLink->prev = this->head.prev; + bufLink->next = &this->head; + + this->head.prev->next = bufLink; + this->head.prev = bufLink; + + this->len++; + + return buf; +} + +/* + * ICBufferList::return + * Return the buffers in the list to the free buffer list. + * + * If the buf is also in an expiration queue, we also need to remove it from the expiration queue. + * + */ +void +ICBufferList::release(bool inExpirationQueue) +{ +#ifdef USE_ASSERT_CHECKING + this->icBufferListCheck("ICBufferList::return"); +#endif + ICBuffer *buf = NULL; + + while ((buf = this->pop()) != NULL) + { + if (inExpirationQueue) /* the buf is in also in the expiration queue */ + { + ICBufferList *alist = &unack_queue_ring.slots[buf->unackQueueRingSlot]; + buf = alist->remove(buf); + unack_queue_ring.numOutStanding--; + if (this->length() >= 1) + unack_queue_ring.numSharedOutStanding--; + } + + snd_buffer_pool.freeList.append(buf); + } +} + +#ifdef USE_ASSERT_CHECKING +/* + * ICBufferList::dump_to_file + * Dump a buffer list. + */ +void +ICBufferList::dump_to_file(FILE *ofile) +{ + this->icBufferListCheck("ICBufferList::dump_to_file"); + + ICBufferLink *bufLink = this->head.next; + + int len = this->len; + int i = 0; + + fprintf(ofile, "List Length %d\n", len); + while (bufLink != &this->head && len > 0) + { + ICBuffer *buf = (this->type == ICBufferListType_Primary ? GET_ICBUFFER_FROM_PRIMARY(bufLink) + : GET_ICBUFFER_FROM_SECONDARY(bufLink)); + + fprintf(ofile, "Node %d, linkptr %p ", i++, bufLink); + fprintf(ofile, "Packet Content [%s: seq %d extraSeq %d]: motNodeId %d, crc %d len %d " + "srcContentId %d dstDesContentId %d " + "srcPid %d dstPid %d " + "srcListenerPort %d dstListernerPort %d " + "sendSliceIndex %d recvSliceIndex %d " + "sessionId %d icId %d " + "flags %d\n", + buf->pkt->flags & UDPIC_FLAGS_RECEIVER_TO_SENDER ? "ACK" : "DATA", + buf->pkt->seq, buf->pkt->extraSeq, buf->pkt->motNodeId, buf->pkt->crc, buf->pkt->len, + buf->pkt->srcContentId, buf->pkt->dstContentId, + buf->pkt->srcPid, buf->pkt->dstPid, + buf->pkt->srcListenerPort, buf->pkt->dstListenerPort, + buf->pkt->sendSliceIndex, buf->pkt->recvSliceIndex, + buf->pkt->sessionId, buf->pkt->icId, + buf->pkt->flags); + bufLink = bufLink->next; + len--; + } +} +#endif + +/* + * initUnackQueueRing + * Initialize an unack queue ring. + * + * Align current time to a slot boundary and set current slot index (time pointer) to 0. + */ +static void +initUnackQueueRing(UnackQueueRing *uqr) +{ + int i = 0; + + uqr->currentTime = 0; + uqr->idx = 0; + uqr->numOutStanding = 0; + uqr->numSharedOutStanding = 0; + + for (; i < UNACK_QUEUE_RING_SLOTS_NUM; i++) + { + uqr->slots[i].init(ICBufferListType_Secondary); + } +} + +/* + * RxBufferPool::get + * Get a receive buffer. + * + * SHOULD BE CALLED WITH ic_control_info.lock *LOCKED* + * + * NOTE: This function MUST NOT contain elog or ereport statements. + * elog is NOT thread-safe. Developers should instead use something like: + * + * NOTE: In threads, we cannot use palloc/pfree, because it's not thread safe. + */ +icpkthdr * +RxBufferPool::get() +{ + icpkthdr *ret = NULL; + +#ifdef USE_ASSERT_CHECKING + if (FINC_HAS_FAULT(FINC_RX_BUF_NULL) && + testmode_inject_fault(session_param.gp_udpic_fault_inject_percent)) + return NULL; +#endif + + do + { + if (this->freeList == NULL) + { + if (this->count > this->maxCount) + { + if (IC_DEBUG3 >= session_param.log_min_messages) + LOG(DEBUG3, "Interconnect ran out of rx-buffers count/max %d/%d", this->count, this->maxCount); + break; + } + + /* malloc is used for thread safty. */ + ret = (icpkthdr *) ic_malloc(global_param.Gp_max_packet_size); + + /* + * Note: we return NULL if the malloc() fails -- and the + * background thread will set the error. Main thread will check + * the error, report it and start teardown. + */ + if (ret != NULL) + this->count++; + + break; + } + + /* we have buffers available in our freelist */ + ret = this->get_free(); + + } while (0); + + return ret; +} + +/* + * RxBufferPool::put + * Return a receive buffer to free list + * + * SHOULD BE CALLED WITH ic_control_info.lock *LOCKED* + */ +void +RxBufferPool::put(icpkthdr *buf) +{ + /* return the buffer into the free list. */ + *(char **) buf = this->freeList; + this->freeList = (char *)buf; +} + +/* + * RxBufferPool::get_free + * Get a receive buffer from free list + * + * SHOULD BE CALLED WITH ic_control_info.lock *LOCKED* + * + * NOTE: This function MUST NOT contain elog or ereport statements. + * elog is NOT thread-safe. Developers should instead use something like: + * + * NOTE: In threads, we cannot use palloc/pfree, because it's not thread safe. + */ +icpkthdr * +RxBufferPool::get_free() +{ + icpkthdr *buf = NULL; + + buf = (icpkthdr *) this->freeList; + this->freeList = *(char **) (this->freeList); + return buf; +} + +/* + * RxBufferPool::free + * Free a receive buffer. + * + * NOTE: This function MUST NOT contain elog or ereport statements. + * elog is NOT thread-safe. Developers should instead use something like: + * + * NOTE: In threads, we cannot use palloc/pfree, because it's not thread safe. + */ +void +RxBufferPool::release(icpkthdr *buf) +{ + ic_free(buf); + count--; +} + +/* + * init + * Initialize the send buffer pool. + * + * The initial maxCount is set to 1 for gp_interconnect_snd_queue_depth = 1 case, + * then there is at least an extra free buffer to send for that case. + */ +void +SendBufferPool::init() +{ + this->freeList.init(ICBufferListType_Primary); + this->count = 0; + this->maxCount = (session_param.Gp_interconnect_snd_queue_depth == 1 ? 1 : 0); +} + +/* + * clean + * Clean the send buffer pool. + */ +void +SendBufferPool::clean() +{ + this->freeList.destroy(); + this->count = 0; + this->maxCount = 0; +} + +/* + * get + * Get a send buffer for a connection. + * + * Different flow control mechanisms use different buffer management policies. + * Capacity based flow control uses per-connection buffer policy and Loss based + * flow control uses shared buffer policy. + * + * Return NULL when no free buffer available. + */ +ICBuffer * +SendBufferPool::get(UDPConn *conn) +{ + ICBuffer *ret = NULL; + + ic_statistics.totalBuffers += (this->freeList.length() + this->maxCount - this->count); + ic_statistics.bufferCountingTime++; + + /* Capacity based flow control does not use shared buffers */ + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_CAPACITY_IC) + { + Assert(conn->unackQueue.length() + conn->sndQueue.length() <= session_param.Gp_interconnect_snd_queue_depth); + if (conn->unackQueue.length() + conn->sndQueue.length() >= session_param.Gp_interconnect_snd_queue_depth) + return NULL; + } + + if (this->freeList.length() > 0) + { + return this->freeList.pop(); + } + else + { + if (this->count < this->maxCount) + { + ret = (ICBuffer *) ic_malloc0(global_param.Gp_max_packet_size + sizeof(ICBuffer)); + this->count++; + ret->conn = NULL; + ret->nRetry = 0; + icBufferListInitHeadLink(&ret->primary); + icBufferListInitHeadLink(&ret->secondary); + ret->unackQueueRingSlot = 0; + } + else + { + return NULL; + } + } + + return ret; +} + +/* + * addCRC + * add CRC field to the packet. + */ +static void +addCRC(icpkthdr *pkt) +{ + pkt->crc = ComputeCRC(pkt, pkt->len); +} + +/* + * checkCRC + * check the validity of the packet. + */ +static bool +checkCRC(icpkthdr *pkt) +{ + uint32 rx_crc, + local_crc; + + rx_crc = pkt->crc; + pkt->crc = 0; + local_crc = ComputeCRC(pkt, pkt->len); + if (rx_crc != local_crc) + { + return false; + } + + return true; +} + + +/* + * checkRxThreadError + * Check whether there was error in the background thread in main thread. + * + * If error found, report it. + */ +static void +checkRxThreadError() +{ + int eno; + + eno = ic_atomic_read_u32(&ic_control_info.eno); + if (eno != 0) + { + errno = eno; + + std::stringstream ss; + ss <<"ERROR, interconnect encountered an error, in receive background thread: "<= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG3, "UDP-IC: setsockopt %s failed to set buffer size = %d bytes: %m", + buffer_type == SO_SNDBUF ? "send": "receive", + curr_size); + + curr_size = curr_size >> 1; + if (curr_size < UDPIC_MIN_BUF_SIZE) + return -1; + } + + if(session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG3, "UDP-IC: socket %s current buffer size = %d bytes", + buffer_type == SO_SNDBUF ? "send": "receive", + curr_size); + + return curr_size; +} + + +/* + * setupUDPListeningSocket + * Setup udp listening socket. + */ +static void +setupUDPListeningSocket(int *listenerSocketFd, int32 *listenerPort, int *txFamily, struct sockaddr_storage *listenerSockaddr) +{ + struct addrinfo *addrs = NULL; + struct addrinfo *addr; + struct addrinfo hints; + int ret; + int ic_socket = INVALID_SOCKET; + struct sockaddr_storage ic_socket_addr; + int tries = 0; + struct sockaddr_storage listenerAddr; + socklen_t listenerAddrlen = sizeof(ic_socket_addr); + uint32 socketSendBufferSize; + uint32 socketRecvBufferSize; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ + hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ + hints.ai_protocol = 0; + hints.ai_addrlen = 0; + hints.ai_addr = NULL; + hints.ai_canonname = NULL; + hints.ai_next = NULL; + hints.ai_flags |= AI_NUMERICHOST; + +#ifdef USE_ASSERT_CHECKING + if (session_param.gp_udpic_network_disable_ipv6) + hints.ai_family = AF_INET; +#endif + + if (global_param.Gp_interconnect_address_type == INTERCONNECT_ADDRESS_TYPE_UNICAST_IC) + { + Assert(global_param.interconnect_address && strlen(global_param.interconnect_address) > 0); + hints.ai_flags |= AI_NUMERICHOST; + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG3, "getaddrinfo called with unicast address: %s", global_param.interconnect_address); + } + else + { + Assert(global_param.interconnect_address == NULL); + hints.ai_flags |= AI_PASSIVE; + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG3, "getaddrinfo called with wildcard address"); + } + + /* + * Restrict what IP address we will listen on to just the one that was + * used to create this QE session. + */ + Assert(global_param.interconnect_address && strlen(global_param.interconnect_address) > 0); + ret = getaddrinfo((!global_param.interconnect_address || global_param.interconnect_address[0] == '\0') ? NULL : global_param.interconnect_address, + NULL, &hints, &addrs); + if (ret || !addrs) + { + LOG(INFO, "could not resolve address for UDP IC socket %s: %s", + global_param.interconnect_address, + gai_strerror(ret)); + goto startup_failed; + } + + /* + * On some platforms, pg_getaddrinfo_all() may return multiple addresses + * only one of which will actually work (eg, both IPv6 and IPv4 addresses + * when kernel will reject IPv6). Worse, the failure may occur at the + * bind() or perhaps even connect() stage. So we must loop through the + * results till we find a working combination. We will generate DEBUG + * messages, but no error, for bogus combinations. + */ + for (addr = addrs; addr != NULL; addr = addr->ai_next) + { +#ifdef HAVE_UNIX_SOCKETS + /* Ignore AF_UNIX sockets, if any are returned. */ + if (addr->ai_family == AF_UNIX) + continue; +#endif + + if (++tries > 1 && session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG3, "trying another address for UDP interconnect socket"); + + ic_socket = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol); + if (ic_socket == INVALID_SOCKET) + { + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG3, "could not create UDP interconnect socket: %m"); + continue; + } + + /* + * Bind the socket to a kernel assigned ephemeral port on the + * interconnect_address. + */ + if (bind(ic_socket, addr->ai_addr, addr->ai_addrlen) < 0) + { + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG3, "could not bind UDP interconnect socket: %m"); + closesocket(ic_socket); + ic_socket = INVALID_SOCKET; + continue; + } + + /* Call getsockname() to eventually obtain the assigned ephemeral port */ + if (getsockname(ic_socket, (struct sockaddr *) &listenerAddr, &listenerAddrlen) < 0) + { + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG3, "could not get address of UDP interconnect socket: %m"); + closesocket(ic_socket); + ic_socket = INVALID_SOCKET; + continue; + } + + /* If we get here, we have a working socket */ + break; + } + + if (!addr || ic_socket == INVALID_SOCKET) + goto startup_failed; + + /* Memorize the socket fd, kernel assigned port and address family */ + *listenerSocketFd = ic_socket; + if (listenerAddr.ss_family == AF_INET6) + { + *listenerPort = ntohs(((struct sockaddr_in6 *) &listenerAddr)->sin6_port); + *txFamily = AF_INET6; + } + else + { + *listenerPort = ntohs(((struct sockaddr_in *) &listenerAddr)->sin_port); + *txFamily = AF_INET; + } + + /* + * cache the successful sockaddr of the listening socket, so + * we can use this information to connect to the listening socket. + */ + if (listenerSockaddr != NULL) + memcpy(listenerSockaddr, &listenerAddr, sizeof(struct sockaddr_storage)); + + /* Set up socket non-blocking mode */ + if (!ic_set_noblock(ic_socket)) + { + LOG(INFO, "could not set UDP interconnect socket to nonblocking mode: %s", strerror(errno)); + goto startup_failed; + } + + /* Set up the socket's send and receive buffer sizes. */ + socketRecvBufferSize = setUDPSocketBufferSize(ic_socket, SO_RCVBUF); + if (socketRecvBufferSize == static_cast(-1)) + goto startup_failed; + ic_control_info.socketRecvBufferSize = socketRecvBufferSize; + + socketSendBufferSize = setUDPSocketBufferSize(ic_socket, SO_SNDBUF); + if (socketSendBufferSize == static_cast(-1)) + goto startup_failed; + ic_control_info.socketSendBufferSize = socketSendBufferSize; + + if (addrs != NULL) + freeaddrinfo(addrs); + return; + +startup_failed: + if (addrs) + freeaddrinfo(addrs); + if (ic_socket != INVALID_SOCKET) + { + closesocket(ic_socket); + } + + std::stringstream ss; + ss << "ERROR,interconnect error: Could not set up udp listener socket: " << strerror(errno); + throw ICNetworkException(ss.str(), __FILE__, __LINE__); +} + +/* + * InitMutex + * Initialize mutex. + */ +static void +initMutex(pthread_mutex_t *mutex) +{ + pthread_mutexattr_t m_atts; + + pthread_mutexattr_init(&m_atts); + pthread_mutexattr_settype(&m_atts, PTHREAD_MUTEX_ERRORCHECK); + + pthread_mutex_init(mutex, &m_atts); +} + +/* + * Set up the udp interconnect pthread signal mask, we don't want to run our signal handlers + */ +static void +ic_set_pthread_sigmasks(sigset_t *old_sigs) +{ +#ifndef WIN32 + sigset_t sigs; + int err; + + sigfillset(&sigs); + + err = pthread_sigmask(SIG_BLOCK, &sigs, old_sigs); + if (err != 0) + { + std::stringstream ss; + ss << "ERROR: Failed to get pthread signal masks with return value: "<= 0) + closesocket(ICSenderSocket); + ICSenderSocket = -1; + ICSenderPort = 0; + ICSenderFamily = 0; + + memset(&udp_dummy_packet_sockaddr, 0, sizeof(udp_dummy_packet_sockaddr)); + +#ifdef USE_ASSERT_CHECKING + + /* + * Check malloc times, in Interconnect part, memory are carefully released + * in tear down code (even when error occurred). But if a FATAL error is + * reported, tear down code will not be executed. Thus, it is still + * possible the malloc times and free times do not match when we reach + * here. The process will die in this case, the mismatch does not + * introduce issues. + */ + if (icudp_malloc_times != 0) + LOG(INFO, "WARNING: malloc times and free times do not match. remain alloc times: %ld", icudp_malloc_times); +#endif +} + +/* + * getSockAddr + * Convert IP addr and port to sockaddr + */ +static void +getSockAddr(struct sockaddr_storage *peer, socklen_t *peer_len, const char *listenerAddr, int listenerPort) +{ + int ret; + char portNumberStr[32]; + char *service; + struct addrinfo *addrs = NULL; + struct addrinfo hint; + + /* + * Get socketaddr to connect to. + */ + + /* Initialize hint structure */ + memset(&hint, 0, sizeof(hint)); + hint.ai_socktype = SOCK_DGRAM; /* UDP */ + hint.ai_family = AF_UNSPEC; /* Allow for any family (v4, v6, even unix in + * the future) */ +#ifdef AI_NUMERICSERV + hint.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV; /* Never do name + * resolution */ +#else + hint.ai_flags = AI_NUMERICHOST; /* Never do name resolution */ +#endif + + snprintf(portNumberStr, sizeof(portNumberStr), "%d", listenerPort); + service = portNumberStr; + + addrs = NULL; + /* NULL has special meaning to getaddrinfo(). */ + ret = getaddrinfo((!listenerAddr || listenerAddr[0] == '\0') ? NULL : listenerAddr, + service, &hint, &addrs); + if (ret || !addrs) + { + if (addrs) + freeaddrinfo(addrs); + + std::stringstream ss; + ss<<"ERROR, interconnect error: Could not parse remote listener address: '"<ai_family, addrs->ai_socktype, addrs->ai_protocol, listenerAddr); + memset(peer, 0, sizeof(struct sockaddr_storage)); + memcpy(peer, addrs->ai_addr, addrs->ai_addrlen); + *peer_len = addrs->ai_addrlen; + + if (addrs) + freeaddrinfo(addrs); +} + +/* + * format_sockaddr + * Format a sockaddr to a human readable string + * + * This function must be kept threadsafe, elog/ereport/palloc etc are not + * allowed within this function. + */ +static char * +format_sockaddr_udp(struct sockaddr_storage *sa, char *buf, size_t len) +{ + int ret; + char remote_host[NI_MAXHOST]; + char remote_port[NI_MAXSERV]; + + ret = getnameinfo((const struct sockaddr *)sa, sizeof(struct sockaddr_storage), + remote_host, sizeof(remote_host), + remote_port, sizeof(remote_port), + NI_NUMERICHOST | NI_NUMERICSERV); + if (ret != 0) + { + strncpy(remote_host, "???", sizeof(remote_host)); + strncpy(remote_port, "???", sizeof(remote_port)); + } + + if (ret != 0) + snprintf(buf, len, "?host?:?port?"); + else + { +#ifdef HAVE_IPV6 + if (sa->ss_family == AF_INET6) + snprintf(buf, len, "[%s]:%s", remote_host, remote_port); + else +#endif + snprintf(buf, len, "%s:%s", remote_host, remote_port); + } + + return buf; +} + +/* + * setupOutgoingUDPConnection + * Setup outgoing UDP connection. + */ +static void +setupOutgoingUDPConnection(int icid, TransportEntry *pEntry, UDPConn *conn) +{ + ICCdbProcess *cdbProc = NULL; + + Assert(pEntry); + + cdbProc = conn->cdbProc; + Assert(conn->state == mcsSetupOutgoingConnection); + Assert(conn->cdbProc); + + conn->remoteContentId = cdbProc->contentid; + conn->stat_min_ack_time = ~((uint64) 0); + + /* Save the information for the error message if getaddrinfo fails */ + if (strchr(cdbProc->listenerAddr, ':') != 0) + snprintf(conn->remoteHostAndPort, sizeof(conn->remoteHostAndPort), + "[%s]:%d", cdbProc->listenerAddr, cdbProc->listenerPort); + else + snprintf(conn->remoteHostAndPort, sizeof(conn->remoteHostAndPort), + "%s:%d", cdbProc->listenerAddr, cdbProc->listenerPort); + + /* + * Get socketaddr to connect to. + */ + getSockAddr(&conn->peer, &conn->peer_len, cdbProc->listenerAddr, cdbProc->listenerPort); + + /* Save the destination IP address */ + format_sockaddr_udp(&conn->peer, conn->remoteHostAndPort, + sizeof(conn->remoteHostAndPort)); + + Assert(conn->peer.ss_family == AF_INET || conn->peer.ss_family == AF_INET6); + + { +#ifdef USE_ASSERT_CHECKING + { + struct sockaddr_storage source_addr; + socklen_t source_addr_len; + + memset(&source_addr, 0, sizeof(source_addr)); + source_addr_len = sizeof(source_addr); + + if (getsockname(pEntry->txfd, (struct sockaddr *) &source_addr, &source_addr_len) == -1) + { + throw ICNetworkException(std::string("ERROR, interconnect Error: Could not get port from socket, %m")+strerror(errno), __FILE__, __LINE__); + } + Assert(pEntry->txfd_family == source_addr.ss_family); + } +#endif + + /* + * If the socket was created with a different address family than the + * place we are sending to, we might need to do something special. + */ + if (pEntry->txfd_family != conn->peer.ss_family) + { + /* + * If the socket was created AF_INET6, but the address we want to + * send to is IPv4 (AF_INET), we might need to change the address + * format. On Linux, it isn't necessary: glibc automatically + * handles this. But on MAC OSX and Solaris, we need to convert + * the IPv4 address to an V4-MAPPED address in AF_INET6 format. + */ + if (pEntry->txfd_family == AF_INET6) + { + LOG(DEBUG1, "We are inet6, remote is inet. Converting to v4 mapped address."); + ConvertToIPv4MappedAddr(&conn->peer, &conn->peer_len); + } + else + { + /* + * If we get here, something is really wrong. We created the + * socket as IPv4-only (AF_INET), but the address we are + * trying to send to is IPv6. It's possible we could have a + * V4-mapped address that we could convert to an IPv4 address, + * but there is currently no code path where that could + * happen. So this must be an error. + */ + throw ICNetworkException("ERROR: Trying to use an IPv4 (AF_INET) socket to send to an IPv6 address", __FILE__, __LINE__); + } + } + } + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "Interconnect connecting to seg%d slice%d %s pid=%d sockfd=%d", + conn->remoteContentId, pEntry->recvSlice->sliceIndex, conn->remoteHostAndPort, conn->cdbProc->pid, conn->sockfd); + + /* send connection request */ + memset(&conn->conn_info, 0, sizeof(conn->conn_info)); + conn->conn_info.len = 0; + conn->conn_info.flags = 0; + conn->conn_info.motNodeId = pEntry->motNodeId; + + conn->conn_info.recvSliceIndex = pEntry->recvSlice->sliceIndex; + conn->conn_info.sendSliceIndex = pEntry->sendSlice->sliceIndex; + conn->conn_info.srcContentId = global_param.segindex; + conn->conn_info.dstContentId = conn->cdbProc->contentid; + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "setupOutgoingUDPConnection: node %d route %d srccontent %d dstcontent %d: %s", + pEntry->motNodeId, conn->route, global_param.segindex, conn->cdbProc->contentid, conn->remoteHostAndPort); + + conn->conn_info.srcListenerPort = UDP2_GetListenPortUDP(); + conn->conn_info.srcPid = global_param.MyProcPid; + conn->conn_info.dstPid = conn->cdbProc->pid; + conn->conn_info.dstListenerPort = conn->cdbProc->listenerPort; + + conn->conn_info.sessionId = session_param.gp_session_id; + conn->conn_info.icId = icid; + + ic_control_info.connHtab.add(conn); + + /* + * No need to get the connection lock here, since background rx thread + * will never access send connections. + */ + conn->msgPos = NULL; + conn->msgSize = sizeof(conn->conn_info); + conn->stillActive = true; + conn->conn_info.seq = 1; + Assert(conn->peer.ss_family == AF_INET || conn->peer.ss_family == AF_INET6); +} + +/* + * If the socket was created AF_INET6, but the address we want to + * send to is IPv4 (AF_INET), we need to change the address + * format. On Linux, this is not necessary: glibc automatically + * handles this. But on MAC OSX and Solaris, we need to convert + * the IPv4 address to IPv4-mapped IPv6 address in AF_INET6 format. + * + * The comment above relies on getaddrinfo() via function getSockAddr to get + * the correct V4-mapped address. We need to be careful here as we need to + * ensure that the platform we are using is POSIX 1003-2001 compliant. + * Just to be on the safeside, we'll be keeping this function for + * now to be used for all platforms and not rely on POSIX. + * + * Since this can be called in a signal handler, we avoid the use of + * async-signal unsafe functions such as memset/memcpy + */ +static void +ConvertToIPv4MappedAddr(struct sockaddr_storage *sockaddr, socklen_t *o_len) +{ + const struct sockaddr_in *in = (const struct sockaddr_in *)sockaddr; + struct sockaddr_storage temp = {0}; + struct sockaddr_in6 *in6_new = (struct sockaddr_in6 *)&temp; + + /* Construct a IPv4-to-IPv6 mapped address. */ + temp.ss_family = AF_INET6; + in6_new->sin6_family = AF_INET6; + in6_new->sin6_port = in->sin_port; + in6_new->sin6_flowinfo = 0; + + ((uint16 *)&in6_new->sin6_addr)[5] = 0xffff; + + in6_new->sin6_addr.s6_addr32[3] = in->sin_addr.s_addr; + in6_new->sin6_scope_id = 0; + + /* copy it back */ + *sockaddr = temp; + *o_len = sizeof(struct sockaddr_in6); +} + +#if defined(__darwin__) +/* macos does not accept :: as the destination, we will need to covert this to the IPv6 loopback */ +static void +ConvertIPv6WildcardToLoopback(struct sockaddr_storage *dest) +{ + char address[INET6_ADDRSTRLEN]; + /* we want to terminate our own process, so this should be local */ + const struct sockaddr_in6 *in6 = (const struct sockaddr_in6 *)&udp_dummy_packet_sockaddr; + inet_ntop(AF_INET6, &in6->sin6_addr, address, sizeof(address)); + if (strcmp("::", address) == 0) + ((struct sockaddr_in6 *)dest)->sin6_addr = in6addr_loopback; +} +#endif + +/* + * handleCachedPackets + * Deal with cached packets. + */ +static void +handleCachedPackets(void) +{ + UDPConn *cachedConn = NULL; + UDPConn *setupConn = NULL; + ConnHtabBin *bin = NULL; + icpkthdr *pkt = NULL; + AckSendParam param; + int i = 0; + uint32 j = 0; + bool dummy; + + for (i = 0; i < ic_control_info.startupCacheHtab.size; i++) + { + bin = ic_control_info.startupCacheHtab.table[i]; + + while (bin) + { + cachedConn = bin->conn; + setupConn = NULL; + + for (j = 0; j < cachedConn->pkt_q_size; j++) + { + pkt = (icpkthdr *) cachedConn->pkt_q[j]; + + if (pkt == NULL) + continue; + + rx_buffer_pool.maxCount--; + + /* look up this pkt's connection in connHtab */ + setupConn = ic_control_info.connHtab.find(pkt); + if (setupConn == NULL) + { + /* mismatch! */ + rx_buffer_pool.put(pkt); + cachedConn->pkt_q[j] = NULL; + continue; + } + + memset(¶m, 0, sizeof(param)); + if (!handleDataPacket(setupConn, pkt, &cachedConn->peer, &cachedConn->peer_len, ¶m, &dummy)) + { + /* no need to cache this packet */ + rx_buffer_pool.put(pkt); + } + + ic_statistics.recvPktNum++; + if (param.msg.len != 0) + UDPConn::sendAckWithParam(¶m); + + cachedConn->pkt_q[j] = NULL; + } + bin = bin->next; + ic_control_info.startupCacheHtab.remove(cachedConn); + + /* + * MPP-19981 free the cached connections; otherwise memory leak + * would be introduced. + */ + ic_free(cachedConn->pkt_q); + delete cachedConn; + } + } +} + +/* + * CChunkTransportStateImpl::setup + * Internal function for setting up UDP interconnect. + */ +ICChunkTransportState* +CChunkTransportStateImpl::setup(ICSliceTable *sliceTable) +{ + pthread_mutex_lock(&ic_control_info.lock); + + Assert(sliceTable->ic_instance_id > 0); + + if (global_param.Gp_role == GP_ROLE_DISPATCH_IC) + { + /* + * QD use cursorHistoryTable to handle mismatch packets, no + * need to update ic_control_info.ic_instance_id + */ + Assert(session_param.gp_interconnect_id == sliceTable->ic_instance_id); + } + else + { + /* + * update ic_control_info.ic_instance_id, it is mainly used + * by rx thread to handle mismatch packets + */ + ic_control_info.ic_instance_id = sliceTable->ic_instance_id; + } + + CChunkTransportStateImpl *state_impl = new CChunkTransportStateImpl(sliceTable); + ICChunkTransportState *interconnect_context = static_cast(state_impl); + CChunkTransportStateImpl::state_ = static_cast(state_impl); + +#ifdef USE_ASSERT_CHECKING + ICExecSlice *mySlice = &interconnect_context->sliceTable->slices[sliceTable->localSlice]; + Assert(mySlice && mySlice->sliceIndex == sliceTable->localSlice); +#endif + +#ifdef USE_ASSERT_CHECKING + set_test_mode(); +#endif + + if (global_param.Gp_role == GP_ROLE_DISPATCH_IC) + { + CursorICHistoryTable *ich_table = &rx_control_info.cursorHistoryTable; + //DistributedTransactionId distTransId = getDistributedTransactionId(); TODO: add callback; + DistributedTransactionId distTransId = InvalidTransactionId; + + if (ich_table->count > (2 * ich_table->size)) + { + /* + * distTransId != lastDXatId + * Means the last transaction is finished, it's ok to make a prune. + */ + if (distTransId != rx_control_info.lastDXatId) + { + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "prune cursor history table (count %d), icid %d, prune_id %d", + ich_table->count, sliceTable->ic_instance_id, sliceTable->ic_instance_id); + ich_table->prune(sliceTable->ic_instance_id); + } + /* + * distTransId == lastDXatId and they are not InvalidTransactionId(0) + * Means current (non Read-Only) transaction isn't finished, should not prune. + */ + else if (rx_control_info.lastDXatId != InvalidTransactionId) + { + ; + } + /* + * distTransId == lastDXatId and they are InvalidTransactionId(0) + * Means they are the same transaction or different Read-Only transactions. + * + * For the latter, it's hard to get a perfect timepoint to prune: prune eagerly may + * cause problems (pruned current Txn's Ic instances), but prune in low frequency + * causes memory leak. + * + * So, we choose a simple algorithm to prune it here. And if it mistakenly prune out + * the still-in-used Ic instance (with lower id), the query may hang forever. + * Then user have to set a bigger gp_interconnect_cursor_ic_table_size value and + * try the query again, it is a workaround. + * + * More backgrounds please see: https://github.com/greenplum-db/gpdb/pull/16458 + */ + else + { + if (sliceTable->ic_instance_id > ich_table->size) + { + uint32 prune_id = sliceTable->ic_instance_id - ich_table->size; + Assert(prune_id < sliceTable->ic_instance_id); + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "prune cursor history table (count %d), icid %d, prune_id %d", + ich_table->count, sliceTable->ic_instance_id, prune_id); + ich_table->prune(prune_id); + } + } + } + + ich_table->add(sliceTable->ic_instance_id, session_param.gp_command_count); + /* save the latest transaction id */ + rx_control_info.lastDXatId = distTransId; + } + + /* Initiate receiving connections. */ + state_impl->CreateRecvEntries(sliceTable); + + /* Initiate outgoing connections. */ + state_impl->CreateSendEntries(sliceTable); + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "SetupUDPInterconnect will activate Listening on ports=%d/%d sockfd=%d.", 0, UDP2_GetListenPortUDP(), UDP_listenerFd); + + /* + * If there are packets cached by background thread, add them to the + * connections. + */ + if (session_param.gp_interconnect_cache_future_packets) + handleCachedPackets(); + + interconnect_context->activated = true; + + pthread_mutex_unlock(&ic_control_info.lock); + + return interconnect_context; +} + +/* + * sendControlMessage + * Helper function to send a control message. + */ +void +UDPConn::sendControlMessage(icpkthdr *pkt, int fd, struct sockaddr *addr, socklen_t peerLen) +{ + int n; + +#ifdef USE_ASSERT_CHECKING + if (testmode_inject_fault(session_param.gp_udpic_dropacks_percent)) + { +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "THROW CONTROL MESSAGE with seq %d extraSeq %d srcpid %d despid %d", pkt->seq, pkt->extraSeq, pkt->srcPid, pkt->dstPid); +#endif + return; + } +#endif + + /* Add CRC for the control message. */ + if (session_param.gp_interconnect_full_crc) + addCRC(pkt); + + /* retry 10 times for sending control message */ + int counter = 0; + while (counter < 10) + { + counter++; + n = sendto(fd, (const char *)pkt, pkt->len, 0, addr, peerLen); + if (n < 0) + { + if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) + continue; + else + { + LOG(INFO, "sendcontrolmessage: got errno %d", errno); + return; + } + } + break; + } + if (n < int(pkt->len)) + LOG(INFO, "sendcontrolmessage: got error %d errno %d seq %d", n, errno, pkt->seq); +} + +/* + * setAckParam + * Set the ack sending parameters. + */ +void +UDPConn::setAckParam(AckSendParam *param, int32 flags, uint32 seq, uint32 extraSeq) +{ + memcpy(¶m->msg, (char *) &this->conn_info, sizeof(icpkthdr)); + param->msg.flags = flags; + param->msg.seq = seq; + param->msg.extraSeq = extraSeq; + param->msg.len = sizeof(icpkthdr); + param->peer = this->peer; + param->peer_len = this->peer_len; +} + +/* + * sendAckWithParam + * Send acknowledgment to sender. + */ +void +UDPConn::sendAckWithParam(AckSendParam *param) +{ + sendControlMessage(¶m->msg, UDP_listenerFd, (struct sockaddr *) ¶m->peer, param->peer_len); +} + +/* + * sendAck + * Send acknowledgment to sender. + */ +void +UDPConn::sendAck(int32 flags, uint32 seq, uint32 extraSeq) +{ + icpkthdr msg; + + memcpy(&msg, (char *) &this->conn_info, sizeof(msg)); + msg.flags = flags; + msg.seq = seq; + msg.extraSeq = extraSeq; + msg.len = sizeof(icpkthdr); + + LOG(DEBUG1, "sendack: node %d route %d seq %d extraSeq %d, flags %s", msg.motNodeId, this->route, msg.seq, msg.extraSeq, flags2txt(msg.flags)); + + sendControlMessage(&msg, UDP_listenerFd, (struct sockaddr *) &this->peer, this->peer_len); +} + +/* + * sendDisorderAck + * Send a disorder message to the sender. + * + * Whenever the receiver detects a disorder packet, it will assemble a disorder message + * which contains the sequence numbers of the possibly lost packets. + * + */ +void +UDPConn::sendDisorderAck(uint32 seq, uint32 extraSeq, uint32 lostPktCnt) +{ + icpkthdr *disorderBuffer = rx_control_info.disorderBuffer; + + memcpy(disorderBuffer, (char *) &this->conn_info, sizeof(icpkthdr)); + + disorderBuffer->flags |= UDPIC_FLAGS_DISORDER; + disorderBuffer->seq = seq; + disorderBuffer->extraSeq = extraSeq; + disorderBuffer->len = lostPktCnt * sizeof(uint32) + sizeof(icpkthdr); + +#ifdef AMS_VERBOSE_LOGGING + if (!(this->peer.ss_family == AF_INET || this->peer.ss_family == AF_INET6)) + { + LOG(INFO, "UDP Interconnect bug (in sendDisorderAck): trying to send ack when we don't know where to send to %s", this->remoteHostAndPort); + } +#endif + + sendControlMessage(disorderBuffer, UDP_listenerFd, (struct sockaddr *) &this->peer, this->peer_len); +} + +/* + * sendStatusQueryMessage + * Used by senders to send a status query message for a connection to receivers. + * + * When receivers get such a message, they will respond with + * the connection status (consumed seq, received seq ...). + */ +void +UDPConn::sendStatusQueryMessage(uint32 seq) +{ + icpkthdr msg; + + memcpy(&msg, (char *) &this->conn_info, sizeof(msg)); + msg.flags = UDPIC_FLAGS_CAPACITY; + msg.seq = seq; + msg.extraSeq = 0; + msg.len = sizeof(msg); + +#ifdef TRANSFER_PROTOCOL_STATS + trans_proto_stats.update(TPE_ACK_PKT_QUERY, &msg); +#endif + + sendControlMessage(&msg, entry_->txfd, (struct sockaddr *) &this->peer, this->peer_len); +} + +/* + * ReleaseBuffer + * Return a buffer and send an acknowledgment. + * + * SHOULD BE CALLED WITH ic_control_info.lock *LOCKED* + */ +void +UDPConn::ReleaseBuffer(AckSendParam *param) +{ + icpkthdr *buf; + uint32 seq; + + buf = (icpkthdr *) this->pkt_q[this->pkt_q_head]; + if (buf == NULL) + { + pthread_mutex_unlock(&ic_control_info.lock); + throw ICFatalException("FATAL: ReleaseBuffer: buffer is NULL", __FILE__, __LINE__); + } + + seq = buf->seq; + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "LOG: ReleaseBuffer conn %p pkt [seq %d] for node %d route %d, [head seq] %d queue size %d, queue head %d queue tail %d", + this, seq, buf->motNodeId, this->route, this->conn_info.seq - this->pkt_q_size, this->pkt_q_size, this->pkt_q_head, this->pkt_q_tail); +#endif + + this->pkt_q[this->pkt_q_head] = NULL; + this->pBuff = NULL; + this->pkt_q_head = (this->pkt_q_head + 1) % this->pkt_q_capacity; + this->pkt_q_size--; + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "LOG: ReleaseBuffer conn %p pkt [seq %d] for node %d route %d, [head seq] %d queue size %d, queue head %d queue tail %d", + this, seq, buf->motNodeId, this->route, this->conn_info.seq - this->pkt_q_size, this->pkt_q_size, this->pkt_q_head, this->pkt_q_tail); +#endif + + rx_buffer_pool.put(buf); + this->conn_info.extraSeq = seq; + + /* Send an Ack to the sender. */ + if ((seq % 2 == 0) || (this->pkt_q_capacity == 1)) + { + if (param != NULL) + { + this->setAckParam(param, UDPIC_FLAGS_ACK | UDPIC_FLAGS_CAPACITY | this->conn_info.flags, this->conn_info.seq - 1, seq); + } + else + { + this->sendAck(UDPIC_FLAGS_ACK | UDPIC_FLAGS_CAPACITY | this->conn_info.flags, this->conn_info.seq - 1, seq); + } + } +} + +/* + * computeExpirationPeriod + * Compute expiration period according to the connection information. + * + * Considerations on expiration period computation: + * + * RTT is dynamically computed, and expiration period is based on RTT values. + * We cannot simply use RTT as the expiration value, since real workload does + * not always have a stable RTT. A small constant value is multiplied to the RTT value + * to make the resending logic insensitive to the frequent small changes of RTT. + * + */ +uint64 +UDPConn::computeExpirationPeriod(uint32 retry) +{ + /* + * In fault injection mode, we often use DEFAULT_RTT, because the + * intentional large percent of packet/ack losses will make the RTT too + * large. This will lead to a slow retransmit speed. In real hardware + * environment/workload, we do not expect such a packet loss pattern. + */ +#ifdef USE_ASSERT_CHECKING + if (udp_testmode) + { + return DEFAULT_RTT; + } + else +#endif + { + uint32 factor = (retry <= 12 ? retry : 12); + return Max(MIN_EXPIRATION_PERIOD, Min(MAX_EXPIRATION_PERIOD, (int)(this->rtt + (this->dev << 2)) << (factor))); + } +} + +/* + * freeDisorderedPackets + * Put the disordered packets into free buffer list. + */ +void +UDPConn::freeDisorderedPackets() +{ + uint32 k; + + if (this->pkt_q == NULL) + return; + + for (k = 0; k < this->pkt_q_capacity; k++) + { + icpkthdr *buf = (icpkthdr *)this->pkt_q[k]; + + if (buf != NULL) + { + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "CLEAR Out-of-order PKT: conn %p pkt [seq %d] for node %d route %d, " + "[head seq] %d queue size %d, queue head %d queue tail %d", + this, buf->seq, buf->motNodeId, this->route, this->conn_info.seq - this->pkt_q_size, + this->pkt_q_size, this->pkt_q_head, this->pkt_q_tail); + + /* return the buffer into the free list. */ + rx_buffer_pool.put(buf); + this->pkt_q[k] = NULL; + } + } +} + +/* + * prepareRxConnForRead + * Prepare the receive connection for reading. + * + * MUST BE CALLED WITH ic_control_info.lock LOCKED. + */ +void +UDPConn::prepareRxConnForRead() +{ + LOG(DEBUG3, "In prepareRxConnForRead: conn %p, q_head %d q_tail %d q_size %d", + this, this->pkt_q_head, this->pkt_q_tail, this->pkt_q_size); + + Assert(this->pkt_q[this->pkt_q_head] != NULL); + this->pBuff = this->pkt_q[this->pkt_q_head]; + this->msgPos = this->pBuff; + this->msgSize = ((icpkthdr *) this->pBuff)->len; + this->recvBytes = this->msgSize; +} + +/* + * DeactiveConn + * Mark the connection inactive. + */ +void +UDPConn::DeactiveConn() +{ + pthread_mutex_lock(&ic_control_info.lock); + this->stillActive = false; + pthread_mutex_unlock(&ic_control_info.lock); +} + +/* + * handleAckedPacket + * Called by sender to process acked packet. + * + * Remove it from unack queue and unack queue ring, change the rtt ... + * + * RTT (Round Trip Time) is computed as the time between we send the packet + * and receive the acknowledgement for the packet. When an acknowledgement + * is received, an estimated RTT value (called SRTT, smoothed RTT) is updated + * by using the following equation. And we also set a limitation of the max + * value and min value for SRTT. + * (1) SRTT = (1 - g) SRTT + g x RTT (0 < g < 1) + * where RTT is the measured round trip time of the packet. In implementation, + * g is set to 1/8. In order to compute expiration period, we also compute an + * estimated delay variance SDEV by using: + * (2) SDEV = (1 - h) x SDEV + h x |SERR| (0 < h < 1, In implementation, h is set to 1/4) + * where SERR is calculated by using: + * (3) SERR = RTT - SRTT + * Expiration period determines the timing we resend a packet. A long RTT means + * a long expiration period. Delay variance is used to incorporate the variance + * of workload/network variances at different time. When a packet is retransmitted, + * we back off exponentially the expiration period. + * (4) exp_period = (SRTT + y x SDEV) << retry + * Here y is a constant (In implementation, we use 4) and retry is the times the + * packet is retransmitted. + */ +void +UDPConn::handleAckedPacket(ICBuffer *buf, uint64 now) +{ + uint64 ackTime = 0; + bool bufIsHead = false; + UDPConn *bufConn = NULL; + + bufIsHead = (&buf->primary == this->unackQueue.first()); + + buf = this->unackQueue.remove(buf); + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + { + ICBufferList *alist = &unack_queue_ring.slots[buf->unackQueueRingSlot]; + buf = alist->remove(buf); + unack_queue_ring.numOutStanding--; + if (this->unackQueue.length() >= 1) + unack_queue_ring.numSharedOutStanding--; + + ackTime = now - buf->sentTime; + + /* + * In udp_testmode, we do not change rtt dynamically due to the large + * number of packet losses introduced by fault injection code. This + * can decrease the testing time. + */ +#ifdef USE_ASSERT_CHECKING + if (!udp_testmode) +#endif + { + uint64 newRTT = 0; + uint64 newDEV = 0; + + if (buf->nRetry == 0) + { + bufConn = static_cast(buf->conn); + newRTT = bufConn->rtt - (bufConn->rtt >> RTT_SHIFT_COEFFICIENT) + (ackTime >> RTT_SHIFT_COEFFICIENT); + newRTT = Min(MAX_RTT, Max(newRTT, MIN_RTT)); + bufConn->rtt = newRTT; + + newDEV = bufConn->dev - (bufConn->dev >> DEV_SHIFT_COEFFICIENT) + ((Max(ackTime, newRTT) - Min(ackTime, newRTT)) >> DEV_SHIFT_COEFFICIENT); + newDEV = Min(MAX_DEV, Max(newDEV, MIN_DEV)); + bufConn->dev = newDEV; + + /* adjust the congestion control window. */ + if (snd_control_info.cwnd < snd_control_info.ssthresh) + snd_control_info.cwnd += 1; + else + snd_control_info.cwnd += 1 / snd_control_info.cwnd; + snd_control_info.cwnd = Min(snd_control_info.cwnd, snd_buffer_pool.maxCount); + } + } + } + + bufConn = static_cast(buf->conn); + bufConn->stat_total_ack_time += ackTime; + bufConn->stat_max_ack_time = Max(ackTime, bufConn->stat_max_ack_time); + bufConn->stat_min_ack_time = Min(ackTime, bufConn->stat_min_ack_time); + + /* + * only change receivedAckSeq when it is the smallest pkt we sent and have + * not received ack for it. + */ + if (bufIsHead) + this->receivedAckSeq = buf->pkt->seq; + + /* The first packet acts like a connect setup packet */ + if (buf->pkt->seq == 1) + this->state = mcsStarted; + + snd_buffer_pool.freeList.append(buf); + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "REMOVEPKT %d from unack queue for route %d (retry %d) sndbufmaxcount %d sndbufcount %d " + "sndbuffreelistlen %d, sntSeq %d consumedSeq %d recvAckSeq %d capacity %d, sndQ %d, unackQ %d", + buf->pkt->seq, this->route, buf->nRetry, snd_buffer_pool.maxCount, snd_buffer_pool.count, + snd_buffer_pool.freeList.length(), bufConn->sentSeq, bufConn->consumedSeq, + bufConn->receivedAckSeq, bufConn->capacity, bufConn->sndQueue.length(), + bufConn->unackQueue.length()); + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + { + bufConn->unackQueue.icBufferListLog(); + bufConn->sndQueue.icBufferListLog(); + } +#endif +} + +/* + * dispatcherAYT + * Check the connection from the dispatcher to verify that it is still there. + * + * The connection is a struct Port, stored in the global MyProcPort. + * + * Return true if the dispatcher connection is still alive. + */ +static bool +dispatcherAYT(void) +{ + ssize_t ret; + char buf; + + /* + * For background worker or auxiliary process like gdd, there is no client. + * As a result, MyProcPort is NULL. We should skip dispatcherAYT check here. + */ + if (global_param.MyProcPort == false) + return true; + + if (global_param.myprocport_sock < 0) + return false; + +#ifndef WIN32 + ret = recv(global_param.myprocport_sock, &buf, 1, MSG_PEEK | MSG_DONTWAIT); +#else + ret = recv(global_param.myprocport_sock, &buf, 1, MSG_PEEK | MSG_PARTIAL); +#endif + + if (ret == 0) /* socket has been closed. EOF */ + return false; + + if (ret > 0) /* data waiting on socket, it must be OK. */ + return true; + + if (ret == -1) /* error, or would be block. */ + { + if (errno == EAGAIN || errno == EINPROGRESS) + return true; /* connection intact, no data available */ + else + return false; + } + /* not reached */ + + return true; +} + +/* + * checkQDConnectionAlive + * Check whether QD connection is still alive. If not, report error. + */ +static void +checkQDConnectionAlive(void) +{ + if (!dispatcherAYT()) + { + if (global_param.Gp_role == GP_ROLE_EXECUTE_IC) + throw ICNetworkException("interconnect error segment lost contact with master (recv)", __FILE__, __LINE__); + else + throw ICNetworkException("interconnect error master lost contact with client (recv)", __FILE__, __LINE__); + } +} + +/* + * getCurrentTime + * get current time + * + */ +static uint64 +getCurrentTime(void) +{ + struct timeval newTime; + int status = 1; + uint64 t = 0; + +#if HAVE_LIBRT + /* Use clock_gettime to return monotonic time value. */ + struct timespec ts; + + status = clock_gettime(CLOCK_MONOTONIC, &ts); + + newTime.tv_sec = ts.tv_sec; + newTime.tv_usec = ts.tv_nsec / 1000; + +#endif + + if (status != 0) + gettimeofday(&newTime, NULL); + + t = ((uint64) newTime.tv_sec) * USECS_PER_SECOND + newTime.tv_usec; + return t; +} + +/* + * putIntoUnackQueueRing + * Put the buffer into the ring. + * + * expTime - expiration time from now + * + */ +static void +putIntoUnackQueueRing(UnackQueueRing *uqr, ICBuffer *buf, uint64 expTime, uint64 now) +{ + uint64 diff = 0; + int idx = 0; + + /* The first packet, currentTime is not initialized */ + if (uqr->currentTime == 0) + uqr->currentTime = now - (now % TIMER_SPAN); + + diff = now + expTime - uqr->currentTime; + if (diff >= UNACK_QUEUE_RING_LENGTH) + { +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "putIntoUnackQueueRing:" "now %lu expTime %lu diff %lu uqr-currentTime %lu", now, expTime, diff, uqr->currentTime); +#endif + diff = UNACK_QUEUE_RING_LENGTH - 1; + } + else if (diff < TIMER_SPAN) + { + diff = TIMER_SPAN; + } + + idx = (uqr->idx + diff / TIMER_SPAN) % UNACK_QUEUE_RING_SLOTS_NUM; + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "PUTTW: curtime %lu now %lu (diff %lu) expTime %lu previdx %d, nowidx %d, nextidx %d", uqr->currentTime, now, diff, expTime, buf->unackQueueRingSlot, uqr->idx, idx); +#endif + + buf->unackQueueRingSlot = idx; + unack_queue_ring.slots[idx].append(buf); +} + +/* + * handleDataPacket + * Handling the data packet. + * + * On return, will set *wakeup_mainthread, if a packet was received successfully + * and the caller should wake up the main thread, after releasing the mutex. + */ +static bool +handleDataPacket(UDPConn *conn, icpkthdr *pkt, struct sockaddr_storage *peer, socklen_t *peerlen, + AckSendParam *param, bool *wakeup_mainthread) +{ + if ((pkt->len == sizeof(icpkthdr)) && (pkt->flags & UDPIC_FLAGS_CAPACITY)) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "status queuy message received, seq %d, srcpid %d, dstpid %d, icid %d, sid %d", + pkt->seq, pkt->srcPid, pkt->dstPid, pkt->icId, pkt->sessionId); + +#ifdef AMS_VERBOSE_LOGGING + logPkt("STATUS QUERY MESSAGE", pkt); +#endif + uint32 seq = conn->conn_info.seq > 0 ? conn->conn_info.seq - 1 : 0; + uint32 extraSeq = conn->stopRequested ? seq : conn->conn_info.extraSeq; + + conn->setAckParam(param, UDPIC_FLAGS_CAPACITY | UDPIC_FLAGS_ACK | conn->conn_info.flags, seq, extraSeq); + + return false; + } + + /* + * when we're not doing a full-setup on every statement, we've got to + * update the peer info -- full setups do this at setup-time. + */ + + /* + * Note the change here, for process start race and disordered message, if + * we do not fill in peer address, then we may send some acks to unknown + * address. Thus, the following condition is used. + * + */ + if (pkt->seq <= conn->pkt_q_capacity) + { + /* fill in the peer. Need to cast away "volatile". ugly */ + memset((void *) &conn->peer, 0, sizeof(conn->peer)); + memcpy((void *) &conn->peer, peer, *peerlen); + conn->peer_len = *peerlen; + + conn->conn_info.dstListenerPort = pkt->dstListenerPort; + if (IC_DEBUG2 >= session_param.log_min_messages) + LOG(DEBUG2, "received the head packets when eliding setup, pkt seq %d", pkt->seq); + } + + /* data packet */ + if (pkt->flags & UDPIC_FLAGS_EOS) + { + if (IC_DEBUG3 >= session_param.log_min_messages) + LOG(DEBUG3, "received packet with EOS motid %d route %d seq %d", + pkt->motNodeId, conn->route, pkt->seq); + } + + /* + * if we got a stop, but didn't request a stop -- ignore, this is a + * startup blip: we must have acked with a stop -- we don't want to do + * anything further with the stop-message if we didn't request a stop! + * + * this is especially important after eliding setup is enabled. + */ + if (!conn->stopRequested && (pkt->flags & UDPIC_FLAGS_STOP)) + { + if (pkt->flags & UDPIC_FLAGS_EOS) + { + LOG(INFO, "non-requested stop flag, EOS! seq %d, flags 0x%x", pkt->seq, pkt->flags); + } + return false; + } + + if (conn->stopRequested && conn->stillActive) + { + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC && IC_DEBUG5 >= session_param.log_min_messages) + LOG(DEBUG5, "rx_thread got packet on active connection marked stopRequested. " + "(flags 0x%x) node %d route %d pkt seq %d conn seq %d", + pkt->flags, pkt->motNodeId, conn->route, pkt->seq, conn->conn_info.seq); + + /* can we update stillActive ? */ + if (IC_DEBUG2 >= session_param.log_min_messages) + if (!(pkt->flags & UDPIC_FLAGS_STOP) && !(pkt->flags & UDPIC_FLAGS_EOS)) + LOG(DEBUG2, "stop requested but no stop flag on return packet ?!"); + + if (pkt->flags & UDPIC_FLAGS_EOS) + conn->conn_info.flags |= UDPIC_FLAGS_EOS; + + if (conn->conn_info.seq < pkt->seq) + conn->conn_info.seq = pkt->seq; /* note here */ + + conn->setAckParam(param, UDPIC_FLAGS_ACK | UDPIC_FLAGS_STOP | UDPIC_FLAGS_CAPACITY | conn->conn_info.flags, pkt->seq, pkt->seq); + + /* we only update stillActive if eos has been sent by peer. */ + if (pkt->flags & UDPIC_FLAGS_EOS) + { + if (IC_DEBUG2 >= session_param.log_min_messages) + LOG(DEBUG2, "stop requested and acknowledged by sending peer"); + conn->stillActive = false; + } + + return false; + } + + /* dropped ack or timeout */ + if (pkt->seq < conn->conn_info.seq) + { + ic_statistics.duplicatedPktNum++; + if (IC_DEBUG3 >= session_param.log_min_messages) + LOG(DEBUG3, "dropped ack ? ignored data packet w/ cmd %d conn->cmd %d node %d route %d seq %d expected %d flags 0x%x", + pkt->icId, conn->conn_info.icId, pkt->motNodeId, conn->route, pkt->seq, conn->conn_info.seq, pkt->flags); + + conn->setAckParam(param, UDPIC_FLAGS_ACK | UDPIC_FLAGS_CAPACITY | conn->conn_info.flags, conn->conn_info.seq - 1, conn->conn_info.extraSeq); + + return false; + } + + /* sequence number is correct */ + if (!conn->stillActive) + { + /* peer may have dropped ack */ + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_VERBOSE_IC && + IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "received on inactive connection node %d route %d (seq %d pkt->seq %d)", + pkt->motNodeId, conn->route, conn->conn_info.seq, pkt->seq); + + if (conn->conn_info.seq < pkt->seq) + conn->conn_info.seq = pkt->seq; + conn->setAckParam(param, UDPIC_FLAGS_ACK | UDPIC_FLAGS_STOP | UDPIC_FLAGS_CAPACITY | conn->conn_info.flags, pkt->seq, pkt->seq); + + return false; + } + + /* headSeq is the seq for the head packet. */ + uint32 headSeq = conn->conn_info.seq - conn->pkt_q_size; + + if ((conn->pkt_q_size == conn->pkt_q_capacity) || (pkt->seq - headSeq >= conn->pkt_q_capacity)) + { + /* + * Error case: NO RX SPACE or out of range pkt This indicates a bug. + */ + logPkt("Interconnect error: received a packet when the queue is full ", pkt); + ic_statistics.disorderedPktNum++; + conn->stat_count_dropped++; + return false; + } + + /* put the packet at the his position */ + bool toWakeup = false; + + int pos = (pkt->seq - 1) % conn->pkt_q_capacity; + + if (conn->pkt_q[pos] == NULL) + { + conn->pkt_q[pos] = (uint8 *) pkt; + if (pos == conn->pkt_q_head) + { +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "SAVE pkt at QUEUE HEAD [seq %d] for node %d route %d, queue head seq %d, queue size %d, queue head %d queue tail %d", + pkt->seq, pkt->motNodeId, conn->route, headSeq, conn->pkt_q_size, conn->pkt_q_head, conn->pkt_q_tail); +#endif + toWakeup = true; + } + + if (pos == conn->pkt_q_tail) + { + /* move the queue tail */ + for (; conn->pkt_q[conn->pkt_q_tail] != NULL && conn->pkt_q_size < conn->pkt_q_capacity;) + { + conn->pkt_q_size++; + conn->pkt_q_tail = (conn->pkt_q_tail + 1) % conn->pkt_q_capacity; + conn->conn_info.seq++; + } + + /* set the EOS flag */ + if (((icpkthdr *) (conn->pkt_q[(conn->pkt_q_tail + conn->pkt_q_capacity - 1) % conn->pkt_q_capacity]))->flags & UDPIC_FLAGS_EOS) + { + conn->conn_info.flags |= UDPIC_FLAGS_EOS; + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "RX_THREAD: the packet with EOS flag is available for access in the queue for route %d", conn->route); + } + + /* ack data packet */ + conn->setAckParam(param, UDPIC_FLAGS_CAPACITY | UDPIC_FLAGS_ACK | conn->conn_info.flags, conn->conn_info.seq - 1, conn->conn_info.extraSeq); + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "SAVE conn %p pkt at QUEUE TAIL [seq %d] at pos [%d] for node %d route %d, [head seq] %d, queue size %d, queue head %d queue tail %d", + conn, pkt->seq, pos, pkt->motNodeId, conn->route, headSeq, conn->pkt_q_size, conn->pkt_q_head, conn->pkt_q_tail); +#endif + } + else /* deal with out-of-order packet */ + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "SAVE conn %p OUT-OF-ORDER pkt [seq %d] at pos [%d] for node %d route %d, [head seq] %d, queue size %d, queue head %d queue tail %d", + conn, pkt->seq, pos, pkt->motNodeId, conn->route, headSeq, conn->pkt_q_size, conn->pkt_q_head, conn->pkt_q_tail); + + /* send an ack for out-of-order packet */ + ic_statistics.disorderedPktNum++; + conn->handleDisorderPacket(pos, headSeq + conn->pkt_q_size, pkt); + } + } + else /* duplicate pkt */ + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "DUPLICATE pkt [seq %d], [head seq] %d, queue size %d, queue head %d queue tail %d", + pkt->seq, headSeq, conn->pkt_q_size, conn->pkt_q_head, conn->pkt_q_tail); + + conn->setAckParam(param, UDPIC_FLAGS_DUPLICATE | conn->conn_info.flags, pkt->seq, conn->conn_info.seq - 1); + ic_statistics.duplicatedPktNum++; + return false; + } + + /* Was the main thread waiting for something ? */ + if (rx_control_info.mainWaitingState.waiting && + rx_control_info.mainWaitingState.waitingNode == pkt->motNodeId && + rx_control_info.mainWaitingState.waitingQuery == pkt->icId && toWakeup) + { + if (rx_control_info.mainWaitingState.waitingRoute == ANY_ROUTE) + { + if (rx_control_info.mainWaitingState.reachRoute == ANY_ROUTE) + rx_control_info.mainWaitingState.reachRoute = conn->route; + } + else if (rx_control_info.mainWaitingState.waitingRoute == conn->route) + { + if (IC_DEBUG2 >= session_param.log_min_messages) + LOG(DEBUG2, "rx thread: main_waiting waking it route %d", rx_control_info.mainWaitingState.waitingRoute); + rx_control_info.mainWaitingState.reachRoute = conn->route; + } + /* WAKE MAIN THREAD HERE */ + *wakeup_mainthread = true; + } + + return true; +} + +/* + * rxThreadFunc + * Main function of the receive background thread. + * + * NOTE: This function MUST NOT contain elog or ereport statements. + * elog is NOT thread-safe. Developers should instead use something like: + * + * NOTE: In threads, we cannot use palloc/pfree, because it's not thread safe. + */ +static void * +rxThreadFunc(void *arg) +{ + icpkthdr *pkt = NULL; + bool skip_poll = false; + + for (;;) + { + struct pollfd nfd; + int n; + + /* check shutdown condition */ + if (ic_atomic_read_u32(&ic_control_info.shutdown) == 1) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "udp-ic: rx-thread shutting down"); + break; + } + + /* Try to get a buffer */ + if (pkt == NULL) + { + pthread_mutex_lock(&ic_control_info.lock); + pkt = rx_buffer_pool.get(); + pthread_mutex_unlock(&ic_control_info.lock); + + if (pkt == NULL) + { + setRxThreadError(ENOMEM); + continue; + } + } + + if (!skip_poll) + { + /* Do we have inbound traffic to handle ? */ + nfd.fd = UDP_listenerFd; + nfd.events = POLLIN; + + n = poll(&nfd, 1, RX_THREAD_POLL_TIMEOUT); + + if (ic_atomic_read_u32(&ic_control_info.shutdown) == 1) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "udp-ic: rx-thread shutting down"); + break; + } + + if (n < 0) + { + if (errno == EINTR) + continue; + + /* + * ERROR case: if simply break out the loop here, there will + * be a hung here, since main thread will never be waken up, + * and senders will not get responses anymore. + * + * Thus, we set an error flag, and let main thread to report + * an error. + */ + setRxThreadError(errno); + continue; + } + + if (n == 0) + continue; + } + + if (skip_poll || (n == 1 && (nfd.events & POLLIN))) + { + /* we've got something interesting to read */ + /* handle incoming */ + /* ready to read on our socket */ + int read_count = 0; + + struct sockaddr_storage peer; + socklen_t peerlen; + + peerlen = sizeof(peer); + read_count = recvfrom(UDP_listenerFd, (char *) pkt, global_param.Gp_max_packet_size, 0, + (struct sockaddr *) &peer, &peerlen); + + if (ic_atomic_read_u32(&ic_control_info.shutdown) == 1) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "udp-ic: rx-thread shutting down"); + break; + } + + if (IC_DEBUG5 >= session_param.log_min_messages) + LOG(DEBUG5, "received inbound len %d", read_count); + + if (read_count < 0) + { + skip_poll = false; + + if (errno == EWOULDBLOCK || errno == EINTR) + continue; + + LOG(LOG_ERROR, "Interconnect error: recvfrom (%d)", errno); + + /* + * ERROR case: if simply break out the loop here, there will + * be a hung here, since main thread will never be waken up, + * and senders will not get responses anymore. + * + * Thus, we set an error flag, and let main thread to report + * an error. + */ + setRxThreadError(errno); + continue; + } + + if (static_cast(read_count) < sizeof(icpkthdr)) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "Interconnect error: short conn receive (%d)", read_count); + continue; + } + + /* + * when we get a "good" recvfrom() result, we can skip poll() + * until we get a bad one. + */ + skip_poll = true; + + /* length must be >= 0 */ + if (pkt->len < 0) + { + if (IC_DEBUG3 >= session_param.log_min_messages) + LOG(DEBUG3, "received inbound with negative length"); + continue; + } + + if (pkt->len != static_cast(read_count)) + { + if (IC_DEBUG3 >= session_param.log_min_messages) + LOG(DEBUG3, "received inbound packet [%d], short: read %d bytes, pkt->len %d", pkt->seq, read_count, pkt->len); + continue; + } + + /* + * check the CRC of the payload. + */ + if (session_param.gp_interconnect_full_crc) + { + if (!checkCRC(pkt)) + { + ic_atomic_add_fetch_u32((ic_atomic_uint32 *) &ic_statistics.crcErrors, 1); + if (IC_DEBUG2 >= session_param.log_min_messages) + LOG(DEBUG2, "received network data error, dropping bad packet, user data unaffected."); + continue; + } + } + +#ifdef AMS_VERBOSE_LOGGING + logPkt("GOT MESSAGE", pkt); +#endif + + bool wakeup_mainthread = false; + AckSendParam param; + + memset(¶m, 0, sizeof(AckSendParam)); + + /* + * Get the connection for the pkt. + * + * The connection hash table should be locked until finishing the + * processing of the packet to avoid the connection + * addition/removal from the hash table during the mean time. + */ + pthread_mutex_lock(&ic_control_info.lock); + UDPConn *conn = ic_control_info.connHtab.find(pkt); + if (conn != NULL) + { + /* Handling a regular packet */ + if (handleDataPacket(conn, pkt, &peer, &peerlen, ¶m, &wakeup_mainthread)) + pkt = NULL; + ic_statistics.recvPktNum++; + } + else + { + /* + * There may have two kinds of Mismatched packets: a) Past + * packets from previous command after I was torn down b) + * Future packets from current command before my connections + * are built. + * + * The handling logic is to "Ack the past and Nak the future". + */ + if ((pkt->flags & UDPIC_FLAGS_RECEIVER_TO_SENDER) == 0) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "mismatched packet received, seq %d, srcpid %d, dstpid %d, icid %d, sid %d", + pkt->seq, pkt->srcPid, pkt->dstPid, pkt->icId, pkt->sessionId); + +#ifdef AMS_VERBOSE_LOGGING + logPkt("Got a Mismatched Packet", pkt); +#endif + + if (handleMismatch(pkt, &peer, peerlen)) + pkt = NULL; + ic_statistics.mismatchNum++; + } + } + pthread_mutex_unlock(&ic_control_info.lock); + + if (wakeup_mainthread) { + cv.notify_one(); + } + + /* + * real ack sending is after lock release to decrease the lock + * holding time. + */ + if (param.msg.len != 0) + UDPConn::sendAckWithParam(¶m); + } + + /* pthread_yield(); */ + } + + /* Before return, we release the packet. */ + if (pkt) + { + pthread_mutex_lock(&ic_control_info.lock); + rx_buffer_pool.release(pkt); + pkt = NULL; + pthread_mutex_unlock(&ic_control_info.lock); + } + + /* nothing to return */ + return NULL; +} + +/* + * handleMismatch + * If the mismatched packet is from an old connection, we may need to + * send an acknowledgment. + * + * We are called with the receiver-lock held, and we never release it. + * + * For QD: + * 1) Not in hashtable : NAK it/Do nothing + * Causes: a) Start race + * b) Before the entry for the ic instance is inserted, an error happened. + * c) From past transactions: should no happen. + * 2) Active in hashtable : NAK it/Do nothing + * Causes: a) Error reported after the entry is inserted, and connections are + * not inserted to the hashtable yet, and before teardown is called. + * 3) Inactive in hashtable: ACK it (with stop) + * Causes: a) Normal execution: after teardown is called on current command. + * b) Error case, 2a) after teardown is called. + * c) Normal execution: from past history transactions (should not happen). + * + * For QE: + * 1) pkt->id > ic_control_info.ic_instance_id : NAK it/Do nothing + * Causes: a) Start race + * b) Before ic_control_info.ic_instance_id is assigned to correct value, an error happened. + * 2) lastTornIcId < pkt->id == ic_control_info.ic_instance_id: NAK it/Do nothing + * Causes: a) Error reported after ic_control_info.ic_instance_id is set, and connections are + * not inserted to the hashtable yet, and before teardown is called. + * 3) lastTornIcId == pkt->id == ic_control_info.ic_instance_id: ACK it (with stop) + * Causes: a) Normal execution: after teardown is called on current command + * 4) pkt->id < ic_control_info.ic_instance_id: NAK it/Do nothing/ACK it. + * Causes: a) Should not happen. + * + */ +static bool +handleMismatch(icpkthdr *pkt, struct sockaddr_storage *peer, int peer_len) +{ + bool cached = false; + + /* + * we want to ack old packets; but *must* avoid acking connection + * requests: + * + * "ACK the past, NAK the future" explicit NAKs aren't necessary, we just + * don't want to ACK future packets, that confuses everyone. + */ + if (pkt->seq > 0 && pkt->sessionId == session_param.gp_session_id) + { + bool need_ack = false; + uint8 ack_flags = 0; + + /* + * The QD-backends can't use a counter, they've potentially got + * multiple instances (one for each active cursor) + */ + if (global_param.Gp_role == GP_ROLE_DISPATCH_IC) + { + struct CursorICHistoryEntry *p; + + p = rx_control_info.cursorHistoryTable.get(pkt->icId); + if (p) + { + if (p->status == 0) + { + /* Torn down. Ack the past. */ + need_ack = true; + } + else /* p->status == 1 */ + { + /* + * Not torn down yet. It happens when an error + * (out-of-memory, network error...) occurred after the + * cursor entry is inserted into the table in interconnect + * setup process. The peer will be canceled. + */ + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "GOT A MISMATCH PACKET WITH ID %d HISTORY THINKS IT IS ACTIVE", pkt->icId); + return cached; /* ignore, no ack */ + } + } + else + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "GOT A MISMATCH PACKET WITH ID %d HISTORY HAS NO RECORD", pkt->icId); + + /* + * No record means that two possibilities. 1) It is from the + * future. It is due to startup race. We do not ack future + * packets 2) Before the entry for the ic instance is + * inserted, an error happened. We do not ack for this case + * too. The peer will be canceled. + */ + ack_flags = UDPIC_FLAGS_NAK; + need_ack = false; + + if (session_param.gp_interconnect_cache_future_packets) + { + cached = cacheFuturePacket(pkt, peer, peer_len); + } + } + } + /* The QEs get to use a simple counter. */ + else if (global_param.Gp_role == GP_ROLE_EXECUTE_IC) + { + if (ic_control_info.ic_instance_id >= pkt->icId) + { + need_ack = true; + + /* + * We want to "ACK the past, but NAK the future." + * + * handleAck() will retransmit. + */ + if (pkt->seq >= 1 && pkt->icId > rx_control_info.lastTornIcId) + { + ack_flags = UDPIC_FLAGS_NAK; + need_ack = false; + } + } + else + { + /* + * ic_control_info.ic_instance_id < pkt->icId, from the future + */ + if (session_param.gp_interconnect_cache_future_packets) + { + cached = cacheFuturePacket(pkt, peer, peer_len); + } + } + } + + if (need_ack) + { + UDPConn dummyconn(NULL); + char buf[128]; /* numeric IP addresses shouldn't exceed + * about 50 chars, but play it safe */ + + memcpy(&dummyconn.conn_info, pkt, sizeof(icpkthdr)); + dummyconn.peer = *peer; + dummyconn.peer_len = peer_len; + + dummyconn.conn_info.flags |= ack_flags; + + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "ACKING PACKET WITH FLAGS: pkt->seq %d 0x%x [pkt->icId %d last-teardown %d interconnect_id %d]", + pkt->seq, dummyconn.conn_info.flags, pkt->icId, rx_control_info.lastTornIcId, ic_control_info.ic_instance_id); + + format_sockaddr_udp(&dummyconn.peer, buf, sizeof(buf)); + + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "ACKING PACKET TO %s", buf); + + if ((ack_flags & UDPIC_FLAGS_NAK) == 0) + { + ack_flags |= UDPIC_FLAGS_STOP | UDPIC_FLAGS_ACK | UDPIC_FLAGS_CAPACITY | UDPIC_FLAGS_RECEIVER_TO_SENDER; + } + else + { + ack_flags |= UDPIC_FLAGS_RECEIVER_TO_SENDER; + } + + /* + * There are two cases, we may need to send a response to sender + * here. One is start race and the other is receiver becomes idle. + * + * ack_flags here can take two possible values 1) UDPIC_FLAGS_NAK + * | UDPIC_FLAGS_RECEIVER_TO_SENDER (for start race) 2) + * UDPIC_FLAGS_STOP | UDPIC_FLAGS_ACK | UDPIC_FLAGS_CAPACITY | + * UDPIC_FLAGS_RECEIVER_TO_SENDER (for idle receiver) + * + * The final flags in the packet may take some extra bits such as + * 1) UDPIC_FLAGS_STOP 2) UDPIC_FLAGS_EOS 3) UDPIC_FLAGS_CAPACITY + * which are from original packet + */ + dummyconn.sendAck(ack_flags | dummyconn.conn_info.flags, dummyconn.conn_info.seq, dummyconn.conn_info.seq); + } + } + else + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "dropping packet from command-id %d seq %d (my cmd %d)", pkt->icId, pkt->seq, ic_control_info.ic_instance_id); + } + + return cached; +} + +/* + * cacheFuturePacket + * Cache the future packets during the setupUDPIFCInterconnect. + * + * Return true if packet is cached, otherwise false + */ +static bool +cacheFuturePacket(icpkthdr *pkt, struct sockaddr_storage *peer, int peer_len) +{ + UDPConn *conn = ic_control_info.startupCacheHtab.find(pkt); + if (conn == NULL) + { + try { + conn = new UDPConn(NULL); + } catch (const std::bad_alloc & e) { + errno = ENOMEM; + setRxThreadError(errno); + return false; + } + + memset((void *) conn, 0, sizeof(UDPConn)); + memcpy(&conn->conn_info, pkt, sizeof(icpkthdr)); + + conn->pkt_q_capacity = session_param.Gp_interconnect_queue_depth; + conn->pkt_q_size = session_param.Gp_interconnect_queue_depth; + conn->pkt_q = (uint8 **) ic_malloc(session_param.Gp_interconnect_queue_depth * sizeof(uint8 *)); + + if (conn->pkt_q == NULL) + { + /* malloc failed. */ + delete conn; + setRxThreadError(errno); + return false; + } + + /* We only use the array to store cached packets. */ + memset(conn->pkt_q, 0, session_param.Gp_interconnect_queue_depth * sizeof(uint8 *)); + + /* Put connection to the hashtable. */ + if (!ic_control_info.startupCacheHtab.add(conn)) + { + ic_free(conn->pkt_q); + delete conn; + setRxThreadError(errno); + return false; + } + + /* Setup the peer sock information. */ + memcpy(&conn->peer, peer, peer_len); + conn->peer_len = peer_len; + } + + /* + * Reject packets with invalid sequence numbers and packets which have + * been cached before. + */ + if (pkt->seq > conn->pkt_q_size || pkt->seq == 0 || conn->pkt_q[pkt->seq - 1] != NULL) + return false; + + conn->pkt_q[pkt->seq - 1] = (uint8 *) pkt; + rx_buffer_pool.maxCount++; + ic_statistics.startupCachedPktNum++; + + return true; +} + +/* + * cleanupStartupCache + * Clean the startup cache. + */ +static void +cleanupStartupCache() +{ + ConnHtabBin *bin = NULL; + UDPConn *cachedConn = NULL; + icpkthdr *pkt = NULL; + int i = 0; + uint32 j = 0; + + for (i = 0; i < ic_control_info.startupCacheHtab.size; i++) + { + bin = ic_control_info.startupCacheHtab.table[i]; + + while (bin) + { + cachedConn = bin->conn; + + for (j = 0; j < cachedConn->pkt_q_size; j++) + { + pkt = (icpkthdr *) cachedConn->pkt_q[j]; + + if (pkt == NULL) + continue; + + rx_buffer_pool.maxCount--; + rx_buffer_pool.put(pkt); + cachedConn->pkt_q[j] = NULL; + } + bin = bin->next; + ic_control_info.startupCacheHtab.remove(cachedConn); + + /* + * MPP-19981 free the cached connections; otherwise memory leak + * would be introduced. + */ + ic_free(cachedConn->pkt_q); + ic_free(cachedConn); + } + } +} + + +#ifdef USE_ASSERT_CHECKING + +/* The following functions are facility methods for debugging. + * They are quite useful when there are a large number of connections. + * These functions can be called from gdb to output internal information to a file. + */ + +/* + * dumpUnackQueueRing + * Dump an unack queue ring. + */ +static void +dumpUnackQueueRing(const char *fname) +{ + FILE *ofile = fopen(fname, "w+"); + int i; + + fprintf(ofile, "UnackQueueRing: currentTime %lu, idx %d numOutstanding %d numSharedOutstanding %d\n", + unack_queue_ring.currentTime, unack_queue_ring.idx, + unack_queue_ring.numOutStanding, unack_queue_ring.numSharedOutStanding); + fprintf(ofile, "==================================\n"); + for (i = 0; i < UNACK_QUEUE_RING_SLOTS_NUM; i++) + { + if (unack_queue_ring.slots[i].length() > 0) + { + unack_queue_ring.slots[i].dump_to_file(ofile); + } + } + + fclose(ofile); +} + +/* + * dumpConnections + * Dump connections. + */ +void +TransportEntry::dumpConnections(const char *fname) +{ + int i; + uint32 j; + + return; + + FILE *ofile = fopen(fname, "w+"); + + fprintf(ofile, "Entry connections: conn num %d \n", this->numConns); + fprintf(ofile, "==================================\n"); + for (i = 0; i < this->numConns; i++) + { + UDPConn *conn = this->GetConn(i); + + fprintf(ofile, "conns[%d] motNodeId=%d: remoteContentId=%d pid=%d sockfd=%d remote=%s " + "capacity=%d sentSeq=%d receivedAckSeq=%d consumedSeq=%d rtt=%lu" + " dev=%lu deadlockCheckBeginTime=%lu route=%d msgSize=%d msgPos=%p" + " recvBytes=%d tupleCount=%d stillActive=%d stopRequested=%d " + "state=%d\n", + i, this->motNodeId, + conn->remoteContentId, + conn->cdbProc ? conn->cdbProc->pid : 0, + conn->sockfd, + conn->remoteHostAndPort, + conn->capacity, conn->sentSeq, conn->receivedAckSeq, conn->consumedSeq, + conn->rtt, conn->dev, conn->deadlockCheckBeginTime, conn->route, conn->msgSize, conn->msgPos, + conn->recvBytes, conn->tupleCount, conn->stillActive, conn->stopRequested, + conn->state); + fprintf(ofile, "conn_info [%s: seq %d extraSeq %d]: motNodeId %d, crc %d len %d " + "srcContentId %d dstDesContentId %d " + "srcPid %d dstPid %d " + "srcListenerPort %d dstListernerPort %d " + "sendSliceIndex %d recvSliceIndex %d " + "sessionId %d icId %d " + "flags %d\n", + conn->conn_info.flags & UDPIC_FLAGS_RECEIVER_TO_SENDER ? "ACK" : "DATA", + conn->conn_info.seq, conn->conn_info.extraSeq, conn->conn_info.motNodeId, conn->conn_info.crc, conn->conn_info.len, + conn->conn_info.srcContentId, conn->conn_info.dstContentId, + conn->conn_info.srcPid, conn->conn_info.dstPid, + conn->conn_info.srcListenerPort, conn->conn_info.dstListenerPort, + conn->conn_info.sendSliceIndex, conn->conn_info.recvSliceIndex, + conn->conn_info.sessionId, conn->conn_info.icId, + conn->conn_info.flags); + + if (!ic_control_info.isSender) + { + fprintf(ofile, "pkt_q_size=%d pkt_q_head=%d pkt_q_tail=%d pkt_q=%p\n", conn->pkt_q_size, conn->pkt_q_head, conn->pkt_q_tail, conn->pkt_q); + for (j = 0; j < conn->pkt_q_capacity; j++) + { + if (conn->pkt_q != NULL && conn->pkt_q[j] != NULL) + { + icpkthdr *pkt = (icpkthdr *) conn->pkt_q[j]; + + fprintf(ofile, "Packet (pos %d) Info [%s: seq %d extraSeq %d]: motNodeId %d, crc %d len %d " + "srcContentId %d dstDesContentId %d " + "srcPid %d dstPid %d " + "srcListenerPort %d dstListernerPort %d " + "sendSliceIndex %d recvSliceIndex %d " + "sessionId %d icId %d " + "flags %d\n", + j, + pkt->flags & UDPIC_FLAGS_RECEIVER_TO_SENDER ? "ACK" : "DATA", + pkt->seq, pkt->extraSeq, pkt->motNodeId, pkt->crc, pkt->len, + pkt->srcContentId, pkt->dstContentId, + pkt->srcPid, pkt->dstPid, + pkt->srcListenerPort, pkt->dstListenerPort, + pkt->sendSliceIndex, pkt->recvSliceIndex, + pkt->sessionId, pkt->icId, + pkt->flags); + } + } + } + if (ic_control_info.isSender) + { + fprintf(ofile, "sndQueue "); + conn->sndQueue.dump_to_file(ofile); + fprintf(ofile, "unackQueue "); + conn->unackQueue.dump_to_file(ofile); + + dumpUnackQueueRing("/tmp/dumpUnackQueueRing"); + } + fprintf(ofile, "\n"); + } + fclose(ofile); +} +#endif + +/* + * logPkt + * Log a packet. + * + */ +static inline void +logPkt(const char *prefix, icpkthdr *pkt) +{ + LOG(INFO, "%s [%s: seq %d extraSeq %d]: motNodeId %d, crc %d len %d " + "srcContentId %d dstDesContentId %d " + "srcPid %d dstPid %d " + "srcListenerPort %d dstListernerPort %d " + "sendSliceIndex %d recvSliceIndex %d " + "sessionId %d icId %d " + "flags %d ", + prefix, pkt->flags & UDPIC_FLAGS_RECEIVER_TO_SENDER ? "ACK" : "DATA", + pkt->seq, pkt->extraSeq, pkt->motNodeId, pkt->crc, pkt->len, + pkt->srcContentId, pkt->dstContentId, + pkt->srcPid, pkt->dstPid, + pkt->srcListenerPort, pkt->dstListenerPort, + pkt->sendSliceIndex, pkt->recvSliceIndex, + pkt->sessionId, pkt->icId, + pkt->flags); +} + +/* + * Send a dummy packet to interconnect thread to exit poll() immediately + */ +static void +SendDummyPacket(void) +{ + int ret; + const char *dummy_pkt = "stop it"; + int counter; + struct sockaddr_storage dest; + socklen_t dest_len; + + Assert(udp_dummy_packet_sockaddr.ss_family == AF_INET || udp_dummy_packet_sockaddr.ss_family == AF_INET6); + Assert(ICSenderFamily == AF_INET || ICSenderFamily == AF_INET6); + + dest = udp_dummy_packet_sockaddr; + dest_len = (ICSenderFamily == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6); + + if (ICSenderFamily == AF_INET6) + { +#if defined(__darwin__) + if (udp_dummy_packet_sockaddr.ss_family == AF_INET6) + ConvertIPv6WildcardToLoopback(&dest); +#endif + if (udp_dummy_packet_sockaddr.ss_family == AF_INET) + ConvertToIPv4MappedAddr(&dest, &dest_len); + } + + if (ICSenderFamily == AF_INET && udp_dummy_packet_sockaddr.ss_family == AF_INET6) + { + /* the size of AF_INET6 is bigger than the side of IPv4, so + * converting from IPv6 to IPv4 may potentially not work. */ + LOG(INFO, "sending dummy packet failed: cannot send from AF_INET to receiving on AF_INET6"); + return; + } + + /* + * Send a dummy package to the interconnect listener, try 10 times. + * We don't want to close the socket at the end of this function, since + * the socket will eventually close during the motion layer cleanup. + */ + + counter = 0; + while (counter < 10) + { + counter++; + ret = sendto(ICSenderSocket, dummy_pkt, strlen(dummy_pkt), 0, (struct sockaddr *) &dest, dest_len); + if (ret < 0) + { + if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) + continue; + else + { + LOG(INFO, "send dummy packet failed, sendto failed: %m"); + return; + } + } + break; + } + + if (counter >= 10) + { + LOG(INFO, "send dummy packet failed, sendto failed with 10 times: %m"); + } +} + +/* + * prepareXmit + * Prepare connection for transmit. + */ +void +UDPConn::prepareXmit() +{ + this->conn_info.len = this->msgSize; + this->conn_info.crc = 0; + + memcpy(this->pBuff, &this->conn_info, sizeof(this->conn_info)); + + /* increase the sequence no */ + this->conn_info.seq++; + + if (session_param.gp_interconnect_full_crc) + { + icpkthdr *pkt = (icpkthdr *)this->pBuff; + addCRC(pkt); + } +} + + /* + * sendtoWithRetry + * Retry sendto logic and send the packets. + */ +static ssize_t +sendtoWithRetry(int socket, const void *message, size_t length, + int flags, const struct sockaddr *dest_addr, + socklen_t dest_len, int retry, const char *errDetail) +{ + int32 n; + int count = 0; + +xmit_retry: + /* + * If given retry count is positive, retry up to the limited times. + * Otherwise, retry for unlimited times until succeed. + */ + if (retry > 0 && ++count > retry) + return n; + n = sendto(socket, message, length, flags, dest_addr, dest_len); + if (n < 0) + { + int save_errno = errno; + + if (errno == EINTR) + goto xmit_retry; + + /* + * EAGAIN: no space ? not an error. + * + * EFAULT: In Linux system call, it only happens when copying a socket + * address into kernel space failed, which is less likely to happen, + * but mocked heavily by our fault injection in regression tests. + */ + if (errno == EAGAIN || errno == EFAULT) + return n; + + /* + * If Linux iptables (nf_conntrack?) drops an outgoing packet, it may + * return an EPERM to the application. This might be simply because of + * traffic shaping or congestion, so ignore it. + */ + if (errno == EPERM) + { + LOG(LOG_ERROR, "Interconnect error writing an outgoing packet: %m, " + "error during sendto() %s", errDetail); + return n; + } + + /* + * If the OS can detect an MTU issue on the host network interfaces, we + * would get EMSGSIZE here. So, bail with a HINT about checking MTU. + */ + if (errno == EMSGSIZE) + { + std::stringstream ss; + ss << "ERROR, Interconnect error writing an outgoing packet: " << strerror(errno) << "error during sendto() call (error:" << save_errno << ", " << errDetail << ")." + << "check if interface MTU is equal across the cluster and lower than gp_max_packet_size" << "\n"; + throw ICNetworkException(ss.str(), __FILE__, __LINE__); + } + + std::stringstream ss; + ss <<"ERROR, Interconnect error writing an outgoing packet: "<seq, pkt->srcPid, pkt->dstPid); +#endif + return; + } +#endif + + Assert(pkt->srcContentId == global_param.segindex); + Assert(pkt->motNodeId == entry_->motNodeId); + LOG(DEBUG3, "UDPConn::sendOnce(): icid: %d, motNodeId: %d, srcSeg: %d, dstSeg: %d, srcPid: %d, dstPid: %d, seq: %d, len: %d, flags: %s", + pkt->icId, pkt->motNodeId, pkt->srcContentId, pkt->dstContentId, pkt->srcPid, pkt->dstPid, pkt->seq, pkt->len, flags2txt(pkt->flags)); + + char errDetail[256]; + snprintf(errDetail, sizeof(errDetail), "For Remote Connection: contentId=%d at %s", + this->remoteContentId, + this->remoteHostAndPort); + n = sendtoWithRetry(this->entry_->txfd, pkt, pkt->len, 0, + (struct sockaddr *) &this->peer, this->peer_len, -1, errDetail); + if (n != int(pkt->len)) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "Interconnect error writing an outgoing packet [seq %d]: short transmit (given %d sent %d) during sendto() call." + "For Remote Connection: contentId=%d at %s", pkt->seq, pkt->len, n, + this->remoteContentId, this->remoteHostAndPort); +#ifdef AMS_VERBOSE_LOGGING + logPkt("PKT DETAILS ", pkt); +#endif + } + return; +} + +void +UDPConn::handleStop() +{ + if (!this->stillActive || !this->stopRequested) + return; + + /* mark buffer empty */ + this->tupleCount = 0; + this->msgSize = sizeof(this->conn_info); + + /* now send our stop-ack EOS */ + this->conn_info.flags |= UDPIC_FLAGS_EOS; + + Assert(this->curBuff != NULL); + + this->pBuff[this->msgSize] = 'S'; + this->msgSize += 1; + + /* now ready to actually send */ + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "handleStopMsgs: node %d route %d, seq %d", + entry_->motNodeId, this->route, this->conn_info.seq); + + /* place it into the send queue */ + this->prepareXmit(); + this->sndQueue.append(this->curBuff); + this->curBuff = NULL; + this->pBuff = NULL; + + /* return all buffers */ + this->sndQueue.release(false); + this->unackQueue.release(session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_CAPACITY_IC ? false : true); + + this->tupleCount = 0; + this->msgSize = sizeof(this->conn_info); + + this->state = mcsEosSent; + this->stillActive = false; + this->stopRequested = false; +} + +/* + * sendBuffers + * Called by sender to send the buffers in the send queue. + * + * Send the buffers in the send queue of the connection if there is capacity left + * and the congestion control condition is satisfied. + * + * Here, we make sure that a connection can have at least one outstanding buffer. + * This is very important for two reasons: + * + * 1) The handling logic of the ack of the outstanding buffer can always send a buffer + * in the send queue. Otherwise, there may be a deadlock. + * 2) This makes sure that any connection can have a minimum bandwidth for data + * sending. + * + * After sending a buffer, the buffer will be placed into both the unack queue and + * the corresponding queue in the unack queue ring. + */ +void +UDPConn::sendBuffers() +{ + while (this->capacity > 0 && this->sndQueue.length() > 0) + { + ICBuffer *buf = NULL; + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + { + if (this->unackQueue.length() > 0 && + unack_queue_ring.numSharedOutStanding >= (snd_control_info.cwnd - snd_control_info.minCwnd)) + break; + } + + /* for connection setup, we only allow one outstanding packet. */ + if (this->state == mcsSetupOutgoingConnection && this->unackQueue.length() >= 1) + break; + + buf = this->sndQueue.pop(); + + uint64 now = getCurrentTime(); + + buf->sentTime = now; + buf->unackQueueRingSlot = -1; + buf->nRetry = 0; + buf->conn = this; + this->capacity--; + + this->unackQueue.append(buf); + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + { + unack_queue_ring.numOutStanding++; + if (this->unackQueue.length() > 1) + unack_queue_ring.numSharedOutStanding++; + + putIntoUnackQueueRing(&unack_queue_ring, + buf, + this->computeExpirationPeriod(buf->nRetry), + now); + } + + /* + * Note the place of sendOnce here. If we send before appending it to + * the unack queue and putting it into unack queue ring, and there is + * a network error occurred in the sendOnce function, error message + * will be output. In the time of error message output, interrupts is + * potentially checked, if there is a pending query cancel, it will + * lead to a dangled buffer (memory leak). + */ +#ifdef TRANSFER_PROTOCOL_STATS + trans_proto_stats.update(TPE_DATA_PKT_SEND, buf->pkt); +#endif + + this->sendOnce(buf->pkt); + + ic_statistics.sndPktNum++; + +#ifdef AMS_VERBOSE_LOGGING + logPkt("SEND PKT DETAIL", buf->pkt); +#endif + + this->sentSeq = buf->pkt->seq; + } +} + +/* + * handleDisorderPacket + * Called by rx thread to assemble and send a disorder message. + * + * In current implementation, we limit the number of lost packet sequence numbers + * in the disorder message by the MIN_PACKET_SIZE. There are two reasons here: + * + * 1) The maximal number of lost packet sequence numbers are actually bounded by the + * receive queue depth whose maximal value is very large. Since we share the packet + * receive and ack receive in the background thread, the size of disorder should be + * also limited by the max packet size. + * 2) We can use Gp_max_packet_size here to limit the number of lost packet sequence numbers. + * But considering we do not want to let senders send many packets when getting a lost + * message. Here we use MIN_PACKET_SIZE. + * + * + * the format of a disorder message: + * I) pkt header + * - seq -> packet sequence number that triggers the disorder message + * - extraSeq -> the largest seq of the received packets + * - flags -> UDPIC_FLAGS_DISORDER + * - len -> sizeof(icpkthdr) + sizeof(uint32) * (lost pkt count) + * II) content + * - an array of lost pkt sequence numbers (uint32) + * + */ +void +UDPConn::handleDisorderPacket(int pos, uint32 tailSeq, icpkthdr *pkt) +{ + int start = 0; + uint32 lostPktCnt = 0; + uint32 *curSeq = (uint32 *) &rx_control_info.disorderBuffer[1]; + uint32 maxSeqs = MAX_SEQS_IN_DISORDER_ACK; + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "PROCESS_DISORDER PKT BEGIN:"); +#endif + + start = this->pkt_q_tail; + + while (start != pos && lostPktCnt < maxSeqs) + { + if (this->pkt_q[start] == NULL) + { + *curSeq = tailSeq; + lostPktCnt++; + curSeq++; + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "PROCESS_DISORDER add seq [%d], lostPktCnt %d", *curSeq, lostPktCnt); +#endif + } + + tailSeq++; + start = (start + 1) % this->pkt_q_capacity; + } + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "PROCESS_DISORDER PKT END:"); +#endif + + /* when reaching here, cnt must not be 0 */ + this->sendDisorderAck(pkt->seq, this->conn_info.seq - 1, lostPktCnt); +} + +/* + * handleAckForDisorderPkt + * Called by sender to deal with acks for disorder packet. + */ +bool +UDPConn::handleAckForDisorderPkt(icpkthdr *pkt) +{ + ICBufferLink *link = NULL; + ICBuffer *buf = NULL; + ICBufferLink *next = NULL; + uint64 now = getCurrentTime(); + uint32 *curLostPktSeq = 0; + int lostPktCnt = 0; + static uint32 times = 0; + static uint32 lastSeq = 0; + bool shouldSendBuffers = false; + + if (pkt->extraSeq != lastSeq) + { + lastSeq = pkt->extraSeq; + times = 0; + return false; + } + else + { + times++; + if (times != 2) + return false; + } + + curLostPktSeq = (uint32 *) &pkt[1]; + lostPktCnt = (pkt->len - sizeof(icpkthdr)) / sizeof(uint32); + + /* + * Resend all the missed packets and remove received packets from queues + */ + + link = this->unackQueue.first(); + buf = GET_ICBUFFER_FROM_PRIMARY(link); + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "DISORDER: pktlen %d cnt %d pktseq %d first loss %d buf %p", + pkt->len, lostPktCnt, pkt->seq, *curLostPktSeq, buf); + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + { + this->unackQueue.icBufferListLog(); + this->sndQueue.icBufferListLog(); + } +#endif + + /* + * iterate the unack queue + */ + while (!this->unackQueue.is_head(link) && buf->pkt->seq <= pkt->seq && lostPktCnt > 0) + { +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "DISORDER: bufseq %d curlostpkt %d cnt %d buf %p pkt->seq %d", + buf->pkt->seq, *curLostPktSeq, lostPktCnt, buf, pkt->seq); +#endif + + if (buf->pkt->seq == pkt->seq) + { + this->handleAckedPacket(buf, now); + shouldSendBuffers = true; + break; + } + + if (buf->pkt->seq == *curLostPktSeq) + { + /* this is a lost packet, retransmit */ + + buf->nRetry++; + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + { + ICBufferList *alist = &unack_queue_ring.slots[buf->unackQueueRingSlot]; + buf = alist->remove(buf); + putIntoUnackQueueRing(&unack_queue_ring, buf, + this->computeExpirationPeriod(buf->nRetry), now); + } +#ifdef TRANSFER_PROTOCOL_STATS + trans_proto_stats.update(TPE_DATA_PKT_SEND, buf->pkt); +#endif + + Assert(this == buf->conn); + this->sendOnce(buf->pkt); + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "RESEND a buffer for DISORDER: seq %d", buf->pkt->seq); + logPkt("DISORDER RESEND DETAIL ", buf->pkt); +#endif + + ic_statistics.retransmits++; + curLostPktSeq++; + lostPktCnt--; + + link = link->next; + buf = GET_ICBUFFER_FROM_PRIMARY(link); + } + else if (buf->pkt->seq < *curLostPktSeq) + { + /* remove packet already received. */ + + next = link->next; + this->handleAckedPacket(buf, now); + shouldSendBuffers = true; + link = next; + buf = GET_ICBUFFER_FROM_PRIMARY(link); + } + else /* buf->pkt->seq > *curPktSeq */ + { + /* + * this case is introduced when the disorder message tell you a + * pkt is lost. But when we handle this message, a message (for + * example, duplicate ack, or another disorder message) arriving + * before this message already removed the pkt. + */ + curLostPktSeq++; + lostPktCnt--; + } + } + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + { + snd_control_info.ssthresh = Max(snd_control_info.cwnd / 2, snd_control_info.minCwnd); + snd_control_info.cwnd = snd_control_info.ssthresh; + } +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "After DISORDER: sndQ %d unackQ %d", this->sndQueue.length(), this->unackQueue.length()); + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + { + this->unackQueue.icBufferListLog(); + this->sndQueue.icBufferListLog(); + } +#endif + + return shouldSendBuffers; +} + +/* + * handleAckForDuplicatePkt + * Called by sender to deal with acks for duplicate packet. + * + */ +bool +UDPConn::handleAckForDuplicatePkt(icpkthdr *pkt) +{ + ICBufferLink *link = NULL; + ICBuffer *buf = NULL; + ICBufferLink *next = NULL; + uint64 now = getCurrentTime(); + bool shouldSendBuffers = false; + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "RESEND the unacked buffers in the queue due to %s", pkt->len == 0 ? "PROCESS_START_RACE" : "DISORDER"); +#endif + + if (pkt->seq <= pkt->extraSeq) + { + /* Indicate a bug here. */ + LOG(LOG_ERROR, "invalid duplicate message: seq %d extraSeq %d", pkt->seq, pkt->extraSeq); + return false; + } + + link = this->unackQueue.first(); + buf = GET_ICBUFFER_FROM_PRIMARY(link); + + /* deal with continuous pkts */ + while (!this->unackQueue.is_head(link) && (buf->pkt->seq <= pkt->extraSeq)) + { + next = link->next; + this->handleAckedPacket(buf, now); + shouldSendBuffers = true; + link = next; + buf = GET_ICBUFFER_FROM_PRIMARY(link); + } + + /* deal with the single duplicate packet */ + while (!this->unackQueue.is_head(link) && buf->pkt->seq <= pkt->seq) + { + next = link->next; + if (buf->pkt->seq == pkt->seq) + { + this->handleAckedPacket(buf, now); + shouldSendBuffers = true; + break; + } + link = next; + buf = GET_ICBUFFER_FROM_PRIMARY(link); + } + + return shouldSendBuffers; +} + +/* + * checkNetworkTimeout + * check network timeout case. + */ +void +UDPConn::checkNetworkTimeout(ICBuffer *buf, uint64 now, bool *networkTimeoutIsLogged) +{ + /* + * Using only the time to first sent time to decide timeout is not enough, + * since there is a possibility the sender process is not scheduled or + * blocked by OS for a long time. In this case, only a few times are + * tried. Thus, the GUC Gp_interconnect_min_retries_before_timeout is + * added here. + */ + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC && + buf->nRetry % session_param.Gp_interconnect_debug_retry_interval == 0) + { + LOG(INFO, "resending packet (seq %d) to %s (pid %d cid %d) with %d retries in %lu seconds", + buf->pkt->seq, buf->conn->remoteHostAndPort, buf->pkt->dstPid, buf->pkt->dstContentId, buf->nRetry, + (now - buf->sentTime) / 1000 / 1000); + } + + if ((buf->nRetry > session_param.Gp_interconnect_min_retries_before_timeout) && + (now - buf->sentTime) > ((uint64) session_param.Gp_interconnect_transmit_timeout * 1000 * 1000)) + { + std::stringstream ss; + ss <<"ERROR, interconnect encountered a network error, please check your network"<< + "Failed to send packet (seq "<pkt->seq<<") to "<conn->remoteHostAndPort<< + " (pid "<pkt->dstPid<<" cid "<pkt->dstContentId<<") after "<nRetry<< + " retries in "<nRetry >= session_param.Gp_interconnect_min_retries_before_timeout) && !(*networkTimeoutIsLogged)) + { + LOG(WARNING, "interconnect may encountered a network error, please check your network" + "Failed to send packet (seq %d) to %s (pid %d cid %d) after %d retries.", + buf->pkt->seq, buf->conn->remoteHostAndPort, buf->pkt->dstPid, buf->pkt->dstContentId, buf->nRetry); + *networkTimeoutIsLogged = true; + } +} + +/* + * checkExpiration + * Check whether packets expire. If a packet expires, resend the packet, + * and adjust its position in the unack queue ring. + * + */ +void +UDPConn::checkExpiration(ICChunkTransportState *transportStates, uint64 now) +{ + /* check for expiration */ + int count = 0; + int retransmits = 0; + UDPConn *currBuffConn = NULL; + + Assert(unack_queue_ring.currentTime != 0); + while (now >= (unack_queue_ring.currentTime + TIMER_SPAN) && count++ < UNACK_QUEUE_RING_SLOTS_NUM) + { + /* expired, need to resend them */ + ICBuffer *curBuf = NULL; + + while (true) + { + ICBufferList *alist = &unack_queue_ring.slots[unack_queue_ring.idx]; + curBuf = alist->pop(); + if (curBuf == NULL) + break; + UDPConn *conn = static_cast(curBuf->conn); + curBuf->nRetry++; + putIntoUnackQueueRing(&unack_queue_ring, + curBuf, + conn->computeExpirationPeriod(curBuf->nRetry), now); + +#ifdef TRANSFER_PROTOCOL_STATS + trans_proto_stats.update(TPE_DATA_PKT_SEND, curBuf->pkt); +#endif + + conn->sendOnce(curBuf->pkt); + + currBuffConn = conn; + + retransmits++; + ic_statistics.retransmits++; + currBuffConn->stat_count_resent++; + currBuffConn->stat_max_resent = Max(currBuffConn->stat_max_resent, + currBuffConn->stat_count_resent); + + UDPConn::checkNetworkTimeout(curBuf, now, &transportStates->networkTimeoutIsLogged); + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "RESEND pkt with seq %d (retry %d, rtt %lu) to route %d", + curBuf->pkt->seq, curBuf->nRetry, currBuffConn->rtt, currBuffConn->route); + logPkt("RESEND PKT in checkExpiration", curBuf->pkt); +#endif + } + + unack_queue_ring.currentTime += TIMER_SPAN; + unack_queue_ring.idx = (unack_queue_ring.idx + 1) % (UNACK_QUEUE_RING_SLOTS_NUM); + } + + /* + * deal with case when there is a long time this function is not called. + */ + unack_queue_ring.currentTime = now - (now % TIMER_SPAN); + if (retransmits > 0) + { + snd_control_info.ssthresh = Max(snd_control_info.cwnd / 2, snd_control_info.minCwnd); + snd_control_info.cwnd = snd_control_info.minCwnd; + } +} + +/* + * checkDeadlock + * Check whether deadlock occurs on a connection. + * + * What this function does is to send a status query message to rx thread when + * the connection has not received any acks for some time. This is to avoid + * potential deadlock when there are continuous ack losses. Packet resending + * logic does not help avoiding deadlock here since the packets in the unack + * queue may already been removed when the sender knows that they have been + * already buffered in the receiver side queue. + * + * Some considerations on deadlock check time period: + * + * Potential deadlock occurs rarely. According to our experiments on various + * workloads and hardware. It occurred only when fault injection is enabled + * and a large number packets and acknowledgments are discarded. Thus, here we + * use a relatively large deadlock check period. + * + */ +void +UDPConn::checkDeadlock() +{ + uint64 deadlockCheckTime; + + if (this->unackQueue.length() == 0 && this->capacity == 0 && this->sndQueue.length() > 0) + { + /* we must have received some acks before deadlock occurs. */ + Assert(this->deadlockCheckBeginTime > 0); + +#ifdef USE_ASSERT_CHECKING + if (udp_testmode) + { + deadlockCheckTime = 100000; + } + else +#endif + { + deadlockCheckTime = DEADLOCK_CHECKING_TIME; + } + + uint64 now = getCurrentTime(); + + /* request the capacity to avoid the deadlock case */ + if (((now - ic_control_info.lastDeadlockCheckTime) > deadlockCheckTime) && + ((now - this->deadlockCheckBeginTime) > deadlockCheckTime)) + { + this->sendStatusQueryMessage(this->conn_info.seq - 1); + ic_control_info.lastDeadlockCheckTime = now; + ic_statistics.statusQueryMsgNum++; + + /* check network error. */ + if ((now - this->deadlockCheckBeginTime) > ((uint64) session_param.Gp_interconnect_transmit_timeout * 1000 * 1000)) + { + std::stringstream ss; + ss <<"ERROR, interconnect encountered a network error, please check your network"<< + "Did not get any response from "<stat_count_resent++; + this->stat_max_resent = Max(this->stat_max_resent, this->stat_count_resent); +} + +/* + * checkExpirationCapacityFC + * Check expiration for capacity based flow control method. + */ +void +UDPConn::checkExpirationCapacityFC(int timeout) +{ + if (this->unackQueue.length() == 0) + return; + + uint64 now = getCurrentTime(); + uint64 elapsed = now - ic_control_info.lastPacketSendTime; + + if (elapsed >= ((uint64) timeout * 1000)) + { + ICBufferLink *bufLink = this->unackQueue.first(); + ICBuffer *buf = GET_ICBUFFER_FROM_PRIMARY(bufLink); + + Assert(this == buf->conn); + this->sendOnce(buf->pkt); + + buf->nRetry++; + ic_control_info.lastPacketSendTime = now; + + this->updateRetransmitStatistics(); + checkNetworkTimeout(buf, now, &entry_->state->networkTimeoutIsLogged); + } +} + +/* + * checkExceptions + * Check exceptions including packet expiration, deadlock, bg thread error, NIC failure... + * Caller should start from 0 with retry, so that the expensive check for deadlock and + * QD connection can be avoided in a healthy state. + */ +void +UDPConn::checkExceptions(int retry, int timeout) +{ + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_CAPACITY_IC + /* || conn->state == mcsSetupOutgoingConnection */ ) + { + this->checkExpirationCapacityFC(timeout); + } + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + { + uint64 now = getCurrentTime(); + + if (now - ic_control_info.lastExpirationCheckTime > uint64(TIMER_CHECKING_PERIOD)) + { + UDPConn::checkExpiration(this->entry_->state, now); + ic_control_info.lastExpirationCheckTime = now; + } + } + + if ((retry & 0x3) == 2) + { + this->checkDeadlock(); + + checkRxThreadError(); + CHECK_INTERRUPTS(this->entry_->state); + } + + /* + * 1. NIC on master (and thus the QD connection) may become bad, check it. + * 2. Postmaster may become invalid, check it + * + * We check modulo 2 to correlate with the deadlock check above at the + * initial iteration. + */ + if ((retry & 0x3f) == 2) + { + checkQDConnectionAlive(); + CHECK_POSTMASTER_ALIVE(); + } +} + +/* + * computeTimeout + * Compute timeout value in ms. + */ +int +UDPConn::computeTimeout(int retry) +{ + if (this->unackQueue.length() == 0) + return TIMER_CHECKING_PERIOD; + + ICBufferLink *bufLink = this->unackQueue.first(); + ICBuffer *buf = GET_ICBUFFER_FROM_PRIMARY(bufLink); + + if (buf->nRetry == 0 && retry == 0) + return 0; + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + return TIMER_CHECKING_PERIOD; + + /* for capacity based flow control */ + return TIMEOUT(buf->nRetry); +} + +/* + * UDPConn::Send + * is used to send a tcItem to a single destination. Tuples often are + * *very small* we aggregate in our local buffer before sending into the kernel. + * + * PARAMETERS + * conn - UDPConn that the tcItem is to be sent to. + * tcItem - message to be sent. + * motionId - Node Motion Id. + */ +void +UDPConn::Send(DataBlock *data) +{ + int length = data->len; + int retry = 0; + bool doCheckExpiration = false; + bool gotStops = false; + + Assert(this->msgSize > 0); + +#ifdef AMS_VERBOSE_LOGGING + LOG(DEBUG3, "UDPConn::Send(): msgSize %d this chunk length %d this seq %d", + this->msgSize, data->len, this->conn_info.seq); +#endif + + if (this->msgSize + length <= global_param.Gp_max_packet_size) + { + memcpy(this->pBuff + this->msgSize, data->pos, data->len); + this->msgSize += length; + + this->tupleCount++; + return; + } + + /* prepare this for transmit */ + ic_statistics.totalCapacity += this->capacity; + ic_statistics.capacityCountingTime++; + + /* try to send it */ + this->prepareXmit(); + this->sndQueue.append(this->curBuff); + this->sendBuffers(); + + /* get a new buffer */ + this->curBuff = NULL; + this->pBuff = NULL; + + uint64 now = getCurrentTime(); + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_CAPACITY_IC) + doCheckExpiration = false; + else + doCheckExpiration = (now - ic_control_info.lastExpirationCheckTime) > MAX_TIME_NO_TIMER_CHECKING ? true : false; + + ic_control_info.lastPacketSendTime = 0; + this->deadlockCheckBeginTime = now; + + while (doCheckExpiration || (this->curBuff = snd_buffer_pool.get(this)) == NULL) + { + int timeout = (doCheckExpiration ? 0 : this->computeTimeout(retry)); + + if (this->entry_->pollAcks(timeout)) + { + bool rs = this->entry_->handleAcks(); + if (rs) + { + /* + * We make sure that we deal with the stop messages only after + * we get a buffer. Otherwise, if the stop message is not for + * this connection, this will lead to an error for the + * following data sending of this connection. + */ + gotStops = true; + } + } + this->checkExceptions(retry++, timeout); + doCheckExpiration = false; + } + + this->pBuff = (uint8 *) this->curBuff->pkt; + + if (gotStops) + { + /* handling stop message will make some connection not active anymore */ + this->entry_->handleStopMsgs(); + + if (!this->stillActive) + return; + } + + /* reinitialize connection */ + this->tupleCount = 0; + this->msgSize = sizeof(this->conn_info); + + /* now we can copy the input to the new buffer */ + memcpy(this->pBuff + this->msgSize, data->pos, data->len); + this->msgSize += length; + + this->tupleCount++; +} + +/* + * C++ implement for udp protocol. + */ +UDPConn::UDPConn(TransportEntry *entry) +{ + /* the field of MotionConn */ + this->sockfd = -1; + this->pBuff = nullptr; + this->msgSize = 0; + this->msgPos = nullptr; + this->recvBytes = 0; + this->tupleCount = 0; + this->stillActive = false; + this->stopRequested = false; + this->cdbProc = nullptr; + this->remoteContentId = -1; + this->remoteHostAndPort[0] = '\0'; + this->opaque_data = nullptr; + this->sent_record_typmod = 0; + + /* the field of UDPConn */ + this->capacity = -1; + this->sentSeq = 0; + this->receivedAckSeq = 0; + this->consumedSeq = 0; + this->rtt = 0; + this->dev = 0; + this->deadlockCheckBeginTime = -1; + this->curBuff = nullptr; + this->route = 0; + this->peer_len = 0; + this->pkt_q_capacity = 0; + this->pkt_q_size = 0; + this->pkt_q_head = -1; + this->pkt_q_tail = -1; + this->pkt_q = nullptr; + this->stat_total_ack_time = 0; + this->stat_count_acks = 0; + this->stat_max_ack_time = 0; + this->stat_min_ack_time = 0; + this->stat_count_resent = 0; + this->stat_max_resent = 0; + this->stat_count_dropped = 0; + + this->state = mcsNull; + this->sockfd = -1; + this->msgSize = 0; + this->tupleCount = 0; + this->stillActive = false; + this->stopRequested = false; + this->cdbProc = NULL; + this->opaque_data = NULL; + this->sent_record_typmod = 0; + + /* + * "UDPConn dummyconn(NULL)" will be called by handleMismatch() in rx thread, + * it will lead to the error: "palloc called from thread". So code below should + * be called in MakeSendEntry() and MakeRecvEntry(); + * if (global_param.createOpaqueDataCallback) + * this->opaque_data = global_param.createOpaqueDataCallback(); + */ + + this->entry_ = entry; +} + +UDPConn* +TransportEntry::GetConn(int index) +{ + Assert(index >= 0); + + if (index >= 0 && static_cast(index) < this->conns_.size()) + return this->conns_[index].get(); + + std::stringstream ss; + ss << "invalid index for conn, index: " << index << ", conn size: " << conns_.size(); + throw ICInvalidIndex(ss.str(), __FILE__, __LINE__); +} + +/* + * aggregateStatistics + * aggregate statistics. + */ +void +TransportEntry::aggregateStatistics() +{ + /* + * We first clear the stats, and then compute new stats by aggregating the + * stats from each connection. + */ + this->stat_total_ack_time = 0; + this->stat_count_acks = 0; + this->stat_max_ack_time = 0; + this->stat_min_ack_time = ~((uint64) 0); + this->stat_count_resent = 0; + this->stat_max_resent = 0; + this->stat_count_dropped = 0; + + Assert(this->numConns == static_cast(this->conns_.size())); + for (int connNo = 0; connNo < this->numConns; connNo++) + { + UDPConn *conn = this->GetConn(connNo); + + this->stat_total_ack_time += conn->stat_total_ack_time; + this->stat_count_acks += conn->stat_count_acks; + this->stat_max_ack_time = Max(this->stat_max_ack_time, conn->stat_max_ack_time); + this->stat_min_ack_time = Min(this->stat_min_ack_time, conn->stat_min_ack_time); + this->stat_count_resent += conn->stat_count_resent; + this->stat_max_resent = Max(this->stat_max_resent, conn->stat_max_resent); + this->stat_count_dropped += conn->stat_count_dropped; + } +} + +/* + * handleAck + * handle acks incoming from our upstream peers. + * + * if we receive a stop message, return true (caller will clean up). + */ +bool +TransportEntry::handleAcks() +{ + bool ret = false; + UDPConn *ackConn = NULL; + int n; + + struct sockaddr_storage peer; + socklen_t peerlen; + + struct icpkthdr *pkt = snd_control_info.ackBuffer; + bool shouldSendBuffers = false; + + for (;;) + { + + /* ready to read on our socket ? */ + peerlen = sizeof(peer); + n = recvfrom(this->txfd, (char *) pkt, MIN_PACKET_SIZE, 0, + (struct sockaddr *) &peer, &peerlen); + + if (n < 0) + { + if (errno == EWOULDBLOCK) /* had nothing to read. */ + { + this->aggregateStatistics(); + return ret; + } + + CHECK_INTERRUPTS(this->state); + + if (errno == EINTR) + continue; + + throw ICNetworkException("ERROR, interconnect error waiting for peer ack, During recvfrom() call.", __FILE__, __LINE__); + } + else if (n < int(sizeof(struct icpkthdr))) + { + continue; + } + else if (n != int(pkt->len)) + { + continue; + } + + /* + * check the CRC of the payload. + */ + if (session_param.gp_interconnect_full_crc) + { + if (!checkCRC(pkt)) + { + ic_atomic_add_fetch_u32((ic_atomic_uint32 *) &ic_statistics.crcErrors, 1); + if (IC_DEBUG2 >= session_param.log_min_messages) + LOG(DEBUG2, "received network data error, dropping bad packet, user data unaffected."); + continue; + } + } + + /* + * read packet, is this the ack we want ? + */ + if (pkt->srcContentId == global_param.segindex && + pkt->srcPid == global_param.MyProcPid && + pkt->srcListenerPort == (UDP2_GetListenPortUDP()) && + pkt->sessionId == session_param.gp_session_id && + pkt->icId == this->state->icInstanceId) + { + Assert(pkt->motNodeId == motNodeId); + LOG(DEBUG3, "TransportEntry::handleAcks(): icid: %d, motNodeId: %d, srcSeg: %d, dstSeg: %d, srcPid: %d, dstPid: %d, seq: %d, extraSeq: %d, len: %d, flags: %s", + pkt->icId, pkt->motNodeId, pkt->srcContentId, pkt->dstContentId, pkt->srcPid, pkt->dstPid, pkt->seq, pkt->extraSeq, pkt->len, flags2txt(pkt->flags)); + + /* + * packet is for me. Note here we do not need to get a connection + * lock here, since background rx thread only read the hash table. + */ + ackConn = ic_control_info.connHtab.find(pkt); + if (ackConn == NULL) + { + LOG(INFO, "Received ack for unknown connection (flags 0x%x)", pkt->flags); + continue; + } + + ackConn->stat_count_acks++; + ic_statistics.recvAckNum++; + + uint64 now = getCurrentTime(); + + ackConn->deadlockCheckBeginTime = now; + + /* + * We simply disregard pkt losses (NAK) due to process start race + * (that is, sender is started earlier than receiver. rx + * background thread may receive packets when connections are not + * created yet). + * + * Another option is to resend the packet immediately, but + * experiments do not show any benefits. + */ + if (pkt->flags & UDPIC_FLAGS_NAK) + continue; + + while (true) + { + if (pkt->flags & UDPIC_FLAGS_CAPACITY) + { + if (pkt->extraSeq > ackConn->consumedSeq) + { + ackConn->capacity += pkt->extraSeq - ackConn->consumedSeq; + ackConn->consumedSeq = pkt->extraSeq; + shouldSendBuffers = true; + } + } + else if (pkt->flags & UDPIC_FLAGS_DUPLICATE) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "GOTDUPACK [seq %d] from route %d; srcpid %d dstpid %d cmd %d flags 0x%x connseq %d", + pkt->seq, ackConn->route, pkt->srcPid, pkt->dstPid, pkt->icId, pkt->flags, ackConn->conn_info.seq); + + shouldSendBuffers |= (ackConn->handleAckForDuplicatePkt(pkt)); + break; + } + else if (pkt->flags & UDPIC_FLAGS_DISORDER) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "GOTDISORDER [seq %d] from route %d; srcpid %d dstpid %d cmd %d flags 0x%x connseq %d", + pkt->seq, ackConn->route, pkt->srcPid, pkt->dstPid, pkt->icId, pkt->flags, ackConn->conn_info.seq); + + shouldSendBuffers |= (ackConn->handleAckForDisorderPkt(pkt)); + break; + } + + /* + * don't get out of the loop if pkt->seq equals to + * ackConn->receivedAckSeq, need to check UDPIC_FLAGS_STOP + * flag + */ + if (pkt->seq < ackConn->receivedAckSeq) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "ack with bad seq?! expected (%d, %d] got %d flags 0x%x, capacity %d consumedSeq %d", + ackConn->receivedAckSeq, ackConn->sentSeq, pkt->seq, pkt->flags, ackConn->capacity, ackConn->consumedSeq); + break; + } + + /* haven't gotten a stop request, maybe this is one ? */ + if ((pkt->flags & UDPIC_FLAGS_STOP) && !ackConn->stopRequested && ackConn->stillActive) + { +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "got ack with stop; srcpid %d dstpid %d cmd %d flags 0x%x pktseq %d connseq %d", + pkt->srcPid, pkt->dstPid, pkt->icId, pkt->flags, pkt->seq, ackConn->conn_info.seq); +#endif + ackConn->stopRequested = true; + ackConn->conn_info.flags |= UDPIC_FLAGS_STOP; + ret = true; + /* continue to deal with acks */ + } + + if (pkt->seq == ackConn->receivedAckSeq) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "ack with bad seq?! expected (%d, %d] got %d flags 0x%x, capacity %d consumedSeq %d", + ackConn->receivedAckSeq, ackConn->sentSeq, pkt->seq, pkt->flags, ackConn->capacity, ackConn->consumedSeq); + break; + } + + /* deal with a regular ack. */ + if (pkt->flags & UDPIC_FLAGS_ACK) + { + ICBufferLink *link = NULL; + ICBufferLink *next = NULL; + ICBuffer *buf = NULL; + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "GOTACK [seq %d] from route %d; srcpid %d dstpid %d cmd %d flags 0x%x connseq %d", + pkt->seq, ackConn->route, pkt->srcPid, pkt->dstPid, pkt->icId, pkt->flags, ackConn->conn_info.seq); +#endif + + link = ackConn->unackQueue.first(); + buf = GET_ICBUFFER_FROM_PRIMARY(link); + + while (!ackConn->unackQueue.is_head(link) && buf->pkt->seq <= pkt->seq) + { + next = link->next; + ackConn->handleAckedPacket(buf, now); + shouldSendBuffers = true; + link = next; + buf = GET_ICBUFFER_FROM_PRIMARY(link); + } + } + break; + } + + /* + * When there is a capacity increase or some outstanding buffers + * removed from the unack queue ring, we should try to send + * buffers for the connection. Even when stop is received, we + * still send here, since in STOP/EOS race case, we may have been + * in EOS sending logic and will not check stop message. + */ + if (shouldSendBuffers) + ackConn->sendBuffers(); + } + else + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "handleAck: not the ack we're looking for (flags 0x%x)...mot(%d) content(%d:%d) srcpid(%d:%d) " + "dstpid(%d) srcport(%d:%d) dstport(%d) sess(%d:%d) cmd(%d:%d)", + pkt->flags, pkt->motNodeId, pkt->srcContentId, global_param.segindex, + pkt->srcPid, global_param.MyProcPid, pkt->dstPid, pkt->srcListenerPort, + (UDP2_GetListenPortUDP()), pkt->dstListenerPort, pkt->sessionId, session_param.gp_session_id, + pkt->icId, this->state->icInstanceId); + } + } + + return ret; +} + +/* + * handleStopMsgs + * handle stop messages. + * + */ +void +TransportEntry::handleStopMsgs() +{ + int i = 0; + +#ifdef AMS_VERBOSE_LOGGING + LOG(DEBUG3, "handleStopMsgs: node %d", this->motNodeId); +#endif + + while (i < this->numConns) + { + UDPConn *conn = this->GetConn(i); + +#ifdef AMS_VERBOSE_LOGGING + LOG(DEBUG3, "handleStopMsgs: node %d route %d %s %s", this->motNodeId, conn->route, + (conn->stillActive ? "active" : "NOT active"), (conn->stopRequested ? "stop requested" : "")); + LOG(DEBUG3, "handleStopMsgs: node %d route %d msgSize %d", + this->motNodeId, conn->route, conn->msgSize); +#endif + + /* + * MPP-2427: we're guaranteed to have recently flushed, but this might + * not be empty (if we got a stop on a buffer that wasn't the one we + * were sending) ... empty it first so the outbound buffer is empty + * when we get here. + */ + conn->handleStop(); + + i++; + + if (i == this->numConns) + { + if (this->pollAcks(0)) + { + bool rs = this->handleAcks(); + if (rs) + { + /* more stops found, loop again. */ + i = 0; + continue; + } + } + } + } +} + +/* + * pollAcks + * Timeout polling of acks + */ +bool +TransportEntry::pollAcks(int timeout) +{ + struct pollfd nfd; + int n; + + nfd.fd = this->txfd; + nfd.events = POLLIN; + + n = poll(&nfd, 1, timeout); + if (n < 0) + { + CHECK_INTERRUPTS(this->state); + + if (errno == EINTR) + return false; + + throw ICNetworkException("ERROR, interconnect error waiting for peer ack During poll() call.", __FILE__, __LINE__); + /* not reached */ + } + + if (n == 0) /* timeout */ + { + return false; + } + + /* got an ack to handle (possibly a stop message) */ + if (n == 1 && (nfd.events & POLLIN)) + { + return true; + } + + return false; +} + +std::unique_ptr +TransportEntry::MakeRecvEntry(CChunkTransportStateImpl *state, + int icid, + ICExecSlice *sendSlice, + ICExecSlice *recvSlice) +{ + int incoming_count = 0; + int expectedTotalIncoming = 0; + + Assert(sendSlice->sliceIndex > 0); + Assert(recvSlice->sliceIndex >= 0); + + int motNodeID = sendSlice->sliceIndex; + int numConns = sendSlice->numPrimaryProcesses; + + std::unique_ptr pEntry = + std::make_unique(state, motNodeID, numConns, sendSlice, recvSlice); + + pEntry->conns_.resize(numConns); + for (int i = 0; i < numConns; ++i) + { + pEntry->conns_[i] = std::make_unique(pEntry.get()); + UDPConn *conn = pEntry->conns_[i].get(); + + Assert(i < sendSlice->numPrimaryProcesses); + ICCdbProcess *cdbProc = sendSlice->primaryProcesses + i; + if (cdbProc->valid) + { + conn->cdbProc = cdbProc; + + expectedTotalIncoming++; + + /* rx_buffer_queue */ + conn->pkt_q_capacity = session_param.Gp_interconnect_queue_depth; + conn->pkt_q_size = 0; + conn->pkt_q_head = 0; + conn->pkt_q_tail = 0; + + if (global_param.simpleFaultInjectorCallback) + global_param.simpleFaultInjectorCallback("interconnect_setup_palloc"); + + conn->pkt_q = (uint8 **) ic_malloc0(conn->pkt_q_capacity * sizeof(uint8 *)); + + /* update the max buffer count of our rx buffer pool. */ + rx_buffer_pool.maxCount += conn->pkt_q_capacity; + + /* + * connection header info (defining characteristics of this + * connection) + */ + memset(&conn->conn_info, 0, sizeof(conn->conn_info)); + conn->route = i; + + conn->conn_info.seq = 1; + conn->stillActive = true; + + incoming_count++; + + conn->conn_info.motNodeId = pEntry->motNodeId; + conn->conn_info.recvSliceIndex = recvSlice->sliceIndex; + conn->conn_info.sendSliceIndex = sendSlice->sliceIndex; + + conn->conn_info.srcContentId = conn->cdbProc->contentid; + conn->conn_info.dstContentId = global_param.segindex; + + conn->conn_info.srcListenerPort = conn->cdbProc->listenerPort; + conn->conn_info.dstListenerPort = UDP2_GetListenPortUDP(); + conn->conn_info.srcPid = conn->cdbProc->pid; + conn->conn_info.dstPid = global_param.MyProcPid; + conn->conn_info.sessionId = session_param.gp_session_id; + conn->conn_info.icId = icid; + conn->conn_info.flags = UDPIC_FLAGS_RECEIVER_TO_SENDER; + + ic_control_info.connHtab.add(conn); + + if (global_param.createOpaqueDataCallback) + conn->opaque_data = global_param.createOpaqueDataCallback(); + } + } + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + { + LOG(DEBUG1, "SetupUDPInterconnect will activate " + "%d incoming, %d expect incoming for ic_instancce_id %d.", + incoming_count, expectedTotalIncoming, icid); + } + + return pEntry; +} + +std::unique_ptr +TransportEntry::MakeSendEntry(CChunkTransportStateImpl *state, + int icid, + ICExecSlice *sendSlice, + ICExecSlice *recvSlice) +{ + int outgoing_count = 0; + int expectedTotalOutgoing = 0; + + Assert(sendSlice->sliceIndex > 0); + Assert(recvSlice->sliceIndex >= 0); + + int motNodeID = sendSlice->sliceIndex; + int numConns = recvSlice->numPrimaryProcesses; + + std::unique_ptr pEntry = + std::make_unique(state, motNodeID, numConns, sendSlice, recvSlice); + + pEntry->txfd = ICSenderSocket; + pEntry->txport = ICSenderPort; + pEntry->txfd_family = ICSenderFamily; + + int route = 0; + pEntry->conns_.resize(numConns); + + for (int i = 0; i < numConns; ++i) + { + pEntry->conns_[i] = std::make_unique(pEntry.get()); + UDPConn *conn = pEntry->conns_[i].get(); + + /* + * Setup a MotionConn entry for each of our outbound connections. Request + * a connection to each receiving backend's listening port. NB: Some + * mirrors could be down & have no CdbProcess entry. + */ + ICCdbProcess *cdbProc = recvSlice->primaryProcesses + i; + if (cdbProc->valid) + { + conn->cdbProc = cdbProc; + conn->sndQueue.init(ICBufferListType_Primary); + conn->unackQueue.init(ICBufferListType_Primary); + conn->capacity = session_param.Gp_interconnect_queue_depth; + + /* send buffer pool must be initialized before this. */ + snd_buffer_pool.maxCount += session_param.Gp_interconnect_snd_queue_depth; + snd_control_info.cwnd += 1; + conn->curBuff = snd_buffer_pool.get(conn); + + /* should have at least one buffer for each connection */ + Assert(conn->curBuff != NULL); + + conn->rtt = DEFAULT_RTT; + conn->dev = DEFAULT_DEV; + conn->deadlockCheckBeginTime = 0; + conn->tupleCount = 0; + conn->msgSize = sizeof(conn->conn_info); + conn->sentSeq = 0; + conn->receivedAckSeq = 0; + conn->consumedSeq = 0; + conn->pBuff = (uint8 *) conn->curBuff->pkt; + conn->state = mcsSetupOutgoingConnection; + conn->route = route++; + expectedTotalOutgoing++; + + setupOutgoingUDPConnection(icid, pEntry.get(), conn); + outgoing_count++; + + if (global_param.createOpaqueDataCallback) + conn->opaque_data = global_param.createOpaqueDataCallback(); + } + } + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + { + LOG(DEBUG1, "SetupUDPInterconnect will activate " + "%d outgoing, %d expect outgoing routes for ic_instancce_id %d.", + outgoing_count, expectedTotalOutgoing, icid); + } + + return pEntry; +} + +TransportEntry::TransportEntry(CChunkTransportStateImpl *state, + int motNodeID, + int numConns, + ICExecSlice *sendSlice, + ICExecSlice *recvSlice) +{ + /* the field of CChunkTransportStateEntry */ + this->valid = false; + this->conns = nullptr; + + /* the field of TransportEntry */ + this->txfd = -1; + this->txfd_family = -1; + this->txport = 0; + this->sendingEos = false; + this->stat_total_ack_time = 0; + this->stat_count_acks = 0; + this->stat_max_ack_time = 0; + this->stat_min_ack_time = 0; + this->stat_count_resent = 0; + this->stat_max_resent = 0; + this->stat_count_dropped = 0; + + this->motNodeId = motNodeID; + this->numConns = numConns; + this->scanStart = 0; + this->sendSlice = sendSlice; + this->recvSlice = recvSlice; + this->state = state; + this->valid = true; +} + +/* + * receiveChunksUDPIFC + * Receive chunks from the senders + * + * MUST BE CALLED WITH ic_control_info.lock LOCKED. + */ +void +TransportEntry::receiveChunksUDPIFC(int16 *srcRoute, + UDPConn *conn, + GetDataLenInPacket getLen, + DataBlock *data) +{ + int retries = 0; + bool directed = false; + +#ifdef AMS_VERBOSE_LOGGING + LOG(DEBUG5, "receivechunksUDP: motnodeid %d", this->motNodeId); +#endif + + if (conn != nullptr) + { + directed = true; + *srcRoute = conn->route; + rx_control_info.mainWaitingState.set(this->motNodeId, conn->route, this->state->icInstanceId); + } + else + { + /* non-directed receive */ + rx_control_info.mainWaitingState.set(this->motNodeId, ANY_ROUTE, this->state->icInstanceId); + } + + std::unique_lock lock(mtx); + auto timeout = std::chrono::milliseconds(MAIN_THREAD_COND_TIMEOUT_MS); + + /* we didn't have any data, so we've got to read it from the network. */ + for (;;) + { + UDPConn *rxconn = nullptr; + + /* 1. Do we have data ready */ + if (rx_control_info.mainWaitingState.reachRoute != ANY_ROUTE) + { + rxconn = this->GetConn(rx_control_info.mainWaitingState.reachRoute); + rxconn->prepareRxConnForRead(); + + LOG(DEBUG2, "receiveChunksUDPIFC: non-directed rx woke on route %d", rx_control_info.mainWaitingState.reachRoute); + rx_control_info.mainWaitingState.reset(); + } + + this->aggregateStatistics(); + if (rxconn) + { + Assert(rxconn->pBuff); + + pthread_mutex_unlock(&ic_control_info.lock); + + LOG(DEBUG2, "got data with length %d", rxconn->recvBytes); + /* successfully read into this connection's buffer. */ + rxconn->GetDataInBuf(getLen, data); + + if (!directed) + *srcRoute = rxconn->route; + + return; + } + + retries++; + + /* + * Ok, we've processed all the items currently in the queue. Arm the + * latch (before releasing the mutex), and wait for more messages to + * arrive. The RX thread will wake us up using the latch. + */ + pthread_mutex_unlock(&ic_control_info.lock); + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + { + LOG(DEBUG5, "waiting (timed) on route %d %s", rx_control_info.mainWaitingState.waitingRoute, + (rx_control_info.mainWaitingState.waitingRoute == ANY_ROUTE ? "(any route)" : "")); + } + + /* + * Wait for data to become ready. + * + * In the QD, also wake up immediately if any QE reports an + * error through the main QD-QE libpq connection. For that, ask + * the dispatcher for a file descriptor to wait on for that. + */ + cv.wait_for(lock, timeout, []{return rx_control_info.mainWaitingState.reachRoute != ANY_ROUTE;}); + + /* check the potential errors in rx thread. */ + checkRxThreadError(); + + /* do not check interrupts when holding the lock */ + CHECK_INTERRUPTS(this->state); + + /* check to see if the task coordinator should cancel */ + CHECK_CANCEL(this->state); + + /* + * 1. NIC on master (and thus the QD connection) may become bad, check + * it. 2. Postmaster may become invalid, check it + */ + if ((retries & 0x3f) == 0) + { + checkQDConnectionAlive(); + CHECK_POSTMASTER_ALIVE(); + } + + pthread_mutex_lock(&ic_control_info.lock); + + } /* for (;;) */ + + /* We either got data, or get cancelled. We never make it out to here. */ + return; /* make GCC behave */ +} + +void +UDPConn::GetDataInBuf(GetDataLenInPacket getLen, DataBlock *data) +{ + int bytesProcessed = 0; + + Assert(data); + +#ifdef AMS_VERBOSE_LOGGING + LOG(DEBUG5, "recvtuple chunk recv bytes %d msgsize %d conn->pBuff %p conn->msgPos: %p", + this->recvBytes, this->msgSize, this->pBuff, this->msgPos); +#endif + + int ic_hdr_size = sizeof(struct icpkthdr); + + data->pos = this->msgPos + ic_hdr_size; + int rc = getLen ? getLen(data->pos, this->msgSize - ic_hdr_size) : (this->msgSize - ic_hdr_size); + if (rc < 0) + { + std::stringstream ss; + ss << "Failed to call getLen in GetDataInBuf, result: " << rc; + throw ICException(ss.str(), __FILE__, __LINE__); + } + data->len = rc; + + bytesProcessed += ic_hdr_size; + bytesProcessed += data->len; + + Assert(bytesProcessed == this->msgSize); + + this->recvBytes -= this->msgSize; + if (this->recvBytes != 0) + { +#ifdef AMS_VERBOSE_LOGGING + LOG(DEBUG5, "residual message %d bytes", this->recvBytes); +#endif + this->msgPos += this->msgSize; + } + + this->msgSize = 0; +} + +/* + * RecvTupleChunkFromAnyUDPIFC_Internal + * Receive tuple chunks from any route (connections) + */ +void +TransportEntry::RecvAny(int16 *srcRoute, + GetDataLenInPacket getLen, + DataBlock *data) +{ + int index, + activeCount = 0; + bool found = false; + + UDPConn *conn; + + index = this->scanStart; + + pthread_mutex_lock(&ic_control_info.lock); + + for (int i = 0; i < this->numConns; i++, index++) + { + if (index >= this->numConns) + index = 0; + + conn = this->GetConn(index); + if (conn->stillActive) + activeCount++; + + ic_statistics.totalRecvQueueSize += conn->pkt_q_size; + ic_statistics.recvQueueSizeCountingTime++; + + if (conn->pkt_q_size > 0) + { + found = true; + conn->prepareRxConnForRead(); + break; + } + } + + if (found) + { + pthread_mutex_unlock(&ic_control_info.lock); + + conn->GetDataInBuf(getLen, data); + + *srcRoute = conn->route; + this->scanStart = index + 1; + return; + } + + /* no data pending in our queue */ + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "RecvTupleChunkFromAnyUDPIFC(): activeCount is %d", activeCount); +#endif + if (activeCount == 0) + { + pthread_mutex_unlock(&ic_control_info.lock); + return; + } + + /* receiveChunksUDPIFC() releases ic_control_info.lock as a side-effect */ + this->receiveChunksUDPIFC(srcRoute, nullptr, getLen, data); + + this->scanStart = *srcRoute + 1; +} + +/* + * RecvTupleChunkFromUDPIFC_Internal + * Receive tuple chunks from a specific route (connection) + */ +void +TransportEntry::RecvRoute(int16 srcRoute, GetDataLenInPacket getLen, DataBlock *data) +{ + UDPConn *conn = this->GetConn(srcRoute); + +#ifdef AMS_VERBOSE_LOGGING + if (!conn->stillActive) + { + LOG(INFO, "RecvTupleChunkFromUDPIFC(): connection inactive ?!"); + } +#endif + + pthread_mutex_lock(&ic_control_info.lock); + + if (!conn->stillActive) + { + pthread_mutex_unlock(&ic_control_info.lock); + return; + } + + ic_statistics.totalRecvQueueSize += conn->pkt_q_size; + ic_statistics.recvQueueSizeCountingTime++; + + if (conn->pkt_q[conn->pkt_q_head] != NULL) + { + conn->prepareRxConnForRead(); + + pthread_mutex_unlock(&ic_control_info.lock); + + conn->GetDataInBuf(getLen, data); + + return; + } + + /* no existing data, we've got to read a packet */ + /* receiveChunksUDPIFC() releases ic_control_info.lock as a side-effect */ + int16 route; + this->receiveChunksUDPIFC(&route, conn, getLen, data); +} + +/* + * TeardownUDPIFCInterconnect_Internal + * Helper function for TeardownUDPIFCInterconnect. + * + * Developers should pay attention to: + * + * 1) Do not handle interrupts/throw errors in Teardown, otherwise, Teardown may be called twice. + * It will introduce an undefined behavior. And memory leaks will be introduced. + * + * 2) Be careful about adding elog/ereport/write_log in Teardown function, + * esp, out of HOLD_INTERRUPTS/RESUME_INTERRUPTS pair, since elog/ereport/write_log may + * handle interrupts. + * + */ +void +CChunkTransportStateImpl::teardown(bool hasErrors) +{ + bool isReceiver = false; + + /* Log the start of TeardownInterconnect. */ + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_TERSE_IC) + { + LogSeverity elevel = INFO; + + if (hasErrors || !this->activated) + { + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + elevel = INFO; + else + elevel = DEBUG1; + } + else if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + elevel = DEBUG4; + + if (elevel) + { + ICExecSlice *mySlice = &this->sliceTable->slices[this->sliceId]; + LOG(elevel, "Interconnect seg%d slice%d cleanup state: %s; setup was %s", + global_param.segindex, mySlice->sliceIndex, + hasErrors ? "hasErrors" : "normal", + this->activated ? "completed" : "exited"); + } + + /* if setup did not complete, log the slicetable */ + if (!this->activated && session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + { + //elog_node_display(DEBUG3, "local slice table", this->sliceTable, true); + //TODO: print real slicetable; + LOG(DEBUG3, "local slice table: ####"); + } + } + + /* + * The long jump with CheckXXX() in receiveChunksUDPIFC() introduces the + * locked mtx, so unlock it here. + */ + mtx.unlock(); + + /* + * add lock to protect the hash table, since background thread is still + * working. + */ + pthread_mutex_lock(&ic_control_info.lock); + + if (session_param.gp_interconnect_cache_future_packets) + cleanupStartupCache(); + + /* + * Now "normal" connections which made it through our peer-registration + * step. With these we have to worry about "in-flight" data. + */ + this->DestroySendEntries(); + + /* + * Previously, there is a piece of code that deals with pending stops. Now + * it is delegated to background rx thread which will deal with any + * mismatched packets. + */ + + /* + * cleanup all of our Receiving Motion nodes, these get closed immediately + * (the receiver know for real if they want to shut down -- they aren't + * going to be processing any more data). + */ + this->DestroyRecvEntries(&isReceiver); + + /* + * now that we've moved active rx-buffers to the freelist, we can prune + * the freelist itself + */ + while (rx_buffer_pool.count > rx_buffer_pool.maxCount) + { + icpkthdr *buf = NULL; + + /* If this happened, there are some memory leaks.. */ + if (rx_buffer_pool.freeList == NULL) + { + pthread_mutex_unlock(&ic_control_info.lock); + + std::stringstream ss; + ss << "FATAL: freelist NULL: count " << rx_buffer_pool.count + << " max " << rx_buffer_pool.maxCount << " buf " << rx_buffer_pool.freeList; + throw ICFatalException(ss.str(), __FILE__, __LINE__); + } + + buf = rx_buffer_pool.get_free(); + rx_buffer_pool.release(buf); + } + + /* + * Update the history of interconnect instance id. + */ + if (global_param.Gp_role == GP_ROLE_DISPATCH_IC) + { + rx_control_info.cursorHistoryTable.update(this->icInstanceId, 0); + } + else if (global_param.Gp_role == GP_ROLE_EXECUTE_IC) + { + rx_control_info.lastTornIcId = this->icInstanceId; + } + + if (IC_DEBUG1 >= session_param.log_min_messages) + { + LOG(DEBUG1, "Interconnect State: " + "isSender %d isReceiver %d " + "snd_queue_depth %d recv_queue_depth %d Gp_max_packet_size %d " + "UNACK_QUEUE_RING_SLOTS_NUM %d TIMER_SPAN %lld DEFAULT_RTT %d " + "hasErrors %d, ic_instance_id %d ic_id_last_teardown %d " + "snd_buffer_pool.count %d snd_buffer_pool.maxCount %d snd_sock_bufsize %d recv_sock_bufsize %d " + "snd_pkt_count %d retransmits %d crc_errors %d" + " recv_pkt_count %d recv_ack_num %d" + " recv_queue_size_avg %f" + " capacity_avg %f" + " freebuf_avg %f " + "mismatch_pkt_num %d disordered_pkt_num %d duplicated_pkt_num %d" + " cwnd %f status_query_msg_num %d", + ic_control_info.isSender, isReceiver, + session_param.Gp_interconnect_snd_queue_depth, session_param.Gp_interconnect_queue_depth, global_param.Gp_max_packet_size, + UNACK_QUEUE_RING_SLOTS_NUM, TIMER_SPAN, DEFAULT_RTT, + hasErrors, this->icInstanceId, rx_control_info.lastTornIcId, + snd_buffer_pool.count, snd_buffer_pool.maxCount, ic_control_info.socketSendBufferSize, ic_control_info.socketRecvBufferSize, + ic_statistics.sndPktNum, ic_statistics.retransmits, ic_statistics.crcErrors, + ic_statistics.recvPktNum, ic_statistics.recvAckNum, + (double) ((double) ic_statistics.totalRecvQueueSize) / ((double) ic_statistics.recvQueueSizeCountingTime), + (double) ((double) ic_statistics.totalCapacity) / ((double) ic_statistics.capacityCountingTime), + (double) ((double) ic_statistics.totalBuffers) / ((double) ic_statistics.bufferCountingTime), + ic_statistics.mismatchNum, ic_statistics.disorderedPktNum, ic_statistics.duplicatedPktNum, + snd_control_info.cwnd, ic_statistics.statusQueryMsgNum); + } + + ic_control_info.isSender = false; + memset(&ic_statistics, 0, sizeof(ICStatistics)); + + pthread_mutex_unlock(&ic_control_info.lock); + + /* reset the rx thread network error flag */ + resetRxThreadError(); + + /* free sliceTable */ + if (this->sliceTable) + { + ICSliceTable *ic_tbl = this->sliceTable; + for (int i = 0; i < ic_tbl->numSlices; ++i) + { + ICExecSlice *ic_slice = ic_tbl->slices + i; + ic_free(ic_slice->children); + ic_free(ic_slice->primaryProcesses); + } + ic_free(ic_tbl->slices); + ic_free(ic_tbl); + } + + this->activated = false; + this->sliceTable = NULL; + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_TERSE_IC) + LOG(DEBUG1, "TeardownUDPIFCInterconnect_Internal successful"); +} + +void +TransportEntry::Broadcast(DataBlock *data, int *inactiveCountPtr) +{ + int *p_inactive = inactiveCountPtr; + int index, inactive = 0; + + /* add our tcItem to each of the outgoing buffers. */ + index = Max(0, global_param.segindex); /* entry-db has -1 */ + for (int i = 0; i < this->numConns; i++, index++) + { + if (index >= this->numConns) + index = 0; + + UDPConn *conn = this->GetConn(index); + + /* only send to still interested receivers. */ + if (conn->stillActive) + { + conn->Send(data); + if (!conn->stillActive) + inactive++; + } + } + + if (p_inactive != NULL) + *p_inactive = (inactive ? 1 : 0); +} + +TransportEntry* +CChunkTransportStateImpl::GetEntry(int motNodeID, bool checkValid) +{ + if (motNodeID > 0 && motNodeID <= static_cast(this->entries_.size())) + { + TransportEntry *pEntry = this->entries_[motNodeID - 1].get(); + if (pEntry != nullptr) + { + if (!checkValid) + return pEntry; + if (pEntry->motNodeId == motNodeID && pEntry->valid) + return pEntry; + } + } + + std::stringstream ss; + ss << "ERROR, Interconnect Error: Unexpected Motion Node Id: " << motNodeID + << ". This means a motion node that wasn't setup is requesting interconnect resources."; + throw ICInvalidIndex(ss.str(), __FILE__, __LINE__); +} + +/* + * The number of the Receiving Motion may be > 1, such as + * Hashjoin + * -> Redis Motion + * ... + * -> Hash + * -> Redis Motion + * ... + */ +void +CChunkTransportStateImpl::CreateRecvEntries(ICSliceTable *sliceTable) +{ + ICExecSlice *mySlice = &sliceTable->slices[sliceTable->localSlice]; + + /* now we'll do some setup for each of our Receiving Motion Nodes. */ + for (int child_index = 0; child_index < mySlice->numChildren; ++child_index) + { + int childId = mySlice->children[child_index]; + ICExecSlice *sendSlice = &sliceTable->slices[childId]; + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "Setup recving connections: my slice %d, childId %d", mySlice->sliceIndex, childId); + + if (sendSlice->sliceIndex > static_cast(this->entries_.size())) + this->entries_.resize(sendSlice->sliceIndex); + this->checkMotNodeID(sendSlice->sliceIndex); + + std::unique_ptr pEntry = + TransportEntry::MakeRecvEntry(this, sliceTable->ic_instance_id, sendSlice, mySlice); + this->entries_[sendSlice->sliceIndex - 1] = std::move(pEntry); + } +} + +void +CChunkTransportStateImpl::CreateSendEntries(ICSliceTable *sliceTable) +{ + ICExecSlice *sendSlice = &sliceTable->slices[sliceTable->localSlice]; + + if (sendSlice->parentIndex == -1) { + ic_control_info.isSender = false; + ic_control_info.lastExpirationCheckTime = 0; + return; + } + + snd_control_info.cwnd = 0; + snd_control_info.minCwnd = 0; + snd_control_info.ssthresh = 0; + + snd_buffer_pool.init(); + initUnackQueueRing(&unack_queue_ring); + ic_control_info.isSender = true; + ic_control_info.lastExpirationCheckTime = getCurrentTime(); + ic_control_info.lastPacketSendTime = ic_control_info.lastExpirationCheckTime; + ic_control_info.lastDeadlockCheckTime = ic_control_info.lastExpirationCheckTime; + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "Interconnect seg%d slice%d setting up sending motion node", + global_param.segindex, sendSlice->sliceIndex); + + if (sendSlice->sliceIndex > static_cast(this->entries_.size())) + this->entries_.resize(sendSlice->sliceIndex); + this->checkMotNodeID(sendSlice->sliceIndex); + + ICExecSlice *recvSlice = &sliceTable->slices[sendSlice->parentIndex]; + std::unique_ptr pEntry = + TransportEntry::MakeSendEntry(this, sliceTable->ic_instance_id, sendSlice, recvSlice); + + pEntry->txfd = ICSenderSocket; + pEntry->txport = ICSenderPort; + pEntry->txfd_family = ICSenderFamily; + + snd_control_info.minCwnd = snd_control_info.cwnd; + snd_control_info.ssthresh = snd_buffer_pool.maxCount; + +#ifdef TRANSFER_PROTOCOL_STATS + trans_proto_stats.init(); +#endif + + this->entries_[sendSlice->sliceIndex - 1] = std::move(pEntry); +} + +void +CChunkTransportStateImpl::DestroyRecvEntries(bool *isReceiver) +{ + ICExecSlice *mySlice = &this->sliceTable->slices[this->sliceId]; + for (int child_index = 0; child_index < mySlice->numChildren; ++child_index) + { + int childId = mySlice->children[child_index]; + ICExecSlice *aSlice = &this->sliceTable->slices[childId]; + + /* + * First check whether the entry is initialized to avoid the potential + * errors thrown out from the removeChunkTransportState, which may + * introduce some memory leaks. + */ + int motNodeID = aSlice->sliceIndex; + if (this->entries_[motNodeID - 1] == nullptr) + continue; + + TransportEntry *pEntry = this->entries_[motNodeID - 1].get(); + Assert(motNodeID == pEntry->motNodeId); + + /* now it is safe to remove. */ + if (!pEntry->valid) + continue; + +#ifdef USE_ASSERT_CHECKING + pEntry->dumpConnections("/tmp/receiving_entries"); +#endif + /* remove it */ + pEntry->valid = false; + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "Interconnect closing connections from slice%d", aSlice->sliceIndex); + + *isReceiver = true; + + /* + * receivers know that they no longer care about data from + * below ... so we can safely discard data queued in both + * directions + */ + for (size_t i = 0; i < pEntry->conns_.size(); ++i) + { + UDPConn *conn = pEntry->conns_[i].get(); + + Assert(conn); + if (!conn) + continue; + + if (conn->cdbProc == NULL) + continue; + + /* out of memory has occurred, break out */ + if (!conn->pkt_q) + break; + + rx_buffer_pool.maxCount -= conn->pkt_q_capacity; + + ic_control_info.connHtab.remove(conn); + + /* + * ReleaseBuffer() dequeues messages and moves + * them to pBuff + */ + while (conn->pkt_q_size > 0) + conn->ReleaseBuffer(NULL); + + /* we also need to clear all the out-of-order packets */ + conn->freeDisorderedPackets(); + + /* free up the packet queue */ + ic_free(conn->pkt_q); + conn->pkt_q = NULL; + + if (global_param.destroyOpaqueDataCallback) + global_param.destroyOpaqueDataCallback(&conn->opaque_data); + + if (conn->curBuff) + { + ic_free(conn->curBuff); + conn->curBuff = NULL; + } + } // for conn + + Assert(!pEntry->conns); + } // for entry +} + +/* + * computeNetworkStatistics + * Compute the max/min/avg network statistics. + */ +static inline void +computeNetworkStatistics(uint64 value, uint64 *min, uint64 *max, double *sum) +{ + if (value >= *max) + *max = value; + if (value <= *min) + *min = value; + *sum += value; +} + +void +CChunkTransportStateImpl::DestroySendEntries() +{ + ICExecSlice *mySlice = &this->sliceTable->slices[this->sliceId]; + if (mySlice->parentIndex == -1) + return; + + /* cleanup a Sending motion node. */ + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + { + ICExecSlice *parentSlice = &this->sliceTable->slices[mySlice->parentIndex]; + LOG(DEBUG1, "Interconnect seg%d slice%d closing connections to slice%d (%d peers)", + global_param.segindex, mySlice->sliceIndex, mySlice->parentIndex, + parentSlice->numPrimaryProcesses); + } + + /* + * In the olden days, we required that the error case successfully + * transmit and end-of-stream message here. But the introduction of + * cdbdisp_check_estate_for_cancel() alleviates for the QD case, and + * the cross-connection of writer gangs in the dispatcher (propagation + * of cancel between them) fixes the I-S case. + * + * So the call to forceEosToPeers() is no longer required. + */ + int motNodeID = mySlice->sliceIndex; + if (this->entries_[motNodeID - 1] == nullptr) + return; + + TransportEntry *pEntry = this->entries_[motNodeID - 1].get(); + Assert(motNodeID == pEntry->motNodeId); + + /* now it is safe to remove. */ + if (!pEntry->valid) + return; + +#ifdef USE_ASSERT_CHECKING + pEntry->dumpConnections("/tmp/sending_entries"); +#endif + + /* remove it */ + pEntry->valid = false; + + uint64 maxRtt = 0; + double avgRtt = 0; + uint64 minRtt = ~((uint64) 0); + + uint64 maxDev = 0; + double avgDev = 0; + uint64 minDev = ~((uint64) 0); + + /* connection array allocation may fail in interconnect setup. */ + for (size_t i = 0; i < pEntry->conns_.size(); ++i) + { + UDPConn *conn = pEntry->conns_[i].get(); + + Assert(conn); + if (!conn) + continue; + + if (!conn->cdbProc) + continue; + + /* compute some statistics */ + computeNetworkStatistics(conn->rtt, &minRtt, &maxRtt, &avgRtt); + computeNetworkStatistics(conn->dev, &minDev, &maxDev, &avgDev); + + conn->sndQueue.release(false); + conn->unackQueue.release(session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_CAPACITY_IC ? false : true); + + ic_control_info.connHtab.remove(conn); + + if (conn->curBuff) + { + ic_free(conn->curBuff); + conn->curBuff = NULL; + } + } + avgRtt = avgRtt / pEntry->numConns; + avgDev = avgDev / pEntry->numConns; + + /* free all send side buffers */ + snd_buffer_pool.clean(); + + Assert(!pEntry->conns); + +#ifdef TRANSFER_PROTOCOL_STATS + trans_proto_stats.dump(); +#endif + + if (IC_DEBUG1 >= session_param.log_min_messages) + { + LOG(DEBUG1, "Interconnect State: isSender %d DEFAULT_RTT %d rtt/dev [%lu/%lu, %f/%f, %lu/%lu] ", + ic_control_info.isSender, DEFAULT_RTT, (minRtt == ~((uint64) 0) ? 0 : minRtt), + (minDev == ~((uint64) 0) ? 0 : minDev), avgRtt, avgDev, maxRtt, maxDev); + } +} + +void +CChunkTransportStateImpl::checkMotNodeID(int sendMotNodeID) +{ + Assert(sendMotNodeID > 0); + + if ((sendMotNodeID) <= 0) { + std::stringstream ss; + ss <<"ERROR, Interconnect Error: Unexpected Motion Node Id: "<entries_[sendMotNodeID - 1].get(); + if (pEntry != nullptr) { + UDPConn *conn = pEntry->conns_.size() ? pEntry->conns_[0].get() : nullptr; + + Assert(static_cast(pEntry->numConns) == pEntry->conns_.size()); + std::stringstream ss; + ss <<"ERROR, interconnect error: A HTAB entry for motion node "<conns_.size()<< + " first sock " << (conn != NULL ? conn->sockfd : -2); + throw ICInvalidIndex(ss.str(), __FILE__, __LINE__); + } +} + +CChunkTransportStateImpl::CChunkTransportStateImpl(ICSliceTable *_sliceTable) +{ + activated = false; + teardownActive = false; + + sliceTable = _sliceTable; + sliceId = sliceTable->localSlice; + icInstanceId = sliceTable->ic_instance_id; + + networkTimeoutIsLogged = false; + + clientState = NULL; +} + +ICChunkTransportState* +CChunkTransportStateImpl::SetupUDP(ICSliceTable *sliceTable, SessionMotionLayerIPCParam *param) +{ + if (param) + memcpy(&session_param, param, sizeof(*param)); + + /* + * The rx-thread might have set an error since last teardown, + * technically it is not part of current query, discard it directly. + */ + resetRxThreadError(); + + try { + ICChunkTransportState *state = CChunkTransportStateImpl::setup(sliceTable); + + /* Internal error if we locked the mutex but forgot to unlock it. */ + Assert(pthread_mutex_unlock(&ic_control_info.lock) != 0); + + return state; + + } catch (...) { + /* + * Remove connections from hash table to avoid packet handling in the + * rx pthread, else the packet handling code could use memory whose + * context (InterconnectContext) would be soon reset - that could + * panic the process. + */ + ConnHashTable *ht = &ic_control_info.connHtab; + + for (int i = 0; i < ht->size; i++) + { + struct ConnHtabBin *trash; + UDPConn *conn = NULL; + + trash = ht->table[i]; + while (trash != NULL) + { + conn = trash->conn; + /* Get trash at first as trash will be pfree-ed in remove. */ + trash = trash->next; + ht->remove(conn); + } + } + pthread_mutex_unlock(&ic_control_info.lock); + + throw; + } +} + +void +CChunkTransportStateImpl::TeardownUDP(bool hasErrors) +{ + try { + CChunkTransportStateImpl::state_ = nullptr; + this->teardown(hasErrors); + delete this; + Assert(pthread_mutex_unlock(&ic_control_info.lock) != 0); + } catch (...) { + pthread_mutex_unlock(&ic_control_info.lock); + throw; + } +} + +CChunkTransportState ** +CChunkTransportStateImpl::GetTransportState() +{ + return &CChunkTransportStateImpl::state_; +} + +void +CChunkTransportStateImpl::RecvRoute(int16 motNodeID, + int16 srcRoute, + GetDataLenInPacket getLen, + DataBlock *data) +{ + try { + TransportEntry *pEntry = GetEntry(motNodeID, true); + pEntry->RecvRoute(srcRoute, getLen, data); + + /* error if mutex still held (debug build only) */ + Assert(pthread_mutex_unlock(&ic_control_info.lock) != 0); + } catch (...) { + pthread_mutex_unlock(&ic_control_info.lock); + throw; + } +} + +void +CChunkTransportStateImpl::RecvAny(int16 motNodeID, + int16 *srcRoute, + GetDataLenInPacket getLen, + DataBlock *data) +{ + try { + TransportEntry *pEntry = GetEntry(motNodeID, true); + pEntry->RecvAny(srcRoute, getLen, data); + + /* error if mutex still held (debug build only) */ + Assert(pthread_mutex_unlock(&ic_control_info.lock) != 0); + } catch (...) { + pthread_mutex_unlock(&ic_control_info.lock); + throw; + } +} + +void +CChunkTransportStateImpl::SendEOS(int motNodeID, DataBlock *data) +{ + int retry = 0; + int activeCount = 0; + int timeout = 0; + + TransportEntry *pEntry = GetEntry(motNodeID, true); + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "Interconnect seg%d slice%d sending end-of-stream to slice%d", + global_param.segindex, motNodeID, pEntry->recvSlice->sliceIndex); + + /* + * we want to add our tcItem onto each of the outgoing buffers -- this is + * guaranteed to leave things in a state where a flush is *required*. + */ + pEntry->Broadcast(data, NULL); + + pEntry->sendingEos = true; + + uint64 now = getCurrentTime(); + + /* now flush all of the buffers. */ + for (int i = 0; i < pEntry->numConns; i++) + { + UDPConn *conn = pEntry->GetConn(i); + if (conn->stillActive) + { + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "sent eos to route %d tuplecount %d seq %d flags 0x%x stillActive %s icId %d %d", + conn->route, conn->tupleCount, conn->conn_info.seq, + conn->conn_info.flags, (conn->stillActive ? "true" : "false"), + conn->conn_info.icId, conn->msgSize); + + /* prepare this for transmit */ + conn->conn_info.flags |= UDPIC_FLAGS_EOS; + + /* place it into the send queue */ + conn->prepareXmit(); + conn->sndQueue.append(conn->curBuff); + conn->sendBuffers(); + conn->curBuff = NULL; + conn->pBuff = NULL; + + conn->tupleCount = 0; + conn->msgSize = sizeof(conn->conn_info); + conn->deadlockCheckBeginTime = now; + + activeCount++; + } + } + + /* + * Now waiting for acks from receivers. + * + * Note here waiting is done in a separate phase from the EOS sending + * phase to make the processing faster when a lot of connections are slow + * and have frequent packet losses. In fault injection tests, we found + * this. + * + */ + while (activeCount > 0) + { + activeCount = 0; + + for (int i = 0; i < pEntry->numConns; i++) + { + UDPConn *conn = pEntry->GetConn(i); + if (conn->stillActive) + { + retry = 0; + ic_control_info.lastPacketSendTime = 0; + + /* wait until this queue is emptied */ + while (conn->unackQueue.length() > 0 || + conn->sndQueue.length() > 0) + { + timeout = conn->computeTimeout(retry); + + if (pEntry->pollAcks(timeout)) + pEntry->handleAcks(); + + conn->checkExceptions(retry++, timeout); + + if (retry >= MAX_TRY) + break; + } + + if ((!conn->cdbProc) || (conn->unackQueue.length() == 0 && + conn->sndQueue.length() == 0)) + { + conn->state = mcsEosSent; + conn->stillActive = false; + } + else + activeCount++; + } + } + } + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "SendEOSleaving, activeCount %d", activeCount); +} + +void +CChunkTransportStateImpl::SendStop(int16 motNodeID) +{ + Assert(this->activated); + + TransportEntry *pEntry = GetEntry(motNodeID, true); + + /* + * Note: we're only concerned with receivers here. + */ + pthread_mutex_lock(&ic_control_info.lock); + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "Interconnect needs no more input from slice%d; notifying senders to stop.", motNodeID); + + for (int i = 0; i < pEntry->numConns; i++) + { + UDPConn *conn = pEntry->GetConn(i); + + /* + * Note here, the stillActive flag of a connection may have been set + * to false by DeactiveConn. + */ + if (conn->stillActive) + { + if (conn->conn_info.flags & UDPIC_FLAGS_EOS) + { + /* + * we have a queued packet that has EOS in it. We've acked it, + * so we're done + */ + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "do sendstop: already have queued EOS packet, we're done. node %d route %d", motNodeID, i); + + conn->stillActive = false; + + /* need to drop the queues in the teardown function. */ + while (conn->pkt_q_size > 0) + conn->ReleaseBuffer(NULL); + } + else + { + conn->stopRequested = true; + conn->conn_info.flags |= UDPIC_FLAGS_STOP; + + /* + * The peer addresses for incoming connections will not be set + * until the first packet has arrived. However, when the lower + * slice does not have data to send, the corresponding peer + * address for the incoming connection will never be set. We + * will skip sending ACKs to those connections. + */ + +#ifdef FAULT_INJECTOR + if (FaultInjector_InjectFaultIfSet( + "interconnect_stop_ack_is_lost", + DDLNotSpecified, + "" /* databaseName */ , + "" /* tableName */ ) == FaultInjectorTypeSkip) + { + continue; + } +#endif + + if (conn->peer.ss_family == AF_INET || conn->peer.ss_family == AF_INET6) + { + uint32 seq = conn->conn_info.seq > 0 ? conn->conn_info.seq - 1 : 0; + + conn->sendAck(UDPIC_FLAGS_STOP | UDPIC_FLAGS_ACK | UDPIC_FLAGS_CAPACITY | conn->conn_info.flags, seq, seq); + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "sent stop message. node %d route %d seq %d", motNodeID, i, seq); + } + else + { + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG1, "first packet did not arrive yet. don't sent stop message. node %d route %d", motNodeID, i); + } + } + } + } + pthread_mutex_unlock(&ic_control_info.lock); +} + +void +TransportEntry::Send(int16 targetRoute, DataBlock *db, bool broadcast, int *recount) +{ +#ifdef AMS_VERBOSE_LOGGING + LOG(DEBUG5, "SendTupleChunkToAMS: chunk length %d", db->len); +#endif + + if (broadcast) + { + this->Broadcast(db, recount); + } + else + { + if (targetRoute < 0 || targetRoute >= this->numConns) + { + std::stringstream ss; + ss << "FATAL: SendTupleChunkToAMS: targetRoute is " << targetRoute + << ", must be between 0 and " << this->numConns << " ."; + throw ICFatalException(ss.str(), __FILE__, __LINE__); + } + + /* handle pt-to-pt message. Primary */ + UDPConn *conn = this->GetConn(targetRoute); + + /* only send to interested connections */ + if (conn->stillActive) + { + conn->Send(db); + if (!conn->stillActive) + *recount = 1; + } + /* in 4.0 logical mirror xmit eliminated. */ + } +} + +bool +TransportEntry::SendData(int16 targetRoute, DataBlock *pblocks, int num, bool broadcast) +{ + int recount = 0; + + int payload = global_param.Gp_max_packet_size - sizeof(icpkthdr); + + /* + * tcItem can actually be a chain of tcItems. we need to send out all of + * them. + */ + for (int i = 0; i < num; ++i) + { + DataBlock db = *(pblocks + i); + while (db.len > 0) + { + DataBlock toSend; + toSend.len = db.len > payload ? payload : db.len; + toSend.pos = db.pos; + this->Send(targetRoute, &toSend, broadcast, &recount); + db.len -= toSend.len; + db.pos += toSend.len; + } + } + + if (recount == 0) + return true; + + /* if we don't have any connections active, return false */ + int i = 0; + for (i = 0; i < this->numConns; i++) + { + UDPConn *conn = this->GetConn(i); + if (conn->stillActive) + break; + } + + /* if we found an active connection we're not done */ + return (i < this->numConns); + +} + +bool +CChunkTransportStateImpl::SendData(int16 motNodeID, + int16 targetRoute, + DataBlock *pblocks, + int num, + bool broadcast) +{ + TransportEntry *pEntry = GetEntry(motNodeID, true); + return pEntry->SendData(targetRoute, pblocks, num, broadcast); +} + +void +CChunkTransportStateImpl::GetFreeSpace(int16 motNodeID, int16 targetRoute, BufferBlock *b) +{ + Assert(b != NULL); + + TransportEntry *pEntry = GetEntry(motNodeID, true); + + /* handle pt-to-pt message. Primary */ + UDPConn *conn = pEntry->GetConn(targetRoute); + + b->pos = NULL; + b->len = 0; + if (conn->stillActive) + { + b->pos = conn->pBuff + conn->msgSize; + Assert(global_param.Gp_max_packet_size >= conn->msgSize); + b->len = global_param.Gp_max_packet_size - conn->msgSize; + } +} + +void +CChunkTransportStateImpl::ReduceFreeSpace(int16 motNodeID, int16 targetRoute, int length) +{ + TransportEntry *pEntry = GetEntry(motNodeID, true); + + /* handle pt-to-pt message. Primary */ + UDPConn *conn = pEntry->GetConn(targetRoute); + + /* only send to interested connections */ + if (conn->stillActive) + { + Assert(conn->msgSize + length <= global_param.Gp_max_packet_size); + conn->msgSize += length; + conn->tupleCount++; + } +} + +void +CChunkTransportStateImpl::ReleaseAndAck(int motNodeID, int route) +{ + AckSendParam param; + + TransportEntry *pEntry = GetEntry(motNodeID, true); + UDPConn *conn = pEntry->GetConn(route); + + memset(¶m, 0, sizeof(AckSendParam)); + + pthread_mutex_lock(&ic_control_info.lock); + + if (conn->pBuff != NULL) + { + conn->ReleaseBuffer(¶m); + } + else + { + pthread_mutex_unlock(&ic_control_info.lock); + throw ICFatalException("FATAL: Interconnect error: tried to release a NULL buffer", __FILE__, __LINE__); + } + + pthread_mutex_unlock(&ic_control_info.lock); + + /* + * real ack sending is after lock release to decrease the lock holding + * time. + */ + if (param.msg.len != 0) + UDPConn::sendAckWithParam(¶m); +} + +void +CChunkTransportStateImpl::DeactiveRoute(int motNodeID, int srcRoute, const char *reason) +{ + TransportEntry *pEntry = GetEntry(motNodeID, true); + UDPConn *conn = pEntry->GetConn(srcRoute); + + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + { + LOG(DEBUG3, "Interconnect finished receiving from seg%d slice%d %s pid=%d sockfd=%d; %s", + conn->remoteContentId, pEntry->sendSlice->sliceIndex, conn->remoteHostAndPort, + conn->cdbProc->pid, conn->sockfd, reason); + } + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "deregisterReadInterest set stillactive = false for node %d route %d (%s)", motNodeID, srcRoute, reason); +#endif + + conn->DeactiveConn(); +} + +void* +CChunkTransportStateImpl::GetOpaqueDataInConn(int16 motNodeID, int16 targetRoute) +{ + TransportEntry *pEntry = this->GetEntry(motNodeID, true); + UDPConn *conn = pEntry->GetConn(targetRoute); + return conn->opaque_data; +} + +int32* +CChunkTransportStateImpl::GetSentRecordTypmodInConn(int16 motNodeID, int16 targetRoute) +{ + TransportEntry *pEntry = this->GetEntry(motNodeID, true); + UDPConn *conn = pEntry->GetConn(targetRoute); + return &conn->sent_record_typmod; +} + +int +CChunkTransportStateImpl::GetConnNum(int motNodeID) { + TransportEntry *pEntry = this->GetEntry(motNodeID, true); + return pEntry->conns_.size(); +} + +void +CChunkTransportStateImpl::NotifyQuit() { + thread_quit = true; +} + +void +CChunkTransportStateImpl::SetVectorEngineAsUser() { + vector_engine_is_user = true; +} + +CChunkTransportStateImpl* ToDerived(CChunkTransportState *ptr) { + return static_cast(ptr); +} + +/* + * C++ interface wrapper class based on class CChunkTransportStateImpl; + */ +ICChunkTransportState* +CChunkTransportState::SetupUDP(ICSliceTable *sliceTable, + SessionMotionLayerIPCParam *param) { + return CChunkTransportStateImpl::SetupUDP(sliceTable, param); +} + +void +CChunkTransportState::TeardownUDP(bool hasErrors) { + ToDerived(this)->TeardownUDP(hasErrors); +} + +void +CChunkTransportState::RecvRoute(int16 motNodeID, int16 srcRoute, + GetDataLenInPacket getLen, DataBlock *data) { + ToDerived(this)->RecvRoute(motNodeID, srcRoute, getLen, data); +} + +void +CChunkTransportState::RecvAny(int16 motNodeID, int16 *srcRoute, + GetDataLenInPacket getLen, DataBlock *data) { + ToDerived(this)->RecvAny(motNodeID, srcRoute, getLen, data); +} + +void +CChunkTransportState::SendEOS(int motNodeID, DataBlock *data) { + ToDerived(this)->SendEOS(motNodeID, data); +} + +void +CChunkTransportState::SendStop(int16 motNodeID) { + return ToDerived(this)->SendStop(motNodeID); +} + +bool +CChunkTransportState::SendData(int16 motNodeID, int16 targetRoute, DataBlock *pblocks, + int num, bool broadcast) { + return ToDerived(this)->SendData(motNodeID, targetRoute, pblocks, num, broadcast); +} + +void +CChunkTransportState::GetFreeSpace(int16 motNodeID, int16 targetRoute, BufferBlock *b) { + return ToDerived(this)->GetFreeSpace(motNodeID, targetRoute, b); +} + +void +CChunkTransportState::ReduceFreeSpace(int16 motNodeID, int16 targetRoute, int length) { + return ToDerived(this)->ReduceFreeSpace(motNodeID, targetRoute, length); +} + +void +CChunkTransportState::ReleaseAndAck(int motNodeID, int route) { + return ToDerived(this)->ReleaseAndAck(motNodeID, route); +} + +void +CChunkTransportState::DeactiveRoute(int motNodeID, int srcRoute, const char *reason) { + return ToDerived(this)->DeactiveRoute(motNodeID, srcRoute, reason); +} + +void* +CChunkTransportState::GetOpaqueDataInConn(int16 motNodeID, int16 targetRoute) { + return ToDerived(this)->GetOpaqueDataInConn(motNodeID, targetRoute); +} + +int32* +CChunkTransportState::GetSentRecordTypmodInConn(int16 motNodeID, int16 targetRoute) { + return ToDerived(this)->GetSentRecordTypmodInConn(motNodeID, targetRoute); +} + +int +CChunkTransportState::GetConnNum(int motNodeID) { + return ToDerived(this)->GetConnNum(motNodeID); +} + +void +CChunkTransportState::NotifyQuit() { + return ToDerived(this)->NotifyQuit(); +} + +void +CChunkTransportState::SetVectorEngineAsUser() { + return ToDerived(this)->SetVectorEngineAsUser(); +} + +CChunkTransportState** +CChunkTransportState::GetTransportState() { + return CChunkTransportStateImpl::GetTransportState(); +} + +/* + * C interface wrapper of UDP implement based C++ interface calss CChunkTransportState. + */ +#ifdef __cplusplus +extern "C" { +#endif + +static void handleException() +{ + try{ + throw; + } catch (const std::bad_alloc &e) { + SetLastError(LEVEL_ERROR, "out of memory"); + } catch (const ICFatalException &e) { + SetLastError(LEVEL_FATAL, e.msg()); + } catch (const ICException &e) { + SetLastError(LEVEL_ERROR, e.msg()); + } catch (const std::exception &e) { + SetLastError(LEVEL_ERROR, e.what()); + } catch (...) { + SetLastError(LEVEL_ERROR, "something unknown wrong happened!"); + } +} + +ICChunkTransportState* +UDP2_SetupUDP(ICSliceTable *sliceTable, SessionMotionLayerIPCParam *param) +{ + try { + return CChunkTransportState::SetupUDP(sliceTable, param); + } catch (...) { + handleException(); + } + + return NULL; +} + +/* + * TeardownUDPIFCInterconnect + * Tear down UDP interconnect. + * + * This function is called to release the resources used by interconnect. + */ +void +UDP2_TeardownUDP(ICChunkTransportState *transportStates, + bool hasErrors) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + cstate->TeardownUDP(hasErrors); + } catch (...) { + handleException(); + } +} + +/* + * RecvTupleChunkFromUDPIFC + * Receive tuple chunks from a specific route (connection) + */ +void +UDP2_RecvRoute(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 srcRoute, + GetDataLenInPacket getLen, + DataBlock *data) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + cstate->RecvRoute(motNodeID, srcRoute, getLen, data); + } catch (...) { + handleException(); + } +} + +/* + * RecvTupleChunkFromAnyUDPIFC + * Receive tuple chunks from any route (connections) + */ +void +UDP2_RecvAny(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 *srcRoute, + GetDataLenInPacket getLen, + DataBlock *data) + +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + cstate->RecvAny(motNodeID, srcRoute, getLen, data); + } catch (...) { + handleException(); + } +} + +/* + * SendEOS + * broadcast eos messages to receivers. + */ +void +UDP2_SendEOS(ICChunkTransportState *transportStates, + int motNodeID, + DataBlock *data) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + cstate->SendEOS(motNodeID, data); + } catch (...) { + handleException(); + } +} + +void +UDP2_SendStop(ICChunkTransportState *transportStates, + int16 motNodeID) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + cstate->SendStop(motNodeID); + } catch (...) { + handleException(); + } +} + +bool +UDP2_SendData(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + DataBlock *pblocks, + int num, + bool broadcast) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + return cstate->SendData(motNodeID, targetRoute, pblocks, num, broadcast); + } catch (...) { + handleException(); + } + + return false; +} + +/* + * The fetches a direct pointer into our transmit buffers, along with + * an indication as to how much data can be safely shoved into the + * buffer (started at the pointed location). + * + * This works a lot like SendTupleChunkToAMS(). + */ +void +UDP2_GetFreeSpace(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + BufferBlock *b) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + cstate->GetFreeSpace(motNodeID, targetRoute, b); + } catch (...) { + handleException(); + } +} + +void +UDP2_ReduceFreeSpace(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + int length) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + cstate->ReduceFreeSpace(motNodeID, targetRoute, length); + } catch (...) { + handleException(); + } +} + +/* + * SendAck + * + * The cdbmotion code has discarded our pointer to the motion-conn + * structure, but has enough info to fully specify it. + */ +void +UDP2_ReleaseAndAck(ICChunkTransportState *transportStates, + int motNodeID, + int route) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + cstate->ReleaseAndAck(motNodeID, route); + } catch (...) { + handleException(); + } +} + +void +UDP2_DeactiveRoute(ICChunkTransportState *transportStates, int motNodeID, int + srcRoute, const char *reason) { Assert(transportStates); + + try { CChunkTransportState *cstate = + static_cast(transportStates); + cstate->DeactiveRoute(motNodeID, srcRoute, reason); + } catch (...) { + handleException(); + } +} + +void* +UDP2_GetOpaqueDataInConn(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + return cstate->GetOpaqueDataInConn(motNodeID, targetRoute); + } catch (...) { + handleException(); + } + + return NULL; +} + +int32* +UDP2_GetSentRecordTypmodInConn(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute) +{ + Assert(transportStates); + + try { + CChunkTransportState *cstate = static_cast(transportStates); + return cstate->GetSentRecordTypmodInConn(motNodeID, targetRoute); + } catch (...) { + handleException(); + } + + return NULL; +} + +void +UDP2_InitUDPIFC(GlobalMotionLayerIPCParam *param) +{ + if (param) + { + if (global_param.interconnect_address) + free(global_param.interconnect_address); + + memcpy(&global_param, param, sizeof(*param)); + global_param.interconnect_address = strdup(param->interconnect_address); + } + + try { + InitMotionUDPIFC(&UDP_listenerFd, &udp_listener_port); + + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "Interconnect listening on udp port %d ", udp_listener_port); + + } catch (...) { + handleException(); + } +} + +void +UDP2_CleanUpUDPIFC(void) +{ + if (session_param.gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG_IC) + LOG(DEBUG3, "Cleaning Up Motion Layer IPC..."); + + try { + CleanupMotionUDPIFC(); + } catch (...) { + handleException(); + } + + if (UDP_listenerFd >= 0) + closesocket(UDP_listenerFd); + + /* be safe and reset global state variables. */ + udp_listener_port = 0; + UDP_listenerFd = -1; +} + +void +UDP2_WaitQuitUDPIFC(void) +{ + /* + * Just in case ic thread is waiting on the locks. + */ + pthread_mutex_unlock(&ic_control_info.lock); + + ic_atomic_write_u32(&ic_control_info.shutdown, 1); + + if (ic_control_info.threadCreated) + { + SendDummyPacket(); + pthread_join(ic_control_info.threadHandle, NULL); + } + ic_control_info.threadCreated = false; +} + +uint32 +UDP2_GetActiveConns(void) +{ + return ic_statistics.activeConnectionsNum; +} + +int +UDP2_GetICHeaderSizeUDP(void) +{ + return sizeof(struct icpkthdr); +} + +int32 +UDP2_GetListenPortUDP(void) +{ + return udp_listener_port; +} + +#ifdef __cplusplus +} // extern "C" +#endif \ No newline at end of file diff --git a/contrib/udp2/ic_common/udp2/ic_udp2.h b/contrib/udp2/ic_common/udp2/ic_udp2.h new file mode 100644 index 00000000000..e49da698b79 --- /dev/null +++ b/contrib/udp2/ic_common/udp2/ic_udp2.h @@ -0,0 +1,102 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_udp2.h + * + * IDENTIFICATION + * contrib/udp2/ic_common/udp2/ic_udp2.h + * + *------------------------------------------------------------------------- + */ + +#ifndef IC_UDP2_H +#define IC_UDP2_H + +#include "ic_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern void UDP2_InitUDPIFC(struct GlobalMotionLayerIPCParam *param); +extern void UDP2_CleanUpUDPIFC(void); +extern void UDP2_WaitQuitUDPIFC(void); + +extern ICChunkTransportState* UDP2_SetupUDP(ICSliceTable *sliceTable, + SessionMotionLayerIPCParam *param); +extern void UDP2_TeardownUDP(ICChunkTransportState *transportStates, + bool hasErrors); + +// recv +extern void UDP2_RecvRoute(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 srcRoute, + GetDataLenInPacket getLen, + DataBlock *data); +extern void UDP2_RecvAny(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 *srcRoute, + GetDataLenInPacket getLen, + DataBlock *data); +extern void UDP2_SendStop(ICChunkTransportState *transportStates, int16 motNodeID); +extern void UDP2_ReleaseAndAck(ICChunkTransportState *transportStates, + int motNodeID, + int route); +extern void UDP2_DeactiveRoute(ICChunkTransportState *transportStates, + int motNodeID, + int srcRoute, + const char *reason); + +// send +extern void UDP2_SendEOS(ICChunkTransportState *transportStates, + int motNodeID, + DataBlock *data); +extern bool UDP2_SendData(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + DataBlock *pblocks, + int num, + bool broadcast); +extern void UDP2_GetFreeSpace(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + BufferBlock *b); +extern void UDP2_ReduceFreeSpace(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + int length); + + +// utility func +extern void* UDP2_GetOpaqueDataInConn(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute); +extern int32* UDP2_GetSentRecordTypmodInConn(ICChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute); + +extern uint32 UDP2_GetActiveConns(void); +extern int UDP2_GetICHeaderSizeUDP(void); +extern int32 UDP2_GetListenPortUDP(void); + +#ifdef __cplusplus +} +#endif + +#endif // IC_UDP2_H \ No newline at end of file diff --git a/contrib/udp2/ic_common/udp2/ic_udp2.hpp b/contrib/udp2/ic_common/udp2/ic_udp2.hpp new file mode 100644 index 00000000000..a7e6356fb9c --- /dev/null +++ b/contrib/udp2/ic_common/udp2/ic_udp2.hpp @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_udp2.hpp + * + * IDENTIFICATION + * contrib/udp2/ic_common/udp2/ic_udp2.hpp + * + *------------------------------------------------------------------------- + */ +#ifndef IC_UDP2_HPP +#define IC_UDP2_HPP + +#include +#include +#include +#include +#include + +#include "ic_types.h" +#include "ic_except.hpp" + +struct CChunkTransportState : public ICChunkTransportState +{ +public: + static ICChunkTransportState* SetupUDP(ICSliceTable *sliceTable, SessionMotionLayerIPCParam *param); + void TeardownUDP(bool hasErrors); + + void RecvRoute(int16 motNodeID, int16 srcRoute, GetDataLenInPacket getLen, DataBlock *data); + void RecvAny(int16 motNodeID, int16 *srcRoute, GetDataLenInPacket getLen, DataBlock *data); + void ReleaseAndAck(int motNodeID, int route); + void SendStop(int16 motNodeID); + void DeactiveRoute(int motNodeID, int srcRoute, const char *reason); + + void SendEOS(int motNodeID, DataBlock *data); + bool SendData(int16 motNodeID, int16 targetRoute, DataBlock *pblocks, int num, bool broadcast); + void GetFreeSpace(int16 motNodeID, int16 targetRoute, BufferBlock *b); + void ReduceFreeSpace(int16 motNodeID, int16 targetRoute, int length); + + void* GetOpaqueDataInConn(int16 motNodeID, int16 targetRoute); + int32* GetSentRecordTypmodInConn(int16 motNodeID, int16 targetRoute); + + int GetConnNum(int motNodeID); + + static CChunkTransportState** GetTransportState(); + + /* APIs for vector engine */ + void NotifyQuit(); + void SetVectorEngineAsUser(); +}; + +#endif // IC_UDP2_HPP \ No newline at end of file diff --git a/contrib/udp2/ic_common/udp2/ic_udp2_internal.hpp b/contrib/udp2/ic_common/udp2/ic_udp2_internal.hpp new file mode 100644 index 00000000000..baeb6a0841c --- /dev/null +++ b/contrib/udp2/ic_common/udp2/ic_udp2_internal.hpp @@ -0,0 +1,1213 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_udp2_internal.hpp + * + * IDENTIFICATION + * contrib/udp2/ic_common/udp2/ic_udp2_internal.hpp + * + *------------------------------------------------------------------------- + */ +#ifndef IC_UDP2_INTERNAL_HPP +#define IC_UDP2_INTERNAL_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ic_udp2.hpp" +#include "ic_utility.hpp" + +namespace { + +typedef enum MotionConnState +{ + mcsNull, + mcsAccepted, + mcsSetupOutgoingConnection, + mcsConnecting, + mcsRecvRegMsg, + mcsSendRegMsg, + mcsStarted, + mcsEosSent +} MotionConnState; + +/* + * Structure used for keeping track of a pt-to-pt connection between two + * Cdb Entities (either QE or QD). + */ +typedef struct MotionConn +{ + /* socket file descriptor. */ + int sockfd; + + /* pointer to the data buffer. */ + uint8 *pBuff; + + /* size of the message in the buffer, if any. */ + int32 msgSize; + + /* position of message inside of buffer, "cursor" pointer */ + uint8 *msgPos; + + /* + * recv bytes: we can have more than one message/message fragment in recv + * queue at once + */ + int32 recvBytes; + + int tupleCount; + + /* + * false means 1) received a stop message and has handled it. 2) received + * EOS message or sent out EOS message 3) received a QueryFinishPending + * notify and has handled it. + */ + bool stillActive; + + /* + * used both by motion sender and motion receiver + * + * sender: true means receiver don't need to consume tuples any more, + * sender is also responsible to send stop message to its senders. + * + * receiver: true means have sent out a stop message to its senders. The + * stop message might be lost, stopRequested can also tell sender that no + * more data needed in the ack message. + */ + bool stopRequested; + + MotionConnState state; + + ICCdbProcess *cdbProc; + int remoteContentId; + char remoteHostAndPort[128]; /* Numeric IP addresses should never + * be longer than about 50 chars, but + * play it safe */ + + void *opaque_data; + + /* + * used by the sender. + * + * the typmod of last sent record type in current connection, + * if the connection is for broadcasting then we only check + * and update this attribute on connection 0. + */ + int32 sent_record_typmod; + +} MotionConn; + +/* + * Used to organize all of the information for a given motion node. + */ +typedef struct ChunkTransportStateEntry +{ + int motNodeId; + bool valid; + + /* Connection array + * + * MUST pay attention: use getMotionConn to get MotionConn. + * must not use `->conns[index]` to get MotionConn. Because the struct + * MotionConn is a base structure for MotionConnTCP and + * MotionConnUDP. After connection setup, the `conns` will be fill + * with MotionConnUDP/MotionConnTCP, but the pointer still is + * MotionConn which should use `CONTAINER_OF` to get the real object. + */ + MotionConn *conns; + int numConns; + + int scanStart; + + /* slice table entries */ + struct ICExecSlice *sendSlice; + struct ICExecSlice *recvSlice; + +} ChunkTransportStateEntry; + +typedef struct icpkthdr +{ + int32 motNodeId; + + /* + * three pairs which seem useful for identifying packets. + * + * MPP-4194: It turns out that these can cause collisions; but the high + * bit (1<<31) of the dstListener port is now used for disambiguation with + * mirrors. + */ + int32 srcPid; + int32 srcListenerPort; + + int32 dstPid; + int32 dstListenerPort; + + int32 sessionId; + int32 icId; + + int32 recvSliceIndex; + int32 sendSliceIndex; + int32 srcContentId; + int32 dstContentId; + + /* MPP-6042: add CRC field */ + uint32 crc; + + /* packet specific info */ + int32 flags; + uint32 len; + + /* + * The usage of seq and extraSeq field + * a) In a normal DATA packet + * seq -> the data packet sequence number + * extraSeq -> not used + * b) In a normal ACK message (UDPIC_FLAGS_ACK | UDPIC_FLAGS_CAPACITY) + * seq -> the largest seq of the continuously cached packets + * sometimes, it is special, for exampke, conn req ack, mismatch ack. + * extraSeq -> the largest seq of the consumed packets + * c) In a start race NAK message (UPDIC_FLAGS_NAK) + * seq -> the seq from the pkt + * extraSeq -> the extraSeq from the pkt + * d) In a DISORDER message (UDPIC_FLAGS_DISORDER) + * seq -> packet sequence number that triggers the disorder message + * extraSeq -> the largest seq of the received packets + * e) In a DUPLICATE message (UDPIC_FLAGS_DUPLICATE) + * seq -> packet sequence number that triggers the duplicate message + * extraSeq -> the largest seq of the continuously cached packets + * f) In a stop messege (UDPIC_FLAGS_STOP | UDPIC_FLAGS_ACK | UDPIC_FLAGS_CAPACITY) + * seq -> the largest seq of the continuously cached packets + * extraSeq -> the largest seq of the continuously cached packets + * + * + * NOTE that: EOS/STOP flags are often saved in conn_info structure of a connection. + * It is possible for them to be sent together with other flags. + * + */ + uint32 seq; + uint32 extraSeq; +} icpkthdr; + +typedef struct ICBuffer ICBuffer; +typedef struct ICBufferLink ICBufferLink; + +typedef enum ICBufferListType +{ + ICBufferListType_Primary, + ICBufferListType_Secondary, + ICBufferListType_UNDEFINED +} ICBufferListType; + +struct ICBufferLink +{ + ICBufferLink *next; + ICBufferLink *prev; +}; + +/* + * ICBufferList + * ic buffer list data structure. + * + * There are two kinds of lists. The first kind of list uses the primary next/prev pointers. + * And the second kind uses the secondary next/prev pointers. + */ +struct ICBufferList +{ + int len; + ICBufferListType type; /* primary or secondary */ + + ICBufferLink head; + +#if defined(USE_ASSERT_CHECKING) || defined(AMS_VERBOSE_LOGGING) + void icBufferListLog(); +#endif + +#ifdef USE_ASSERT_CHECKING + void icBufferListCheck(const char *prefix); +#endif + + void init(ICBufferListType type); + void destroy(); + + bool is_head(ICBufferLink *link); + int length(); + ICBufferLink* first(); + + ICBuffer* append(ICBuffer *buf); + ICBuffer* remove(ICBuffer *buf); + ICBuffer* pop(); + + void release(bool inExpirationQueue); + + void dump_to_file(FILE *ofile); +}; + +#define GET_ICBUFFER_FROM_PRIMARY(ptr) CONTAINER_OF(ptr, ICBuffer, primary) +#define GET_ICBUFFER_FROM_SECONDARY(ptr) CONTAINER_OF(ptr, ICBuffer, secondary) + +/* + * ICBuffer + * interconnect buffer data structure. + * + * In some cases, an ICBuffer may exists in two lists/queues, + * thus it has two sets of pointers. For example, an ICBuffer + * can exist in an unack queue and an expiration queue at the same time. + * + * It is important to get the ICBuffer address when we iterate a list of + * ICBuffers through primary/secondary links. The Macro GET_ICBUFFER_FROM_PRIMARY + * and GET_ICBUFFER_FROM_SECONDARY are for this purpose. + * + */ +struct ICBuffer +{ + /* primary next and prev pointers */ + ICBufferLink primary; + + /* secondary next and prev pointers */ + ICBufferLink secondary; + + /* connection that this buffer belongs to */ + MotionConn *conn; + + /* + * Three fields for expiration processing + * + * sentTime - the time this buffer was sent nRetry - the number of send + * retries unackQueueRingSlot - unack queue ring slot index + */ + uint64 sentTime; + int32 nRetry; + int32 unackQueueRingSlot; + + /* real data */ + icpkthdr pkt[0]; +}; + +static inline void* +ic_malloc(size_t size) +{ + return malloc(size); +} + +static inline void* +ic_malloc0(size_t size) +{ + void *rs = ic_malloc(size); + if (rs) + memset(rs, 0, size); + return rs; +} + +static inline void +ic_free(void *p) +{ + free(p); +} + +static inline void +ic_free_clean(void **p) +{ + ic_free(*p); + *p = NULL; +} + +static inline void +ic_usleep(long microsec) +{ + if (microsec > 0) + { + struct timeval delay; + + delay.tv_sec = microsec / 1000000L; + delay.tv_usec = microsec % 1000000L; + (void) select(0, NULL, NULL, NULL, &delay); + } +} + +/* + * Put socket into nonblock mode. + * Returns true on success, false on failure. + */ +static inline bool +ic_set_noblock(int sock) +{ + int flags; + + flags = fcntl(sock, F_GETFL); + if (flags < 0) + return false; + if (fcntl(sock, F_SETFL, (flags | O_NONBLOCK)) == -1) + return false; + return true; +} + +/* ic_atomic_xxx */ +typedef struct ic_atomic_uint32 +{ + volatile uint32 value; +} ic_atomic_uint32; + +static inline void +ic_atomic_init_u32(volatile ic_atomic_uint32 *ptr, uint32 val) +{ + ptr->value = val; +} + +static inline uint32 +ic_atomic_read_u32(volatile ic_atomic_uint32 *ptr) +{ + return ptr->value; +} + +static inline void +ic_atomic_write_u32(volatile ic_atomic_uint32 *ptr, uint32 val) +{ + ptr->value = val; +} + +static inline bool +ic_atomic_compare_exchange_u32(volatile ic_atomic_uint32 *ptr, + uint32 *expected, uint32 newval) +{ + /* FIXME: we can probably use a lower consistency model */ + return __atomic_compare_exchange_n(&ptr->value, expected, newval, false, + __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); +} + +static inline uint32 +ic_atomic_add_fetch_u32(volatile ic_atomic_uint32 *ptr, int32 add_) +{ + return __sync_fetch_and_add(&ptr->value, add_) + add_; +} + +static inline uint32 +ic_bswap32(uint32 x) +{ + return + ((x << 24) & 0xff000000) | + ((x << 8) & 0x00ff0000) | + ((x >> 8) & 0x0000ff00) | + ((x >> 24) & 0x000000ff); +} + +#define MAX_TRY (11) +#define TIMEOUT(try) ((try) < MAX_TRY ? (timeoutArray[(try)]) : (timeoutArray[MAX_TRY])) + +#define USECS_PER_SECOND 1000000 +#define MSECS_PER_SECOND 1000 + +/* 1/4 sec in msec */ +#define RX_THREAD_POLL_TIMEOUT (250) + +/* + * Flags definitions for flag-field of UDP-messages + * + * We use bit operations to test these, flags are powers of two only + */ +#define UDPIC_FLAGS_RECEIVER_TO_SENDER (1) +#define UDPIC_FLAGS_ACK (2) +#define UDPIC_FLAGS_STOP (4) +#define UDPIC_FLAGS_EOS (8) +#define UDPIC_FLAGS_NAK (16) +#define UDPIC_FLAGS_DISORDER (32) +#define UDPIC_FLAGS_DUPLICATE (64) +#define UDPIC_FLAGS_CAPACITY (128) + +#define UDPIC_MIN_BUF_SIZE (128 * 1024) + +/* + * ConnHtabBin + * + * A connection hash table bin. + * + */ +struct UDPConn; +typedef struct ConnHtabBin ConnHtabBin; +struct ConnHtabBin +{ + UDPConn *conn; + struct ConnHtabBin *next; +}; + +/* + * ConnHashTable + * + * Connection hash table definition. + * + */ +typedef struct ConnHashTable ConnHashTable; +struct ConnHashTable +{ + ConnHtabBin **table; + int size; + + bool init(); + bool add(UDPConn *conn); + UDPConn *find(icpkthdr *hdr); + void destroy(); + void remove(UDPConn *conn); +}; + +#define CONN_HASH_VALUE(icpkt) ((uint32)((((icpkt)->srcPid ^ (icpkt)->dstPid)) + (icpkt)->dstContentId)) +#define CONN_HASH_MATCH(a, b) (((a)->motNodeId == (b)->motNodeId && \ + (a)->dstContentId == (b)->dstContentId && \ + (a)->srcContentId == (b)->srcContentId && \ + (a)->recvSliceIndex == (b)->recvSliceIndex && \ + (a)->sendSliceIndex == (b)->sendSliceIndex && \ + (a)->srcPid == (b)->srcPid && \ + (a)->dstPid == (b)->dstPid && (a)->icId == (b)->icId)) + +/* + * CursorICHistoryEntry + * + * The definition of cursor IC history entry. + */ +typedef struct CursorICHistoryEntry CursorICHistoryEntry; +struct CursorICHistoryEntry +{ + /* Interconnect instance id. */ + uint32 icId; + + /* Command id. */ + uint32 cid; + + /* + * Interconnect instance status. state 1 (value 1): interconnect is setup + * state 0 (value 0): interconnect was torn down. + */ + uint8 status; + + /* Next entry. */ + CursorICHistoryEntry *next; + + CursorICHistoryEntry(uint32 aicId, uint32 acid): + icId(aicId), cid(acid),status(1){} +}; + +/* + * CursorICHistoryTable + * + * Cursor IC history table. It is a small hash table. + */ +typedef struct CursorICHistoryTable CursorICHistoryTable; +struct CursorICHistoryTable +{ + uint32 size; + uint32 count; + CursorICHistoryEntry **table; + + void init() { + count = 0; + size = session_param.Gp_interconnect_cursor_ic_table_size; + table = (CursorICHistoryEntry **)ic_malloc0(sizeof(CursorICHistoryEntry *) * size); + } + + void add(uint32 icId, uint32 cid) { + uint32 index = icId % size; + CursorICHistoryEntry *p = new CursorICHistoryEntry(icId, cid); + + p->next = this->table[index]; + this->table[index] = p; + this->count++; + + LOG(DEBUG2, "add icid %d cid %d status %d", p->icId, p->cid, p->status); + + return; + } + + /* + * state 1 (value 1): interconnect is setup + * state 0 (value 0): interconnect was torn down. + */ + void update(uint32 icId, uint8 status) { + for (CursorICHistoryEntry *p = table[icId % size]; p; p = p->next) { + if (p->icId == icId) { + p->status = status; + return; + } + } + } + + CursorICHistoryEntry* get(uint32 icId) { + for (CursorICHistoryEntry *p = table[icId % size]; p; p = p->next) { + if (p->icId == icId) + return p; + } + return NULL; + } + + void purge() { + for (uint8 index = 0; index < size; index++) { + while (table[index]) { + CursorICHistoryEntry *trash = table[index]; + table[index] = trash->next; + delete trash; + } + } + } + + void prune(uint32 icId); +}; + +/* + * Synchronization timeout values + * + * MAIN_THREAD_COND_TIMEOUT - 1/4 second + */ +#define MAIN_THREAD_COND_TIMEOUT_MS (250) + +/* + * Used for synchronization between main thread (receiver) and background thread. + * + */ +typedef struct ThreadWaitingState ThreadWaitingState; +struct ThreadWaitingState +{ + bool waiting; + int waitingNode; + int waitingRoute; + int reachRoute; + + /* main_thread_waiting_query is needed to disambiguate for cursors */ + int waitingQuery; + + void reset() { + waiting = false; + waitingNode = -1; + waitingRoute = ANY_ROUTE; + reachRoute = ANY_ROUTE; + waitingQuery = -1; + } + + void set(int motNodeId, int route, int icId) { + waiting = true; + waitingNode = motNodeId; + waitingRoute = route; + reachRoute = ANY_ROUTE; + waitingQuery = icId; + } +}; + +/* + * ReceiveControlInfo + * + * The related control information for receiving data packets. + * Main thread (Receiver) and background thread use the information in + * this data structure to handle data packets. + * + */ +typedef struct ReceiveControlInfo ReceiveControlInfo; +struct ReceiveControlInfo +{ + /* Main thread waiting state. */ + ThreadWaitingState mainWaitingState; + + /* + * Buffers used to assemble disorder messages at receiver side. + */ + icpkthdr *disorderBuffer; + + /* The last interconnect instance id which is torn down. */ + int32 lastTornIcId; + + /* Cursor history table. */ + CursorICHistoryTable cursorHistoryTable; + + /* + * Last distributed transaction id when SetupUDPInterconnect is called. + * Coupled with cursorHistoryTable, it is used to handle multiple + * concurrent cursor cases. + */ + DistributedTransactionId lastDXatId; +}; + +/* + * RxBufferPool + * + * Receive thread buffer pool definition. The implementation of + * receive side buffer pool is different from send side buffer pool. + * It is because receive side buffer pool needs a ring buffer to + * easily implement disorder message handling logic. + */ + +typedef struct RxBufferPool RxBufferPool; +struct RxBufferPool +{ + /* The max number of buffers we can get from this pool. */ + int maxCount; + + /* The number of allocated buffers */ + int count; + + /* The list of free buffers. */ + char *freeList; + + void put(icpkthdr *buf); + void release(icpkthdr *buf); + icpkthdr* get(); + icpkthdr* get_free(); +}; + +/* + * SendBufferPool + * + * The send side buffer pool definition. + * + */ +typedef struct SendBufferPool SendBufferPool; +struct SendBufferPool +{ + /* The maximal number of buffers sender can use. */ + int maxCount; + + /* The number of buffers sender already used. */ + int count; + + /* The free buffer list at the sender side. */ + ICBufferList freeList; + + void init(); + void clean(); + ICBuffer* get(UDPConn *conn); +}; + +/* + * SendControlInfo + * + * The related control information for sending data packets and handling acks. + * Main thread use the information in this data structure to do ack handling + * and congestion control. + * + */ +typedef struct SendControlInfo SendControlInfo; +struct SendControlInfo +{ + /* The buffer used for accepting acks */ + icpkthdr *ackBuffer; + + /* congestion window */ + float cwnd; + + /* minimal congestion control window */ + float minCwnd; + + /* slow start threshold */ + float ssthresh; + +}; + +/* + * ICGlobalControlInfo + * + * Some shared control information that is used by main thread (senders, receivers, or both) + * and the background thread. + * + */ +typedef struct ICGlobalControlInfo ICGlobalControlInfo; +struct ICGlobalControlInfo +{ + /* The background thread handle. */ + pthread_t threadHandle; + + /* Keep the udp socket buffer size used. */ + uint32 socketSendBufferSize; + uint32 socketRecvBufferSize; + + uint64 lastExpirationCheckTime; + uint64 lastDeadlockCheckTime; + + /* Used to decide whether to retransmit for capacity based FC. */ + uint64 lastPacketSendTime; + + /* + * Lock and latch for coordination between main thread and + * background thread. It protects the shared data between the two threads + * (the connHtab, rx buffer pool and the mainWaitingState etc.). + */ + pthread_mutex_t lock; + + /* Am I a sender? */ + bool isSender; + + /* Flag showing whether the thread is created. */ + bool threadCreated; + + /* Error number. Actually int but we do not have ic_atomic_int32. */ + ic_atomic_uint32 eno; + + /* + * Global connection htab for both sending connections and receiving + * connections. Protected by the lock in this data structure. + */ + ConnHashTable connHtab; + + /* The connection htab used to cache future packets. */ + ConnHashTable startupCacheHtab; + + /* Used by main thread to ask the background thread to exit. */ + ic_atomic_uint32 shutdown; + + /*Serialization + * Used by ic thread in the QE to identify the current serving ic instance + * and handle the mismatch packets. It is not used by QD because QD may have + * cursors, QD may receive packets for open the cursors with lower instance + * id, QD use cursorHistoryTable to handle packets mismatch. + */ + int32 ic_instance_id; +}; + +/* + * Macro for unack queue ring, round trip time (RTT) and expiration period (RTO) + * + * UNACK_QUEUE_RING_SLOTS_NUM - the number of slots in the unack queue ring. + * this value should be greater than or equal to 2. + * TIMER_SPAN - timer period in us + * TIMER_CHECKING_PERIOD - timer checking period in us + * UNACK_QUEUE_RING_LENGTH - the whole time span of the unack queue ring + * DEFAULT_RTT - default rtt in us. + * MIN_RTT - min rtt in us + * MAX_RTT - max rtt in us + * RTT_SHIFT_COEFFICIENT - coefficient for RTT computation + * + * DEFAULT_DEV - default round trip standard deviation + * MAX_DEV - max dev + * DEV_SHIFT_COEFFICIENT - coefficient for DEV computation + * + * MAX_EXPIRATION_PERIOD - max expiration period in us + * MIN_EXPIRATION_PERIOD - min expiration period in us + * MAX_TIME_NO_TIMER_CHECKING - max time without checking timer + * DEADLOCK_CHECKING_TIME - deadlock checking time + * + * MAX_SEQS_IN_DISORDER_ACK - max number of sequences that can be transmitted in a + * disordered packet ack. + * + * + * Considerations on the settings of the values: + * + * TIMER_SPAN and UNACK_QUEUE_RING_SLOTS_NUM define the ring period. + * Currently, it is UNACK_QUEUE_RING_LENGTH (default 10 seconds). + * + * The definition of UNACK_QUEUE_RING_LENGTH is quite related to the size of + * sender side buffer and the size we may resend in a burst for an expiration event + * (which may overwhelm switch or OS if it is too large). + * Thus, we do not want to send too much data in a single expiration event. Here, a + * relatively large UNACK_QUEUE_RING_SLOTS_NUM value is used to avoid that. + * + * If the sender side buffer is X (MB), then on each slot, + * there are about X/UNACK_QUEUE_RING_SLOTS_NUM. Even we have a very large sender buffer, + * for example, 100MB, there is about 96M/2000 = 50K per slot. + * This is fine for the OS (with buffer 2M for each socket generally) and switch. + * + * Note that even when the buffers are not evenly distributed in the ring and there are some packet + * losses, the congestion control mechanism, the disorder and duplicate packet handling logic will + * assure the number of outstanding buffers (in unack queues) to be not very large. + * + * MIN_RTT/MAX_RTT/DEFAULT_RTT/MIN_EXPIRATION_PERIOD/MAX_EXPIRATION_PERIOD gives some heuristic values about + * the computation of RTT and expiration period. RTT and expiration period (RTO) are not + * constant for various kinds of hardware and workloads. Thus, they are computed dynamically. + * But we also want to bound the values of RTT and MAX_EXPIRATION_PERIOD. It is + * because there are some faults that may make RTT a very abnormal value. Thus, RTT and + * expiration period are upper and lower bounded. + * + * MAX_SEQS_IN_DISORDER_ACK should be smaller than (MIN_PACKET_SIZE - sizeof(icpkthdr))/sizeof(uint32). + * It is due to the limitation of the ack receive buffer size. + * + */ +#define UNACK_QUEUE_RING_SLOTS_NUM (2000) +#define TIMER_SPAN (session_param.Gp_interconnect_timer_period * 1000ULL) /* default: 5ms */ +#define TIMER_CHECKING_PERIOD (session_param.Gp_interconnect_timer_checking_period) /* default: 20ms */ +#define UNACK_QUEUE_RING_LENGTH (UNACK_QUEUE_RING_SLOTS_NUM * TIMER_SPAN) + +#define DEFAULT_RTT (session_param.Gp_interconnect_default_rtt * 1000) /* default: 20ms */ +#define MIN_RTT (100) /* 0.1ms */ +#define MAX_RTT (200 * 1000) /* 200ms */ +#define RTT_SHIFT_COEFFICIENT (3) /* RTT_COEFFICIENT 1/8 (0.125) */ + +#define DEFAULT_DEV (0) +#define MIN_DEV MIN_RTT +#define MAX_DEV MAX_RTT +#define DEV_SHIFT_COEFFICIENT (2) /* DEV_COEFFICIENT 1/4 (0.25) */ + +#define MAX_EXPIRATION_PERIOD (1000 * 1000) /* 1s */ +#define MIN_EXPIRATION_PERIOD (session_param.Gp_interconnect_min_rto * 1000) /* default: 20ms */ + +#define MAX_TIME_NO_TIMER_CHECKING (50 * 1000) /* 50ms */ +#define DEADLOCK_CHECKING_TIME (512 * 1000) /* 512ms */ + +#define MAX_SEQS_IN_DISORDER_ACK (4) + +/* + * UnackQueueRing + * + * An unacked queue ring is used to decide which packet is expired in constant time. + * + * Each slot of the ring represents a fixed time span, for example 1ms, and + * each slot has a associated buffer list/queue which contains the packets + * which will expire in the time span. + * + * If the current time pointer (time t) points to slot 1, + * then slot 2 represents the time span from t + 1ms to t + 2ms. + * When we check whether there are some packets expired, we start from the last + * current time recorded, and resend all the packets in the queue + * until we reach the slot that the updated current time points to. + * + */ +typedef struct UnackQueueRing UnackQueueRing; +struct UnackQueueRing +{ + /* save the current time when we check the time wheel for expiration */ + uint64 currentTime; + + /* the slot index corresponding to current time */ + int idx; + + /* the number of outstanding packets in unack queue ring */ + int numOutStanding; + + /* + * the number of outstanding packets that use the shared bandwidth in the + * congestion window. + */ + int numSharedOutStanding; + + /* time slots */ + ICBufferList slots[UNACK_QUEUE_RING_SLOTS_NUM]; +}; + +/* + * AckSendParam + * + * The parameters for ack sending. + */ +typedef struct AckSendParam +{ + /* header for the ack */ + icpkthdr msg; + + /* peer address for the ack */ + struct sockaddr_storage peer; + socklen_t peer_len; +} AckSendParam; + +/* + * ICStatistics + * + * A structure keeping various statistics about interconnect internal. + * + * Note that the statistics for ic are not accurate for multiple cursor case on QD. + * + * totalRecvQueueSize - receive queue size sum when main thread is trying to get a packet. + * recvQueueSizeCountingTime - counting times when computing totalRecvQueueSize. + * totalCapacity - the capacity sum when packets are tried to be sent. + * capacityCountingTime - counting times used to compute totalCapacity. + * totalBuffers - total buffers available when sending packets. + * bufferCountingTime - counting times when compute totalBuffers. + * activeConnectionsNum - the number of active connections. + * retransmits - the number of packet retransmits. + * mismatchNum - the number of mismatched packets received. + * crcErrors - the number of crc errors. + * sndPktNum - the number of packets sent by sender. + * recvPktNum - the number of packets received by receiver. + * disorderedPktNum - disordered packet number. + * duplicatedPktNum - duplicate packet number. + * recvAckNum - the number of Acks received. + * statusQueryMsgNum - the number of status query messages sent. + * + */ +typedef struct ICStatistics +{ + uint64 totalRecvQueueSize; + uint64 recvQueueSizeCountingTime; + uint64 totalCapacity; + uint64 capacityCountingTime; + uint64 totalBuffers; + uint64 bufferCountingTime; + uint32 activeConnectionsNum; + int32 retransmits; + int32 startupCachedPktNum; + int32 mismatchNum; + int32 crcErrors; + int32 sndPktNum; + int32 recvPktNum; + int32 disorderedPktNum; + int32 duplicatedPktNum; + int32 recvAckNum; + int32 statusQueryMsgNum; +} ICStatistics; + +struct TransportEntry; + +/* + * Structure used for keeping track of a pt-to-pt connection between two + * Cdb Entities (either QE or QD). + */ +struct UDPConn : public MotionConn +{ +public: + /* send side queue for packets to be sent */ + ICBufferList sndQueue; + int capacity; + + /* seq already sent */ + uint32 sentSeq; + + /* ack of this seq and packets with smaller seqs have been received */ + uint32 receivedAckSeq; + + /* packets with this seq or smaller seqs have been consumed */ + uint32 consumedSeq; + + uint64 rtt; + uint64 dev; + uint64 deadlockCheckBeginTime; + + ICBuffer *curBuff; + + /* + * send side unacked packet queue. Since it is often accessed at the same + * time with unack queue ring, it is protected with unqck queue ring lock. + */ + ICBufferList unackQueue; + + uint16 route; + + struct icpkthdr conn_info; + + struct sockaddr_storage peer; /* Allow for IPv4 or IPv6 */ + socklen_t peer_len; /* And remember the actual length */ + + /* a queue of maximum length Gp_interconnect_queue_depth */ + uint32 pkt_q_capacity; /* max capacity of the queue */ + uint32 pkt_q_size; /* number of packets in the queue */ + int pkt_q_head; + int pkt_q_tail; + uint8 **pkt_q; + + uint64 stat_total_ack_time; + uint64 stat_count_acks; + uint64 stat_max_ack_time; + uint64 stat_min_ack_time; + uint64 stat_count_resent; + uint64 stat_max_resent; + uint64 stat_count_dropped; + + TransportEntry *entry_; + +public: + UDPConn(TransportEntry *entry); + + void GetDataInBuf(GetDataLenInPacket getLen, DataBlock *data); + void ReleaseBuffer(AckSendParam *param); + + void setAckParam(AckSendParam *param, int32 flags, uint32 seq, uint32 extraSeq); + void sendAck(int32 flags, uint32 seq, uint32 extraSeq); + void sendDisorderAck(uint32 seq, uint32 extraSeq, uint32 lostPktCnt); + void sendStatusQueryMessage(uint32 seq); + + uint64 computeExpirationPeriod(uint32 retry); + + void freeDisorderedPackets(); + void prepareRxConnForRead(); + void DeactiveConn(); + + void handleAckedPacket(ICBuffer *buf, uint64 now); + void prepareXmit(); + void sendOnce(icpkthdr *pkt); + void handleStop(); + void sendBuffers(); + + void handleDisorderPacket(int pos, uint32 tailSeq, icpkthdr *pkt); + bool handleAckForDisorderPkt(icpkthdr *pkt); + bool handleAckForDuplicatePkt(icpkthdr *pkt); + int computeTimeout(int retry); + + void Send(DataBlock *data); + + void checkDeadlock(); + void checkExceptions(int retry, int timeout); + + void updateRetransmitStatistics(); + void checkExpirationCapacityFC(int timeout); + + static void checkNetworkTimeout(ICBuffer *buf, uint64 now, bool *networkTimeoutIsLogged); + static void checkExpiration(ICChunkTransportState *transportStates, uint64 now); + + static void sendAckWithParam(AckSendParam *param); + static void sendControlMessage(icpkthdr *pkt, int fd, struct sockaddr *addr, socklen_t peerLen); +}; + + +/* + * Used to organize all of the information for a given motion node. + */ +struct CChunkTransportStateEntry +{ + int motNodeId; + bool valid; + + /* Connection array + * + * MUST pay attention: use getMotionConn to get MotionConn. + * must not use `->conns[index]` to get MotionConn. Because the struct + * MotionConn is a base structure for MotionConnTCP and + * MotionConnUDP. After connection setup, the `conns` will be fill + * with MotionConnUDP/MotionConnTCP, but the pointer still is + * MotionConn which should use `CONTAINER_OF` to get the real object. + */ + MotionConn *conns; + int numConns; + + int scanStart; + + /* slice table entries */ + struct ICExecSlice *sendSlice; + struct ICExecSlice *recvSlice; +}; + +class CChunkTransportStateImpl; + +class TransportEntry : public CChunkTransportStateEntry +{ +public: + static std::unique_ptr + MakeRecvEntry(CChunkTransportStateImpl *state, int icid, ICExecSlice *sendSlice, ICExecSlice *recvSlice); + + static std::unique_ptr + MakeSendEntry(CChunkTransportStateImpl *state, int icid, ICExecSlice *sendSlice, ICExecSlice *recvSlice); + + TransportEntry(CChunkTransportStateImpl *state, int motNodeID, int numConns, ICExecSlice *sendSlice, ICExecSlice *recvSlice); + + UDPConn* GetConn(int index); + + void aggregateStatistics(); + + bool handleAcks(); + void handleStopMsgs(); + + bool pollAcks(int timeout); + + void dumpConnections(const char *fname); + + bool SendData(int16 targetRoute, DataBlock *pblocks, int num, bool broadcast); + void Broadcast(DataBlock *data, int *inactiveCountPtr); + void Send(int16 targetRoute, DataBlock *db, bool broadcast, int *recount); + + void RecvAny(int16 *srcRoute, GetDataLenInPacket getLen, DataBlock *data); + void RecvRoute(int16 srcRoute, GetDataLenInPacket getLen, DataBlock *data); + void receiveChunksUDPIFC(int16 *srcRoute, UDPConn *conn, GetDataLenInPacket getLen, DataBlock *data); + +public: + /* setup info */ + int txfd; + int txfd_family; + unsigned short txport; + + bool sendingEos; + + /* Statistics info for this motion on the interconnect level */ + uint64 stat_total_ack_time; + uint64 stat_count_acks; + uint64 stat_max_ack_time; + uint64 stat_min_ack_time; + uint64 stat_count_resent; + uint64 stat_max_resent; + uint64 stat_count_dropped; + + std::vector> conns_; + CChunkTransportStateImpl *state; +}; + + +class CChunkTransportStateImpl : public CChunkTransportState +{ +public: + CChunkTransportStateImpl(ICSliceTable *sliceTable); + + static ICChunkTransportState* SetupUDP(ICSliceTable *sliceTable, SessionMotionLayerIPCParam *param); + void TeardownUDP(bool hasErrors); + + void RecvRoute(int16 motNodeID, int16 srcRoute, GetDataLenInPacket getLen, DataBlock *data); + void RecvAny(int16 motNodeID, int16 *srcRoute, GetDataLenInPacket getLen, DataBlock *data); + void SendStop(int16 motNodeID); + void ReleaseAndAck(int motNodeID, int route); + void DeactiveRoute(int motNodeID, int srcRoute, const char *reason); + + void SendEOS(int motNodeID, DataBlock *data); + bool SendData(int16 motNodeID, int16 targetRoute, DataBlock *pblocks, int num, bool broadcast); + void GetFreeSpace(int16 motNodeID, int16 targetRoute, BufferBlock *b); + void ReduceFreeSpace(int16 motNodeID, int16 targetRoute, int length); + + void* GetOpaqueDataInConn(int16 motNodeID, int16 targetRoute); + int32* GetSentRecordTypmodInConn(int16 motNodeID, int16 targetRoute); + + int GetConnNum(int motNodeID); + + TransportEntry* GetEntry(int motNodeID, bool checkValid); + + static CChunkTransportState **GetTransportState(); + + /* APIs for vector engine */ + void NotifyQuit(); + void SetVectorEngineAsUser(); + +private: + void checkMotNodeID(int sendMotNodeID); + void CreateRecvEntries(ICSliceTable *sliceTable); + void CreateSendEntries(ICSliceTable *sliceTable); + void DestroyRecvEntries(bool *isReceiver); + void DestroySendEntries(); + static ICChunkTransportState* setup(ICSliceTable *sliceTable); + void teardown(bool hasErrors); + + std::vector> entries_; + + static CChunkTransportState *state_; +}; + +} // namespace + +#endif /* IC_UDP2_INTERNAL_HPP */ \ No newline at end of file diff --git a/contrib/udp2/ic_modules.c b/contrib/udp2/ic_modules.c new file mode 100644 index 00000000000..47843f08c99 --- /dev/null +++ b/contrib/udp2/ic_modules.c @@ -0,0 +1,88 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_modules.c + * + * IDENTIFICATION + * contrib/udp2/ic_modules.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "cdb/ml_ipc.h" +#include "ic_modules.h" +#include "ic_udp2.h" + +PG_MODULE_MAGIC; + +static +MotionIPCLayer udp2_ipc_layer = { + .ic_type = INTERCONNECT_TYPE_UDP2, + .type_name = "udp2", + + .GetMaxTupleChunkSize = GetMaxTupleChunkSizeUDP2, + .GetListenPort = GetListenPortUDP2, + + .InitMotionLayerIPC = InitMotionIPCLayerUDP2, + .CleanUpMotionLayerIPC = CleanUpMotionLayerIPCUDP2, + .WaitInterconnectQuit = WaitInterconnectQuitUDPIFC2, + .SetupInterconnect = SetupInterconnectUDP2, + .TeardownInterconnect = TeardownInterconnectUDP2, + + .SendTupleChunkToAMS = SendTupleChunkToAMSUDP2, + .SendChunk = NULL, + .SendEOS = SendEOSUDPIFC2, + .SendStopMessage = SendStopMessageUDPIFC2, + + .RecvTupleChunkFromAny = RecvTupleChunkFromAnyUDPIFC2, + .RecvTupleChunkFrom = RecvTupleChunkFromUDPIFC2, + .RecvTupleChunk = NULL, + + .DirectPutRxBuffer = MlPutRxBufferUDPIFC2, + + .DeregisterReadInterest = DeregisterReadInterestUDP2, + .GetActiveMotionConns = GetActiveMotionConnsUDPIFC2, + + .GetTransportDirectBuffer = GetTransportDirectBufferUDPIFC2, + .PutTransportDirectBuffer = PutTransportDirectBufferUDPIFC2, + +#ifdef ENABLE_IC_PROXY + .IcProxyServiceMain = ic_proxy_server_main, +#else + .IcProxyServiceMain = NULL, +#endif + + .GetMotionConnTupleRemapper = GetMotionConnTupleRemapperUDPIFC2, + .GetMotionSentRecordTypmod = GetMotionSentRecordTypmodUDPIFC2, +}; + +void +_PG_init(void) +{ + if (!process_shared_preload_libraries_in_progress) + { + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not load udp2 outside process shared preload"))); + } + + RegisterIPCLayerImpl(&udp2_ipc_layer); +} \ No newline at end of file diff --git a/contrib/udp2/ic_modules.h b/contrib/udp2/ic_modules.h new file mode 100644 index 00000000000..a05b65894f3 --- /dev/null +++ b/contrib/udp2/ic_modules.h @@ -0,0 +1,32 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_modules.h + * + * IDENTIFICATION + * contrib/udp2/ic_modules.h + * + *------------------------------------------------------------------------- + */ +#ifndef INTER_CONNECT_H +#define INTER_CONNECT_H + +extern void _PG_init(void); + +#endif // INTER_CONNECT_H \ No newline at end of file diff --git a/contrib/udp2/ic_udp2.c b/contrib/udp2/ic_udp2.c new file mode 100644 index 00000000000..31c0d5c2eeb --- /dev/null +++ b/contrib/udp2/ic_udp2.c @@ -0,0 +1,989 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_udp2.c + * + * IDENTIFICATION + * contrib/udp2/ic_udp2.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "cdb/cdbdisp.h" +#include "cdb/cdbgang.h" +#include "cdb/cdbmotion.h" +#include "cdb/cdbvars.h" +#include "cdb/tupchunklist.h" +#include "postmaster/bgworker.h" +#include "postmaster/postmaster.h" +#include "storage/latch.h" +#include "storage/pmsignal.h" +#include "tcop/tcopprot.h" +#include "utils/wait_event.h" +#include "utils/memutils.h" + +/* local interconnect */ +#include "ic_udp2.h" + +/* from ic_common packeage */ +#include "ic_types.h" +#include "udp2/ic_udp2.h" + + +#define HandleLastError() \ +do { \ + ICError *error = GetLastError(); \ + Assert(error); \ + if (error->level == LEVEL_ERROR) \ + { \ + Assert(error->msg); \ + elog(ERROR, "%s", error->msg); \ + } \ + if (error->level == LEVEL_FATAL) \ + { \ + Assert(error->msg); \ + elog(FATAL, "%s", error->msg); \ + } \ +} while (0) + +#define ML_CHECK_FOR_INTERRUPTS(teardownActive) \ + do {if (!teardownActive && InterruptPending) CHECK_FOR_INTERRUPTS(); } while (0) + +/* + * Resource manager + */ +typedef void (*TeardownInterconnectCallBack)(ChunkTransportState *transportStates, bool hasErrors); +typedef struct interconnect_handle_t +{ + ChunkTransportState *interconnect_context; /* Interconnect state */ + + // callback for interconnect been abort + TeardownInterconnectCallBack teardown_cb; + + ResourceOwner owner; /* owner of this handle */ + struct interconnect_handle_t *next; + struct interconnect_handle_t *prev; +} interconnect_handle_t; + +static interconnect_handle_t * open_interconnect_handles; +static bool interconnect_resowner_callback_registered; + +static void destroy_interconnect_handle(interconnect_handle_t *h); +static interconnect_handle_t * allocate_interconnect_handle(TeardownInterconnectCallBack callback); +static interconnect_handle_t * find_interconnect_handle(ChunkTransportState *icContext); + + +static void SetupGlobalMotionLayerIPCParam(GlobalMotionLayerIPCParam *param); +static void SetupSessionMotionLayerIPCParam(SessionMotionLayerIPCParam *param); +static bool CheckPostmasterIsAlive(void); +static void CheckCancelOnQD(ICChunkTransportState *pTransportStates); +static void CheckInterrupts(int teardownActive); +static void SimpleFaultInjector(const char *faultname); +static void *CreateOpaqueData(void); +static void DestroyOpaqueData(void **opaque); +static ICSliceTable* ConvertToICSliceTable(SliceTable *tbl); +static TupleChunkListItem ConvertToTupleChunk(ChunkTransportState *transportStates, DataBlock *data); +static ChunkTransportState *CreateChunkTransportState(EState *estate, ICChunkTransportState *udp2_state); + + +int +GetMaxTupleChunkSizeUDP2(void) +{ + int header_size = UDP2_GetICHeaderSizeUDP(); + return Gp_max_packet_size - header_size - TUPLE_CHUNK_HEADER_SIZE; +} + +int32 +GetListenPortUDP2(void) +{ + return UDP2_GetListenPortUDP(); +} + +void +InitMotionIPCLayerUDP2(void) +{ + GlobalMotionLayerIPCParam param; + SetupGlobalMotionLayerIPCParam(¶m); + + param.checkPostmasterIsAliveCallback = CheckPostmasterIsAlive; + param.checkInterruptsCallback = CheckInterrupts; + param.simpleFaultInjectorCallback = SimpleFaultInjector; + + param.createOpaqueDataCallback = CreateOpaqueData; + param.destroyOpaqueDataCallback = DestroyOpaqueData; + + param.checkCancelOnQDCallback = CheckCancelOnQD; + + ResetLastError(); + UDP2_InitUDPIFC(¶m); + HandleLastError(); +} + +void +CleanUpMotionLayerIPCUDP2(void) +{ + if (gp_log_interconnect >= GPVARS_VERBOSITY_DEBUG) + elog(DEBUG3, "Cleaning Up Motion Layer IPC..."); + + ResetLastError(); + UDP2_CleanUpUDPIFC(); + HandleLastError(); +} + +void +WaitInterconnectQuitUDPIFC2(void) +{ + ResetLastError(); + UDP2_WaitQuitUDPIFC(); + HandleLastError(); +} + +void +SetupInterconnectUDP2(EState *estate) +{ + if (estate->interconnect_context) + elog(ERROR, "SetupInterconnectUDP: already initialized."); + + if (!estate->es_sliceTable) + elog(ERROR, "SetupInterconnectUDP: no slice table ?"); + + SessionMotionLayerIPCParam param; + SetupSessionMotionLayerIPCParam(¶m); + + interconnect_handle_t *h; + h = allocate_interconnect_handle(TeardownInterconnectUDP2); + + ICSliceTable *tbl = ConvertToICSliceTable(estate->es_sliceTable); + + ResetLastError(); + ICChunkTransportState *udp2_state = UDP2_SetupUDP(tbl, ¶m); + HandleLastError(); + + Assert(udp2_state); + ChunkTransportState *state = CreateChunkTransportState(estate, udp2_state); + h->interconnect_context = state; + + h->interconnect_context->estate = estate; + estate->interconnect_context = h->interconnect_context; + estate->es_interconnect_is_setup = true; + + /* Check if any of the QEs has already finished with error */ + if (Gp_role == GP_ROLE_DISPATCH) + { + ChunkTransportState *pTransportStates = h->interconnect_context; + + Assert(pTransportStates); + Assert(pTransportStates->estate); + + if (cdbdisp_checkForCancel(pTransportStates->estate->dispatcherState)) + { + ereport(ERROR, (errcode(ERRCODE_GP_INTERCONNECTION_ERROR), + errmsg(CDB_MOTION_LOST_CONTACT_STRING))); + /* not reached */ + } + } +} + +void +TeardownInterconnectUDP2(ChunkTransportState *transportStates, bool hasErrors) +{ + if (transportStates == NULL || transportStates->sliceTable == NULL) + { + elog(LOG, "TeardownUDPIFCInterconnect: missing slice table."); + return; + } + + /* TODO: should pass interconnect_handle_t as arg? */ + interconnect_handle_t *h = find_interconnect_handle(transportStates); + + ResetLastError(); + HOLD_INTERRUPTS(); + + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + UDP2_TeardownUDP(udp2_state, hasErrors); + + transportStates->activated = false; + transportStates->sliceTable = NULL; + + RESUME_INTERRUPTS(); + HandleLastError(); + + if (h != NULL) + destroy_interconnect_handle(h); +} + +bool +SendTupleChunkToAMSUDP2(ChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + TupleChunkListItem tcItem) +{ + if (!transportStates) + { + elog(FATAL, "SendTupleChunkToAMS: no transport-states."); + } + + if (!transportStates->activated) + { + elog(FATAL, "SendTupleChunkToAMS: transport states inactive"); + } + + /* check em' */ + ML_CHECK_FOR_INTERRUPTS(transportStates->teardownActive); + +#ifdef AMS_VERBOSE_LOGGING + elog(DEBUG3, "sendtuplechunktoams: calling get_transport_state" + "w/transportStates %p transportState->size %d motnodeid %d route %d", + transportStates, transportStates->size, motNodeID, targetRoute); +#endif + + /* get the number of TupleChunkListItem */ + int num = 0; + TupleChunkListItem item = tcItem; + while (item) + { + num++; + item = item->p_next; + } + + /* convert to DataBlock */ + DataBlock *pblocks = (DataBlock *)palloc0(sizeof(DataBlock) * num); + item = tcItem; + for (int i = 0; i < num; ++i) + { + pblocks[i].pos = item->chunk_data; + pblocks[i].len = item->chunk_length; + + item = item->p_next; + } + + bool broadcast = (targetRoute == BROADCAST_SEGIDX); + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + bool rs = UDP2_SendData(udp2_state, + motNodeID, + targetRoute, + pblocks, + num, + broadcast); + HandleLastError(); + + return rs; +} + +void +SendEOSUDPIFC2(ChunkTransportState *transportStates, + int motNodeID, + TupleChunkListItem tcItem) +{ + if (!transportStates) + { + elog(FATAL, "SendEOSUDPIFC: missing interconnect context."); + } + else if (!transportStates->activated && !transportStates->teardownActive) + { + elog(FATAL, "SendEOSUDPIFC: context and teardown inactive."); + } + + /* check em' */ + ML_CHECK_FOR_INTERRUPTS(transportStates->teardownActive); + + DataBlock db; + db.pos = tcItem->chunk_data; + db.len = tcItem->chunk_length; + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + UDP2_SendEOS(udp2_state, motNodeID, &db); + HandleLastError(); +} + +void +SendStopMessageUDPIFC2(ChunkTransportState *transportStates, int16 motNodeID) +{ + if (!transportStates->activated) + return; + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + UDP2_SendStop(udp2_state, motNodeID); + HandleLastError(); +} + +TupleChunkListItem +RecvTupleChunkFromAnyUDPIFC2(ChunkTransportState *transportStates, + int16 motNodeID, + int16 *srcRoute) +{ + if (!transportStates) + { + elog(FATAL, "RecvTupleChunkFromAnyUDPIFC: missing context"); + } + else if (!transportStates->activated) + { + elog(FATAL, "RecvTupleChunkFromAnyUDPIFC: interconnect context not active!"); + } + + DataBlock db = {NULL, 0}; + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + UDP2_RecvAny(udp2_state, motNodeID, srcRoute, NULL, &db); + HandleLastError(); + + if (db.pos == NULL) + return NULL; + + return ConvertToTupleChunk(transportStates, &db); +} + +TupleChunkListItem +RecvTupleChunkFromUDPIFC2(ChunkTransportState *transportStates, + int16 motNodeID, + int16 srcRoute) +{ + if (!transportStates) + { + elog(FATAL, "RecvTupleChunkFromUDPIFC: missing context"); + } + else if (!transportStates->activated) + { + elog(FATAL, "RecvTupleChunkFromUDPIFC: interconnect context not active!"); + } + +#ifdef AMS_VERBOSE_LOGGING + elog(LOG, "RecvTupleChunkFromUDPIFC()."); +#endif + + /* check em' */ + ML_CHECK_FOR_INTERRUPTS(transportStates->teardownActive); + +#ifdef AMS_VERBOSE_LOGGING + elog(DEBUG5, "RecvTupleChunkFromUDPIFC(motNodID=%d, srcRoute=%d)", motNodeID, srcRoute); +#endif + + DataBlock db = {NULL, 0}; + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + UDP2_RecvRoute(udp2_state, motNodeID, srcRoute, NULL, &db); + HandleLastError(); + + if (db.pos == NULL) + return NULL; + + return ConvertToTupleChunk(transportStates, &db); +} + +void +MlPutRxBufferUDPIFC2(ChunkTransportState *transportStates, int motNodeID, int route) +{ + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + UDP2_ReleaseAndAck(udp2_state, motNodeID, route); + HandleLastError(); +} + +void +DeregisterReadInterestUDP2(ChunkTransportState *transportStates, + int motNodeID, + int srcRoute, + const char *reason) +{ + if (!transportStates) + { + elog(FATAL, "DeregisterReadInterestUDP: no transport states"); + } + + if (!transportStates->activated) + return; + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + UDP2_DeactiveRoute(udp2_state, motNodeID, srcRoute, reason); + HandleLastError(); +} + +uint32 +GetActiveMotionConnsUDPIFC2(void) +{ + return UDP2_GetActiveConns(); +} + +void +GetTransportDirectBufferUDPIFC2(ChunkTransportState * transportStates, + int16 motNodeID, + int16 targetRoute, + struct directTransportBuffer *b) +{ + if (!transportStates) + { + elog(FATAL, "GetTransportDirectBuffer: no transport states"); + } + else if (!transportStates->activated) + { + elog(FATAL, "GetTransportDirectBuffer: inactive transport states"); + } + else if (targetRoute == BROADCAST_SEGIDX) + { + elog(FATAL, "GetTransportDirectBuffer: can't direct-transport to broadcast"); + } + + BufferBlock buf = {NULL, 0}; + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + UDP2_GetFreeSpace(udp2_state, motNodeID, targetRoute, &buf); + HandleLastError(); + + b->pri = buf.pos; + b->prilen = buf.len; +} + +void +PutTransportDirectBufferUDPIFC2(ChunkTransportState * transportStates, + int16 motNodeID, + int16 targetRoute, + int length) +{ + if (!transportStates) + { + elog(FATAL, "PutTransportDirectBuffer: no transport states"); + } + else if (!transportStates->activated) + { + elog(FATAL, "PutTransportDirectBuffer: inactive transport states"); + } + else if (targetRoute == BROADCAST_SEGIDX) + { + elog(FATAL, "PutTransportDirectBuffer: can't direct-transport to broadcast"); + } + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + UDP2_ReduceFreeSpace(udp2_state, motNodeID, targetRoute, length); + HandleLastError(); +} + +TupleRemapper* +GetMotionConnTupleRemapperUDPIFC2(ChunkTransportState * transportStates, + int16 motNodeID, + int16 targetRoute) +{ + TupleRemapper *remapper = NULL; + + if (!transportStates) + { + elog(FATAL, "GetMotionConnTupleRemapper: no transport states"); + } + + if (!transportStates->activated) + { + elog(FATAL, "GetMotionConnTupleRemapper: inactive transport states"); + } + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + remapper = (TupleRemapper *)UDP2_GetOpaqueDataInConn(udp2_state, motNodeID, targetRoute); + HandleLastError(); + + return remapper; +} + +int32* +GetMotionSentRecordTypmodUDPIFC2(ChunkTransportState * transportStates, + int16 motNodeID, + int16 targetRoute) +{ + int32 *rs = NULL; + + if (!transportStates) + { + elog(FATAL, "GetMotionConnTupleRemapper: no transport states"); + } + + if (!transportStates->activated) + { + elog(FATAL, "GetMotionConnTupleRemapper: inactive transport states"); + } + + targetRoute = targetRoute == BROADCAST_SEGIDX ? 0 : targetRoute; + + ResetLastError(); + ICChunkTransportState *udp2_state = + (ICChunkTransportState *)transportStates->implement_state; + rs = UDP2_GetSentRecordTypmodInConn(udp2_state, motNodeID, targetRoute); + HandleLastError(); + + return rs; +} + +static void +SetupGlobalMotionLayerIPCParam(GlobalMotionLayerIPCParam *param) +{ + if (param == NULL) + return; + + param->interconnect_address = interconnect_address; + param->Gp_role = Gp_role; + param->ic_htab_size = ic_htab_size; + param->segment_number = getgpsegmentCount(); + param->MyProcPid = MyProcPid; + param->dbid = GpIdentity.dbid; + param->segindex = GpIdentity.segindex; + param->MyProcPort = MyProcPort != NULL; + param->myprocport_sock = param->MyProcPort ? MyProcPort->sock : -1; + param->Gp_max_packet_size = Gp_max_packet_size; + param->Gp_udp_bufsize_k = Gp_udp_bufsize_k; + param->Gp_interconnect_address_type = Gp_interconnect_address_type; +} + +static bool +CheckPostmasterIsAlive(void) +{ + return PostmasterIsAlive(); +} + +static void +CheckCancelOnQD(ICChunkTransportState *state) +{ + int nevent = 0, nrevent = 0; + int *waitFds = NULL; + WaitEvent *rEvents = NULL; + WaitEventSet *waitset = NULL; + ChunkTransportState *pTransportStates = NULL; + + if (Gp_role != GP_ROLE_DISPATCH) + return; + + pTransportStates = (ChunkTransportState *)state->clientState; + + /* get all wait sock fds */ + waitFds = cdbdisp_getWaitSocketFds(pTransportStates->estate->dispatcherState, &nevent); + if (waitFds == NULL) + return; + + /* init WaitEventSet */ + waitset = CreateWaitEventSet(CurrentMemoryContext, nevent); + rEvents = palloc(nevent * sizeof(WaitEvent)); /* returned events */ + for (int i = 0; i < nevent; ++i) + AddWaitEventToSet(waitset, WL_SOCKET_READABLE, waitFds[i], NULL, NULL); + + /* wait for event from QE */ + nrevent = WaitEventSetWait(waitset, 0, rEvents, nevent, WAIT_EVENT_INTERCONNECT); + + /* check to see if the dispatcher should cancel */ + for (int i = 0; i < nrevent; i++) + { + if (rEvents[i].events & WL_SOCKET_READABLE) + { + /* event happened on wait fds, need to check cancel */ + Assert(pTransportStates); + Assert(pTransportStates->estate); + + if (cdbdisp_checkForCancel(pTransportStates->estate->dispatcherState)) + { + ereport(ERROR, (errcode(ERRCODE_GP_INTERCONNECTION_ERROR), + errmsg(CDB_MOTION_LOST_CONTACT_STRING))); + /* not reached */ + } + break; + } + } + + if (waitset) + FreeWaitEventSet((WaitEventSet *)waitset); + if (rEvents) + pfree(rEvents); +} + +static void +CheckInterrupts(int teardownActive) +{ + ML_CHECK_FOR_INTERRUPTS(teardownActive); +} + +static void +SimpleFaultInjector(const char *faultname) +{ + SIMPLE_FAULT_INJECTOR((faultname)); +} + +static void * +CreateOpaqueData(void) +{ + return CreateTupleRemapper(); +} + +static void +DestroyOpaqueData(void **opaque) +{ + if (*opaque == NULL) + return; + *opaque = NULL; +} + +static void +SetupSessionMotionLayerIPCParam(SessionMotionLayerIPCParam *param) +{ + if (param == NULL) + return; + + TransactionId localTransId = 0; + TransactionId subtransId = 0; + + param->Gp_interconnect_queue_depth = Gp_interconnect_queue_depth; + param->Gp_interconnect_snd_queue_depth = Gp_interconnect_snd_queue_depth; + param->Gp_interconnect_timer_period = Gp_interconnect_timer_period; + param->Gp_interconnect_timer_checking_period = Gp_interconnect_timer_checking_period; + param->Gp_interconnect_default_rtt = Gp_interconnect_default_rtt; + param->Gp_interconnect_min_rto = Gp_interconnect_min_rto; + param->Gp_interconnect_transmit_timeout = Gp_interconnect_transmit_timeout; + param->Gp_interconnect_min_retries_before_timeout = Gp_interconnect_min_retries_before_timeout; + param->Gp_interconnect_debug_retry_interval = Gp_interconnect_debug_retry_interval; + param->gp_interconnect_full_crc = gp_interconnect_full_crc; + param->gp_interconnect_aggressive_retry = gp_interconnect_aggressive_retry; + param->gp_interconnect_cache_future_packets = gp_interconnect_cache_future_packets; + param->gp_interconnect_log_stats = gp_interconnect_log_stats; + param->interconnect_setup_timeout = interconnect_setup_timeout; + param->gp_log_interconnect = gp_log_interconnect; + param->gp_session_id = gp_session_id; + param->Gp_interconnect_fc_method = Gp_interconnect_fc_method; + param->gp_command_count = gp_command_count; + param->gp_interconnect_id = gp_interconnect_id; + param->log_min_messages = log_min_messages; + GetAllTransactionXids(¶m->distTransId, &localTransId, &subtransId); + +#ifdef USE_ASSERT_CHECKING + param->gp_udpic_dropseg = gp_udpic_dropseg; + param->gp_udpic_dropacks_percent = gp_udpic_dropacks_percent; + param->gp_udpic_dropxmit_percent = gp_udpic_dropxmit_percent; + param->gp_udpic_fault_inject_percent = gp_udpic_fault_inject_percent; + param->gp_udpic_fault_inject_bitmap = gp_udpic_fault_inject_bitmap; + param->gp_udpic_network_disable_ipv6 = gp_udpic_network_disable_ipv6; +#endif +} + +ICSliceTable* +ConvertToICSliceTable(SliceTable *tbl) +{ + ICSliceTable *ic_tbl = (ICSliceTable *)malloc(sizeof(ICSliceTable)); + memset(ic_tbl, 0, sizeof(ICSliceTable)); + + ic_tbl->localSlice = tbl->localSlice; + ic_tbl->ic_instance_id = tbl->ic_instance_id; + + ic_tbl->numSlices = tbl->numSlices; + ic_tbl->slices = (ICExecSlice *)malloc(sizeof(ICExecSlice) * ic_tbl->numSlices); + memset(ic_tbl->slices, 0, sizeof(ICExecSlice) * ic_tbl->numSlices); + + for (int i = 0; i < ic_tbl->numSlices; ++i) + { + ExecSlice *slice = tbl->slices + i; + ICExecSlice *ic_slice = ic_tbl->slices + i; + + ic_slice->sliceIndex = slice->sliceIndex; + ic_slice->parentIndex= slice->parentIndex; + ic_slice->numSegments = list_length(slice->segments); + + ic_slice->numChildren = list_length(slice->children); + ic_slice->children = malloc(sizeof(int) * ic_slice->numChildren); + memset(ic_slice->children, 0, sizeof(int) * ic_slice->numChildren); + + for (int i = 0; i < ic_slice->numChildren; ++i) + ic_slice->children[i] = list_nth_int(slice->children, i); + + ic_slice->numPrimaryProcesses = list_length(slice->primaryProcesses); + ic_slice->primaryProcesses = malloc(sizeof(ICCdbProcess) * ic_slice->numPrimaryProcesses); + memset(ic_slice->primaryProcesses, 0, sizeof(ICCdbProcess) * ic_slice->numPrimaryProcesses); + + for (int i = 0; i < ic_slice->numPrimaryProcesses; ++i) + { + CdbProcess *process = (CdbProcess *)list_nth(slice->primaryProcesses, i); + if (!process) + continue; + + ICCdbProcess *ic_process = ic_slice->primaryProcesses + i; + + ic_process->valid = true; + ic_process->listenerAddr = process->listenerAddr; + ic_process->listenerPort = process->listenerPort; + ic_process->pid = process->pid; + ic_process->contentid = process->contentid; + ic_process->dbid = process->dbid; + } + } + + return ic_tbl; +} + +/* + * msg MUST BE conn->msgPos, msg_size should be conn->msgSize - sizeof(icpkthdr) + * +----------------+-----------+--------------+------------+---+--------------+------------+ + * | tcp/udp header | ic header | chunk header | chunk data |...| chunk header | chunk data | + * +----------------+-----------+--------------+------------+---+--------------+------------+ + * |<-----#1 tuple chunk ----->|...|<-----#n tuple chunk ----->| + * |<------------------------- Gp_max_packet_size ------------------------>| + * + * |<------------------------ msg_size ----------------------->| + * msg + */ +TupleChunkListItem +ConvertToTupleChunk(ChunkTransportState *transportStates, DataBlock *data) +{ + TupleChunkListItem tcItem; + TupleChunkListItem firstTcItem = NULL; + TupleChunkListItem lastTcItem = NULL; + + uint32 tcSize; + int bytesProcessed = 0; + + while (bytesProcessed != data->len) + { + if (data->len - bytesProcessed < TUPLE_CHUNK_HEADER_SIZE) + { + ereport(ERROR, + (errcode(ERRCODE_GP_INTERCONNECTION_ERROR), + errmsg("interconnect error parsing message: insufficient data received"), + errdetail("conn->msgSize %d bytesProcessed %d < chunk-header %d", + data->len, bytesProcessed, TUPLE_CHUNK_HEADER_SIZE))); + } + tcSize = TUPLE_CHUNK_HEADER_SIZE + (*(uint16 *) (data->pos + bytesProcessed)); + + /* sanity check */ + if (tcSize > Gp_max_packet_size) + { + /* + * see MPP-720: it is possible that our message got messed up by a + * cancellation ? + */ + ML_CHECK_FOR_INTERRUPTS(transportStates->teardownActive); + /* + * MPP-4010: add some extra debugging. + */ + if (lastTcItem != NULL) + elog(LOG, "Interconnect error parsing message: last item length %d inplace %p", lastTcItem->chunk_length, lastTcItem->inplace); + else + elog(LOG, "Interconnect error parsing message: no last item"); + + ereport(ERROR, + (errcode(ERRCODE_GP_INTERCONNECTION_ERROR), + errmsg("interconnect error parsing message"), + errdetail("tcSize %d > max %d header %d processed %d/%d from %p", + tcSize, Gp_max_packet_size, + TUPLE_CHUNK_HEADER_SIZE, bytesProcessed, + data->len, data->pos))); + } + + Assert(tcSize <= data->len); + + /* + * We store the data inplace, and handle any necessary copying later + * on + */ + tcItem = (TupleChunkListItem) palloc(sizeof(TupleChunkListItemData)); + tcItem->p_next = NULL; + tcItem->chunk_length = tcSize; + tcItem->inplace = (char *) (data->pos + bytesProcessed); + + bytesProcessed += tcSize; + if (firstTcItem == NULL) + { + firstTcItem = tcItem; + lastTcItem = tcItem; + } + else + { + lastTcItem->p_next = tcItem; + lastTcItem = tcItem; + } + } + + return firstTcItem; +} + +static ChunkTransportState * +CreateChunkTransportState(EState *estate, ICChunkTransportState *udp2_state) +{ + MemoryContext oldContext; + ChunkTransportState *state; + + /* init ChunkTransportState */ + Assert(InterconnectContext != NULL); + oldContext = MemoryContextSwitchTo(InterconnectContext); + state = (ChunkTransportState *)palloc0(sizeof(ChunkTransportState)); + MemoryContextSwitchTo(oldContext); + + state->size = 0; + state->states = NULL; + state->activated = udp2_state->activated; + state->teardownActive = udp2_state->teardownActive; + state->aggressiveRetry = false; + state->incompleteConns = NIL; + state->sliceTable = estate->es_sliceTable; + state->sliceId = estate->es_sliceTable->localSlice; + state->estate = estate; + state->proxyContext = NULL; + + state->networkTimeoutIsLogged = false; + + /* save the reference each other */ + state->implement_state = udp2_state; + udp2_state->clientState = state; + + return state; +} + +/* + * must offer an empty proxy fucntion if ic-proxy is enabled(--enable-ic-proxy). + */ +int +ic_proxy_server_main(void) +{ + /* Establish signal handlers. */ + pqsignal(SIGTERM, die); + BackgroundWorkerUnblockSignals(); + + /* dry run */ + while (true) + { + pg_usleep(1000000); + CHECK_FOR_INTERRUPTS(); + } + + return 0; +} + +/* + * Fucntions for Resource manager + */ +static void +destroy_interconnect_handle(interconnect_handle_t * h) +{ + h->interconnect_context = NULL; + /* unlink from linked list first */ + if (h->prev) + h->prev->next = h->next; + else + open_interconnect_handles = h->next; + if (h->next) + h->next->prev = h->prev; + + pfree(h); + + if (open_interconnect_handles == NULL) + MemoryContextReset(InterconnectContext); +} + +static void +cleanup_interconnect_handle(interconnect_handle_t * h) +{ + if (h->interconnect_context == NULL) + { + destroy_interconnect_handle(h); + return; + } + h->teardown_cb(h->interconnect_context, true); +} + +static void +interconnect_abort_callback(ResourceReleasePhase phase, + bool isCommit, + bool isTopLevel, + void *arg) +{ + interconnect_handle_t *curr; + interconnect_handle_t *next; + + if (phase != RESOURCE_RELEASE_AFTER_LOCKS) + return; + + next = open_interconnect_handles; + while (next) + { + curr = next; + next = curr->next; + + if (curr->owner == CurrentResourceOwner) + { + if (isCommit) + elog(WARNING, "interconnect reference leak: %p still referenced", curr); + + cleanup_interconnect_handle(curr); + } + } +} + +static interconnect_handle_t * +allocate_interconnect_handle(TeardownInterconnectCallBack callback) +{ + interconnect_handle_t *h; + + if (InterconnectContext == NULL) + InterconnectContext = AllocSetContextCreate(TopMemoryContext, + "Interconnect Context", + ALLOCSET_DEFAULT_MINSIZE, + ALLOCSET_DEFAULT_INITSIZE, + ALLOCSET_DEFAULT_MAXSIZE); + + h = MemoryContextAllocZero(InterconnectContext, sizeof(interconnect_handle_t)); + + h->teardown_cb = callback; + h->owner = CurrentResourceOwner; + h->next = open_interconnect_handles; + h->prev = NULL; + if (open_interconnect_handles) + open_interconnect_handles->prev = h; + open_interconnect_handles = h; + + if (!interconnect_resowner_callback_registered) + { + RegisterResourceReleaseCallback(interconnect_abort_callback, NULL); + interconnect_resowner_callback_registered = true; + } + return h; +} + +static interconnect_handle_t * +find_interconnect_handle(ChunkTransportState * icContext) +{ + interconnect_handle_t *head = open_interconnect_handles; + + while (head != NULL) + { + if (head->interconnect_context == icContext) + return head; + head = head->next; + } + return NULL; +} \ No newline at end of file diff --git a/contrib/udp2/ic_udp2.h b/contrib/udp2/ic_udp2.h new file mode 100644 index 00000000000..c351d2d0224 --- /dev/null +++ b/contrib/udp2/ic_udp2.h @@ -0,0 +1,87 @@ +/*------------------------------------------------------------------------- + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * ic_udp2.h + * + * IDENTIFICATION + * contrib/udp2/ic_udp2.h + * + *------------------------------------------------------------------------- + */ +#ifndef IC_UDP_H +#define IC_UDP_H + +#include "cdb/cdbinterconnect.h" +#include "nodes/execnodes.h" /* EState, ExecSlice, SliceTable */ + +extern int GetMaxTupleChunkSizeUDP2(void); +extern int32 GetListenPortUDP2(void); + +extern void InitMotionIPCLayerUDP2(void); +extern void CleanUpMotionLayerIPCUDP2(void); + +extern void WaitInterconnectQuitUDPIFC2(void); + +extern void SetupInterconnectUDP2(EState *estate); +extern void TeardownInterconnectUDP2(ChunkTransportState * transportStates, bool hasErrors); + +extern bool SendTupleChunkToAMSUDP2(ChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + TupleChunkListItem tcItem); +extern void SendEOSUDPIFC2(ChunkTransportState * transportStates, + int motNodeID, TupleChunkListItem tcItem); +extern void SendStopMessageUDPIFC2(ChunkTransportState * transportStates, int16 motNodeID); + +extern TupleChunkListItem RecvTupleChunkFromAnyUDPIFC2(ChunkTransportState * transportStates, + int16 motNodeID, + int16 *srcRoute); +extern TupleChunkListItem RecvTupleChunkFromUDPIFC2(ChunkTransportState * transportStates, + int16 motNodeID, + int16 srcRoute); + +void MlPutRxBufferUDPIFC2(ChunkTransportState * transportStates, int motNodeID, int route); + +extern void DeregisterReadInterestUDP2(ChunkTransportState * transportStates, + int motNodeID, + int srcRoute, + const char *reason); + +extern uint32 GetActiveMotionConnsUDPIFC2(void); + +extern void GetTransportDirectBufferUDPIFC2(ChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + struct directTransportBuffer *b); +extern void PutTransportDirectBufferUDPIFC2(ChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute, + int length); + +extern TupleRemapper* GetMotionConnTupleRemapperUDPIFC2(ChunkTransportState *transportStates, + int16 motNodeID, + int16 targetRoute); + +extern int32* GetMotionSentRecordTypmodUDPIFC2(ChunkTransportState * transportStates, + int16 motNodeID, + int16 targetRoute); + +extern int ic_proxy_server_main(void); + +#endif // IC_UDP_H \ No newline at end of file diff --git a/src/Makefile.global.in b/src/Makefile.global.in index 86e86b467fe..062ec75b039 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -233,6 +233,7 @@ enable_shared_postgres_backend = @enable_shared_postgres_backend@ enable_link_postgres_with_shared = @enable_link_postgres_with_shared@ enable_gpcloud = @enable_gpcloud@ enable_ic_proxy = @enable_ic_proxy@ +enable_ic_udp2 = @enable_ic_udp2@ enable_pax = @enable_pax@ enable_tap_tests = @enable_tap_tests@ diff --git a/src/backend/cdb/cdbvars.c b/src/backend/cdb/cdbvars.c index 7984a9d61a4..c6540a8a8d5 100644 --- a/src/backend/cdb/cdbvars.c +++ b/src/backend/cdb/cdbvars.c @@ -201,6 +201,7 @@ int Gp_interconnect_queue_depth = 4; /* max number of messages * we drop. */ int Gp_interconnect_snd_queue_depth = 2; int Gp_interconnect_mem_size = 10; +int Gp_interconnect_cursor_ic_table_size = 128; int Gp_interconnect_timer_period = 5; int Gp_interconnect_timer_checking_period = 20; int Gp_interconnect_default_rtt = 20; diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index 4eb88be4220..42b61dfbbbb 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -3792,6 +3792,17 @@ struct config_int ConfigureNamesInt_gp[] = NULL, NULL, NULL }, + { + {"gp_interconnect_cursor_ic_table_size", PGC_USERSET, GP_ARRAY_TUNING, + gettext_noop("Sets the size of Cursor History Table in the UDP interconnect"), + gettext_noop("You can try to increase it when a UDF which contains many concurrent " + "cursor queries hangs. The default value is 128.") + }, + &Gp_interconnect_cursor_ic_table_size, + 128, 128, 102400, + NULL, NULL, NULL + }, + { {"gp_interconnect_timer_period", PGC_USERSET, GP_ARRAY_TUNING, gettext_noop("Sets the timer period (in ms) for UDP interconnect"), @@ -5102,6 +5113,9 @@ struct config_string ConfigureNamesString_gp[] = {"gp_interconnect_type", PGC_BACKEND, GP_ARRAY_TUNING, gettext_noop("Sets the protocol used for inter-node communication."), gettext_noop("Valid values are \"tcp\", \"udpifc\"" +#ifdef ENABLE_IC_UDP2 + ", \"udp2(experimental feature)\"" +#endif /* ENABLE_IC_UDP2 */ #ifdef ENABLE_IC_PROXY " and \"proxy\"" #endif /* ENABLE_IC_PROXY */ diff --git a/src/include/cdb/cdbinterconnect.h b/src/include/cdb/cdbinterconnect.h index 9f5ce7753d8..5204d4c1b94 100644 --- a/src/include/cdb/cdbinterconnect.h +++ b/src/include/cdb/cdbinterconnect.h @@ -213,6 +213,10 @@ typedef struct ChunkTransportState /* ic_proxy backend context */ struct ICProxyBackendContext *proxyContext; + + /* used by IPC layer implement */ + void *implement_state; + } ChunkTransportState; #endif /* CDBINTERCONNECT_H */ diff --git a/src/include/cdb/cdbvars.h b/src/include/cdb/cdbvars.h index fb94a3960b5..abbddb3cd8b 100644 --- a/src/include/cdb/cdbvars.h +++ b/src/include/cdb/cdbvars.h @@ -363,6 +363,16 @@ extern int Gp_interconnect_queue_depth; * */ extern int Gp_interconnect_snd_queue_depth; + +/* + * Cursor IC table size. + * + * For cursor case, there may be several concurrent interconnect + * instances on QD. The table is used to track the status of the + * instances, which is quite useful for "ACK the past and NAK the future" paradigm. + * + */ +extern int Gp_interconnect_cursor_ic_table_size; extern int Gp_interconnect_timer_period; extern int Gp_interconnect_timer_checking_period; extern int Gp_interconnect_default_rtt; diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index a5393e85076..aaa3ea32e8a 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -60,6 +60,9 @@ /* Define to 1 to build with ic-proxy support (--enable-ic-proxy) */ #undef ENABLE_IC_PROXY +/* Define to 1 to build with interconnect udp2 support (--enable-ic-udp2) */ +#undef ENABLE_IC_UDP2 + /* Define to 1 to preload with ic module */ #undef ENABLE_PRELOAD_IC_MODULE diff --git a/src/include/utils/process_shared_preload_libraries.h b/src/include/utils/process_shared_preload_libraries.h index fe098ccf401..87e4dc40a6d 100644 --- a/src/include/utils/process_shared_preload_libraries.h +++ b/src/include/utils/process_shared_preload_libraries.h @@ -1,6 +1,9 @@ #ifdef ENABLE_PRELOAD_IC_MODULE "interconnect", #endif +#ifdef ENABLE_IC_UDP2 + "udp2", +#endif #ifdef USE_PAX_STORAGE "pax", #endif diff --git a/src/include/utils/sync_guc_name.h b/src/include/utils/sync_guc_name.h index ca9f7ef45f8..6d09f49155f 100644 --- a/src/include/utils/sync_guc_name.h +++ b/src/include/utils/sync_guc_name.h @@ -74,6 +74,7 @@ "gp_initial_bad_row_limit", "gp_interconnect_address_type", "gp_interconnect_cache_future_packets", + "gp_interconnect_cursor_ic_table_size", "gp_interconnect_debug_retry_interval", "gp_interconnect_default_rtt", "gp_interconnect_fc_method", From 79eef876f593a2a54dc6164d319904fc60a2385b Mon Sep 17 00:00:00 2001 From: zhangyue Date: Wed, 22 Oct 2025 22:32:58 +0800 Subject: [PATCH 219/260] Port UDP motion layer fixes from ic_udpifc.c to udp2 This commit integrates critical UDP motion layer improvements from commits a337ea2 and acec354b into the contrib/udp2 component, addressing extreme-scenario issues in resource-constrained environments. More details see commits a337ea2 and acec354b. Co-authored-by: zhaoxi --- contrib/udp2/ic_common/ic_utility.hpp | 2 + contrib/udp2/ic_common/udp2/ic_udp2.cpp | 850 ++++++++++++++++-- .../udp2/ic_common/udp2/ic_udp2_internal.hpp | 114 ++- contrib/udp2/ic_udp2.c | 39 + 4 files changed, 931 insertions(+), 74 deletions(-) diff --git a/contrib/udp2/ic_common/ic_utility.hpp b/contrib/udp2/ic_common/ic_utility.hpp index 169c7b3cc18..b8c8919ff12 100644 --- a/contrib/udp2/ic_common/ic_utility.hpp +++ b/contrib/udp2/ic_common/ic_utility.hpp @@ -100,6 +100,8 @@ typedef enum GpVars_Interconnect_Method_IC { INTERCONNECT_FC_METHOD_CAPACITY_IC = 0, INTERCONNECT_FC_METHOD_LOSS_IC = 2, + INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC = 3, + INTERCONNECT_FC_METHOD_LOSS_TIMER_IC = 4, } GpVars_Interconnect_Method_IC; typedef enum diff --git a/contrib/udp2/ic_common/udp2/ic_udp2.cpp b/contrib/udp2/ic_common/udp2/ic_udp2.cpp index c09ea4e8434..a747d91f600 100644 --- a/contrib/udp2/ic_common/udp2/ic_udp2.cpp +++ b/contrib/udp2/ic_common/udp2/ic_udp2.cpp @@ -72,6 +72,21 @@ extern "C" { #include "ic_udp2_internal.hpp" #include "ic_faultinjection.h" +/* + * Hints to the compiler about the likelihood of a branch. Both likely() and + * unlikely() return the boolean value of the contained expression. + * + * These should only be used sparingly, in very hot code paths. It's very easy + * to mis-estimate likelihoods. + */ +#if __GNUC__ >= 3 +#define likely(x) __builtin_expect((x) != 0, 1) +#define unlikely(x) __builtin_expect((x) != 0, 0) +#else +#define likely(x) ((x) != 0) +#define unlikely(x) ((x) != 0) +#endif + static int timeoutArray[] = { 1, @@ -121,7 +136,7 @@ static ICGlobalControlInfo ic_control_info; /* * All connections in a process share this unack queue ring instance. */ -static UnackQueueRing unack_queue_ring = {0, 0, 0}; +static UnackQueueRing unack_queue_ring = {0}; static int ICSenderSocket = -1; static int32 ICSenderPort = 0; @@ -144,6 +159,8 @@ static std::condition_variable cv; CChunkTransportState *CChunkTransportStateImpl::state_ = nullptr; +static struct mudp_manager mudp; + /* * Identity the user of ic module by vector_engine_is_user: * "false" means PG executor, "true" means Arrow executor. @@ -237,6 +254,8 @@ static ssize_t sendtoWithRetry(int socket, const void *message, size_t length, i static char *format_sockaddr_udp(struct sockaddr_storage *sa, char *buf, size_t len); +static void initUdpManager(mudp_manager_t mptr); + static char* flags2txt(uint32 pkt_flags); static const char* flags_text[] = @@ -923,6 +942,14 @@ initUnackQueueRing(UnackQueueRing *uqr) { uqr->slots[i].init(ICBufferListType_Secondary); } + +#ifdef TIMEOUT_Z + uqr->retrans_count = 0; + uqr->no_retrans_count = 0; + uqr->time_difference = 0; + uqr->min = 0; + uqr->max = 0; +#endif } /* @@ -1109,6 +1136,344 @@ SendBufferPool::get(UDPConn *conn) return ret; } +static struct rto_hashstore* +initRTOHashstore() +{ + int i; + struct rto_hashstore* hs = (struct rto_hashstore*)ic_malloc(sizeof(struct rto_hashstore)); + + for (i = 0; i < RTO_HASH; i++) + TAILQ_INIT(&hs->rto_list[i]); + + TAILQ_INIT(&hs->rto_list[RTO_HASH]); + + return hs; +} + +static void +initUdpManager(mudp_manager_t mudp) +{ + mudp->rto_store = initRTOHashstore(); + mudp->rto_list_cnt = 0; + mudp->cur_ts = 0; +} + +static inline void +addtoRTOList(mudp_manager_t mudp, UDPConn *cur_stream) +{ + if (!mudp->rto_list_cnt) + { + mudp->rto_store->rto_now_idx = 0; + mudp->rto_store->rto_now_ts = cur_stream->sndvar.ts_rto; + } + + if (cur_stream->on_rto_idx < 0 ) + { + if (cur_stream->on_timewait_list) + return; + + int diff = (int32_t)(cur_stream->sndvar.ts_rto - mudp->rto_store->rto_now_ts); + if (diff < RTO_HASH) + { + int offset= (diff + mudp->rto_store->rto_now_idx) % RTO_HASH; + cur_stream->on_rto_idx = offset; + TAILQ_INSERT_TAIL(&(mudp->rto_store->rto_list[offset]), + cur_stream, sndvar.timer_link); + } + else + { + cur_stream->on_rto_idx = RTO_HASH; + TAILQ_INSERT_TAIL(&(mudp->rto_store->rto_list[RTO_HASH]), + cur_stream, sndvar.timer_link); + } + mudp->rto_list_cnt++; + } +} + +static inline void +removeFromRTOList(mudp_manager_t mudp, + UDPConn *cur_stream) +{ + if (cur_stream->on_rto_idx < 0) + return; + + TAILQ_REMOVE(&mudp->rto_store->rto_list[cur_stream->on_rto_idx], + cur_stream, sndvar.timer_link); + cur_stream->on_rto_idx = -1; + + mudp->rto_list_cnt--; +} + +static inline void +updateRetransmissionTimer(mudp_manager_t mudp, + UDPConn *cur_stream, + uint32_t cur_ts) +{ + cur_stream->sndvar.nrtx = 0; + + /* if in rto list, remove it */ + if (cur_stream->on_rto_idx >= 0) + removeFromRTOList(mudp, cur_stream); + + /* Reset retransmission timeout */ + if (UDP_SEQ_GT(cur_stream->snd_nxt, cur_stream->sndvar.snd_una)) + { + /* there are packets sent but not acked */ + /* update rto timestamp */ + cur_stream->sndvar.ts_rto = cur_ts + cur_stream->sndvar.rto; + addtoRTOList(mudp, cur_stream); + } + + if (cur_stream->on_rto_idx == -1) + { + cur_stream->sndvar.ts_rto = cur_ts + cur_stream->sndvar.rto; + addtoRTOList(mudp, cur_stream); + } +} + +static int +handleRTO(mudp_manager_t mudp, + uint32_t cur_ts, + UDPConn *cur_stream, + ICChunkTransportState *transportStates, + TransportEntry *pEntry, + UDPConn *triggerConn) +{ + /* check for expiration */ + int count = 0; + int retransmits = 0; + UDPConn *currBuffConn = NULL; + uint32_t now = cur_ts; + + Assert(unack_queue_ring.currentTime != 0); + removeFromRTOList(mudp, cur_stream); + + while (now >= (unack_queue_ring.currentTime + TIMER_SPAN) && count++ < UNACK_QUEUE_RING_SLOTS_NUM) + { + /* expired, need to resend them */ + ICBuffer *curBuf = NULL; + + while ((curBuf = unack_queue_ring.slots[unack_queue_ring.idx].pop()) != NULL) + { + curBuf->nRetry++; + currBuffConn = static_cast(curBuf->conn); + putIntoUnackQueueRing( + &unack_queue_ring, + curBuf, + currBuffConn->computeExpirationPeriod(curBuf->nRetry), now); + +#ifdef TRANSFER_PROTOCOL_STATS + trans_proto_stats.update(TPE_DATA_PKT_SEND, curBuf->pkt); +#endif + + currBuffConn->sendOnce(curBuf->pkt); + + retransmits++; + ic_statistics.retransmits++; + currBuffConn->stat_count_resent++; + currBuffConn->stat_max_resent = Max(currBuffConn->stat_max_resent, currBuffConn->stat_count_resent); + UDPConn::checkNetworkTimeout(curBuf, now, &transportStates->networkTimeoutIsLogged); + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "RESEND pkt with seq %d (retry %d, rtt " UINT64_FORMAT ") to route %d", + curBuf->pkt->seq, curBuf->nRetry, curBuf->conn->rtt, curBuf->conn->route); + logPkt("RESEND PKT in checkExpiration", curBuf->pkt); +#endif + } + + unack_queue_ring.currentTime += TIMER_SPAN; + unack_queue_ring.idx = (unack_queue_ring.idx + 1) % (UNACK_QUEUE_RING_SLOTS_NUM); + } + return 0; +} + +static inline void +rearrangeRTOStore(mudp_manager_t mudp) +{ + UDPConn *walk, *next; + struct rto_hashstore::rto_head* rto_list = &mudp->rto_store->rto_list[RTO_HASH]; + int cnt = 0; + + for (walk = TAILQ_FIRST(rto_list); walk != NULL; walk = next) + { + next = TAILQ_NEXT(walk, sndvar.timer_link); + + int diff = (int32_t)(mudp->rto_store->rto_now_ts - walk->sndvar.ts_rto); + if (diff < RTO_HASH) + { + int offset = (diff + mudp->rto_store->rto_now_idx) % RTO_HASH; + TAILQ_REMOVE(&mudp->rto_store->rto_list[RTO_HASH], + walk, sndvar.timer_link); + walk->on_rto_idx = offset; + TAILQ_INSERT_TAIL(&(mudp->rto_store->rto_list[offset]), + walk, sndvar.timer_link); + } + cnt++; + } +} + +static inline void +checkRtmTimeout(mudp_manager_t mudp, + uint32_t cur_ts, + int thresh, + ICChunkTransportState *transportStates, + TransportEntry *pEntry, + UDPConn *triggerConn) +{ + UDPConn *walk, *next; + struct rto_hashstore::rto_head* rto_list; + int cnt; + + if (!mudp->rto_list_cnt) + return; + + cnt = 0; + + while (1) + { + rto_list = &mudp->rto_store->rto_list[mudp->rto_store->rto_now_idx]; + if ((int32_t)(cur_ts - mudp->rto_store->rto_now_ts) < 0) + break; + + for (walk = TAILQ_FIRST(rto_list); walk != NULL; walk = next) + { + if (++cnt > thresh) + break; + next = TAILQ_NEXT(walk, sndvar.timer_link); + + if (walk->on_rto_idx >= 0) + { + TAILQ_REMOVE(rto_list, walk, sndvar.timer_link); + mudp->rto_list_cnt--; + walk->on_rto_idx = -1; + handleRTO(mudp, cur_ts, walk, transportStates, pEntry, triggerConn); + } + } + + if (cnt > thresh) + { + break; + } + else + { + mudp->rto_store->rto_now_idx = (mudp->rto_store->rto_now_idx + 1) % RTO_HASH; + mudp->rto_store->rto_now_ts++; + if (!(mudp->rto_store->rto_now_idx % 1000)) + rearrangeRTOStore(mudp); + } + + } +} + +/* + * estimateRTT - Dynamically estimates the Round-Trip Time (RTT) and adjusts Retransmission Timeout (RTO) + * + * This function implements a variant of the Jacobson/Karels algorithm for RTT estimation, adapted for UDP-based + * motion control connections. It updates smoothed RTT (srtt), mean deviation (mdev), and RTO values based on + * newly measured RTT samples (mrtt). The RTO calculation ensures reliable data transmission over unreliable networks. + * + * Key Components: + * - srtt: Smoothed Round-Trip Time (weighted average of historical RTT samples) + * - mdev: Mean Deviation (measure of RTT variability) + * - rttvar: Adaptive RTT variation bound (used to clamp RTO updates) + * - rto: Retransmission Timeout (dynamically adjusted based on srtt + rttvar) + * + * Algorithm Details: + * 1. For the first RTT sample: + * srtt = mrtt << 3 (scaled by 8 for fixed-point arithmetic) + * mdev = mrtt << 1 (scaled by 2) + * rttvar = max(mdev, rto_min) + * 2. For subsequent samples: + * Delta = mrtt - (srtt >> 3) (difference between new sample and smoothed RTT) + * srtt += Delta (update srtt with 1/8 weight of new sample) + * Delta = abs(Delta) - (mdev >> 2) + * mdev += Delta (update mdev with 1/4 weight) + * 3. rttvar bounds the maximum RTT variation: + * If mdev > mdev_max, update mdev_max and rttvar + * On new ACKs (snd_una > rtt_seq), decay rttvar toward mdev_max + * 4. Final RTO calculation: + * rto = (srtt >> 3) + rttvar (clamped to RTO_MAX) + * + * Parameters: + * @mConn: Parent motion connection context (container of MotionConnUDP) + * @mrtt: Measured Round-Trip Time (in microseconds) for the latest packet + * + * Notes: + * - Designed for non-retransmitted packets to avoid sampling bias. + * - Uses fixed-point arithmetic to avoid floating-point operations. + * - Minimum RTO (rto_min) is set to 20ms (HZ/5/10, assuming HZ=100). + * - Critical for adaptive timeout control in UDP protocols where reliability is implemented at the application layer. + * - Thread-unsafe: Must be called in a synchronized context (e.g., packet processing loop). + */ +static inline void +estimateRTT(UDPConn *conn , uint32_t mrtt) +{ + /* This function should be called for not retransmitted packets */ + /* TODO: determine rto_min */ + + long m = mrtt; + uint32_t rto_min = UDP_RTO_MIN / 10; + + if (m == 0) + m = 1; + + /* + * Special RTO optimization for high-speed networks: + * When measured RTT (m) is below 100 microseconds and current RTO is under 10ms, + * forcibly set RTO to half of RTO_MIN. This targets two scenarios: + * - Loopback interfaces (localhost communication) + * - Ultra-low-latency networks (e.g., InfiniBand, RDMA) + */ + if(m < 100 && conn->rttvar.rto < 10000) + { + conn->rttvar.rto = RTO_MIN / 2; + } + + if (conn->rttvar.srtt != 0) + { + /* rtt = 7/8 rtt + 1/8 new */ + m -= (conn->rttvar.srtt >> LOSS_THRESH); + conn->rttvar.srtt += m; + if (m < 0) + { + m = -m; + m -= (conn->rttvar.mdev >> RTT_SHIFT_ALPHA); + if (m > 0) + m >>= LOSS_THRESH; + } + else + { + m -= (conn->rttvar.mdev >> RTT_SHIFT_ALPHA); + } + conn->rttvar.mdev += m; + if (conn->rttvar.mdev > conn->rttvar.mdev_max) + { + conn->rttvar.mdev_max = conn->rttvar.mdev; + if (conn->rttvar.mdev_max > conn->rttvar.rttvar) + { + conn->rttvar.rttvar = conn->rttvar.mdev_max; + } + } + if (UDP_SEQ_GT(conn->rttvar.snd_una, conn->rttvar.rtt_seq)) + { + if (conn->rttvar.mdev_max < conn->rttvar.rttvar) + { + conn->rttvar.rttvar -= (conn->rttvar.rttvar - conn->rttvar.mdev_max) >> RTT_SHIFT_ALPHA; + } + conn->rttvar.mdev_max = rto_min; + } + } + else + { + /* fresh measurement */ + conn->rttvar.srtt = m << LOSS_THRESH; + conn->rttvar.mdev = m << 1; + conn->rttvar.mdev_max = conn->rttvar.rttvar = MAX(conn->rttvar.mdev, rto_min); + } + + conn->rttvar.rto = ((conn->rttvar.srtt >> LOSS_THRESH) + conn->rttvar.rttvar) > RTO_MAX ? RTO_MAX : ((conn->rttvar.srtt >> LOSS_THRESH) + conn->rttvar.rttvar); +} + /* * addCRC * add CRC field to the packet. @@ -1844,6 +2209,19 @@ setupOutgoingUDPConnection(int icid, TransportEntry *pEntry, UDPConn *conn) conn->msgSize = sizeof(conn->conn_info); conn->stillActive = true; conn->conn_info.seq = 1; + conn->rttvar.ts_rto = 0; + conn->rttvar.rto = UDP_INITIAL_RTO; + conn->rttvar.srtt = 0; + conn->rttvar.rttvar = 0; + conn->rttvar.snd_una = 0; + conn->rttvar.nrtx = 0; + conn->rttvar.max_nrtx = 0; + conn->rttvar.mss = UDP_DEFAULT_MSS; + conn->rttvar.cwnd = 2; + conn->rttvar.ssthresh = UDP_INFINITE_SSTHRESH; + conn->rttvar.loss_count = 0; + conn->rttvar.karn_mode = false; + conn->on_rto_idx = -1; Assert(conn->peer.ss_family == AF_INET || conn->peer.ss_family == AF_INET6); } @@ -2324,6 +2702,9 @@ UDPConn::computeExpirationPeriod(uint32 retry) else #endif { + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) + return Min(retry > 3 ? this->rttvar.rto * retry : this->rttvar.rto, UNACK_QUEUE_RING_LENGTH_LOSS); + uint32 factor = (retry <= 12 ? retry : 12); return Max(MIN_EXPIRATION_PERIOD, Min(MAX_EXPIRATION_PERIOD, (int)(this->rtt + (this->dev << 2)) << (factor))); } @@ -2418,7 +2799,7 @@ UDPConn::DeactiveConn() * packet is retransmitted. */ void -UDPConn::handleAckedPacket(ICBuffer *buf, uint64 now) +UDPConn::handleAckedPacket(ICBuffer *buf, uint64 now, struct icpkthdr *pkt) { uint64 ackTime = 0; bool bufIsHead = false; @@ -2428,6 +2809,39 @@ UDPConn::handleAckedPacket(ICBuffer *buf, uint64 now) buf = this->unackQueue.remove(buf); + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC || session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER_IC) + { + bufConn = static_cast(buf->conn); + buf = unack_queue_ring.slots[buf->unackQueueRingSlot].remove(buf); + unack_queue_ring.numOutStanding--; + if (this->unackQueue.length() >= 1) + unack_queue_ring.numSharedOutStanding--; + + ackTime = now - buf->sentTime; + + if (buf->nRetry == 0) + { + /* adjust the congestion control window. */ + if (snd_control_info.cwnd < snd_control_info.ssthresh) + snd_control_info.cwnd += 2; + else + snd_control_info.cwnd += 1 / snd_control_info.cwnd; + snd_control_info.cwnd = Min(snd_control_info.cwnd, snd_buffer_pool.maxCount); + } + + if ((bufConn->rttvar.rto << 1) > ackTime && pkt->retry_times != session_param.Gp_interconnect_min_retries_before_timeout) + estimateRTT(bufConn, (now - pkt->send_time)); + + if (buf->nRetry && pkt->retry_times > 0 && pkt->retry_times < session_param.Gp_interconnect_min_retries_before_timeout) + bufConn->rttvar.rto += (bufConn->rttvar.rto >> 4 * buf->nRetry); + + if (unlikely(session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER_IC)) + { + bufConn->sndvar.ts_rto = bufConn->rttvar.rto; + addtoRTOList(&mudp, bufConn); + } + } + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) { ICBufferList *alist = &unack_queue_ring.slots[buf->unackQueueRingSlot]; @@ -2608,24 +3022,59 @@ getCurrentTime(void) static void putIntoUnackQueueRing(UnackQueueRing *uqr, ICBuffer *buf, uint64 expTime, uint64 now) { + UDPConn *buffConn = static_cast(buf->conn); uint64 diff = 0; int idx = 0; - - /* The first packet, currentTime is not initialized */ - if (uqr->currentTime == 0) - uqr->currentTime = now - (now % TIMER_SPAN); - - diff = now + expTime - uqr->currentTime; - if (diff >= UNACK_QUEUE_RING_LENGTH) + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) { + /* The first packet, currentTime is not initialized */ +#ifndef TIMEOUT_Z + if (uqr->currentTime == 0) + uqr->currentTime = now - (now % TIMER_SPAN_LOSS); +#else + if (uqr->currentTime == 0 && buffConn->rttvar.rto == 0) + uqr->currentTime = now - (now % TIMER_SPAN_LOSS); + else + uqr->currentTime = now + buffConn->rttvar.rto; + +#endif + diff = expTime; + if (diff >= UNACK_QUEUE_RING_LENGTH_LOSS) + { #ifdef AMS_VERBOSE_LOGGING - LOG(INFO, "putIntoUnackQueueRing:" "now %lu expTime %lu diff %lu uqr-currentTime %lu", now, expTime, diff, uqr->currentTime); + LOG(INFO, "putIntoUnackQueueRing:" "now " UINT64_FORMAT "expTime " UINT64_FORMAT "diff " UINT64_FORMAT "uqr-currentTime " UINT64_FORMAT, now, expTime, diff, uqr->currentTime); #endif - diff = UNACK_QUEUE_RING_LENGTH - 1; + diff = UNACK_QUEUE_RING_LENGTH_LOSS - 1; + } + else if (diff < TIMER_SPAN_LOSS) + { + diff = diff < TIMER_SPAN_LOSS ? TIMER_SPAN_LOSS : diff; + } } - else if (diff < TIMER_SPAN) + else { - diff = TIMER_SPAN; + if (uqr->currentTime == 0) + uqr->currentTime = now - (now % TIMER_SPAN_LOSS); + + diff = now + expTime - uqr->currentTime; + if (diff >= UNACK_QUEUE_RING_LENGTH) + { +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "putIntoUnackQueueRing:" "now " UINT64_FORMAT "expTime " UINT64_FORMAT "diff " UINT64_FORMAT "uqr-currentTime " UINT64_FORMAT, now, expTime, diff, uqr->currentTime); +#endif + diff = UNACK_QUEUE_RING_LENGTH - 1; + } + else if (diff < TIMER_SPAN) + { + diff = TIMER_SPAN; + } + + idx = (uqr->idx + diff / TIMER_SPAN) % UNACK_QUEUE_RING_SLOTS_NUM; + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "PUTTW: curtime " UINT64_FORMAT " now " UINT64_FORMAT " (diff " UINT64_FORMAT ") expTime " UINT64_FORMAT " previdx %d, nowidx %d, nextidx %d", uqr->currentTime, now, diff, expTime, buf->unackQueueRingSlot, uqr->idx, idx); +#endif } idx = (uqr->idx + diff / TIMER_SPAN) % UNACK_QUEUE_RING_SLOTS_NUM; @@ -2784,6 +3233,30 @@ handleDataPacket(UDPConn *conn, icpkthdr *pkt, struct sockaddr_storage *peer, so logPkt("Interconnect error: received a packet when the queue is full ", pkt); ic_statistics.disorderedPktNum++; conn->stat_count_dropped++; + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER_IC && rx_control_info.mainWaitingState.waiting && + rx_control_info.mainWaitingState.waitingNode == pkt->motNodeId && + rx_control_info.mainWaitingState.waitingQuery == pkt->icId) + { + if (rx_control_info.mainWaitingState.waitingRoute == ANY_ROUTE) + { + if (rx_control_info.mainWaitingState.reachRoute == ANY_ROUTE) + rx_control_info.mainWaitingState.reachRoute = conn->route; + } + else if (rx_control_info.mainWaitingState.waitingRoute == conn->route) + { + if (IC_DEBUG2 >= session_param.log_min_messages) + LOG(INFO, "rx thread: main_waiting waking it route %d", rx_control_info.mainWaitingState.waitingRoute); + rx_control_info.mainWaitingState.reachRoute = conn->route; + } + /* WAKE MAIN THREAD HERE */ + *wakeup_mainthread = true; + } + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) + { + conn->setAckParam(param, UDPIC_FLAGS_FULL, conn->conn_info.seq - 1, conn->conn_info.extraSeq); + } return false; } @@ -3060,9 +3533,23 @@ rxThreadFunc(void *arg) UDPConn *conn = ic_control_info.connHtab.find(pkt); if (conn != NULL) { + uint64 now = getCurrentTime(); + uint64 send_time = pkt->send_time; + uint64 recv_time = now; + uint64 retry_times = pkt->retry_times; + + bool drop_ack = pkt->seq < conn->conn_info.seq ? true : false; /* Handling a regular packet */ if (handleDataPacket(conn, pkt, &peer, &peerlen, ¶m, &wakeup_mainthread)) pkt = NULL; + if (!pkt) + { + param.msg.send_time = send_time; + param.msg.recv_time = recv_time; + param.msg.retry_times = retry_times; + } + if (drop_ack) + param.msg.retry_times = session_param.Gp_interconnect_min_retries_before_timeout; ic_statistics.recvPktNum++; } else @@ -3835,7 +4322,7 @@ UDPConn::sendBuffers() { ICBuffer *buf = NULL; - if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC || session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) { if (this->unackQueue.length() > 0 && unack_queue_ring.numSharedOutStanding >= (snd_control_info.cwnd - snd_control_info.minCwnd)) @@ -3858,7 +4345,7 @@ UDPConn::sendBuffers() this->unackQueue.append(buf); - if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC || session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) { unack_queue_ring.numOutStanding++; if (this->unackQueue.length() > 1) @@ -3882,6 +4369,10 @@ UDPConn::sendBuffers() trans_proto_stats.update(TPE_DATA_PKT_SEND, buf->pkt); #endif + struct icpkthdr *pkt_ = buf->pkt; + pkt_->send_time = now; + pkt_->recv_time = 0; + pkt_->retry_times = buf->nRetry; this->sendOnce(buf->pkt); ic_statistics.sndPktNum++; @@ -4022,7 +4513,7 @@ UDPConn::handleAckForDisorderPkt(icpkthdr *pkt) if (buf->pkt->seq == pkt->seq) { - this->handleAckedPacket(buf, now); + this->handleAckedPacket(buf, now, pkt); shouldSendBuffers = true; break; } @@ -4032,7 +4523,7 @@ UDPConn::handleAckForDisorderPkt(icpkthdr *pkt) /* this is a lost packet, retransmit */ buf->nRetry++; - if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC || session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) { ICBufferList *alist = &unack_queue_ring.slots[buf->unackQueueRingSlot]; buf = alist->remove(buf); @@ -4063,7 +4554,7 @@ UDPConn::handleAckForDisorderPkt(icpkthdr *pkt) /* remove packet already received. */ next = link->next; - this->handleAckedPacket(buf, now); + this->handleAckedPacket(buf, now, pkt); shouldSendBuffers = true; link = next; buf = GET_ICBUFFER_FROM_PRIMARY(link); @@ -4080,7 +4571,7 @@ UDPConn::handleAckForDisorderPkt(icpkthdr *pkt) lostPktCnt--; } } - if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC || session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) { snd_control_info.ssthresh = Max(snd_control_info.cwnd / 2, snd_control_info.minCwnd); snd_control_info.cwnd = snd_control_info.ssthresh; @@ -4129,7 +4620,7 @@ UDPConn::handleAckForDuplicatePkt(icpkthdr *pkt) while (!this->unackQueue.is_head(link) && (buf->pkt->seq <= pkt->extraSeq)) { next = link->next; - this->handleAckedPacket(buf, now); + this->handleAckedPacket(buf, now, pkt); shouldSendBuffers = true; link = next; buf = GET_ICBUFFER_FROM_PRIMARY(link); @@ -4141,7 +4632,7 @@ UDPConn::handleAckForDuplicatePkt(icpkthdr *pkt) next = link->next; if (buf->pkt->seq == pkt->seq) { - this->handleAckedPacket(buf, now); + this->handleAckedPacket(buf, now, pkt); shouldSendBuffers = true; break; } @@ -4215,59 +4706,225 @@ void UDPConn::checkExpiration(ICChunkTransportState *transportStates, uint64 now) { /* check for expiration */ - int count = 0; - int retransmits = 0; + int count = 0; + int retransmits = 0; UDPConn *currBuffConn = NULL; Assert(unack_queue_ring.currentTime != 0); - while (now >= (unack_queue_ring.currentTime + TIMER_SPAN) && count++ < UNACK_QUEUE_RING_SLOTS_NUM) + + if (unlikely(session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER_IC)) { - /* expired, need to resend them */ - ICBuffer *curBuf = NULL; + checkRtmTimeout(&mudp, now, 500, transportStates, this->entry_, this); + return; + } + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) + { + uint64 timer_span_time = unack_queue_ring.currentTime + TIMER_SPAN_LOSS; - while (true) + while (now >= (timer_span_time + unack_queue_ring.time_difference) && count++ < UNACK_QUEUE_RING_SLOTS_NUM) { - ICBufferList *alist = &unack_queue_ring.slots[unack_queue_ring.idx]; - curBuf = alist->pop(); - if (curBuf == NULL) - break; - UDPConn *conn = static_cast(curBuf->conn); - curBuf->nRetry++; - putIntoUnackQueueRing(&unack_queue_ring, - curBuf, - conn->computeExpirationPeriod(curBuf->nRetry), now); + /* expired, need to resend them */ + ICBuffer *curBuf = NULL; + + while ((curBuf = unack_queue_ring.slots[unack_queue_ring.idx].pop()) != NULL) + { + UDPConn *conn = static_cast(curBuf->conn); + curBuf->nRetry++; + + /* + * Fixed Timeout Thresholds: Traditional TCP-style Retransmission Timeout + * (RTTVAR.RTO) calculations may be too rigid for networks with volatile + * latency. This leads to: + * Premature Retransmissions: Unnecessary data resends during temporary + * latency spikes, wasting bandwidth. + * Delayed Recovery: Slow reaction to actual packet loss when RTO is + * overly conservative. + * + * Lack of Context Awareness: Static RTO ignores real-time network behavior + * patterns, reducing throughput and responsiveness. + * + * Solution: Dynamic Timeout Threshold Adjustment + * Implements an adaptive timeout mechanism to optimize retransmission: + * if (now < (curBuf->sentTime + conn->rttvar.rto)) { + * uint32_t diff = (curBuf->sentTime + conn->rttvar.rto) - now; + * // ... (statistical tracking and threshold adjustment) + * } + * Temporary Latency Spike: Uses max (conservative) to avoid false + * retransmits, reducing bandwidth waste (vs. traditional mistaken + * retransmissions). + * Persistent Packet Loss: Prioritizes min (aggressive) via + * weight_retrans, accelerating recovery (vs. slow fixed-RTO reaction). + * Stable Network: Balances weights for equilibrium throughput (vs. + * static RTO limitations). + */ + if (now < (curBuf->sentTime + conn->rttvar.rto)) + { +#ifdef TIMEOUT_Z + uint32_t diff = (curBuf->sentTime + conn->rttvar.rto) - now; + if(unack_queue_ring.retrans_count == 0 && unack_queue_ring.no_retrans_count == 0) + { + unack_queue_ring.min = diff; + unack_queue_ring.max = diff; + } + + if (diff < unack_queue_ring.min) unack_queue_ring.min = diff; + if (diff > unack_queue_ring.max) unack_queue_ring.max = diff; + + if (unack_queue_ring.retrans_count == 0) + unack_queue_ring.time_difference = unack_queue_ring.max; + else if (unack_queue_ring.no_retrans_count == 0 && ic_statistics.retransmits < (session_param.Gp_interconnect_min_retries_before_timeout / 4)) + unack_queue_ring.time_difference = 0; + else + { + uint32_t total_count = unack_queue_ring.retrans_count + unack_queue_ring.no_retrans_count; + double weight_retrans = (double)unack_queue_ring.retrans_count / total_count; + double weight_no_retrans = (double)unack_queue_ring.no_retrans_count / total_count; + unack_queue_ring.time_difference = (uint32_t)(unack_queue_ring.max * weight_no_retrans + unack_queue_ring.min * weight_retrans); + } + + ++unack_queue_ring.no_retrans_count; + } + else + ++unack_queue_ring.retrans_count; +#endif #ifdef TRANSFER_PROTOCOL_STATS - trans_proto_stats.update(TPE_DATA_PKT_SEND, curBuf->pkt); + trans_proto_stats.update(TPE_DATA_PKT_SEND, curBuf->pkt); #endif - conn->sendOnce(curBuf->pkt); + currBuffConn = static_cast(curBuf->conn); + putIntoUnackQueueRing(&unack_queue_ring, + curBuf, + currBuffConn->computeExpirationPeriod(curBuf->nRetry), getCurrentTime()); + struct icpkthdr *pkt_ = curBuf->pkt; - currBuffConn = conn; + pkt_->send_time = getCurrentTime(); + pkt_->recv_time = 0; + pkt_->retry_times = curBuf->nRetry; - retransmits++; - ic_statistics.retransmits++; - currBuffConn->stat_count_resent++; - currBuffConn->stat_max_resent = Max(currBuffConn->stat_max_resent, - currBuffConn->stat_count_resent); + currBuffConn->sendOnce(curBuf->pkt); - UDPConn::checkNetworkTimeout(curBuf, now, &transportStates->networkTimeoutIsLogged); + /* + * Adaptive Retry Backoff with Polling for Network Asymmetry Mitigation + * + * This logic addresses two critical network pathologies: + * 1. RTO Distortion Amplification: + * - Packet loss in volatile networks causes RTO-based retransmission errors + * - Multiple spurious retries increase network load and congestion collapse risk + * 2. Data Skew-Induced Starvation: + * - Under unbalanced workloads, low-traffic nodes experience MON (Message Order Number) delays + * - Delayed ACKs trigger false retransmissions even when packets arrive eventually + * - Unacked queue inflation worsens congestion in high-traffic nodes + */ + int32_t loop_ack = curBuf->nRetry; + uint32_t rto_min = UDP_RTO_MIN / 10; + uint32_t rtoMs = conn->rttvar.rto / 1000; + int32_t wait_time = rto_min > rtoMs ? rto_min : rtoMs; + int32_t loop = 0; + + /* + * To optimize performance, we need to process all the time-out file descriptors (fds) + * in each batch together. + */ + if (loop_ack > 0) + { + while (loop++ < loop_ack) + { + if (this->entry_->pollAcks(wait_time)) + { + this->entry_->handleAcks(false); + curBuf->nRetry = 0; + break; + } + + struct icpkthdr *pkt_ = curBuf->pkt; + pkt_->send_time = getCurrentTime(); + pkt_->recv_time = 0; + pkt_->retry_times = curBuf->nRetry; + currBuffConn->sendOnce(pkt_); + + if (loop_ack < (session_param.Gp_interconnect_min_retries_before_timeout / 10)) + wait_time += wait_time / 10; + else if (loop_ack > (session_param.Gp_interconnect_min_retries_before_timeout / 10) && loop_ack < (session_param.Gp_interconnect_min_retries_before_timeout / 5)) + wait_time += RTO_MAX / 10; + else if (loop_ack > (session_param.Gp_interconnect_min_retries_before_timeout / 5) && loop_ack < (session_param.Gp_interconnect_min_retries_before_timeout / 2)) + wait_time += RTO_MAX / 5; + else if (loop_ack < (session_param.Gp_interconnect_min_retries_before_timeout)) + wait_time += RTO_MAX; + }; + } + + if (loop_ack > session_param.Gp_interconnect_min_retries_before_timeout / 5) + LOG(INFO, "Resending packet (seq %d) to %s (pid %d cid %d) with %d retries in %lu seconds", + curBuf->pkt->seq, curBuf->conn->remoteHostAndPort, + curBuf->pkt->dstPid, curBuf->pkt->dstContentId, curBuf->nRetry, + (now - curBuf->sentTime) / 1000 / 1000); + + retransmits++; + ic_statistics.retransmits++; + currBuffConn->stat_count_resent++; + currBuffConn->stat_max_resent = Max(currBuffConn->stat_max_resent, + currBuffConn->stat_count_resent); + + UDPConn::checkNetworkTimeout(curBuf, now, &transportStates->networkTimeoutIsLogged); #ifdef AMS_VERBOSE_LOGGING - LOG(INFO, "RESEND pkt with seq %d (retry %d, rtt %lu) to route %d", - curBuf->pkt->seq, curBuf->nRetry, currBuffConn->rtt, currBuffConn->route); - logPkt("RESEND PKT in checkExpiration", curBuf->pkt); + LOG(INFO, "RESEND pkt with seq %d (retry %d, rtt " UINT64_FORMAT ") to route %d", + curBuf->pkt->seq, curBuf->nRetry, currBuffConn->rtt, currBuffConn->route); + logPkt("RESEND PKT in checkExpiration", curBuf->pkt); #endif + } + + timer_span_time += TIMER_SPAN_LOSS; + unack_queue_ring.idx = (unack_queue_ring.idx + 1) % (UNACK_QUEUE_RING_SLOTS_NUM); } + } + else + { + while (now >= (unack_queue_ring.currentTime + TIMER_SPAN) && count++ < UNACK_QUEUE_RING_SLOTS_NUM) + { + /* expired, need to resend them */ + ICBuffer *curBuf = NULL; - unack_queue_ring.currentTime += TIMER_SPAN; - unack_queue_ring.idx = (unack_queue_ring.idx + 1) % (UNACK_QUEUE_RING_SLOTS_NUM); + while ((curBuf = unack_queue_ring.slots[unack_queue_ring.idx].pop()) != NULL) + { + curBuf->nRetry++; + currBuffConn = static_cast(curBuf->conn); + putIntoUnackQueueRing( + &unack_queue_ring, + curBuf, + currBuffConn->computeExpirationPeriod(curBuf->nRetry), now); + +#ifdef TRANSFER_PROTOCOL_STATS + trans_proto_stats.update(TPE_DATA_PKT_SEND, curBuf->pkt); +#endif + + currBuffConn->sendOnce(curBuf->pkt); + + retransmits++; + ic_statistics.retransmits++; + currBuffConn->stat_count_resent++; + currBuffConn->stat_max_resent = Max(currBuffConn->stat_max_resent, currBuffConn->stat_count_resent); + UDPConn::checkNetworkTimeout(curBuf, now, &transportStates->networkTimeoutIsLogged); + +#ifdef AMS_VERBOSE_LOGGING + LOG(INFO, "RESEND pkt with seq %d (retry %d, rtt " UINT64_FORMAT ") to route %d", + curBuf->pkt->seq, curBuf->nRetry, curBuf->conn->rtt, curBuf->conn->route); + logPkt("RESEND PKT in checkExpiration", curBuf->pkt); +#endif + } + + unack_queue_ring.currentTime += TIMER_SPAN; + unack_queue_ring.idx = (unack_queue_ring.idx + 1) % (UNACK_QUEUE_RING_SLOTS_NUM); + } + + /* + * deal with case when there is a long time this function is not called. + */ + unack_queue_ring.currentTime = now - (now % (TIMER_SPAN)); } - /* - * deal with case when there is a long time this function is not called. - */ - unack_queue_ring.currentTime = now - (now % TIMER_SPAN); if (retransmits > 0) { snd_control_info.ssthresh = Max(snd_control_info.cwnd / 2, snd_control_info.minCwnd); @@ -4325,14 +4982,29 @@ UDPConn::checkDeadlock() ic_control_info.lastDeadlockCheckTime = now; ic_statistics.statusQueryMsgNum++; + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC && this->entry_->pollAcks(50)) + { + this->entry_->handleAcks(false); + this->deadlockCheckBeginTime = now; + } + /* check network error. */ - if ((now - this->deadlockCheckBeginTime) > ((uint64) session_param.Gp_interconnect_transmit_timeout * 1000 * 1000)) + if ((now - this->deadlockCheckBeginTime) > ((uint64) session_param.Gp_interconnect_transmit_timeout * 100 * 1000)) { - std::stringstream ss; - ss <<"ERROR, interconnect encountered a network error, please check your network"<< - "Did not get any response from "<remoteHostAndPort, + this->conn_info.dstPid, this->conn_info.dstContentId); + + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER_IC) + this->capacity += 1; + + if ((now - this->deadlockCheckBeginTime) > ((uint64)session_param.Gp_interconnect_transmit_timeout * 1000 * 1000)) + { + std::stringstream ss; + ss << "ERROR, interconnect encountered a network error, please check your network." + << "Did not get any response from " << remoteHostAndPort << " (pid " << conn_info.dstPid << " cid " << conn_info.dstContentId << ") in " + << session_param.Gp_interconnect_transmit_timeout << " seconds."; + throw ICNetworkException(ss.str(), __FILE__, __LINE__); + } } } } @@ -4375,7 +5047,7 @@ UDPConn::checkExpirationCapacityFC(int timeout) ic_control_info.lastPacketSendTime = now; this->updateRetransmitStatistics(); - checkNetworkTimeout(buf, now, &entry_->state->networkTimeoutIsLogged); + UDPConn::checkNetworkTimeout(buf, now, &entry_->state->networkTimeoutIsLogged); } } @@ -4394,13 +5066,13 @@ UDPConn::checkExceptions(int retry, int timeout) this->checkExpirationCapacityFC(timeout); } - if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC) + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_IC || session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) { uint64 now = getCurrentTime(); if (now - ic_control_info.lastExpirationCheckTime > uint64(TIMER_CHECKING_PERIOD)) { - UDPConn::checkExpiration(this->entry_->state, now); + this->checkExpiration(this->entry_->state, now); ic_control_info.lastExpirationCheckTime = now; } } @@ -4434,12 +5106,23 @@ UDPConn::checkExceptions(int retry, int timeout) int UDPConn::computeTimeout(int retry) { + int32_t rtoMs = 0; + + rtoMs = this->rttvar.rto / 1000; if (this->unackQueue.length() == 0) return TIMER_CHECKING_PERIOD; ICBufferLink *bufLink = this->unackQueue.first(); ICBuffer *buf = GET_ICBUFFER_FROM_PRIMARY(bufLink); + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_ADVANCE_IC) + { + if (buf->nRetry == 0 && retry == 0 && unack_queue_ring.numSharedOutStanding < (snd_control_info.cwnd - snd_control_info.minCwnd)) + return 0; + + return rtoMs > TIMER_CHECKING_PERIOD ? rtoMs: TIMER_CHECKING_PERIOD; + } + if (buf->nRetry == 0 && retry == 0) return 0; @@ -4513,8 +5196,7 @@ UDPConn::Send(DataBlock *data) if (this->entry_->pollAcks(timeout)) { - bool rs = this->entry_->handleAcks(); - if (rs) + if (this->entry_->handleAcks(true)) { /* * We make sure that we deal with the stop messages only after @@ -4527,6 +5209,9 @@ UDPConn::Send(DataBlock *data) } this->checkExceptions(retry++, timeout); doCheckExpiration = false; + + if (!doCheckExpiration && this->unackQueue.length() == 0 && this->capacity > 0 && this->sndQueue.length() > 0) + this->sendBuffers(); } this->pBuff = (uint8 *) this->curBuff->pkt; @@ -4670,7 +5355,7 @@ TransportEntry::aggregateStatistics() * if we receive a stop message, return true (caller will clean up). */ bool -TransportEntry::handleAcks() +TransportEntry::handleAcks(bool need_flush) { bool ret = false; UDPConn *ackConn = NULL; @@ -4800,6 +5485,12 @@ TransportEntry::handleAcks() shouldSendBuffers |= (ackConn->handleAckForDisorderPkt(pkt)); break; } + else if (pkt->flags & UDPIC_FLAGS_FULL) + { + if (IC_DEBUG1 >= session_param.log_min_messages) + LOG(DEBUG1, "Recv buff is full [seq %d] from route %d; srcpid %d dstpid %d cmd %d flags 0x%x connseq %d", pkt->seq, ackConn->route, pkt->srcPid, pkt->dstPid, pkt->icId, pkt->flags, ackConn->conn_info.seq); + break; + } /* * don't get out of the loop if pkt->seq equals to @@ -4853,7 +5544,7 @@ TransportEntry::handleAcks() while (!ackConn->unackQueue.is_head(link) && buf->pkt->seq <= pkt->seq) { next = link->next; - ackConn->handleAckedPacket(buf, now); + ackConn->handleAckedPacket(buf, now, pkt); shouldSendBuffers = true; link = next; buf = GET_ICBUFFER_FROM_PRIMARY(link); @@ -4869,7 +5560,7 @@ TransportEntry::handleAcks() * still send here, since in STOP/EOS race case, we may have been * in EOS sending logic and will not check stop message. */ - if (shouldSendBuffers) + if (shouldSendBuffers && need_flush) ackConn->sendBuffers(); } else @@ -4926,7 +5617,7 @@ TransportEntry::handleStopMsgs() { if (this->pollAcks(0)) { - bool rs = this->handleAcks(); + bool rs = this->handleAcks(true); if (rs) { /* more stops found, loop again. */ @@ -5050,6 +5741,19 @@ TransportEntry::MakeRecvEntry(CChunkTransportStateImpl *state, conn->conn_info.icId = icid; conn->conn_info.flags = UDPIC_FLAGS_RECEIVER_TO_SENDER; + conn->rttvar.ts_rto = 0; + conn->rttvar.rto = UDP_INITIAL_RTO; + conn->rttvar.srtt = 0; + conn->rttvar.rttvar = 0; + conn->rttvar.snd_una = 0; + conn->rttvar.nrtx = 0; + conn->rttvar.max_nrtx = 0; + conn->rttvar.mss = UDP_DEFAULT_MSS; + conn->rttvar.cwnd = 2; + conn->rttvar.ssthresh = UDP_INFINITE_SSTHRESH; + conn->rttvar.loss_count = 0; + conn->rttvar.karn_mode = false; + conn->on_rto_idx = -1; ic_control_info.connHtab.add(conn); if (global_param.createOpaqueDataCallback) @@ -5728,6 +6432,8 @@ CChunkTransportStateImpl::CreateSendEntries(ICSliceTable *sliceTable) snd_buffer_pool.init(); initUnackQueueRing(&unack_queue_ring); + if (session_param.Gp_interconnect_fc_method == INTERCONNECT_FC_METHOD_LOSS_TIMER_IC) + initUdpManager(&mudp); ic_control_info.isSender = true; ic_control_info.lastExpirationCheckTime = getCurrentTime(); ic_control_info.lastPacketSendTime = ic_control_info.lastExpirationCheckTime; @@ -6184,12 +6890,16 @@ CChunkTransportStateImpl::SendEOS(int motNodeID, DataBlock *data) timeout = conn->computeTimeout(retry); if (pEntry->pollAcks(timeout)) - pEntry->handleAcks(); + pEntry->handleAcks(true); conn->checkExceptions(retry++, timeout); if (retry >= MAX_TRY) + { + if (conn->unackQueue.length() == 0) + conn->sendBuffers(); break; + } } if ((!conn->cdbProc) || (conn->unackQueue.length() == 0 && diff --git a/contrib/udp2/ic_common/udp2/ic_udp2_internal.hpp b/contrib/udp2/ic_common/udp2/ic_udp2_internal.hpp index baeb6a0841c..2602133a9e5 100644 --- a/contrib/udp2/ic_common/udp2/ic_udp2_internal.hpp +++ b/contrib/udp2/ic_common/udp2/ic_udp2_internal.hpp @@ -50,9 +50,12 @@ #include #include #include +#include #include #include #include +#include +#include #include #include #include @@ -230,6 +233,9 @@ typedef struct icpkthdr */ uint32 seq; uint32 extraSeq; + uint64_t send_time; + uint64_t recv_time; + uint8_t retry_times; } icpkthdr; typedef struct ICBuffer ICBuffer; @@ -434,6 +440,50 @@ ic_bswap32(uint32 x) ((x >> 24) & 0x000000ff); } +#define TIMEOUT_Z +#define RTT_SHIFT_ALPHA (3) /* srtt (0.125) */ +#define LOSS_THRESH (3) /* Packet loss triggers Karn */ +#define RTO_MIN (5000) /* MIN RTO(ms) */ +#define RTO_MAX (100000) /* MAX RTO(ms) */ +#define UDP_INFINITE_SSTHRESH 0x7fffffff + +#define SEC_TO_USEC(t) ((t) * 1000000) +#define SEC_TO_MSEC(t) ((t) * 1000) +#define MSEC_TO_USEC(t) ((t) * 1000) +#define USEC_TO_SEC(t) ((t) / 1000000) +#define TIME_TICK (1000000/HZ)/* in us */ + +#define UDP_INITIAL_RTO (MSEC_TO_USEC(200)) +#define UDP_DEFAULT_MSS 1460 + +#define RTO_HASH (3000) + +#define UDP_SEQ_LT(a,b) ((int32_t)((a)-(b)) < 0) +#define UDP_SEQ_LEQ(a,b) ((int32_t)((a)-(b)) <= 0) +#define UDP_SEQ_GT(a,b) ((int32_t)((a)-(b)) > 0) +#define UDP_SEQ_GEQ(a,b) ((int32_t)((a)-(b)) >= 0) + +#define UDP_RTO_MIN ((unsigned)(HZ/5)) + +struct UDPConn; +struct rto_hashstore +{ + uint32_t rto_now_idx; /* pointing the hs_table_s index */ + uint32_t rto_now_ts; + + TAILQ_HEAD(rto_head, UDPConn) rto_list[RTO_HASH + 1]; +}; + +struct mudp_manager +{ + struct rto_hashstore *rto_store; /* lists related to timeout */ + + int rto_list_cnt; + uint32_t cur_ts; +}; + +typedef struct mudp_manager* mudp_manager_t; + #define MAX_TRY (11) #define TIMEOUT(try) ((try) < MAX_TRY ? (timeoutArray[(try)]) : (timeoutArray[MAX_TRY])) @@ -456,6 +506,7 @@ ic_bswap32(uint32 x) #define UDPIC_FLAGS_DISORDER (32) #define UDPIC_FLAGS_DUPLICATE (64) #define UDPIC_FLAGS_CAPACITY (128) +#define UDPIC_FLAGS_FULL (256) #define UDPIC_MIN_BUF_SIZE (128 * 1024) @@ -465,7 +516,6 @@ ic_bswap32(uint32 x) * A connection hash table bin. * */ -struct UDPConn; typedef struct ConnHtabBin ConnHtabBin; struct ConnHtabBin { @@ -859,8 +909,10 @@ struct ICGlobalControlInfo */ #define UNACK_QUEUE_RING_SLOTS_NUM (2000) #define TIMER_SPAN (session_param.Gp_interconnect_timer_period * 1000ULL) /* default: 5ms */ +#define TIMER_SPAN_LOSS (session_param.Gp_interconnect_timer_period * 500ULL) /* default: 5ms */ #define TIMER_CHECKING_PERIOD (session_param.Gp_interconnect_timer_checking_period) /* default: 20ms */ #define UNACK_QUEUE_RING_LENGTH (UNACK_QUEUE_RING_SLOTS_NUM * TIMER_SPAN) +#define UNACK_QUEUE_RING_LENGTH_LOSS (UNACK_QUEUE_RING_SLOTS_NUM * TIMER_SPAN_LOSS) #define DEFAULT_RTT (session_param.Gp_interconnect_default_rtt * 1000) /* default: 20ms */ #define MIN_RTT (100) /* 0.1ms */ @@ -916,6 +968,13 @@ struct UnackQueueRing /* time slots */ ICBufferList slots[UNACK_QUEUE_RING_SLOTS_NUM]; +#ifdef TIMEOUT_Z + uint32_t retrans_count; + uint32_t no_retrans_count; + uint32_t time_difference; + uint32_t min; + uint32_t max; +#endif }; /* @@ -981,6 +1040,27 @@ typedef struct ICStatistics struct TransportEntry; +struct udp_send_vars +{ + /* send sequence variables */ + uint32_t snd_una; /* send unacknoledged */ + uint32_t snd_wnd; /* send window (unscaled) */ + + /* retransmission timeout variables */ + uint8_t nrtx; /* number of retransmission */ + uint8_t max_nrtx; /* max number of retransmission */ + uint32_t rto; /* retransmission timeout */ + uint32_t ts_rto; /* timestamp for retransmission timeout */ + + /* congestion control variables */ + uint32_t cwnd; /* congestion window */ + uint32_t ssthresh; /* slow start threshold */ + + TAILQ_ENTRY(UDPConn) send_link; + TAILQ_ENTRY(UDPConn) timer_link; /* timer link (rto list) */ + +}; + /* * Structure used for keeping track of a pt-to-pt connection between two * Cdb Entities (either QE or QD). @@ -1035,6 +1115,32 @@ struct UDPConn : public MotionConn uint64 stat_max_resent; uint64 stat_count_dropped; + struct { + uint32_t ts_rto; + uint32_t rto; + uint32_t srtt; + uint32_t rttvar; + uint32_t snd_una; + uint16_t nrtx; + uint16_t max_nrtx; + uint32_t mss; + uint32_t cwnd; + uint32_t ssthresh; + uint32_t fss; + uint8_t loss_count; + uint32_t mdev; + uint32_t mdev_max; + uint32_t rtt_seq; /* sequence number to update rttvar */ + uint32_t ts_all_rto; + bool karn_mode; + } rttvar; + + uint8_t on_timewait_list; + int16_t on_rto_idx; + + uint32_t snd_nxt; /* send next */ + struct udp_send_vars sndvar; + TransportEntry *entry_; public: @@ -1054,7 +1160,7 @@ struct UDPConn : public MotionConn void prepareRxConnForRead(); void DeactiveConn(); - void handleAckedPacket(ICBuffer *buf, uint64 now); + void handleAckedPacket(ICBuffer *buf, uint64 now, struct icpkthdr *pkt); void prepareXmit(); void sendOnce(icpkthdr *pkt); void handleStop(); @@ -1072,9 +1178,9 @@ struct UDPConn : public MotionConn void updateRetransmitStatistics(); void checkExpirationCapacityFC(int timeout); + void checkExpiration(ICChunkTransportState *transportStates, uint64 now); static void checkNetworkTimeout(ICBuffer *buf, uint64 now, bool *networkTimeoutIsLogged); - static void checkExpiration(ICChunkTransportState *transportStates, uint64 now); static void sendAckWithParam(AckSendParam *param); static void sendControlMessage(icpkthdr *pkt, int fd, struct sockaddr *addr, socklen_t peerLen); @@ -1125,7 +1231,7 @@ class TransportEntry : public CChunkTransportStateEntry void aggregateStatistics(); - bool handleAcks(); + bool handleAcks(bool need_flush); void handleStopMsgs(); bool pollAcks(int timeout); diff --git a/contrib/udp2/ic_udp2.c b/contrib/udp2/ic_udp2.c index 31c0d5c2eeb..0972c874941 100644 --- a/contrib/udp2/ic_udp2.c +++ b/contrib/udp2/ic_udp2.c @@ -47,6 +47,7 @@ #include "ic_types.h" #include "udp2/ic_udp2.h" +#define MAX_QUEUE_SIZE (64) #define HandleLastError() \ do { \ @@ -159,12 +160,50 @@ WaitInterconnectQuitUDPIFC2(void) void SetupInterconnectUDP2(EState *estate) { + int32 sliceNum = 0; + int32 calcQueueDepth = 0; + int32 calcSndDepth = 0; + if (estate->interconnect_context) elog(ERROR, "SetupInterconnectUDP: already initialized."); if (!estate->es_sliceTable) elog(ERROR, "SetupInterconnectUDP: no slice table ?"); + if (estate != NULL && estate->es_sliceTable != NULL) + sliceNum = estate->es_sliceTable->numSlices; + else + sliceNum = 1; + + if (Gp_interconnect_mem_size > 0 && + Gp_interconnect_queue_depth == 4 && + Gp_interconnect_snd_queue_depth == 2) + { + int32 perQueue = Gp_interconnect_mem_size / + (Gp_max_packet_size * sliceNum); + + calcSndDepth = Max(Gp_interconnect_snd_queue_depth, perQueue / 2); + calcQueueDepth = Max(Gp_interconnect_queue_depth, perQueue - calcSndDepth); + + if (calcSndDepth > MAX_QUEUE_SIZE) + calcSndDepth = MAX_QUEUE_SIZE; + + if (calcQueueDepth > MAX_QUEUE_SIZE) + calcQueueDepth = MAX_QUEUE_SIZE; + + Gp_interconnect_snd_queue_depth = calcSndDepth; + Gp_interconnect_queue_depth = calcQueueDepth; + + elog(DEBUG1, "SetupUDPIFCInterconnect: queue depth, " + "queue_depth=%d, snd_queue_depth=%d, " + "mem_size=%d, slices=%d, packet_size=%d", + Gp_interconnect_queue_depth, + Gp_interconnect_snd_queue_depth, + Gp_interconnect_mem_size, + sliceNum, + Gp_max_packet_size); + } + SessionMotionLayerIPCParam param; SetupSessionMotionLayerIPCParam(¶m); From 4e8297ee7db845e169c50c858cb4d156593cd86f Mon Sep 17 00:00:00 2001 From: reshke Date: Sat, 6 Dec 2025 13:40:38 +0500 Subject: [PATCH 220/260] Rename `incremental` nonterminal to `opt_incremental`. (#1473) for src/backend/parser/gram.y, it is more convenient to name non-terminals (rules) using opt prefix if they allow empty input. There is no behavioral change. Found by review of cbdb - postgres16 rebase --- src/backend/parser/gram.y | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index db7661ea206..b982ba3a29a 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -500,7 +500,7 @@ static void check_expressions_in_partition_key(PartitionSpec *spec, core_yyscan_ %type OptTempTableName %type into_clause create_as_target create_mv_target -%type incremental +%type opt_incremental %type createfunc_opt_item common_func_opt_item dostmt_opt_item %type func_arg func_arg_with_default table_func_column aggr_arg @@ -7216,7 +7216,7 @@ ext_opt_encoding_item: *****************************************************************************/ CreateMatViewStmt: - CREATE OptNoLog incremental MATERIALIZED VIEW create_mv_target AS SelectStmt opt_with_data OptDistributedBy + CREATE OptNoLog opt_incremental MATERIALIZED VIEW create_mv_target AS SelectStmt opt_with_data OptDistributedBy { CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); ctas->query = $8; @@ -7231,7 +7231,7 @@ CreateMatViewStmt: ctas->into->distributedBy = $10; $$ = (Node *) ctas; } - | CREATE OptNoLog incremental MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data OptDistributedBy + | CREATE OptNoLog opt_incremental MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data OptDistributedBy { CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); ctas->query = $11; @@ -7336,7 +7336,7 @@ create_mv_target: } ; -incremental: INCREMENTAL { $$ = true; } +opt_incremental: INCREMENTAL { $$ = true; } | /*EMPTY*/ { $$ = false; } ; From d73e3ab580f425a3a47b53101b0417816f33cbcf Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Thu, 4 Dec 2025 14:11:20 +0800 Subject: [PATCH 221/260] Add liburing dependency check for PAX storage Add AC_CHECK_LIB check for liburing in the PAX dependency block to detect missing liburing-devel early during configure phase. PAX storage requires liburing for io_uring-based fast I/O. This check prevents unclear linker errors during compilation. --- configure | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 4 ++++ 2 files changed, 53 insertions(+) diff --git a/configure b/configure index 7fb6757cd8a..8186363b90f 100755 --- a/configure +++ b/configure @@ -9463,6 +9463,55 @@ $as_echo "#define HAVE_ZSTD 1" >>confdefs.h fi + # Check liburing + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for io_uring_queue_init in -luring" >&5 +$as_echo_n "checking for io_uring_queue_init in -luring... " >&6; } +if ${ac_cv_lib_uring_io_uring_queue_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luring $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char io_uring_queue_init (); +int +main () +{ +return io_uring_queue_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uring_io_uring_queue_init=yes +else + ac_cv_lib_uring_io_uring_queue_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uring_io_uring_queue_init" >&5 +$as_echo "$ac_cv_lib_uring_io_uring_queue_init" >&6; } +if test "x$ac_cv_lib_uring_io_uring_queue_init" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBURING 1 +_ACEOF + + LIBS="-luring $LIBS" + +else + as_fn_error $? "library 'uring' is required for PAX support" "$LINENO" 5 +fi + + # Check cmake >= 3.11.0 using AX_COMPARE_VERSION # Extract the first word of "cmake", so it can be a program name with args. set dummy cmake; ac_word=$2 diff --git a/configure.ac b/configure.ac index 81241a8c25a..cc75aee241f 100644 --- a/configure.ac +++ b/configure.ac @@ -972,6 +972,10 @@ if test "$enable_pax" = yes; then [AC_MSG_ERROR([libzstd >= 1.4.0 is required for PAX support])] ) + # Check liburing + AC_CHECK_LIB(uring, io_uring_queue_init, [], + [AC_MSG_ERROR([library 'uring' is required for PAX support])]) + # Check cmake >= 3.11.0 using AX_COMPARE_VERSION AC_PATH_PROG([CMAKE], [cmake], [no]) if test "$CMAKE" = "no"; then From 3863e51616156a23d9192418957a33c1e3abdead Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Thu, 4 Dec 2025 15:07:26 +0800 Subject: [PATCH 222/260] Sandbox: Add liburing to Rocky Linux 9 Dockerfile Add liburing-devel (build) and liburing (runtime) packages to Rocky Linux 9 sandbox for PAX storage fast I/O support. This dependency is introduced by the PR #1464 . --- devops/sandbox/Dockerfile.main.rockylinux9 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/devops/sandbox/Dockerfile.main.rockylinux9 b/devops/sandbox/Dockerfile.main.rockylinux9 index c5476aa370f..03619cda4ba 100644 --- a/devops/sandbox/Dockerfile.main.rockylinux9 +++ b/devops/sandbox/Dockerfile.main.rockylinux9 @@ -99,6 +99,7 @@ RUN dnf makecache && \ readline-devel \ zlib-devel && \ dnf install -y --enablerepo=crb \ + liburing-devel \ libuv-devel \ libyaml-devel \ perl-IPC-Run \ @@ -165,6 +166,7 @@ RUN dnf -y update && \ krb5-libs \ libevent \ libicu \ + liburing \ libuuid \ libxml2 \ libyaml \ From 6a5cac1f0ac39ba2885e5434d75638349e32ba7b Mon Sep 17 00:00:00 2001 From: zhan7236 <76658920+zhan7236@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:50:23 +0000 Subject: [PATCH 223/260] Fix gawk regexp escape sequence warning Fix issue #1206: Replace [^\#] with [^\043] in AWK regex patterns. The original [^\#] caused a gawk warning: 'regexp escape sequence `#' is not a known regexp operator' The initial fix of changing to [^#] broke the build because Make interprets # as a comment character, truncating the command. This fix uses the octal escape sequence \043 (ASCII code for #) which: 1. Is properly escaped for Make (not interpreted as comment) 2. Is a valid AWK/regex escape sequence (no warning) 3. Works with both gawk and mawk Changes: - src/Makefile.shlib: 5 occurrences updated - src/backend/Makefile: 2 occurrences updated --- src/Makefile.shlib | 10 +++++----- src/backend/Makefile | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Makefile.shlib b/src/Makefile.shlib index b8cbc96b28b..50214226de6 100644 --- a/src/Makefile.shlib +++ b/src/Makefile.shlib @@ -130,7 +130,7 @@ ifeq ($(PORTNAME), darwin) DLSUFFIX = .so LINK.shared = $(COMPILER) -bundle -multiply_defined suppress endif - BUILD.exports = $(AWK) '/^[^\#]/ {printf "_%s\n",$$1}' $< >$@ + BUILD.exports = $(AWK) '/^[^\043]/ {printf "_%s\n",$$1}' $< >$@ exports_file = $(SHLIB_EXPORTS:%.txt=%.list) ifneq (,$(exports_file)) exported_symbols_list = -exported_symbols_list $(exports_file) @@ -142,7 +142,7 @@ ifeq ($(PORTNAME), openbsd) ifdef soname LINK.shared += -Wl,-x,-soname,$(soname) endif - BUILD.exports = ( echo '{ global:'; $(AWK) '/^[^\#]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@ + BUILD.exports = ( echo '{ global:'; $(AWK) '/^[^\043]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@ exports_file = $(SHLIB_EXPORTS:%.txt=%.list) ifneq (,$(exports_file)) LINK.shared += -Wl,--version-script=$(exports_file) @@ -158,7 +158,7 @@ ifeq ($(PORTNAME), freebsd) ifdef soname LINK.shared += -Wl,-x,-soname,$(soname) endif - BUILD.exports = ( echo '{ global:'; $(AWK) '/^[^\#]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@ + BUILD.exports = ( echo '{ global:'; $(AWK) '/^[^\043]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@ exports_file = $(SHLIB_EXPORTS:%.txt=%.list) ifneq (,$(exports_file)) LINK.shared += -Wl,--version-script=$(exports_file) @@ -170,7 +170,7 @@ ifeq ($(PORTNAME), netbsd) ifdef soname LINK.shared += -Wl,-x,-soname,$(soname) endif - BUILD.exports = ( echo '{ global:'; $(AWK) '/^[^\#]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@ + BUILD.exports = ( echo '{ global:'; $(AWK) '/^[^\043]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@ exports_file = $(SHLIB_EXPORTS:%.txt=%.list) ifneq (,$(exports_file)) LINK.shared += -Wl,--version-script=$(exports_file) @@ -215,7 +215,7 @@ ifeq ($(PORTNAME), linux) ifdef soname LINK.shared += -Wl,-soname,$(soname) endif - BUILD.exports = ( echo '{ global:'; $(AWK) '/^[^\#]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@ + BUILD.exports = ( echo '{ global:'; $(AWK) '/^[^\043]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@ exports_file = $(SHLIB_EXPORTS:%.txt=%.list) ifneq (,$(exports_file)) LINK.shared += -Wl,--version-script=$(exports_file) diff --git a/src/backend/Makefile b/src/backend/Makefile index 44dbe7f0e15..210adcccf84 100644 --- a/src/backend/Makefile +++ b/src/backend/Makefile @@ -95,14 +95,14 @@ SYMBOL_MAPPING_FLAGS = ifeq ($(PORTNAME), darwin) SYMBOL_MAP_FILE = hide_symbols.list $(SYMBOL_MAP_FILE): $(top_builddir)/src/interfaces/libpq/exports.txt - $(AWK) '/^[^\#]/ {printf "_%s\n",$$1}' $< | grep -v -E $(SAFELY_EXPORTED_SYMBOLS_PATTERN) >$@ + $(AWK) '/^[^\043]/ {printf "_%s\n",$$1}' $< | grep -v -E $(SAFELY_EXPORTED_SYMBOLS_PATTERN) >$@ SYMBOL_MAPPING_FLAGS = -unexported_symbols_list $(SYMBOL_MAP_FILE) endif ifeq ($(PORTNAME), linux) SYMBOL_MAP_FILE = postgres_symbols.map $(SYMBOL_MAP_FILE): $(top_builddir)/src/interfaces/libpq/exports.txt - ( echo '{ global: *; '; echo ' local:'; $(AWK) '/^[^\#]/ {printf "%s;\n",$$1}' $< | grep -v -E $(SAFELY_EXPORTED_SYMBOLS_PATTERN); echo '};' ) >$@ + ( echo '{ global: *; '; echo ' local:'; $(AWK) '/^[^\043]/ {printf "%s;\n",$$1}' $< | grep -v -E $(SAFELY_EXPORTED_SYMBOLS_PATTERN); echo '};' ) >$@ SYMBOL_MAPPING_FLAGS = -Wl,--version-script=$(SYMBOL_MAP_FILE) endif ifeq ($(enable_shared_postgres_backend),yes) From 4980e49c69eb768fd336fb4754c2985a778319e5 Mon Sep 17 00:00:00 2001 From: reshke Date: Fri, 12 Dec 2025 13:43:40 +0500 Subject: [PATCH 224/260] Remove PG-14 rebase artifact from dblink and fix for `dblink_get_conn` (#1484) * Remove PG-14 rebase artifact from dblink. dblink_connstr_check changed its return type as part of 9b75844. It is error-prone to rebase dblink sources since then. There is no need for second dblink_connstr_check, even thought it produces no harm. Double-check from gpdb-7: https://github.com/greenplum-db/gpdb-archive/blob/main/contrib/dblink/dblink.c#L290 Found during PG-16 rebase review. * Fix DBLINK_GET_CONN https://github.com/apache/cloudberry/blob/9b758447dfb65dcb8024f2465c410221ded12841/contrib/dblink/dblink.c#L185 use modified conn_str in dblink_get_conn, check out 8420c0f commit msg https://github.com/apache/cloudberry/blob/9b758447dfb65dcb8024f2465c410221ded12841/contrib/dblink/dblink.c#L185-L195 --- contrib/dblink/dblink.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index ea990020baf..af82922522b 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -198,7 +198,7 @@ dblink_get_conn(char *conname_or_str, connstr = get_connect_string(conname_or_str); if (connstr == NULL) connstr = conname_or_str; - dblink_connstr_check(connstr); + connstr = dblink_connstr_check(connstr); /* * We must obey fd.c's limit on non-virtual file descriptors. Assume @@ -312,7 +312,6 @@ dblink_connect(PG_FUNCTION_ARGS) /* check password in connection string if not superuser */ connstr = dblink_connstr_check(connstr); - dblink_connstr_check(connstr); /* * We must obey fd.c's limit on non-virtual file descriptors. Assume that From 0851cdd326af9ce91d7051b064239d9a1b76af14 Mon Sep 17 00:00:00 2001 From: reshke Date: Sun, 14 Dec 2025 00:53:17 +0500 Subject: [PATCH 225/260] Cherry-pick: Add pg_buffercache_usage_counts() to contrib/pg_buffercache. (#1492) Turns out, `CREATE EXTENSION pg_buffercache` does not work on main. It is failing due pg_buffercache_usage_counts function is missing. This function was committed to PostgreSQL as part of https://github.com/postgres/postgres/commit/f3fa31327ecba75ee0e946abaa56dbf471ba704b Extension sql 1.4.1 version was cherry-picked to Cloudberry as part of https://github.com/apache/cloudberry/pull/883/ (see commit 79f2d28ea05e0746170be07386fe728e1003aaac) ``` CREATE EXTENSION pg_buffercache; +ERROR: function pg_buffercache_usage_counts() does not exist ``` This pr fixes cherry-pick issues, and adds this extension to `ic-contrib` check Found during PG16 rebase work Original commit msg: It was pointed out that pg_buffercache_summary()'s report of the overall average usage count isn't that useful, and what would be more helpful in many cases is to report totals for each possible usage count. Add a new function to do it like that. Since pg_buffercache 1.4 is already new for v16, we don't need to create a new extension version; we'll just define this as part of 1.4. Nathan Bossart Discussion: https://postgr.es/m/20230130233040.GA2800702@nathanxps13 --- .github/workflows/build-cloudberry.yml | 1 + .github/workflows/build-deb-cloudberry.yml | 1 + .../expected/pg_buffercache.out | 28 +++-- .../pg_buffercache--1.3--1.4.sql | 11 ++ contrib/pg_buffercache/pg_buffercache_pages.c | 43 +++++++ contrib/pg_buffercache/sql/pg_buffercache.sql | 12 +- doc/src/sgml/pgbuffercache.sgml | 105 +++++++++++++++++- 7 files changed, 177 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index 04d5e827b6e..4f4d4f3939a 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -298,6 +298,7 @@ jobs: "contrib/pgcrypto:installcheck", "contrib/tablefunc:installcheck", "contrib/passwordcheck:installcheck", + "contrib/pg_buffercache:installcheck", "contrib/sslinfo:installcheck"] }, {"test":"ic-gpcontrib", diff --git a/.github/workflows/build-deb-cloudberry.yml b/.github/workflows/build-deb-cloudberry.yml index 38c2391376e..6299c9500c6 100644 --- a/.github/workflows/build-deb-cloudberry.yml +++ b/.github/workflows/build-deb-cloudberry.yml @@ -237,6 +237,7 @@ jobs: "contrib/pgcrypto:installcheck", "contrib/tablefunc:installcheck", "contrib/passwordcheck:installcheck", + "contrib/pg_buffercache:installcheck", "contrib/sslinfo:installcheck"] }, {"test":"ic-deb-gpcontrib", diff --git a/contrib/pg_buffercache/expected/pg_buffercache.out b/contrib/pg_buffercache/expected/pg_buffercache.out index 7b41872634e..de77aac68b0 100644 --- a/contrib/pg_buffercache/expected/pg_buffercache.out +++ b/contrib/pg_buffercache/expected/pg_buffercache.out @@ -17,9 +17,24 @@ from pg_buffercache_summary(); t | t | t (1 row) +SELECT count(*) > 0 FROM pg_buffercache_usage_counts() WHERE buffers >= 0; + ?column? +---------- + t +(1 row) + -- Check that the functions / views can't be accessed by default. To avoid -- having to create a dedicated user, use the pg_database_owner pseudo-role. SET ROLE pg_database_owner; +SELECT * FROM pg_buffercache; +ERROR: permission denied for view pg_buffercache +SELECT * FROM pg_buffercache_pages() AS p (wrong int); +ERROR: permission denied for function pg_buffercache_pages +SELECT * FROM pg_buffercache_summary(); +ERROR: permission denied for function pg_buffercache_summary +SELECT * FROM pg_buffercache_usage_counts(); +ERROR: permission denied for function pg_buffercache_usage_counts +RESET role; SELECT count(*) > 0 FROM pg_buffercache_usage_counts() WHERE buffers >= 0; ?column? ---------- @@ -72,17 +87,7 @@ SELECT count(*) > 0 FROM gp_buffercache_usage_counts_aggregated WHERE buffers >= (1 row) -- Check that the functions / views can't be accessed by default. -CREATE ROLE buffercache_test; -SET ROLE buffercache_test; -SELECT * FROM pg_buffercache; -ERROR: permission denied for view pg_buffercache -SELECT * FROM pg_buffercache_pages() AS p (wrong int); -ERROR: permission denied for function pg_buffercache_pages -SELECT * FROM pg_buffercache_summary(); -ERROR: permission denied for function pg_buffercache_summary -RESET role; -SELECT * FROM pg_buffercache_usage_counts(); -ERROR: permission denied for function pg_buffercache_usage_counts +SET ROLE pg_database_owner; -- GPDB SELECT * FROM pg_buffercache_summary; ERROR: permission denied for view pg_buffercache_summary @@ -166,4 +171,3 @@ SELECT count(*) > 0 FROM gp_buffercache_usage_counts_aggregated; (1 row) RESET ROLE; -DROP ROLE buffercache_test; diff --git a/contrib/pg_buffercache/pg_buffercache--1.3--1.4.sql b/contrib/pg_buffercache/pg_buffercache--1.3--1.4.sql index 8f212dc5e93..d5aebf3ba39 100644 --- a/contrib/pg_buffercache/pg_buffercache--1.3--1.4.sql +++ b/contrib/pg_buffercache/pg_buffercache--1.3--1.4.sql @@ -12,6 +12,17 @@ CREATE FUNCTION pg_buffercache_summary( AS 'MODULE_PATHNAME', 'pg_buffercache_summary' LANGUAGE C PARALLEL SAFE; +CREATE FUNCTION pg_buffercache_usage_counts( + OUT usage_count int4, + OUT buffers int4, + OUT dirty int4, + OUT pinned int4) +RETURNS SETOF record +AS 'MODULE_PATHNAME', 'pg_buffercache_usage_counts' +LANGUAGE C PARALLEL SAFE; + -- Don't want these to be available to public. REVOKE ALL ON FUNCTION pg_buffercache_summary() FROM PUBLIC; GRANT EXECUTE ON FUNCTION pg_buffercache_summary() TO pg_monitor; +REVOKE ALL ON FUNCTION pg_buffercache_usage_counts() FROM PUBLIC; +GRANT EXECUTE ON FUNCTION pg_buffercache_usage_counts() TO pg_monitor; diff --git a/contrib/pg_buffercache/pg_buffercache_pages.c b/contrib/pg_buffercache/pg_buffercache_pages.c index 8e0807d6265..e91f35599f0 100644 --- a/contrib/pg_buffercache/pg_buffercache_pages.c +++ b/contrib/pg_buffercache/pg_buffercache_pages.c @@ -18,6 +18,7 @@ #define NUM_BUFFERCACHE_PAGES_MIN_ELEM 8 #define NUM_BUFFERCACHE_PAGES_ELEM 9 #define NUM_BUFFERCACHE_SUMMARY_ELEM 5 +#define NUM_BUFFERCACHE_USAGE_COUNTS_ELEM 4 PG_MODULE_MAGIC; @@ -61,6 +62,7 @@ typedef struct */ PG_FUNCTION_INFO_V1(pg_buffercache_pages); PG_FUNCTION_INFO_V1(pg_buffercache_summary); +PG_FUNCTION_INFO_V1(pg_buffercache_usage_counts); Datum pg_buffercache_pages(PG_FUNCTION_ARGS) @@ -304,3 +306,44 @@ pg_buffercache_summary(PG_FUNCTION_ARGS) PG_RETURN_DATUM(result); } + +Datum +pg_buffercache_usage_counts(PG_FUNCTION_ARGS) +{ + ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; + int usage_counts[BM_MAX_USAGE_COUNT + 1] = {0}; + int dirty[BM_MAX_USAGE_COUNT + 1] = {0}; + int pinned[BM_MAX_USAGE_COUNT + 1] = {0}; + Datum values[NUM_BUFFERCACHE_USAGE_COUNTS_ELEM]; + bool nulls[NUM_BUFFERCACHE_USAGE_COUNTS_ELEM] = {0}; + + InitMaterializedSRF(fcinfo, 0); + + for (int i = 0; i < NBuffers; i++) + { + BufferDesc *bufHdr = GetBufferDescriptor(i); + uint32 buf_state = pg_atomic_read_u32(&bufHdr->state); + int usage_count; + + usage_count = BUF_STATE_GET_USAGECOUNT(buf_state); + usage_counts[usage_count]++; + + if (buf_state & BM_DIRTY) + dirty[usage_count]++; + + if (BUF_STATE_GET_REFCOUNT(buf_state) > 0) + pinned[usage_count]++; + } + + for (int i = 0; i < BM_MAX_USAGE_COUNT + 1; i++) + { + values[0] = Int32GetDatum(i); + values[1] = Int32GetDatum(usage_counts[i]); + values[2] = Int32GetDatum(dirty[i]); + values[3] = Int32GetDatum(pinned[i]); + + tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls); + } + + return (Datum) 0; +} diff --git a/contrib/pg_buffercache/sql/pg_buffercache.sql b/contrib/pg_buffercache/sql/pg_buffercache.sql index 5d2beecd707..e9091c9e38c 100644 --- a/contrib/pg_buffercache/sql/pg_buffercache.sql +++ b/contrib/pg_buffercache/sql/pg_buffercache.sql @@ -10,12 +10,15 @@ select buffers_used + buffers_unused > 0, buffers_pinned <= buffers_used from pg_buffercache_summary(); +SELECT count(*) > 0 FROM pg_buffercache_usage_counts() WHERE buffers >= 0; + -- Check that the functions / views can't be accessed by default. To avoid -- having to create a dedicated user, use the pg_database_owner pseudo-role. SET ROLE pg_database_owner; SELECT * FROM pg_buffercache; SELECT * FROM pg_buffercache_pages() AS p (wrong int); SELECT * FROM pg_buffercache_summary(); +SELECT * FROM pg_buffercache_usage_counts(); RESET role; SELECT count(*) > 0 FROM pg_buffercache_usage_counts() WHERE buffers >= 0; @@ -42,12 +45,7 @@ SELECT count(*) > 0 FROM gp_buffercache_usage_counts WHERE buffers >= 0; SELECT count(*) > 0 FROM gp_buffercache_usage_counts_aggregated WHERE buffers >= 0; -- Check that the functions / views can't be accessed by default. -CREATE ROLE buffercache_test; -SET ROLE buffercache_test; -SELECT * FROM pg_buffercache; -SELECT * FROM pg_buffercache_pages() AS p (wrong int); -SELECT * FROM pg_buffercache_summary(); -SELECT * FROM pg_buffercache_usage_counts(); +SET ROLE pg_database_owner; -- GPDB SELECT * FROM pg_buffercache_summary; SELECT * FROM pg_buffercache_usage_counts; @@ -73,5 +71,3 @@ SELECT buffers_used + buffers_unused > 0 FROM gp_buffercache_summary_aggregated; SELECT count(*) > 0 FROM gp_buffercache_usage_counts; SELECT count(*) > 0 FROM gp_buffercache_usage_counts_aggregated; RESET ROLE; - -DROP ROLE buffercache_test; diff --git a/doc/src/sgml/pgbuffercache.sgml b/doc/src/sgml/pgbuffercache.sgml index 8f314ee8ff4..a05f010b2a5 100644 --- a/doc/src/sgml/pgbuffercache.sgml +++ b/doc/src/sgml/pgbuffercache.sgml @@ -21,9 +21,10 @@ - The module provides the pg_buffercache_pages() - function, wrapped in the pg_buffercache view, and - the pg_buffercache_summary() function. + This module provides the pg_buffercache_pages() + function (wrapped in the pg_buffercache view), + the pg_buffercache_summary() function, and the + pg_buffercache_usage_counts() function. @@ -38,6 +39,12 @@ row summarizing the state of the shared buffer cache. + + The pg_buffercache_usage_counts() function returns a set + of records, each row describing the number of buffers with a given usage + count. + + By default, use is restricted to superusers and roles with privileges of the pg_monitor role. Access may be granted to others @@ -242,7 +249,7 @@ usagecount_avg float8 - Average usagecount of used shared buffers + Average usage count of used shared buffers @@ -266,6 +273,84 @@ + The <function>pg_buffercache_usage_counts()</function> Function + + + The definitions of the columns exposed by the function are shown in + . + + + + <function>pg_buffercache_usage_counts()</function> Output Columns + + + + + Column Type + + + Description + + + + + + + + usage_count int4 + + + A possible buffer usage count + + + + + + buffers int4 + + + Number of buffers with the usage count + + + + + + dirty int4 + + + Number of dirty buffers with the usage count + + + + + + pinned int4 + + + Number of pinned buffers with the usage count + + + + +
      + + + The pg_buffercache_usage_counts() function returns a + set of rows summarizing the states of all shared buffers, aggregated over + the possible usage count values. Similar and more detailed information is + provided by the pg_buffercache view, but + pg_buffercache_usage_counts() is significantly cheaper. + + + + Like the pg_buffercache view, + pg_buffercache_usage_counts() does not acquire buffer + manager locks. Therefore concurrent activity can lead to minor inaccuracies + in the result. + +
      + + Sample Output @@ -299,6 +384,18 @@ regression=# SELECT * FROM pg_buffercache_summary(); --------------+----------------+---------------+----------------+---------------- 248 | 2096904 | 39 | 0 | 3.141129 (1 row) + + +regression=# SELECT * FROM pg_buffercache_usage_counts(); + usage_count | buffers | dirty | pinned +-------------+---------+-------+-------- + 0 | 14650 | 0 | 0 + 1 | 1436 | 671 | 0 + 2 | 102 | 88 | 0 + 3 | 23 | 21 | 0 + 4 | 9 | 7 | 0 + 5 | 164 | 106 | 0 +(6 rows) From 3904a1940dde7a780dd6633d868ac07d700170f5 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Mon, 24 Nov 2025 10:33:18 +0800 Subject: [PATCH 226/260] Fix SonarQube error and refine trigger conditions The SonarQube weekly analysis workflow was failing due to a missing `compile_commands.json` file. This occurs because the build-wrapper output directory was previously referenced with an incorrect path containing an unintended quotation mark, causing the CFamily plugin to abort with a NoSuchFileException. This change fixes the failure by aligning the workflow with SonarCloud recommended usage. Additionally, this commit updates the workflow triggers and execution conditions: - Added explicit triggers for push/PR events when the workflow file itself is modified, enabling validation of workflow changes - Allow PRs to validate the build process while preventing unauthorized SonarCloud access The workflow will now: - Run all build steps in PRs for validation purposes - Execute SonarQube scans only on: * Weekly scheduled runs (apache/cloudberry only) * Manual workflow dispatch (apache/cloudberry only) * Push to main branch when workflow file changes (apache/cloudberry only) --- .github/workflows/sonarqube.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index c883b5dd5f1..e67c2d96a54 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -32,6 +32,7 @@ # Triggers: # - Weekly schedule # - optional manual dispatch. +# - Changes on sonarqube.yml file # # Notes: # - SONARCLOUD_TOKEN secret is provided by the ASF Infra team @@ -42,6 +43,14 @@ on: schedule: - cron: "0 0 * * 1" workflow_dispatch: + push: + branches: + - main + paths: + - '.github/workflows/sonarqube.yml' + pull_request: + paths: + - '.github/workflows/sonarqube.yml' permissions: contents: read @@ -112,9 +121,10 @@ jobs: build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} make -j$(nproc) - name: SonarQube Scan + if: ${{ github.event_name != 'pull_request' }} uses: SonarSource/sonarqube-scan-action@v6 env: SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }} with: args: > - --define sonar.cfamily.compile-commands="${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json" + --define "sonar.cfamily.compile-commands=${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json" From a4a62f6a7c8379ac1bf88ca0b31b8a799f835157 Mon Sep 17 00:00:00 2001 From: reshke Date: Mon, 15 Dec 2025 20:04:12 +0500 Subject: [PATCH 227/260] FIx regress and TAP test for amcheck and enable in CI (#1489) Fix amcheck regression test output Turns out amcheck contrib expression test were read since DIRECTORY TABLE feature. Fix that, also add amcheck to CI Also, fix TAP test. 003 - disable this test, 2PC tx are not supported for CBDB. for 001 - replace verify_heapam with verify_heapam_internal, for sake of this test expected output. --- .github/workflows/build-cloudberry.yml | 1 + .github/workflows/build-deb-cloudberry.yml | 1 + contrib/amcheck/expected/check_heap.out | 10 +++++----- contrib/amcheck/t/001_verify_heapam.pl | 18 +++++++++--------- contrib/amcheck/t/003_cic_2pc.pl | 7 ++++++- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index 4f4d4f3939a..1d529e21b11 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -286,6 +286,7 @@ jobs: }, {"test":"ic-contrib", "make_configs":["contrib/auto_explain:installcheck", + "contrib/amcheck:installcheck", "contrib/citext:installcheck", "contrib/btree_gin:installcheck", "contrib/file_fdw:installcheck", diff --git a/.github/workflows/build-deb-cloudberry.yml b/.github/workflows/build-deb-cloudberry.yml index 6299c9500c6..2e87b8aa948 100644 --- a/.github/workflows/build-deb-cloudberry.yml +++ b/.github/workflows/build-deb-cloudberry.yml @@ -225,6 +225,7 @@ jobs: }, {"test":"ic-deb-contrib", "make_configs":["contrib/auto_explain:installcheck", + "contrib/amcheck:installcheck", "contrib/citext:installcheck", "contrib/btree_gin:installcheck", "contrib/file_fdw:installcheck", diff --git a/contrib/amcheck/expected/check_heap.out b/contrib/amcheck/expected/check_heap.out index b6e98eaa68d..cf9ff0941d0 100644 --- a/contrib/amcheck/expected/check_heap.out +++ b/contrib/amcheck/expected/check_heap.out @@ -227,7 +227,7 @@ CREATE TABLE test_partitioned (a int, b text default repeat('x', 5000)) SELECT * FROM verify_heapam('test_partitioned', startblock := NULL, endblock := NULL); -ERROR: "test_partitioned" is not a table, materialized view, or TOAST table +ERROR: "test_partitioned" is not a table, directory table, materialized view, or TOAST table CONTEXT: SQL statement "SELECT t.blkno, t.offnum, t.attnum, t.msg FROM verify_heapam_internal(relation, on_error_stop, @@ -268,7 +268,7 @@ CREATE INDEX test_index ON test_partition (a); SELECT * FROM verify_heapam('test_index', startblock := NULL, endblock := NULL); -ERROR: "test_index" is not a table, materialized view, or TOAST table +ERROR: "test_index" is not a table, directory table, materialized view, or TOAST table CONTEXT: SQL statement "SELECT t.blkno, t.offnum, t.attnum, t.msg FROM verify_heapam_internal(relation, on_error_stop, @@ -283,7 +283,7 @@ CREATE VIEW test_view AS SELECT 1; SELECT * FROM verify_heapam('test_view', startblock := NULL, endblock := NULL); -ERROR: "test_view" is not a table, materialized view, or TOAST table +ERROR: "test_view" is not a table, directory table, materialized view, or TOAST table CONTEXT: SQL statement "SELECT t.blkno, t.offnum, t.attnum, t.msg FROM verify_heapam_internal(relation, on_error_stop, @@ -298,7 +298,7 @@ CREATE SEQUENCE test_sequence; SELECT * FROM verify_heapam('test_sequence', startblock := NULL, endblock := NULL); -ERROR: "test_sequence" is not a table, materialized view, or TOAST table +ERROR: "test_sequence" is not a table, directory table, materialized view, or TOAST table CONTEXT: SQL statement "SELECT t.blkno, t.offnum, t.attnum, t.msg FROM verify_heapam_internal(relation, on_error_stop, @@ -315,7 +315,7 @@ CREATE FOREIGN TABLE test_foreign_table () SERVER dummy_server; SELECT * FROM verify_heapam('test_foreign_table', startblock := NULL, endblock := NULL); -ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table +ERROR: "test_foreign_table" is not a table, directory table, materialized view, or TOAST table CONTEXT: SQL statement "SELECT t.blkno, t.offnum, t.attnum, t.msg FROM verify_heapam_internal(relation, on_error_stop, diff --git a/contrib/amcheck/t/001_verify_heapam.pl b/contrib/amcheck/t/001_verify_heapam.pl index 64ba64d6b41..b9dbb42a67f 100644 --- a/contrib/amcheck/t/001_verify_heapam.pl +++ b/contrib/amcheck/t/001_verify_heapam.pl @@ -31,18 +31,18 @@ # fresh_test_table('test'); corrupt_first_page('test'); -detects_heap_corruption("verify_heapam('test')", "plain corrupted table"); +detects_heap_corruption("verify_heapam_internal('test')", "plain corrupted table"); detects_heap_corruption( - "verify_heapam('test', skip := 'all-visible')", + "verify_heapam_internal('test', skip := 'all-visible')", "plain corrupted table skipping all-visible"); detects_heap_corruption( - "verify_heapam('test', skip := 'all-frozen')", + "verify_heapam_internal('test', skip := 'all-frozen')", "plain corrupted table skipping all-frozen"); detects_heap_corruption( - "verify_heapam('test', check_toast := false)", + "verify_heapam_internal('test', check_toast := false)", "plain corrupted table skipping toast"); detects_heap_corruption( - "verify_heapam('test', startblock := 0, endblock := 0)", + "verify_heapam_internal('test', startblock := 0, endblock := 0)", "plain corrupted table checking only block zero"); # @@ -50,13 +50,13 @@ # fresh_test_table('test'); $node->safe_psql('postgres', q(VACUUM (FREEZE, DISABLE_PAGE_SKIPPING) test)); -detects_no_corruption("verify_heapam('test')", +detects_no_corruption("verify_heapam_internal('test')", "all-frozen not corrupted table"); corrupt_first_page('test'); -detects_heap_corruption("verify_heapam('test')", +detects_heap_corruption("verify_heapam_internal('test')", "all-frozen corrupted table"); detects_no_corruption( - "verify_heapam('test', skip := 'all-frozen')", + "verify_heapam_internal('test', skip := 'all-frozen')", "all-frozen corrupted table skipping all-frozen"); # Returns the filesystem path for the named relation. @@ -208,7 +208,7 @@ sub check_all_options_uncorrupted . "endblock := $endblock"; detects_no_corruption( - "verify_heapam('$relname', $opts)", + "verify_heapam_internal('$relname', $opts)", "$prefix: $opts"); } } diff --git a/contrib/amcheck/t/003_cic_2pc.pl b/contrib/amcheck/t/003_cic_2pc.pl index 445aabaa5e9..eb4d9361955 100644 --- a/contrib/amcheck/t/003_cic_2pc.pl +++ b/contrib/amcheck/t/003_cic_2pc.pl @@ -9,7 +9,11 @@ use PostgresNode; use TestLib; -use Test::More tests => 5; +use Test::More tests => 0 + 1;#5; + +SKIP: +{ + skip "TWO PHASE transactions are not supported in Cloudberry, skip test", 1; Test::More->builder->todo_start('filesystem bug') if TestLib::has_wal_read_bug; @@ -186,3 +190,4 @@ $node->stop; done_testing(); +} From c4ddad7b92f1f4449efcfe10e7f93eefd8a288bc Mon Sep 17 00:00:00 2001 From: Brent Doil Date: Mon, 4 Jul 2022 02:37:03 -0400 Subject: [PATCH 228/260] Refactor dumping of pg_type_encoding attributes. This commit drops the GPDB specific TypeStorageOptions struct and supporting code in favor of adding pg_type_encoding.typoptions to the getTypes query. The usage of CatalogId as the hash index caused collisions with the TypeInfo indexes when TypeStorageOptions was a unique dumpable object, since the only unique aspect was the typstorage field. Now, when dumpType is called, we check the typstorage field and dump the ALTER TABLE...SET DEFAULT ENCODING TOC entry if needed. Authored-by: Brent Doil --- src/bin/pg_dump/common.c | 5 -- src/bin/pg_dump/pg_dump.c | 129 +++++-------------------------- src/bin/pg_dump/pg_dump.h | 30 ++----- src/bin/pg_dump/pg_dump_sort.c | 6 -- src/bin/pg_dump/t/002_pg_dump.pl | 10 +++ 5 files changed, 38 insertions(+), 142 deletions(-) diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index 895fe14f4cc..661e19605f6 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -125,7 +125,6 @@ getSchemaData(Archive *fout, int *numTablesPtr) int numForeignServers; int numDefaultACLs; int numEventTriggers; - int numTypeStorageOptions; /* GPDB specific variables */ int numExtProtocols; @@ -171,10 +170,6 @@ getSchemaData(Archive *fout, int *numTablesPtr) pg_log_info("reading user-defined types"); (void) getTypes(fout, &numTypes); - /* this must be after getFuncs */ - pg_log_info("reading type storage options"); - getTypeStorageOptions(fout, &numTypeStorageOptions); - /* this must be after getFuncs, too */ pg_log_info("reading procedural languages"); getProcLangs(fout, &numProcLangs); diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index f522508fd2a..2293bc6d41a 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -266,7 +266,6 @@ static void dumpForeignServer(Archive *fout, const ForeignServerInfo *srvinfo); /* GPDB follow upstream style */ static void dumpExtProtocol(Archive *fout, const ExtProtInfo *ptcinfo); -static void dumpTypeStorageOptions(Archive *fout, const TypeStorageOptions *tstorageoptions); static void dumpUserMappings(Archive *fout, const char *servername, const char *namespace, @@ -368,6 +367,7 @@ static bool forcePartitionRootLoad(const TableInfo *tbinfo); /* START MPP ADDITION */ +static void dumpTypeStorageOptions(Archive *fout, const TypeInfo *tyinfo); static void setExtPartDependency(TableInfo *tblinfo, int numTables); static char *format_table_function_columns(Archive *fout, const FuncInfo *finfo, int nallargs, char **allargtypes, @@ -5948,6 +5948,7 @@ getTypes(Archive *fout, int *numTypes) int i_typtype; int i_typisdefined; int i_isarray; + int i_typstorage; /* * we include even the built-in types because those may be used as array @@ -5988,8 +5989,10 @@ getTypes(Archive *fout, int *numTypes) "ELSE (SELECT relkind FROM pg_class WHERE oid = t.typrelid) END AS typrelkind, " "t.typtype, t.typisdefined, " "t.typname[0] = '_' AND t.typelem != 0 AND " - "(SELECT typarray FROM pg_type te WHERE oid = t.typelem) = t.oid AS isarray " + "(SELECT typarray FROM pg_type te WHERE oid = t.typelem) = t.oid AS isarray, " + "coalesce(array_to_string(e.typoptions, ', '), '') AS typstorage " "FROM pg_type t " + "LEFT JOIN pg_type_encoding e ON t.oid = e.typid " "LEFT JOIN pg_init_privs pip ON " "(t.oid = pip.objoid " "AND pip.classoid = 'pg_type'::regclass " @@ -6057,6 +6060,7 @@ getTypes(Archive *fout, int *numTypes) i_typtype = PQfnumber(res, "typtype"); i_typisdefined = PQfnumber(res, "typisdefined"); i_isarray = PQfnumber(res, "isarray"); + i_typstorage = PQfnumber(res, "typstorage"); for (i = 0; i < ntups; i++) { @@ -6089,6 +6093,8 @@ getTypes(Archive *fout, int *numTypes) else tyinfo[i].isArray = false; + tyinfo[i].typstorage = pg_strdup(PQgetvalue(res, i, i_typstorage)); + if (tyinfo[i].typtype == 'm') tyinfo[i].isMultirange = true; else @@ -6157,91 +6163,6 @@ getTypes(Archive *fout, int *numTypes) return tyinfo; } - - -/* - * getTypeStorageOptions: - * read all types with storage options in the system catalogs and return them in the - * TypeStorageOptions* structure - * - * numTypes is set to the number of types with storage options read in - * - */ -TypeStorageOptions * -getTypeStorageOptions(Archive *fout, int *numTypes) -{ - PGresult *res; - int ntups; - int i; - PQExpBuffer query = createPQExpBuffer(); - TypeStorageOptions *tstorageoptions; - int i_tableoid; - int i_oid; - int i_typname; - int i_typnamespace; - int i_typoptions; - int i_rolname; - - /* - * The following statement used format_type to resolve an internal name to its equivalent sql name. - * The format_type seems to do two things, it translates an internal type name (e.g. bpchar) into its - * sql equivalent (e.g. character), and it puts trailing "[]" on a type if it is an array. - * For any user defined type (ie. oid > 10000) or any type that might be an array (ie. starts with '_'), - * then we will call quote_ident. If the type is a system defined type (i.e. oid <= 10000) - * and can not possibly be an array (i.e. does not start with '_'), then call format_type to get the name. The - * reason we do not call format_type for arrays is that it will return a '[]' on the end, which can not be used - * when dumping the type. - */ - appendPQExpBuffer(query, "SELECT " - "CASE WHEN t.oid > 10000 OR substring(t.typname from 1 for 1) = '_' " - "THEN quote_ident(t.typname) " - "ELSE pg_catalog.format_type(t.oid, NULL) " - "END as typname, " - "t.tableoid as tableoid, " - "t.oid AS oid, " - "t.typnamespace AS typnamespace, " - "(%s typowner) as rolname, " - "array_to_string(a.typoptions, ', ') AS typoptions " - "FROM pg_type t " - "JOIN pg_catalog.pg_type_encoding a ON a.typid = t.oid " - "WHERE t.typisdefined = 't'", username_subquery); - - res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK); - - ntups = PQntuples(res); - - tstorageoptions = (TypeStorageOptions *) pg_malloc(ntups * sizeof(TypeStorageOptions)); - - i_tableoid = PQfnumber(res, "tableoid"); - i_oid = PQfnumber(res, "oid"); - i_typname = PQfnumber(res, "typname"); - i_typnamespace = PQfnumber(res, "typnamespace"); - i_typoptions = PQfnumber(res, "typoptions"); - i_rolname = PQfnumber(res, "rolname"); - - for (i = 0; i < ntups; i++) - { - tstorageoptions[i].dobj.objType = DO_TYPE_STORAGE_OPTIONS; - tstorageoptions[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_tableoid)); - tstorageoptions[i].dobj.catId.oid = atooid(PQgetvalue(res, i, i_oid)); - AssignDumpId(&tstorageoptions[i].dobj); - tstorageoptions[i].dobj.name = pg_strdup(PQgetvalue(res, i, i_typname)); - tstorageoptions[i].dobj.namespace = findNamespace(atooid(PQgetvalue(res, i, i_typnamespace))); - tstorageoptions[i].typoptions = pg_strdup(PQgetvalue(res, i, i_typoptions)); - tstorageoptions[i].rolname = pg_strdup(PQgetvalue(res, i, i_rolname)); - } - - *numTypes = ntups; - - PQclear(res); - - destroyPQExpBuffer(query); - - return tstorageoptions; -} - - - /* * getOperators: * read all operators in the system catalogs and return them in the @@ -11488,9 +11409,6 @@ dumpDumpableObject(Archive *fout, const DumpableObject *dobj) case DO_TYPE: dumpType(fout, (const TypeInfo *) dobj); break; - case DO_TYPE_STORAGE_OPTIONS: - dumpTypeStorageOptions(fout, (const TypeStorageOptions *) dobj); - break; case DO_SHELL_TYPE: dumpShellType(fout, (const ShellTypeInfo *) dobj); break; @@ -11871,6 +11789,10 @@ dumpType(Archive *fout, const TypeInfo *tyinfo) else pg_log_warning("typtype of data type \"%s\" appears to be invalid", tyinfo->dobj.name); + + if (tyinfo->typstorage && *tyinfo->typstorage != '\0') + dumpTypeStorageOptions(fout, tyinfo); + } /* @@ -12486,36 +12408,28 @@ dumpBaseType(Archive *fout, const TypeInfo *tyinfo) * writes out to fout the ALTER TYPE queries to set default storage options for type */ static void -dumpTypeStorageOptions(Archive *fout, const TypeStorageOptions *tstorageoptions) +dumpTypeStorageOptions(Archive *fout, const TypeInfo *tyinfo) { PQExpBuffer q; - PQExpBuffer delq; - q = createPQExpBuffer(); - delq = createPQExpBuffer(); - /* - * Type name is already quoted by caller using quote_ident, hence used - * directly here. - */ appendPQExpBuffer(q, "ALTER TYPE %s.", - fmtId(tstorageoptions->dobj.namespace->dobj.name)); + fmtId(tyinfo->dobj.namespace->dobj.name)); appendPQExpBuffer(q, "%s SET DEFAULT ENCODING (%s);\n", - tstorageoptions->dobj.name, - tstorageoptions->typoptions); + fmtId(tyinfo->dobj.name), + tyinfo->typstorage); ArchiveEntry(fout, - tstorageoptions->dobj.catId, - tstorageoptions->dobj.dumpId, - ARCHIVE_OPTS(.tag = tstorageoptions->dobj.name, - .namespace = tstorageoptions->dobj.namespace->dobj.name, - .owner = tstorageoptions->rolname, + tyinfo->dobj.catId, + tyinfo->dobj.dumpId, + ARCHIVE_OPTS(.tag = tyinfo->dobj.name, + .namespace = tyinfo->dobj.namespace->dobj.name, + .owner = tyinfo->rolname, .description = "TYPE STORAGE OPTIONS", .section = SECTION_PRE_DATA, .createStmt = q->data)); destroyPQExpBuffer(q); - destroyPQExpBuffer(delq); } /* @@ -21030,7 +20944,6 @@ addBoundaryDependencies(DumpableObject **dobjs, int numObjs, case DO_TRANSFORM: case DO_BLOB: case DO_EXTPROTOCOL: - case DO_TYPE_STORAGE_OPTIONS: case DO_BINARY_UPGRADE: /* Pre-data objects: must come before the pre-data boundary */ addObjectDependency(preDataBound, dobj->dumpId); diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index f437c62f6b3..81fa36289b3 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -77,7 +77,6 @@ typedef enum DO_BLOB, DO_BLOB_DATA, DO_EXTPROTOCOL, - DO_TYPE_STORAGE_OPTIONS, DO_PRE_DATA_BOUNDARY, DO_POST_DATA_BOUNDARY, DO_EVENT_TRIGGER, @@ -178,12 +177,12 @@ typedef struct _typeInfo * result of format_type(), which will be quoted if needed, and might be * schema-qualified too. */ - char *ftypname; - char *rolname; /* name of owner, or empty string */ - char *typacl; - char *rtypacl; - char *inittypacl; - char *initrtypacl; + char *ftypname; + char *rolname; /* name of owner, or empty string */ + char *typacl; + char *rtypacl; + char *inittypacl; + char *initrtypacl; Oid typelem; Oid typrelid; char typrelkind; /* 'r', 'v', 'c', etc */ @@ -196,24 +195,10 @@ typedef struct _typeInfo /* If it's a domain, we store links to its constraints here: */ int nDomChecks; struct _constraintInfo *domChecks; + char *typstorage; /* GPDB: store the type's encoding clause */ } TypeInfo; -typedef struct _typeStorageOptions -{ - DumpableObject dobj; - - /* - * Note: dobj.name is the pg_type.typname entry. format_type() might - * produce something different than typname - */ - char *typnamespace; - char *typoptions; /* storage options */ - char *rolname; /* name of owner, or empty string */ -} TypeStorageOptions; - - - typedef struct _shellTypeInfo { DumpableObject dobj; @@ -779,7 +764,6 @@ extern void getPublicationTables(Archive *fout, TableInfo tblinfo[], extern void getSubscriptions(Archive *fout); /* START MPP ADDITION */ -extern TypeStorageOptions *getTypeStorageOptions(Archive *fout, int *numTypes); extern ExtProtInfo *getExtProtocols(Archive *fout, int *numExtProtocols); extern BinaryUpgradeInfo *getBinaryUpgradeObjects(void); diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c index 4e3244ed1f7..c35a6da1f23 100644 --- a/src/bin/pg_dump/pg_dump_sort.c +++ b/src/bin/pg_dump/pg_dump_sort.c @@ -138,7 +138,6 @@ static const int dbObjectTypePriority[] = 21, /* DO_BLOB */ 25, /* DO_BLOB_DATA */ 8, /* DO_EXTPROTOCOL */ - 21, /* DO_TYPE_STORAGE_OPTIONS */ 1, /* DO_BINARY_UPGRADE */ 22, /* DO_PRE_DATA_BOUNDARY */ 26, /* DO_POST_DATA_BOUNDARY */ @@ -1287,11 +1286,6 @@ describeDumpableObject(DumpableObject *obj, char *buf, int bufsize) "TYPE %s (ID %d OID %u)", obj->name, obj->dumpId, obj->catId.oid); return; - case DO_TYPE_STORAGE_OPTIONS: - snprintf(buf, bufsize, - "TYPE STORAGE OPTIONS FOR TYPE %s.%s (ID %d OID %u) OPTIONS %s", - ((TypeStorageOptions *)obj)->typnamespace, obj->name, obj->dumpId, obj->catId.oid, ((TypeStorageOptions *)obj)->typoptions); - return; case DO_SHELL_TYPE: snprintf(buf, bufsize, "SHELL TYPE %s (ID %d OID %u)", diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index 07941190b6a..bd0e6c3d4d8 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -2022,6 +2022,16 @@ unlike => { exclude_dump_test_schema => 1, }, }, + 'ALTER TYPE dump_test.int42 SET DEFAULT ENCODING' => { + create_order => 43, + create_sql => 'ALTER TYPE dump_test.int42 SET DEFAULT ENCODING + (compresstype=rle_type, blocksize=8192, compresslevel=4);', + regexp => qr/^\QALTER TYPE dump_test.int42 SET DEFAULT ENCODING (compresstype=rle_type, blocksize=8192, compresslevel=4);\E/m, + like => + { %full_runs, %dump_test_schema_runs, section_pre_data => 1, }, + unlike => { exclude_dump_test_schema => 1, }, + }, + 'CREATE FOREIGN DATA WRAPPER dummy' => { create_order => 35, create_sql => 'CREATE FOREIGN DATA WRAPPER dummy;', From 4c3c8aa83e23a652c2686a951132ac9f3ce81159 Mon Sep 17 00:00:00 2001 From: Paul Guo Date: Thu, 7 Jan 2021 09:03:57 +0800 Subject: [PATCH 229/260] Add argument --next-gxid in pg_resetwal to support next-gxid reset. Reviewed-by: Gang Xiong --- src/bin/pg_resetwal/pg_resetwal.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c index fb91d269e4b..7b660a75e49 100644 --- a/src/bin/pg_resetwal/pg_resetwal.c +++ b/src/bin/pg_resetwal/pg_resetwal.c @@ -564,6 +564,9 @@ main(int argc, char *argv[]) FullTransactionIdFromEpochAndXid(EpochFromFullTransactionId(ControlFile.checkPointCopy.nextXid), set_xid); + if (set_gxid != 0) + ControlFile.checkPointCopy.nextGxid = set_gxid; + if (set_oldest_commit_ts_xid != 0) ControlFile.checkPointCopy.oldestCommitTsXid = set_oldest_commit_ts_xid; if (set_newest_commit_ts_xid != 0) From 8b5d86894fcbbec4f2628c404b4d2b96ccbc4ae1 Mon Sep 17 00:00:00 2001 From: liushengsong Date: Fri, 28 Nov 2025 17:54:50 +0800 Subject: [PATCH 230/260] Fix: fix pg_upgrade and pg_dump for upgrade 1. Add database type and version to pg_upgrade and pg_dump to distinguish different catalogs. 2. Fixed serveral issues encountered when using pg_dump and pg_upgrade. --- src/backend/utils/adt/pg_upgrade_support.c | 14 +++++ src/bin/pg_dump/pg_backup.h | 14 +++++ src/bin/pg_dump/pg_backup_db.c | 27 ++++++++ src/bin/pg_dump/pg_dump.c | 13 ++-- src/bin/pg_dump/pg_dumpall.c | 6 ++ src/bin/pg_upgrade/check.c | 4 +- src/bin/pg_upgrade/controldata.c | 2 +- src/bin/pg_upgrade/exec.c | 7 ++- src/bin/pg_upgrade/greenplum/check_gp.c | 8 +++ src/bin/pg_upgrade/info.c | 8 ++- src/bin/pg_upgrade/pg_upgrade.c | 72 ++++++++++++++++++++++ src/bin/pg_upgrade/pg_upgrade.h | 14 +++++ src/bin/pg_upgrade/server.c | 2 +- src/bin/pg_upgrade/tablespace.c | 5 +- src/bin/pg_upgrade/version.c | 8 ++- src/include/catalog/pg_proc.dat | 4 ++ 16 files changed, 192 insertions(+), 16 deletions(-) diff --git a/src/backend/utils/adt/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c index 38347caa516..5d99e1346f3 100644 --- a/src/backend/utils/adt/pg_upgrade_support.c +++ b/src/backend/utils/adt/pg_upgrade_support.c @@ -20,6 +20,7 @@ #include "catalog/pg_class.h" #include "catalog/pg_enum.h" #include "catalog/pg_namespace.h" +#include "catalog/pg_tablespace.h" #include "catalog/pg_type.h" #include "cdb/cdbvars.h" #include "commands/extension.h" @@ -38,6 +39,19 @@ do { \ errmsg("function can only be called when server is in binary upgrade mode"))); \ } while (0) +Datum +binary_upgrade_set_next_pg_tablespace_oid(PG_FUNCTION_ARGS) +{ + Oid tablespaceoid = PG_GETARG_OID(0); + char *tablespacename = GET_STR(PG_GETARG_TEXT_P(1)); + + CHECK_IS_BINARY_UPGRADE; + AddPreassignedOidFromBinaryUpgrade(tablespaceoid, TableSpaceRelationId, tablespacename, + InvalidOid, InvalidOid, InvalidOid); + + PG_RETURN_VOID(); +} + Datum binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS) { diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h index df7470feb2d..e7f8140fb24 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -184,6 +184,18 @@ typedef struct _dumpOptions int do_nothing; } DumpOptions; + +typedef enum +{ + Greenplum, + Cloudberry +} DatabaseType; + +typedef struct +{ + DatabaseType type; + int version; +} DatabaseVersion; /* * We may want to have some more user-readable data, but in the mean * time this gives us some abstraction and type checking. @@ -216,6 +228,8 @@ typedef struct Archive bool exit_on_error; /* whether to exit on SQL errors... */ int n_errors; /* number of errors (if no die) */ + DatabaseVersion version; + /* The rest is private */ } Archive; diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c index e59cf998dec..967e35ec7f2 100644 --- a/src/bin/pg_dump/pg_backup_db.c +++ b/src/bin/pg_dump/pg_backup_db.c @@ -35,6 +35,10 @@ _check_database_version(ArchiveHandle *AH) const char *remoteversion_str; int remoteversion; PGresult *res; + char *version; + char dbstring[1024]; + char dbstring2[1024]; + int v1; remoteversion_str = PQparameterStatus(AH->connection, "server_version"); remoteversion = PQserverVersion(AH->connection); @@ -68,6 +72,29 @@ _check_database_version(ArchiveHandle *AH) } else AH->public.isStandby = false; + + res = ExecuteSqlQueryForSingleRow((Archive *) AH, "SELECT version()"); + + version = PQgetvalue(res, 0, 0); + + if(sscanf(version, "%*[^(](%s %s %d.%*d.%*d-%*[^)])", dbstring, dbstring2, &v1) != 3) + pg_log_error("could not get version output from select version();\n"); + + if (strcasecmp("Greenplum", dbstring) == 0 && strcasecmp("Database", dbstring2) == 0) + { + AH->public.version.type = Greenplum; + AH->public.version.version = v1; + + } else if((strcasecmp("Cloudberry", dbstring) == 0 && strcasecmp("Database", dbstring2) == 0) + || (strcasecmp("Apache", dbstring) == 0 && strcasecmp("Cloudberry", dbstring2) == 0)) + { + AH->public.version.type = Cloudberry; + AH->public.version.version = v1; + } + else + pg_log_error("could not upgrade from non Greenplum/Cloudberry version: %s %s\n", dbstring, dbstring2); + + PQclear(res); } /* diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 2293bc6d41a..7ea694ce07d 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -7384,7 +7384,7 @@ getTables(Archive *fout, int *numTables) "%s AS ispartition, " "%s AS partbound, " "c.relisivm AS isivm, " - "c.relisdynamic AS isdynamic " + "%s" "FROM pg_class c " "LEFT JOIN pg_depend d ON " "(c.relkind = '%c' AND " @@ -7414,6 +7414,7 @@ getTables(Archive *fout, int *numTables) partkeydef, ispartition, partbound, + (fout->version.type == Cloudberry && fout->version.version >= 2) ? "c.relisdynamic AS isdynamic " : "false AS isdynamic ", RELKIND_SEQUENCE, RELKIND_PARTITIONED_TABLE, RELKIND_RELATION, RELKIND_SEQUENCE, @@ -15596,18 +15597,18 @@ dumpAgg(Archive *fout, const AggInfo *agginfo) if (fout->remoteVersion >= 110000) appendPQExpBufferStr(query, "aggfinalmodify,\n" - "aggmfinalmodify\n"); + "aggmfinalmodify,\n"); else appendPQExpBufferStr(query, "'0' AS aggfinalmodify,\n" - "'0' AS aggmfinalmodify\n"); + "'0' AS aggmfinalmodify,\n"); - if (fout->remoteVersion >= 140000) + if (fout->remoteVersion >= 140000 && fout->version.type == Cloudberry && fout->version.version >= 2) appendPQExpBufferStr(query, - "aggrepsafeexec,\n"); + "aggrepsafeexec\n"); else appendPQExpBufferStr(query, - "false AS aggrepsafeexec,\n"); + "false AS aggrepsafeexec\n"); appendPQExpBuffer(query, "FROM pg_catalog.pg_aggregate a, pg_catalog.pg_proc p " diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index 73310951b54..b193448d2a4 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -1759,6 +1759,12 @@ dumpTablespaces(PGconn *conn) /* needed for buildACLCommands() */ fspcname = pg_strdup(fmtId(spcname)); + if (binary_upgrade) + { + appendPQExpBufferStr(buf, "\n-- For binary upgrade, must preserve pg_tablespace oid\n"); + appendPQExpBuffer(buf, "SELECT pg_catalog.binary_upgrade_set_next_pg_tablespace_oid('%u'::pg_catalog.oid, '%s'::text);\n", spcoid, spcname); + } + appendPQExpBuffer(buf, "CREATE TABLESPACE %s", spcname); appendPQExpBuffer(buf, " OWNER %s", fmtId(spcowner)); diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c index 1cf10dace16..d0905f3d588 100644 --- a/src/bin/pg_upgrade/check.c +++ b/src/bin/pg_upgrade/check.c @@ -576,7 +576,7 @@ check_for_new_tablespace_dir(ClusterInfo *new_cluster) os_info.old_tablespaces[tblnum], new_cluster->tablespace_suffix); - if (stat(new_tablespace_dir, &statbuf) == 0 || errno != ENOENT) + if (is_greenplum_dispatcher_mode() && (stat(new_tablespace_dir, &statbuf) == 0 || errno != ENOENT)) gp_fatal_log("new cluster tablespace directory already exists: \"%s\"\n", new_tablespace_dir); } @@ -1598,6 +1598,8 @@ check_for_cluster_key_failure(ClusterInfo *cluster) { struct stat buffer; + prep_status("Checking for presence of pg_cryptokeys"); + if (stat (KMGR_DIR_PID, &buffer) == 0) { if (cluster == &old_cluster) diff --git a/src/bin/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c index 78749e9d310..2b300819678 100644 --- a/src/bin/pg_upgrade/controldata.c +++ b/src/bin/pg_upgrade/controldata.c @@ -555,7 +555,7 @@ get_control_data(ClusterInfo *cluster, bool live_check) cluster->controldata.data_checksum_version = str2uint(p); got_data_checksum_version = true; } - else if ((p = strstr(bufin, "Cluster file encryption method:")) != NULL) + else if ((p = strstr(bufin, "File encryption method:")) != NULL) { p = strchr(p, ':'); diff --git a/src/bin/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c index 09faaf8d096..81b1aef91c4 100644 --- a/src/bin/pg_upgrade/exec.c +++ b/src/bin/pg_upgrade/exec.c @@ -52,11 +52,12 @@ get_bin_version(ClusterInfo *cluster) pclose(output); - if (sscanf(cmd_output, "%*s (%s %s) %d.%d", dbstring, dbstring2, &v1, &v2) < 1) + if (sscanf(cmd_output, "%*s (%s %[^)]) %d.%d", dbstring, dbstring2, &v1, &v2) != 4) pg_fatal("could not get pg_ctl version output from %s\n", cmd); - if ((strcmp("Greenplum", dbstring) == 0 && strcmp("Database", dbstring2) == 0) \ - || (strcmp("Apache", dbstring2) == 0 && strcmp("Cloudberry", dbstring2) == 0)) + if (!((strcmp("Greenplum", dbstring) == 0 && strcmp("Database", dbstring2) == 0) \ + || (strcmp("Cloudberry", dbstring) == 0 && strcmp("Database", dbstring2) == 0) + || (strcmp("Apache", dbstring) == 0 && strcmp("Cloudberry", dbstring2) == 0))) pg_fatal("could not upgrade from non Greenplum/Cloudberry version: %s %s\n", dbstring, dbstring2); if (v1 < 10) diff --git a/src/bin/pg_upgrade/greenplum/check_gp.c b/src/bin/pg_upgrade/greenplum/check_gp.c index 7b95841c097..d9893fab887 100644 --- a/src/bin/pg_upgrade/greenplum/check_gp.c +++ b/src/bin/pg_upgrade/greenplum/check_gp.c @@ -665,6 +665,14 @@ check_for_plpython2_dependent_functions(ClusterInfo *cluster) char output_path[MAXPGPATH]; bool found = false; + + if (cluster->version.type == Cloudberry) + { + prep_status("Skip checking for plpython2 functions, CBDB use plpython3"); + check_ok(); + return ; + } + prep_status("Checking for functions dependent on plpython2"); snprintf(output_path, sizeof(output_path), "%s/%s", diff --git a/src/bin/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c index 15372af5991..da2f3cb9e38 100644 --- a/src/bin/pg_upgrade/info.c +++ b/src/bin/pg_upgrade/info.c @@ -119,9 +119,15 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db, * Verify that rels of same OID have same name. The namespace name * should always match, but the relname might not match for TOAST * tables (and, therefore, their indexes). + * + * XXX GPDB: for TOAST tables, don't insist on a match at all + * yet; there are other ways for us to get mismatched names. Ideally + * this will go away eventually. */ if (strcmp(old_rel->nspname, new_rel->nspname) != 0 || - strcmp(old_rel->relname, new_rel->relname) != 0) + (strcmp(old_rel->relname, new_rel->relname) != 0 && + (/* GET_MAJOR_VERSION(old_cluster.major_version) >= 900 || */ + strcmp(old_rel->nspname, "pg_toast") != 0))) { pg_log(PG_WARNING, "Relation names for OID %u in database \"%s\" do not match: " "old name \"%s.%s\", new name \"%s.%s\"\n", diff --git a/src/bin/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c index eee38da194f..054d1b07c29 100644 --- a/src/bin/pg_upgrade/pg_upgrade.c +++ b/src/bin/pg_upgrade/pg_upgrade.c @@ -59,6 +59,7 @@ static void copy_xact_xlog_xid(void); static void set_frozenxids(bool minmxid_only); static void make_outputdirs(char *pgdata); static void setup(char *argv0, bool *live_check); +static void get_cluster_version(ClusterInfo *cluster); static void copy_subdir_files(const char *old_subdir, const char *new_subdir); @@ -170,6 +171,9 @@ main(int argc, char **argv) umask(pg_mode_mask); } + get_cluster_version(&old_cluster); + get_cluster_version(&new_cluster); + check_and_dump_old_cluster(live_check, &sequence_script_file_name); @@ -304,6 +308,74 @@ main(int argc, char **argv) return 0; } + +void +get_cluster_version(ClusterInfo *cluster) +{ + PGconn *conn; + PGresult *res; + char query[QUERY_ALLOC]; + char *version; + int i_version; + int ntups; + int dbid; + int i_dbid; + char dbstring[MAX_STRING]; + char dbstring2[MAX_STRING]; + int v1; + + start_postmaster(cluster, false); + + conn = connectToServer(cluster, "template1"); + + snprintf(query, sizeof(query), "SELECT version()"); + + res = executeQueryOrDie(conn, "%s", query); + + i_version = PQfnumber(res, "version"); + + ntups = PQntuples(res); + Assert(ntups == 1); + + version = PQgetvalue(res, 0, i_version); + + if(sscanf(version, "%*[^(](%s %s %d.%*d.%*d-%*[^)])", dbstring, dbstring2, &v1) != 3) + pg_fatal("could not get version output from select version();\n"); + + if (strcasecmp("Greenplum", dbstring) == 0 && strcasecmp("Database", dbstring2) == 0) + { + cluster->version.type = Greenplum; + cluster->version.version = v1; + + } else if((strcasecmp("Cloudberry", dbstring) == 0 && strcasecmp("Database", dbstring2) == 0) + || (strcasecmp("Apache", dbstring) == 0 && strcasecmp("Cloudberry", dbstring2) == 0)) + { + cluster->version.type = Cloudberry; + cluster->version.version = v1; + } + else + pg_fatal("could not upgrade from non Greenplum/Cloudberry version: %s %s\n", dbstring, dbstring2); + + res = executeQueryOrDie(conn, "%s", "show gp_dbid;"); + + i_dbid = PQfnumber(res, "gp_dbid"); + + ntups = PQntuples(res); + Assert(ntups == 1); + + dbid = atoi(PQgetvalue(res, 0, i_dbid)); + + cluster->dbid = dbid; + + PQclear(res); + + PQfinish(conn); + + stop_postmaster(cluster); + + return; +} + #ifdef WIN32 typedef BOOL(WINAPI * __CreateRestrictedToken) (HANDLE, DWORD, DWORD, PSID_AND_ATTRIBUTES, DWORD, PLUID_AND_ATTRIBUTES, DWORD, PSID_AND_ATTRIBUTES, PHANDLE); diff --git a/src/bin/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h index 1ab50c4f830..9b1775e5435 100644 --- a/src/bin/pg_upgrade/pg_upgrade.h +++ b/src/bin/pg_upgrade/pg_upgrade.h @@ -351,6 +351,18 @@ typedef enum typedef long pgpid_t; +typedef enum +{ + Greenplum, + Cloudberry +} DatabaseType; + +typedef struct +{ + DatabaseType type; + int version; +} DatabaseVersion; + /* * cluster @@ -373,6 +385,8 @@ typedef struct char major_version_str[64]; /* string PG_VERSION of cluster */ uint32 bin_version; /* version returned from pg_ctl */ const char *tablespace_suffix; /* directory specification */ + DatabaseVersion version; + int32 dbid; } ClusterInfo; diff --git a/src/bin/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c index c2ab2872630..20e12bc455f 100644 --- a/src/bin/pg_upgrade/server.c +++ b/src/bin/pg_upgrade/server.c @@ -260,7 +260,7 @@ start_postmaster(ClusterInfo *cluster, bool report_and_exit_on_error) } snprintf(cmd, sizeof(cmd), - "\"%s/pg_ctl\" -w -l \"%s/%s\" -D \"%s\" -o \"-p %d -c %s -b%s %s %s%s\" start", + "unset LD_LIBRARY_PATH;\"%s/pg_ctl\" -w -l \"%s/%s\" -D \"%s\" -o \"-p %d -c %s -b%s %s %s%s\" start", cluster->bindir, log_opts.logdir, SERVER_LOG_FILE, diff --git a/src/bin/pg_upgrade/tablespace.c b/src/bin/pg_upgrade/tablespace.c index 741a856b6c7..98f4041ecbf 100644 --- a/src/bin/pg_upgrade/tablespace.c +++ b/src/bin/pg_upgrade/tablespace.c @@ -110,7 +110,8 @@ set_tablespace_directory_suffix(ClusterInfo *cluster) /* This cluster has a version-specific subdirectory */ /* The leading slash is needed to start a new directory. */ - cluster->tablespace_suffix = psprintf("/PG_%s_%d", - cluster->major_version_str, + cluster->tablespace_suffix = psprintf("/%d/GPDB_%d_%d", + cluster->dbid, + cluster->version.version, cluster->controldata.cat_ver); } diff --git a/src/bin/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c index 7acee2b563e..02947234ca0 100644 --- a/src/bin/pg_upgrade/version.c +++ b/src/bin/pg_upgrade/version.c @@ -112,6 +112,12 @@ check_for_data_types_usage(ClusterInfo *cluster, FILE *script = NULL; int dbnum; + if (cluster->version.type == Cloudberry && cluster->version.version <= 2) + { + pg_log(PG_REPORT, "Skip checking for data type, current version CBDB do not support recursive query"); + return false; + } + for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PQExpBuffer cte_oids; @@ -547,7 +553,7 @@ report_extension_updates(ClusterInfo *cluster) if (found) { report_status(PG_REPORT, "notice"); - gp_fatal_log( + pg_log(PG_REPORT, "| Your installation contains extensions that should be updated\n" "| with the ALTER EXTENSION command. The file\n" "| %s\n" diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 2a0d5adef40..a47b1ef1615 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -11055,6 +11055,10 @@ proname => 'binary_upgrade_set_next_array_pg_type_oid', provolatile => 'v', proparallel => 'r', prorettype => 'void', proargtypes => 'oid oid text', prosrc => 'binary_upgrade_set_next_array_pg_type_oid' }, +{ oid => '4545', descr => 'for use by pg_upgrade', + proname => 'binary_upgrade_set_next_pg_tablespace_oid', provolatile => 'v', + proparallel => 'r', prorettype => 'void', proargtypes => 'oid text', + prosrc => 'binary_upgrade_set_next_pg_tablespace_oid' }, { oid => '4390', descr => 'for use by pg_upgrade', proname => 'binary_upgrade_set_next_multirange_pg_type_oid', provolatile => 'v', proparallel => 'r', prorettype => 'void', From bc7a5f1811b589e3de8b9317b4ff0b15eecfdaee Mon Sep 17 00:00:00 2001 From: NJrslv <108277031+NJrslv@users.noreply.github.com> Date: Fri, 19 Dec 2025 13:59:01 +0300 Subject: [PATCH 231/260] Fix std::terminate() caused by uncaught exception in ORCA (#1481) ### What does this commit do? This PR fixes a crash, `std::terminate()`, caused by an exception occurring in the catch block of `GPOPTOptimizedPlan()` during `gpopt_context.CloneErrorMsg()`. When `CloneErrorMsg` fails (typically due to OOM), it throws a `gpdb` error, causing `std::terminate()`. Postgres has graceful error handling for errors that occur while processing other errors - even during OOM, the `ErrorContext` has reserved space to preserve error messages. So rethrow the error to postgres handler. ### Test Plan Added a new test to the regression `gporca_fault` test. I added a query that errors out during optimization in orca and as the result falls into `catch` block where another exception in `CloneErrorMsg` is thrown via inject fault. Previously it resulted in the `std::terminate()` call & process crashing. Now catch the exception and let the postgres handle it with reserved buffer to preserve error message. ### Impact Instead of ```sql server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. ``` postgres reports an error (in case of OOM we will see it, not std::terminate with exiting processes): ```sql ERROR: ... ``` --- src/backend/gpopt/CGPOptimizer.cpp | 5 ++-- src/backend/gpopt/utils/COptTasks.cpp | 25 +++++++++++++++++-- src/include/gpopt/utils/COptTasks.h | 2 +- src/test/regress/expected/gporca_faults.out | 25 +++++++++++++++++++ .../expected/gporca_faults_optimizer.out | 21 ++++++++++++++++ src/test/regress/sql/gporca_faults.sql | 12 +++++++++ 6 files changed, 85 insertions(+), 5 deletions(-) diff --git a/src/backend/gpopt/CGPOptimizer.cpp b/src/backend/gpopt/CGPOptimizer.cpp index 11d08f8438a..a0253e44b41 100644 --- a/src/backend/gpopt/CGPOptimizer.cpp +++ b/src/backend/gpopt/CGPOptimizer.cpp @@ -63,8 +63,9 @@ CGPOptimizer::GPOPTOptimizedPlan( GPOS_CATCH_EX(ex) { // clone the error message before context free. + BOOL clone_failed = false; CHAR *serialized_error_msg = - gpopt_context.CloneErrorMsg(MessageContext); + gpopt_context.CloneErrorMsg(MessageContext, &clone_failed); // clean up context gpopt_context.Free(gpopt_context.epinQuery, gpopt_context.epinPlStmt); @@ -72,7 +73,7 @@ CGPOptimizer::GPOPTOptimizedPlan( // we want to use the correct error code for these, in case an application // tries to do something smart with them. - if (GPOS_MATCH_EX(ex, gpdxl::ExmaGPDB, gpdxl::ExmiGPDBError)) + if (clone_failed || GPOS_MATCH_EX(ex, gpdxl::ExmaGPDB, gpdxl::ExmiGPDBError)) { PG_RE_THROW(); } diff --git a/src/backend/gpopt/utils/COptTasks.cpp b/src/backend/gpopt/utils/COptTasks.cpp index dd0e61116d8..6bd93379f0f 100644 --- a/src/backend/gpopt/utils/COptTasks.cpp +++ b/src/backend/gpopt/utils/COptTasks.cpp @@ -162,13 +162,34 @@ SOptContext::Free(SOptContext::EPin input, SOptContext::EPin output) const // //--------------------------------------------------------------------------- CHAR * -SOptContext::CloneErrorMsg(MemoryContext context) const +SOptContext::CloneErrorMsg(MemoryContext context, BOOL *clone_failed) const { + *clone_failed = false; + if (nullptr == context || nullptr == m_error_msg) { return nullptr; } - return gpdb::MemCtxtStrdup(context, m_error_msg); + + CHAR *error_msg; + GPOS_TRY + { +#ifdef FAULT_INJECTOR + if (gpdb::InjectFaultInOptTasks("opt_clone_error_msg") == FaultInjectorTypeSkip) + { + GpdbEreport(ERRCODE_INTERNAL_ERROR, ERROR, "Injected error", nullptr); + } +#endif + error_msg = gpdb::MemCtxtStrdup(context, m_error_msg); + } + GPOS_CATCH_EX(ex) + { + error_msg = nullptr; + *clone_failed = true; + } + GPOS_CATCH_END; + + return error_msg; } diff --git a/src/include/gpopt/utils/COptTasks.h b/src/include/gpopt/utils/COptTasks.h index 3fa5f91216c..bed8f36d51a 100644 --- a/src/include/gpopt/utils/COptTasks.h +++ b/src/include/gpopt/utils/COptTasks.h @@ -107,7 +107,7 @@ struct SOptContext void Free(EPin input, EPin epinOutput) const; // Clone the error message in given context. - CHAR *CloneErrorMsg(struct MemoryContextData *context) const; + CHAR *CloneErrorMsg(struct MemoryContextData *context, BOOL *clone_failed) const; // casting function static SOptContext *Cast(void *ptr); diff --git a/src/test/regress/expected/gporca_faults.out b/src/test/regress/expected/gporca_faults.out index c8e6f7ff557..e60f3b048b7 100644 --- a/src/test/regress/expected/gporca_faults.out +++ b/src/test/regress/expected/gporca_faults.out @@ -70,3 +70,28 @@ SELECT gp_inject_fault('opt_relcache_translator_catalog_access', 'reset', 1); Success: (1 row) +-- Test to check that GPOPTOptimizedPlan() does not cause std::terminate() by throwing an uncaught exception. +CREATE TABLE test_orca_uncaught_exc(a int, b int) DISTRIBUTED RANDOMLY; +-- Since ORCA cannot optimize this query, an exception is generated. We then inject a second exception when the +-- first is caught and verify that it is not propagated further (no std::terminate() is called and backend is alive). +SELECT gp_inject_fault('opt_clone_error_msg', 'skip', 1); + gp_inject_fault +----------------- + Success: +(1 row) + +SELECT sum(distinct a), count(distinct b) FROM test_orca_uncaught_exc; + sum | count +-----+------- + | 0 +(1 row) + +SELECT gp_inject_fault('opt_clone_error_msg', 'reset', 1); + gp_inject_fault +----------------- + Success: +(1 row) + +-- start_ignore +DROP TABLE test_orca_uncaught_exc; +-- end_ignore diff --git a/src/test/regress/expected/gporca_faults_optimizer.out b/src/test/regress/expected/gporca_faults_optimizer.out index 46ca0efe7ad..32b5b317298 100644 --- a/src/test/regress/expected/gporca_faults_optimizer.out +++ b/src/test/regress/expected/gporca_faults_optimizer.out @@ -62,3 +62,24 @@ SELECT gp_inject_fault('opt_relcache_translator_catalog_access', 'reset', 1); Success: (1 row) +-- Test to check that GPOPTOptimizedPlan() does not cause std::terminate() by throwing an uncaught exception. +CREATE TABLE test_orca_uncaught_exc(a int, b int) DISTRIBUTED RANDOMLY; +-- Since ORCA cannot optimize this query, an exception is generated. We then inject a second exception when the +-- first is caught and verify that it is not propagated further (no std::terminate() is called and backend is alive). +SELECT gp_inject_fault('opt_clone_error_msg', 'skip', 1); + gp_inject_fault +----------------- + Success: +(1 row) + +SELECT sum(distinct a), count(distinct b) FROM test_orca_uncaught_exc; +ERROR: Injected error (COptTasks.cpp:180) +SELECT gp_inject_fault('opt_clone_error_msg', 'reset', 1); + gp_inject_fault +----------------- + Success: +(1 row) + +-- start_ignore +DROP TABLE test_orca_uncaught_exc; +-- end_ignore diff --git a/src/test/regress/sql/gporca_faults.sql b/src/test/regress/sql/gporca_faults.sql index c9d1634d724..a1d324ad1da 100644 --- a/src/test/regress/sql/gporca_faults.sql +++ b/src/test/regress/sql/gporca_faults.sql @@ -30,3 +30,15 @@ SELECT * FROM func1_nosql_vol(5), foo; -- The fault should *not* be hit above when optimizer = off, to reset it now. SELECT gp_inject_fault('opt_relcache_translator_catalog_access', 'reset', 1); + +-- Test to check that GPOPTOptimizedPlan() does not cause std::terminate() by throwing an uncaught exception. +CREATE TABLE test_orca_uncaught_exc(a int, b int) DISTRIBUTED RANDOMLY; +-- Since ORCA cannot optimize this query, an exception is generated. We then inject a second exception when the +-- first is caught and verify that it is not propagated further (no std::terminate() is called and backend is alive). +SELECT gp_inject_fault('opt_clone_error_msg', 'skip', 1); +SELECT sum(distinct a), count(distinct b) FROM test_orca_uncaught_exc; +SELECT gp_inject_fault('opt_clone_error_msg', 'reset', 1); + +-- start_ignore +DROP TABLE test_orca_uncaught_exc; +-- end_ignore From 7ffdd36b22a349d5976332a34f34255f90b979df Mon Sep 17 00:00:00 2001 From: reshke Date: Mon, 22 Dec 2025 23:05:24 +0500 Subject: [PATCH 232/260] Backport: Compute aggregate argument types correctly in transformAggregateCall(). (#1500) This pr fixes https://www.postgresql.org/support/security/CVE-2023-5868 in cloudberry https://git.postgresql.org/cgit/postgresql.git/commit/?id=3b0776fde56763c549df35ce9750f3399bc710b2 === transformAggregateCall() captures the datatypes of the aggregate's arguments immediately to construct the Aggref.aggargtypes list. This seems reasonable because the arguments have already been transformed --- but there is an edge case where they haven't been. Specifically, if we have an unknown-type literal in an ANY argument position, nothing will have been done with it earlier. But if we also have DISTINCT, then addTargetToGroupList() converts the literal to "text" type, resulting in the aggargtypes list not matching the actual runtime type of the argument. The end result is that the aggregate tries to interpret a "text" value as being of type "unknown", that is a zero-terminated C string. If the text value contains no zero bytes, this could result in disclosure of server memory following the text literal value. To fix, move the collection of the aggargtypes list to the end of transformAggregateCall(), after DISTINCT has been handled. This requires slightly more code, but not a great deal. Our thanks to Jingzhou Fu for reporting this problem. Security: CVE-2023-5868 --- src/backend/parser/parse_agg.c | 35 ++++++++++++------- src/test/regress/expected/jsonb.out | 7 ++++ src/test/regress/expected/jsonb_optimizer.out | 7 ++++ src/test/regress/sql/jsonb.sql | 3 ++ 4 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index 21709b72ba3..58a4bd68a91 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -115,18 +115,6 @@ transformAggregateCall(ParseState *pstate, Aggref *agg, int save_next_resno; ListCell *lc; - /* - * Before separating the args into direct and aggregated args, make a list - * of their data type OIDs for use later. - */ - foreach(lc, args) - { - Expr *arg = (Expr *) lfirst(lc); - - argtypes = lappend_oid(argtypes, exprType((Node *) arg)); - } - agg->aggargtypes = argtypes; - if (AGGKIND_IS_ORDERED_SET(agg->aggkind)) { /* @@ -238,6 +226,29 @@ transformAggregateCall(ParseState *pstate, Aggref *agg, agg->aggorder = torder; agg->aggdistinct = tdistinct; + /* + * Now build the aggargtypes list with the type OIDs of the direct and + * aggregated args, ignoring any resjunk entries that might have been + * added by ORDER BY/DISTINCT processing. We can't do this earlier + * because said processing can modify some args' data types, in particular + * by resolving previously-unresolved "unknown" literals. + */ + foreach(lc, agg->aggdirectargs) + { + Expr *arg = (Expr *) lfirst(lc); + + argtypes = lappend_oid(argtypes, exprType((Node *) arg)); + } + foreach(lc, tlist) + { + TargetEntry *tle = (TargetEntry *) lfirst(lc); + + if (tle->resjunk) + continue; /* ignore junk */ + argtypes = lappend_oid(argtypes, exprType((Node *) tle->expr)); + } + agg->aggargtypes = argtypes; + check_agglevels_and_constraints(pstate, (Node *) agg); } diff --git a/src/test/regress/expected/jsonb.out b/src/test/regress/expected/jsonb.out index ebb973cb151..635016d4aad 100644 --- a/src/test/regress/expected/jsonb.out +++ b/src/test/regress/expected/jsonb.out @@ -1558,6 +1558,13 @@ SELECT jsonb_object_agg(name, type) FROM foo; INSERT INTO foo VALUES (999999, NULL, 'bar'); SELECT jsonb_object_agg(name, type) FROM foo; ERROR: field name must not be null +-- edge case for parser +SELECT jsonb_object_agg(DISTINCT 'a', 'abc'); + jsonb_object_agg +------------------ + {"a": "abc"} +(1 row) + -- jsonb_object -- empty object, one dimension SELECT jsonb_object('{}'); diff --git a/src/test/regress/expected/jsonb_optimizer.out b/src/test/regress/expected/jsonb_optimizer.out index 6250207107a..1f5510c9982 100644 --- a/src/test/regress/expected/jsonb_optimizer.out +++ b/src/test/regress/expected/jsonb_optimizer.out @@ -1560,6 +1560,13 @@ SELECT jsonb_object_agg(name, type) FROM foo; INSERT INTO foo VALUES (999999, NULL, 'bar'); SELECT jsonb_object_agg(name, type) FROM foo; ERROR: field name must not be null +-- edge case for parser +SELECT jsonb_object_agg(DISTINCT 'a', 'abc'); + jsonb_object_agg +------------------ + {"a": "abc"} +(1 row) + -- jsonb_object -- empty object, one dimension SELECT jsonb_object('{}'); diff --git a/src/test/regress/sql/jsonb.sql b/src/test/regress/sql/jsonb.sql index 40cb055c11e..b1ce452a822 100644 --- a/src/test/regress/sql/jsonb.sql +++ b/src/test/regress/sql/jsonb.sql @@ -397,6 +397,9 @@ SELECT jsonb_object_agg(name, type) FROM foo; INSERT INTO foo VALUES (999999, NULL, 'bar'); SELECT jsonb_object_agg(name, type) FROM foo; +-- edge case for parser +SELECT jsonb_object_agg(DISTINCT 'a', 'abc'); + -- jsonb_object -- empty object, one dimension From e9c2813669855cfebfa5a7449bc8dba9c569f5be Mon Sep 17 00:00:00 2001 From: water32 Date: Tue, 23 Dec 2025 13:52:04 +0800 Subject: [PATCH 233/260] Improve error message when COORDINATOR_DATA_DIRECTORY is unset This commit updates gpstop and gpstart to use shared logic when determining the coordinator data directory. By relying on the common helper, users receive clearer and more actionable error messages when COORDINATOR_DATA_DIRECTORY is unset or invalid, making startup and shutdown failures easier to diagnose. --- gpMgmt/bin/gpstart | 4 +--- gpMgmt/bin/gpstop | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/gpMgmt/bin/gpstart b/gpMgmt/bin/gpstart index 0165c0cc371..bc1f60b6c3d 100755 --- a/gpMgmt/bin/gpstart +++ b/gpMgmt/bin/gpstart @@ -902,9 +902,7 @@ class GpStart: if is_external_fts: if options.fts_hosts is None: - coordinator_data_directory = os.getenv('COORDINATOR_DATA_DIRECTORY') - if coordinator_data_directory is None: - coordinator_data_directory = options.coordinatorDataDirectory + coordinator_data_directory = gp.get_coordinatordatadir() options.fts_hosts = coordinator_data_directory + '/config' + '/fts_host' return GpStart(options.specialMode, options.restricted, diff --git a/gpMgmt/bin/gpstop b/gpMgmt/bin/gpstop index e8e8e3855a9..ab7655597c9 100755 --- a/gpMgmt/bin/gpstop +++ b/gpMgmt/bin/gpstop @@ -959,9 +959,7 @@ class GpStop: if is_external_fts: if options.fts_hosts is None: - coordinator_data_directory = os.getenv('COORDINATOR_DATA_DIRECTORY') - if coordinator_data_directory is None: - coordinator_data_directory = options.coordinatorDataDirectory + coordinator_data_directory = gp.get_coordinatordatadir() options.fts_hosts = coordinator_data_directory + '/config' + '/fts_host' From 060a7533b9399d9f9aba488ee97b2aceab54c620 Mon Sep 17 00:00:00 2001 From: reshke Date: Tue, 23 Dec 2025 12:32:57 +0500 Subject: [PATCH 234/260] Fix `stop_postmaster` call in get_cluster_version. (#1497) stop_postmaster accepts single boolean arg, yet pointer of type ClusterInfo is passed. Remove this, and call stop_postmaster with `false` argument, resulting in smart (not fast) shutdown. Also remove redundant return at the end on void function. Introduced as oversight in e20a488. Fixed with help of coverity report: ``` ** CID 640088: Null pointer dereferences (REVERSE_INULL) /src/bin/pg_upgrade/pg_upgrade.c: 374 in get_cluster_version() _____________________________________________________________________________________________ *** CID 640088: Null pointer dereferences (REVERSE_INULL) /src/bin/pg_upgrade/pg_upgrade.c: 374 in get_cluster_version() 368 cluster->dbid = dbid; 369 370 PQclear(res); 371 372 PQfinish(conn); 373 >>> CID 640088: Null pointer dereferences (REVERSE_INULL) >>> Null-checking "cluster" suggests that it may be null, but it has already been dereferenced on all paths leading to the check. 374 stop_postmaster(cluster); 375 376 return; 377 } 378 379 #ifdef WIN32 ``` --- src/bin/pg_upgrade/pg_upgrade.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/bin/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c index 054d1b07c29..506666acdf1 100644 --- a/src/bin/pg_upgrade/pg_upgrade.c +++ b/src/bin/pg_upgrade/pg_upgrade.c @@ -371,9 +371,7 @@ get_cluster_version(ClusterInfo *cluster) PQfinish(conn); - stop_postmaster(cluster); - - return; + stop_postmaster(false); } #ifdef WIN32 From 37e19472b313bc5b9b7bdb127c94365f7d2bd827 Mon Sep 17 00:00:00 2001 From: reshke Date: Tue, 23 Dec 2025 18:58:46 +0500 Subject: [PATCH 235/260] Backport: Properly NULL-terminate GSS receive buffer on error packet reception (#1498) This pr fixes https://www.postgresql.org/support/security/CVE-2022-41862/ in cloudberry https://git.postgresql.org/cgit/postgresql.git/commit/?id=71c37797d7bd78266146a5829ab62b3687c47295 Original commit message: === pqsecure_open_gss() includes a code path handling error messages with v2-style protocol messages coming from the server. The client-side buffer holding the error message does not force a NULL-termination, with the data of the server getting copied to the errorMessage of the connection. Hence, it would be possible for a server to send an unterminated string and copy arbitrary bytes in the buffer receiving the error message in the client, opening the door to a crash or even data exposure. As at this stage of the authentication process the exchange has not been completed yet, this could be abused by an attacker without Kerberos credentials. Clients that have a valid kerberos cache are vulnerable as libpq opportunistically requests for it except if gssencmode is disabled. Author: Jacob Champion Backpatch-through: 12 Security: CVE-2022-41862 --- src/interfaces/libpq/fe-secure-gssapi.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/interfaces/libpq/fe-secure-gssapi.c b/src/interfaces/libpq/fe-secure-gssapi.c index 7006ed58a12..aeb6e35dbdd 100644 --- a/src/interfaces/libpq/fe-secure-gssapi.c +++ b/src/interfaces/libpq/fe-secure-gssapi.c @@ -585,6 +585,8 @@ pqsecure_open_gss(PGconn *conn) PqGSSRecvLength += ret; + Assert(PqGSSRecvLength < PQ_GSS_RECV_BUFFER_SIZE); + PqGSSRecvBuffer[PqGSSRecvLength] = '\0'; appendPQExpBuffer(&conn->errorMessage, "%s\n", PqGSSRecvBuffer + 1); return PGRES_POLLING_FAILED; From 13c0aca4119fbc02b1e6ea9585c25fb519522945 Mon Sep 17 00:00:00 2001 From: reshke Date: Thu, 25 Dec 2025 08:22:09 +0500 Subject: [PATCH 236/260] Fix pg_rewind fail in TAP tests. (#1502) With --enable-cassert fails in pg_log_generic_v function, in Assert(fmt[strlen(fmt) - 1] != '\n'); Trivially fix removing \n This assertion is introduced cc8d41511721 --- src/bin/pg_rewind/pg_rewind.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c index 71624cea745..2fae1ffc1b0 100644 --- a/src/bin/pg_rewind/pg_rewind.c +++ b/src/bin/pg_rewind/pg_rewind.c @@ -1083,11 +1083,11 @@ get_target_dbid(const char *argv0) if (ret == -1) pg_fatal("The program \"postgres\" is needed by %s but was \n" "not found in the same directory as \"%s\".\n" - "Check your installation.\n", progname, full_path); + "Check your installation.", progname, full_path); else pg_fatal("The program \"postgres\" was found by \"%s\"\n" "but was not the same version as %s.\n" - "Check your installation.\n", full_path, progname); + "Check your installation.`", full_path, progname); } snprintf(cmd, MAXCMDLEN, "\"%s\" -D \"%s\" -C gp_dbid", From e8b9932a4f47e0ee180a8b154d2444dd33c78a21 Mon Sep 17 00:00:00 2001 From: reshke Date: Fri, 26 Dec 2025 01:37:19 +0500 Subject: [PATCH 237/260] Fix and rename --use-unique-keys option and add TAP test (#1508) * Fix and rename --use-unique-keys option and add TAP test Cloudberry has --use-unique-keys options since cc797b9. However, it does not work, at least at current HEAD. Fix that, and also rename option, to better indicate its use case. If user does NOT use this option, pgbenc will create unique index. If use does use this option, pgbench will not. So, rename to --use-non-unique-keys. Found during PG16 kernel rebase. * Update 001_pgbench_with_server.pl --- src/bin/pgbench/pgbench.c | 14 +++++++++++--- src/bin/pgbench/t/001_pgbench_with_server.pl | 13 +++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index cf8dec81eec..e0dfadcf414 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -716,7 +716,7 @@ usage(void) " -q, --quiet quiet logging (one message each 5 seconds)\n" " -s, --scale=NUM scaling factor\n" " --foreign-keys create foreign key constraints between tables\n" - " --use-unique-keys make the indexes that are created non-unique indexes\n" + " --use-non-unique-keys make the indexes that are created non-unique indexes\n" " (default: unique)\n" " --index-tablespace=TABLESPACE\n" " create indexes in the specified tablespace\n" @@ -4382,7 +4382,11 @@ initCreatePKeys(PGconn *con) int i; PQExpBufferData query; - fprintf(stderr, "creating primary keys...\n"); + if (use_unique_key) + fprintf(stderr, "creating primary keys...\n"); + else + fprintf(stderr, "creating non-unique keys...\n"); + initPQExpBuffer(&query); for (i = 0; i < lengthof(DDLINDEXes); i++) @@ -5837,7 +5841,8 @@ main(int argc, char **argv) {"show-script", required_argument, NULL, 10}, {"partitions", required_argument, NULL, 11}, {"partition-method", required_argument, NULL, 12}, - {"use-unique-keys", no_argument, &use_unique_key, 1}, + /* Cloudberry-specific */ + {"use-non-unique-keys", no_argument, NULL, 13}, {NULL, 0, NULL, 0} }; @@ -6217,6 +6222,9 @@ main(int argc, char **argv) exit(1); } break; + case 13: + use_unique_key = 0; + break; default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); diff --git a/src/bin/pgbench/t/001_pgbench_with_server.pl b/src/bin/pgbench/t/001_pgbench_with_server.pl index 796eb57208d..282ccc24aeb 100644 --- a/src/bin/pgbench/t/001_pgbench_with_server.pl +++ b/src/bin/pgbench/t/001_pgbench_with_server.pl @@ -100,6 +100,19 @@ ], 'pgbench --init-steps'); + +# Test interaction of --init-steps with legacy step-selection options +$node->pgbench( + '--initialize --use-non-unique-keys', + 0, + [qr{^$}], + [ + qr{creating tables}, + qr{creating non-unique keys}, + qr{done in \d+\.\d\d s } + ], + 'pgbench --use-non-unique-keys'); + # Run all builtin scripts, for a few transactions each $node->pgbench( '--transactions=5 -Dfoo=bla --client=2 --protocol=simple --builtin=t' From dab9b9c0806a6057ff61377eb6c73287bf89f28e Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Sat, 27 Dec 2025 08:02:32 -0800 Subject: [PATCH 238/260] ORCA: Fix assertion failure for dynamic table scan rewindability Implements EpetRewindability() method for CPhysicalDynamicTableScan to properly handle rewindability enforcement. The missing implementation caused assertion failures in CGroupExpression when validating plan contexts, as the optimizer couldn't determine if rewindability requirements were satisfied. --- .../gpopt/operators/CPhysicalDynamicTableScan.h | 3 +++ .../src/operators/CPhysicalDynamicTableScan.cpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalDynamicTableScan.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalDynamicTableScan.h index 6fa75f7fbe1..94d7435ca05 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalDynamicTableScan.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalDynamicTableScan.h @@ -74,6 +74,9 @@ class CPhysicalDynamicTableScan : public CPhysicalDynamicScan CPartitionPropagationSpec *PppsDerive( CMemoryPool *mp, CExpressionHandle &exprhdl) const override; + // return rewindability property enforcing type for this operator + CEnfdProp::EPropEnforcingType EpetRewindability(CExpressionHandle &, const CEnfdRewindability *) const override; + }; // class CPhysicalDynamicTableScan } // namespace gpopt diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalDynamicTableScan.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalDynamicTableScan.cpp index b768d623963..6b7788a22a2 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalDynamicTableScan.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalDynamicTableScan.cpp @@ -91,4 +91,19 @@ CPhysicalDynamicTableScan::PppsDerive(CMemoryPool *mp, return pps; } + +CEnfdProp::EPropEnforcingType +CPhysicalDynamicTableScan::EpetRewindability(CExpressionHandle &exprhdl, + const CEnfdRewindability *per) const +{ + CRewindabilitySpec *prs = CDrvdPropPlan::Pdpplan(exprhdl.Pdp())->Prs(); + if (per->FCompatible(prs)) + { + // required rewindability is already provided + return CEnfdProp::EpetUnnecessary; + } + + return CEnfdProp::EpetRequired; +} + // EOF From a765a63885d2ded776c74a3b86a8d8067c8a68ea Mon Sep 17 00:00:00 2001 From: reshke Date: Mon, 29 Dec 2025 16:06:34 +0500 Subject: [PATCH 239/260] Fix pg_dump TAP tests. (#1505) Currecntly TAP tests for pg_dump are red. ``` Test Summary Report ------------------- t/002_pg_dump.pl (Wstat: 25088 (exited 98) Tests: 7138 Failed: 98) Failed tests: 112, 327, 542, 972, 1402, 1618, 1834, 1976-1977 1979-1982, 1987-1988, 1993-1995, 2001-2002 2004, 2010, 2013, 2015, 2023, 2032-2033 2043, 2045-2050, 2054, 2063, 2073-2074 2086-2091, 2093-2094, 2101-2104, 2108, 2125 2135, 2155, 2158-2167, 2169-2171, 2180 2182, 2185-2189, 2270, 2915, 3345, 3560 3775, 3990, 4205, 4420, 4635, 4850, 5633-5634 5644-5645, 5680, 5730, 5812, 5819, 5824 5845-5846, 6141, 6786, 7001 Non-zero exit status: 98 t/004_pg_dump_parallel.pl (Wstat: 1024 (exited 4) Tests: 4 Failed: 4) Failed tests: 1-4 Non-zero exit status: 4 t/010_dump_connstr.pl (Wstat: 768 (exited 3) Tests: 14 Failed: 3) Failed tests: 7-9 Non-zero exit status: 3 ``` Issues cause is append only - specific test and parallel dump. Fix first by modifying TAP perl regex. Fix latter by fixing rebase issues with [56b46d3](https://github.com/postgres/postgres/commit/56b46d3) with changes for pg_backup_archiver.c Found during PG16 rebase and cross-validation with main branch and PG upstream. --- src/bin/pg_dump/pg_backup_archiver.c | 37 +--------------------------- src/bin/pg_dump/t/002_pg_dump.pl | 16 ++++++------ 2 files changed, 10 insertions(+), 43 deletions(-) diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 96bd469147a..70131b7af63 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -4935,43 +4935,8 @@ CloneArchive(ArchiveHandle *AH) /* re-establish fixed state */ if (AH->mode == archModeRead) - { - Assert(AH->connection == NULL); - - /* this also sets clone->connection */ - ConnectDatabase((Archive *) clone, &clone->public.ropt->cparams, true, false); - - /* re-establish fixed state */ _doSetFixedOutputState(clone); - } - else - { - PQExpBufferData connstr; - char *pghost; - char *pgport; - char *username; - - Assert(AH->connection != NULL); - - /* - * Even though we are technically accessing the parent's database - * object here, these functions are fine to be called like that - * because all just return a pointer and do not actually send/receive - * any data to/from the database. - */ - initPQExpBuffer(&connstr); - appendPQExpBufferStr(&connstr, "dbname="); - appendConnStrVal(&connstr, PQdb(AH->connection)); - pghost = PQhost(AH->connection); - pgport = PQport(AH->connection); - username = PQuser(AH->connection); - - /* this also sets clone->connection */ - ConnectDatabase((Archive *) clone, &clone->public.ropt->cparams, true, false); - - termPQExpBuffer(&connstr); - /* setupDumpWorker will fix up connection state */ - } + /* in write case, setupDumpWorker will fix up connection state */ /* Let the format-specific code have a chance too */ clone->ClonePtr(clone); diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index bd0e6c3d4d8..5b85ffa49fc 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -2214,20 +2214,22 @@ create_order => 19, create_sql => 'CREATE TABLE dump_test.test_table_ao(a integer, b text) WITH (appendonly = true, compresstype = zlib, compresslevel = 1);', - regexp => qr/^ - \QCREATE TABLE dump_test.test_table_ao (\E\n - \s+\Qa integer,\E\n - \s+\Qb text\E\n - \QWITH (appendonly = true, orientation = column, compresstype = zlib, compresslevel = 1);\E\n/xm, + regexp => qr{^ + \QCREATE TABLE dump_test.test_table_ao (\E + \n\s+\Qa integer,\E + \n\s+\Qb text\E + \n\Q)\E + \n\QWITH (appendonly = true, compresstype=zlib, compresslevel='1');\E + }xm, like => { %full_runs, %dump_test_schema_runs, - only_dump_test_table => 1, section_pre_data => 1, + exclude_test_table => 1, }, unlike => { + only_dump_test_table => 1, exclude_dump_test_schema => 1, - exclude_test_table => 1, }, }, From 4afcaa9de6e6175e0c29d75a6313c0587f458389 Mon Sep 17 00:00:00 2001 From: reshke Date: Tue, 30 Dec 2025 18:09:08 +0500 Subject: [PATCH 240/260] Fix initdb TAP tests. (#1503) Currently initdb TAP tests fails due to number-of-checks assertions. Trivially fix specifying correct number of tests --- src/bin/initdb/t/001_initdb.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/initdb/t/001_initdb.pl b/src/bin/initdb/t/001_initdb.pl index b5f3cd632da..7d3ab3e38cd 100644 --- a/src/bin/initdb/t/001_initdb.pl +++ b/src/bin/initdb/t/001_initdb.pl @@ -11,7 +11,7 @@ use File::stat qw{lstat}; use PostgresNode; use TestLib; -use Test::More tests => 22; +use Test::More tests => 22 + 2; my $tempdir = TestLib::tempdir; my $xlogdir = "$tempdir/pgxlog"; From 289ae4f95ac65947b50f4590f17f689423502f0f Mon Sep 17 00:00:00 2001 From: reshke Date: Tue, 30 Dec 2025 22:24:58 +0500 Subject: [PATCH 241/260] Beautify `UpdateCatalogForStandbyPromotion`. (#1501) Some variable declaration to beginning of function to enforce C90 and long-standing coding practice of PostgreSQL. Also, be tidy, and release memory allocated in GetDatabasePath. This is not a real memory leak, as standby promotion happends only once (until next restart). Per coverity report 529246. --- src/backend/access/transam/xlog.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 034aeb6473b..cff69879aa1 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -6528,6 +6528,7 @@ static void UpdateCatalogForStandbyPromotion(void) { GpRoleValue old_role; + char *fullpath; /* * NOTE: The following initialization logic was borrowed from ftsprobe. */ @@ -6599,8 +6600,6 @@ UpdateCatalogForStandbyPromotion(void) */ RelationCacheInitializePhase2(); - char *fullpath; - /* * In order to access the catalog, we need a database, and a * tablespace; our access to the heap is going to be slightly @@ -6620,6 +6619,7 @@ UpdateCatalogForStandbyPromotion(void) fullpath = GetDatabasePath(MyDatabaseId, MyDatabaseTableSpace); SetDatabasePath(fullpath); + pfree(fullpath); RelationCacheInitializePhase3(); From 71ee3481ffb4130d88d9f307a20633c518cca79d Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Sat, 27 Dec 2025 17:49:43 +0800 Subject: [PATCH 242/260] Fix CI failures due to insufficient disk space This commit fixes the disk space issue in tests by: - Adding Docker volume mounts to expose host directories to containers, add removing some pre-installed tools from host, including: - GitHub Actions tool cache - Android SDK, .NET SDK, Haskell (GHC + GHCup), Swift - PowerShell, Chromium, Miniconda, Azure CLI, and Scala BUild Tool - Cleaning up RPM artifacts and source tarballs after extraction in the test job to reclaim additional space This approach frees ~30G of disk space per job, ensuring sufficient space for build and test operations. --- .github/workflows/build-cloudberry.yml | 107 +++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index 1d529e21b11..76721d395ee 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -428,8 +428,33 @@ jobs: options: >- --user root -h cdw + -v /usr/share:/host_usr_share + -v /usr/local:/host_usr_local + -v /opt:/host_opt steps: + - name: Free Disk Space + if: needs.check-skip.outputs.should_skip != 'true' + run: | + echo "=== Disk space before cleanup ===" + df -h / + + # Remove pre-installed tools from host to free disk space + rm -rf /host_opt/hostedtoolcache || true # GitHub Actions tool cache + rm -rf /host_usr_local/lib/android || true # Android SDK + rm -rf /host_usr_share/dotnet || true # .NET SDK + rm -rf /host_opt/ghc || true # Haskell GHC + rm -rf /host_usr_local/.ghcup || true # Haskell GHCup + rm -rf /host_usr_share/swift || true # Swift + rm -rf /host_usr_local/share/powershell || true # PowerShell + rm -rf /host_usr_local/share/chromium || true # Chromium + rm -rf /host_usr_share/miniconda || true # Miniconda + rm -rf /host_opt/az || true # Azure CLI + rm -rf /host_usr_share/sbt || true # Scala Build Tool + + echo "=== Disk space after cleanup ===" + df -h / + - name: Skip Check if: needs.check-skip.outputs.should_skip == 'true' run: | @@ -707,8 +732,33 @@ jobs: options: >- --user root -h cdw + -v /usr/share:/host_usr_share + -v /usr/local:/host_usr_local + -v /opt:/host_opt steps: + - name: Free Disk Space + if: needs.check-skip.outputs.should_skip != 'true' + run: | + echo "=== Disk space before cleanup ===" + df -h / + + # Remove pre-installed tools from host to free disk space + rm -rf /host_opt/hostedtoolcache || true # GitHub Actions tool cache + rm -rf /host_usr_local/lib/android || true # Android SDK + rm -rf /host_usr_share/dotnet || true # .NET SDK + rm -rf /host_opt/ghc || true # Haskell GHC + rm -rf /host_usr_local/.ghcup || true # Haskell GHCup + rm -rf /host_usr_share/swift || true # Swift + rm -rf /host_usr_local/share/powershell || true # PowerShell + rm -rf /host_usr_local/share/chromium || true # Chromium + rm -rf /host_usr_share/miniconda || true # Miniconda + rm -rf /host_opt/az || true # Azure CLI + rm -rf /host_usr_share/sbt || true # Scala Build Tool + + echo "=== Disk space after cleanup ===" + df -h / + - name: Skip Check if: needs.check-skip.outputs.should_skip == 'true' run: | @@ -898,8 +948,33 @@ jobs: --ulimit core=-1 --cgroupns=host -v /sys/fs/cgroup:/sys/fs/cgroup:rw + -v /usr/share:/host_usr_share + -v /usr/local:/host_usr_local + -v /opt:/host_opt steps: + - name: Free Disk Space + if: needs.check-skip.outputs.should_skip != 'true' + run: | + echo "=== Disk space before cleanup ===" + df -h / + + # Remove pre-installed tools from host to free disk space + rm -rf /host_opt/hostedtoolcache || true # GitHub Actions tool cache + rm -rf /host_usr_local/lib/android || true # Android SDK + rm -rf /host_usr_share/dotnet || true # .NET SDK + rm -rf /host_opt/ghc || true # Haskell GHC + rm -rf /host_usr_local/.ghcup || true # Haskell GHCup + rm -rf /host_usr_share/swift || true # Swift + rm -rf /host_usr_local/share/powershell || true # PowerShell + rm -rf /host_usr_local/share/chromium || true # Chromium + rm -rf /host_usr_share/miniconda || true # Miniconda + rm -rf /host_opt/az || true # Azure CLI + rm -rf /host_usr_share/sbt || true # Scala Build Tool + + echo "=== Disk space after cleanup ===" + df -h / + - name: Skip Check if: needs.check-skip.outputs.should_skip == 'true' run: | @@ -1233,6 +1308,22 @@ jobs: rpm -qi apache-cloudberry-db-incubating } 2>&1 | tee -a build-logs/details/rpm-installation.log + # Clean up downloaded RPM artifacts to free disk space + echo "=== Disk space before RPM cleanup ===" + echo "Human readable:" + df -kh / + echo "Exact KB:" + df -k / + echo "RPM artifacts size:" + du -sh "${GITHUB_WORKSPACE}"/rpm_build_artifacts || true + echo "Cleaning up RPM artifacts to free disk space..." + rm -rf "${GITHUB_WORKSPACE}"/rpm_build_artifacts + echo "=== Disk space after RPM cleanup ===" + echo "Human readable:" + df -kh / + echo "Exact KB:" + df -k / + - name: Extract source tarball if: success() && needs.check-skip.outputs.should_skip != 'true' env: @@ -1258,6 +1349,22 @@ jobs: du -sh "${SRC_DIR}/../cloudberry" } 2>&1 | tee -a build-logs/details/source-extraction.log + # Clean up source tarball to free disk space + echo "=== Disk space before source tarball cleanup ===" + echo "Human readable:" + df -kh / + echo "Exact KB:" + df -k / + echo "Source tarball artifacts size:" + du -sh "${GITHUB_WORKSPACE}"/source_build_artifacts || true + echo "Cleaning up source tarball to free disk space..." + rm -rf "${GITHUB_WORKSPACE}"/source_build_artifacts + echo "=== Disk space after source tarball cleanup ===" + echo "Human readable:" + df -kh / + echo "Exact KB:" + df -k / + - name: Create Apache Cloudberry demo cluster if: success() && needs.check-skip.outputs.should_skip != 'true' env: From 08c40ad6a2200e4baa184825b881f6eb469972d2 Mon Sep 17 00:00:00 2001 From: reshke kirill Date: Sat, 27 Dec 2025 05:51:37 +0000 Subject: [PATCH 243/260] Add more contrib extensions to ic-contrib-check Also fix pgstattuple expected output. --- .github/workflows/build-cloudberry.yml | 11 ++++++++--- .github/workflows/build-deb-cloudberry.yml | 11 ++++++++--- contrib/btree_gist/expected/bit_optimizer.out | 2 +- contrib/btree_gist/expected/bytea_optimizer.out | 2 +- contrib/btree_gist/expected/cash_optimizer.out | 2 +- contrib/btree_gist/expected/char_optimizer.out | 2 +- contrib/btree_gist/expected/date_optimizer.out | 2 +- contrib/btree_gist/expected/enum_optimizer.out | 2 +- contrib/btree_gist/expected/float4_optimizer.out | 2 +- contrib/btree_gist/expected/float8_optimizer.out | 2 +- contrib/btree_gist/expected/inet_optimizer.out | 4 ++-- contrib/btree_gist/expected/int2_optimizer.out | 2 +- contrib/btree_gist/expected/int4_optimizer.out | 2 +- contrib/btree_gist/expected/int8_optimizer.out | 2 +- .../btree_gist/expected/interval_optimizer.out | 4 ++-- .../btree_gist/expected/macaddr8_optimizer.out | 2 +- contrib/btree_gist/expected/macaddr_optimizer.out | 2 +- .../btree_gist/expected/not_equal_optimizer.out | 2 +- contrib/btree_gist/expected/numeric_optimizer.out | 2 +- contrib/btree_gist/expected/text_optimizer.out | 2 +- contrib/btree_gist/expected/time_optimizer.out | 2 +- .../btree_gist/expected/timestamp_optimizer.out | 2 +- .../btree_gist/expected/timestamptz_optimizer.out | 2 +- contrib/btree_gist/expected/varbit_optimizer.out | 2 +- contrib/pgstattuple/expected/pgstattuple.out | 15 +++++++++------ 25 files changed, 49 insertions(+), 36 deletions(-) diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index 76721d395ee..dcad89f30cb 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -289,14 +289,19 @@ jobs: "contrib/amcheck:installcheck", "contrib/citext:installcheck", "contrib/btree_gin:installcheck", + "contrib/btree_gist:installcheck", + "contrib/dblink:installcheck", + "contrib/dict_int:installcheck", + "contrib/dict_xsyn:installcheck", + "contrib/extprotocol:installcheck", "contrib/file_fdw:installcheck", "contrib/formatter_fixedwidth:installcheck", - "contrib/extprotocol:installcheck", - "contrib/dblink:installcheck", + "contrib/hstore:installcheck", + "contrib/indexscan:installcheck", "contrib/pg_trgm:installcheck", "contrib/indexscan:installcheck", - "contrib/hstore:installcheck", "contrib/pgcrypto:installcheck", + "contrib/pgstattuple:installcheck", "contrib/tablefunc:installcheck", "contrib/passwordcheck:installcheck", "contrib/pg_buffercache:installcheck", diff --git a/.github/workflows/build-deb-cloudberry.yml b/.github/workflows/build-deb-cloudberry.yml index 2e87b8aa948..5b4dc549b06 100644 --- a/.github/workflows/build-deb-cloudberry.yml +++ b/.github/workflows/build-deb-cloudberry.yml @@ -228,14 +228,19 @@ jobs: "contrib/amcheck:installcheck", "contrib/citext:installcheck", "contrib/btree_gin:installcheck", + "contrib/btree_gist:installcheck", + "contrib/dblink:installcheck", + "contrib/dict_int:installcheck", + "contrib/dict_xsyn:installcheck", + "contrib/extprotocol:installcheck", "contrib/file_fdw:installcheck", "contrib/formatter_fixedwidth:installcheck", - "contrib/extprotocol:installcheck", - "contrib/dblink:installcheck", + "contrib/hstore:installcheck", + "contrib/indexscan:installcheck", "contrib/pg_trgm:installcheck", "contrib/indexscan:installcheck", - "contrib/hstore:installcheck", "contrib/pgcrypto:installcheck", + "contrib/pgstattuple:installcheck", "contrib/tablefunc:installcheck", "contrib/passwordcheck:installcheck", "contrib/pg_buffercache:installcheck", diff --git a/contrib/btree_gist/expected/bit_optimizer.out b/contrib/btree_gist/expected/bit_optimizer.out index e4eff0ede1f..16ea5206989 100644 --- a/contrib/btree_gist/expected/bit_optimizer.out +++ b/contrib/btree_gist/expected/bit_optimizer.out @@ -74,6 +74,6 @@ SELECT a FROM bittmp WHERE a BETWEEN '1000000' and '1000001'; -> Index Scan using bitidx on bittmp Index Cond: ((a >= '1000000'::"bit") AND (a <= '1000001'::"bit")) Filter: ((a >= '1000000'::"bit") AND (a <= '1000001'::"bit")) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (5 rows) diff --git a/contrib/btree_gist/expected/bytea_optimizer.out b/contrib/btree_gist/expected/bytea_optimizer.out index f5bdcf10d81..9577112dc0b 100644 --- a/contrib/btree_gist/expected/bytea_optimizer.out +++ b/contrib/btree_gist/expected/bytea_optimizer.out @@ -81,7 +81,7 @@ SELECT a FROM byteatmp where a > 'ffa'::bytea; -> Index Scan using byteaidx on byteatmp Index Cond: (a > '\x666661'::bytea) Filter: (a > '\x666661'::bytea) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (5 rows) SELECT a FROM byteatmp where a > 'ffa'::bytea; diff --git a/contrib/btree_gist/expected/cash_optimizer.out b/contrib/btree_gist/expected/cash_optimizer.out index 3eaa66958ea..171dec7e511 100644 --- a/contrib/btree_gist/expected/cash_optimizer.out +++ b/contrib/btree_gist/expected/cash_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3; -> Result -> Gather Motion 3:1 (slice1; segments: 3) -> Seq Scan on moneytmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3; diff --git a/contrib/btree_gist/expected/char_optimizer.out b/contrib/btree_gist/expected/char_optimizer.out index 2b312df8b19..694a197be22 100644 --- a/contrib/btree_gist/expected/char_optimizer.out +++ b/contrib/btree_gist/expected/char_optimizer.out @@ -74,7 +74,7 @@ SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c'; -> Index Scan using charidx on chartmp Index Cond: ((a >= '31a'::bpchar) AND (a <= '31c'::bpchar)) Filter: ((a >= '31a'::bpchar) AND (a <= '31c'::bpchar)) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (5 rows) SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c'; diff --git a/contrib/btree_gist/expected/date_optimizer.out b/contrib/btree_gist/expected/date_optimizer.out index c634639a4bb..a77041f847f 100644 --- a/contrib/btree_gist/expected/date_optimizer.out +++ b/contrib/btree_gist/expected/date_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3; -> Sort Sort Key: ((a <-> '02-13-2001'::date)) -> Seq Scan on datetmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3; diff --git a/contrib/btree_gist/expected/enum_optimizer.out b/contrib/btree_gist/expected/enum_optimizer.out index 4f57069c301..118676d163a 100644 --- a/contrib/btree_gist/expected/enum_optimizer.out +++ b/contrib/btree_gist/expected/enum_optimizer.out @@ -87,6 +87,6 @@ SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow; -> Index Scan using enumidx on enumtmp Index Cond: (a >= 'g'::rainbow) Filter: (a >= 'g'::rainbow) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) diff --git a/contrib/btree_gist/expected/float4_optimizer.out b/contrib/btree_gist/expected/float4_optimizer.out index 94e24a790b4..cc40e9bd1ae 100644 --- a/contrib/btree_gist/expected/float4_optimizer.out +++ b/contrib/btree_gist/expected/float4_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3; -> Sort Sort Key: ((a <-> '-179'::real)) -> Seq Scan on float4tmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3; diff --git a/contrib/btree_gist/expected/float8_optimizer.out b/contrib/btree_gist/expected/float8_optimizer.out index 0a4e25a4af4..1bd96c44d3b 100644 --- a/contrib/btree_gist/expected/float8_optimizer.out +++ b/contrib/btree_gist/expected/float8_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3; -> Sort Sort Key: ((a <-> '-1890'::double precision)) -> Seq Scan on float8tmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3; diff --git a/contrib/btree_gist/expected/inet_optimizer.out b/contrib/btree_gist/expected/inet_optimizer.out index c694bae65e4..e6bff65a2bf 100644 --- a/contrib/btree_gist/expected/inet_optimizer.out +++ b/contrib/btree_gist/expected/inet_optimizer.out @@ -75,7 +75,7 @@ SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet; -> Index Scan using inetidx on inettmp Index Cond: (a = '89.225.196.191'::inet) Filter: (a = '89.225.196.191'::inet) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet; @@ -96,7 +96,7 @@ SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet; -> Index Scan using inettmp_a_a1_idx on inettmp Index Cond: (a = '89.225.196.191'::inet) Filter: (a = '89.225.196.191'::inet) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (6 rows) SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet; diff --git a/contrib/btree_gist/expected/int2_optimizer.out b/contrib/btree_gist/expected/int2_optimizer.out index b659ba51578..fdfc859097b 100644 --- a/contrib/btree_gist/expected/int2_optimizer.out +++ b/contrib/btree_gist/expected/int2_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3; -> Sort Sort Key: ((a <-> '237'::smallint)) -> Seq Scan on int2tmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3; diff --git a/contrib/btree_gist/expected/int4_optimizer.out b/contrib/btree_gist/expected/int4_optimizer.out index ab22e4b0c14..67107e63bfa 100644 --- a/contrib/btree_gist/expected/int4_optimizer.out +++ b/contrib/btree_gist/expected/int4_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3; -> Sort Sort Key: ((a <-> 237)) -> Seq Scan on int4tmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3; diff --git a/contrib/btree_gist/expected/int8_optimizer.out b/contrib/btree_gist/expected/int8_optimizer.out index 1dad0688e22..ba8e21135e8 100644 --- a/contrib/btree_gist/expected/int8_optimizer.out +++ b/contrib/btree_gist/expected/int8_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' -> Sort Sort Key: ((a <-> '464571291354841'::bigint)) -> Seq Scan on int8tmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3; diff --git a/contrib/btree_gist/expected/interval_optimizer.out b/contrib/btree_gist/expected/interval_optimizer.out index 6f80bbb2dae..f5afd17456b 100644 --- a/contrib/btree_gist/expected/interval_optimizer.out +++ b/contrib/btree_gist/expected/interval_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21 -> Sort Sort Key: ((a <-> '@ 199 days 21 hours 21 mins 23 secs'::interval)) -> Seq Scan on intervaltmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3; @@ -104,7 +104,7 @@ SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21 -> Sort Sort Key: ((a <-> '@ 199 days 21 hours 21 mins 23 secs'::interval)) -> Seq Scan on intervaltmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3; diff --git a/contrib/btree_gist/expected/macaddr8_optimizer.out b/contrib/btree_gist/expected/macaddr8_optimizer.out index 5b2ae8caf31..25a84f81383 100644 --- a/contrib/btree_gist/expected/macaddr8_optimizer.out +++ b/contrib/btree_gist/expected/macaddr8_optimizer.out @@ -74,7 +74,7 @@ SELECT * FROM macaddr8tmp WHERE a < '02:03:04:05:06:07'::macaddr8; -> Index Scan using macaddr8idx on macaddr8tmp Index Cond: (a < '02:03:04:ff:fe:05:06:07'::macaddr8) Filter: (a < '02:03:04:ff:fe:05:06:07'::macaddr8) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (5 rows) SELECT * FROM macaddr8tmp WHERE a < '02:03:04:05:06:07'::macaddr8; diff --git a/contrib/btree_gist/expected/macaddr_optimizer.out b/contrib/btree_gist/expected/macaddr_optimizer.out index b5dff8ac830..e5f4e0602f5 100644 --- a/contrib/btree_gist/expected/macaddr_optimizer.out +++ b/contrib/btree_gist/expected/macaddr_optimizer.out @@ -74,7 +74,7 @@ SELECT * FROM macaddrtmp WHERE a < '02:03:04:05:06:07'::macaddr; -> Index Scan using macaddridx on macaddrtmp Index Cond: (a < '02:03:04:05:06:07'::macaddr) Filter: (a < '02:03:04:05:06:07'::macaddr) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (5 rows) SELECT * FROM macaddrtmp WHERE a < '02:03:04:05:06:07'::macaddr; diff --git a/contrib/btree_gist/expected/not_equal_optimizer.out b/contrib/btree_gist/expected/not_equal_optimizer.out index 579f92f0982..e99a1155ea0 100644 --- a/contrib/btree_gist/expected/not_equal_optimizer.out +++ b/contrib/btree_gist/expected/not_equal_optimizer.out @@ -16,7 +16,7 @@ EXPLAIN (COSTS OFF) SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7; Gather Motion 3:1 (slice1; segments: 3) -> Seq Scan on test_ne Filter: ((a <> 'Thu Jan 01 00:00:00 2009'::timestamp without time zone) AND (b <> 10.7)) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (4 rows) SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7; diff --git a/contrib/btree_gist/expected/numeric_optimizer.out b/contrib/btree_gist/expected/numeric_optimizer.out index 3edf30fee0a..41c4996c06f 100644 --- a/contrib/btree_gist/expected/numeric_optimizer.out +++ b/contrib/btree_gist/expected/numeric_optimizer.out @@ -199,7 +199,7 @@ SELECT * FROM numerictmp WHERE a BETWEEN 1 AND 300 ORDER BY a; -> Index Scan using numericidx on numerictmp Index Cond: ((a >= '1'::numeric) AND (a <= '300'::numeric)) Filter: ((a >= '1'::numeric) AND (a <= '300'::numeric)) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (8 rows) SELECT * FROM numerictmp WHERE a BETWEEN 1 AND 300 ORDER BY a; diff --git a/contrib/btree_gist/expected/text_optimizer.out b/contrib/btree_gist/expected/text_optimizer.out index 9651b9d231d..76a2c86337b 100644 --- a/contrib/btree_gist/expected/text_optimizer.out +++ b/contrib/btree_gist/expected/text_optimizer.out @@ -81,7 +81,7 @@ SELECT * FROM texttmp WHERE a BETWEEN '31a' AND '31c'; -> Index Scan using textidx on texttmp Index Cond: ((a >= '31a'::text) AND (a <= '31c'::text)) Filter: ((a >= '31a'::text) AND (a <= '31c'::text)) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (5 rows) SELECT * FROM texttmp WHERE a BETWEEN '31a' AND '31c'; diff --git a/contrib/btree_gist/expected/time_optimizer.out b/contrib/btree_gist/expected/time_optimizer.out index 2005e89bf9f..590ada880b9 100644 --- a/contrib/btree_gist/expected/time_optimizer.out +++ b/contrib/btree_gist/expected/time_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3; -> Sort Sort Key: ((a <-> '10:57:11'::time without time zone)) -> Seq Scan on timetmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3; diff --git a/contrib/btree_gist/expected/timestamp_optimizer.out b/contrib/btree_gist/expected/timestamp_optimizer.out index 296bc3e8ac8..1b8e709fe90 100644 --- a/contrib/btree_gist/expected/timestamp_optimizer.out +++ b/contrib/btree_gist/expected/timestamp_optimizer.out @@ -82,7 +82,7 @@ SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10- -> Sort Sort Key: ((a <-> 'Tue Oct 26 08:55:08 2004'::timestamp without time zone)) -> Seq Scan on timestamptmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-26 08:55:08' LIMIT 3; diff --git a/contrib/btree_gist/expected/timestamptz_optimizer.out b/contrib/btree_gist/expected/timestamptz_optimizer.out index e2cd3dc89cb..2173c5dca35 100644 --- a/contrib/btree_gist/expected/timestamptz_optimizer.out +++ b/contrib/btree_gist/expected/timestamptz_optimizer.out @@ -202,7 +202,7 @@ SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> ' -> Sort Sort Key: ((a <-> 'Tue Dec 18 04:59:54 2018 PST'::timestamp with time zone)) -> Seq Scan on timestamptztmp - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (7 rows) SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3; diff --git a/contrib/btree_gist/expected/varbit_optimizer.out b/contrib/btree_gist/expected/varbit_optimizer.out index f73f5688ab1..98727abe44c 100644 --- a/contrib/btree_gist/expected/varbit_optimizer.out +++ b/contrib/btree_gist/expected/varbit_optimizer.out @@ -74,6 +74,6 @@ SELECT a FROM bittmp WHERE a BETWEEN '1000000' and '1000001'; -> Index Scan using bitidx on bittmp Index Cond: ((a >= '1000000'::"bit") AND (a <= '1000001'::"bit")) Filter: ((a >= '1000000'::"bit") AND (a <= '1000001'::"bit")) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: GPORCA (5 rows) diff --git a/contrib/pgstattuple/expected/pgstattuple.out b/contrib/pgstattuple/expected/pgstattuple.out index 4542d692b55..c8542e75416 100644 --- a/contrib/pgstattuple/expected/pgstattuple.out +++ b/contrib/pgstattuple/expected/pgstattuple.out @@ -152,6 +152,8 @@ select pgstatginindex('test_hashidx'); ERROR: relation "test_hashidx" is not a GIN index -- check that using any of these functions with unsupported relations will fail create table test_partitioned (a int) partition by range (a); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. create index test_partitioned_index on test_partitioned(a); -- these should all fail select pgstattuple('test_partitioned'); @@ -159,9 +161,9 @@ ERROR: "test_partitioned" (partitioned table) is not supported select pgstattuple('test_partitioned_index'); ERROR: "test_partitioned_index" (partitioned index) is not supported select pgstattuple_approx('test_partitioned'); -ERROR: "test_partitioned" is not a table, materialized view, or TOAST table +ERROR: "test_partitioned" is not a table, directory table, materialized view, or TOAST table select pg_relpages('test_partitioned'); -ERROR: "test_partitioned" is not a table, index, materialized view, sequence, or TOAST table +ERROR: "test_partitioned" is not a table, directory table, index, materialized view, sequence, or TOAST table select pgstatindex('test_partitioned'); ERROR: relation "test_partitioned" is not a btree index select pgstatginindex('test_partitioned'); @@ -173,9 +175,9 @@ create view test_view as select 1; select pgstattuple('test_view'); ERROR: "test_view" (view) is not supported select pgstattuple_approx('test_view'); -ERROR: "test_view" is not a table, materialized view, or TOAST table +ERROR: "test_view" is not a table, directory table, materialized view, or TOAST table select pg_relpages('test_view'); -ERROR: "test_view" is not a table, index, materialized view, sequence, or TOAST table +ERROR: "test_view" is not a table, directory table, index, materialized view, sequence, or TOAST table select pgstatindex('test_view'); ERROR: relation "test_view" is not a btree index select pgstatginindex('test_view'); @@ -189,9 +191,9 @@ create foreign table test_foreign_table () server dummy_server; select pgstattuple('test_foreign_table'); ERROR: "test_foreign_table" (foreign table) is not supported select pgstattuple_approx('test_foreign_table'); -ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table +ERROR: "test_foreign_table" is not a table, directory table, materialized view, or TOAST table select pg_relpages('test_foreign_table'); -ERROR: "test_foreign_table" is not a table, index, materialized view, sequence, or TOAST table +ERROR: "test_foreign_table" is not a table, directory table, index, materialized view, sequence, or TOAST table select pgstatindex('test_foreign_table'); ERROR: relation "test_foreign_table" is not a btree index select pgstatginindex('test_foreign_table'); @@ -200,6 +202,7 @@ select pgstathashindex('test_foreign_table'); ERROR: "test_foreign_table" is not an index -- a partition of a partitioned table should work though create table test_partition partition of test_partitioned for values from (1) to (100); +NOTICE: table has parent, setting distribution columns to match parent table select pgstattuple('test_partition'); pgstattuple --------------------- From c1f348aca34c7ceefc1dc4d1e4ee49198acada80 Mon Sep 17 00:00:00 2001 From: zhangyue Date: Thu, 1 Jan 2026 15:49:48 +0800 Subject: [PATCH 244/260] Fix gpconfig for resource group v2 on segment hosts (#1507) The gpcheckresgroupv2impl script failed on segments when running `gpconfig -c gp_resource_manager -v "group-v2"`. Root cause: The validation script tried to connect to localhost:5432 on each host to retrieve gp_resource_group_cgroup_parent. However, segment hosts don't run the master database - causing "Connection refused" errors. Fix: - Retrieve gp_resource_group_cgroup_parent from master database in gpresgroup.py before dispatching validation commands; - Pass the cgroup_parent value to gpcheckresgroupv2impl via command line argument (--cgroup-parent); - Remove database connection logic from gpcheckresgroupv2impl; --- gpMgmt/bin/gpcheckresgroupv2impl | 46 +++++++++----------------------- gpMgmt/bin/gppylib/gpresgroup.py | 30 ++++++++++++++++++++- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/gpMgmt/bin/gpcheckresgroupv2impl b/gpMgmt/bin/gpcheckresgroupv2impl index b71d2562628..e52931f7a1f 100755 --- a/gpMgmt/bin/gpcheckresgroupv2impl +++ b/gpMgmt/bin/gpcheckresgroupv2impl @@ -3,16 +3,9 @@ import os import sys +import argparse from functools import reduce -# Add the gppylib path to sys.path to import database connection modules -try: - from gppylib.db import dbconn - from pg import DatabaseError -except ImportError as err: - sys.exit('Cannot import modules. Please check that you have sourced ' - 'cloudberry-env.sh. Detail: ' + str(err)) - class ValidationException(Exception): def __init__(self, message): @@ -35,10 +28,10 @@ class CgroupValidation(object): class CgroupValidationVersionTwo(CgroupValidation): - def __init__(self): + def __init__(self, cgroup_parent=None): self.mount_point = self.detect_cgroup_mount_point() self.tab = {"r": os.R_OK, "w": os.W_OK, "x": os.X_OK, "f": os.F_OK} - self.cgroup_parent = self.get_cgroup_parent() + self.cgroup_parent = cgroup_parent if cgroup_parent else "gpdb.service" def validate_all(self): """ @@ -71,29 +64,6 @@ class CgroupValidationVersionTwo(CgroupValidation): self.validate_permission(self.cgroup_parent + "/io.max", "rw") - def get_cgroup_parent(self): - """ - Get the cgroup parent directory from the database GUC parameter - gp_resource_group_cgroup_parent. If unable to connect to database - or retrieve the parameter, report error using die function. - """ - try: - dburl = dbconn.DbURL() - - with dbconn.connect(dburl, utility=True) as conn: - # Query the GUC parameter value - sql = "SHOW gp_resource_group_cgroup_parent" - cursor = dbconn.query(conn, sql) - result = cursor.fetchone() - - if result and result[0]: - return result[0] - else: - self.die("failed to retrieve gp_resource_group_cgroup_parent parameter from database") - - except Exception as e: - self.die("failed to retrieve gp_resource_group_cgroup_parent parameter: {}".format(str(e))) - def die(self, msg): raise ValidationException("cgroup is not properly configured: {}".format(msg)) @@ -118,7 +88,15 @@ class CgroupValidationVersionTwo(CgroupValidation): if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Validate cgroup v2 configuration for resource groups') + parser.add_argument('--cgroup-parent', + dest='cgroup_parent', + default=None, + help='The cgroup parent directory name (gp_resource_group_cgroup_parent value)') + + args = parser.parse_args() + try: - CgroupValidationVersionTwo().validate_all() + CgroupValidationVersionTwo(cgroup_parent=args.cgroup_parent).validate_all() except ValidationException as e: exit(e.message) diff --git a/gpMgmt/bin/gppylib/gpresgroup.py b/gpMgmt/bin/gppylib/gpresgroup.py index e66e44e7ffd..7c36659c277 100644 --- a/gpMgmt/bin/gppylib/gpresgroup.py +++ b/gpMgmt/bin/gppylib/gpresgroup.py @@ -8,6 +8,7 @@ from gppylib.commands.gp import * from gppylib.gparray import GpArray from gppylib.gplog import get_default_logger +from gppylib.db import dbconn class GpResGroup(object): @@ -40,13 +41,40 @@ def validate(): @staticmethod def validate_v2(): + """ + Validate cgroup v2 configuration on all hosts. + + This method: + 1. Connects to the master database to retrieve gp_resource_group_cgroup_parent + 2. Passes this value to gpcheckresgroupv2impl on each host via command line + 3. Each host validates its local cgroup filesystem permissions + """ pool = base.WorkerPool() gp_array = GpArray.initFromCatalog(dbconn.DbURL(), utility=True) host_list = list(set(gp_array.get_hostlist(True))) msg = None + # Get cgroup_parent value from master database + cgroup_parent = None + try: + # Connect to master database to get the GUC parameter + master_dburl = dbconn.DbURL() + with dbconn.connect(master_dburl, utility=True) as conn: + sql = "SHOW gp_resource_group_cgroup_parent" + cursor = dbconn.query(conn, sql) + result = cursor.fetchone() + if result and result[0]: + cgroup_parent = result[0] + else: + return "failed to retrieve gp_resource_group_cgroup_parent parameter from master database" + except Exception as e: + return "failed to retrieve gp_resource_group_cgroup_parent parameter: {}".format(str(e)) + + # Build command with cgroup_parent parameter + cmd_str = "gpcheckresgroupv2impl --cgroup-parent '{}'".format(cgroup_parent) + for h in host_list: - cmd = Command(h, "gpcheckresgroupv2impl", REMOTE, h) + cmd = Command(h, cmd_str, REMOTE, h) pool.addCommand(cmd) pool.join() From f4a4a9acfd74742f5fde92c2ccbd4c88aaf55c63 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Fri, 12 Dec 2025 16:15:05 +0800 Subject: [PATCH 245/260] Fix missing shebang in failover shell scripts Add shebang line to failover scripts to fix RPM build warnings. During RPM package build, rpmbuild reports warnings about executable files without shebang lines. This causes the build process to remove the executable bit from these scripts. The following scripts are fixed: - master_check_back.sh - standby_check_back.sh - segment_check_back.sh - segment_all_down.sh - docker_master_check_back.sh - docker_standby_check_back.sh - docker_segment_check_back.sh Use "#!/usr/bin/env bash" for better cross-platform compatibility. See: https://github.com/apache/cloudberry/issues/1445 --- src/bin/gpfts/failover/docker_master_check_back.sh | 1 + src/bin/gpfts/failover/docker_segment_check_back.sh | 2 +- src/bin/gpfts/failover/docker_standby_check_back.sh | 2 +- src/bin/gpfts/failover/master_check_back.sh | 1 + src/bin/gpfts/failover/segment_all_down.sh | 1 + src/bin/gpfts/failover/segment_check_back.sh | 1 + src/bin/gpfts/failover/standby_check_back.sh | 2 +- 7 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/bin/gpfts/failover/docker_master_check_back.sh b/src/bin/gpfts/failover/docker_master_check_back.sh index 9b1ab8806f7..0db97596ac5 100755 --- a/src/bin/gpfts/failover/docker_master_check_back.sh +++ b/src/bin/gpfts/failover/docker_master_check_back.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash if !type gpssh >/dev/null 2>&1; then echo "[FATAL]:- gpssh not exist, script Exits!" diff --git a/src/bin/gpfts/failover/docker_segment_check_back.sh b/src/bin/gpfts/failover/docker_segment_check_back.sh index 2776415b40e..94bb4b3c4da 100755 --- a/src/bin/gpfts/failover/docker_segment_check_back.sh +++ b/src/bin/gpfts/failover/docker_segment_check_back.sh @@ -1,4 +1,4 @@ - +#!/usr/bin/env bash if !type gpssh >/dev/null 2>&1; then echo "[FATAL]:- gpssh not exist, script Exits!" diff --git a/src/bin/gpfts/failover/docker_standby_check_back.sh b/src/bin/gpfts/failover/docker_standby_check_back.sh index 81abd790efb..fe2dce7bca3 100755 --- a/src/bin/gpfts/failover/docker_standby_check_back.sh +++ b/src/bin/gpfts/failover/docker_standby_check_back.sh @@ -1,4 +1,4 @@ - +#!/usr/bin/env bash if !type gpssh >/dev/null 2>&1; then echo "[FATAL]:- gpssh not exist, script Exits!" diff --git a/src/bin/gpfts/failover/master_check_back.sh b/src/bin/gpfts/failover/master_check_back.sh index 9b1ab8806f7..0db97596ac5 100755 --- a/src/bin/gpfts/failover/master_check_back.sh +++ b/src/bin/gpfts/failover/master_check_back.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash if !type gpssh >/dev/null 2>&1; then echo "[FATAL]:- gpssh not exist, script Exits!" diff --git a/src/bin/gpfts/failover/segment_all_down.sh b/src/bin/gpfts/failover/segment_all_down.sh index 954801b923b..1121f54fbbc 100755 --- a/src/bin/gpfts/failover/segment_all_down.sh +++ b/src/bin/gpfts/failover/segment_all_down.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash if !type pg_ctl >/dev/null 2>&1; then echo "[FATAL]:- pg_ctl not exist, script Exits!" diff --git a/src/bin/gpfts/failover/segment_check_back.sh b/src/bin/gpfts/failover/segment_check_back.sh index 91f57d69107..ec55ab64982 100755 --- a/src/bin/gpfts/failover/segment_check_back.sh +++ b/src/bin/gpfts/failover/segment_check_back.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash if !type gprecoverseg >/dev/null 2>&1; then echo "[FATAL]:- gprecoverseg not exist, script Exits!" diff --git a/src/bin/gpfts/failover/standby_check_back.sh b/src/bin/gpfts/failover/standby_check_back.sh index 81abd790efb..fe2dce7bca3 100755 --- a/src/bin/gpfts/failover/standby_check_back.sh +++ b/src/bin/gpfts/failover/standby_check_back.sh @@ -1,4 +1,4 @@ - +#!/usr/bin/env bash if !type gpssh >/dev/null 2>&1; then echo "[FATAL]:- gpssh not exist, script Exits!" From 1b9273b73e91e81d4a91b5b4ee9f65219e38a78d Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Tue, 30 Dec 2025 11:50:10 +0800 Subject: [PATCH 246/260] Fix PAX build failure on GCC 8.x (Rocky Linux 8) 1. Remove explicit -Werror=pessimizing-move flag from CMakeLists.txt. This flag was added in commit e7e07c27a7 to catch pessimizing-move warnings on higher GCC versions, but it breaks compilation on GCC 8.x where this warning option does not exist. The fix is safe because GCC 9+ enables -Wpessimizing-move by default and the existing -Werror flag already converts all warnings to errors. 2. Fix fast_io.cc compatibility issues: - Add missing include for pread() - Define uring_likely macro fallback for older liburing versions See: Issue#1441 --- contrib/pax_storage/CMakeLists.txt | 5 ++++- contrib/pax_storage/src/cpp/catalog/pax_aux_table.cc | 2 +- contrib/pax_storage/src/cpp/comm/fast_io.cc | 11 +++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/contrib/pax_storage/CMakeLists.txt b/contrib/pax_storage/CMakeLists.txt index 5942f3bd913..e45eab560e6 100644 --- a/contrib/pax_storage/CMakeLists.txt +++ b/contrib/pax_storage/CMakeLists.txt @@ -21,7 +21,10 @@ set(CMAKE_CXX_STANDARD 17) set(TOP_DIR ${PROJECT_SOURCE_DIR}/../..) set(CBDB_INCLUDE_DIR ${TOP_DIR}/src/include) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Werror=pessimizing-move -Wno-unused-function -Wno-error=ignored-qualifiers -Wno-error=array-bounds -Wuninitialized -Winit-self -Wstrict-aliasing -Wno-missing-field-initializers -Wno-unused-parameter -Wno-clobbered -Wno-sized-deallocation -g") +# Base CXX flags +# Note: -Wpessimizing-move is enabled by default in GCC 9+ and will be caught by -Werror +# No need to explicitly add -Werror=pessimizing-move (which breaks GCC 8.x compatibility) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-unused-function -Wno-error=ignored-qualifiers -Wno-error=array-bounds -Wuninitialized -Winit-self -Wstrict-aliasing -Wno-missing-field-initializers -Wno-unused-parameter -Wno-clobbered -Wno-sized-deallocation -g") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-unused-parameter -Wno-parameter-name") option(USE_MANIFEST_API "Use manifest API" OFF) diff --git a/contrib/pax_storage/src/cpp/catalog/pax_aux_table.cc b/contrib/pax_storage/src/cpp/catalog/pax_aux_table.cc index baca9efe47d..e655f469bc3 100644 --- a/contrib/pax_storage/src/cpp/catalog/pax_aux_table.cc +++ b/contrib/pax_storage/src/cpp/catalog/pax_aux_table.cc @@ -700,7 +700,7 @@ pax::MicroPartitionMetadata PaxGetMicroPartitionMetadata(Relation rel, paxc::FetchMicroPartitionAuxRow(rel, snapshot, block_id, FetchMicroPartitionAuxRowCallbackWrapper, &ctx); - return std::move(ctx.info); + return ctx.info; } CBDB_WRAP_END; } diff --git a/contrib/pax_storage/src/cpp/comm/fast_io.cc b/contrib/pax_storage/src/cpp/comm/fast_io.cc index 5b9e593def9..7ed96d7a377 100644 --- a/contrib/pax_storage/src/cpp/comm/fast_io.cc +++ b/contrib/pax_storage/src/cpp/comm/fast_io.cc @@ -27,6 +27,17 @@ #include "fast_io.h" +#include // for pread + +// uring_likely may not be defined in older liburing versions +#ifndef uring_likely +#if __GNUC__ >= 3 +#define uring_likely(x) __builtin_expect((x) != 0, 1) +#else +#define uring_likely(x) ((x) != 0) +#endif +#endif + namespace pax { From e9ad9ec977e8936d746924b45365721345d375d4 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Wed, 7 Jan 2026 10:43:02 +0800 Subject: [PATCH 247/260] CI: Add rpm-build and rpmdevtools to Rocky8 image Install rpm-build and rpmdevtools in the Rocky 8 build image, which can be used to build RPM package in the future Rocky 8 scheduled CI workflow. --- devops/deploy/docker/build/rocky8/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/devops/deploy/docker/build/rocky8/Dockerfile b/devops/deploy/docker/build/rocky8/Dockerfile index 320a36081e3..45d6706e593 100644 --- a/devops/deploy/docker/build/rocky8/Dockerfile +++ b/devops/deploy/docker/build/rocky8/Dockerfile @@ -131,6 +131,8 @@ RUN dnf makecache && \ util-linux-ng \ wget \ which \ + rpm-build \ + rpmdevtools \ zlib-devel && \ dnf install -y -d0 --enablerepo=devel \ liburing-devel \ From b48a773c8a3c34517111b23cacb75e8221c51cb6 Mon Sep 17 00:00:00 2001 From: Leonid <63977577+leborchuk@users.noreply.github.com> Date: Tue, 13 Jan 2026 14:38:42 +0300 Subject: [PATCH 248/260] Add liburing2 to dependencies (#1527) Here we added liburing to Docker build file 98320cb But now pax.so also have runtime dependencies to liburing.so.2 xifos@localhost:~$ ldd /usr/cloudberry-db/lib/postgresql/pax.so | grep liburi liburing.so.2 => /lib/x86_64-linux-gnu/liburing.so.2 (0x000072fc7908a000) so we need to install it with cloudberry package Co-authored-by: Leonid Borchuk --- devops/build/packaging/deb/ubuntu22.04/control | 1 + 1 file changed, 1 insertion(+) diff --git a/devops/build/packaging/deb/ubuntu22.04/control b/devops/build/packaging/deb/ubuntu22.04/control index a7e823226ab..70e4eda77d3 100644 --- a/devops/build/packaging/deb/ubuntu22.04/control +++ b/devops/build/packaging/deb/ubuntu22.04/control @@ -67,6 +67,7 @@ Depends: curl, libprotobuf23, libpsl5, libuv1, + liburing2, libxerces-c3.2, locales, lsof, From 9d52e22a16cfa76dfea56046be7cbd99afeebf00 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Thu, 1 Jan 2026 00:36:06 +0800 Subject: [PATCH 249/260] ORCA: Validate hash function existence in IsOpHashJoinable Fix execution-time error when operators have oprcanhash=true but lack actual hash functions. Previously, ORCA would generate HashAgg plans that failed at runtime with "could not find hash function for hash operator" errors. This occurred when operators were marked with the 'hashes' option but only registered in btree operator families, not hash operator families. The fix adds validation using get_op_hash_functions() to ensure hash functions exist before allowing HashAgg plans, moving error detection from execution to planning time. --- src/backend/gpopt/gpdbwrappers.cpp | 19 ++- src/test/regress/expected/gp_hashagg.out | 166 +++++++++++++++++++++++ src/test/regress/sql/gp_hashagg.sql | 138 +++++++++++++++++++ 3 files changed, 322 insertions(+), 1 deletion(-) diff --git a/src/backend/gpopt/gpdbwrappers.cpp b/src/backend/gpopt/gpdbwrappers.cpp index 4e636a0c653..aca95b2cc0a 100644 --- a/src/backend/gpopt/gpdbwrappers.cpp +++ b/src/backend/gpopt/gpdbwrappers.cpp @@ -1613,7 +1613,24 @@ gpdb::IsOpHashJoinable(Oid opno, Oid inputtype) GP_WRAP_START; { /* catalog tables: pg_operator */ - return op_hashjoinable(opno, inputtype); + if (!op_hashjoinable(opno, inputtype)) + return false; + + /* + * Even if oprcanhash is true, we need to verify that hash functions + * actually exist for this operator. This is because oprcanhash can be + * set to true while the operator is only registered in a btree opfamily + * and not in a hash opfamily, which would cause execution-time errors + * when trying to build hash tables. + * + * See get_op_hash_functions() in lsyscache.c which requires operators + * to be registered in a hash opfamily (amopmethod == HASH_AM_OID). + */ + RegProcedure hash_proc; + if (!get_op_hash_functions(opno, &hash_proc, NULL)) + return false; + + return true; } GP_WRAP_END; return false; diff --git a/src/test/regress/expected/gp_hashagg.out b/src/test/regress/expected/gp_hashagg.out index 210ec705398..513aeb09966 100644 --- a/src/test/regress/expected/gp_hashagg.out +++ b/src/test/regress/expected/gp_hashagg.out @@ -274,3 +274,169 @@ EXPLAIN (COSTS OFF, VERBOSE) :qry; (1 row) +drop schema if exists tinc_base_types cascade; +NOTICE: schema "tinc_base_types" does not exist, skipping +create schema tinc_base_types; +set search_path=tinc_base_types; +CREATE FUNCTION int42_in(cstring) + RETURNS int42 + AS 'int4in' + LANGUAGE internal IMMUTABLE STRICT; +NOTICE: type "int42" is not yet defined +DETAIL: Creating a shell type definition. +CREATE FUNCTION int42_out(int42) + RETURNS cstring + AS 'int4out' + LANGUAGE internal IMMUTABLE STRICT; +NOTICE: argument type int42 is only a shell +CREATE TYPE int42 ( + internallength = 4, + input = int42_in, + output = int42_out, + alignment = int4, + default = 42, + passedbyvalue +); +CREATE TABLE aTABLE(k int, a int42); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'k' as the Apache Cloudberry data distribution key for this table. +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +INSERT INTO aTABLE VALUES(1, '21'); +INSERT INTO aTABLE VALUES(2, '22'); +INSERT INTO aTABLE VALUES(3, '23'); +INSERT INTO aTABLE VALUES(4, '24'); +SELECT * FROM aTABLE; + k | a +---+---- + 2 | 22 + 3 | 23 + 4 | 24 + 1 | 21 +(4 rows) + +CREATE OR REPLACE FUNCTION my_lt(int42, int42) +RETURNS boolean AS +'int4lt' +language internal; +CREATE OR REPLACE FUNCTION my_lteq(int42, int42) +RETURNS boolean AS +'int4le' +language internal; +CREATE OR REPLACE FUNCTION my_gt(int42, int42) +RETURNS boolean AS +'int4gt' +language internal; +CREATE OR REPLACE FUNCTION my_gteq(int42, int42) +RETURNS boolean AS +'int4ge' +language internal; +CREATE OR REPLACE FUNCTION my_eq(int42, int42) +RETURNS boolean AS +'int4eq' +language internal; +CREATE OPERATOR < ( + leftarg = int42, + rightarg = int42, + procedure = my_lt, + hashes +); +CREATE OPERATOR <= ( + leftarg = int42, + rightarg = int42, + procedure = my_lteq, + hashes +); +CREATE OPERATOR = ( + leftarg = int42, + rightarg = int42, + procedure = my_eq, + hashes +); +CREATE OPERATOR > ( + leftarg = int42, + rightarg = int42, + procedure = my_gt, + hashes +); +CREATE OPERATOR >= ( + leftarg = int42, + rightarg = int42, + procedure = my_gteq, + hashes +); +CREATE OR REPLACE FUNCTION my_comp_func(int42, int42) +RETURNS int AS +$$ +BEGIN +IF $1 < $2 THEN + return -1; +ELSIF $1 = $2 THEN + return 0; +ELSE + return 1; +END IF; +END; +$$ LANGUAGE PLPGSQL; +CREATE OPERATOR CLASS my_operator_class_comp_type +DEFAULT +FOR TYPE int42 USING btree +AS +OPERATOR 1 <, +OPERATOR 2 <=, +OPERATOR 3 =, +OPERATOR 4 >=, +OPERATOR 5 >, +FUNCTION 1 my_comp_func(int42, int42); +CREATE OPERATOR CLASS my_operator_class_comp_type_hash_lt +DEFAULT +FOR TYPE int42 USING hash +AS +OPERATOR 1 <, +FUNCTION 1 my_comp_func(int42, int42); +ERROR: hash function 1 must have one argument +CREATE OPERATOR CLASS my_operator_class_comp_type_hash_eq +FOR TYPE int42 USING hash +AS +OPERATOR 1 =, +FUNCTION 1 my_comp_func(int42, int42); +ERROR: hash function 1 must have one argument +select * from atable group by a,k; + k | a +---+---- + 1 | 21 + 2 | 22 + 3 | 23 + 4 | 24 +(4 rows) + +-- Before fix: This would fail at runtime with: +-- ERROR: could not find hash function for hash operator XXXXX (execGrouping.c:118) +-- After fix: ORCA should detect missing hash function at planning time +-- and either use GroupAgg or report a clear planning error +SET optimizer_enable_groupagg=off; +select * from atable group by a,k; + k | a +---+---- + 1 | 21 + 2 | 22 + 3 | 23 + 4 | 24 +(4 rows) + +drop schema if exists tinc_base_types cascade; +NOTICE: drop cascades to 16 other objects +DETAIL: drop cascades to function int42_out(int42) +drop cascades to type int42 +drop cascades to function int42_in(cstring) +drop cascades to table atable +drop cascades to function my_lt(int42,int42) +drop cascades to function my_lteq(int42,int42) +drop cascades to function my_gt(int42,int42) +drop cascades to function my_gteq(int42,int42) +drop cascades to function my_eq(int42,int42) +drop cascades to operator <(int42,int42) +drop cascades to operator <=(int42,int42) +drop cascades to operator =(int42,int42) +drop cascades to operator >(int42,int42) +drop cascades to operator >=(int42,int42) +drop cascades to function my_comp_func(int42,int42) +drop cascades to operator family my_operator_class_comp_type for access method btree diff --git a/src/test/regress/sql/gp_hashagg.sql b/src/test/regress/sql/gp_hashagg.sql index 36000de8af8..c9b05c1936a 100644 --- a/src/test/regress/sql/gp_hashagg.sql +++ b/src/test/regress/sql/gp_hashagg.sql @@ -140,3 +140,141 @@ HAVING max(c) = '31' $$ AS qry \gset EXPLAIN (COSTS OFF, VERBOSE) :qry; :qry; + +drop schema if exists tinc_base_types cascade; + +create schema tinc_base_types; +set search_path=tinc_base_types; + + +CREATE FUNCTION int42_in(cstring) + RETURNS int42 + AS 'int4in' + LANGUAGE internal IMMUTABLE STRICT; +CREATE FUNCTION int42_out(int42) + RETURNS cstring + AS 'int4out' + LANGUAGE internal IMMUTABLE STRICT; +CREATE TYPE int42 ( + internallength = 4, + input = int42_in, + output = int42_out, + alignment = int4, + default = 42, + passedbyvalue +); + +CREATE TABLE aTABLE(k int, a int42); +INSERT INTO aTABLE VALUES(1, '21'); +INSERT INTO aTABLE VALUES(2, '22'); +INSERT INTO aTABLE VALUES(3, '23'); +INSERT INTO aTABLE VALUES(4, '24'); +SELECT * FROM aTABLE; + +CREATE OR REPLACE FUNCTION my_lt(int42, int42) +RETURNS boolean AS +'int4lt' +language internal; + +CREATE OR REPLACE FUNCTION my_lteq(int42, int42) +RETURNS boolean AS +'int4le' +language internal; + +CREATE OR REPLACE FUNCTION my_gt(int42, int42) +RETURNS boolean AS +'int4gt' +language internal; + +CREATE OR REPLACE FUNCTION my_gteq(int42, int42) +RETURNS boolean AS +'int4ge' +language internal; + +CREATE OR REPLACE FUNCTION my_eq(int42, int42) +RETURNS boolean AS +'int4eq' +language internal; + +CREATE OPERATOR < ( + leftarg = int42, + rightarg = int42, + procedure = my_lt, + hashes +); + +CREATE OPERATOR <= ( + leftarg = int42, + rightarg = int42, + procedure = my_lteq, + hashes +); + +CREATE OPERATOR = ( + leftarg = int42, + rightarg = int42, + procedure = my_eq, + hashes +); + +CREATE OPERATOR > ( + leftarg = int42, + rightarg = int42, + procedure = my_gt, + hashes +); + +CREATE OPERATOR >= ( + leftarg = int42, + rightarg = int42, + procedure = my_gteq, + hashes +); + +CREATE OR REPLACE FUNCTION my_comp_func(int42, int42) +RETURNS int AS +$$ +BEGIN +IF $1 < $2 THEN + return -1; +ELSIF $1 = $2 THEN + return 0; +ELSE + return 1; +END IF; +END; +$$ LANGUAGE PLPGSQL; + +CREATE OPERATOR CLASS my_operator_class_comp_type +DEFAULT +FOR TYPE int42 USING btree +AS +OPERATOR 1 <, +OPERATOR 2 <=, +OPERATOR 3 =, +OPERATOR 4 >=, +OPERATOR 5 >, +FUNCTION 1 my_comp_func(int42, int42); + +CREATE OPERATOR CLASS my_operator_class_comp_type_hash_lt +DEFAULT +FOR TYPE int42 USING hash +AS +OPERATOR 1 <, +FUNCTION 1 my_comp_func(int42, int42); + +CREATE OPERATOR CLASS my_operator_class_comp_type_hash_eq +FOR TYPE int42 USING hash +AS +OPERATOR 1 =, +FUNCTION 1 my_comp_func(int42, int42); + +select * from atable group by a,k; +-- Before fix: This would fail at runtime with: +-- ERROR: could not find hash function for hash operator XXXXX (execGrouping.c:118) +-- After fix: ORCA should detect missing hash function at planning time +-- and either use GroupAgg or report a clear planning error +SET optimizer_enable_groupagg=off; +select * from atable group by a,k; + +drop schema if exists tinc_base_types cascade; From 16e2adac6965e8c38bd35e1790cc83ceb2946ab4 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Tue, 13 Jan 2026 15:10:25 +0800 Subject: [PATCH 250/260] CI: support free disk space for workflows in Ubuntu Similar to the free disk space actions for workflows in Rocky Linux, this commit adds the same feature to the workflows in Ubuntu. You can see https://github.com/apache/cloudberry/pull/1511 for details. --- .github/workflows/build-deb-cloudberry.yml | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/.github/workflows/build-deb-cloudberry.yml b/.github/workflows/build-deb-cloudberry.yml index 5b4dc549b06..68dc9daeba1 100644 --- a/.github/workflows/build-deb-cloudberry.yml +++ b/.github/workflows/build-deb-cloudberry.yml @@ -355,8 +355,33 @@ jobs: options: >- --user root -h cdw + -v /usr/share:/host_usr_share + -v /usr/local:/host_usr_local + -v /opt:/host_opt steps: + - name: Free Disk Space + if: needs.check-skip.outputs.should_skip != 'true' + run: | + echo "=== Disk space before cleanup ===" + df -h / + + # Remove pre-installed tools from host to free disk space + rm -rf /host_opt/hostedtoolcache || true # GitHub Actions tool cache + rm -rf /host_usr_local/lib/android || true # Android SDK + rm -rf /host_usr_share/dotnet || true # .NET SDK + rm -rf /host_opt/ghc || true # Haskell GHC + rm -rf /host_usr_local/.ghcup || true # Haskell GHCup + rm -rf /host_usr_share/swift || true # Swift + rm -rf /host_usr_local/share/powershell || true # PowerShell + rm -rf /host_usr_local/share/chromium || true # Chromium + rm -rf /host_usr_share/miniconda || true # Miniconda + rm -rf /host_opt/az || true # Azure CLI + rm -rf /host_usr_share/sbt || true # Scala Build Tool + + echo "=== Disk space after cleanup ===" + df -h / + - name: Skip Check if: needs.check-skip.outputs.should_skip == 'true' run: | @@ -646,8 +671,33 @@ jobs: options: >- --user root -h cdw + -v /usr/share:/host_usr_share + -v /usr/local:/host_usr_local + -v /opt:/host_opt steps: + - name: Free Disk Space + if: needs.check-skip.outputs.should_skip != 'true' + run: | + echo "=== Disk space before cleanup ===" + df -h / + + # Remove pre-installed tools from host to free disk space + rm -rf /host_opt/hostedtoolcache || true # GitHub Actions tool cache + rm -rf /host_usr_local/lib/android || true # Android SDK + rm -rf /host_usr_share/dotnet || true # .NET SDK + rm -rf /host_opt/ghc || true # Haskell GHC + rm -rf /host_usr_local/.ghcup || true # Haskell GHCup + rm -rf /host_usr_share/swift || true # Swift + rm -rf /host_usr_local/share/powershell || true # PowerShell + rm -rf /host_usr_local/share/chromium || true # Chromium + rm -rf /host_usr_share/miniconda || true # Miniconda + rm -rf /host_opt/az || true # Azure CLI + rm -rf /host_usr_share/sbt || true # Scala Build Tool + + echo "=== Disk space after cleanup ===" + df -h / + - name: Skip Check if: needs.check-skip.outputs.should_skip == 'true' run: | @@ -834,8 +884,33 @@ jobs: --ulimit core=-1 --cgroupns=host -v /sys/fs/cgroup:/sys/fs/cgroup:rw + -v /usr/share:/host_usr_share + -v /usr/local:/host_usr_local + -v /opt:/host_opt steps: + - name: Free Disk Space + if: needs.check-skip.outputs.should_skip != 'true' + run: | + echo "=== Disk space before cleanup ===" + df -h / + + # Remove pre-installed tools from host to free disk space + rm -rf /host_opt/hostedtoolcache || true # GitHub Actions tool cache + rm -rf /host_usr_local/lib/android || true # Android SDK + rm -rf /host_usr_share/dotnet || true # .NET SDK + rm -rf /host_opt/ghc || true # Haskell GHC + rm -rf /host_usr_local/.ghcup || true # Haskell GHCup + rm -rf /host_usr_share/swift || true # Swift + rm -rf /host_usr_local/share/powershell || true # PowerShell + rm -rf /host_usr_local/share/chromium || true # Chromium + rm -rf /host_usr_share/miniconda || true # Miniconda + rm -rf /host_opt/az || true # Azure CLI + rm -rf /host_usr_share/sbt || true # Scala Build Tool + + echo "=== Disk space after cleanup ===" + df -h / + - name: Skip Check if: needs.check-skip.outputs.should_skip == 'true' run: | From 218f3dabe98c077433df77bd6fad58966cfe459a Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Tue, 13 Jan 2026 18:35:01 +0800 Subject: [PATCH 251/260] ASF: update copyright year to 2026 Update copyright year range from 2024-2025 to 2024-2026 in: * NOTICE file * src/bin/psql/help.c (psql copyright display) This can help maintain compliance with ASF requirements. The changes are mininal and focused only on updating the year in copyright statements to reflect the current year. --- NOTICE | 2 +- src/bin/psql/help.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/NOTICE b/NOTICE index 8003e980d0d..13e79d82ce5 100644 --- a/NOTICE +++ b/NOTICE @@ -1,5 +1,5 @@ Apache Cloudberry (Incubating) -Copyright 2024-2025 The Apache Software Foundation +Copyright 2024-2026 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). \ No newline at end of file diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 385d507ea24..5ebb566c3b9 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -693,7 +693,7 @@ print_copyright(void) { puts( "Apache Cloudberry (Incubating)\n" - "Copyright 2024-2025 The Apache Software Foundation\n\n" + "Copyright 2024-2026 The Apache Software Foundation\n\n" "Greenplum Database version of PostgreSQL Database Management System\n" "Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group\n\n" "Portions Copyright (c) 2014-Present VMware, Inc. or its affiliates.\n\n" From 28991481e821a520c7ad22af79ddb0e9ba12eb97 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Wed, 29 Oct 2025 15:57:57 +0800 Subject: [PATCH 252/260] CI: add NOTICE year and binaries check to Apache RAT check * Add check for current year in NOTICE file copyright statement - Ensure copyright year is up-to-date (eg, 2024-$currentyear) * Add binary files detection in source tree - This check is inspired by Apache MADlib's rat-check script. - Check for common binary extensions (class, jar, tar, tgz, zip, exe, dll, so) * Improve workflow output and reporting - Add structured console output for both checks - Include check results in GitHub Actions job summary --- .github/workflows/apache-rat-audit.yml | 245 ++++++++++++++++++++++--- 1 file changed, 215 insertions(+), 30 deletions(-) diff --git a/.github/workflows/apache-rat-audit.yml b/.github/workflows/apache-rat-audit.yml index 0daaaaaade2..ced9402d17e 100644 --- a/.github/workflows/apache-rat-audit.yml +++ b/.github/workflows/apache-rat-audit.yml @@ -17,10 +17,15 @@ # permissions and limitations under the License. # # -------------------------------------------------------------------- -# Apache Rat Audit Workflow -# Checks if all files comply with Apache licensing requirements -# This workflow is based on the Apache Rat tool, you can run it locally -# using the command: `mvn clean verify -Drat.consoleOutput=true` +# Apache Cloudberry (Incubating) Compliance Workflow +# +# Comprehensive compliance checks for Apache Cloudberry: +# 1. Apache RAT license header validation +# 2. Copyright year verification (NOTICE and psql help.c) +# 3. Binary file presence detection with approved allowlist +# +# Based on Apache Rat tool, run locally with: +# `mvn clean verify -Drat.consoleOutput=true` # -------------------------------------------------------------------- name: Apache Rat License Check @@ -65,14 +70,128 @@ jobs: # Check for build failure if grep -q "\[INFO\] BUILD FAILURE" rat-output.log; then - echo "rat_failed=true" >> $GITHUB_OUTPUT echo "::error::Apache Rat check failed - build failure detected" - exit 1 + echo "RAT_CHECK=fail" >> $GITHUB_ENV + else + echo "RAT_CHECK=pass" >> $GITHUB_ENV + echo "Apache Rat check passed successfully" + fi + + - name: Check copyright years are up-to-date + run: | + echo "Checking copyright years..." + current_year=$(date -u +"%Y") + echo "CURRENT_YEAR=$current_year" >> $GITHUB_ENV + + # Initialize to pass, will be updated if checks fail + echo "NOTICE_CHECK=pass" >> $GITHUB_ENV + echo "PSQL_HELP_CHECK=pass" >> $GITHUB_ENV + + # Check NOTICE file + echo "Checking NOTICE file..." + if ! grep -q "Copyright 2024-$current_year The Apache Software Foundation" NOTICE; then + echo "::error::NOTICE file does not contain the current year ($current_year)" + echo "NOTICE_CHECK=fail" >> $GITHUB_ENV + else + echo "PASS: NOTICE file contains the current year ($current_year)" fi - # If we got here, the check passed - echo "rat_failed=false" >> $GITHUB_OUTPUT - echo "Apache Rat check passed successfully" + # Check psql help.c file + echo "Checking src/bin/psql/help.c..." + if ! grep -q "Copyright 2024-$current_year The Apache Software Foundation" src/bin/psql/help.c; then + echo "::error::src/bin/psql/help.c does not contain the current year ($current_year)" + echo "PSQL_HELP_CHECK=fail" >> $GITHUB_ENV + else + echo "PASS: src/bin/psql/help.c contains the current year ($current_year)" + fi + + # Continue execution even if checks fail + if [ "$NOTICE_CHECK" = "pass" ] && [ "$PSQL_HELP_CHECK" = "pass" ]; then + echo "All copyright year checks passed" + else + echo "Copyright year checks completed with errors" + fi + + - name: Check for binary files + run: | + echo "Checking for binary files..." + echo "Checking extensions: class, jar, tar, tgz, zip, exe, dll, so, gz, bz2" + echo "----------------------------------------------------------------------" + + # Binary file allowlist, see README.apache.md + ALLOWLIST=( + "contrib/formatter_fixedwidth/data/fixedwidth_small_correct.tbl.gz" + "gpMgmt/demo/gppkg/sample-sources.tar.gz" + "src/bin/gpfdist/regress/data/exttab1/nation.tbl.gz" + "src/bin/gpfdist/regress/data/gpfdist2/gz_multi_chunk.tbl.gz" + "src/bin/gpfdist/regress/data/gpfdist2/gz_multi_chunk_2.tbl.gz" + "src/bin/gpfdist/regress/data/gpfdist2/lineitem.tbl.bz2" + "src/bin/gpfdist/regress/data/gpfdist2/lineitem.tbl.gz" + ) + + # Check for specific binary file extensions + binary_extensions="class jar tar tgz zip exe dll so gz bz2" + echo "BINARY_EXTENSIONS=${binary_extensions}" >> $GITHUB_ENV + binary_results="" + binaryfiles_found=false + + for extension in ${binary_extensions}; do + printf "Checking *.%-4s files..." "${extension}" + found=$(find . -name "*.${extension}" -type f || true) + + # Filter out allowed files + if [ -n "$found" ]; then + filtered_found="" + while IFS= read -r file; do + is_allowed=false + for allowlist_file in "${ALLOWLIST[@]}"; do + if [ "$file" = "./$allowlist_file" ]; then + is_allowed=true + echo "Allowed: $file" >> binary_allowlist.txt + break + fi + done + if [ "$is_allowed" = false ]; then + filtered_found+="$file"$'\n' + fi + done <<< "$found" + + filtered_found=$(echo "$filtered_found" | sed '/^$/d') + + if [ -n "$filtered_found" ]; then + echo "FOUND" + echo "::error::${extension} files should not exist" + echo "For ASF compatibility: the source tree should not contain" + echo "binary files as users have a hard time verifying their contents." + echo "Found files:" + echo "$filtered_found" | sed 's/^/ /' + echo "${extension}:${filtered_found}" >> binary_results.txt + binaryfiles_found=true + else + echo "NONE (all allowed)" + echo "${extension}:none" >> binary_results.txt + fi + else + echo "NONE" + echo "${extension}:none" >> binary_results.txt + fi + done + + echo "----------------------------------------------------------------------" + if [ "$binaryfiles_found" = true ]; then + echo "ERROR: Non-allowed binary files were found in the source tree" + echo "BINARY_CHECK=fail" >> $GITHUB_ENV + else + echo "PASS: No non-allowed binary files found" + echo "BINARY_CHECK=pass" >> $GITHUB_ENV + fi + + # Show allowlist summary if any allowed files were found + if [ -f binary_allowlist.txt ]; then + echo "" + echo "Allowed binary files (approved):" + cat binary_allowlist.txt | sed 's/^/ /' + fi - name: Upload Rat check results if: always() @@ -86,14 +205,62 @@ jobs: if: always() run: | { - echo "## Apache Rat Audit Results" + echo "## Apache Cloudberry Compliance Audit Results" echo "- Run Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" echo "" + + # Copyright Year Check Summary + echo "### Copyright Year Checks" + echo "**NOTICE file:**" + if [ "$NOTICE_CHECK" = "pass" ]; then + echo "PASS: Contains current year ($CURRENT_YEAR)" + else + echo "ERROR: Does not contain current year ($CURRENT_YEAR)" + fi + echo "" + echo "**psql help.c:**" + if [ "$PSQL_HELP_CHECK" = "pass" ]; then + echo "PASS: Contains current year ($CURRENT_YEAR)" + else + echo "ERROR: Does not contain current year ($CURRENT_YEAR)" + fi + echo "" + # Binary Files Check Summary + echo "### Binary Files Check" + echo "Checked extensions: \`${BINARY_EXTENSIONS}\`" + echo "" + echo "Results:" + echo "\`\`\`" + if [ -f binary_results.txt ]; then + while IFS=: read -r ext files; do + if [ "$files" = "none" ]; then + echo "PASS: No .${ext} files found" + else + echo "ERROR: Found .${ext} files:" + echo "$files" | sed 's/^/ /' + fi + done < binary_results.txt + fi + echo "\`\`\`" + echo "" + + # Allowlist summary + if [ -f binary_allowlist.txt ]; then + echo "### Allowed Binary Files" + echo "The following binary files are approved for testing purposes:" + echo "You can see [README.apache.md](https://github.com/apache/cloudberry/blob/main/README.apache.md) for details." + echo "\`\`\`" + cat binary_allowlist.txt | sed 's/Allowed: //' + echo "\`\`\`" + echo "" + fi + + # Rat check summary if [[ -f rat-output.log ]]; then # First extract and display summary statistics (only once) if grep -q "Rat check: Summary over all files" rat-output.log; then - echo "#### πŸ“Š License Summary" + echo "### License Header Check" summary_line=$(grep "Rat check: Summary over all files" rat-output.log) echo "\`\`\`" echo "$summary_line" @@ -102,13 +269,13 @@ jobs: fi # Then determine the result status - if grep -q "\[INFO\] BUILD FAILURE" rat-output.log; then - echo "### ❌ Check Failed - License Compliance Issues Detected" + if [ "$RAT_CHECK" = "fail" ]; then + echo "#### Check Failed - License Compliance Issues Detected" echo "" # Extract and display files with unapproved licenses if grep -q "Files with unapproved licenses:" rat-output.log; then - echo "#### 🚫 Files with Unapproved Licenses" + echo "##### Files with Unapproved Licenses" echo "\`\`\`" # Get the line with "Files with unapproved licenses:" and all following lines until the dashed line sed -n '/Files with unapproved licenses:/,/\[INFO\] ------------------------------------------------------------------------/p' rat-output.log | \ @@ -119,7 +286,7 @@ jobs: echo "" fi - echo "πŸ’‘ **How to fix:**" + echo "**How to fix:**" echo "" echo "**For new original files you created:**" echo "- Add the standard Apache License header to each file" @@ -133,16 +300,9 @@ jobs: echo "- Run \`mvn clean verify -Drat.consoleOutput=true\` locally for the full report" echo "- Email dev@cloudberry.apache.org if you have questions about license compatibility" - elif grep -q "\[INFO\] BUILD SUCCESS" rat-output.log; then - echo "### βœ… Check Passed - All Files Comply with Apache License Requirements" - - else - echo "### ⚠️ Indeterminate Result" - echo "Check the uploaded log file for details." + elif [ "$RAT_CHECK" = "pass" ]; then + echo "#### Check Passed - All Files Comply with Apache License Requirements" fi - else - echo "### ⚠️ No Output Log Found" - echo "The rat-output.log file was not generated." fi } >> "$GITHUB_STEP_SUMMARY" @@ -150,13 +310,38 @@ jobs: if: always() shell: bash {0} run: | - if [[ -f rat-output.log ]] && grep -q "\[INFO\] BUILD SUCCESS" rat-output.log; then - echo "βœ… Apache Rat check completed successfully" + # Check overall status of all checks + overall_status=0 + + # Check Apache RAT status + if [ "$RAT_CHECK" = "fail" ]; then + echo "ERROR: Apache Rat check failed" + overall_status=1 + elif [ "$RAT_CHECK" = "pass" ]; then + echo "Apache Rat check passed" + fi + + # Check copyright year status + if [ -n "$NOTICE_CHECK" ] && [ "$NOTICE_CHECK" = "fail" ]; then + echo "ERROR: NOTICE file copyright year check failed" + overall_status=1 + fi + if [ -n "$PSQL_HELP_CHECK" ] && [ "$PSQL_HELP_CHECK" = "fail" ]; then + echo "ERROR: psql help.c copyright year check failed" + overall_status=1 + fi + + # Check binary files status (if this variable exists) + if [ -n "$BINARY_CHECK" ] && [ "$BINARY_CHECK" = "fail" ]; then + echo "ERROR: Binary files check failed" + overall_status=1 + fi + + # Exit with appropriate status + if [ $overall_status -eq 0 ]; then + echo "SUCCESS: All checks passed" exit 0 - elif [[ -f rat-output.log ]] && grep -q "\[INFO\] BUILD FAILURE" rat-output.log; then - echo "❌ Apache Rat check failed" - exit 1 else - echo "⚠️ Apache Rat check status unclear" + echo "FAILURE: One or more checks failed" exit 1 fi \ No newline at end of file From 49d1a3992c5a5bb1a4b95e7864560382f628a9d8 Mon Sep 17 00:00:00 2001 From: reshke Date: Sat, 17 Jan 2026 01:47:39 +0500 Subject: [PATCH 253/260] Use smgr-interface provided create_ao function. (#1534) * Use smgr-interface provided create_ao function. Extensible SMGR is one of usefull Cloudberry features that allow to hijack storage execution flow from extension. smgrcreate_ao however does not follow this memo. Fix that. * Add assertion and comment --- src/backend/cdb/cdbappendonlystoragewrite.c | 2 +- src/backend/storage/smgr/smgr.c | 12 ++++++++++-- src/include/storage/smgr.h | 5 ++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/backend/cdb/cdbappendonlystoragewrite.c b/src/backend/cdb/cdbappendonlystoragewrite.c index 6a17e1cdd0f..bce2d069346 100755 --- a/src/backend/cdb/cdbappendonlystoragewrite.c +++ b/src/backend/cdb/cdbappendonlystoragewrite.c @@ -271,7 +271,7 @@ AppendOnlyStorageWrite_TransactionCreateFile(AppendOnlyStorageWrite *storageWrit // WALREP_FIXME: Pass isRedo == true, so that you don't get an error if it // exists already. That's currently OK, but in the future, other things // might depend on the isRedo flag, like whether to WAL-log the creation. - smgrcreate_ao(*relFileNode, segmentFileNum, true); + smgrcreate_ao(storageWrite->smgrAO, *relFileNode, segmentFileNum, true); /* * Create a WAL record, so that the segfile is also created after crash or diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index a64c7384853..96e531e0798 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -127,6 +127,7 @@ static File AORelOpenSegFileXlog(RelFileNode node, int32 segmentFileNum, int fil static const f_smgr_ao smgrswao[] = { /* regular file */ { + .smgr_create_ao = mdcreate_ao, .smgr_FileClose = FileClose, .smgr_FileDiskSize = FileDiskSize, .smgr_FileTruncate = FileTruncate, @@ -492,9 +493,16 @@ smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo) * already because we are in a WAL replay sequence. */ void -smgrcreate_ao(RelFileNodeBackend rnode, int32 segmentFileNum, bool isRedo) +smgrcreate_ao(const struct f_smgr_ao *smgr, + RelFileNodeBackend rnode, + int32 segmentFileNum, bool isRedo) { - mdcreate_ao(rnode, segmentFileNum, isRedo); + /* If we get there, check that provided smgr structure is sane. + * First off all, outer Appendonly IO utilities should + * pass valid smgr. Also, in-kernel smgr interface implementation + * smgr_create_ao as mdcreate_ao, and extension should define its own. */ + Assert(smgr != NULL && smgr->smgr_create_ao != NULL); + smgr->smgr_create_ao(rnode, segmentFileNum, isRedo); if (file_create_hook) (*file_create_hook)(rnode); } diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h index e7db1a43d49..4e3685dc55d 100644 --- a/src/include/storage/smgr.h +++ b/src/include/storage/smgr.h @@ -155,6 +155,7 @@ typedef struct f_smgr } f_smgr; typedef struct f_smgr_ao { + void (*smgr_create_ao) (RelFileNodeBackend rnode, int32 segmentFileNum, bool isRedo); off_t (*smgr_FileDiskSize) (File file); void (*smgr_FileClose) (File file); int (*smgr_FileTruncate) (File file, int64 offset, uint32 wait_event_info); @@ -193,7 +194,9 @@ extern void smgrclose(SMgrRelation reln); extern void smgrcloseall(void); extern void smgrclosenode(RelFileNodeBackend rnode); extern void smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo); -extern void smgrcreate_ao(RelFileNodeBackend rnode, int32 segmentFileNum, bool isRedo); +extern void smgrcreate_ao(const struct f_smgr_ao *smgr, + RelFileNodeBackend rnode, + int32 segmentFileNum, bool isRedo); extern void smgrdosyncall(SMgrRelation *rels, int nrels); extern void smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo); extern void smgrextend(SMgrRelation reln, ForkNumber forknum, From 26092dba2ccd63d7d6477937c0ffe9e6c536394b Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Thu, 15 Jan 2026 11:22:24 +0800 Subject: [PATCH 254/260] Add branch protection for REL_2_STABLE in .asf.yaml Add branch protection rules for the REL_2_STABLE release branch to ensure all modifications must go through pull requests. Configuration added: * Require at least 2 approving reviews before merging * Require conversation threads to be resolved before merging This protects the release branch from direct pushes and enforces code review workflow for all changes. --- .asf.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.asf.yaml b/.asf.yaml index eb828d3bb41..01188659355 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -122,6 +122,18 @@ github: # Require conversation threads to be resolved required_conversation_resolution: true + # Branch protection for REL_2_STABLE release branch + REL_2_STABLE: + # Pull request review requirements + required_pull_request_reviews: + # Require new reviews when new commits are pushed + dismiss_stale_reviews: false + # Require at least 2 approving reviews + required_approving_review_count: 2 + + # Require conversation threads to be resolved + required_conversation_resolution: true + # Branch cleanup settings # Don't automatically delete branches after merging del_branch_on_merge: true From afd741e4d83aa6995ce8e1238dd893e9967be248 Mon Sep 17 00:00:00 2001 From: Dianjin Wang Date: Wed, 14 Jan 2026 18:02:03 +0800 Subject: [PATCH 255/260] CI: Add REL_2_STABLE support to GitHub workflows * Extend workflow triggers to include `REL_2_STABLE` branch * Modified 4 workflow files: apache-rat-audit.yml build-cloudberry.yml build-dbg-cloudberry.yml build-deb-cloudberry.yml * Aligns test/build workflows between main and REL_2_STABLE Please note maintainers must sync all the necessary commits from main to REL_2_STABLE to keep workflows running successfully. This commit just add the REL_2_STABLE as the target branch. --- .github/workflows/apache-rat-audit.yml | 4 ++-- .github/workflows/build-cloudberry.yml | 4 ++-- .github/workflows/build-dbg-cloudberry.yml | 4 ++-- .github/workflows/build-deb-cloudberry.yml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/apache-rat-audit.yml b/.github/workflows/apache-rat-audit.yml index ced9402d17e..4826fc89228 100644 --- a/.github/workflows/apache-rat-audit.yml +++ b/.github/workflows/apache-rat-audit.yml @@ -32,9 +32,9 @@ name: Apache Rat License Check on: push: - branches: [main] + branches: [main, REL_2_STABLE] pull_request: - branches: [main] + branches: [main, REL_2_STABLE] types: [opened, synchronize, reopened, edited] workflow_dispatch: diff --git a/.github/workflows/build-cloudberry.yml b/.github/workflows/build-cloudberry.yml index dcad89f30cb..9d44d06bbdc 100644 --- a/.github/workflows/build-cloudberry.yml +++ b/.github/workflows/build-cloudberry.yml @@ -102,9 +102,9 @@ name: Apache Cloudberry Build on: push: - branches: [main] + branches: [main, REL_2_STABLE] pull_request: - branches: [main] + branches: [main, REL_2_STABLE] types: [opened, synchronize, reopened, edited] workflow_dispatch: inputs: diff --git a/.github/workflows/build-dbg-cloudberry.yml b/.github/workflows/build-dbg-cloudberry.yml index 4bc23a5d677..967fc259f0b 100644 --- a/.github/workflows/build-dbg-cloudberry.yml +++ b/.github/workflows/build-dbg-cloudberry.yml @@ -102,9 +102,9 @@ name: Apache Cloudberry Build Debug on: push: - branches: [main] + branches: [main, REL_2_STABLE] pull_request: - branches: [main] + branches: [main, REL_2_STABLE] types: [opened, synchronize, reopened, edited] workflow_dispatch: inputs: diff --git a/.github/workflows/build-deb-cloudberry.yml b/.github/workflows/build-deb-cloudberry.yml index 68dc9daeba1..be28fff9e77 100644 --- a/.github/workflows/build-deb-cloudberry.yml +++ b/.github/workflows/build-deb-cloudberry.yml @@ -74,9 +74,9 @@ name: Apache Cloudberry Debian Build on: push: - branches: [main] + branches: [main, REL_2_STABLE] pull_request: - branches: [main] + branches: [main, REL_2_STABLE] types: [opened, synchronize, reopened, edited] workflow_dispatch: # Manual trigger inputs: From 05e49128e1dedf43648c80872502be06eb03b244 Mon Sep 17 00:00:00 2001 From: "Jianghua.yjh" Date: Wed, 21 Jan 2026 23:27:38 +0800 Subject: [PATCH 256/260] ORCA: Fix memory leak in CWindowOids by adding destructor (#1533) * ORCA: Fix memory leak in CWindowOids by adding destructor CWindowOids class was leaking three CMDIdGPDB objects (m_MDIdRowNumber, m_MDIdRank, m_MDDenseRank) that were allocated in the constructor but never released. Fixes ORCA unit test failures: - gporca_test_CXformTest - gporca_test_CConstExprEvaluatorDefaultTest --- .../gporca/libgpopt/include/gpopt/base/CWindowOids.h | 2 ++ src/backend/gporca/libgpopt/src/base/CWindowOids.cpp | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h b/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h index ba120eac015..6d20b4948c2 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h +++ b/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h @@ -60,6 +60,8 @@ class CWindowOids : public CRefCount CWindowOids(CMemoryPool *mp, OID row_number_oid, OID rank_oid, OID dense_rank_oid); + ~CWindowOids() override; + // accessor of oid value of "row_number" function OID OidRowNumber() const; IMDId *MDIdRowNumber() const; diff --git a/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp b/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp index da744a018d9..e2f326d3aaf 100644 --- a/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp +++ b/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp @@ -18,6 +18,13 @@ CWindowOids::CWindowOids(CMemoryPool *mp, OID row_number_oid, OID rank_oid, m_MDDenseRank = GPOS_NEW(mp) CMDIdGPDB(IMDId::EmdidGeneral, m_oidDenseRank); } +CWindowOids::~CWindowOids() +{ + CRefCount::SafeRelease(m_MDIdRowNumber); + CRefCount::SafeRelease(m_MDIdRank); + CRefCount::SafeRelease(m_MDDenseRank); +} + OID CWindowOids::OidRowNumber() const { From 201768a32a63f814695ff6714293a3548c0c655a Mon Sep 17 00:00:00 2001 From: reshke Date: Thu, 22 Jan 2026 10:53:55 +0500 Subject: [PATCH 257/260] Do not initialize programm query string when unneeded. (#1536) Also, while on it, beautify code to conform PG-style coding. Per coverity report 544476 --- src/backend/commands/copy.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index efbf6a0ba39..4ccd3798067 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -1420,20 +1420,17 @@ close_program_pipes(ProgramPipes *program_pipes, bool ifThrow) { int ret = 0; StringInfoData sinfo; - initStringInfo(&sinfo); /* just return if pipes not created, like when relation does not exist */ if (!program_pipes) - { return; - } + + initStringInfo(&sinfo); ret = pclose_with_stderr(program_pipes->pid, program_pipes->pipes, &sinfo); if (ret == 0 || !ifThrow) - { return; - } if (ret == -1) { From d3d757b406e02d36fe4702cb09e432714b706477 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Wed, 9 Oct 2024 03:20:41 +0000 Subject: [PATCH 258/260] Add answer file for high version perl Perl with higher version(e.g. 5.38.0) will produce different error message, compared with v5.34.0 We should handle these different versions. --- .../src/api/python3/setup-debug.py | 4 +- contrib/pax_storage/src/api/python3/setup.py | 4 +- .../src/cpp/catalog/manifest_api.h | 4 +- .../test/regress/expected/create_index.out | 1 - .../expected/create_index_optimizer.out | 1 - .../src/test/regress/sql/create_index.sql | 1 - gpcontrib/gpmapreduce/output/mapred_1.source | 798 ++++++++++++++++++ src/backend/cdb/cdbpath.c | 1 - src/test/regress/expected/create_index.out | 1 - .../expected/create_index_optimizer.out | 1 - src/test/regress/sql/create_index.sql | 1 - 11 files changed, 804 insertions(+), 13 deletions(-) create mode 100644 gpcontrib/gpmapreduce/output/mapred_1.source diff --git a/contrib/pax_storage/src/api/python3/setup-debug.py b/contrib/pax_storage/src/api/python3/setup-debug.py index 13eadaa357d..da02e2ab237 100644 --- a/contrib/pax_storage/src/api/python3/setup-debug.py +++ b/contrib/pax_storage/src/api/python3/setup-debug.py @@ -51,7 +51,7 @@ def abs_path(file_name): version = '1.0', description = 'PAXPY is the PYTHON3 API of PAX', author = 'jiaqizho', - author_email = 'jiaqizho@hashdata.cn', + author_email = 'jiaqizho@apache.org', url = '-', ext_modules = [paxpy_module] -) \ No newline at end of file +) diff --git a/contrib/pax_storage/src/api/python3/setup.py b/contrib/pax_storage/src/api/python3/setup.py index a60cc779fd9..b739cacc465 100644 --- a/contrib/pax_storage/src/api/python3/setup.py +++ b/contrib/pax_storage/src/api/python3/setup.py @@ -48,7 +48,7 @@ def abs_path(file_name): version = '1.0', description = 'PAXPY is the PYTHON3 API of PAX', author = 'jiaqizho', - author_email = 'jiaqizho@hashdata.cn', + author_email = 'jiaqizho@apache.org', url = '-', ext_modules = [paxpy_module] -) \ No newline at end of file +) diff --git a/contrib/pax_storage/src/cpp/catalog/manifest_api.h b/contrib/pax_storage/src/cpp/catalog/manifest_api.h index f9e8f7c9eb1..3978caf9097 100644 --- a/contrib/pax_storage/src/cpp/catalog/manifest_api.h +++ b/contrib/pax_storage/src/cpp/catalog/manifest_api.h @@ -28,7 +28,7 @@ #pragma once /* - * abstract interface of hashdata manifest + * abstract interface of manifest */ #ifdef __cplusplus @@ -42,7 +42,7 @@ extern "C" { * memory management. */ -/* hashdata manifest support following data types for fields */ +/* manifest support following data types for fields */ typedef enum MetaFieldType { Meta_Field_Type_Int = 1, diff --git a/contrib/pax_storage/src/test/regress/expected/create_index.out b/contrib/pax_storage/src/test/regress/expected/create_index.out index ac4958d56dc..963ce9a6b39 100644 --- a/contrib/pax_storage/src/test/regress/expected/create_index.out +++ b/contrib/pax_storage/src/test/regress/expected/create_index.out @@ -2690,7 +2690,6 @@ COMMIT; -- we keep the `CONCURRENTLY` to make the following commands fail, -- so these commands will not cause deadlock with test create_view, -- like `drop schema xxx cascade;`. --- See more details at https://code.hashdata.xyz/cloudberry/cbdb/-/issues/54 REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation ERROR: cannot reindex system catalogs concurrently REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index diff --git a/contrib/pax_storage/src/test/regress/expected/create_index_optimizer.out b/contrib/pax_storage/src/test/regress/expected/create_index_optimizer.out index 8d0a41352a8..81728a31260 100644 --- a/contrib/pax_storage/src/test/regress/expected/create_index_optimizer.out +++ b/contrib/pax_storage/src/test/regress/expected/create_index_optimizer.out @@ -2717,7 +2717,6 @@ COMMIT; -- we keep the `CONCURRENTLY` to make the following commands fail, -- so these commands will not cause deadlock with test create_view, -- like `drop schema xxx cascade;`. --- See more details at https://code.hashdata.xyz/cloudberry/cbdb/-/issues/54 REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation ERROR: cannot reindex system catalogs concurrently REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index diff --git a/contrib/pax_storage/src/test/regress/sql/create_index.sql b/contrib/pax_storage/src/test/regress/sql/create_index.sql index a0e3fc5ccdc..2cb3cc77fd0 100644 --- a/contrib/pax_storage/src/test/regress/sql/create_index.sql +++ b/contrib/pax_storage/src/test/regress/sql/create_index.sql @@ -1111,7 +1111,6 @@ COMMIT; -- we keep the `CONCURRENTLY` to make the following commands fail, -- so these commands will not cause deadlock with test create_view, -- like `drop schema xxx cascade;`. --- See more details at https://code.hashdata.xyz/cloudberry/cbdb/-/issues/54 REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index -- These are the toast table and index of pg_authid. diff --git a/gpcontrib/gpmapreduce/output/mapred_1.source b/gpcontrib/gpmapreduce/output/mapred_1.source new file mode 100644 index 00000000000..05c29807feb --- /dev/null +++ b/gpcontrib/gpmapreduce/output/mapred_1.source @@ -0,0 +1,798 @@ +-- +-- map/reduce tests +-- +-- Some notes: the PATH variable doesn't necessarily work correctly in +-- the regression context, so use the "gpwhich" token to get the full +-- path from your environment (see gpstringsubs for more details). And +-- to make this work correctly with gpsourcify, you need to add your +-- gpwhich token to gptokencheck. +-- start_matchsubs +-- m|mapreduce_\d+_run| +-- s|mapreduce_\d+_run|mapreduce_PID_run| +-- end_matchsubs +-- +-- This test makes use of plperlu +-- +-- start_ignore +create language plperlu; +create language plpython3u; +-- Take a look at the installed languages, plperl and plpython should be in the list. +-- + pg_pltemplate contains the list of languages that can be simply installed +-- + pl_language contains the list of languages that are actually installed +select * from pg_pltemplate; + tmplname | tmpltrusted | tmplhandler | tmplvalidator | tmpllibrary | tmplacl +-----------+-------------+-----------------------+-------------------+------------------+--------- + plpgsql | t | plpgsql_call_handler | plpgsql_validator | $libdir/plpgsql | + pltcl | t | pltcl_call_handler | | $libdir/pltcl | + pltclu | f | pltclu_call_handler | | $libdir/pltcl | + plperl | t | plperl_call_handler | plperl_validator | $libdir/plperl | + plperlu | f | plperl_call_handler | plperl_validator | $libdir/plperl | + plpython3u | f | plpython_call_handler | | $libdir/plpython | + plr | f | plr_call_handler | | $libdir/plr | +(7 rows) + +select lanname, lanispl, lanpltrusted from pg_language; + lanname | lanispl | lanpltrusted +-----------+---------+-------------- + internal | f | f + c | f | f + sql | f | t + plpgsql | t | t + plperlu | t | f + plpython3u | t | f +(6 rows) + +-- Check environment variables that should have been set by greenplum_path.sh +-- +-- 1) We need to check these on all segments and on the master. +-- 2) We do this via external table rather than perl/python in case it is part +-- of the cause of a mis-installed plperl/plpython. +-- 3) It is normal for the master to have a slightly different enviornment from +-- the segments (but perhaps not desirable?) +-- +CREATE EXTERNAL WEB TABLE env_segment(var text, value text) +EXECUTE 'env | grep "^[^=]*=[^=]*$"' format 'text' (delimiter '='); +CREATE EXTERNAL WEB TABLE env_master(var text, value text) +EXECUTE 'env | grep "^[^=]*=[^=]*$"' ON COORDINATOR format 'text' (delimiter '='); +CREATE VIEW env AS + SELECT gp_execution_segment(), * FROM env_segment + UNION ALL + SELECT gp_execution_segment(), * FROM env_master; +SELECT * FROM env WHERE var in ( + 'GPHOME', + 'DYLD_LIBRARY_PATH', + 'LD_LIBRARY_PATH', + 'PATH' +) ORDER BY var, gp_execution_segment; + gp_execution_segment | var | value +----------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------------- + -1 | DYLD_LIBRARY_PATH | @gphome@/lib:@gphome@/ext/python/lib:$DYLD_LIBRARY_PATH + 0 | DYLD_LIBRARY_PATH | @gphome@/lib:@gphome@/ext/python/lib: + 1 | DYLD_LIBRARY_PATH | @gphome@/lib:@gphome@/ext/python/lib: + -1 | GPHOME | @gphome@ + 0 | GPHOME | @gphome@ + 1 | GPHOME | @gphome@ + -1 | LD_LIBRARY_PATH | @gphome@/lib:@gphome@/ext/python/lib: + -1 | PATH | @gphome@/bin:/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/texbin:/usr/X11/bin:/sw/bin:/opt/local/bin:/opt/local/sbin + 0 | PATH | @gphome@/ext/python/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin + 1 | PATH | @gphome@/ext/python/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin +(10 rows) + +-- end_ignore +-- start_ignore +-- +-- Some checks to verify what versions of perl/python we have. +-- If everything has been configured correctly this should be constant +-- across all our installations. +-- +-- All of these checks should return a single row because it should produce +-- a constant across all segments and the master. +-- +-- The current expected version is 2.6.2 +-- +CREATE OR REPLACE FUNCTION python_version() returns text as $$ +import sys +return sys.version_info +$$ language plpython3u NO SQL; +SELECT python_version() FROM env GROUP BY python_version; + python_version +----------------------- + (2, 6, 2, 'final', 0) +(1 row) + +-- +-- Same check for perl version +-- +-- Expected version is perl 5.008xxx +-- +CREATE OR REPLACE FUNCTION perl_version() returns text as $$ +return "Perl $]" +$$ language plperlu NO SQL; +SELECT perl_version() FROM env GROUP BY perl_version; + perl_version +--------------- + Perl 5.008005 +(1 row) + +-- +-- The following two checks need to be put into big ignore blocks +-- because paths can be of differing lengths +-- +CREATE OR REPLACE FUNCTION python_path() returns text as $$ +import sys +return sys.path[0] +$$ language plpython3u NO SQL; +SELECT python_path() FROM env GROUP BY python_path; + python_path +--------------------------------------------- + @gphome@/lib/python +(1 row) + +CREATE OR REPLACE FUNCTION perl_path() returns text as $$ +return join(':', @INC) +$$ language plperlu NO SQL; +SELECT perl_path() FROM env GROUP BY perl_path; + perl_path +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + /System/Library/Perl/5.8.8/darwin-thread-multi-2level:/System/Library/Perl/5.8.8:/Library/Perl/5.8.8/darwin-thread-multi-2level:/Library/Perl/5.8.8:/Library/Perl:/Network/Library/Perl/5.8.8/darwin-thread-multi-2level:/Network/Library/Perl/5.8.8:/Network/Library/Perl:/System/Library/Perl/Extras/5.8.8/darwin-thread-multi-2level:/System/Library/Perl/Extras/5.8.8:/Library/Perl/5.8.6:/Library/Perl/5.8.1:. +(1 row) + +-- end_ignore +-- +-- Create a harness to run shell commands and output stderr and stdout +-- +CREATE OR REPLACE FUNCTION execute(cmd text) returns text as $$ +import subprocess +p = subprocess.Popen(cmd, shell=True, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) +r = p.communicate() +header = "---------------------\n" +return header + r[0].decode() +$$ LANGUAGE plpython3u NO SQL; +-- +-- Create a harness to run mapreduce jobs on the correct host/port +-- +CREATE OR REPLACE FUNCTION mapreduce(file text) returns setof text as $$ +import subprocess + +rv = plpy.execute("select hostname, port, user as user, " + + " current_database() as db from gp_segment_configuration where content=-1") + +cmd = ['@gpwhich_gpmapreduce@', + '--host=%s' % rv[0]['hostname'], + '--port=%s' % rv[0]['port'], + '--file=%s' % file, + rv[0]['db'], rv[0]['user'] ] +p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) +r = p.communicate() +header = "---------------------" +err = '\nSTDERR> '.join(('STDERR> ' + r[1].decode()).split('\n')).replace('\t', ' ') +out = 'STDOUT>\n' + r[0].decode().replace('\t', ', ') +return [header, err, out] +$$ LANGUAGE plpython3u READS SQL DATA; +CREATE OR REPLACE FUNCTION mapreduce(file text, keys text) returns setof text as $$ +import subprocess + +rv = plpy.execute("select hostname, port, user as user, " + + " current_database() as db from gp_segment_configuration where content=-1") + +cmd = ['@gpwhich_gpmapreduce@', + '--host=%s' % rv[0]['hostname'], + '--port=%s' % rv[0]['port'], + '--file=%s' % file, + rv[0]['db'], rv[0]['user'] ] +for key in keys.split(';'): + cmd.append('--key=%s' % key) +p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) +r = p.communicate() +header = "---------------------" +err = '\nSTDERR> '.join(('STDERR> ' + r[1].decode()).split('\n')).replace('\t', ' ') +out = 'STDOUT>\n' + r[0].decode().replace('\t', ', ') +return [header, err, out] +$$ LANGUAGE plpython3u READS SQL DATA; +-- +-- CHECK 1) make sure plperlu is really installed: +-- +-- Note: if not, you might need to 'export PG_LANG=true' and reconfigure/rebuild +-- +SELECT lanname, lanispl, lanpltrusted FROM pg_language WHERE lanname = 'plperlu'; + lanname | lanispl | lanpltrusted +---------+---------+-------------- + plperlu | t | f +(1 row) + +-- +-- Since many of these tests will end up having variable length output depending +-- on local paths we want to disable the "----" lines from psql so that our diffs +-- look reasonable. +-- +-- The default is "aligned" if that ever changes then we need to change how we restore +-- it at the end of the test +\pset format +\pset format unaligned +-- +-- Check 2) Find gpmapreduce and print the help file +-- +-- start_ignore +select execute( '@gpwhich_gpmapreduce@ --help' ); +execute +--------------------- +@gpwhich_gpmapreduce@ - Cloudberry Map/Reduce Driver 1.00b2 + +Usage: + @gpwhich_gpmapreduce@ [options] -f file.yml [dbname [username]] + +General options: + -? | --help show this help, then exit + -V | --version show version information, then exit + -v | --verbose verbose output + -x | --explain do not run jobs, but produce explain plans + -X | --explain-analyze run jobs and produce explain-analyze plans + -k | --key = sets a yaml variable + +Connection options: + -h | --host database server host or socket directory + -p | --port database server port + -U | --username database user name + -W | --password prompt for password + +Debug options: + -D | --debug enable some debugging output + -P | --print print-only mode, do not run jobs + +(1 row) +-- end_ignore +-- +-- TEST 1) complain about missing file +-- +SELECT mapreduce('nosuchfile') ORDER BY 1; +mapreduce +--------------------- +STDERR> Error: Could not open file 'nosuchfile' +STDERR> +STDOUT> + +(3 rows) +-- +-- TEST 2) Tests reading and sorting an input file; +-- +SELECT mapreduce('@abs_srcdir@/yml/sort.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_73685_run_1 +STDERR> +STDOUT> +value +------------------------- +alex, 30, (1.352,8.2) +belinda, 38, (8.9,1.7) +bertha, 88, (2.75,9.4) +carina, 58, (4.27,8.8) +carmen, 78, (3.8,8.2) +chris, 78, (9.78,2) +denise, 24, (3.78,87.90) +diane, 18, (5.912,5.3) +edna, 18, (1.53,3.5) +esther, 98, (5.36,7.6) +fanny, 08, (1.2,0.9) +gina, 18, (9.82,7.5) +jane, 58, (1.34,0.44) +jean, 28, (8.561,7.3) +jenifer, 38, (6.6,23.3) +joan, 18, (9.4,47.04) +joe, 20, (5.5,2.5) +juanita, 58, (4.57,35.8) +julie, 68, (3.6,7.2) +karen, 48, (8.73,0.0) +koko, 88, (1.7,5.5) +leah, 68, (0.6,3.37) +lita, 25, (1.3,8.7) +liza, 38, (9.76,6.90) +louise, 98, (5.0,8.7) +martie, 88, (8.358,.93) +mary, 08, (3.7,39.20) +melissa, 28, (3.089,087.23) +mike, 40, (3.1,6.2) +nan, 28, (6.35,0.43) +pamela, 48, (8.21,9.3) +pat, 18, (1.19,0.6) +paula, 68, (0.5,0.5) +rean, 48, (8.5,5.0) +sally, 34, (3.8,45.8) +sandra, 19, (9.345,09.6) +sandy, 38, (3.8,0.2) +sarah, 88, (8.4,2.3) +sharon, 78, (9.237,8.8) +sue, 50, (8.34,7.375) +sumi, 38, (1.15,0.6) +susan, 78, (6.579,3) +teresa, 38, (7.7,1.8) +trisha, 88, (1.29,2.2) +trudy, 88, (6.01,0.5) +velma, 68, (8.8,8.9) +vera, 78, (9.73,6.4) +wendy, 78, (2.62,03.3) +zena, 98, (0.35,0) +zola, 58, (2.56,4.3) +(50 rows) + + +(3 rows) +-- +-- TEST 3) Tests a basic map function and parameter passing +-- +SELECT mapreduce('@abs_srcdir@/yml/grep.yml', 'key=an') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_73691_run_1 +STDERR> +STDOUT> +key|value +---+---------------------- +an |diane, 18, (5.912,5.3) +an |fanny, 08, (1.2,0.9) +an |jane, 58, (1.34,0.44) +an |jean, 28, (8.561,7.3) +an |joan, 18, (9.4,47.04) +an |juanita, 58, (4.57,35.8) +an |nan, 28, (6.35,0.43) +an |rean, 48, (8.5,5.0) +an |sandra, 19, (9.345,09.6) +an |sandy, 38, (3.8,0.2) +an |susan, 78, (6.579,3) +(11 rows) + + +(3 rows) +-- +-- Test 4) Tests producing multiple columns +-- +SELECT mapreduce('@abs_srcdir@/yml/grep2.yml', 'key=an') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_73697_run_1 +STDERR> +STDOUT> +name |age|location +-------+---+------------ +diane | 18|(5.912,5.3) +fanny | 8|(1.2,0.9) +jane | 58|(1.34,0.44) +jean | 28|(8.561,7.3) +joan | 18|(9.4,47.04) +juanita| 58|(4.57,35.8) +nan | 28|(6.35,0.43) +rean | 48|(8.5,5.0) +sandra | 19|(9.345,09.6) +sandy | 38|(3.8,0.2) +susan | 78|(6.579,3) +(11 rows) + + +(3 rows) +-- +-- Test 5) Tests a basic reduce function and the builtin counterpart +-- +SELECT mapreduce('@abs_srcdir@/yml/agebracket.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_73703_run_1 +STDERR> +STDOUT> +key |value +---------------+----- +0 => age < 10 | 2 +10 => age < 20 | 6 +20 => age < 30 | 6 +30 => age < 40 | 8 +40 => age < 50 | 4 +50 => age < 60 | 5 +60 => age < 70 | 4 +70 => age < 80 | 6 +80 => age < 90 | 6 +90 => age < 100| 3 +(10 rows) + + +(3 rows) +SELECT mapreduce('@abs_srcdir@/yml/agebracket_builtin.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_73703_run_1 +STDERR> +STDOUT> +key |value +---------------+----- +0 => age < 10 | 2 +10 => age < 20 | 6 +20 => age < 30 | 6 +30 => age < 40 | 8 +40 => age < 50 | 4 +50 => age < 60 | 5 +60 => age < 70 | 4 +70 => age < 80 | 6 +80 => age < 90 | 6 +90 => age < 100| 3 +(10 rows) + + +(3 rows) +-- +-- Test 6) File Output tests +-- +SELECT execute('rm @abs_builddir@/results/fileout_*.out') ORDER BY 1; +execute +--------------------- + +(1 row) +SELECT mapreduce('@abs_srcdir@/yml/fileout.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_73712_run_1 +STDERR> mapreduce_73712_run_2 +STDERR> mapreduce_73712_run_3 +STDERR> +STDOUT> + +(3 rows) +SELECT execute('cat @abs_builddir@/results/fileout_none.out') ORDER BY 1; +execute +--------------------- +row 1:data 1 +row 2:data 2 +row 3:data 3 + +(1 row) +SELECT execute('cat @abs_builddir@/results/fileout_replace.out') ORDER BY 1; +execute +--------------------- +row 1|data 1 +row 2|data 2 +row 3|data 3 + +(1 row) +SELECT execute('cat @abs_builddir@/results/fileout_append.out') ORDER BY 1; +execute +--------------------- +row 1,data 1 +row 2,data 2 +row 3,data 3 + +(1 row) +SELECT mapreduce('@abs_srcdir@/yml/fileout.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_73721_run_1 +STDERR> mapreduce_73721_run_2 +STDERR> mapreduce_73721_run_3 +STDERR> Error: OUTPUT 'out_3': file '@abs_builddir@/results/fileout_none.out' already exists, at line 27 +STDERR> Error: Object creation Failure +STDERR> +STDOUT> + +(3 rows) +SELECT execute('cat @abs_builddir@/results/fileout_none.out') ORDER BY 1; +execute +--------------------- +row 1:data 1 +row 2:data 2 +row 3:data 3 + +(1 row) +SELECT execute('cat @abs_builddir@/results/fileout_replace.out') ORDER BY 1; +execute +--------------------- +row 1|data 1 +row 2|data 2 +row 3|data 3 + +(1 row) +SELECT execute('cat @abs_builddir@/results/fileout_append.out') ORDER BY 1; +execute +--------------------- +row 1,data 1 +row 2,data 2 +row 3,data 3 +row 1,data 1 +row 2,data 2 +row 3,data 3 + +(1 row) +-- +-- Test 7) Syntax error lineno reporting +-- +SELECT mapreduce('@abs_srcdir@/yml/perlerror.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> ERROR: syntax error at line 18, near "[]" +STDERR> Execution of aborted due to compilation errors. +STDERR> CONTEXT: compilation of PL/Perl function "mapreduce_1977_grep_map" +STDERR> Error: Object creation Failure +STDERR> ERROR: syntax error at line 28, near "[]" +STDERR> Execution of aborted due to compilation errors. +STDERR> CONTEXT: compilation of PL/Perl function "mapreduce_1992_grep_map" +STDERR> Error: Object creation Failure +STDERR> ERROR: syntax error at line 37, near "[]" +STDERR> Execution of aborted due to compilation errors. +STDERR> CONTEXT: compilation of PL/Perl function "mapreduce_2000_grep_map" +STDERR> Error: Object creation Failure +STDERR> ERROR: syntax error at line 45, near "[]" +STDERR> Execution of aborted due to compilation errors. +STDERR> CONTEXT: compilation of PL/Perl function "mapreduce_2011_grep_map" +STDERR> Error: Object creation Failure +STDERR> ERROR: syntax error at line 53, near "[]" +STDERR> Execution of aborted due to compilation errors. +STDERR> CONTEXT: compilation of PL/Perl function "mapreduce_2020_grep_map" +STDERR> Error: Object creation Failure +STDERR> ERROR: syntax error at line 67, near "}GABLECK" +STDERR> Execution of aborted due to compilation errors. +STDERR> CONTEXT: compilation of PL/Perl function "mapreduce_52431_mymap" +STDERR> Error: Object creation Failure +STDERR> WARNING: unset parameter - myMap(key => NULL) +STDERR> mapreduce_PID_run_1 +STDERR> ERROR: }GABLECK!{ at line 85. +STDERR> CONTEXT: PL/Perl function "mapreduce_52435_mymap" +STDERR> Error: Execution Failure +STDERR> +STDOUT> + +(3 rows) +SELECT mapreduce('@abs_srcdir@/yml/yamlerror.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> Error: OUTPUT 'output_table_empty': Invalid TABLE, at line 8 +STDERR> Error: OUTPUT 'output_table_empty': Invalid TABLE, at line 8 +STDERR> Error: OUTPUT 'output_table_string': Invalid TABLE, at line 11 +STDERR> Error: OUTPUT 'output_table_string': Invalid TABLE, at line 11 +STDERR> Error: OUTPUT 'output_table_number': Invalid TABLE, at line 14 +STDERR> Error: OUTPUT 'output_table_number': Invalid TABLE, at line 14 +STDERR> Error: OUTPUT 'output_table_list': Invalid TABLE, at line 17 +STDERR> Error: OUTPUT 'output_table_list': Invalid TABLE, at line 17 +STDERR> Error: OUTPUT 'output_table_mapping': Invalid TABLE, at line 20 +STDERR> Error: OUTPUT 'output_table_mapping': Invalid TABLE, at line 20 +STDERR> Error: OUTPUT 'output_table_mapping': Missing FILE or TABLE, at line 21 +STDERR> Error: INPUT 'input_columns_mapping': Invalid COLUMNS, at line 33 +STDERR> Error: Unrecognized VERSION, at line 62 +STDERR> Error: DOCUMENT: Missing VERSION, at line 98 +STDERR> Error: INPUT must contain a YAML MAPPING, at line 138 +STDERR> Error: INPUT: Missing NAME, at line 138 +STDERR> Error: INPUT: Missing FILE, GPFDIST, TABLE, QUERY, or EXEC, at line 138 +STDERR> Error: INPUT 'mystart': Duplicate QUERY for INPUT, at line 144 +STDERR> Error: parse failure +STDERR> +STDOUT> + +(3 rows) +-- Test 8) C functions using LIBRARY +SELECT mapreduce('@abs_srcdir@/yml/c.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_PID_run_1 +STDERR> +STDOUT> +key|value +---+----- + 0| 136 + 1| 401 + 3| 98 + 4| 1162 + 5| 257 + 6| 2073 + 7| 2138 + 8| 1082 + 9| 2241 + 10|11556 + 11| 8236 + 12| 473 + 13| 477 + 14| 0 + 15| 2287 + 16| 2772 + 17| 2359 + 18| 536 + 19|25936 + 20| 910 +(20 rows) + + +(3 rows) +-- Test 9) PageRank +SELECT mapreduce('@abs_srcdir@/yml/pagerank-init.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_PID_run_1 +STDERR> DONE +STDERR> +STDOUT> + +(3 rows) +SELECT count(*) FROM pagerank_source; +count +20 +(1 row) +SELECT mapreduce('@abs_srcdir@/yml/pagerank-iter.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_PID_run_1 +STDERR> DONE +STDERR> +STDOUT> + +(3 rows) +SELECT mapreduce('@abs_srcdir@/yml/pagerank-final.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_PID_run_1 +STDERR> DONE +STDERR> +STDOUT> + +(3 rows) +CREATE OR REPLACE FUNCTION parse_pg_rank_kv(s text) returns text as $$ +i = s.index(",") +rank = s[:i] +neighbors = list(map(int, s[i+1:].strip().strip("()").split(","))) +neighbors.sort() +ns = "(" + ",".join(map(str, neighbors)) + ")" +return ", ".join([rank, ns]) +$$ LANGUAGE plpython3u NO SQL; +-- The result of the following test case is related to the underlying hash algorithm +-- because the intermediate result of computing is saved as table in gpdb and hash-distributed. +-- If you change the underlying hash algorithm, please remember to verify the answer and change +-- here also. +SELECT parse_pg_rank_kv(ps.value), parse_pg_rank_kv(pn.value) FROM pagerank_source ps JOIN pagerank_next pn USING (key) WHERE ps.key = '17'; +parse_pg_rank_kv|parse_pg_rank_kv +0.85, (1,258,259,260,261,262,263,264,265,266)|0.265867988394584, (1,258,259,260,261,262,263,264,265,266) +(1 row) +-- Test setup +CREATE TABLE simple (m int,n int) distributed randomly; +INSERT INTO simple VALUES (1,10), (2,20), (2,21), (2,22), (3,30), (4,40), (5,50), (5,50), (10,100), (2,21); +CREATE FUNCTION tran (state int, arg2 int) returns int language C AS '@abs_srcdir@/regress.so', 'tran'; +CREATE FUNCTION tran (state int) returns int language C AS '@abs_srcdir@/regress.so', 'tran'; +CREATE FUNCTION final (state int) returns int language C AS '@abs_srcdir@/regress.so', 'final'; +CREATE FUNCTION cons (state int, value int, out output int) returns int language C AS '@abs_srcdir@/regress.so', 'cons'; +CREATE FUNCTION cons_wrongtype (state int, value text) returns int language C AS '@abs_srcdir@/regress.so', 'cons'; +CREATE OR REPLACE FUNCTION retcomposite(int) + RETURNS SETOF __retcomposite + AS '@abs_srcdir@/regress.so', 'retcomposite' + LANGUAGE C IMMUTABLE STRICT; +NOTICE: type "__retcomposite" is not yet defined +DETAIL: Creating a shell type definition. +CREATE FUNCTION gpmapred_scube_accum8(numeric,numeric) RETURNS numeric +AS 'SELECT $1 + $2 * $2 * $2' +LANGUAGE SQL +IMMUTABLE +RETURNS NULL ON NULL INPUT; +CREATE AGGREGATE gpmapred_scube(numeric) ( + SFUNC = gpmapred_scube_accum8, + STYPE = numeric, + INITCOND = 0 ); +-- Test 10) Aggregate Function +SELECT mapreduce('@abs_srcdir@/yml/aggFunction.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_PID_run_1 +STDERR> +STDOUT> + m| value +--+------- + 1| 1000 + 2| 37170 + 3| 27000 + 4| 64000 + 5| 250000 +10|1000000 +(6 rows) + + +(3 rows) +-- Test 11) Built-in Functions +SELECT mapreduce('@abs_srcdir@/yml/builtinfunction.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_PID_run_1 +STDERR> mapreduce_PID_run_2 +STDERR> mapreduce_PID_run_3 +STDERR> mapreduce_PID_run_4 +STDERR> mapreduce_PID_run_5 +STDERR> +STDOUT> + m|value +--+----- + 1| 10 + 2| 20 + 3| 30 + 4| 40 + 5| 50 +10| 100 +(6 rows) + + m|value +--+----- + 1| 10 + 2| 22 + 3| 30 + 4| 40 + 5| 50 +10| 100 +(6 rows) + + m| value +--+-------------------- + 1| 10.0000000000000000 + 2| 21.0000000000000000 + 3| 30.0000000000000000 + 4| 40.0000000000000000 + 5| 50.0000000000000000 +10|100.0000000000000000 +(6 rows) + + m|value +--+----- + 1| 1 + 2| 4 + 3| 1 + 4| 1 + 5| 2 +10| 1 +(6 rows) + + m|value +--+----- + 1| 10 + 2| 20 + 2| 21 + 2| 21 + 2| 22 + 3| 30 + 4| 40 + 5| 50 + 5| 50 +10| 100 +(10 rows) + + +(3 rows) +-- Test 12) Ambigious function +SELECT mapreduce('@abs_srcdir@/yml/ambiguousfunction.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> Error: MAP 'tran': Ambiguous function, supply a function prototype for disambiguation, at line 11 +STDERR> Error: Object creation Failure +STDERR> +STDOUT> + +(3 rows) +-- Test 13) Parameter override +SELECT mapreduce('@abs_srcdir@/yml/paramoverride.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> mapreduce_PID_run_1 +STDERR> +STDOUT> + m|retval +--+------ + 1| 20 + 2| 168 + 3| 60 + 4| 80 + 5| 200 +10| 200 +(6 rows) + + +(3 rows) +-- Test 14) Incorrect parameter type +SELECT mapreduce('@abs_srcdir@/yml/paramdifftype.yml') ORDER BY 1; +mapreduce +--------------------- +STDERR> ERROR: function cons_wrongtype(integer, integer) does not exist +STDERR> Error: Object creation Failure +STDERR> +STDOUT> + +(3 rows) +-- +-- Cleanup) Restore normal formatting options +-- +\pset format aligned diff --git a/src/backend/cdb/cdbpath.c b/src/backend/cdb/cdbpath.c index 89d15437661..9e3697a3b03 100644 --- a/src/backend/cdb/cdbpath.c +++ b/src/backend/cdb/cdbpath.c @@ -2964,7 +2964,6 @@ can_elide_explicit_motion(PlannerInfo *root, Index rti, Path *subpath, * There was once an idea reseting path's parallel_works to avoid * Motion if inner and outer's parallel_workers doesn't match. * But there are a lot of issues we don't have a clear answer. - * See https://code.hashdata.xyz/cloudberry/cbdb-postgres-merge/-/issues/43. * * We couldn't expect the parallel_workers of outer or inner path. * Partial path may generate locus(parallel_workers=0) if needed, ex: diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out index f795078e761..0bc2aaa9f6e 100644 --- a/src/test/regress/expected/create_index.out +++ b/src/test/regress/expected/create_index.out @@ -2683,7 +2683,6 @@ COMMIT; -- we keep the `CONCURRENTLY` to make the following commands fail, -- so these commands will not cause deadlock with test create_view, -- like `drop schema xxx cascade;`. --- See more details at https://code.hashdata.xyz/cloudberry/cbdb/-/issues/54 REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation ERROR: cannot reindex system catalogs concurrently REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index diff --git a/src/test/regress/expected/create_index_optimizer.out b/src/test/regress/expected/create_index_optimizer.out index f661e53f487..65f5f92b8bd 100644 --- a/src/test/regress/expected/create_index_optimizer.out +++ b/src/test/regress/expected/create_index_optimizer.out @@ -2723,7 +2723,6 @@ COMMIT; -- we keep the `CONCURRENTLY` to make the following commands fail, -- so these commands will not cause deadlock with test create_view, -- like `drop schema xxx cascade;`. --- See more details at https://code.hashdata.xyz/cloudberry/cbdb/-/issues/54 REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation ERROR: cannot reindex system catalogs concurrently REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql index 1b598d13b27..ac5526ea9b1 100644 --- a/src/test/regress/sql/create_index.sql +++ b/src/test/regress/sql/create_index.sql @@ -1109,7 +1109,6 @@ COMMIT; -- we keep the `CONCURRENTLY` to make the following commands fail, -- so these commands will not cause deadlock with test create_view, -- like `drop schema xxx cascade;`. --- See more details at https://code.hashdata.xyz/cloudberry/cbdb/-/issues/54 REINDEX TABLE CONCURRENTLY pg_class; -- no catalog relation REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index -- These are the toast table and index of pg_authid. From 3102b9ff277bd83083df562e9ba81214c4f5246b Mon Sep 17 00:00:00 2001 From: Andrey Sokolov Date: Thu, 22 Jan 2026 17:11:56 +0300 Subject: [PATCH 259/260] Set join_collapse_limit default value to 13 (#1525) The default value of join_collapse_limit was 20. When this value is set and the query contains about 20 joins (see added test), Postgres query optimizer cannot build a plan during hours and consumes a lot of memory, because the planner checks a lot of possible ways to join the tables. When join_collapse_limit is 8, the query plan is built in reasonable time. --- src/backend/utils/misc/guc.c | 2 +- src/backend/utils/misc/postgresql.conf.sample | 2 +- src/test/regress/expected/bfv_joins.out | 42 +++++++++++++++++++ .../regress/expected/bfv_joins_optimizer.out | 42 +++++++++++++++++++ src/test/regress/sql/bfv_joins.sql | 39 +++++++++++++++++ 5 files changed, 125 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index fb09180ebe9..154d6e39737 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2290,7 +2290,7 @@ static struct config_int ConfigureNamesInt[] = GUC_EXPLAIN }, &join_collapse_limit, - 20, 1, INT_MAX, + 13, 1, INT_MAX, NULL, NULL, NULL }, { diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 1f504832eac..4192dfb2748 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -434,7 +434,7 @@ max_prepared_transactions = 250 # can be 0 or more #cursor_tuple_fraction = 0.1 # range 0.0-1.0 #from_collapse_limit = 20 -#join_collapse_limit = 20 # 1 disables collapsing of explicit +#join_collapse_limit = 13 # 1 disables collapsing of explicit # JOIN clauses #force_parallel_mode = off #jit = on # allow JIT compilation diff --git a/src/test/regress/expected/bfv_joins.out b/src/test/regress/expected/bfv_joins.out index 3eab4b55fc1..593c0797b96 100644 --- a/src/test/regress/expected/bfv_joins.out +++ b/src/test/regress/expected/bfv_joins.out @@ -4189,6 +4189,48 @@ INSERT INTO ext_stats_tbl VALUES('tC', true); ANALYZE ext_stats_tbl; explain SELECT 1 FROM ext_stats_tbl t11 FULL JOIN ext_stats_tbl t12 ON t12.c2; ERROR: FULL JOIN is only supported with merge-joinable or hash-joinable join conditions +-- Check that Postgres Planner can build a plan with 20 joins in reasonable time +do $$ +begin + for i in 1..20 loop + execute 'create table tj' || i || '(id int)'; + end loop; +end +$$; +set optimizer to off; +select trunc(extract(epoch from now())) unix_time1 \gset +select * +from tj1 + join tj2 on tj1.id = tj2.id + join tj3 on tj2.id = tj3.id + join tj4 on tj3.id = tj4.id + join tj5 on tj4.id = tj5.id + join tj6 on tj5.id = tj6.id + join tj7 on tj6.id = tj7.id + join tj8 on tj7.id = tj8.id + join tj9 on tj8.id = tj9.id + join tj10 on tj9.id = tj10.id + join tj11 on tj10.id = tj11.id + join tj12 on tj11.id = tj12.id + join tj13 on tj12.id = tj13.id + join tj14 on tj13.id = tj14.id + join tj15 on tj14.id = tj15.id + join tj16 on tj15.id = tj16.id + join tj17 on tj16.id = tj17.id + join tj18 on tj17.id = tj18.id + join tj19 on tj18.id = tj19.id + join tj20 on tj19.id = tj20.id; + id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---- +(0 rows) + +select (trunc(extract(epoch from now())) - :unix_time1) < 100 is_ok; + is_ok +------- + t +(1 row) + +reset optimizer; -- Clean up. None of the objects we create are very interesting to keep around. reset search_path; set client_min_messages='warning'; diff --git a/src/test/regress/expected/bfv_joins_optimizer.out b/src/test/regress/expected/bfv_joins_optimizer.out index 6ae5ea6d30c..c5585098961 100644 --- a/src/test/regress/expected/bfv_joins_optimizer.out +++ b/src/test/regress/expected/bfv_joins_optimizer.out @@ -4206,6 +4206,48 @@ INSERT INTO ext_stats_tbl VALUES('tC', true); ANALYZE ext_stats_tbl; explain SELECT 1 FROM ext_stats_tbl t11 FULL JOIN ext_stats_tbl t12 ON t12.c2; ERROR: FULL JOIN is only supported with merge-joinable or hash-joinable join conditions +-- Check that Postgres Planner can build a plan with 20 joins in reasonable time +do $$ +begin + for i in 1..20 loop + execute 'create table tj' || i || '(id int)'; + end loop; +end +$$; +set optimizer to off; +select trunc(extract(epoch from now())) unix_time1 \gset +select * +from tj1 + join tj2 on tj1.id = tj2.id + join tj3 on tj2.id = tj3.id + join tj4 on tj3.id = tj4.id + join tj5 on tj4.id = tj5.id + join tj6 on tj5.id = tj6.id + join tj7 on tj6.id = tj7.id + join tj8 on tj7.id = tj8.id + join tj9 on tj8.id = tj9.id + join tj10 on tj9.id = tj10.id + join tj11 on tj10.id = tj11.id + join tj12 on tj11.id = tj12.id + join tj13 on tj12.id = tj13.id + join tj14 on tj13.id = tj14.id + join tj15 on tj14.id = tj15.id + join tj16 on tj15.id = tj16.id + join tj17 on tj16.id = tj17.id + join tj18 on tj17.id = tj18.id + join tj19 on tj18.id = tj19.id + join tj20 on tj19.id = tj20.id; + id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id | id +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---- +(0 rows) + +select (trunc(extract(epoch from now())) - :unix_time1) < 100 is_ok; + is_ok +------- + t +(1 row) + +reset optimizer; -- Clean up. None of the objects we create are very interesting to keep around. reset search_path; set client_min_messages='warning'; diff --git a/src/test/regress/sql/bfv_joins.sql b/src/test/regress/sql/bfv_joins.sql index edc39f58a7d..59208087808 100644 --- a/src/test/regress/sql/bfv_joins.sql +++ b/src/test/regress/sql/bfv_joins.sql @@ -604,6 +604,45 @@ ANALYZE ext_stats_tbl; explain SELECT 1 FROM ext_stats_tbl t11 FULL JOIN ext_stats_tbl t12 ON t12.c2; +-- Check that Postgres Planner can build a plan with 20 joins in reasonable time +do $$ +begin + for i in 1..20 loop + execute 'create table tj' || i || '(id int)'; + end loop; +end +$$; + +set optimizer to off; + +select trunc(extract(epoch from now())) unix_time1 \gset + +select * +from tj1 + join tj2 on tj1.id = tj2.id + join tj3 on tj2.id = tj3.id + join tj4 on tj3.id = tj4.id + join tj5 on tj4.id = tj5.id + join tj6 on tj5.id = tj6.id + join tj7 on tj6.id = tj7.id + join tj8 on tj7.id = tj8.id + join tj9 on tj8.id = tj9.id + join tj10 on tj9.id = tj10.id + join tj11 on tj10.id = tj11.id + join tj12 on tj11.id = tj12.id + join tj13 on tj12.id = tj13.id + join tj14 on tj13.id = tj14.id + join tj15 on tj14.id = tj15.id + join tj16 on tj15.id = tj16.id + join tj17 on tj16.id = tj17.id + join tj18 on tj17.id = tj18.id + join tj19 on tj18.id = tj19.id + join tj20 on tj19.id = tj20.id; + +select (trunc(extract(epoch from now())) - :unix_time1) < 100 is_ok; + +reset optimizer; + -- Clean up. None of the objects we create are very interesting to keep around. reset search_path; set client_min_messages='warning'; From 8270381f770ff59a84e02a41dbbf08daf7609b08 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Sat, 24 Jan 2026 04:44:25 +0800 Subject: [PATCH 260/260] ORCA: Optimize CDatumSortedSet by checking IsSorted before sorting Check IsSorted before Sort to reduce O(n log n) to O(n-1) comparisons for pre-sorted IN lists, improving ORCA optimization time. --- src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp b/src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp index 7b141e767bc..0fe4481953d 100644 --- a/src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp +++ b/src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp @@ -42,7 +42,13 @@ CDatumSortedSet::CDatumSortedSet(CMemoryPool *mp, CExpression *pexprArray, { return; } - aprngdatum->Sort(&CUtils::IDatumCmp); + // Only sort if not already sorted - IsSorted is O(n-1) comparisons, + // while Sort is O(n log n), so this optimization helps when data + // is already sorted (common case for IN lists in queries) + if (!aprngdatum->IsSorted(&CUtils::IDatumCmp)) + { + aprngdatum->Sort(&CUtils::IDatumCmp); + } // de-duplicate const ULONG ulRangeArrayArity = aprngdatum->Size();

      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%0Ar67S_9pNI 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≠9?}uyNx~TeIVoTQ{~!Ysv8VVi9j|-4%u|; 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 S`ZxWrr~e03AZAwpsBi#LWo=>r diff --git a/gpMgmt/bin/pythonSrc/ext/mock-1.0.1.tar.gz b/gpMgmt/bin/pythonSrc/ext/mock-1.0.1.tar.gz deleted file mode 100644 index 4fdea77c71c352e5f83c0acb813026e4cd7396f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818644 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

      gtfaMw)0L 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 %@e&Agh?+O4UGg!_ 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

    5cQ(Q_u6x+)LggTHC%zflqB4LQL&0 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�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∾l+8dbj4n^9Lqv9K?o})Pvb`}J)}1@rT_l( ztsnpADS4lu$jC8%Q+ZKY*ZD!kf!IIaCeatAA?)e__h9S$q~UtHXP7gDyT^6OH;KCI zBvijXA_cK!h7<02!h4j7rt|T7W8t6O;W0BZ-R&({Fx*QH&e8B1vGalbqi}Pg6mRC2 zIZp}u_FIwl0Xh7P$r+KadEQUV#RH;Y@!RR?;pXlO*BV!j(XEqATZ@R$JtwD9FS$h| z^Xq(I)^Fjzzw<3CiZe3#`=-yqBLH-#u?@*egfUDm&}DSPyGizgSM6BwyT5tHsX2PT zhXuFAboUjgwr$V}-T8Ys95=jO2l*CvYW|~_&9@Ot*fBY0z^$keZ#wMU?Iie)Kp#$k z$c!1~j13*4F1(Ssz@m?HE}Mn&aI;P3lWbYiPXV=E>~>fRQes8RPF$iRdQOs|E=_Zm z{p0HF_9INPTxyph+HB_eL><{Hs@tK>!ujYw!?-hxT)`y*)mL24IyJkKOEGVk^AmvW@O34ikKU&KgJWpQl;Cg{ zYDFDD5vz)*HZKa87*4)e*EsR#xSPojT3|+f0sN4bY99=)5j3<^ji9*w*`mxF(cyG5 z>Pp(<^yj)W3}_Abtq+Y1Ge`U$6G2lx117}YDBfe%^obA##@Du;V8172?$bO(9#BCD zZzGlIPr#}-y%48G8Xg~kNA@4vu^-IE8Xf!VCFCvNeT&644Xrj5@CHTo!N6WrXp{H` z%^#47$)dRoV_FxH$TMOlcHlnr1{M^X^g$f*caW>)&70NqH46m<@NqrWNiA(ueCNq)Q}uw~w-@ ztVd1>4bI0L(RrFb1IWSHT6^3ga96Cc?n_y06jpUz+#>N*(%wkRGRoma9eQUW!7dUd zR~H&Co9a-5RV95Iya0BjTJDj^3I%SCZHv(#VfIU9>xU7)y)H=ofN$;! zEfO)Lp14QH<2OY8^g16DL43v?y5O1*IZIBVA?2K%_P*H~(dU_mZ)R8t$K2BCRxcJ^*Iye2)-^@3YSB#@qp;V@>|fv!vQ;yZF3a8OaxugDQx2X`0v zRl-orUuAtGeNm^kk=z?al^JDw!gJmSZ?^Dw8qM|^qgLY!+)zMiLnHiS_ z^_C)#p?;TK!06COqF3f(&wUECo!}uG*F4&AX$g`rMaYZY#{|rCHqkuzz((-$RLf|& zB%+jj6k3`qAJ1TyqO_5Nm;`0m4`w*KL z7(0VLUC*dbj$}zuMR!VKvP2R=))z(NrWllTIXW{nlg;b6sdKseDoGpeo;H zox>r`mCzu^$6gRF;d`qF{`?=K>+@MzlaC(dI=+KLG(3Mv=!Z3y{|q@?nrGyR(qvz_ z$F>`H+2d7cuGr$Y92i`mVsTl$#$ISzwZ_6#pJlhuQ(8SxG9PY-Pm$E~3ia;G`hHE_ z?A_G@{cwP~pTh-lmQxs-e&z7kuyK>UVogg9vKPV5MFSn8B`Dd6x1GfFL4@tAF_)yc z)nr7hmnInM7^`p}WUytEdpbpd^WX{e6Jtk5T&vpM*tu)BgS279uv`*Ju~PF~H?xc? zh9}9PJ8jE5JYt|FF@!BsXx4}r5E3SESM^!CI})$~0?W9~Lr$c7`#H~Vp1`m9zfP^A<5!ESl~VHXzohB>(%n zw0OLbS=cl8C0X3d7}bKm!yi13x2)c2+177ZFO;Kl-wB-d7wJur+tD3#!6!fuZ`I-Ln@#lJ8%=nzPcqmk3YkemHK3-Zb53!|HLa zGlsRBSe+9>ws}pB_*R8|n;=!{G=+ISJCZv0!ID8Fagp6tQqngav zamo5Z&!<=nW2N z5;RZ|k0#v?%~TVV2{?8m&nJ|hIZ+qWazTnFCrAZkr$Sx*hRJqU))X4kAktQj4E)C) zv+V_=!HCiVsbPeI)3C9_!!eZsg+cw&RnMGv9uPdRr2bp@E0jr?{HG!!Y1Uo6f^5vf4{Ls?2$hDr11cBL zW5clG)ezDrL$5YD z5NRy0IeJ?VN!!B9!=k1Zqts{R$G9&_RdL$BOBY4zge@QC&mV;tsIBsc@P0juXsv#d ztemiX`*!$@Geyz9@L_8aQ?FrD-%B*5Bf~7{u|&}^OvL3i5nNfd@_!C@HjvF1^>fJt zl8cYMmFXf3>6J2^79Q|u3wpDFyL?pNSpAeA&5==gFYe1<@EYWs>_v51soqzIYzcN) z(CHLL?%OqP@PR4D=3qj4&#YZk}nSf+D2G}V%}5vdu-!z^eAV3GFz#M?HvzL^0Hr)sXk*0u~Ak4WP&-x(RbFoq^-nC*LE8WSs< zsdOf*K-j}DWH(SlT(eXd(5(X$mUPx~GEk_Z|6Hjs?w?YO8f+&7?zof=kqMdFMhS~O zJlz`FHGSHBIQ?PeXBBGeW^4N$!OKbo;E04>IX8G`t?^uuL*p#tUYgfX6%oVZgD|dO z!#=FpNdug#U?8r-!^3Glp*^;r&eWU5_P2SToT;XWCXB7>*Ta5zpb8w|AdjXw&-5M2 zZw}7*sVnQ*2~pv_@=0JVDpNz={;-B>FrwEoB>J5L*G_>MC7lh)s{?Ex=c=siNqcL`{}0z8}!(LK|^PzgET{lC63fIU<_J zKMC+`u~k-TP`X1rxNv||Lq)r`TF1>k4llmm0fG7Dm59G9f(E+lvkHR zK3rSM||7a8~*wVe*D=!D7(+!A(F#{!;Vq7h{djA z(}m_Z9KwqTu!IDHJ*!yuJC&^WMqd#p3Q9_dW4V`*U5Eh|iG{s6f+E4dI3N~Hq!*w$YH!h` zAibwGQ$?nnFA~ArqMV$YoI10yqUChC2O87#h~AOJSox%U{;7I$BM$~`ot^Vvvt9U@ zH1A}zTUJI9BsG7N%#29=N@4qc9ZPnFBP6p~=6Gi{MlW!uSMlAben~QwmVV$INAp&+ zX5w5ATOgI=OI_6+?DjBwYbJDOn?C)%V?9UpKYM*Hx$=YV5?L6{bNn8xbg|%|tVpLq zrcR>`F}9HG3Sr2rSL9G6uhF2 z3i_p`7sb{2RaJYZga_6oduf@Og@)xd@tJAq$)Khb6ltcZB^Rk=rI@rwWz=YtC#5uG zl&Qs~r3?Ts33?6qHym+3w2G@G?F-82Nf z6+gKlftLu;V);!!A&&WU{M`C3nvJ+;DCB+StUEyi?TJa(T>=Nt1G06d+cTX8ToXbt zZBJb$=o8tQC$xpUX6xsDi?TvxJU`jkQ$l)&W6nv+Dh-;Mc z+aH@IV(=4Pz>n&HfjpKmdT)Tm0olL=K>NQ{z*WHU8fcnG)oUbb^#!`IdOLQN{Zq-) zrRxbcLem8Z*Ehg)|I4u*YBz3s^Dq?iTGO_%EB)B8d)aEXy$ZDnA80}n-tPjG=Ksld zKV3C#erwAqZ=v~gY%;irnB>tNi_ZC9O)qp$p@dy6Ux>lHvYq-NG@CH?_!Zgqr+Hfg z@xkG~T>e+K|4{_;&Q&8Bg~h!8EJG^(ly5V?Whv{dDNyD$>~}pXAX_d@ICg*uPVALC zbQmTc>T`y8%@IiCLfIxrg&RT5K~SCtwop>(=heUUmKD9eiWTG#h7?+Sx-symn#l}1 zoA-~IvLc=K6{}jTbjF_za;^(Jv=KPl1Z^Y=IPGD5X-)Z=?U;XQGnUS@R`B6wI+g%B zokxNm5DI7q-KMYB9X%31&(m%PS3Fz1dY7i|FV+ZN`jcd5xJXjG?p}^tuQzSWlH~tG z*EH+h+)Sk^H@SWGUdc)&Yd^vt-=v1H zq$bH|us;=&2P=@DBF13a*iEiJPJRE(DC-+=57m6X2Ic<~oB8(k6cG&{&cYTkM;|#S zO)F2k_#ff_KN*_ox&N2%?nx=7DCtAwDC(!gqbO-5=xA91EV)g)H}3M*tNpxI)R8;% z?)j(AlU9f{Fy;8r!MABRa6hTLS4wGKx@Ir#y}NPPzI?3tX$Kr?eQ1C2cK^Pfs2-o0n$byeYNzzfb~ z-LkKP{@wEoPq;L;KUw2hi|012h8^?~W2E)a#wz_?UgH zuK(*_swAqLt}hA%M{&y1~c6-`zlT>+?u>j81L=pgnNkv9}z;fB~B; zGC?LnQ4*Z7f>7sz=GmSnZY$=gOp_bwmPR1G7lWEvcN~*uf1K?fHW$A&<9%XHastf- zO{`pd;)w?&t$Bk=CbBnHSSA8!t9GXf*n-ewNg^}z2UMDsh%_*zM5oD7ldTRCG`Ern zEmrPW|6vKfSVbl0U&so&tz4GUSlY1eJ}NDO^ElO}-Ds|8?aVPo_I`>LA}y%wED=pq z@rTQ#ks}-^2@>;Y0V0*=t$^(XywNZWF!YN1eSJB4@VV@FgOI>rm~cnh$cFo5GS^NfpHdfjI#I|W~&d8 z)8=Mr!MBvb)}&aSD>#5_-vAVn+C{>M2rj6g=8yeq+RkA2KcJNd2`?9nl8yS*T)7^< zI=x!wF~=Xjrkd@hGCM5|F}fMfY~w80dM8aU{Y{--z%O=~p}07MxkoMuf4Sg@G3vye z^@Tl|M`VR%*8_>!cs{Ea|6X6QmYrb{k3-AFPZ}TKTcAwC9*1f+&i+QD`i4z2g)G8ht4HrptLL)A%%sVy%>dolGBDG zAP~c6J=#a?hWZX&H94j2eG4l`*j{O*sV8Ha&sFO*(g*8x1fp?TY0Iy8R?up_gTy5> zxwRwqnLBpWO?P%_U0Iqm@wAKdue_W9@fTf~ut6XFmHT1L zksn#Y)YTgzHs|rDtl)C5oU8a~+ozoKWym=dIi=jly^T{PAsuGw{k*K6>9()8ZJI}BZWe6HSxhTNcf?Zo?uL!}~0?vURtup9TLXR-|{ z&!Y8%Yc+YpI!e|%4COJ*#qef$Mqn9NXnf&@+hft58Uh>u%VN98?|ZC0rd+<41AHnJ z(9N(t+X!lzF{W?6F0#s=jk9D#eq`^&_Il&K0$DF9c4pECD0kD$y6K;C@4b}xb&iZ> z3(3~q*c$p+bGvI{>BZguope0Wb9f|99+d-zvi`4ZRr~Cg1Ta+di>F;setOT++(ORO^>%h$Zo@M&Mi$9#K5o$-FgFdQ5tK}l`dxvK8BDk* z&ANP!ZpnG%y_Uk(i4BTf?i zgJHfTyt)4bc``cbcIT4mOJ~5I@gIacQKC5?o^=$rne>h)z4l@{vfr6q2-Q*h%&S%%Z&a zs{rcZ0ashQWRJJ-N>RRGlL}pV6B;0CH<-SVR*kG-k;co^?&E z5T)aT`B6(hw5+Jg)eIH8^l;#;?1xdrPV+|<`jNJY`KT!0S%MgWU=|sbbyyxHM-?1jFp`gtJ{W~CTx{UwN6?M6%5p1q$^c;^sE#+CZVjHO|$f2Pn-3Z$`8z& z>;pH17fPPbj`-tlRx6qAVt|F7mg61g-`>ZcJfF?C=i?7g7UPG9YZ!VO6z0?Q#-i2f zU!{nNU5qqL<73zvZfW z^A27@>46s`p;Q5fcuLrMAEDvCU5UyEyAJ#{Dpd<580z=2@7GE0Hj0^hDM^5y*uZ1#`YNgrxS5WJzS zBg|P-xLGuWS{X7u zM)DpE=ADQ7wg_Qt;0ujztL}_#1BH0>HPPslT>d01JK838LE2Ft;03|s@Rz` z7fv~16;7c;eiwONE*G^?Cv_LMiKP%H^x@AgUO6YF5j-uceB zlfyK9{Pb+JeY>=CJ`swW?Jc5CW0OgMKh>C-{Dv8Ljs(ad&_@65FEkH0NPJmqA3zw^ z#V)K0YSX!a&z780m!_m2`_#!94A#Uq*?ZQN8VPa+Xy4RAGHBaO#Kk0aH zDHtw+0w1ypz-}P(dnGDG%V_31=W{QgKsTg`Zuw|#HYVp~E-#$72|r;WJx?={wjov> zSJ&?hOl8l|Z1OxIcNvI?&g&DgCW%4x^6yH?ct(pUiUg`2#*v%cqb~M;sC0rz`ewx4 z#%NtiMI%o)iqd;uA{mZ@Mqq`rz8AzitGtZU%3x!vy{QDDV)_#T0!`9mLDtHPDHBq)>Y zo#lI*YKkG0hckjzJ81aU1<4thlvAErkW+p^d_%B`ptjB^8F%v?xSz%cSUbNvsWwMbBxheiSbSHxC zueYm0>E56q?AB&C%j5d(6JZ-P{!*rL2*q{6>3$z|_3C9^P7+8+IzCFp1fsZrEt7$? ze5>9`rU(UVJf_xQNvQx;#E>U;5E3W4oXU`ZHkd0Pwo7K!#xa+D8RHnoMAcfD;8iUR zmhdlkL$kHUwEEWZ12HCr&hK{Rp2wlW@rSSH&wwecYGjNPrVvpkR2l5{g%HA^Nte7z zv{4I;zAo#9twZCA$qBwPC|B8W=cklLX!4>i*z#}i%^&qq7?=; zq#sZbrXLxU47wMh5gi>7qEMisACjCE9V1W~9txD8Y#q)?O}1ndB?Gys~l z@tRDGQ<03mhe)y!?%|>C>Co5zP+6i~P-MvXB-68}Nyf{0Jcx?o!efOX<^^L%QamOG zNGm`EOFTx&l7KNy$=sM78Z8}6ODTutdA1ZwuNvD;)o@H?xkKNl_tMuh=L*-iY1G+%>7$aW+OcgzBOpPvOk|*o$Q#Xt(U2JuxQ&?O zFnomNNEj!nj_z|2{q%9<&)}U!mv@~yqamujDq}j??<5IlBIrb-ks)pW;4{}Az}^WY zB_W{;TN9Azr3cB4=U8jTauX>DBMT375bN-ll)Fw?(DjK!s9)+zO^p`>soB1j|3M8NyQ1Nk-!m<+*{5d_7M(*>4rGQ)=pc` z7za!RUNy=t*-_$eW<;0ckoKSQp@blm1*w+pVz?b&z2`zGms}01aM5k$k;fQDdhdu< zJ=6@S6}+CzeuKE?QNKkVSJ%d}TC9YOJ-E9(&Ec9|$9zj$8uS`{{DfhM6dg0^4@$wxoXnqX{ zsamosIy1)?jkmy(Qs46LtfHtnnpt9&#VaRylc|rk5^KGvmK>n;j9#(`3f&K3rFO;IGrJxoz^q|>5|0x~JhAvpT)EN6bHG7i# zsA3@2Trw(|$do!yo(7**@z2^J+{A{(UMf$>Mm}I*dJvBIt)`|RaurI@gbK(@fDdMl z;58onJ8op*F2rV#QH9-^;@VEBPZ~i2w&7C1H3>bO#Y}cwsq*l>tXiGS&v>?d>1|Io zc)_4tH8y8+6B`O)zOA@Mxx&V=QbP*<>|jm*}@FLcGqiiu*(E@0`}4-i2* zX{U?ie|4uYAQ#Ml()~uQw+@{d62-`v&0;3oO@YYK6!#d9Wg+>cF|@bUh~0EMuryoY zk&!Vw4VJhCQf!&>JDpFZpBQG3sE86FMGZzawts5Llv==y*0|8T(OZBApL|%X-V?w@m=I;6;qSpT)oh&dWMI$2f*Hnt_|aufF(V?S%z?dJE^+mo=5jcK!z ziVSj0BMLUg1`x{F%r_hD7*zBj*o!hu-4g8Oqbe;tW5s_~FiPI_&NlU{JL@S_q%>1( z-?bf9vwvr3Y$Ip{BS-_*O}*Z`=ZvP>X<0K7lyRJ;Gb$s6>x(GG?d$9PA2%vTXr$AC3=FS zLo3U()ND=BrrsjHHw}u*O<9jr`}6?UyT~uMfP(JXSH_pdnf7WXYjhFOwZ-uCRcsL6 zyQnU!`s8c{R)@m60NeR+mCZ%}>&rcAHg<<%|HVTyI`R$A24q3^SVtvS26G@?>b3_? zuyV<*8im%6RA1bF`upu|yg<{7N;;=tQ7+cmyDXK=6YO6>6AFn zzTh%Qk_5~^_nRd~*ioc>coIe2B+OLsg)I5cdSCPG26w49%pRIoKGclP%9u%qA8E?% zMLNKEcT5(Oop#JWtB`~~5?KX0y}|+qWmxB`6`0+rjJ0OUDBqy$am->$d~=_H=y?Lx zPSqPs91|%(_Z~9Ko3Qb{KfABwBg>c`ZsG>}MSBL-!{$X6iOewST(N9RE70CEK?1E& z_z1aVlbA{cG`syS85aJqJwVxm&5%Wh9;d}RsI#0q4`s={y|HbZg9IwiYpSZ> z_#i1`4+29sB$*mjmQ<1_f?#kf(w4MMmmiRjQ8cq+D9DOJx*cQKcik{*%2YB+djuZM zm@(6_VA4?WZa^qo~?VV@YL93~q-FXSGJjB5k3G1=6z>s=fE(CkS@RU@$AG zw-BbCq0%FO1VFF#4Z53T#;O_vMqZeLMZ;Kie|MX;6t^6&AZasxRokA${6)8tFGDtK zMJvUqPbeOGyG)M0-;{Sjcg)K;mKb|^4L@XFdFaF*x956{vY7^D@GDL4a!@2!M26xo zy{HOD&%K9Y%?J!UII|n6Gl*$38(*I{&GK0B_Q9F1G6m0sEXt6$GxY+}<27+&yZUCB zR{w90zVg5VvOn*Yx-g_7e!9KTnD($o!1i!e94<{|`RP=mS|IrmZJFzxM+d4=AO&jg z<6d_c)wE`IU?z%o+PW}Z(yA^Mqmsw1N^W_LXX@DliA7HM(-Z9c=V6QTi`g>ZqYUtC zH_Lf^MTql!i+6!OYtzIZ+4&PUylXD}-js}+aq(@(Z}5p!3&e z{y%Y0S+K%kNAX!x*D)EKZSOiV+wsSQ7!GE|P#WXVwx=+ix4QETHZQIyZs_s35+0Y< zOZ1yiw)lj;;-5@$HFwQP4HY;OCBE3La=PVQ#EX6vCz#Q>sKW8h$c>I2ggVM@QZM7r z>*eSjH@qt&54*lTaZU_s6FQU`zhWdYw1|GGXF!`x>t*rG4rE?|<+>*oGM=d(spT{&Ib&=W_1}+NvdO=r(9uLl5^d`brH zav)06j*_2A)3%p`b2?J%87Ux~Y@{3ySMjNL$bpzj@zUxGh%o1x5n3HW6dzTjsPuaS z1s5`_nx%Y|7Fhegu~6OzI+p2;x6KDb?-H}rTa7d!xqBf?bq;xk+I6!Gcb7hAFN(Md zQ4+6T&+gWLVHRIt@hzX2!c6yl;7p^P*!2#7e+S>-tA4Gc*$c*wIjkn*SP?t;>G$VK zhZAAy5{JxV*x6XZO$A_eSk)Q#Yn@ z*X*i+@@{&ZczL5Id%1$O#k@c(GN1wB*(To}U$Lq|!-U<$^thzmy&Q|0OMJ}w22*Aa`do;?uA%p}q@^1I z|0kX^DtES9YzTj|WgHX~RPe3I>v-`P)b+Ja0R}cm)o}Cq*dS7T;yNUX#1+f8Wnex5 zw>FVL*8b0+iR2s9*AkMgN$#S2vj~(=&VTP;J3DC4y;p)nWrZBL0}sa@c571UXCBul zOG$a7#P1*P=Oe#OWl0ZJi2q>2ysr1{g^Y^a0~zIKKliuPDN_P6RP37>Dri1&=b5<0 zVaY@(Qlgosfk#U@h-ojZiKk}61)r34EP@|+1{NVS-&5RtJbplJclW&8JN`F*y?-XI z7+$F_shEjZH+j)91KEXbsY1Ax!KTdMCqvdkWKbZwbP+;eJEL1Ech}<7)0%tx*ZO`t zzQ1l?A1;|`CjouWUknnVV4qPIS@_a&#q8-Hw8_Hy7+UQJPD~?0LQzly^RSdJ6)|$5 zlGGgH$9bX|PtMxCO_|`FN0}KsMLj@Hj`Re}K zh*kL>db${;TW(j6U)oxEMqww2v_2CrPI+g+?KD_6fVZy2xkL)iu4pPajyM%hbqnte z73Lx?E8D@D1nAyx*XK8>qXzOB1#=ycdJgBvPH{yBucCg|I3z`v%=hjowFrORL^!o! zLAaQQjSUCE{pG7cx@^HJ%5i|pF3*oH6hIdbsm|XVyalyjGORlY8xX5m8y^%%v}{`2 z{AsuF;!JPH-ZE^ve)ZpQSNZhs^iHw)+hb4u5o1{!KVI_Iz&F!vYsHSso^Jy`sFAXa zK*{&7rXp`R<$=V2%}QJOWsAk^l4)6Sw`dH!-mF^SY~ida>0-5EevgTmPO*R&ADfjl zozrbp1Gg85^vCG)W8=%d!ozzeJzPyd;90`st-Q7zZcaPog6(uMkJRDu7xUn|;oZ)E zp^4*hexmb*T`@G8xo4NC-29jE`;%AJ4pk|^CIR+kRb->J5{e2bs9MfqnMH(5XTaJ( zymc|@d&l_7=GCwPhhHMgUrZPx(lIu6hL@KG)~w%5c)~o1hNvUwc_TdLqH7+g1enq& zV$tp4g~2&15|2_w(gQ?))=9x2T1r5w35J<48HeMKH-oTUpG-8}P8Xs)IY>!2!P-eX zP9c2mtR;ZyJ^oQWeV?QULZHsnk6qcFt#JDB8*3?078tJT-m4@%J7{~)m#kvgH7_&{ zbdt#y%=MsM1yhy17}i9j}F&AL?EfO6Sj;aIVce; zxd;@(E;ZF*qM{wl*z_l4k0_Wlp1fH40HNIZNYAKk0>&M5h<|8v!}N33UnqS zfue?q0NJkHX}L+Xx>%L!5O)yV#Hq_OY7ea_Zy5V;Ts1E3-z&xfuMV$no^Dd~ER1J< zlS#H$^b6s8((!3^o@95(YSL|B%iOZRE4JL%n0{!{L$M#zuBuG$a|7AwZOz0leI+)S zV7UnQct~BoB%|L7a&zClh0t1z9 zpDH}1H3K@Sva?To=iSu>@XJqq26kQy9e5c7j_m$nJAW+UuP0KT{AUqi_6WK|i@7e?6>^tkiC`yv)$k2! zYo_hY7=M=K?`%u<|8w6z^WV$U-YZHlI4J25TJjAv+31%-!OP|z7O`sp(9RHn3F0tV zQ7Dp>Jl?kk&#S1L_(GcwNp$Gqm4Q^wA-mtc2RxWO_yPrKI(6fAoov{+ZOP@Um%^AXnJ6sFW$bPC!7Xuv?stY#|!a~*pq>X z6QA|eAexffVeiE1!MTUgurryuX?Qu6#aP>vUOY{fRc@l?N`n>~7T0QAJWu13(Med+ zKPugV9>cu7r_6ScAR6MQQY<6^6)HgLi8DL2a2c=yd&AvorLlJ%GO9M2r~)qDBNIv+_w7nd|1WOH{d~ zY)rl8ig3`~{Pb$lJO1n(`23om;_)Qt=A0Of z6a9Juw%|;Yg}ccE@9(Jq{Wev3>e9NUOf|s}wI@G@+YVP~hb0-G$C$n6-2wzCIS~47 z%eRdpTNaK`vDF*2LOp5%UoYQZFgf|tB@zPfze@FTQugLP8t=co?H`mY)u6yd{4+hM4XgR+e+eyNgVp=nX6P zIQxL13hvq5RNg}FLr$)z)7{TAa~pSzKmfc+;K&Vp?%6gjor%WOVH8@17}JyP=r?o@?{68p1V0K0KxQ7yPp3T@0^gLOI;cW;%IkNw zhtzI^fdmFAEisa3Pet{rUJ{Njx%l;ydiLIs##$^-cKW@{uNnm)Ros=pYJvs*<;k4=b|s;WXCdRXXYz0l*MM&8H7#mf zxbFT9a)5k2b1K`jeIWFa2-A$A7 z#NX&X%%kBf8Z4<_IUhyYO{qzAXikMw+8&9QM0-(YMGD*07VRoHIc5b-3{pMT!0D@2 z`)IGx=(TPbqIkzxJ`x_=0~Da?{Z<}+e+Yj%c54?J><6;el?+&F5c{N6+TRutz`c9h zHop9}?~ZL-yL#Za=ReWlihY9_j1rSDrf7dgJVrncFjq4}zFofwgJKDJoNQ_o7cj3% zD9rH^%n6J~tBFsaeJe)Su$n@0NdJPE|MU8M(|m^HN@u(>R4@QZi9zO?=YZU^do*n9 zHYNTu<{BK843Uk&6U8c4QcsmUBbUh(g;$mu3_eUD|i)1Y?e7&NKL8s;Li|{7gD|GMer7V1^hsqISY5CIyx}ZI8wzkM??f;u_%m zY-E?}EB1!cyr01^wApHpS|jiD`$otvtyQ!7l3uS=O+2;Httw}8DcsZ(W}WVTxn#sO zZ@+F>zj70K@L&%*@4EpHpw4mIx*1=p$4@8?(L|;KZI~GC+8;Zf+|KZ^HG`D=Ju#MF z{aSq?f9f}{P~#3?^wu76JNDlz_3f@QS6drCnk<`rcjO_r1pH@q`-jm+e?EI^ffZ-9 z*4$`Ms4&AQ#pymXvm#1evnI(Uq6{T~SWH-i&R7TxXfGWy8S|d~da=VEXe%LvVUpQ( z_#Df!ZUfdlUzpbM@$fuqP9Lc0Ieb0ryZi1~Cl&&(aKUDNi0{rNLPd+w&Nn{XpC8jQ z$P1V6IEH9uFdT4D#2`&69eL%(G^Mh?dC8x~$A84&ekj(_M@4LLIJ`whjmZs{^BRpn z2hQjvp=0w-gV8lJO)g011v{0^P)u}BKZl)uw&DzBW+|h#9o~cb9n24tNJ2W_p=R|1 zcbH7FTpfBrK}83+??ET9i`XfQF9o(% zJmah58-28g;_ZHTd*Db_^rlv>ebiN{L;{Kvakhut>~UHA4dtPzZ6G4j=XP5jB_-L2 z2~rUO{eUK_dFL&|o9NHX%h2z*I}6{9)0~>abH#eF56e1fAK=FkMwXakk{;#-R7#}; z3HV6Etbm((wX+(yV()}LIj1-|_r$cExz%-@Jsp34uYVw`Z_L#JU*t_xC#)R2vEYZS z2Qf@>2IrIDYAFzH&;n$5Q@U{ntcPTS_7i0|poG9E6kc&d7%MGrrq+PQ+RSw8Dn_Hd zV9iw7S1H|{7KnGPUtvq?c$`@rFvq^X_x1bLALj$QXiqf9jSs){; zVb(`lSGuLFLV^FHlmPrva&Frz2U2ng{F4&)L>+1#4L7G(P_v2ah{ z>@9-2y_{5UdAJ@V5hi1Zu-R>z9XDz#-&!`sE`$Wtd6<9Dfc1LJ#VdNMn}sliL{OO) z`jv}v2gbiif%;k*^Aw{P&zWKX|Knp^lI*mHOt$pp)|fT&C7v#_mrsVD9$U#!#%j+=*I2Ds05nmfzrvf9{Qo6tot0 zZ>NPYKf3yhJMfdsFm$kuFmTWQD*O<28d8@NtC`v3_;UaRV7mpI?R*At&)(6pk-uU? z`OVcgJn^->lPXE|X}?stV4}cA0tUGmW+~N4YTr*7O*sNOS-V@0MK1HOvCCMeA|!p7 z@bH*DN;1xpKi_`>eAE;u3Pa44m51*gCy%}AoTVugiq{ynnB~Bt)nNE^mB)KvzW8#d zRLk}jzPCqB>`in#&8Ce%n^AY1enQZt!9<7H8>7*IJiPeA({jXuM2PYh)I26Jdf-~c zdSr`EHTJ=No?c;$0x>s~X!o@l_$DX*#@4~^nQDO(dJhyW=5|E*KF1N2A>hr&pUCSKHx7|3>w4(MkMgex zZU8V+?j<4>3Vs4Bi05UI<^h=N=7a@3ARy_fLxP%Mh7=s-?c(ThPC+5h=b<{~2Q0dx zm^O;nN)=LbUrrJO^*}x0m`uQle-y-YVcPem3 z@NE;`72nQ`>z!=+eBtkN6rj0R3h%PI;0q^MkIv zKwnJ`7L1@}rAQDTJ4-5x+E^)%L?(+*M!OpdD{jq^CI2!H#y{i`Qzi(Zyu@|=V}Ag( z7YL!HB;q_80M!do$OSpdNe_OiWyMc&Bb2SktnLl~1sd6dAa#L@8M85(oIUP zcFzB&Ss}j?C*ny=gc2$5n4{Z|9Dlp^O}wTaO<4D2;2U zot<6F-Kzrh#c~v$)yu8^PAVnBeB0%x4j6y6E(#N@<@+}$VwJpj7tJ$*hwk850!W9q zGYX1sItm+K4vs+S;3a1H%k|a|N%#HraD_NVt{>ocf{rv&4n7WVhlKC6|tg0S- z37%%BOQt4Xih)v?O~cR|2Kd|g8?>yjoPAku)ns)tZNQvhQ!=R?ZR~h$iuEPy_6z_p zYF-*{Ys@8au^)ylFn}=MaTRqz$9ClJFzx}rbv)l9L0V06boQpJiE${H)w9Mw&3gY? zN|ZdC@fOrF*FvSBuc6gj_^6UHtR2IK*JVg`v^=ZFrMOvNgYWi?NBri)?>dgAet8g2 zy$-=#?+$wmPew)V#~L=$R;xi}+0wUo?5+ovSwECo*{oAh8ltEYjjB3NVyPgi^hv|@;C;Hp#+6{3@Jh$Y z(^d1BT#5BNB1&!9Hd-Fe>h-Gf0&&6}w*-{hU-y-E<5nDe$fGO#I0C;pk_9_l;^M4$ zrJps8@g5V6Xx>JGlc+z5Z}K>?xpZY5!8Ti)do!7QCzbUh_A|{~L#{?&GBoQeem}Y- zm9*`Eh!>;oSXoWL2`N_0SworDxBMIzCwHY=LF?${ZoB7szErEQgz8ezXd2cnqviua z?kmygfAE`zAWMZ4yk8QvP&x8<5p$uyHZkn|$~*!TS;Mhx2CeEusZj)5kb{gbRaPIa zWrCL@jmkpS`On4kcyK^J~P+o z&_)AgM#Sk(8U}RLLo~#hs42hDWr5Dy`s8P4X>JMH@qmsP8R(-!1mwzAiL}x*r~DM0 z+fi8*qu9pt4Fo~I_s`dd=ilFPTtX?i$0y|#c~e979lR5i9%LI}!Z2<)VY&IxMr<)s z^>r@>ee3uk%jBFHIS8y)Od>0PQT>U)^j0^2)3<*!(?Q%7O`FZiIs7X|S;>~`E%es> z-}M(><^WLO{O;JZh)E{+_^v0Uu+SObsN2FJBC$TtJCiN@w%f*pQW~hcE+a8)1aeQtIFDsATp!A->7hZBA?$TK31|wB2aZ z1Nd^^B{BJW=WkKOYSq;*d2gW$7p{#ch44T5_#?zE{?MPD1viRAzYOg6*0V-rsG|Le zokUtsN1GWQgjV)GyYXFLqM-BhFA^*n;JgHMw)!^hY^lYrJw$TYR$$q#uDqFr8OM%X zTG<;Y+P8s)EvTGyYhiIHF%qMAT;4^z$8G#!mGI}}{3zeKlIy^817!J?bb{nBw)%5M^SILHpC z^3ZuYC^(Aykx~a5{NeVnd1CNGX6{muknJrknOH;mYYfC_PE7>H`IAo==rVGZ$RJR| z%QL(}IRvD8mq%=`*9Z|v{m$bK?1AK3oPT@1C@Nw7AB4Gn0e8GC@ZXfzJG<_|^cI87 z$iU$inXiB^d(Xf?>P;t5v}QmmJNVX$Op5mxE`ylx|a;1!)uL>Qq1&xtj24RE`ZH<<9AyX&Z089?V^c|LX zW#>~l8JwZyxTynCx{*l;hiAMGP1Ad#2%^6TljthJg>UfWgrGcgPg-S!4x^37wqi7s zcN)u>ycK*$=?z)Pd|m(awE`P~Y=Bn4Sz2uE(th~OqcSL0Hi&nwbV1$aCLR*BYZo8O z^EbRZPKC|@g(KAS^@Ik5F|s2^udO9mjl!zc!OHT1~| z$jvd(INF(+`&J12jj(5<)eZaG0YDN9SeF;U2yv!1tbFWxp<}i7hb@3B3!1~)0#g*D zssf#`86Z}h0}B-6hOFL8g3%9WUmQeo^Vbfu7tn}Q0kn1IN{VDTS)^dwI8+ZX(8#L^ z^J*i{7i(4`uv(E)%%NC%)303>^2Qn$ULchxS(<d@ zJV!_T3Tf{H`yvv*sLztkEDGN0VAQp*qPv{y|;!rDAzbF zmpLltIjl@@eg>r|t2$bGXVJ#3lzBbIH&GPuDunJFEV*+qITT^L1ulv$j!Aij^7b)P z?#o?Sa*;(-4ZTtonWeAg8nAa&M`}lq?^)?n50eYLdxOd7q3lL9oy?RDiX|%tHjE}R zP}W#Pw}T$9T+UPmv{ykH6(6=jbt2tA3^j0Xr_RM;pHTx^rGRZt0(wct?J)L<0#rv$ zCv@!gTE`VEE_Fw?@LWn8FtDWB1q`Alzx))5uu16%3A5+$WX)7}vf=C*+&bW7a&^I5`-vbaA=Ni0ouB^5JJ3S4Ewv7|OSZ@-2W8gjM zN1Ko{_KgD`JyNJgUQ1q&$ODg?%%o-Fz!%q{aA!508sy!RVIwQ?H8=21%NB8vD4x!I ziZIblkSxGphTtR~!)%RXQfU(ELyrb86~{qAx#=~YR(8=pP<8=xrxoagv`qgv(H_=T zcSL^6$V#kamuPhy{Sv$6FQ2!v_P1Z>Xn++R8ziWj+aYl-t%U82Bdf;KwO4Ffgsbc7420~>PbdD?J7m87ZGnCoM%%ajb zq6ja7$C&8_vS|bs$`paAOp1MOk&wUsI}gn8MsUEK+bmdF2u3YY0h>$_w2`PZX&Bh2 z3DmL)LKHHRYYB~z?a-8dvz|y>pdKw{CoxbDq-<|2D1xItwvRzjgD7zLVic#U9&C;$ zi>5qFf5-CBQg^uO6t3TJBQI9^bclVZPL{#g8F#EI0BNRCB6EIICD>U7;*9jC{W{VsqkvRl^nZUpWw?Ps7GqlE~zRuc(F zW#fjwFIasf$plXh*CZWdgSG}yxQPQEUuN%f*vsClLdj$BgBt+d7=G73LEjC_7A-nrL~ui>kwHl;kpnpT)M}&$a|AMI9!X5W7D>V9K5huU?=d(nvh|r> zkO=OGK@>mfoep%*Hjdl;qx&j$=w~sIIe6%dL26Vr3n%(1OBVCY3&1zg2U1(P&ts4 zs(Zd@JSII_H4`I^4-b|O^bxs(yXd@uww#uUFlKy@aCF}}&bcdv2H86X^h0i##iM@jk|xwl zA#C3+ama-~SR2|Tnx|*$Tir0i1yl~{f*|JU5^JFpug@eKLWp&CkN8` z2~brC3uF9-vmViAd#&2<>J`Bw_lT!}FuZ!MD*GtqGEv_^$Kr|HtHs_fx^Gcmx1H8y zGL-$73I0o9A$Yuazh&_1if-BYp_C%Ul~7_oRcN_%xie9I&nA#N37F@H=qGt2bO{NJ z5;7zY%twzQnUWBL6L);Sav78&@vkF8*br013)>$|=f$u`^$qcAoCsb(jx>oEFE99?1c zaFP?O;bjmBu1}1|3xw(U(jlG{s1I+J?(F>@6sZmpx9PV zKM}!m?|?=)9xG*OFh7Ksnc^?4GsFi`%7knB`8l73KCkXef_oonSuTi)Z_E;y&p03O zZ!!36J(#~4Wbwre*Do!*hI!KtavLAVd~M)i5P}bLGH4|13<#5CZb#;hi7yP%!TpI< z_+>-DIOZ;lG}OXaXdj+m8*dj*k)b`fF!ZCNr=|sg=7Gq#@M*=k8~Z+izH-@z#zsH( z)ZI{KzHY3TIr)VF3zqI<;Pp`H(Ay)9nRzI744@4Nf#Fj6An{<%FP!#cK1&QTkkJx1 zJ*r43eCS&yz^>74l(O9a18zW(zxg9@w*rTO#DV?sQqT@dA4IFPChI)9^AdX%rKH>x z^of{ifxo!*R>r86k+hnT3lhMysTWSLBT?2E1>$XBv@lraKG)=F7@=7d0tznSF7GNC zMg^bbZi*+eX?Dbq(1G$E(pu=jOAvq*Fh_Ij_aqD@`XSK+GoyHcc7fMYVa1CZyRDjh zL&vSXP-|B7LoHm|6X5?gdPAnQtVi365{}2i&08d>a@@j$`!d;t@V!FgJW zkSX+TX4rwU63$SE%|cZYy++HFhpaYMNLZK}7;R5@KJSKtjL`$j=H} z`W>{}L3=Ee0;!E6x8Ksc^~><`_~YjR8h#@wHjnfp(IumpKx5`bFUHbzy&w@IswkFC zxx+_5K)prmHY;pd2a94>)bXN{c$}ok-ggr#6=EyH-lL+`7or8v))lRy z%mA^X%vdmU&QH5(XI32~M~ICZdqIK|no)Hzjn6beVu<1_N)Lsk2_T^vZ9?T#=|4`!)N!? z!P!yXN$3M!P~G9PO!5e#V?8Ywz!~1+334h$gBFPqR5FDM(ja)SVX7s8wOlcCn5NF* z4T;pElrD2>B)=syu|{CzC(;J)A*LjyGSXFb}dre$;c`v6(u>JYlC(hGwE$rm`w{2 zf(zO>Rr??2miG`TOBKYd_)&eRCE0K)9uA3}Xv(vjgYFb||@ z2=Mp&e>VwBw(#W#lhm=*E0G{UU|*-HNs%GCqd2c|?qy3Z`1u>3IwRwydp;oe7Y+-` zR~N`=TUBn|oQjruR$9rBeyyllA4c$%!=nf#5m|Q)!rNZ2*U~l3p7N*TFBG@ru#MfW z1vLsXrQ-`Vj;^E3iaCFzG6Su8%KSur;2CM1>LAwDI_4VWc-v6<$+a#Qizm^#s;-NO zbpRnh**=tqqKIz72{V+`7107&I`3(!H}OJO-ldj4L@p7dN_6IBAdKgP=q8}~a+U@Q z2-_(Ql+|{q4En)zient66k8;1Dwz=2dzma#vFyo>ZpW!V(orY2HDc~>)#YlQlBka= z25jeofoQ{ga)pPl+fI#8<|&O-zb-b=)7KVyyX(-~)#xc{OA)t|5h6f}%))gOu(o&(ek1oMM6^7_^UAF0 z_k4D`d||2Gz>jF7*dVs_>*Z?8p`?X!p1Lj4Cd)5k8SC@e(dGH+5PcewB;si)hgFfd z7+!unzdY@dJr{#bTYGh}!?2BBV{lU!K|XdYt4(GQ%T%}zW!z*5hWwVB4=4K*6#q7uv@4ckjKkTuzOyDMaZNp`xEpqX zZqYytz_PoS!-K<5!=r+%nN?iX8)Yr`@!GF0MVcn0%up0qw^cJC^|h{vs8aXR>3EFl zzd`Sq66%p3$6{Oq{Uw%?=v@XxDccKHMBA?_IhC^^^c0Q8=a)lh@Q9HtBV{*8vaVd~ z+cr$n;d(a_@WG8j=v)kij5cX20i*q_LaViYgl7xw9;5&EIFIkPE#=dzm27Aw`z2dm zc1xb^{b1&GBf+|Xzm06Rp#9%^d=geL`3GggQ<^VYP+cAuwbtIT>koE1iro1E$Q0(G*#NWs74Hh_}8I zvQ&LhL1#_VtsGsl7*(|C=+a^U6>irsfpXtBU<9{}DmQ>65joWy2b+v0HEbs|phSaQ z-kroH`{?;2>zRUAaQ7H+_ruwr1`W`q>N=PZy8wG_rZLHH{US*A_cdyY=pEZw$2;8a|H+S67j%2qE5Kx?nWf!J_aX~w_{{c?y# z+4}GE^G75vy1KSKCZAfE zu&kAebb(l^^n5>GtTPU6oiqdAp(A;&R&&3w<+#2e5>2hS{fNod!LDR>^<{LMOl&cq zYCyqn(E0hrXkZdxvOub*TS3vW;i8B2GNNU8S|cb$^y- zUzez^pG$TvPR2=o7n3WXJvwPb@rdL^Iy+geg{>#Fx8Td z7QcWfLpspT0O{@UGrAJ)=*@AGc(>THXH2rMV(w_Qb=Py7+>s&f@)8@4j-W3px{;gF zt}B!`yHzzyKJ*GQxsr4ufP5{lV7hS7SWvrwaD8*DvE>OYtwD)?A)@iUbf~s5F4rG% zoDJo-s!*vHHyM!Qj7zd#p6r9-`)F?olG&3FS@zWF z6G!NEr8cW-4+02?i3lH^{E)O95*&)lYeg_@jtS%lu$CqZeb`^twqaC)!UQtq+rg;r>oAoUK8}z5UA+~ z0}9*BYooK`?r}of4$35JTD5KT)eyY=9a$}s8Z%{5YBgH1_p00^?yWWc2HT^^=X+bw z+SyVA-^*60D*I{#8-@=b(w;VFimX)Ha^>4z8w|Qc?R(n!?QecFx`(~*vYD9O8#9vE zy50$+)0cM#^W`nNZ0Jo%(n(BIS6b~dk=bJf-V0(LO|o0|8k?!D<=N_N+=7zz-4x~K ztDAbot1lC;s&-7hBz!w2tQNwx37Krd>MR}012RI6It^8C>8WKf-&+i)+?3s5?rw%m zX1&=C1nHcn&o?O07w}aD*lVP@@d~^(7 zk4NLBafzcsxW8QGB1s*UYQFAqnP-S&*c`M6x)AOD>Z8V3A~}88k%|yas<@KH#$~wDwoU3TS7uvoOVi4A zc$&-d8uwbfNbIW$==Z#=N3n$R1w4Jr4Lmgk0s%T7KNz!aiMPqvHjoXV7R;+iCeEEp2Z#nz_SS~Y)@XN!f@JnM$m>EGeg4a&d zN{Eu9Ml(L$01;u06A7M@cZLPi0Q-47nS2A*Hu~Nb&DC%OE8dp2n0Y~Xi$fQ5KFm(228n#Z zx#>Xm;lW6H;So%Ce$At}Ft#FVV#$^?aSXj1d>e#y)6fl*D7AoKBRgwR(5=Ms+eUNN z4H=t*aFq~?Pk#YTX(B!iLXhK?NywjpfT!`Q-eLZ7sVAQXl3(3Oh4hn8Q3J}znzcZ# z$tS8lJH%BmyyB0fRMG`(oSF65)^P2hcvq<-F}^MNd1rWVdGfh?crrXVySivsUs0vY zv-Tz$F{g!XCvpykU6R8&&1?1_rRAaewvLUcxO|ZZsRHrBeye4W1=EB{6?qaKs@J%c zBV(@wT?YE8Fj_gX-_1b<(s-56Hofc*qr@9gP+77Rg*-VJ4~0IWh^L6V_*)>o>!eaS zi_!xEA7|NlJ0KU6(cb@;^hJog){ozgrRt6?2^1HVQLin_Im1G>js}6LGhbq zT3!LRE(XugjBMRfhzw_CK>7@@dZ{=+R(iKCv0KcdZBSU7=ghR7k#!oZp%824mGsMO z?Auf9dsB3k(0u0x@NG@Cu)W5y^rE`jx6?^gS~dKd?LClXZVc+YV6Ce8I!7DBUcOf4 zQ(mrBvLs1b^*{W+uY2wWrBQgCd$N(~J*yc0g5{>{duPK$awFG#a-C0|6+cp+{*RQ}Z&6xC1+*nNk8a2By8l!& z9m}#hgD_;0@q|PuPnblK3MtT(XQ&_Zu>aG9&dELX;F(50d77m&&3KG3p5`*oD8`7z zDbFM#6TzcgQf$U9N;8&7AWH(J!LT*um5if+CM0A0Dwh#UsJl4vI%iQxGZ&4?B%8TSt@KBQ9=lRJtt{$L-6L=qPrAKyKY zY$lw32fu~H0a3^TX)j381anGMA_}01m@qUw?~XnR z+c6XYjUu)DQANbQCs9rvos#+yvBW6x^boi{Yp#q!IwmSF>{5kmM7i2a@wOtL#q+<`0$Si0vI*B^!#!^`pTZTH9F*mC}hg?T<69=t4rhzNnk z;MwY~X!FU>G>}EELVvz(w{bbAFaoe3ipdPcG?hR|b4 zEPUNr>QsXSGz-dfwN@{wU$N$+-+pgpr%I2if7eQ#iU@20n!5iT8%Z?*&t;mcG+PaW zx7syV39f}07~0*(2zHR~w-MMCPEeqCA{+iJAxTsdJQ$KnT!myy=N>?kK;|UEg{)0z zHa!!ok!%U`+m3fCxKuSP=N`rn3{cG_hT;h5oGZ-&XEY`(5g3jwP$@GS+JZ(?XHB;| zde81@f{4koLLh1iJgOL5;RWVu^I3qff?n^TQwFV3Z7jYuh*+R@TPV(A<~1exJ&Pi0 z)$Gb#@2d+=^~YUsYlFs;qOx{@Dg_RnXt0p=vhwc?y(}F&v(}@wMvle?)p#8JkHcw_ zV-uW5N1r-X_UY{q#d#!IS0B^r9a^gw$d~+e$6L)7}O4W;kj=WYOEqWxaV71dNpwhNx&z6 zdH9#Qkjema9NRMm)X^AeR?YJTy@8jqIKe0NV-I~P);_?YEJiF9c?_d-{Xf!kU%o!f z>n&)GdU~{<9jN*}LvXem_R%|@#YF0pjp^0`J$)tyhQ_by6jQvr4buzy)@+;==VBJ z^!w@oa%A_SZ)8(DznVM2H`E;7078bkrf6&!8!g?MGFtY=gfVA^LubpY=DVw2qG0l` z)V9n4Tfe?hx0C?}eXK07bL&+usHd|k0J0g+o=*HKu0WhyD+sO!H-iiC)^S^+;N7}S z+4HM}(4tll7*V}a)MsZ!36zKVBK_gu4vC>=uy{%&dDKboqL#lEXpLf6x3L%AG-6j; z)rj8h@Ub=5^#_Iq`XYgcn}87Hw_4bUBBKucA8f)J>}KxDj4gKQw~mSam=l zT+6HlR3&2plT)CwOYq7oT^uo$@q5LuNuaNb_H=G*5g#fO_JQu3%NDPy^Zp{Hx`~OEU9L0Ybis%htBu&D3{24e z-}_hN269YhOV^G1|2QLwi1a-%%JK+K;Uuf>la3LI64;U9fS!SkXGlOoyXcOlvZB!E z^_s%MR<*?CoM!b>NFxeXno7CODEM_x(UikJ{ZPCHWU#rwsS4Q)4j#q#EhM=yLw^mp zqkS~!{_3LdyZ>@(J3}r-37fLQvyd(FRDIRyt3}Y;RTl*y!|Y#OzzV4uB!W4OiBpM+ zS(1x}sBTLX5%W@1&5|eTEEvGK1ubGgf5}PIkmfg~Z8Ig{5%^y-_qQ`6o~Z*Hi%3?> z5j19{EG6efQ%=Cu@$M06LA?3Nz?cw&(AordcUGR#1mfC-e58pm?Dig-BQ6%%o!!{W z~^B6ecGCVxo!yDq0thuLxQ*>uytx!1^|Ihh1syW;Es8n~)5q8}4oDu}XQ- zUroj78L{2&}La%DSwOgbl_}6a0E4HQ&EWtGsBvYE* z0j?{-lA0hWv?_s+qOz4{ga9wMN?X`!E-n5lGso^xCsZwXZmF$I&>r2p8G;}z+_cIeIlv1uO-kXgc!0l%Qgmh z0T=~0u%+6HJ*;T9*-@QiishDCzT$%0Jy=yU7>j1#k5|;N9ADfmNl@=hzg~X2y_u$| zfA!#cib*q0vc*AI-fg=#%%DY0AoPIn3B(&j6qJjn5tHsJR{|nw$)c8Y)EeaHd+(!9 zN~$+Fm_{f{`-OOC8hN0iVqpw|8yhv8gp{mYF>MG*>U|T9MxHijMcrn?epXZQ+DLa;WFpU;Vp5- z{68BixshroeH_o&a5}Y1oRH=0Ap}gLEu@asDigUtF}9@6WcaH~)#vLwPTm-pBsao^+pS zqv22#^LI^o?8`qYJeJ`FDgB}j8qg;0g7tquU49o~7t?w8Xh_Ez`?nBHxnYI~r8d=; zX{~glyN~KAufP08fIl1E)MuyeY!B$36GsN5!EYnkXQi>q26&w9T3c`1HWYsMuOKuO zu~tWz<#g);7+8ur7|_-&(ztsF0z$FrM2k&&BAwJ7`rpTks2eF+N@O=3nujj*&z!sUuY3^rQn=@`5>l}Cgnt3a`iWwGWWOx_>bc_LdNu`>w@_jPgzK?$Avml znhybCA1ZN(xr6X7SgcW(qQyM6DSo&BqhM&U>#R^j2_Bv-!YOjxM1#AF6fr_^2(+Nn z1CEw0cY@%>2F^(YuLxP70K@qrxNhK7R;|*hoFI3NMQiDqRQW^E?=6Gq*5gXtGZuwk zxP68`GcJCSSa!HOSt5GrNcK7ZYK(9MS)EIFOKjkM$Zq)K*$mC#{Y}VJQb~4tKzLS* zBPrM{Tun(i$YT%i47?&&&OwHP1DnJ_Gb;XB6UM2?JYEH1v|~OJG;VWRV$4oCEwRKw z3$ydN@h%}TdEdzaFqKq^@Jl5Vpwq;M8a*&@6(T2s=Bhl#zepknBp62d*i>*W=S zhDUyiM^e(~3R?HV5gN{AUc%2vc-M$^9c9ZYSQ;2|Yt_a1>~TLgxD08CDGM;KTdmpy z0-_V-hM4uVy(&hfdXLXo!e-1?eKJCv(gC9& zq=>>#!qO;;NYsEJ2w$DNhU3Y*SEDlsA4Qhd6b{Gx1W&ovO+pY+Atoidiq=SM@b*rS@LKhC4zgQl{Ng7C=pGqGF+>jke#35G&Ua4o7!DaM4A&>TC^N+v2D-j~PR-`b!xNDaDn z@LT%`xWP*>qd@~3Pkk^_6v$gvlMO` zrz8Tu)c3Z9O55UQdqq;jG+&UQd6n?9Hb_TBQ@C*Yo-cOz^4DR1^n4)xc8z&-tIfrI{*$tTxC_)J-3$@zi}Io z40C$KM~#F|RH_LUo;6rUg}5v3;<(}AGwOh6sc)q_DM40q%ICp?N{&xY-hPy%pXw)= zNYdwX@$t*US(j5((4LOh=RMWgHSy_8rOZpl%rdSZrsaP6>E!KX)Ji+e^Hl|@UNe>K z?X8<`55#xfPR(1zCzNn z$koDYoL=MybB3b(AezxSji!V#w;5$c@!0!PjF087gcRNyq3F3$i0=4;7r&{wL0C5e z)s@lbkg`3pQ&Dd*F8N9$p21b;PP^oVmb#3k>;&W%9g_f_ekCN-#FG;A)hv!Irpfrt z`2AmF_~GR2xW%ugwyw(o#aHi&ZlXye~A8m zAo|-OJ~*wdFn5Qin6Tm^O5Y|m(;WDHsmVXfww=2S{Xm3X9FBLwRpu-(P{B`+m{y$M zYy1T)7bF0iDa$j5TXy>3$}HfEDQq?FZ7*|~*K5jDQGkc8TXQK|b1B(4&&pdKCH)__@V zKi;5??d}6|>l%MPyq5*|RKuryYp=WcBeo>%AkCkQ)0r^3hlPKW&@j^>9%`}X9T}yO zijA#l-z#(_VRa& zl;NFk&fE4WzP}~g`djpkGi^cN-=c49o(uZLSG941-=Ym|lJZY8Ep`#`ibg_-_&+Os zJCk9u>q@RK417HkOmT_ZMpPPPXamfWFjYA3ja!2ta0Br_9 zQJRE6!cqPf$yXQIKe%s?dwn@CsqbdeUjTD^Ah}nHBjR3m{sTp3O#!F^c$_ma00M=Q z)Z!A|wA93s(xTL2h80Q|dXFe)Z2R#1(4xqHYWg!F<(OaM@^Gi!|GV@a5O8LIMP%lp7a?q*RRXD59mi@pou|TNOg2bX?ghHlO z#@Smc^>$zH`Ma?4vB~GNCy(kw6&9DI7U-rVmL$RzKewKdd#LS2!`Z7ET3w4i%eBs` z_-7aw}E{#05VgB^5+GC7xec}FsD)sW ztwJ>NEfDFm_nI{OtF6Os-zP2kgFfcGMAaitOaB~3hkiF@wbcl5m_>y>_4*ZX* zuusX8BLOH;v?@%s4|tqSjY|%LFbqWZoMO(AWf!fwZZBZKkcfP$*a7wSO%ze#mB;hO zb7#_$*v~+1NI;ccK^Y$UVcm4|trFjXe$mArOUoPVo|Nv7Ln`mc|oISRfPGA%P)! zCCYgrJE)J}Cquj zc$|%mOAf*?3`F-m#i+;V0r;$`#M%TW&7w))4T(dHsJwvoD5nRfffCm z=~v_Zd*8LHd4@g<|6$qVzdYCTc-lNK^4v@-yBT<##gH)$!Y~X)_nzXb2jBpmGQk1h z0w%SZNNI}Vw5Yeo&H#v^D_J7>=fD3QCl8vtGgDm)4+xaU#Hch$2i)|+Ogruj;R>qQ zsKjLzB;Gg)Vt!Aaw9Bbe*VS{j*?_#%5c34D*oln@T;j$VHM9`)7T+U^@y+Z4&2YYG zsc#aEqk+s8nsf|8JG#q9567}4{`UA&1O2u3<^==of4sNQ0(hM5R#9)_I1ql%uNbxW z0IMdnVRtJbaXQq}Em9Xyp|^KBRh3B$aY^i)?Lbl0`|US&5(vAj_R6)=J~V10GVzRO zzM1cH4x#;mmvac?!5?ro=wI|c-CTFZy+OYP6B>~P#doi;)y=5$soQc6@e$xgQPAQ6 z|3PLPG*NQ}HBFUPN8ov09T*1!K}-pU1(P}>F;I@b1Wzc}o{e%LBn($N65RJrAyc#r zZ!QzwrI4=tQ)|5%oOP}?nLtfUr!nIc{m6{gOV^R6soKOj@!(u6c`Qf>B#uGSzcVIj zh;hxnkdk1I?#fg`AQl1U85Rx-LR=bXAy-8---9zriKgqd!_~02Sq4hWEYO*x*os&z zcZKpQ5FXedCkKE)F3`=S2pl^x1s&0%;vf<%pei5hYnsL+!0wi9f(41Q0-<%wb6c(2d26bB z6@31}ByQJFm29BBwwkNVtqoHa(^jML7>R@;wohMAgknh=(_)KpMEOz9VC-WJM=hi( zkZghkArrAElNoip(7757TGs0wL|Uh~i9yJ49s_tn&KfZ>PmMtEDVuqbPU4rBqKi)N zs@MPIcKg5gt_S_k-TrvgLN+&XPVwG!oE)=+afC@R7W9|Oz9l6w$YXk z#>@X`@2BRTu8<`nP>y1#B&9mE;ey19I@=xCM!oS94D05@y%*291A(%Q+d zI$?c`GwZg~11TU-qJEeXLKTQ45&YH(Q8e>!EVJu)Qxn7aQr z)OOiVmBD;0ht-(!@aRz)SKkSd+bCX{8GbYVW0}#)EVc}KOCbp67hEJIPoag8K#B2^eVvHv~fgoumbo z1JizN^_JPHsDr}izTAb;21E13Xg;XAqcLoW>5K2>x-h)%4m;P~^A_qTLpB7Nlz2?X zEAyS`Lq5~?d^Cy>-f5boLK3;UGot5hT4*Huc3;7$u>OZkde-3CHd|4>S2#|2yDYTb zbN5SceA$Bg;yd>PEW6=hF9-eR>koaUxaQ94 zn%~I8&wA|bcYN)8SnfRbzVGd8(FAu1F30w9;f8EFRZu}_FMk8mevSsKy*$f`_j29_ z?d?lpTaC7)rrF%h#^xIv-`M!Z#@A=#zs)bDj^T{~h+BA^tyIr%8$}dW)6}syKiUE< z0fF>r5G0j%9or2AgHyT0YAjOQavapEN}`E(oD5#iYKdnl zDK(x)j*mTxeA2=TDqF^Kbs0K9p3R}n0;nMhUO;s!q5bBY%*JtWNCRiWybymu6>!_B z&%6Mr9j5Qytzvj*ZJ<6Gjl%kPSfv9@?V{x$~O{e4DL){;)zskmM!=3#RqcVBZU7s@+@;%ffk z&Sqs@Jc)cH@>jn6blK>^>qpo4EUpz)?{r$f?}%Tod}YbmecyL^CXsO4F0r~KEavSc zIBB{LHWWnYwUjU->9Hh;l}LO-Yn%cRizIHV)UehFH1W%H@quZ|-m9gDP_E?5xk^59 zuT-jTR4ci1<|5y!O;MhahA~g8XzP<(5Gx_mSi5)L65LsIBM|7s4o*WJHHj z=DPI0D$wB2J0x6&DKqt+|C`5hH})S#dWyD|Vu{ z#B}UE@pJSO{e2lt%5S2|$j9tWW zckA_ys(#X=IJ|Qf3F${`p!sjapA+wk7gulo-ne@6(s@ko{1+zDm?iO}@j|Rd-|hpy zjNX_(*}kL4!@w%mb@g{#w)%P!#Dl5D(*O%^3Sj&T!e{7L>I;V#c%1v9)1|v%56k5H zEMm+?dPb9fuxRNUo9ZYOR2Ed~D5T^k7jqS7XBNcgW)>G`=B3AH=9Q!t6%?fc$zlat zg^;4s)XiF~DQxTom3k$q#U+zJin>m=<6q2OPzmDN*&69tY_8%dV?tK2*^a-P8BNEn z$sdISxLsTWf?S;)LtI^~COe3nMN-o|d8Vj8G9Lh)dqjcY41gPWoa@s4tha$#q+TJ| z)yKu(S2r}+)kQ}k#5Fj?)kQblGsMG6A*-?^BR|hb&zwtH!7DPv!{1NA(=Ry0(Z@$2 z$koRYs8B&8E3-t?3Mj9jkWo@nV5P5LoS9vklUbo_WMF8bSCpEVQj(FHlAm0xmtT~w zpPHwilUR~kT%uo`oSK(dl$kG5td~)eo5K|i5>3r3v&yP8GM{``G=K6v?!{t2)46~~ zD^$azV^dNKiZ}le-pU97XEi_M<`95Ec%1vJw^@6GDC6WSjDDga`4tMuiFpc1sS3&Y zd1;yHrA4VJlMNXcZ&qRoXPjKk63J-1`6|mLHdcj_)Z&uK`aBAgWrPhT>xj!ut`wHt z9LJ-`#0ruro}4IXFu9(ud2%10oUnqPo<0yIrDi0SrRrtoWh&@R?&X%kVaPfDP)1Bc z1ThQ&$|`O?AgITP-JHqi_@gEt6b;}EcJ*=b_tgyzo-8R=Jefu0C5oyz9_7g^L?r?3R2EFP68+e@CseMR$gC9F{L8abiKlUz0 z5M#0*yVYc74)M*JoLbCanP8qYP5>Vp3?gqZc$_<=eL{P~A7&tRS%@L$9Dx!Om8}&_K^{vYoKZy>!^NTVXZSLhc z$hg^`Pl^R-)1S?0!p)3eE7yxk0s!;ADG=cWfC6}&d!fBVbHhUB$t#%mPR?ODw%L-E zopJJ7wo?9-{PMh<{KOOmUEP$_;*!ZG>@7g?h{-)13K(+xII1T!=J!VOB9fg8QV>2*m3MNg!r19pD%!X{j1(hYK#U;8KCAm2YcD4$J zdWM#prMWt}0E=xCd8h(-oHH~qFf%bxNGvEQORdZ=(yPqPVc@KJ{88wTtI}W5^76Rq zGM^O&%IyFdj1Kp_k_LF3y;^H?+c>iQ?q7jYYAf=TMN9Hqbu%?y+nMp)#7E|ri*gwkXpP%kQslckC>@nU!3?X@=~ zhy5SCr@NcaVW-=_v_7gw6`ZjPuxZ(lVQl;g!oB3sQ=4#szem8L?Tn8ett9X zPQ9VXVxgj0occB2^?~p_Z{KqQaiWpb|UN_0)4utc5+qrzD)QzkQFx)H8#!0o!dDBGZf{LU{Fp-@9EsmQLY>%gf`Aq?L`+0zXyT>H^b*TtX&(7(x34>K zP2ylAZkHsBf}1TiOXH=8GnmkQ#~NY=e}i3hwh))gsh;O?ZYXrbO`67OQ|9T(NMQHn z_rdW9=Y=IQ98d$MVUJKo&oDxy$X6n$3QH)Nr6#~fx_siBIsa{%r=Q)FECAML#X&I4$JBQj1h_zTN{Fu4#e=5ML7yNFjuGmADnNO*sBA6ZBy@Z~UM?wruu_@_|Du4b>Hdzi zHn=F#+DUKlUrcK*`G_t(S`w)5H!*jdC+wic!L0S7B2JBf)4K!r=)ea;hH@l2|0*2% z-=lxg@Bi+!U}$jKFL9{Cdqx(DbRUsSW8)~?;D1P_Hh=I(f?p;5MPbfTP>~Ca@MVPf zW>NS9Ya<1*5d=pW1i+8-P(si;p_IYV`|A9xly#kMdWb+)%1B(R3=%8~0{b3n6u z0`jfFNb)fZWEixw=^Ox0%J^k?*vIA4Fbd$-*Ssl^2<_Ya%}MtrRD?I)Ql`%nCjjAr zq(kT6gCZ2+ixj5#6Ypj{YgFs@?&|*ihs(#?zrVY2 zXffhPq8cr(Nas0in0$JiAzYXD38hG(!IY7PiHgMZOW+=RTSDA14L`18-_4@^9&oUw zuw#^^NX(GQ8Kw|X$b4KN*?^uCQD_Wczi`@-p@CLFI>})+tWq$CnTSAkIaOO(cl?!g z`JmwB)qYot7#_d?NI?uQNmr@Hqo|i8Bm|HRTiV$eWL=BW}Ok}5AkdiS7`zj{~^!;H{buv@guf!kx?s;Pl8$tSliA=2Li+1HuR9;dLBjeqQ`+k4#i2 z2|)!a<*yFejE8(w7R*97CBnMAQH#L#=2N!IXS~$X>GqvQRJdT*HED2rI8s6ph z`-pLHse^jkq}+NIudPes1IyJ^8P2SkShb*`RMAOxa>O+#8;$Kj={R+#-aa6|%QHTS zu#U#KMd}FSXil`+7KnN3a;&Y4z%kgN0-4FW6IxH^Ldgy={z5Hf9jWU{kX_SNSAQ5P zRxXu{RPdA=b@Np-v(6<&C)8|;<#!4H!wM1wS1YE*mKZ^usEkag=Zg&NHPEw}qI##y zcW%K}X%K0%G5gIm`V|4U$-yQcs@^C=P?{?0mnu`h5Ck@q2RWB;~Pb0OFp=wu({h>8BXu%96 zto1u9-XOXQs70~mBel}k!q0pvp-N8N7Wt+>2tyH zr^ejbx;Pz*k5Qz2N|vzL6_^?D@4Yn7pJht5q@&ByfSzWq-#`W1+E-S40P|F8v(*;Z zbu@S+6xSe%G=G&!E}XKJ_Suze;f-3wc$RH`1~J>}|9z$LZ~{ktgaE_{wO)z>hYG0a zrkCI(+oaMqKp0S`SnnAWT}SN($_e!#^jfG0dm|h0gSL5r;6NkrsyJ;1(DBL05zC45 z+d~P~l@{L`8&%)eY&iyeUB}VuO!!>2a634M_aw-P)C<&+8#@>bzo`Q?#BQ&PCW`1> z$%OVuP8h&`9ZF^J)bqa0^FdBqw1MfV7*SP42fZExL+vPYvnv{tuZ`r zOT|&YUu3IUHS`AOMYHOtH|+nnnpG%P;GYfMv*Yk1TOU8fE2_dJSV>?@RM1i2HW!=j zj^O}fU$`X{#7kS!z}6JsDsr~22_x*s{6&l!+?%Vc3pVRXGYPbh&%DPF#zx7CB!u;v zEMj=(EOJZbYmfu0o}R4LJ))8_dwQb#FZ)?rx`?E`u`O=#VS|;U;x^3uVMlua$Mh{2 zdupxxJX74rG}xxY2`+$(++}kEQ;Bv-LhTfyvrYM@qc($e#Fbm{C~|hxtlt0|gJIco z;qDTQ(QHg}aaM1~)Tf_;uZZ9aEFSko=1F{HNEmx%mxs#zu7{w_Z-oi>0DGrp6Xn9Ijh+l_Q&O&lR5oRu5`!_r2H z0<~0WoM1S0mn7srVR^sRT#?an+H=>u*6ifCG52vd4#jjdi%Dx#rGocOb4Lm5qRt6A zm^@?Gd@E-oAhMl-RL#|z6OX+=txVVua$H6y?H=}Z=orK<%#f%wpb_;cUu{q+X?I637wl$hSa(sb^rR? z&BOoR-c7FV-`ziqQ3bjFqj=mTYWuqKtUqe^Y^o-gj%mP?;rY%Tqk%T0T6P?5yeWrwLs`Qp~Lq4m=< zOMGi#>dT0<2lvqS64EuE8q-cIDv;Uq7X{TXl;Ul#-7(cw6QV?kP!&Pq;0Ht^x&M4Ej`7YVJ`6o!pj z=oF6hx~09>#j7P$4MZqwvndmz0t_&WFo{06IX$zmZU5(;m=>U%(AI z*f|vw^cs(4Q6i;APNU-DLF1?&{If# zyk-`vg)=huB_(Y48b-0Y?V=b(G&iGb@M(%n)eMXCqRpKu?nC*CPuC<(-2~jaM=#|d z`kS=j?2L*ghZ?@E>ReH0Uok*c*KsBe zTC7T#K65*{DYeh#*fT~}g)1is;1M>s;u4pdU&sItzumlR9PJ#saUA=oMZ$fqBH)#8 ze&&YWFpH1u%OS3{&(AzNpUXLP6guf@k@i=!wgGo`W{N=;{DmgM904*r zcPr@hbW4O>ohLNUzI8*cfr3T3OB8ko(q2$Nt0VShFUbw46D7z*D&bs1DhCHNobOzb zPugV<@#7HmTN@VXHO%zls>u55MJ4}mhoc$yQBf;aI^frY=pG397yDq9(bxyIvdJQh z=X37b*?iVqIjFtKLr*M?47sIfn#Lcn@qd?5PTn&-`hnKB^vxDDQ`g`qgV>Sm=8cHg zm==;V(0fttr6_mPNC)mdJr#E{jwL=l+2&TD=(;l?Nl#Cc31zOy;8`TloswYmv+Be+W*E{7fy5C59^HlOZhkHGwxkR?$%LwYxkhu#}A2^@mc7~1Y z1EDg%xlihcaBkwal7A{&8qL=|RfI7;9g6_v$)wj)0$%x*2N2=#mx=#YRGhrqXR121+&Z=qFK5}p5D{+I<77D zMYprkNoU_)0NYnPZ2Jfsw28vqCDZ;Qwc_MXN=o?~b2Lwkm1=3BWU{CviP|enHmBCfnpU z1PG9QmiZgWcdDvMc8j*}#umx0Q>V`3JKs6g|2q1=fB)(qlfOD@e0~7jdf9gJ334Q>8ODR+{}@CZU>}ot;fr-sxGN zy_O3W$z;Yd#crWxBJ-GqDlkkY?A1L_CJO6$nh9N#I+9tI2))0lR`1x0%$BJl3A;E@ z%rmSuO>MGW$S5|2@X=YLE~D4AGGsDg6V2n8Ym$^sWu%Nsr%Mu4)8(GW!f2IekyzG* zwfpQM$pj>2f=y+T6-*^86DFe#Vx5X?*FLscaEQEO-h$084I4}S{N2e`mFSlr97LmKntfu z^$@X$g>V~4WAZ}K0m>bCDxGjdtRN%HIE}>mKzk-1#n92qf@c?*8p))paQCP#PAo)_ zXJTkFk(#}IeC8y$9{;iAqmjz8nmCyEJVerMdS50c<59H5{m4%p2{WJKkGf)~Ua@uh z6jfuwQ@|df1K<;FvsUyATaYcul%4J>7QD*`UIau#{~4Q0I0rFg$e_P1e$#HA)a@Fl zB3mvF*pG;flPbdaJ#omI%88t*h@0B#cE6};E7$qE9RdyjtOy6#zYhuRqXYW)*vWl; z@g0m4he$qgh{wiq(nvW_ixg^11eS9I=mFyoN`@@V)2NVvO%eAP0*&y2?X5G%?s8f+ za{FXuXI-CuJiZPJ~&*aUE>rVxjZ`k_K1boL{{hPyxU767TqAB8sp~5X4jY7s=!7)*tp7 zg$x130-gY)=Zs8lecY_pwv*Bys4f}RGlNo~V#Ls*DHFNf6GbJmdTki&*0YZ|k1|P_ z%TcR<**2_f_8JseMsYhKw5=uYw>*(&XJ=Kpt+TaUZk9=K`1kfdS*Rw63Tic-(86O~ zUKntlR^$KZgb*=g5mGki6KI$rZ$>~^LYddDAg}=WZmRhX{G)o@&?1B4V=kityOdF7 z?QZEAas}rW$%E7?A^5Ku?@~^=e8J(C?0{*7u*qhLoJ_N-o~_RM)WRS-Mc7ECt1NG( zLeFGUz>~CBK;-R#NBI-1RY{_>iKBxu1dm&_T{e6ciZNn0a}a=C90-kNBsQ0H&WO3> z3HjfK6+xOz@Dm>swd2+_WEnUF{vdaAhj+co-t9AZ;v1!qT2ML=#!z`OARZC47miSg zMIcfOsD_X0$15Imp3T&QIbipon`UXsb9P!s$eY*KH<#ykcY~YTD&_6jF1w|`KUFe#-&h?u#z@JbPfqMPN0qO1}$Z*Q-! zfO*yhHQ*I-pyuG0Lc=OyH7mf!3NQR3f%8!ltR!fk<|y}5K^ebhI9yY1M<~<;tkpEx zy3vZMc8R@#?=G4)$JPN;Xfbw_pPCK9gQ<6V?_sq>#4ymcxz9I`g8K4BuV8W5Q|F+z?f)EJ06Gl~`GykS;eu1ME556AREHX%7_bZ%SAR zSQV!!5(0gUM%p?lZ$IF{8ygAE)L-KjfmfoyN1IU+;%u@rcVm{ zU&KZTy{zrgE%!htMSX!osgYJQL0t-kaxlv@wUqVlX{yznieEz|q9*l-z};k2K1NtS z2Ptz@HtVFfIgwWBqhkO`o{di(oZ5rExW2SYi}l(W*LfsObty%9-3SI%0Ho9j zYBbz%P|- z>1BPA&~3RYl~x!!feTVI%0ru@t_ItfENu1=MmHLXYLrJqQkzr+a{ROzT~klbth?>n zFr#HluwwuaM4f4a4h96ZF=n@;jv1X+fmX}WZRebAo#4k>9}kzLHpUy}Ktzi_@NjNxaarv09|WQEI!mQ&3l!r>KXK8G5O}c0r3aw3NA;{Gm8Ow-kU-gfx-sqg3 zx^twKXs&{ZCSfGzjr*R8wJ6EQMhAE3kd9nqc6N4t=j`2Q?PjNW#P&L^_EDqNZgkr; zm4Dv9EqfmSpnHzDH|O{J&Bq_U`g!rj&UGToAV}YBQ~Z^k(q*^VMZn>|-mh_}V>{ZR zWxt~U2hAwqx;jwVD~r@7ucV3Xd2##l;sR|>7Bovyue3_HY!4tkau*HM`w$8`BPJ}jmZU+Ge4E+%5H0Vr1bS9LB7)r>{(UcQ|O%u9=M8C!(H6bF#Lp!4|IbFXj zQSBMX^@=)_Nn5CLDO5ecnNQmLPdrmva(xr@V;r(=eCDSF)C$~b{vb`kUS3q}W(l?t z<-it)-M|BvF*TG%_ZlLK_cu2<@xw{qnrP)_+3oe+?~qSsWZ8b~UeL@H0^CnR@@Q<@@MdbAcg))cpSUD$mnfMcJM z*BUAimhV&HaQawl&R@1yEeVAa zg({sVHKk8mg_9CXH;EhxbV`RJ2^#>eneTk6ZDKY55eT!n`3UHq)oomAdVK2kKnbt4 zq==DXYN64NozNxNPO^51nkSK*i|Wl>=cq$CySgpK7wvk?qqmDHi`r*TnN{JEh*_de zoparCqi%wOt(kANN_CD2x4YE=bLYrkvem{|-(9}juaTRo|7`?=Zq-xEzZJk);@Wp4 zJNej-tEfvvt%>V;$K3E)O|9;_T$ZZ}I{bS(kz7rMo2vozUQIxI-TMccn<*`hsXkja z`qccN%I9OcK((n+xZJQIORWk)u$$`ap`Uy3!l%xTu{oNitlJpT9Be_d1)`FJb+{#=a2VY}4Vhs_4W1MAoq@O{z7eq`h#0Kfu_|XVT2$4c0mTPv>7vn? z150X`PJ=(zl{O&_(Lv|fV2!$r0l%3GHGm+a%FsPGU^iYDqcN4Wi|#X za|uYHmcN!gu7k3!_T;?VT(CX&CI)?NN#n_ZZxMEOK)Q$9=n;xSmZheDcsRkTeAEm+ zsQA#SxB4$qqeEm6Ha@iX|B09nA!nGZ|LRSQYv00D=+7} zt`DVd4pu{|3ms8mD5t-c`V{u}{gvb9GNRkW(3HY%sf5e%(i&BkeH)P|0ws{KiM`Lt zM~HrOl{He|?jcE@wNFkwwZEmx9lOF}=;+_tO@gtVkM}FTJJ;{Nut6j8Xl zQq~ReT@>@kF?>f9bAkkv=haID{v85G$nCHA+OpKLzhJ(>Se@M6It>zIFP5lXun^<4 z^E}PIlK}JDFNxd!6t)aFQR?+&)noM2zb#s)t9Jote7v`Bnb&AFg|~rdlIP?tO*4E@{paq& z_PHCYya1?Aw8|6jNDDSqW1iSPk#Nz4yN~suYd$K^o&xBLfdfpQD%5F}PKCcL-z4^? zY>lgX(M*=6rkisgH-9MY>Bo91c#UOGURx3d`^?Wl_9FP<85D)9)I=ApBFJa zO)pGM`~-E8HSOL1p}k6|E`-UhHV5>n77xN+uOdlNrzQj%_$^d9O}1bdO=@U&XHwI` z&G6d(wGk#3G_bMgO{rkbqI82|0a1Wtpz{F7cm8RpzJA9uKZ~K->8F&;C~# z^I|CK46w{+c$|AG^Ic{GAERhyZn|D^MrLYGO0iyMzJ5tjVp(SKWCdnXX1(IF$s3u( zCkHYH%A=_&s4U3TFVjy-%}6Xug{U){{Eksi0h_v%TnvTWlZ%<;uo{|!P`h~}Qw;}y zdTNP6Nk*zdZhmozLVoFH6K+Z7NqoFqdZ`tOxdl0?TwDOQTt?_Sc$_oTGtx8DOGzy= z-~s>-1_GU+1$dk@G%zqTF;R$*&&x___~Me(0+7P*vEd9p`&-XD2<<%R_%MC?Ntv6{0Ndao)Tjk`oHH~qFf%bx zh>y?A%PfhH*DI)GcsBRZ>`fQ1IeT|&t}Bnaap*};@I*t1vf|{_yu_l+{P@JulKi67 zlA=nG2JQMOKZU}gy-hmp%@%w-xiz*st{(t4+$93zIj;3+c$|GwJ#W)M7?w#JS`-SE zLOQj2k(cseBLR`9+ajXIRH;H-5etdQGVz<%ihZ{3E~1(E3zbfcNHDUnP zP#gesa7Z+QenQoKO3_GCBp5(KkeTDhrF+`OwKLSP4=g+~_g_DtWSXACJXfF6q9b3Zg)e4DTD>FQYr!vNQ5Iu`6ZuHA84jW#sxM$_1FnzjWk z!cy#U@JRr@2z@e4A@Vs=bJ9f@f9BhoKHe*T)%wx{hQoX|4d@}-m7_!13Pu))O?GC~eGBn9hMZreQWIRZQxy-3l zas+l>YvtZsit&Aw(9K*#)?ZN!#IL2=R=$6Tmm#w8m&Ja`d6rTs znDUXT3{a9(c6f0T;Cj~Jj`cUFn(On{XD$;zMsZwT6DQTm_{nu#e5EF=X}9g&hHFFD zeQ7sd7&~pJ+v@B}ACuXbE}w#2VHRt46epEc@v%}9WM%Udl@%O>=>mfhc$~Xq`rc%M z<3^uJd;-BGi6y1QdZl?OscD&csVS2c`Q$fq@Heq-{wVsI1pr>Y5AyB{Hh7$SZ*s$A zLfXdcHo?ii1UFCKCbVaBwXiGW3dK-<@nn9{iIZ1~ z8h9x{fuDbftCfOZeo<~>PEMslGLTG7QAkQn%P&G`Q^+hSeN@@;FQ%GV`PAXSgQGTvMenDzcVo81x z+`N*KqV&{~lGLKjml(}hIr5A33KB~)^fq&_+i@{!Om-JknA|1EwYfm>5A);~qK0DG zsgd z0w0=r_XqUBgb(mf{1%r*q)R$)bMCq4oO@?}gx}*|<-*9YZD3p>A<(C1=j}dqAmGEP ziehO%dPu?p;%y)ge1X6a0}McM7$HO9D+H-2d4g&jvC(zevvWeZx$atQHDf58soez5yLQid`+)W-(O#|eJpG#Pu_Tx5 zl9l23ma@L79qB*j$^8>B^jWF$6f(HJWtjTl(KG#ce^1wH-}K8OE)QQndH5HD2JfWj z27*_3oB?M5nE#$^qinFt0h3JvM3Mp(liLAp1axwFI+NG}W|L9_69ZIob+bGJ?G6EQ zvndj15hEiYEiE8$d2DHJbUGkpX>(y>Y-K%SVPq|LXlZn1b8ul}WwV1LLkR&2lhG_2 zlh79lv+OJ~32NIU0Oz9yt&4kjoV7Y>Y#Ud4P%Oz5B_5V|UmA*%sEaZwk<@9+ltjro zs5?oMDv?LxNSctEQAmz$ISHHviroU;O=3S3SfE>@{na4#I=d)Z>^4Q3?l$OwY}%l0 zwn3YCjkG8Vq}l#xv0dkAXE>DSeQ#zcchT~Pp!dCR-h1DDy!WkFYku{|HP=H_q$fh{ z@L87I8>JrIn28Ka5Tgi>P&0FjX=*mTlwM11q^GILCq_j~?lMy-ZLzUoZtI9X$oC%} zQCHZ~J|#i=j}G$2-2#6=ZEfueC85A_HmFk5-H#1!a!(P+%moMlg- z_n0Dej@mRn7p4p7jL&vvQ-~(x!{Mj;jFkLCt0_DB+r}Ql1HgV`r!sh{F{TWL8>7mg zrmh8rjNXo802Suw113C5{jv~F73ght2jAt(#?c04v~E17EcBI0FZx~M6b6{Eqkn1W z?ow91vd?hx%01x+t33FjFO1GJYN)L-bovDmJG{Lok&X`g8VrEy5xW_^-5*zgpV!MxKO> zc&V>R0o=G?M{h(bWbM!rSxs~J>i17adX=MW3#A8KqlEAZQ`o$^JAmWgb2&^*5r@2d zIsvKtq`v#27Ijl}iOvJsq}dXCxiY^a&2L_1qWJ2)r@c76PW04iw*vURdQ9^y4UUHJ zQ!=H+vH;hbnw9C_GWCRYDNW@WeAgFDA?3pv69ox;xyjJ3N#HeRXCGhYFHIgybg^Ei zT_i6iT2w4Cg5!N<(uH1}x1yglHTzX+iT_Z8sTI?l60YTvyyzT|Ri*`vnT$r6B}b9j zNr@|#6fOY~?Ui<41mBh9%`%rIzBp{B8u4+e-37)Hll~}V$$(WAK0VIli~Dd%s0mX? z2L+nhBX+&f;k57sOyXQ~y94ZgBjoA!ENY6Q%w((hs4}X2pFr}p|(=^9IE&vu}X|4!_DN^6WkV^Bh+cvAO4(p<}CBP0O zCzd3PLYWuni)26{B|3}^J|A)^gIhs|nSs{w!B7Yq$n20`)635?g#+l^mWG{}g&Yk5 zV|St3LpBAFI@N;uhw2r;TSKl>(#c=1!4CUopjBUblj0EDeI@EffA@%0`S|OPxDAB# zYMa1;YaVfQX-h24?d73F%QE9hnaw}at?com8f?SOfJ~47RJ(<61L#+3dlIB;P*X=* zl}w~pwVFt$3MP^J;;GI-)h>$s)^~WJ$Y|_wr`BOr0pB>)q1r@Zz<-^xs^FYg^U8nBtmTW;#nc>uROVLC zdeaL0Qc<17<;AI#`T)2AX`-Nob$1g0NGkOFx&;D7-_V<0QY}yVyT>IQiJ@Nx)w+2u z;*@t;CWi+Zvy!Vo)n=L8T#T#^_<8Yi(-Nme}*{Hk%3_YEwIv zKWX!p)hl&2Oj;Ol1B5EIiEflS3e)*~8&qM@)qr(GHv`6BI~!ck$q6<@RphGW1R4lB z8G#dhde#K?-9HOG#%E^(wNm)MamlZE-{)%F`hfskK%>87oxyV;v{i$J{b-E~1dSWN zW1ZKEe(B<&SZi@5UN`7#VTeRJ)Ip>M-&0in8?V%25tmf^b*7T;Fy*|s=?Q$fx6cH- zbmIKXRrv(pCRJ@yVmwOEy~vqt0y~5@sJh^jToQD_cEOE!EE4?s{y6YSg>5g z>hIR4dP<EAU&nWMAjMjfG-c#f@7^)O7a z#8Nqi0kp501CaKwnVT_ERhb^kf|^Xs{7(z4?CQQd;>RmIB5rKZLa_vx^71H_lDsn5y& z(him--Tr(mG6E&)(Xj)8gpuP%`OU@x@*RbJ1}|*V;xX=ULR{!dITzWn#$#PykbD_j`hd{ zvRR41m1)AElU{Y2F46^v0qNeL4_SPJh!tb!mlh|a{CP`5w-)7dVtnJ6B0>5kD}|AM z%K~d^&w5U-P^cWw6`4a&4_lyzH8UkPM^_>!TU577wmhC*p(>$iaI{lhm?69u_5m_Y z>0KPRFYM9@nW9(87V`{O%z?l)9S%VuUk?XPXs7*V*ooU=3o?d{xGlC=uVxu$k1ibZ zpqxcCrSWZVbvpZsL{g^;JD_LOfN{B}AqZvtbwis1xMOg1Yx96D(RoqsM5d_GZupr2 z%T%5=V9H==@W@L2jNAmfHI8*cR#P@~X~uM2n?EV$Ug!PU0AT3N**48+x4;(|=yB+aI5&r832r_=+i3vw zeK14N_Xo4BGJSbDO`ikacY>-oy5adC<_&HIF?v22 z3YbS&(9RS|Y!>#IeLfFriGQRpqyL9suv){lCupxiN|xpTcP4^zd&=a)4mLq~&{e>B|h>sz3+dIFiPcu7|!=e6t%<$Sd7Maq)w$&S@w z#T(%0Vt2nR`a{i>$K88E!b6nVn45XcMO>%8Yi-xeZddq1N!SyJ$nAFfFs*KNbweA! zGw902G;Lix$&ZZC@h;6ex zC+24*scowr{~sX7l7kpB&Qty7!~TOsrp1q_U6vIK5A6zEL^x@l)ki?99kwN%?jKT-EYUf|Id#0DOtpVxc_ru`nVp`OIf4w z*syvEwKWgm>6QHOV}Gp)-L!|DI)_8ww`0laXErRT-A)Xf;^1QVZe$3(Xsfkru7y5{ zoOfue4SL&_?0Fassi42woM_enf7tBT0^e_L$NFe3Sc>^m`>6gKln}bRvVkn|dQ%(} zaPngmBPup`V0HTmFLMkwzsAd)4qN33OEFjWM)(tkn**+1rkXP%yzsxzV`=X9=85vF zd)|x%3ao{l=P!fT70?Sy(^5eSeCV@2yX7hqE0C`E#d%C;znsJBGwH>~o%x0)nbtyN z>Zp)Eeu`uQY?0M6dDd6WR?vR3yE?*+WRh6-tBFnmayv2Zt+EJOoQxuOvXS`eZY1l` zFMW_VG3M5veJl};!`YKtvE>gx8R+!rx!lThqS|y%l-L&20H(0bs_v*L^k>PqnE;)i zobcUwR%jqv>z2FxhHp@A_p`|4%dV|JdD(2IpFoYv*4u`HvsB088a(v8KmBOnJwP zwI09W#bU}GFBWZ{^}>!Py6Z7%-jrs?&9d|{mMKXiSe8Cp-;SLsp3!SYURhh*Y+b*OJ%YzEm*-*mr5TWz?x=)U>uo&&tpDK2UO2_ zsk8xod%*zU(X)M$Woz4$w2^x*9^k8#u z@pb22W$rN|B|N2J%xFN-?`MfUqPz);=IsK0Udzot|I6mj2w@PQTRO z*K&!xx4ge3)(A?o>DzkUD2=AwYIR<8rG<)xVHgF^PU0ou2*o96cJz2OoDsv!W|K4D zTBqx>GkyLyW$EPU?f|C>!bB?Yc%%r83abAB^$%b<*2_S>v4py^m7edO%>VtYZW~51 zD%*y`cIWZ4cK^QJIqp4a4~`DIF7(}p?sMq12c1W5zXiw4FM)U^t(=XsEH&WT-zx;F z^qWKQF(3(>tBbEOk(l2GoH2fu4NgWhj#0IiRhCUXIO@7B2#}~m^VSegso+tFk#geM zIy4YGgb_~2sg@06E>tEk%oK-(;+|Ls>xOh}zy%KVU(n2^rAKF#!s(m+n^jZbzG)Q* zvt?^-eDQ5}%lHMX&`u2K`UI?pCwQF2S_^Pn)tMg0iS5XC?D+kPeIm!PWJ|K0KoZp0 ziJUmZd039EB+a8Z*V2)F?JHg7-m5rXn3_jgwf349m=F#v|STob&(x`Op9O{&RikYWl%HrvIR9 ztd@jEB{8TuiBD98eu=hfvTP3s!BIPsscJHt%_h&FsFHx}3rm!Q6nUTMqbkt`DWg$| zP>BX;P$OPRP#Im&h(bdORT)tr{d7>+7oF=gnHq?bPjv2CM};metk69Pv|cX_3W_LC zMstTXrc=_8Mnmk`;czfb50tJr@J#I@Ngfywg99cp5Rw&*h#FOJSCVQFG%-LA{Ab-T z(LWPypim$6qbQ%fKP*a`7&Q46IS}26gYTrzD=U;l8SXYkS&?2%(88*Xv2Q#JXckcpdIyEz0QEVYq{Xqsu`Fh5_Sve^sLcrt zh67O_w2TO;pQXGdPERns8!quepvPFNVAvGs91 zP?~p;s3Ccn28k4%M=Tw|0ZCK`ZDgH7(Hu5%BULa)ZOGe7aIYkc_BFWqWrc(U)Q0Oz z4Rwj1ZA1wA$e5_9WSEYQ$cj&O5D(7jY+2D2m&d%w;3lT%7MmpMQrUX^iP3-oACiMU z^eLIkjm^}A0fQT+25oRPMc>B&qrp0;ic747{ zrIOzfTLL>DE`~k!QrO&_6v z3K8f16)M$?3CU_%p>lXLJo&A~(-q8qMZn<1nrVowC7WG4+B=-Od{z)Oi*-7slE)HE zfWEv=zyxiAn~s!^ugtJaRk^S{Yt)M;Z5O;=if4J#kus=WnFoDGNHSpW4dc%89JvsHY_Fggf-Tt^&9i+ytMtEpbkz&IALXUnHvtrK^^~vXvX)g_U>B zX2RgsZ&!f0y#S6MZ-;kQ)m5PMpsbNeM8HM47(T{mKYD5|Y*^g^ZRav!e6T-e;cXF9(;*So z&MasCRL5doz{wM(MdPp~Q00(AY#TH5J`+5%@;0!p4RiExc&$5~|M=|2idphhKEnr(laqUCSrn3g@P86h5gH!ou#d~%D&l8+d~BMW+|UC>b9{xB;G`41IG$d+HE#mgR?-d+yx z_pE{~$EtbByR+91!~R@oIG77_JPQ(Le%9lJA<+Uac-Hc>nzMCz8g%}l2)ei35C6Wc zb+#S16Irm1@@G;H1+fKuI}7H; ze1qe1?yj)&LQ!gUV>*m~V2*|3L%TMmc*RG%7N(ZEnu%6rZHAqhR+90!NNzba?apgT z;$$PqerZefUn`^?Du@47IZ2Gf`ilVtQHD>So`^D18Ny*tG2D7~PWg0YTA4|SwviY~HJUVa z=9SqigjlBaO{l4`(J~%uAXww*RJc_mT-KyK0`Mv z{KxPrcvL#*tR)`zTDOz*P|A`Bo*I#4OuU#rNoyO~ETe8>kYI0(h!xukCdKX*BuRx^ z_IcecFPZYMOCCIiu%dE37L!VN`mR3(&nRQ98<(S}k zWnqHK8St)hJ%27%%TnW)EnzztQY+y$_4??t4EPtdo&Ub7wnle0Z?dIc&B}(Y)7_rz zLnAYiT^kM2m^F~$gi8b*tMSLOKp(#piH8WM!9}ehdNTQ`Q=#SV5`%Ysas zt#H#&)?6x~GcXT^`}S49s=KoclR4TuJf4movbNK8W0$+v)48VCNxJnLFCGYb6K%Mi zu_KIB%g7*h>~=c_94dszN;PfN=#j19+NG=4G?WRB-8luVtrOsmVV&d0SHPZmSxlX# zj?G&)xjYCI**%v7je*#Ud5r9pB{I^a2PdKXsW;5^VPe?Ynzg1$7)&Y6$t zD=cXiHf&8Pp3D!j;fZiPe|{}o&cELe-^jo1`<5H#-j>n=PM1Z$3jV!iU)8+iQUP0b z7J}Sf2ruokR!$9xO$-y~M{)0j-1ikhae-1jHht)s652i7+ZtCl>r2<#-CI4~TRqOW zIW(4wjmm+(ZHYR!R}T8c0mo1{C~C3tuZtqgPwJD!CDz9zmazA1p(BC6!Ct3eCm+-l zS(4%;#8>Z))Ix8d6yDvRF>_Q8hmVv*{%8NKvkJ{C%`D|=bic-r%G_p#2X4Mv6s2>l zXADFR-}37@Q_2v7I9c@B;oG;r1xQluyu2CAMk(eQS{ECE%N;bh0N;7@oG%pF@@nEf+9&HTG|Z75Pq(B^pu)i;)&l*IJ9Ph5 zE&3aTD&CNNapVo&MZ<-E?#>!eTf5{SwL#7=tKhn$%iz0PGN7g>4@Qq}0$@dGmH@+V|OV2F{7%F*Vn-# zFPFLP?4=*p3>~0xuZV|qQprtCl&SM#duT|y){RY@0=pK&qpy505u1MUN+8F8VaN{8 zCbtM~`eO!IPE-~eEUBVknQJ9sw6*-(et7Ie30PlU2xTWrEA)nj2}x+P_+>FXccMHu z)&$}V0|aH?klKbNN5P~lS#M`D!HScM%9C2D#A)!4zpv%32R&H?M^9zI%_rBv%O}@E zV_P<+%Pc55wIKF;^{E=zb*h2isorxcFZGQ^H5@y&;cIjlKOf12mycx@B)@@R+k*1b zOW~6tSszBAk)r(-k+aw8Vlj6voQ<9_p?2kb3FC@e&PKJn;8!Q|a}21Q=phqt=k}hh zN@Ye~4U8pY&^|#L5k^(R1G$RbJssUHM8s1g;Z($%D1{^9$zdi}&Zfa(Thp(J3u32Je6uadK2*b2bq3o?VR`Hf|MHxIGm+-Fh%ky&!%)5hT(x`{& z65ZFDjxB(VzpYyw3t?#jVCRTde}K^0BKud;74yI-EV|Il^Y``(ZTijnL$9Atiws?K zWksHU>)Bb6z&noFaA#=+~84!nLj6CS;^o)a%$Do@KWGh}6s z$7j3B32$0TAviZ(-_Myb{a$2=r|v9Hc7RhqiL(vymjt7(RkqK6*Oc z+-C;sW&2n+%iId$R=>>Vv3krVA_`;wjbRZ}6qitGl*DeooWy1S2ODX&-(XEloDIY$ zYpU_o+D6O{Gooeve=wYEkl{(DH1ZL~INGzb7KV`!Mh?<|U`^r|5QAYgfuB8zpP&vJ z{F0Zk>Y}LpA5{3VK6BDA-5W;BkHy)xCbAV~pqE#c&?<2T&TBK^aV!QzNl^4!30p3I zYb=EJ4#dvQN!&cep>}==m!sK@A;Oyu-8C$j`~@tSPDEFD&T-Y8I=iG}PvEHoIKnQI zqeolB>7l42_;mho+vTyGL>{nbTPfW2aXx}^)se*91fO3XhsQr&XSF0p0gr6_#hTQl z5$pIB0180$zh4s`h&8F;^5kI5XHt@40s3quy?QhuUg~o9Y<6wx+}XiyLK(V4VWURy zB*v5R;j8o)(aCfWvI{rV#^<;_>pOb3clIJ@mzNiv0rnq2{;(vCav`!dNR@byq=AB6bYPV$k9f{eCNYnu%@g z8~h-@t)9+Jot_gbT3_3pzV`u2#iJBnq^54>AJzT|9yA-5-C!SlLZ)xRS$_w z9*_6&QtF5DdV;MJr=cZh z6W7OTV(mgMy0Xnz%^uOub6OYqaa#(;TMDMc-g=|mrhdR2>LrsyQ){;5Q9{aEce-lI zNmcXWLXR!$f_+Y5$ZRo>-{pW8cEo(= zC2fyoUBKyu^3#uo zn>%{oytKLggRR84(_-!m%js920I&=TdDdG@HH_HH@bK*=yLRm6*mMQPZ;bPn zlrOxI%YM~W{1!f_(8L#4<{8WwXo4h)kf%cnZ~-7-tzqc(?qMO9I54juva8j3ib}9< zU)EGKU0gl~j3FBx=c9c#fkt};-Jn4h%TVK3yP(%qd>Zzd?%Rs_*0q^PBgzkv4Ph6C#7G({I3jtmlQKt75 zWq@Rv!{Tt(FgjgWg-ck&u7}Z2(YS(ehA=2tU8D=SG0EQ3O$yBhM)Q~jEgE2104*9s z!cXE`1u~d#Ig3DvyzdS{Ovrb~!i0@I6{~HoahfKYBGHEN(9{q1Rnt*did5k?s3)9( z$HrFSAT23#ywcl|ScRht!=C$X2pGsXN8|BJ>xqasVXm`XHv1bB-D+*!_KH?K2&Q)5 z^*=(P?YO3^-KJ{}pwBoGd!iT^eHN$j=+oW`Nw*qO*7?~o7{}%LP>h&hPWt_#CyPnq zJ-M+~f9Mfc0FjE7Cm+XYUkt23ovv(7c*BsyeBlm1?FpCi9)5VIhd+=PTxsSH5Fw1S zXi?^{GVByYH zFunpuV5Z4v+hU~m9Uri8Qj?r9o|vS2TUMA#yBhktTw5A16HTYnWG2h{NbfXBl4&ec zStHm@a1s)YY>>@Fi;M3fPKoWkrAF#(%MN~ePCmO&y4I%xQW$j-i!EumJfU^WGB{5r zy=9z?Kh6;N3#t{q=BEE9H+@Y#UsKPysmC1boq&TOiNU}f9-J59(SdV4C1RscH(r%GR= z!ovX9m1T4%(kC24ZgY++;wd=EGt4vK6w6M3MYGcxtiwapK_Wi6OSfghoew`pOOv4< zP8~2v>WgomEd$z2KsH8|Kh{b1M^ma}S#=s8oN~$m=+F!tr7amf*tCSQjM49li$H*p zgMZt1>at?odv_{v<@9b*yNDNb7vWV{wAxjmc*tWI=aS$AfX!LBSve7>xZU<%rN1pW zJs@WG@Y>5b|6B+f`g6p&3ji(OGeH==WwO0zAj^#lYQr;d+ZUA9$=fJaOnIdK1t zR-l;t5(P(3N7I-yL)RSbG8~8-U2c9spw^rI6^pC5h`cM5J6-z@zw_z6f)1orNx8gM zaJek>%QCd|U@@!lPe>ffT6;-!OO|mqe$fE5mK$c)=HjN6_aJGqDL=6qs;K0+RsV(l zPvt>ra(xg(p^(e&80u>|FGD3j>)p{=v@gaMZ6677y@jO`J}~(u{0WybKJl0ovL?wS zpn8NK<=~eM5?u0QBdy&JV1M2aDj=G*f>6>z9SoJ8yz*O79!9H2nh9twwp1jr#(~i; zW*Nk0Is^qM`NR=9+zXpWUq#1mAHn3h)#o*0dwbU$^bX6--Enr}s!|7P2W8`68kj-F z3G}61 znu=y@rb*Q)B_F~SLHNetxLmMJz3QlWtz0oJCqZ^JXDe?zvZIz&!};bESt(g&nH1D5 z`G%Tu)SFJ#(R9MW3BD8ACV6}i+(lcvDG0)1_H5?zaxTA|Svhw(b1qBfNlZ0jKiMAN zN58x8(h-1S=J3ilRW^$95B$7}at?wTM|F3=mezRo&5&x@M@HV8)S5?4oMOmS(2d_6_%q zFgO$gaWqEj3*yu|Ka)%O38q8nmzYbiaOTwXc{+1d&Hh%v+ z5z{0#X~#q|S%*xa+$vI>&bM8S_^aU2bzEOiYgbOzC6v#* zQq1S^ATTv6pAURx??}2_E+`NLfQB^tn+oid;wja@M@eMyQj9}HE9#&)vPPe6KU#~D z$}TVucB5#vT+r3|$7fH@&L!4oAD%tws+kbB2LCe-$gcolmZVZC0wxV&Q;1o0Y;bF! zNi#GD4<%*Q*)kO}|0vqO>PT@P6+;aFbEZkk^0=`}JmVpt(G$&>NtopoG7m?wkc`$7OVdkJM;}Zk$;O4H zHIlu!mb*fhmsYYH38LOCsul1PgZSXC2cu!wDf+F>Z})-?xO8*A=ycb{k$j=5=}O-H zK;MXt(|-*29^_%1zS%cSf7ku_4mYaP+r2UR*pab5NR&ykp54gi$VM)c%cg0$W9S6K ziebn_T9Av|o0eHMlzN_o6GZx9*Wg0g-b6_*_%IL$Dwq{9aj@W!CXa!8fpneO zjHwyi5%6OiRChW$HVJ4FTx7_!`&f4iTm;DXhlheJZTFt)@iJ9{FrT8U9mfQpN`d~R zcTQ~N$4i4DZkpuvL`NU}r0wXog-tT&1#JJ%>0w!%c?1_Ve$0Sk*1L;R2K)MoG0SRf(s-v)rKM<4;z5dSKEd=Tt9_K|A5HKB%sFgUK{-!vo=Z#{9EN=gL@B@TB4r@ zE{JFO7GiG&X{%yEv!z-pz&6tqaN7p5L>C)|Dy}cSkn-%xMvBjg0jDm@yX;i6Sgcw^ zE;&$^c?IN*_pr*XF(vwPR&}jJ|K2r(T$~8vQ%uzk^2;JcfaO{c_|tIhyGDR#7H;D8 zEZ`OzLDs`50wQQnq&+VBC32Ykf?C2V%T-EH#4k5( zyayg+dppm|u9B?j=mMrC7j>0B8yWB$75wF_T`Vi15KxG-1xC-oLDaHs8f0fnHK0S` zRj2oj5p1W0kZx8P{sb}I|5#w`Y{^i*Lii&)7DT?&d_&FMarM@%TXh^>-vJCl-;l$y zjyFKaS}Ov8YbjVs`-r?sc%8El075OvMh^0M1vDxriKN@&fg5I3A95Qw#-*}#oj zt~k41&WCb-1p-8U2MCnTcjr-CQDy;m3P4c3{;FpSVW+~dtpfvqe=t~Jjv5AU=~2+X z4&P!XzXxzDQw~OXNH?pw^V#*smo~B?>t^`;S}ahcg)6I4J+xjHS4=Ocx-u5SC!Jkd z$t*8lNrO1are0MW4W=$(x4{6hQ>*Lj$$O~gLh6KQ_xmpKIBG7$$3(E${CC&XA|q=t zo6DZbrRzO!(JW&U2U9|i+r<1(s&fWu;t|4Vn8*4#PWy$04zE$k2}SzT_EGwh@O?TV z9Hm!!yXSaqCh~3xvrX05Hq0G^BO#OaBiQuRS!1Qx_+3gd`tqTqcY?rAsESV-^lyiT zMkcZ8bp2^k;eFMU1|ISx{a)|Unp8h4bOf&w!V#GH)I5jUE6PaC8^MD3-gJ|nm5&3p z_anLM+04f3N*W}9v~hUG{2*fbYv#a2d7$fqE>ZnC0Z{U>3^CXORP10VzVyZ9#7I(B-`C2{;R=6mNlUEftJ`pvp1dRtA=CG z6ir=+54Jx=1W3CG!G~oxHgQS`HGh*E+d@t_?TQPBVHnx=qN!mMGQW4R*(A<=0)2C= zpT0eiT5yB^`UZA2*)^A_>|z>ZqY#%PBp+v|E!cvN``x}l*Eo*S_n>!rZ|oo)ADpQ% z)Mqkazhsd~?9OC{`j_eY?3K?-TO6Gr*p=XCv&toArvgZ7h$V;P+N5ddyLA-)j#gS? z1%DXTr!u*^VyF-qsx>$=$tcR+))A!sf79ZPupTdPj@RZvNywVDROHIu4iPZLfYlQT z+!##RaYx0hAPh`U@wZVe6lGhrgT_70phF9+MyLhmtCC_ClWv8WfOw(n<_;U}H1Bm# zEO&wNnp+lmWYS=82_B$ojq6 zo^2vMG;=CWpNsskhmF*{{I6^DwefzsHXzW~#soSuP{m~7JGwLd>7wR$My`ZXnI}of zduU1ymk#m~HhpI-GL;}=F0-(lO>X2e>$#AR)}yEBMvgK1@Yq|2%ci30DQq^RD(xGO z^dv|%hDI?14T5IG=w6U8J5i(I65$rJ6oEg+7-EoQwuN;wTSmz{N^DZsBm$El4m))VyPwVraRZZ zmZonU93a<&v7rSteZF%52R~7)Ef+G2$)%OW>`E>?wd7X}BJFD%lEh_P!CH{)u!fS= ztVCC3yrA=k?^q%Zk4oHlTb#=$g*ayFYbZ+L%iQ2FT_s60i&tJGm-lxE>PvT?-W&b$ zF^F*f6Ha5@e@c!;xpc-61T^o#?_t)5o^WGg2{xD?n z`%O1F*%e)Lqg>|Pu<%<||*?Gty5 zIv;lo(Cb~D^o6!z`u_e-cZ}aNUhm0gA)Sa`q7(5&gorjF9*>4Bo|pIr;WwPj;<0mo zHxi*nXZ-(ub(QH34P)qUJ5Ti?p&p4$;`Hf>!NEq0bZeIX0N0(*oZ`a)nqzpJwN_nh z8^spZ)=AvhapKf*lP0Y_9^?2gcA6+@ixW3LwUe||Nof)g5Snc4alGwj*V-L7L7-Mh zJRubt9f3eX_reQ5;(?!iK)Mn_y}HuXz5GZBRRYQjhzF1mDMA9o6SKSa#;sF8NcdrA zJagupGvE2nne#bt*I(n>gD4S8pq!i+q_q@UT$tKwAL|g-OR_?dLL8NuDr|1eo$7LA zvQra_rx%t_Ps~m)PE2P}8et;gt#>mGSXsr;$SpVFGA$g#+Ieo(X2&WeB^7I*G`!9= zVal(m7@lZ)$%PS5ktj$6h4L5%?diSY6v81DhqVp+lbjDv@q$S5h{~wMD=I;wDpi<= z$5V(2fxr2gUX1Y+;b~bRsK8`RIRzDD1+9`Ie~~1agaft)_8+9OoLJ|jM-qahQeMiD z1W%c|)iNb2-0L9CxL|6+@SbB9-s@~^)-NVV0>#?4v%tYjiwnfGvtd@22+TPjb_LPw z+(KeDo6Tf1DX=@gYO=(?;TrLhgro3rs|U7S$pb183rS{}5)@!+*UKUm^t)sDXy!@y zPitZi#_(h7w>=^+t(EyT!i*bdtpBnC|D5*2mu=M3hpMaT>I9ZNC*V2vJcr>sH)_Tx zgd!M?W6j(Cc>`O#=^bF-7wMdj`3Z&FC5?c>XDCpk z`DVHcdIE1aaTWX&hUPk$vgD?`(S7&4Uy;vffblJkLvj1h+ z>ojJS{}1}YgF68C8R-`__bdRaSYO!4SIt}skDF%P_>V078t(Vk$LkhLFcra^uG9yw zdOYx4#Q!_WLp92g`AsCy+`>%u?ENR_vsDkT4);K=w|yTgFKap6ZyQLOYx%NvWhkYTGY2ymVu~VJu5b% zC~qVk7LgVzGRTrqQG{&f#IjyrQKeupUMggVeK9m|+}$O}HES@C>2!%Hsq-#SU=qCb#>r+k4;vg@ZtJY>t+=6!VBS}wOgiiC+v*`?wpC2 z>QA(ScL+ObO31{JY-j#3XLdxM_jiFidS6oz&7EdNbR&KgHsc3&4P&qaq5)?gtF>sB zaoqx;?{+v)#Eg_0waong&|SM#n}bHmp;)H+NL3EB!Bes0jFj)k;%z4D^moK$8W+E( zZtZID5R>MkN4ffhxH^pQz)Bla08R1X%d%p{+zK@#X`WD$ql~DL^lrpslp-Z+@#(KK z(0@A#YdBbCVMw3+IUX*>hkqx2$Noh8Son5K-5yKrzwsYAtEsq_=;Z!x@;vWvgCqSb zfn8t7JW+FsP|`~V*52v=9~ZpUeTEXhJ5HZ^_Q5Ly|8m~a3=AHGH;*)GR|d~=ec zS2UWz>N#3uEhl3=iyTEIh2#jyv-~njJTD<)m_fNBzeh>J<0G9Og|I8J2}SEgIw8_==6SFWTGVr??Pa6E3nAn>nyiG)Gz) zS#zTgtc}GGm^|BrM=gl2OuB4(_p8s}n#|ZR!rCvB=ed^JLzj;b!c$~YslCf(QzW^%$Y_Tukich2EkqVJ>W_Gw0tYm4N0zj#RPdU0e$u^ZIT^P*t& zu@k*wr&=8fsY=C^;_p>cZ|oBx^R83}`}2+J>vsR`_x86uOZ!#z<(6;C z?VWvaD*F~Dy9p;=-t~Mpo9&RM4L_9cxTU8nd&&FM$gx!01Mg*OOe)?LJ>S<-_2+Ox zz7stxRJ^xS-Gc~F4h-+={m_@H7OkE8f*!u?dl6BTH)3CG%MK-Jr~Xy!_rT)|{d6{) zZJSa`gn)AVTPg4UuBEW}0r)fDm+KjWPnKn`%Ube^)jL*N*|T?LUzeK(P)I-w)0ue3 z`%_;7^+00Fq&RXWYc&wjGM^E&Z+A=`xLHNXqE|5J3!@dj!T> z&MQOQpOfUnq~0LM5kou)o4f|F)<`eNqAAbd3b2U4wdIk^4%ve#z(?6uz|#@b0N)2C zkj*XXGzYQpo@;^3dm+?3T-;U!F2LgkC3+y+@e=(+5(c^DEtrn55`V#aRf2uf8W0ah zi>N{q`W+h02}K6n4$_F=NQ_I~fEUTwc2U;Wd$>0y5+|4^u_L+1xYm^9x!1{hZK>8{ z#xmd^+V=@<`ULK%N(_M@dnBp^U7hSQ;`IQw2p9~6H5u;u_TMJ39Kq^1G(M=qTsz$3O2xFuM z;Qgp|*%Db}RLFp?Tnq%cRvg^>NLB&SG@iNxZOI@Mfc+fd*XKl_=yZueD1tOazT@*F z+9weVN=1C|-9WpYB10L`4>EzB(&OaMqI zbL0g-3aU-ZJ``MyE;yO1LnTCawBahKue@8Ez@rNSv&L%Lf+ELraS3%hmP|lO9#_0! zum!{zK&%*QPplcy)vTrBLZ(p_DDJ<@xW++zyA6%wKToq_)`Xl`hl%+CQbC%y)i`#j zafqC8-7SKOM6@;!Nnc0H6;#m#3(_QyD ze5L*PeR=E}TYljuGnpnsuQqe_DC`EechccgK|yNP%nj-~!eqGl5r?F8Meum8!enW8 zVY<4U!}y$BSG3L9Ms^D7GZUrH6#b}}L_uxKHd6*HkfaGQJ0YJw0Zz3l-xVyHy+JibapGDI@r<@RNxc>C=o3DR-$*x$YSLvreym|Q=pP?CM z8hOQctSF$=QAM%9nta8y-I;wE`5!#a3;h_Do4!Ea_2T_`VP=meYx-caF=CSd?W77u z3{)&GuGj}Rq>YJcl5EZXQZ|yW;z11y218V%IdM9Ix!-~7`Z*s*qylQ>&*f=S%8Sg^YMd1soQ~%0U=F@m;g?fIa`?Ep@Hn?8Ufr) z)^#PolM^eqpA1)liIPOpGtj{?48San>-vkE3sa4~n`vKOnzkF-EyfN%^{d3xkCP{w zb$*0+VUo~7Yf>}0oQ;fQtPCw8kOgVpO}4_vWbHJsJuKEkIO1S=I}9u@qA|2NL#c;* zlo+W@ld2t@i4_MRrA%`MtBV@v>pGM;)!sed%-vMG>d8q*^uDWa}tYL>xSG`AGwsIa? z8_$E0+D0HqOtg3<&o1Q9P;VUB4jUAu+|CE0mn8KS+%0acF>u$F9Iji!8?9 zbEwe9xgw6kiKIfDOl`7xW1*1-Sf^uq|b zpj|*wz&CW=qA(J1>!{dgUt6$r?twNC2~{S9I!(6^$TlI=N#yo|nLQ}*>o3>S?ESQ) zYm(Lf6K#-aQM84Y_mw}^%OM)Tccn!S(H}rT7yyQnC9Y4V9-LRG0UqiyfD?Gc|01&& z6`tQ*ju;P6d%w*A?4*a=v3tyrH{<;B_^@F2sbep3(Eg-}5c7Twr%r8ph~*z!_|t-#zwMC~w3gQ|At9 z7E&_OHncTXb}Kf2L%@%y4{Yq}=ehSY)t_TqGXTj_?YW}Y^OkpNa1gk6Xrh|#mUwPPc zKqflg`b{B*q+Ki*WM{FkAbN{2pY^cwO*48B;!f($XguKVlaSg*lp04L4`_Ex3=FMJpVKkez5~xyU>=c3 z3eyjT@z5s6-76bpL&NkaqLVK>XFLV6@x4>RJ8G$ML}AXd#_j=IyrC;d!(#`r%@5Q2 zNSOI(#>MW4+1|eyI>;R$Pz1HkRt*2;KZ&|sWOE3V8TBdLX?XmZxLrtA9I`hhB$BE| z#h9CndAX7JcQIKBF)mOTem-L|q>~-%{ecp_5~KQREDMXQmK4h@8Oy0a9xJ#&c(3~U zh?k(W45Xokj(CJQxT=+8fDb%T^yg{1PlyG6VbJiT-m?vPqOyM=lEB2up;4OZdHx&g zyYuX^8nZ=;46BotpNe3O{pu&24k#H+v7f}m+y0DPAbc-bwA_$@*=0L`(S`j*b{?(+ z}XuruWt&ARzG%_}@a5&K8V-P-8Wu{Pj zAY|E(QSi&xufKo2W-r9hRJ0s&LFKk;PUSg!1$zuIg6vX98LDa7@ol|3;~{lV(Sl&n z{Y-1a`P3_?j`s6N#JEVf9wyO+HXC%EC5MysE+e=Wy~w^3W@8m$9YYE98(2izW9Yt2 z-6J(CW{d@DK3fLjju36>R5o{);wk9;de`cn09}<17VqFu4poc9!gZ0^T%0Wv=XtR^ z{QUU$3)&%G9Gm|hdHF-`t~t;-eSWW+jj{eu4e~Or_mXO@_R}ph%*^ruyCmhL5=b;5 zEb_3TPNd1lDSI-EC8Y&+6NN)Z)UPOr?z!5YU>B8uH=!<=9_%$5QC0=j(xw)-?r}BA z5grN6r>ZcB<&2Sm+IlY+t|QEtcGPc^m&K^B3ohn>iKsrs=NN z6*FgRi|Eapl?R__^B9J%-5l&UIGB%^pQ~DdVJzcy$xZmR6YCA^eH)-|F*b=2bGW)S z?PIVBT!NKa!bFWlB!i$X_Kd{B90?_+fpNQ=*Xg?oscu8@QMyPMnAOV z-NqMm@5EiRdtUZ?8E@&v;i~G-*aM>*35z!DscRpM*`x-L?Zx{0KM7%Y5Z4IxW-%hl zvtR-@No}$T)zLiKo8P+=oaF4d7{8$6r<5TVKv*z#O;m}bryC0GtYo2bd8Lz%?aV|5 z=eThZI`&e!+d$Ll6%K>Y~6meXPMS9%ZA z&WJoY7)f<2gIvB$j7;)l5M1mflq=^l=BIs;j_?Ip398{^FdH3A45}NH_e0xL3(m?S zJ}E9`{@tU@MW)d~Lufu>&&-5`X~7>-#oyygM!t2NFei6aFU|t4F&CXcM8Vs3Asq1O zse4nl`vHvMDkKUYj`~Vb@6y_~`JFHnPu=KEv~Z4l;q@wb*A=V4!uI3l-FtIMd-kNGexFXSjYz=@RlZMan!FEmYU8GIDn^aF&h~|f z+U(Gmy4q9M^TAERodeNs%HYTaU|Gk({A+hooe^)>?)ua%B;wNt#RAmL+*L+#Ql*Eoas< zvywKBvo+Emqd;Qi0%=hfZi5y9g21RV-1EMdfA*Ul?|$0RN|WqpmQxnubo zWzRQ!hUVU|cCY;G2@Xs=>n=wKABY$$`G8=3b|H1|Lp85^zF9B3=DOwiZc~DIrr)TS z*;Li6IIiJ4u9qPJm;rm+Fw6ITnjX-%EZ#J3nPuADvDRXg`R;X>38viet(pX^IJKHt zfvs@Clxt4Kz%2o#y5V}JobXanL}kBO2l)vc#k&==j*C_RaVnMKf}eJ5-@Hq|(sBGL z5b6C7I>tNj1AVY zs?+f4C%b31!{0hRwC5^4*SY_gUj=^36{C)4B!w`$2BdHz3V-@37`Q*b=Z%h?ia1l{ z{$K6=YRBuS@VG2Z>dhLcb&gam&seRQdEaren}*%YS~lpmT`{wU4~n}Amf*1^mx@;k zFBeIkC|of(qLor{3CB>f3Vmb$`_qazCPnNsBRJ(h3d-c6lNHBav(^%+TK(S*QQpW3?Da)m$TG*jJeuJl}K~U5JVcwOoJ)gt{pGkpWg_Gh!f2V;$6O z4IEFy0}sG7P|kv)3V|XBqMG3)kX;FplMVU`chwiiI7Fp#(*$mf;ZqU z>lMSbVI%{}Z&Ys8%-d!ye@aVo#SXX~1^U+qR=SlkTdYu}SA#F;Gn5VgE+H5bTg z^xqHVo>I!n{q*6h9r%HMJlRXX`Sjm?VP0Rm|Ll?5+Zd`3kNu#xjE5H2oBPe!0O^6DXC%uM>j?ZIjGZ+M!;js{+(d&b0`o_fWF5!~sgTdn+3jM{P(vnU}OU12v zajCdiSSsd72?M(0TI-f=)B>%n8ot3aw$gB2h!V`}>Jb$4%o7l6jr(IT5DUGqgVDf% zfC%mwru`PnEKGmHsiG!(gnNZC#(aQIk}pe_v2OY(W1;2>8&)#RlW1*LaSxPS1fxoq zSVaGExSxKgbRWNMxRzlfxWeQa3Y>kVA1H%oy@;qoa;WKC@7udB+HvFZIiml}!B{w!DSdK_mh_m_zB=IO@;9ZZxBBmT8{UYK72%}!FHSt3w zwpee;lY2-q2o~xCoLS8pl?rHdD&p%ozcx|hvPs5yCVsBRe2e+WmRm5uAfSxNB~MG2 z@S73}f0~wA<2l_L>T)fzP9%V(=B(l{;>MY92f<99y!EyO7f7~3 z%ZYrjF2#piZ2X!6)htB(a#^_nFf#b30-bm2rmf0hh(YeEqG5@-78PkyCCs~KB?}rC z=G79zDReQOUN<0)>aJOX4;vBmFazNr~Ha|??Smj z1PEdEFT$as8>C({d~i;iSi71ayec~9J4REOD%kk!tJ%fEa_b5yzFK&3ajqCjQliXn z;X@f)bDXhN!ySXu)x#7>t`znbAb@Z*rf`a{%+Aj&yi!7%QIf64)11j&zYb)tUkAF^ zuRkea7uP8|;f`1gwzxYgbGms!A0pkg8?-RoOMi9ZT%l%pzPc4UJduFcJV(lr zoD9b4vqKenY4|{wEM&hmlrCU~69RAXB7sn+AuTD+kcE}y((Fu;ELuH7be+QV!XC# zE3a0g$dMB3 zdLmqMeY{bckF$}A!-jbtWABsUgTrl`J;+lTJ5Y@2JQ=6&kKCq{Q@eLCSUNt{NB?1} zv&Fs%5l%re1SN#u42>TgYFS7;*Ifrbov2?jHKo%W~zAIbT4u%wTEG<2{fIBqL$ozcNCQ4Vxd4cdPhvg$ZBl@k_) zy_iEcD1@p;g_((Qj=e#;(s$rI?#ij;m07!LRSchb1gPGn-JzLE#9-gjKy`)w?97*U z1{o%uKYJF7R{95hJLtP-kH}yt#K8@dY%$rS!wiHF?gev_Hc)Wrn8^^^Vf`~zSv5iT z%`#X#2uEodYe0g1)7lYXhmIL&Y)-Hl=BeNyFzMfVo~y27RI?m@ORW!%|G6x=Qkb8a zE0QY<3onr3($d0GX=_&i3nWaA%vGauODZ;fPs{fuXHX1S2j^mU1gM)Km}+WUD43Xh zvFcyJ2E%T}H`W!D7)Xy!jSo~LfTF@oe#q0X1~=Sw@7nl{)K+w?E*I_~&I$yR3aF{6 zf>(=iuhEH<{pZw%f}+SWQ6K|D-jEkG6?itwc*#VFXd3-SU;lx)XE~WC6S$W>tbG&R z%wE<^$V>K7UKd!IA0TM2Qfy~6P^qMJ&hX|!v9P?d#0u`xbaB40G`m3ZlLT9=m&G+0 zD2liMa$MGWq5GfPUPLn%Ui`^f@G6j_yOtB>}JRpB%ePNF&I5dW9G1mqCi5t&RnD%7g~qV{hE_>EGr@>E^`l?Whi{3;V+_ zbx|$X(~+V#)d4zHI7)vw*+oAb*-Jm09HGXfLjQ7i7uCPiL%%aMNPjfabN{o+*E&W; z9lJPJn1(cL9(zTzz^h|tc^eM9BD|AA-yA!%%c)h%{H`d6DoFEFC+K$zyXeN$@Y5oN z$NZ3k@LUGm7X4^(HZ;KkZogA|3>$p! z$Oi2H82zV0WjTn{5WZOZpeDj}EcJS1xDGP8RTuKO4b!8>#G#}L9zG&7kHobzD+cIC zll`rDl7+X-@kC2<0EmKYuWc<6%!*7VxJ-`MeZ~3G3btuP4slAy8Xm9PSstiD<>k1L zH-eGgF)gEv zweq1_B{Mbdh{_eG!8-UMFAbYrK$um&*Rm|FJnPHo*=nZEi@*e2$S)R6oP$YL1V|Cb z55iiDvbr^*!>Q83ct6X7J{#_$fB)Pr`X|}G;|#k@&Jle)U8nDzd!|45rh}Epf=#D| ziv#or*>3vk#b*%JPE-~q1#GDI#00`ZOh)Xa};}&|kFguqm z7M9RH3+RZ+n&m>?Ck|U@r~vw6^mLNxxBPinjwi*DbnM{o+b|EKt#;J5R@Q~NR|;24 z*zsp?Ct%SSXiXM#R=F6TtguUeb_XrCPQ|e5tQrQ`-Kxx=TkWi>< zObI5*xRz8}{I0ffMFAI_6k_DtIoIBAt9Ev^hMQZs4^d-y_#GO%Ixa{27Zzmq$(>jcMvC1hX>l%<_iA zpgMHn31WMO1Vh2YGmmGNZ%_2n&vN_dN7`Zfp1R|Js+1b_dd)I*M|6 zhN?_4rbZZ3D46k>OFY*mayRHl=MN5r@8=RJPdK5nEAzeVHYONk z(dJ!!7ybTdw*m-pBWfH3L>%mq{zBEdC2^{2f3!_i=#RDWT@iPR3?e$Jjb80g>DNXF zaaBu}QeOOF#q-$H6tCp;pwo%@%zDEBjq^=>6ybnO@WuiDR1EOn`<~ z-!m|Nx5Fom{>$i~5f}mUZG1^ouY&RLW+$|9cA1q}kesIfGrFLv%Cg&JSI0mdjLBuS zZWBy^*yf$Gl%YoLletttQbSFkH#40yli5dGCsXv_PLiG^fhg4RZn<;%@ySDUE%S0X z@Ja3{GsU;ZPQyWbJT|ZojV)wGr(YjGLVrCrwv7y-VbY(S+qowy8I5Mf$NAE2$`JjJ z?3L4MFqsLoS<~YAM))FPWZnVPWqsga+jaE3e!NS*TKKA-rn!kd2ZU53?uq`6-byLK z6vs)01 zOb1bq_=SPv>3AU-T$NMf+yI?F)3Zatt+H=Wa2;lXpIa!*5PW+DM{s#|p1pFx0`6=Y zpE>cnvuZ-3EJ-J(QQ2T#FB@iRteS(Rh2#XRZIa4{VS|TbX{taquIux}x4@mTr4#9( zy-<|sqmTYJum@T*;Y7v53ASoSnw7-BwZ>J8{fj|afXJICxuW9Kn-JEq?0oBtwl5CM z#z!A^E`Ta=hzLHAZr{{Lh6eamfGOMA?5}DvGUA#*)LY@&pk>X%3!K#6bVMCg^P5i} z>^5cV8t}CEG{0&HDvGVCOrpLJrNBe~r$F73H)5F}(MJjv`oe`5jwTBW_7sb)g6e{P z??RR;xk38l3twurYa)IA9#X{3Ke9uVPF9$$Sd%DPVmKG{gWT|YxnsMc*(UFX?11#6m;OB0bM{6O5r2XZ{bvt#%h6?M z?YSfL!SKNr2-e4{IJlW_yGN*kqC1Rah@KC%)MgnU9DzL~aya~Fg@*4%ymYJu0MIY7 ze{BheqB@mHAaDQpJ6@!wQvVN?*pVCTX{sT3oQ+gLY};fMR3>(s|mrC1JcTqIB?*!>jcOMiQ6V|;xukZ z2qCUWXp^`i#BV!s6QK(JLzL(Dz3+Sfd!POB&m-UdG;+r|qPLI!7IAsx7igN@H!k@5QrOOpdN($0c`kc(<^GpA?>*97;%^R+IR+Fo)v>0Y7SJYYflVRM4hCZEZQ4yKl$!uvN)kM~Is zs%P6UrPcV6)6azHgGQ9Fm6)}o|?zg#+a_iQEYmm) zXWzF}fZ&(E&=-=2SJQKxFc0`wM!;XUQ=D%s#lL!$mBxA#%5Rs-Yt5B_>Ou|Q{xw#YT zm`YhxC*jML+1Zn^mOTJ{x0(@8f-<7gj`hCThkHL%e^12H6wTHYy2=aQvbfS?Y8+SLL zH*a1IIf)1VfgW5?`XODGW#7D+d2i;6yxu)uoSCK*@rZ(HBG(TI<;dzY z;zb*DQA-b*ergpt&c02dq1TZr*3d<@`n&u zY*Y)TO(?{Vs|86Cz2e`)bSL+nTU1H^RIhPC^J&$Mqnve5fKh;*Pd0S9A*2K&_+&6v^^PO-Wwr@`{puXShg~l41RGZ=A#I8}Kc(l`$EnmRJ+&5q{u@9{9p03^1jH zswGxFHSlp0m6*8YO7hg$ovTVoTwMDXsETz#sAtc}sLoyPftX;}$j|=)#!->sYJp~W zoSR+vzhJ_&jhkMY0{|jQ1|{Ji7I>U>kxgpDFc5|JKE>c}Y-j}SssyqrWSLT&?uBZP z8$tBLXcP#g_)5K0&(X?`9U3>)Mta{oJ1tVHhzs`Yw!oO`3TO?5&uqt3)xcFbJL3X?xFc}_mS$g=q>qYsm& zf`WpwLP2FtW?qSvLP}Sjll7mRGaj*(8T zR-1L$?71fA3oK$Z+AJu@$H-_jSzf3END2xnOtutMoBUQN9LRGKR%bHe0sx*NCn>HM zc$_mdFfcbYRY*$BNGwZbXm!@Bs7%!V=dva@US#KPqtM5J#|#Y&%uGz6D)f?bQyAuY z?BBk!Mc?ptg!0bMM*}b3W$Zd(h-{8taY<@Hd`f9iVo7FxUa?+5B}1#rGy6|J4otHR{8($}LXG6tzSzH@%L ziOc8QJFXWr=WPg9d1UX|2LP6smxt{Nflzpy`^WT~S;^4Az}(bSAt^N@u`HG0fL^a{ zxq^)NC4rvO+om=K<{Ph;O;k#(he*dK=cectRAN;HH77YguPn8wBtFy7A}_u&F*gUK z{+-4Jr71gOHcV3cXTBmvJCh?yQUIvl%)~?iq)x9gH;2Jds*2qxcHe5n(>vbCe>D3u zIV#y3YGzjP#MYkxQf5EM>v|q zJ+rIu=sV<#@6bhBrLp0JIsK7Hc@);BaXw4g9#G^3!ZUO+c>m`_bDELWD?w>)c5iEC z0O^1Zg#}Pi_<3^Cz50LNJN53JH8C(SHZ(LKX>N9JYh^BDZDatG14ARU&bk3PG_JD< z2fX@d+yL*f`2qoyxj{qV0)QKMocqf1m1Tn%lSp8^(0+P<$$u350i;-j|O+Nb5pErF#HfU5Y+O)_v5~>%xhChAq(MN=8 z)e_zGA=zNEA~$rhiSS`Ut5uEXX-;Dsx4>W}A*x&6dynax$9S1nS%K5dhFN@1zP;Da zE%B)_{3(q1sW;W9uo`ClS~tlq7qICAZ@tN3QZsBaMs-0fHp)z@!O}Rjm_>#SlTcD- zwK2mibdwR=k~~#vQo)EQu?qAbxMzv=0Vo8t<`Hkem_uv2XrVro$-~%$i%Zy~G zWzljs*#^61m^IR;!@_MKL_vfy>0=rU>CV->F$bAh;g%(L6$URcljUlp2;vF`%N;gh zMaHnV%p&V1!T`mnkt#DS=wRdo9QY4^B(Mr z1rW+HIIP~2xU)i!2j+o6suEh!0?V6wtYlQMJaR*AQ-^6;!4uj5=)5^cSYG(!$PUAX zrWs>WvGRsq;GQCGX(#aYZZ%mYsn$7(yN@1B4_H%0E>o_; z5}*kjHlk{n-lRc!TbkLIAenS;c2{&L0cL{?4yAV{?7#+$cV>|kzLu7Er z&|o@~fF;DCUn-qSrh129ro=!ZmE8<81C1nh!VAgtMf>}`>7qM8h9Pf_vGm~Xq2#u{ zEa^-4#}h#8Nx(q;$!Jf1!k-R=i}gp71KlJZ9f)pAc>U5a&XC8}TH&s~ghzrIqwp`5 zO{P;Y5TFxFr?Nvp=mu$rvMZf;B{K;)%0tPF1g3W=4HHOUp-0*q2KuEE?QtaRcz1wF zzVFB+I_rriqWv&hMs`=3H+OYKm>${EMTkx-Yzs-~MR`QLcfm&yWtdT6n?UOIAAppj z`Et=TY`w6B^sGEXg9Yb_n%vkzGOZ_t_$i!Uu%WEeNYXyVSs`Q@7)G!t(5-DGVJ)qv z6*dc+i?B?63yHkzY?DtBAdQt;lwBpCAlig%i$LXy;XSGs%l}xux_q}qRgw0({Nw50o=&tHJ7_Q8etPKXKInG~ zeh-9Vj#++G#=rw3HvL71th`yySDTu}k5$JUClc&aOS)o(Qp)gRSw*Jm4h8WZ)0^*I%@ z`sKz{eZKy%v9CT?e*#alz&l@m(wJyW22iY@Z|text>3B7$wpw=15aNdH0#qa&Rsc* zY^*;B#j}0^CV31CnI)2wz-Ylv9bmml=YajL{6*l_kHa{3yq-@G!1b>|5-IPb->`yh z{i083Ls~zrLR$Yuwnp+)0W?Mh)exL{NpUX(uo(g!9tLLs=R>eOD}Y0{RG4F}pvJvv z$#dZJ+Ik+G2gFq1k`aW7)?+Ai3G1&mt5Appi1rTaaH=Psc~1zbILsuxzXj?P??kj3J;+Q5bCK*lj9U=TYAkRT0C}SVnTWFu&P0ys5YuxU8!#Ok z2-r>(8|=WbK{UqzJP4OIQCoHBw%i#FJ1Io$SWOeMx7u$Dn+E*YXEhoVPVuK}8GSjys6)LIUL^4B}{@qyJ{}P1^;u9orlEfgq?u&kc#Z9E}7W?lj2OUWYIfyT4 zmCK@nBI}?>P-I;pbj*CosF4Z~Yi|Vv-fe6u$$v=fJ_g28W`CgyUxGF^Dp}pgDq|ipT^QvRp`wAvJ}3n_H1k z*dn`1)HFdzs<(JnXAVIFY3t5zxm5qONUUVl2j1aOU`@iDnykZ&1rJjknBwXX_*_MG zoNJVPIK^iQlv!A_YDwDf{}0Jm6x65o4%M{Zgp?FZGOscx9Wu(YI%Fl+>JXKTt4)kB zL(N33Dw94-;B@#r;lBLs6RI z?ivV_48uBMs2FUgBdYWnCW9@e23whGFsfiymAbdQFi;h-6PmO2V)L%BXgnN;PB^X+ zW`zbCBOVNaaGVwl`GmiK5ONMaC+7YqbT0(Mc)GfM?$cOVcqBsK!+1a!ilmNAf0 zCh8jUJQZ57tpH$I3SJp2g|Ofep6yB~AVZW^EX31+;$yoc>AE|EUKo0_aGT}02i1<~ zjp5e-Z$Rf{_FHiJ4O1TJ*6%x81Nkse)qP0_v@cX@X{4n3`9792*_g5|OBa`pEnQps zYU#SVFH6^#&Mci+y0COSuqD8Hb?GA75a7MGbP7h83EdHBJ_ZB91emk42TNbVRDWMO zw{#SKucMuSuE&A@0`xqO(1GP0U7A_ChVTH=N$=0nS1Kyr=-;Tw0MD_dvl1IsWn-oR zpdi~+GDoSf%J`gGMh;G@Ghh_$h5fo=3GXp4pSnVFXW$L<=p*5QV_6nswoAiW6$qt4 zh>J#;$=j9F5sr}h1WdN>|KDq{6*jcJJx6(NIh<3mJ8%$2A%N$DPp%?sOSJ z5`_?3uW`s6ooE3fIfTam9Vs|{6qtC~z$taK+@iE$aSvK5FmYK%02ANAB?-P!XBGyg zhnA>CJ8j7Barh0u69;aLO{TnFPTguGWka`EwF{?{;G0X>#WUEtfR$&0mnjl`fR>R$ z#3>4R!G}nl;A*s!%rmgC1ym7tKesfmY@*7X;6<)$jC-dEN4{lQ7|?AjeN^OZ)19TJ zJ00%n`rUa;<`gO;HJvs&?p~=-1dF6_M`h7^3=C4&))d?`Z*Pj=G2Mi!HY~49&@l&B-gxsRPZandao> z=G1KmHBapWQgiB5bLxh-k^_!PT9X&y{QSvbV7%LI{0<@h;^5~mzc{)Tq1>FDY)+iQ zUcNa2a~y0=%x+boZcZF-PF&uq0uDVr>Zz^H^Z9+=Z*$^&bK-(OWTdPnXWI>vA-(+9 ziLvSpz8s3Y%0OPto_+K6 zafH;H(+3bZZ>DEo-MX{Yd428in+tm|NUyIRdGpQVt={j6c?{O8`*W|)-*`Q92Z1H2 zS8lwzeF5S1uM?-=T-^hsz)**;NrW`@==O6_0;R{NSL00BqkQo;DN`+n>|2J8)^ZD{ z0`Pfd^D@NmR##XMutpHyZiYynEKbv$2F3x`kOpD4@xtO0PCF3+Jnr<|v!H>)Z5x6H z!U3GoWN9E0Fj0yxtI!cm4F&pbh@8QY7I9Y7?|vu7S;wqRvh3zpUGA}bkzI>;Ce)RGH0S74;d8o%_E?Z|3VUH951YJ7j}|6i@7LBNznN4QzRVMO z*~%_ruQuf#ub=8ra`sA_4d_TqpKz7xGhjpm|_KH%J9JoV3Tia z3R|Tp(R@jSD$2T*GVkk4evPj$I}O9kG06Oxj-;0#9^l!@2!^#Ks#(Dg56BPd*b&Mg zBBHD2H)WV(tcdkQhioqF+f#LocC%V^z1)^4+ zBp6b*%!@2%A&g>7cc*1(B=%b>iAIMX)7Ge^{O;0XNMxDNg?q`6KNQto1M#J-ZkXz+ z8UhUuIBe6XxEJ+>sc^{FvN}{6WO)DQnE+w&Qil+#c;RX%Ogj&=&=tjV+N6c468Ej6z4YT> zv6%4D)f7A0Zlh1<;tP|B&>hWs*6D0)uQl=K#jv)fr~&->OXoQOiC92X3%{7 zi36QHYU2pnmHG)l>rs8KeN*U8eHLwxyeH)S>9lpO3_&L%k*GgzOp*G%`dxLyx0*Rq(>C2A-!I!$a1UqGz!F>9mTYYlN|_ z`#;Wlby35Sl};9pqO_W2)sT)*XZ@1t`V~`Q_&*GOja70l`^m?C(%@7-8zcV5$CdWLJo z+WkTEd0I|7EhPr>Y};Z>jvqaHz1AH|2QLQ330wefK#{+@Jmm@D-L6z$?y4_y*xr8a zH?$tGtvv@btunI6rXH2H8g^Q!pAWLOS;i(c>pnKi?p1V)!aX_8G>r#u*==L))e2uc zk57brsI3vw`)x!}OQQ?t7j7W{-IJ!y%E2%`&T9~*R!AA^d1B!_Gh4)to|AD}!CB2t zbe*J^mZ@-}6^QJ{S^d zEB3FoI~}7G+?|W9!@2hl1zw1WcmWdHBrscZcwf%SOWz(!k7Pf*FGu~$d4)<7YEucE8e(2xHnUGH?bIbB)4}a8)(D>}pew1`% z-J5!eKz^bJFCzCmdvuJG{IiFb^b*1}>)wDaB^%oHqO<+kqr>?U$w|IYbhnpmm|5UX z9<7YKD&I+-J^G$#a;^A!a*q^4II&XT(_$%5ODwrJklk=EsCcGI|1+x>0k`qerdUe- z{@VI)bry$p@L|ph3WPuXW6$&XFQ3ode0g%e3gC-FzwO(=i?a_gse_Q;^y2c>pC10u z6)4}oxOo&o@M2>Biz}139{pneOI(EhW%APV2M16E`sY1Ip3fae<>%+~`(B>@eya~e zc2@`x5HtJ#kBn+65)USR`R@3?fy9M7KyqFj+W+$Gjc`Cb4hhJ;TP;5Sr{;uzWKKesxB!tBe5(Mtm+d_!r$FH zHG}TfO#8Hak>^A?U!QsmRk|gqxdl0iC8-RTRI+rwtGnEJw>YAv`1$R-MRf)KD9Yng zlkVo_#sejZrmyHBw-Vl`*$ znr|*tO%HyzihCFHYPib0G`)gKhUsrsT`;eYmbtb)c}~@*v>qP6y-yHIN>VFI;uA|s ziZYW*OHzx$hHkrj>+`Gc4_@Z;IlegMbdK|e-_2&Ij+Cs#y!3pqs_V~A7RhpQZVo<~ zwCKiLkKC=CvD=}l((;RPfo7%_LCi~D>UGV!_)F5<%^z!7h3>9?v*$x5RAqWbYEgD3 z#4nMvUmed$`ISEV#e|m&g|a=a6mB^TRhF5Tk_w3*mZ;8WI$N~#kDXqnzQdzwfqq*E zENC+GfC(li2kf{SCs{`K(!I>rTiIUU6+2%4l;0X=YAIW?pW>}uc_S_USNBnNts)Rz> z#G_D^MXBkfIf+H_sTBo9sl~;a`FW6Nx{+K{q`L9jhW0kgayxFWDgS1DfO(`S6_k!s zz|Q_w$NpR4QvQ>c^&y-$XY4%6SeNb$H5r(IO5#)Ua}$A40am+Ab}AE_%u7CrO=nj{ zbrxCQZn${|rna;szbG>i5?yy!q&$ujFxt>tE^q3Pwsw9^bSx+Xo12;{loq4_t&WFe zzIb3(2BqnK{jQaZ^(8j&dj3CTIQ7WBywGSZ0JA#5$?pe+e0ZDze*l30*$CMPki`^? zooQ+0DFX>qo!EG9AZTxZcRfUr*&7s8h0#rtcRfkezu*KMqTM<2WsDJ%2mwYE!%b)$ zgkNy{RQ;O!{g1wfl5H$~wbdW2^i#A##b~_y0`1IYZ=s-PAeFdn8jo|NfHu-Evdhi%H9v zC$}=X*l}*?|50P7VBT%QHw}$ z+O+Uo=F7=zm?R~^vVzicjF0G^UFCUE<^4Uuyjha|sl`CqIFX3$))7Zs)^S&@kNb4A zPiCE9$24xBguIj)Sl`A)6JnX)2eqHR$f~;DEv%q;+qa0xa?GA02Ij6OcQbI>ZMQnW z)z8!OpycS(50k5zi$rGsj1X!}6+2`Uut3sJu>R|^+si8^GqQ+?JStRGnkN5HHrlFG zY~Bl=Hsz;B?@iWZF#rGw-mX^R0)ilToB<&K-v7G^y9u!K0TgAN(KW+u*J~2%)4My+ z9&~tN`s=d?0<;1XLJ$(_!U3Y$B6ys=R!wXhMHH6Pq-lpXX&RxnNz=SINn<<7R;3i7 zl}vvUHw2P4ik+wksrF<&Ymd6#wRUzLtV%UhaN$;s!~r330VIxKkhmZrB*Xy_oH@}8 zH>7exAXVbc?%J_KO4|dB{Ifgr{=Vvt!{KlyGrHcSf4u5s6~E6n!5zTfLjT7PndR zr{0%(`trO|wVEUS$(XDRJ=I)2(1_;b_hh#DfczP22=&UKN?pNRNa)o%hEoV$3&}ac zJpt@BkJ*AdHpC4xSc!w{|Tq39UCqLF$SYoIId44m)5zc)^dC-BvDol2w% z$c*E9(Cs|Xc`$HJ&J8|4q+W{5gaA^&t2H>%yfb(`)|WRNm&u=x#QQ^};?tp8EF!;l zG#T@o?;rgz76Z)t-6OsDISlEYu`}KA>3a^Y(h7rzjF-7xY&|bBVYs{+qI?n;4Jh#% zv*%#DtbV=VSHX+SA}Z=(@;jadm^cy01hv%WS7-!wCp=*zf@B!v70k1eQ_opuF+>SSmRI#;>7R}mhx7}Yos~)^q2ekbeEaBoKK#Te;og~5tQhqY<6RH`RbAm9xVyD zxaB(A2um}{SanS8srD4L>p)$m_$z8b(E)BORMUhdT75}HI4f{h%6phm!F@|j<%(lC0J{E`p}w1xxGnkZdp|R za^ly0ayM%f5{3^NKH3-Qek)~r=&bE?qnZeQDw&UIuic@T4U{JvXBrK;iZ_uje zBNa$EGUS*hmceq^WVR_*isvYn&R~8`UQ&WeNjaYjWTFmIk+zOjltIWe5BF~H- zllS-cPKKT2%JND^HyKr4#hH%gt5xen8l%%;HnW)=tXx}ymCR;lrPXh6!3v?zTdc;c zbY^}1+B#^O)+TyVA&I07r&6JIabC4-g$~ijqsGN;9^X+ybRPC$EkN18Dp0)UBUgze z>9DQ}Z6%jkzj`URyqVF%6hI^js&H^iwAczZYH+A@2H53ow==`pP_s%W9R=H33xdXA z$U>B}Rv93!7aixO*i{LgHL)zeIC)t z8k-#mfL)Brh{$ipl6@*4ME*6l)Ij#3>T;|j?t$ZbI8PRFD`O+UxV5=QvTmf{*(Nc+SS!@+CTA8qex2vJ!D1p7LcC|HdN|{CJpK9v%%n_a8tHjsI}^V7IURF(O|` zoND?rpT!!4w7N~yeMq`{gy&AH5w?z%RJfBjo%;+csugv97#0sYwEvJC#6;|28TZAs(PLB4f zJBR!r`QG1ZPxMFY8={$Yc$|HY!AiqG5Qb3-ZK~)42r?d&Dw0+&LQYaay(y&kWRr}^ z(j*&pCylp0L)ljlJPATyz@sPe>Wg@G(;7i6&Si)F=lg&Dr`?ym=g0Q!wx!RzH~O>f zHS0sCr(ZjXhOL$!SgxL0XH&NfQl24<@Sc1R>hUkiu*?FK&~ryHEb}PEL!(_KD91bp zj5rAisw@g2=@^IwDZ-tQ86)C(YXN;F9MNN~0VATw_`&AOSg>@R$+S zyE0b_Ojxj>^xQhqA6C3<@_u65;QbD9>WqY_aQgkKs%*6s$!K;cvibIgyEa{5E8G3x z%J2mX$1KKB7XXfQ?qk#^KJbLt8tkG=wzY% zY#l|-q zpDgys<%jt=D`fAD&8^nkhwIB>gGfkCgmNQK2a~ND zDhGX4tEAc5JJ@YD$hPQuVTs%j@<>HqmlCE(tf)^)Jt2vT0>)2>7cpOSRoNYVmw7ys z1=j`h^VES^p1xk-l=`YYR=iB0?mi3VWLlhq^vtCv+Ih-=U%J@T87HM zB>0AmA1M?antb6Y^M3Z_$Dpn0APPNA6`1d{&p!gLR2t0PEG#M!%PwtG-W5LMeH%)w zd({`g)MngAfpMRnfbnP6PN72s@0fyv-UA^Os>X1IaxTa&>(Yw-2A=fEtAbNSJdP{M z6>0K54Z-P(Xee1f&vzdGAbV3dK|1jk( z8b%Bnqy&N1k!sXx_P~vX7zuZU>?ivg##bQ#J9a~D)WW^f#$lS{P@SfmpseQ}=Ta@x+CNb1L)g{<%u3y{VY+l>B zx`)6P)}V~TL115^V~6!fifkkS1$q#+bwCHy7Tl*jFAg<)mVYt}M-oQM`QN7<=m>w< z6C4}m{QTx5sWukl2or%bF#|@IFI+IU=UUI1l#_FrMN-YV-^~6%Dh$hUJOBc^UB&j#(goy~uFH7Gpj_0c~q0`mLE(Y_} z(}jXfJRJ*E7tii>jbX~O=QeD zmC5*}GQ8cWr(;PIIbLj5`E{ncGz>jXMU3~$GW_%k^n}n@yTlk5__ZW4j`K$WS;8#s zV7FBuZnR?=+L^qMasCGCob0&mMutCloQ+ex4+HZEUCNE}Ghtdemgb@{IFXph)luS+ePpB`6=k5AZRtV`3*&45`G%8jsF7_uO;u zd~JXK@QqjIjvI6x+dKp7GO%o4p8ck4dVy~!$6z~wl^LlrL{~#B833&}z(kBwNKkl#t}#rAh=HRK2DWl3Ajh2jfNa6vX8}4 z_4VSma`d!g*_J1BI&tiFx6|o)<|?=~VtHHX?Cq0*6dI80#m@(DK?eV0w=i`F;yOwa zOrx5*GX%B1`0@B~`Q+iV{rQTgZte}Jsj(0VH=51KWU|5QAsaO(NQCj*aqA^l8+Qz2 zOd`x$YQ3R+R91az8u&feb-ciUQx;|;Oa&6s5{yww@{^V@LIp48I4=z9(z?FsTZ!-h zI2Kt_lWo+C-g4;+)9dDWX|B_?WeJ`otHJPo?qdynXZqHu=Gew&m+;>~Xm>%(0nrHL zUy=!J#3H=b2%J;LfRh-9H!xu7HlhK7F{rIeW67olybsRL8ldZXJr^kZl8bQP485%( z=1keKj-sevMA09kVTPsqlAatu`9cl^)3I7twpXoMyh$J0j#n52rx&=rU<ex8>IXJ%ks{=+z2`qf_#HVm!AI5+K{+-%qESWp`w`7Y&it?wxMKUqPfFY6rH|ZtYeWO|f*z)&N~m zB-!@SqNTINMj};`vSSSU?|Y7t?7Z#`!-fe6Vq4_h@ww-oJ02Z9_=uBF%B-xsBp>9N z3AA!5XlulStB;O^xGc$$RQNM?BUO+UDeV11HqL&cJa`#O{Hl9fB(u&%HkZm2a@K4c zJ)?oFz)CMw z8*Gihb5&K_iC{;*Y!O9}h20prDaqiIA-U1;H*92kiIg~!R1M-+d5ooq)`t^lv+7Zr zV54nU!hWemmKpWrrd1AxA*fT={4bkkr;((N;DpQ1wgTr;l&9Y{T$W8Ax zX|}S*9|_la^|}n9@v}7T+?Uql=!tc!v~%CXl(HKnE)p*(LtVYe<}ohLW7c{g^`~vc)q@cr z=!0u>X0+cYsmso^$KY;~I=W8d;g&j&rEv~q$VFOoFi$`!4Yp{IfWnSd(N=bOdT}{F z|MA0z({m6QylTjWErO9-+dAIBVERXL7H#Zk+WHmrQiv*lYZ=rDK+oH0Iv_@T%OV3Y_PkuN}>f%XhH`8FJsMaAtckoRTIq%?` z$szZf%_iww^#Z}p1+Tnc?)zPZ&HeptDVg+n@+u9s(Ya3<0sx7xw({wd3i8pZ1HZ^Y z)9B_#HvXo4RjifCsYsu+9{#3#T znZ@X^h~4v`?Xm<=a&-B^VC zop!+GIxa=+BAYvua%7mU!*~|;0H*pMlHqVi!|u^|w|@`cA8k)Qw>n@a%Rip`#y_B2 z3UM}QR-lH1u42!MO5Kry3Cr!9Ihtj6%m6UE;GqCrT&O%J@8y8;&^1^Fxo1QJyO&)5 z(9ThoIjU`-J#<+%W*rs<1*I$A-7}-7bYD(=Z#n$^^nAmE!Ki(DCfC}dHV%GiUG?k1 z(})Wv1Pa*9`P`%aXcLJQk0vEqQ5aV8=Q$RScmqSg8;{={O2q zc1{0I8yH@rA>}3I=xM7?!}pyMjnv_K0}bMN8iU)ea~1s2?i;Z-0>f=^il=*^y-_Ys z>=*%Y1+bO}H|6`w1_r^tBNmpe?%S=va8~iW&;Gjfu*mHr8g4CkJ+xfA?844Vt8v|Lz8|sGI5eRDL~n>vp*`Ucxg#>Zv^>TaQ2DyS%}qe*Vl(H_ zUb#y1x#9(AjjPFxJ)=0U9`M8uy`h6KI`T1M#pH=Vk!_w$*)zi(r?BXThcHABgmFt) zL#5TCis!E732uGzoucIuU_SLCdxuLTj&Ne-?fgRg(N0&g!KDFSBY7TM+qFm@I3cDS z&K}q#<{*X^C6&#k&!4?~@#V``&tAOz>g%*0Y70B<&a<287@_GP&Ehv^yF;MszX6Li zc$~df&2Ah;5S9(WWa31M2nRSsm5m6t*`FkWNUW5D&l9}#N zcaPU|8gYf=T)A*VoRItgga-&mu82qA0g$NbnXz{hC%^&ru)EV;UG>#hRbS83i+_Cd zqnSVJ@__C0mj9TEu`GU?Uq1YH-km#JKDWxD2Be;TDzmUFBPHYN zxox;MZIueaRc*N*YESNS_0X;!pU9_=(3i(F*Y&A;nDP!+c&?9IYq;guqf)mkh+j6= z@2+m$-X831^!vT7+dG5%+v~gcHX4uMCN#+5AW`x$_e@)JV~`TvD1G>R1THVWUwAjK zaic|=EG^q@`gjs4J}7Yws(fxfm&&WnOP2$?GDYg_q1>L5kw5Tky#tpfVUsOdwv8^M z%Vw8t+qV6dZQFKLmu=g&ZCj_mnK`r0TKE2djEu~Th#h<#;_Z3@g|&4c?ZDx$YeWpR#y8`@y3e&-YaJ zsB`)-rHgGTwpVsV9pSHQh#TjdRd2_D6O1DD#b~I8p z!G}rPH_jM>Q15ON9rV|8qPWoNoxaYSaI-53T&s0%)D57EE#F`+s5E)S?&6^P?8wr^ z7;jUFmFE{75CWApoZNjyd0&Ae6QLj#Asr2qLw%wf_Y2d^^ieYW*wElElKjXd&^(F* z+SZcjWLmXyelf-lBxK^uW(CHT$Bp_JG#{@l^EtL)&9(jiv-UUTyaj?<@@a*A?abJx^Z>u6Zl)1Xu zK$do4YoE^cC28^qj;c@D3T@Gt7)Z-c0Z5E;AAW*aSUFjnDO2WW-O5<00Z}feGM*X z82#{fXc(kWzpkq04^znGU&@ro->c$SXqK!w$$KHwNZN3eILQTJ-mMKArJ{|zxC<&- zb(&Lie=Amw9V!jrO(WfiPZniTurZu&6;`-OR9MrJ|EvV?s>CRw+S{~*!nV=I5rJ52 z*B&nlFnD{bhYlE27Q^E{>>(KohO-dC zk8doy5+s{TRiud^3+(d}2E#d@7xeBe;^A3v`2w>S!7iL&MUVipOk(>aK@`wJ>X7c{ zs~6LO51>$34zYsJY{x~)aM4jUkF(P&5zaQ#JR#Cm9zkrTyLB>E{SlEKL9RRl*Tw0P zbaWcaavMIse?EWIuDYH-<8{1D<=AbLkr=G`#R`D1`}ry0`tNRGv>B6~_@R~h3Xxi= zjlhr%lWK9XgUa+tN%*HgV-==3Al741V;By?n=gdWkjpsu_iE0Bhmi**{YH{k-LQ-z zN2**yQZ~#Y2eNO_R36+sFZFO$->8RA$#zP$_YT!Lj376KM=Vh|9%twwW>1?C)${mc z7ARjPae zr+E9MUxWC|05FN=cS3L{ z`yh<}ZZYtc;TcGkXl^ND>L6jN+b(FT>mXq$EBl|p#%)uZlITgGlZ}5QY!Wyxk{gg! z^$&tc{z34lr5cOk^e>Ji^|(tFZUIuybWq|56f_I)j_^YCQfbeUYzx;-p7ZOm!BS*9 zAg0(}f0Fqe4yOY=0A@w|$bkc!#&19R=8w|zkM8OozMSu`rJEhQY@WcnTGBaTVIzP|iIoZgQnOn-SKd+uhsm7to~8 za@n0IyRXGED7#bxP2(_$4kL-icl&pHhK*C(-}iGTv3v$nXjP0H*IxBQv05XMxy`)V zpYNv&rWKKbE8d-~ExirW#=9))oYb(K*?|`uT1*CbsEB4mgGZad?8NdwRl5+ZpK9m< z@Ho^eRJ%u;M*wsBbpp|-XeWQQjSHqD5&v&1cySCx7IUNF9B@*S3*qqbrTHVm>L5qV z;AInIDi;OH-;t5ZB%phP`cSHq9M#3Ht2%s>MYL^FPJ}|BTwr#T*2KwzMb#Trt*8)V z48sVj(`)-?uJsfIJQi474urH6Izr`D$%%q-VL@CH9)P>IqWDrJUYbru|H?mXI>*RCIBKQ}*bjBRAV-c}6O_RzKR3F{q{2pZIzA$0b4wX;`d&}1 zx&QF|V03d4^l%f@xMt31`Y~h(YS)43zG4Q5ouA?p0F-!z*x-?^rmUlTTo z(jfieb$39s3y2s30tPQ~Q?7)VP$?T!uKxbK(tV=3$3XlW3;Wwly-hITX13Dk5l>rV5(kLuK>>oiS7uFX8nmy)0$PGoSdCq(*p$bJ!O!3`Hn(|Yh#R>D{cksFMEdE`1b&R zUAgbX_a54P&s^@Lecp_YWN6)6QlZn^rkgA?5%%x?)WiDZY7qHaUcuAqgqs|4*)qEF za61#yUhD6(0v?48?5WIJUAVfSv~la+6XE;#XOk)b7|cnE9ES`DQ5Jnw(Wtrpq2{XE z9bk`#kcR%T8cl&FY0%0-A6(x|MLWrI)+_i0HM@?U;`8Jm-O6(6{d9F7+vI-He0xoD_dW{08#(EJGwPW_ml#tM}`6@F8Q@-3>DFw@t1e8S=M$MrjWFw%74U(}OID+FbK6&J30sZ%PE@2W_68heXHAB^xOF7`Fu8bG*RYCY7U(r(NYA#ZPZX) zz4V27kuZQdN7z@R5hY*Qr6J-1cN99vl0xfE)<^c|Ej3V&RTBC_*e zjS&~1pRMsj|6WHUU^H;0+jIF@&=R5pi%G%HtUDk42Do$?=ISs_kzlZbAnw(;!l0y~ zPU=UXJEm!3+y)$?y-=h`?--Z&<|c$^QOY0N(gQ8TML`o4Kl!vGNs$l%qkyFGs`}wA z?LkfXs^sZ7PXbUZrY-yOOLr7S8L7^V28BKbwG1?)ITSD4d|AM+atZ5twRk1vOLZ*n ziQ`b^2w|kodz-(^NXiUe)C6Evn@*pgonA zqcuyI;e|8LNEPKI z#fjypCEo>A+?WQK6VxNmM(vUQBc00drSc-pQf5fgLPqE2Vl7tP2fBK__?DS&TLoU~ z&#pOx_5gh=A)7xA>^=5;EzuFBaUI-ALMTdubp=Egp#j~6ymRzmk_wFqaYWUkuzp%t zBN;bodY-;aFFBr8bZQ4x$7^ktNjI+qDsq)-K5ACcxvlN4&ouoz$D5m;dkqIS-rwu} zAT~ZuKfz{JeXm!$Q#jRgH<>S~zTv)@_6iUOFRHv=gPS|AfX{`g57vkI<(UtJcBsp8 zp~+}Kfo+((AE)z!j}$p=j!CP^*k7Ixgf{iePW4jEQDYExd$QTd1}8^QH`r^pqd&)i zy9IAXw^-k_XfX{iF0dgTpfsz=x)z$bOj^%Q;yN=)y(w4s74hb1_|av+GCs?NXF^Hq z@jP*kJ8sXH75z%@Wk>=Kaccq^vj`a+d+dv#CrV+z6T4Aaa-e zbD)hG@CxKuS;5jABfGx}1W2)vVr(|28Iq9MdgHAl%Bc;LTjP(W10IA#J)F&ygoli2 zlkeppg~ive!+mm+-J-)Rj*ZOX;E_#5&SggXg-=1TlQ%-#!d;T6ntc}|?t)p>0D7cG zTtK~|1NlCr>XGszA3|#Y_5J&egg?j#I*F6#>%^|lCgx50Mi<8(3~lG-)ZCm%>C$C8 zx0)ubZrInGqKW6c>zaY7D|#B6$-BISwfOyf3L!y}`>N0@fH0|2bPOzr7Qzuil-W->cP46is%3h2(3`z-aQ}X-Ke7OQttM@nL*_ z0wpp6yQuQm7j-k|^Lw+qTq@C!wLs~GrvnIxtAdcA1mV9o%`h`6KsmZN-?=PNms1$b zs&aqytZ_|pr&I;2JjNZ3O=4rG!V^^_C^Dl=C_XVgFkycy+e)8)6_GTgn%Jgb$5;#T&7sm1{Bx78qAs8|n6s_#~?T!K(U4g2W-55bDO{D!uQs?S~nU!0&96n)LD9F_p<4VQJoM89BX| zV)FfZ)tKuJPuIPI?cCpPwKPcO7)VKfK8DTBrjOH#!z+%pDjK>D zgLlB4F)Gn>q!x_XnG_zX z#629{GCvqgmzHI6FJn4|m8`+kIv+nGSp&NDz*4L=3tVMxAFziHh`r1sXrH(ZDyR?P z8tuNi?N)gojP8>*S7SK^-f|UGa7i{D#BBA>>git&x!oqNIewiWd%b5qEsUYI%ADs* zPQmR-s$ItO;XJNPe`*MC$G-vN@o}`%XYsSH^kY@Ou7e=7tT(_#r;G4%3IC!A7zj$0 z5mB-RQR6;Z)(c6e-BImuan?DGY*SuFTT#mOFIh*cZogZ*%KLB};mf|+-sLF2Po1sU z2)~g>%fupziaB7=IU8*iOWKo(%XI#37~NEpTaZW3OzT6Z_t+?(_*jihHu&0pr#yZ~ zY;LW*G3HmYfmW*;?y#6*CTq%2|zS(m#r@9+R!!@u8Y#~JH>aytp!S$9rY#TwXEj7QzY>9znAbGfvq zXBeZek;ua*XZ&RhfuceN9!ZpMpNYB6x0Jt5$PwehC0mGiK`mEA=BFei%=zV^I6G>b zUPz(mBEfw{&Fz=xRgw~viguEwdIskkX$vUOynYA%K4|doe@V*(H1*Sfzl&dcjqpEt z#>&q8zj@|klB&~yP|zvoGKcZ){r1=5?;cO$34$~R1cq1h05AYJS@pjq`fEK0d3pY8 zYa6Q%0|tHlkOP|GbyD#pxIPA`DB(40V?`3m-=c9p+gu6tChQuRzT%|kZ6~_!Zek2x zd_mgif^?$x**S2&g^An9S(AJ-qVkTWxKmRz+SS3Tjzh&V=Q8vW1=|uNPSi=p$+ejZ zHITRXSUG<=)tea*7O0yv1yYjX=Zvw#RH_<-HDN987MTHyczX4$a`J3ijG6RpwsWW> z8TCV$zPvyKHcDo?TB0acs;ryN;k-wc`>BJVPEDGO8pft$l@%u5drGQS$xcQ|Y`LAB zUHY}iu^S`N76ca&Yl>$oAJx)|%pI3c9^mu>55Bnmx?05*Y2U^PRRG_hc#vKw*;MWx zNCgnkcNoURUIO=RbyqcqsCZ5D=JP;?$4(4zdVYyosXtH|s1aPfWu{Q9F(Ve(z*+fB z@?`srM1ywd`pR9B2H`1H>1E;?`x-1EDig>>?R%j0lVe1+%F#3k{J;M)eNdEN#-JD$ z`^yFmIx}X|`x`F2&?xg8zsA!Cb7bU9m-r$qJUq;h0L+L1Ef2*vainlYy-1;&(ioe= zb3>#&(cBIVG*0>Ql~iL!)@tSJt^P|N{%^TKEyS)b?dgz({m zoeM(LiC!v#!`n)v_|BIv$5%?&MeiL0pRrB}45uM$`b16GY$+C2_+S+g_(4&BQt;%- z|5mrr>?6>Af++;tU=>t>!1N*rBCmF(>l}u8W#UUt&K{M?$U&*}Uq`_X#1!^Cq;kyW zVo*y{Qf=4W^rqgZ^Y8e)>?LU4VFICLv?5CUSv zD@I??2B>p3XfV_FJf>WJy|zHAtA?d)HpraNYp0)am%9irCM20YEQ%6*jsB@jk$i zbxr@oHDpwYj0U8hn+C`}FS6Y0RzRLL1##N|a{$KxU0h9&4oNwICpKt_|Mu06-hCOq z4We^;PGX+Gl(fqkk*ikDQGkdGwUW;EWS3-e5cJTjTZi(uZnSwv&hPJyc9GagH;I&lFr$QL8YgvPBq5x)Y>W zw&)@PiLI>YcL7I+#PqW36{G#TgXq}CAAdt{ebbhi>AHkHu$O|`lOb?N(INKn4&t$rDio9>ygi(w zOWnSrYT7Ct-&&58mlKu|OC(-F`<;uLWC4B6hqa-B(>D!nDpF~ z)TGRoSC9)nGo6G|+48AE+9r|7{<|C#k2S=;{QotutFEoZ zAN7B;Z(vI!`lEc`Jk?IJJB^?elG74FRTDP$6@1nAY=bT(T{G!Dake3SIFi6r5|Y%j z(&1DeNB)?#8vwOf@Rz@RP{ph5c&XW@gQz4WXr^Q&>H(>iq_e+CiKQM~Lh_I|e~0&| z>WopWA}XciYQw2M6!Y%8ReN-8+Jru&#FsY9t(I7lK&d3EWaUDtCJwD6fAaJ03gx5& zO>mB7d`!9dboy0{P0>q6)0eR@fl@2`8lxWc{=GJ7H7R!b9{O#AQT*d0fSyu>k!pNg z9GDz@<30Eld1trz3_IgRYD+Mc1kYRp1hf+CzHklc4++T9nrKY15LE8`EU!-mA&+$X zNw30Rc4}2SA5sj=4S|3#B`1fWEH^3Vd;|9&LnnjtK@_5KWv-s@Y2Vx0X0PcwzQlAD z_otkYql2hids<}wP|>E_$q<_N&aKJ#PRr>LG~AyCi8wAXK$(LuGY6nl|Ew|tP5xi2G5GV? z3(Tv=29o7^7ZW?>D8xz~@yS7GN|B&ohIZ%s#RlyW@wd<+d$UTCIvZGk15kng*MKG( zh)rAV7XYPqupvde(wb|o++hAC-nJ60&XT{l2p8FCXnJjRby`r28{+f+~1IZJ? zweG?t4#NJsa`ZF9U68ONu`<*st#WA)h*MxB>sN5WV*mVP!Q$p(XM$lhw146oHoQxq zjt=@S?|`qW)+BVaMl>c#NtnNnPZJXpPcTfd&dd)HQYcQ2ijj}^k@HV&E zWEf`T7s<*=ejNXySLyC&47QS%8kVv?z*(99BGc&P7_)d7QyC|{05+`;tUlu5q1PHH z;)u`l1i_CGkmWh$6=Ncp9--%>U~3p7XyIV!QQ`CdsB1X^qPC{GYe`Yt;C;4a8XM!p@8bAtq6C$NF1k}{}ruf8(2$=>4 zcI5iRXC`4Nunuvs&an@1tc&I2G=LPXOU!zc_5Nj8Qbs~Ty0&4Jyu3z2d@iP)YKo>Z zoMUQqRlpzlhCgbiwgNs160)WVO#vX%=pn>Fu(je4hY)`MJ}%eDeSn2vdX$}yLWQ7! zp`)vzhh?3hrcb;ezlnsXPfmOe_DT>xHRg&Rp_*MrXC76Hkl>>)2F z+uog|XhE|z!};(a+2SgT(zo z+k9`r>`sA78c3YFxd5JaL|%kQsgnf*e#b)CY%c}@WOb=2{D-Odtke*qp~bO_iMON* zq`?+7&BIJxPSyv4+Yl~bWZNfGq!uLrdVItp>M6!V7xL2yP$am0xP9DS?f?O@zJEk6 zh>I`j_=`8QzDv3}sxST+)t68rhuO}88d&trRTx`9=rQ~*Ln9TrjYgk$GbEm%UB5o` z?wiG!@C;hH2%uiHKCxmk8;JZxHdc~E_FE#ryqmUF7(f>BH;J@-JJfuFGEskcIRRsm z(KPrL-S&&hwckN@_AK@jc$=d$jNIVYr~N779*uCJ2d0lC=K$xOA3_E&HmI2ozHe0G zg*{WwbbFnrgL_9>6#YQ83nsj&;+u)-p_fiK;!V<#?S|8cX-Y834#70h*F5_ zoFwyoQ&HAo&{*64Thi?8R3jXY{=4ty6TUcz#ZF5aA(_8V`&>9wbOP zj)fXhPDF@N;^7lc|mfB`c1}z@}kd3<_t*_zMBdR`wX-cxh4+U z92YF%MZJKKeqLV#n0AgQBu2O&N&vgBzyqc^?SNZdb5%+&P{tsQPf;KQ9XXk-9*#&q zY3`RmNlF2_f?VvR zpFLcRe;Ph#z35bYF`+wi6kFaxf6bZWb2ta=kG3%Lsl_u)sk3rvjOvd|A8E*Z^Mv%h z4(i^3ig|(hjj3}UN5woq5w1Wy@RSE^gmIHJUHU|VCH&+hHFd8QxgzH5rpo>b*ohdd zn*?Uen(K7_+q4MQTSf9QY^ZyduLY(3z3HL;sxPnQc&7H$41x-w3QWa?gmjvT`D&`H z0tU8@vr2h1_L%}=8?CDRs>FcHu?P#4L%k^ z3yfsxDY_gDlHyl#$K=P`&wpuRzlD0IlH`A^#`fc(zw){Uzswk8=?dSbe%ui2J@ZvR zO8(?GXbNU%0lOCn!fZI(H@<*}`Mg-oT77l3I-eku*33NrM#YJ3h=sy5c>?3nI_g1K6ugG}CaQ%rl*gH{vx5 zBvSFW)_4h-ZzeZ4ufq;HE9r;(@xP@LOvcSsZ6ySb0!gXkQFC}AAVo3AWx{4$GU)?`?% zQ3X)eqwA$|id2olI1_H4d_SQhQ{UID0S*&?>ux6QW2-nqbn7nW!Q;r;8PRXK!C!S&oQd73>I##vOuBWxRM8BxN;1>;YOHb0IRT^f zzz?lNlkYKz=t<{@gDbc}_W3AY>ZEGjY~~4PIYCmCO^AMBRD=20=a5CI<)ooZ4txPm z6*Y-WqIX+#5Y^Y;1_HAdRx~ISsnW;fC`XXoGpJ?I&BaB>WA=W}-tpaiw|~tQ_EY@CzZU(4_jE0+H#dKRA*a-!BE&|vruLDc z&^|x~!(@6t?G`>KVm26!GA#1xCZ!R^KSEl|oNyj(H^9v96vSpDqFRwt^}{VQ7l^ss z<@0xSS!qz!V|xotP6z3jn}e?DNh(Y7q#g3{vb;t^l>c5Io&8@&P>L1v0{1>OXK3sp zo3u&qE-f`Od=vPW=@k!S=Yhi%I&4n%m?KJ2Jq0iU{WKSxFOICKLP~6Hk*~R_pvjMh zT%nOoX)b)E{G7%zI)^2r- z*W&=zC_P|47|JBklWQbW^#@J|}4PEgC8lm<1>CAmzsu6y`QnS!$; zfQOD*Z0(~deeLGyF7s$-|xC)M~#WGzzW z4u~?wn7J+voBhD86l7rhZJHKgQNs`I zKb#b)`Y+lT0<@j=Pi!X|drc9cD)ZiAKBsy?BLz>5GPwGCV*#KP-Q&~EaG)9V4!QEP zYjRw77=I~rQ@vRzh4m$y?#^f7Bp^M4Ow_!?>6W{evsS)l_=HbG;#y~?hiVTJ=x*{q zTSK2KU}*J41i*T@fVFBoxwW95CQ|HIns7w%Vn(7s;#0#5bgf7bqhaZ}-8x{YWHyat zTU}JBVYt*Z%LI92#fdR~Ld+Exh?p*PNB3D+;n2;tx_4um zsqjzdt3Oima9E>Z259!Apg_W;{EnFN9%1!(14{8S(2kP&*^uaKwffDV-Nl|X80YLdB%b>Rl|GWJq7;8 zk~MAju11Q}w*YX4mkI^pN8RxL;rQ*#ManfeDrWD@Y6C7mb?2$Kb)YDV{Q;ZO*z{>H z+s$Wl>7DjV`I5(^WaYsE&7hk^H#zDHbI~9!OPA;Z7IGfcBF-)%ixIabjeLrxd?U0* zGEt_olz?<#A1r#su#_IfD*v})QGvUQZ6^yE4z|Jz_m3PU^09vW2rfC9&cW8SxbdXA zJVP@R8P5AexuOD|Od|PDJU4U&b;OTO!Q1<8RP{)13|Q%(nOx{e(P?PgPqepd!2QB9 zbwiRF;x*>Gh~_D1;c)CdMg`ljKMm~?*puy+J-PAEJ;1d{H8p_L9*l> z{Xg&gx`{zDX!tV4ujRvdu;U{$ixJjxYCKDUiIOVkb`-x4%NJHK?~&&LO7gLGY43ZX zNGOVIhnz=*GsG=mzM0|B8-`3+v2>w)+tN!%3mdW0^g7UP8`KCpoSkJR+jf73&aC3& zK9{%kaHr^KHgSY%DkVX?8?!Dd_%cqT^_O*l=itErRW;CkN-1y|((hg) zye9FEjhk)=wDc`$@`JOiM|!%DFd%WS<3%u`MppARUFRy+GI9E?b+s2N-b*f=8P7tB zc0cP6C6;I;7d;2xAH8rW`CCgA88ag6SvWf_sc=jlzzrS3x8Ji2-LJ;}iG;_2PVM7ngC3O1WLo4=43`)nQokk#)CFVH0kNS^V02pbL74Ls_3gn zUF8gZBNTQ7JnJ(W9Ax9&T<^4xXuc8gB86C8#(a^!o}ru5FOb)7!F8?k!Ogj_y1C}L zxVrh2x1>l=#o1(;oT5n^W*%$6i3COg%14+6FBr%1Cu0BT;-zFcfhERWWMGs`E}So} z6%XmqwM@TN?pM&JkgP^QU!Bg1D4ng?up+%FF4tK38Z2OA&ab4I6!|aAH$POru@YCj znZVv0{=O7lh?_nS`?N&-JC9b~JzQ33!eZl*m7biNg$ZoVC7NOs~nZ7)A zcYG~^DIP9Py56mIIx{!R#lUToN9LH)=DLM;Ce;|nJWob@j}?U8K7ZZ!=k`0o6+)ef zW^U>4pJ=DWQ~H{(y27HwfZMf!OzSabNe-lI70^)@KsyvQs#^DEo8cB=>w3Q&l2WO> zIp+VU%}{fE!z2vwpE%fq#iJ!X#c7dJmMsWBEe4>{#W=*ZMnO|qmz$yzkg^rs`D2w%}?xyKf?$W6!zIp&+HvvuHri3mvo zvlxTZ30tg5A31j}|CPHDQ;WP|u*$$-mW6Ko7h`1I_0P@PO0 zToPlMF_d?-+!peh;CQ_1>)jH+PR|prM>mA(3*?iV#(f4Bgb2t2mH=x0SrEz+sojA| z%z{Bp)PurI?1fQDtc6A(FmeXa8Cjbc*ydf7R3fNUfjQE9WCUiYao(NLerU`-Xl!J@_2GGo!K}h?^T|^*pjFP7SPH^&)b$A zgp{yp{-m1T3`{6nSwQc#|+sXlc;2{@A?Y z)dVu?V|x^rpcN$#+ah@xHYbn z7(1b9j!L+FE5MyPv$a3v|6_mln{_7$WPaQb(dx^)*i$2?VffZM9*B2!enFnty6rGS zgZB(5t=VvZ%Bsw&t3i)>ARd+in8-pNQiM{YrJMz+rpQQ`q0c~8|J}{`$4!#_+f)K2 zL6*^CnZ3Dlg=fZKB(r)mRGEim#TfXIwDZr|bBIuTgH0l6F$;-1gKBnSlEd&sJBDo^ zPFP26pR&+>u$V}V(DB>-M6X(u8cL|_eP0`?G4YKt)-UGVR45!y=8Bc2s3ys==v9Qn zXuYm0ev`AM>~1#SA=a@NqXK%MeOx?p=BZA9xrT}bMq3)w<4@$SgH`!xc>8p$%7s_X z3DHo=CfY>S^+flhTCwU$;0V@BBS*;9SmZk%K|H8W=71@J2t3PlnNa+}9WUYrQkLg; zHMuAS1eG_045nrWRj`C86lo(y4JO=N(a{mhkxH?Zh_%U9S|nV3nFAZRX&A9TEchl1 zwV%RLB!uo5W>rh<1G$iG*R5U-F^odTz1Q zqm*3(3O*&Utmf0XeK>LbrA!%0bBRcuQXH7-{(hOe5DL|dR5^M@Dstg;?YQk+A%s(C ziU}VA!*D@*{pbPR(Q$ONYUODA@M;ZK0YIf&9d>q%Dcc&ZIg&Qq_4%X`I=#%GIx{T^ z`lXu}m##+4b0&XWN_)?qmfnVP5nCocA}=aidh|)H+RoI66dV@dbKVztD@bxfe#b^k zk@rx@eG(8yk9ZR;M;OD zM;@-B%W3F*v=F)N`>Nqndm3;ZeYPX;Kc?A2EqYMkrPlvZM`7BI?=Gccq2p!g4GW z?-^h+!pG6-HHIA~<|f+emQ952S7lku!DGb)Q5iL>>?wJ1DTC16F=mP|GA7A~$O}D| zNQWN8P75QQ*N)+LlFxtp#Tbj0@tU0Wxan_pS*hP9V{EqiUO+>+e0ID;XD9RJL39XF4UQ0MQb9(fvzJ|%W_1u28J~^b+rRVm z;YxkFxGq+;)kO$!Y~Ar=lPfzHBCiF-CP6w*UFWU=-aCjQUr4LRXWv0Fa5AEO5Vpq}(OKcnWNh9#3)U#e#7jTQUH16~=W$_v zJ%UesSNxBRwmHc}6gRa%Ke@BvV(5pWC1L2`%D58LJN6kB(%x5H4HLuL_pPcu4g;eJ zgH1*TuKNCdbadnao(|rg?mk2o&dFIW;_)VO_O6ZkdC|u7Fn-_g-y+r{T=WxMYXmbj zKerH%5GY{{VI8SZO&$uVVZK?B85G9om~_1=P{4nUS9HGCFBa@iesY83YJs~L@u0fU zCq;r-Jsq*LGE5~G4<}q=y2g3q|s`8K8_(=n@tV}IT z*Jh_i&6(Ol>wW?KssY2?MGZN30AyuO@n(7pmW4D?bA ze`V8c9<4hH+voO8YrE<$*eUn(wVew&TYVJNa6N|N>#RB6^ln78Qpv-0PZmJ;d3I-n zgsQP=j`GzpBF+N=WNvv&&!@>$@x;sm)AI(1gdXP?s44*k0x?WiV?vJ>9ITsbkw6P9@}Sg@wZE z|LbA)=QlS83nb&_=|Mi)vgZlpsB`Hb=_d zjFsH8*M9`jODzmZ{TJA#-wj$|S4HY-K?8`zh^;I|_uxn>M?;^w_?k~9gZEX4O~$50 zKn5pnC-<^G(g%nLc)qV0^CwRP2FZUPwoEjP%s@9jc^m}EK_3Jlke<{L&N&aGN^~=; ziLyNMDsKEa0*;Oyos=$9p70zwe2N0_FMM>?PB7LXYmpQ<5v;2iw+~i^HvNgD6~v z!!FCda*TVPd7Oi8i#r2&O}&Q(=VS8=sp$a&kFGnkK8S~KC({)^a2UGbtzd|v%kTZ3 zlNQZ`Ebar_4D~Pi^663Qq~*_I1}P|pj?WrJGKR6S1G~d2tB5)T5g6SxLIDOr*dOxo zlPvGO+^wY@V+d0fUiLpU=NbpPbz7>5>OpM12itW|4*33Hy%c_H&!O%bgR#wt;oNCp z8JTbA0*39|(x&WTZ3XiwL8zVLBpw)06-;yF5G1t%6Oa|t4anphI}3eG$(kl{MOAXc zcw=WlK1?cJK$gk50bf?p_i!E<=(m~MI{<%tOBYvyG}eFit>6(Cyo&6Xml4I69QKs^K&?{zmrjQI3R`LP#$dcG}N^u#~s?aBN~ zFsuBK0QI$a2JdEbu_?ypoUrG?ur8xaH6Vou1fJW7oY>jk2Rg(8=8IJ zImCWwB7#Ho7hi`)uke`b81=B;vnq^rincf42Qc7i8p~(~32;XIXA&-IkaNUV##HQ; zAv-7DR9~Y(9j+jPD+$a(Dnl-fY94ZeLWfyPZho~Zvu|$*$2s7=CA71IW?l_TyvnIs zSB?!EIaa2*)!6IF&a3z4R6i+ET{4QUlt1a9D;tQqVu@RJe7b#2LFb-b;3-gsL)x-8 zJdL>&fP73&k>0(3-22DXylUqk8~fIjT8(1ca%(51f0Zt_v46Gfi9FMFPE+JWb5^BG zK2|&I;&f)~m+rrD#;Fw39YwN(6DN9)_4UTN<$|XU7_SFYtQA@1KKZDV2nAiRj75 z3+~b3e&uzytT#wWDQZbjpOITDb_I>VT}3JGY9+XeDm%s%Q?8dx(kXa}20L*a=gxLw zk)qA%qYG{h{+;@vZOd>hA#3af2DG<|7FN-};MWY6Gj9B%!{H7j6jd z7?SpR7yrasAhe{Hi-!N1$`LjJMCL%v~dY2BIO4_I`yWl zg`~qSN~j(RMTIa*O7$R1X=z`g#nr|;G_sEx?aZ-qsite|=OqM+!PYD}1Eh@gg8oN014Z_;x&&7X^`=4|+ZAFDr{y3U61!-SKSz z^Y*=dO;oogDPyW>`JyE>scUMP$s_WHO#lAt@4o~D73NbiiWDjlfpuWNrWehyaANPG zy!$wzK`&qE#24usN}XVss-u3XRX;wpC^?H47B61I$D-NonEBp-BE>@30H6p)u0wY< zQNgfcD#z8Q0sr%ot=4H90m8l>||GC@_@Or<`Hb z{7^@HFnvLhD@Oe_OVpQ03QF=!2?}L|@`1a3pMTu2&j>eOiC2@9)g@oei}#%7kmXcU zf$GmGM>V|~qY~Df2VEQJ6hmV%X{*iI)@I#LJFE*V1l_!Wjoy#D%GS!EfJWN zLydV;=PAsp+^Xy2`D%8vja8nNG^fL>2{{F5F@w^Xf}#Xd1vODoxk8({)DXd+;O4k~ z2J{rK{eYWin@@X&wbLGxmbGEb`o|`_X4H=e{v092`$V1IcbK#&ib??0B(5CmBn`gEhxxXR>Zb&%lUW3`;OD+AH^t<1M@BO-5ya~g;Xrq4h z@;<(M74i7aRm4WTcdI8IZ^^fM$m$VpeB3Az(XIgqHYVKE%Jmsu%ll#248PynYMs$Kb#Lk^EHnjOh(9fJndMiyy>ViWq)bxQMyouqtn&m9H zZMu2W$`EiK$rFJoma#Bfq^;t^FGY4mI*))Pg>u99f7HUyhG1kevcm1Z;ExU=Lv<-= zC*K@;(*Bv}Qhj!?WMxTaS#{dw^-8z!ps2H*mx(C@)(gR0{QmOpZF!Z6zEvd+NV^%r zbTZa2&a&F;Y=`IcyVTj#DT?QQ)faawHFq%KuZF$e{{d7qKf>U#29^zYob6g!Y#hmX z1}Tx0Mih1N5_J`u5Qn5@M&xi-A}3ldN92&=E=5wyA!&o8+s)}3PA_}9M}26>V1co; z53vnw9JwAGAXwOb^dbp%!(0fEW1o!#UgR|av=Cwhj%}5snupYQ#B6s@v3 zFzNY|zj^-Nx1YcF;qxaSM$xPa#`G}!k8i#I)9?IIg_WK^dGh@6_ZE<-dOIHjmv23P z{1LfvCf*T1vY_mm!Y+Q@|BgUDnd~9Y0te&^be&x3d6tX1@s~0uQw%3kk7NDaravVE)d3@uK}F06o&~R-hqj~`)_|I0-KRr+ zy{3Ox!&qVcj{udzj?Cs9-U&TC24{EGS(W_xa*wr&&-CY1Rkk=U_qCh;q-q!{<3X0E zE?eUwYmSC5oi+VI&OVezth(@GmB(j=x%)9R6}@{W#f} znLqrinG?sFeB|leMe>8WlZXE>XB>y^m9etR;0pXC(Rw1vqAkT4(?7<>!t8gPj81hy zUxc+@W52h^*hG|EyWdX!YsyD{{+8MZ)7xxpg8fd~49*<>V)1XAUyU^mAFQOB0swTj z;tu;wvR^jGkNw-l$A+zXsYHABYwJ!eaS^m{-RCFF9n8tb_}?vkS5i|=AZ-xGGqjQ?UQh3QJyJlcuaH)kq)hNLQjEE!w-IAXlyHOJ|iy#wB} z6qHrjw|o!Xi!Hq5#UgYu|A2kM3v060Bi|eac6f*Wj*3Fr+T<@!bsuKe|FCrla5UyC zmL#jGS**zie3~9!K(t3RRdGrLfM;4Tcu{3&&k0mMhWES|Q@@`MCN_M&E%UYTWNOQt z7)^;$w1CoZ-XP~el86PA13qZMpFz5C0LP0;1N0N)kuCGqty`%mT2fI`HZddARSd3$ z2@FJ|k=wvj2#X7TV7LoOl%nPtSDWJYYqxJLP{xQIUES`U7#&S+nGrk|S-~p!P^e85 zzky6e#NbRoZJTa#R2YX}ypy!)bja>y5fn6c(>6^c6}d$v4W|~^a3_o#;0cff=^vJ5 zpJVu7ZM`99bv-tI$dgaodzu1-zZE!Nu0MI`e;cwluLU5~a2_kLB{=fQxt{M1wUTd) zxAjtTY7QXudrd+U#3`_QN*ciX0e`xM46uCA)4>2%5W4);m(u1Zc~u2H4i|R+>y82$TOw5 zM%ti7gEI|IKoJ>2b2PNDES=@Z73e~YZWSk0D2Yl5-zlbKq=~eol~Z~N(U6cbpbiui zWEBgPc-XC;tg0=CEi5?&HTgJlv6FK5jIr${PXimB73=_Y?b-D{uBri82>!gwM}9r; zBcB~-&-u~qkcT9IHjDBkt^sqER3uy#%T=Cp*Pe7_8*%~izxUF|z&b=Yd(Ao+4_Yic zJsY_~HdZ^xN^{E%7fGz1=RJ)19n)Lno?W81?%66@p6D?$c?qw*NemHz8}uJq@} zN~PZ>sB3}V50H;S?R5bc`x1bI96*)ng`ddp928vMiJt!71{i*&It-^%s*0v}1nvJJ z`3fOB5@J3E`A*M4JHXd7-LCM@J16#fZWsw+(oLVjhBr#T} zM+V2BwWV-C+VzrA>gO7>*Y6NgM{J}vumhEx>RcIWi$!c`zgWbdB+FfWb)9kEM=Ky! zMbj5M`Vh+*tXmXXj#>3J)Jt}uZKb6{)=jg9p;T5pbfFSPA$GevGz>|8S!SD{L^Exk zTsF@pTEPGgIBk_)>QDkl7;72-G>{_XFWh}Y88IYdWrz+B2hdpY2<_b*-G&{4c~13V zRe|Jw^9ipE8G7Hr7HL$9X>c7OBduW^OsS>@9sB$H)kPaG7mfT`>sUYVVmE2U+*lXo zhla_=r@Fn8mb{W{Sl$7MPf&yep)V*YL3=u?DYRqH&PoO)Z#0(*rXNYNik56l-mA5( zOn%flNIsZrn@p)1qKB2fYJxJYuFC3An3i*d;y1I8)FRbf1Z`Sn!pAsaQ#9Df) zfy0VKbOvY~-_PQtf#~fP66}|=W=W8qEZu5mpEJ^cdUsGoqiwlc< zNp%IfRgg*0W9w0!zU+5&DL*FnYp78|3&PbrIUcPCy&AJxzfeLoy6M&xfpZp*yz`*G zs>laOu&Od-y&ZrA=fL9qbzmN9_|(6EO+qzn0{J6*Lvl3REL*c*zKMnpJZrEt$zvyE zFU!87ArH=XrteUXGG+Pw_`ZM@6Y0OKgXRS*BZ*GM0>|OeN{OmN*ExTXu3r8buXRR);XVWSYs@g z_A$Net7gH@k-g*W>x~-Ytazc9%m=IuzEPH8$1EL0w;E}|blV{`_2ik5g~Zsao~S0v z(_$*pY#8=R4ED`g*!=(RKXYR%C$D&Lyo_@O!Kzq2Cy^jbW zE8NgeE#Q}aYC!tCE|Y$)yPw;ocA{1Byz@|GGy96VCB)^@Y#4DH&O>!eRhR{)rGFcl zHN_dutc3GW-|EchIs|F^-F+Kr?zqwCg^BwS3QsNJ9c7IO%9j4Cu0-h?gy4%KaQx*UP^pH%LU!+bh2&9pOYzvE z!q-Wj(JjR@k8^N+t1_;uZ3I{NbgBFG8c46pfqu!<{pO3|*PD@&rjEdngJIysgX6U> zJNdMr*F|)x?*h3H?1V0f``t$CHGNL7k*LHEm*K?2zB9_sQc0`@=k?q zuWN7@H=lN1B+t%uob@^^Dl!q)daJl8!P3dH$h&CC3i2qni|tVF26}|X!fxMPb%*^$ z;c@7z=Bm8R^FTdAKiU8Y!;_Ge3_*7J&1r&?WGh1uhkORPBlB3x&}0wR#2Tnv7+K8< zvZBfscQAI3=60|wAX>xQQ0Tw0) z8_8`4&}ixX-XW6!AqbOCu3u>KTxS-i)PfB4Y6gq-W0gyKR5+pV z=xC$@s%%gpMlm)ydQ^D*1_~Zx1L%|io=13`?Nm!o6Hye7l3-FKR@;UWquku0v@%p$ z6Bk6J6~PyYX-aefb(~Ib+cDF*WgZkslZM2N3m146nz(T7N(}q}|A#I#?p*jAy!W=9 zJ}EKE&RI;(oO|wf&iT&y=IzguZ(a`VEhI15N>(SbV&r6EsY;pT1bbnia-+l|C>C>b$5H6;prC4E~7At+O08DQX90ucAqqou`fo z-wuM12ukq9E5W-bAur|yVhK4|6o}z!HtxrwGUjD&2E$P>l(T`en3cud{GiHC8s2(6 z0)>YQ?*!(Rh+r3_UWq6K!}r`>c=~z-$}g^*>tzr=C&uBGKL~r%L6}`WwVz6+y|BJA zK3ZUtB3nwStP?8+^jRRhm`pFtp{0foRW!SZV#rnsGrGpO3(wcTBH-P*Fq-78c^F-Z zJf-k)B`|c0X5s6~`HO3{(S(~ri=sP7JXYYxL4dKhFf2eYq{0%sA0P2qjqQ-B zV~dpY2sV8F<;GADA{%nJJ1EMTmk?&@ab!>=?0S5|4rb*tVnf*54Fo%<#{hlsd7BG) zBW*kR{7noy(-ZJ0Gv&v^A?CAM)Qp0KGZJj%CePpsrMmFviEfLz`LIfDn;OE)=cVNM ztU~^NJ;3gL-(_4UXmAq*e%%h$`tr~m=Gtr~%En|#XstwZM31g2g|LI!Kv*rYNG9TO z6NJ#rjH}6q4V)&ht3Dog&nOa8v-$ijRLh&R)O`=JUqEYlh)znxu%jKl=)~wP+f5gd zP`s`8Ew;=y+fk8mzN43#7$R>*LVa88WRTbcvNqXbP&}|BZ6wkkDBd3_HUJ4uERXfb zF3x3ly`St#j&5u0(^a3vrA4}Oi;ZHj)uB;D@aOrGC)Oted+`19R{5!aI2+|S1gUS6*se<|&UatSo zwe|>job4N3Z{)V|-M>P0aFF(})ivnb0SBZ=dO(4u4cZiWa25i+qIPxGid$0awOi!B zcV>71~%{=?}v+v z2Eo>%>-c(TMXxMe%^P;;hPqu37v_^t<(>^&`})s8w*BTWf4A@IUfIVZlRb=$@37du zX*+I~+llp!UFUmvUS@!Iz14%gP`n(3=tfdrn`zg4%Wk>-x)U|;mYF>CJ(tT&4SZio zzG>AU?_KzEE&8V293(^j?Cfvp}I5q~m!N8A>R@e@KA`e0B_j{%$=DQ~&F z2KfNQd)6r)AwqHx6A7iX^vT7=NZJ5&R|b;)vbI+tsr=tnkq=woI?vkP!@krj$2{O* zNppaJTn&e&$5X^}igvqN0fi@~MaVdo^>AxTeRO6(m3-~$|-W5Wj|x9~M# zRJ6?gCVIZeT15|YY^oQnnQGZ{c~}%6g*oD0bIuP%nYZ z6mm=Ia-wwBJJct1kI;0U;6x`(;%P2*%k0;uh{C|jKBG{;+cFS9Eoyw&G}z z!D2RrEuGIEMd2XK@d%1-#!uidTbU3-R_;rd#DzI-5pZ(WmX|P9KiJG;A`6Nl*9^yj z+$Q)v)CNN)`Cb+z`pEd{D+Uu%F4!292*dsF@^D3?3e;DK0>XR`l}x|pg#lg$neX>t zgg@z_g;@(x8jEIG3^uLb_KleApfolU(Ev~-5FrPJIxKS38`M)Z&tb*OS2C*wSA7oU z5dvvNJ3yD-xUji_g`azsmUCzH8U*@PLQ=CE91_;>O6(h)5lQ;pl>Tw4cCiKJSSC zsdfE?QtnF_*S{x*adXzB={Ob2eZc1l=Xi7mJX94vR8=Vz#Gj$aOGwzhUL@F|2`5&< zal44`wNO$~l$S!d2NA=T>8(Ib8^ISBKF2%fJ#^sgX3oX2vh`I^jAtsjfO(7O_UUJH z;4hx}G|#kWwl(jdkh|{qOFFa#q7pbCMH&HrBUuYUrTCLIdpeG8{D+EPszDB!J^iHN4MQijJYQk6tD~$)^WSWvMz=kv41R>g)X!=7X z?GVbq)3ZN^BthRx$%ljNt6SC`qMF$Lt{GGnb&KtjykR%|4K9*LV47DP!{BE~`5@Z9 zun554cz@eU(PQhY+~2!V)c)kuJ~8s8Bas-cbm+2=38+aAMPfB01|1w=N9{UZR}|+a zcH*^pb9x4Z-;&!741?JWW$*bk_PaU&wl7ZQ8 zOXrJo%yY+g0{n5y`nrQ;7LByiXh@dJ%#1v*P<>&=HvJLi>b36^wrcoGdATLeWz0cW zw*4({HyuySeVjE1TKH^jI#5QU1x)EW{3|A5VV1w%awvWvn%=9KAWFpzjR0u?W|*I{ zu<;X&_xv~kM^^QM!?80$f=URRdQKy=%P5lg_#Hu?LNW==ZSlDxo#g+pMmr8s%T;E@ zIxq#ad(kw%g2A6OJgOOufO2GdP@=d9e_;G^SCRI`XZ?~A6#<3wGl1cgmg9%YNi zE^5zqPKp0>?=*5T@%`^F<7?-?h5%haqQ4asEw@=_UEHX#*r_b+qG6;#4`Blb-!8LT zCR;3iX_JG~>&05tcMW=**fJA$M#5g;v^r-UWvT z<9NA;5`VZaf1p3_?Pte_VpORWbPz6Pr-dg8K8}D59YL7<4kA+0q~pcuqDOqfqRbHs z#H`3>(wJRMg+!-4gA9YN?e57n<5Vl~ic$y7d8m+5J0UtOP?af}VVrnm4GIO{^pQru z;#b-C?8Y9s`n(npWcxY`JOsWDTb?Pl&(^HZc8F8q)JY)$YrBrzIP<5?>^x(?dpNjD~1HkfS zij>6?cB92In3n#UkD5IXm+iv@wdtNog-(xu%&DOVX3yo=wW3qJplYRgs`A9I?T> zsv5*Nh(a+{tHI{;^!VRIwVO)>#&eb9Jt(|4brkexD>=_sA$)8GW}qC{CfEh-NL96{ zgUZfz?d}~86<4c8j1UwRnrPy3_&JvC4Nl=hOSe>Q%`4tCkQV@K$9C5>%kJK0cO~7j zoZ0z1rccxx$fo`ix4RHTM_ZEZzGH2luaaPprtS|z$@{ga^)bCy+Pk3qZrvSfK9Q;3 z&Rm#B=nn^ogR@uaDM_aN@IHc>EM`WO7mtkscY6>oB)k*m%A9=u>{<6!QH*k5qI2db z=mXpE{H+!CFALlyvpWowo@!TK)Nz;yL(UvIi93(JeJKc6=5dw1&i*)Mn(r0ac9dU& z@q-qs%DD7v5>2>!;yJr>x^FBK+ieR+ComC>$?E}()9L@3Y_(*lSpdSJDS^>hH1s#v z!^eGO2#vmODaCdE^Gtz~^wJi8S-$8oJMfw}dE7b~7rG+Qw*b5H1B(6C zz^o%K-J2XI#eIe27Q2%*ZPfdCVSn*@Wjpix7}MXf_C)jMGv&YaP=zJbR(cais*8N7mgqi$f*+ zj+$2!5#Vf{J(%>3&}7WflKMil?bs`-u{H7$#J9fAcT522A=M4{f1o?{8TjMg^5pQV zC}MblPLqRoxSffyi&;vn_!AvYnoUwnF5n$4;4kgVBXfzBx>5NWsU>PT&5G@y)4SzY z*fa#qOh7=b@Xm5$0Ni6Uy#hixkpz+1on{u90XPfUxFJF2 zy3DQvOgK7&2BC2$bq;Ob>rM8%R>F2Fy>$x4DBHlLU<$>na?X zxzrw?>Dc3($;J_(NeP_KQ2Mo9mvwlCf^NXFOPg3+qGC0#v`?WkLLpmcZZ4R(l>l+2 z3GbJgGe&dg#Q86w%keN?ry9cpe?|Gz4@RHC~JJv(tAk!J2 zC+qOUV!8#hjI(mf88|@LC4$POYoV@i%aW(+Dt86<@rs-Ho^RE8I(1a}+t8r>epW0? zhp-TZNk!-4p(~eEFie?~nSPe(eDs#~iEU`c`Cq1aJT=Znnix0cCu>2srk+Xsh@9M% z9wx7)*B7dr+2DJg@1i(oefYsZp2GHUC?Boh2bT|Id|po}ut_6t`=YO8l3O z7ooQorJRfZ0eY3-2ITJtm>_tZW>yqa*J}lBf}o9K<@SjdO@X#3YP6{f{%uj`U;3kH z4fIEwKAfN}P@oN*{wfL>Y0tScvpcgpOYYiIs?qc@Xj+mbXJpNKGBh}qHuMb1 zs*;t~jSR8J!OYgSt|1kbca(5+*lE;FAuCziPn6h%QWBAl9G{%yR7H5oGGW`CG}yO@TR;iJ(Puvo|08}h7F|SYc?%8 zD;n~aVp_&-k&&33U2`hE-3!7?hAA5{V&pVUHlBPuokwUSkkAk|B~$iDBukmqtPH)v zVbE7RPOh!4ypmX1POMx@#OH4;&#zC1MN58Ukr~87z)#WI&C1X}sY<3vHUPG3x`quA z7e;|s!c5WWFoD0Tn2!%OADLG9LO0f!=MI|kQDr5r|ilnG!DFzhFTb2#Ub{gBVBDy2TybXQc5iV+ zlq|D~?&ljKp6=hN%eeE0VeAkac%cb-X!4G6TaL5UhK6Hc9L4c(HJm2Mx}%qLD!Z z=r)}VQ!5892^I(4Yibs&du(}$hv_i7jN328 zLgFc)q-w@UVeV2xbHgqUp=T$8iPjP?-(FsWm@%Kpsg}Z1gdFOk0)e*RfbS(#9djsk zRovx)Dt7kr#4Ab|akO6GgeUJRvtnoQU{^<;OwN?ejxWatOyw(^{-%_Q?`$g&uxDXW z7uewxU=AKH>abnRkh?z55TV!wm%qe26Wa=*0wwX-Wi%Eh`TYiR+k$d&Ag{r3`winq z9Inh*0YJau6e;BQAt5=Mh?SARY7ZAhPny;Za$nxv(Tx;hjXB&H!F)3Mwo>HKBs}u_ zR3k{Klvpw#5=c23kQ)^fkK|;|a{Ni9L@A}z)<4!0h!NaGaLLg_wu#xc1bc#;AD3V| z*%b<;g00A(di5q+xy&8DoU`NBFa?{3O$iq)KS24Q@$WIR30~+H-(@@R8Fx-!Ry3@Qomi^q0EuvpAEf8X4r#BUt{6$DGKb{SG((- z0?W3L!uP46NS*W9N(-M4&J2z?BTMBk7Xi;2o$S9t?SefdTFQ=lf^|nbMLdSpr)9~? z88Xu&y)1j^2yx1SeJ=nb><{4<|B3Lk+nPFyPZ~mKaOmz>vy5I@Fa9kP`hOcm!Tm8q^#h_8pJd+`S$EM3hNaI-UX& zWh=QBc=CRHf^z(@&l0(O2K_$7Wf*287RmbUh4}hL;?^`N1A(H$wu1~gTAIFsZM#eZ zIgLANIrV9E0D($@Rz+3RJyoOp-&DozmBqx;@=8T*c;N_CO1`L-GNtgY!KxS@9zIYN zg+OB3x5?em4LL)UteML|`2r!!_(@c(E_4jg98CFKcoXM9pLefXsYjsKHIFbf&L+0?A~vX6+BwP@BEfb-f-&XRV4`}Le7sD z>K4xFoBV@}PeA35#rq!=WXA}WQICq2vtJQ-5dM_<7Tt)0-~31J<|sl1Z09IoMeoJP zSd83d^A|eXpp8Su8_$nJ8&>C`dO_dhQFV@vPe8SAqIYTpy2L@A9iTDd9dIjc5nswNHyaZ`{#y(#F1vZX)>UC;`>vbwf>eR*a6hPW}m za3gUQGlYGePOHB=<_^0msGU7-=yt-jS*KW7@`W^&a8{aqlLu!KU+3fgZC0l;*j$g99KhHSl z%W(!zYp0W(%;+nUnzOG8qou*G7jzRWRZa2phqwbkib+XTK|!t!JEy@Cl}rWMan;AL ziBEtm`-7H~%?>lpff7L)4FD+|Mp=^vbjBOnmC}bC5OWPqvv`L^`~u6Bt9c$ zFZYt;)Ommi^?-y)+2h{zMw*uH%cEFL*@wLs`${>B7Bdp;x0d?a1Hjn3+4owg4dzbc zZM~Y)lH2qi2+8u%6YMWfUTgL@G15QV3LJ{tI>h}cT{cBcx7f*(-HrHoDrM}7(8?Z% zI=(T~%$EC_S?Xkb7~_UwGD5(y=H1G3F8Z5dWJEHyOph>5?p2kw2+|VJT1D(5ssIkZ z?iky<)t?Bl)&7CKKN;u@ohm{1hQ0-hX6u@iMN^_t_HzH(y$;e*f0*u2c5e7&JB3g# z@8x3GW3ByBC;pm-A@Terbi-i~aruQ%2=skY6EDyR{p z9y{6W)__66Mv7Gv;H|Sci>LE#*`Cc|NP|yDD+&7C2Z^wSNSU3?EyhDDCbqgnsxqbkaH)TJFpKGLc#Nd<% z+2@27m{b$GPdOKqbD*~5cBJ4frA^azkH0ItOAAaRIusu>fT-4v&VRNI8C-2<^p8EV zY3I9+iUqD_$5!iU+EA=7QWvrY2QrS~IS=;LV7~Xk*g$BMs*<*qli=t!O&sb!6XiD$ zkI=z5n_ZEM-tiCeRPfx#+Pfrdvor1^bu5KFj%j0CG0CQ45j{<|b~Bn}T1t{X5U_M& z=Cb@@_Z>w`={u%C?#M8yoWjW^vWXrT#(CYGl*hFL&HS3!BsmjokSv*KZ^YV`EL_q# zI5hC@TdV8Kuf|Pl7xqrRraYu}bmP8Yvj_ju5~k^K6o{=nLZYB(WEz4HQ|8YYfS{@8 zfp%7h)kJoD`D7l%fJ_z)+lAPKfXHCUS=oRhj|p9Xz5t^mQ6gz6J_Rybd}4-6FP(!O z#lC6B0se??2EpWNz8CgIdOO>SBV~D-3~OUJkp1(8;W!cy6b&6qWQ+Xli3`nm+f|@6&BiXDV8<^W+54x7J0Ui8aqwEXSGzMdIX>>u2_d`&e%ECC z3JkQmnFD_n2jUQQvC|jZ+3e)eqZGGpsG#hN7X|iv7cVzZ#kAv})ycs+`~oCeCok1Q zJ@2-ILO(YoTAhrt?@xBk798k~q~7OST+D&Lu(W6RD<{vB?sTz@4P6>*#%E9N zV+J6dxZ-TsX_Va=E`)@jI6<77KrS`AmN~N*-^|{`2w*Tbx>9Po_Fv zcoZYM?DwZeCh)_v71~<&3W7oZOhJ#>%pz0$ll~DY17h+6hG8EzJT<_+J2g^U%=+I` zSK7+MYc@OmoujV%rR?~NFBSA9%yqX@$DiSSuoG>w*2PZt%@?PGi5abhA)~ziD8<8r zXNotk4Db>vo3ghOFR>q95h@TnS4IrjC{(3&U2qEcat}_~m8ZG(IX1G`-R|r!k)m7> zN-msce|WV&n1#M3>YawYwY0!4&yMv_4?nfAahvtdHF+VfcVWFb*I!&h&`>gQ>td9> zKetjXmv>rf<14{_BQXk^ILgRUFZ=0*o(dDyIT0|-5aXX50{&4%gcoa?KIw&|#h$}! zakKSy9cpWYJzk^-v)5n3UM>72HV)tiR{%ow;(>f*_L=26`@5;W`5V$M#2DlL2S_z8 z?Ot|drh>{0|5Z_O`OsK}23L_4nzsx+mpy-Adjanj0KC}uQ!Uh<7YrSauMZZ^RKPu4 z?2k53v*@+T<`bGUX=K0dIe=9#5ylU{^Zt}DwrY-*m zl2R!5<`JSJc%1t;jcL|QrVVRcCx58ooO~mce=?W1(Byy;4t@nFP*#YDh)^h+d@fXS zavd}00RFG+T& z%;rU2V%U^z^A5yfCaaGF7R8&LeJijD@ANBY!eX>upaT}gIe|h}0CV|iR_-K*#!h&g zb&$(S12GhaX}#fyh!m@?8Z3&JMsy=maN(sQXthcOwUi;#oQ{!9QYUG(3-t}enn&;f zT=)V$gFA8IYq)gUu@x+y)yW_J@0|00#NQ{^lL*gaRFaelH;s<-+jzC9SV>f=b0%~e zQKpE)VXZ2v3Mjr}oR)}BG4m?Y*Ve;$f;dX@ss=lhQs|25b6aVm!2_WiGb?xKr@FC! zd1YUENU`fhPu4)8P(?lwF8o9AfkK&yU^l1AxMm_`IB-sC5CR%vv~fGV(d}iTMmVEb z5D!vFNUVUDad4<*HHQUYq(Nz$P#PQrmBw>98AOIr_F#WEbDCSvZ|>mS(ZR-ECY!c8 zSDIL4%Zx>0!%dIvgUgim>t-qP*~f!+){I2QrsjSP?c!(+6^b3%-1Lqww-CBsfnxB< ztu9ZSzS!Q;JVvp3jb`I;Y0vT$DtN?YC0jZdP}0RYb2yNAIqAvuC%WSZUVycfm`mZB zr@^J(7VvHGENm96uaVY1t;CsTQkeU`36mL$e*+J`zMZ$B19+U>nB8yNHW0wy{Z|ki z3frqJ)OH380sN4(4ltk#hP3WW5D<(_B}8S?5viovUq2r8MOmM26QipiY>T`*-u-xY zl=K^#{60Zzx#8mO6vaB2{0Sq2K@iC;x@GtDk@;&W0)7`qRC6g1-|l3j(R+8WBpxdk zZK$T1y*t1=SFM+KB?aT7j^Yj%Eim%L^}QM1Y}kf8-E$+g zqw5Ms&AwSruk#VRYbFGjqF0`E=gej8tg*STdz1e&{Ornzi^PM|l8I(~AUrO~zRWA4pvMMzlFl+UME3)Bh9rCXgwE1zc$nA|_YZmxIO5>!6x3?@>oXm>w>=sRp zLZ*9-K?C2EC1#FLCcRr5h%0 z8|)BRm)y)lZpe<%Un-H9JKmMCn;57fNmg3{NO`&?W}_j!`G!Ec^w|ijx4{=j6nLGS0Vdj{_m>Zfi0L>ID4*?woLkFLdnk`@QDXX<tpE=EWSePw8 zqST?X&Q~|Lm6g@$c=~ZgM~*`W^81-e)B4#~oNge;EYF5LY%EZ}u0)%iKT47M)jPG$ z#A_^5FjkEaUW$EJnZnyMr%LV1G?NFPuU1R@n_fRN1wYB7{YN+euHqd%rV#KFpUnXIGu7^9!!3 z`_fvguDaJGXe0-00f!iGr!;n-ldU<3q@c(lYV9)eJ8_{2D)`NPl>pE% z+(?N^{UT&gTvJ7YPV1>}@?v~-c=3+M3&(wRX)KfS&4pR!`s8=zF!={;=Y@cjsTY%Tj#~||KxS9`8)`6f{w+!x{d5NQCyDt8a zQ-ZAsEl7r%F(MEE08#oz#(zb9MdXXm8*Z?%xu=^0TjYB_~VtFPioux zzP4dh4H`+p&~JP)ed$SR>IE^oHiI z-eIy5krs|0ewFa*c07}nvdHX_^|>eCvF2eH*tbTY#f$_GMgmnTvvtgqf>EGqD0d9L zQ8l1S1<_>dP#UM!5W+J>1A%k{CxMXP6a?!oeiy{6TM^ZG1hU~W-VgNQ4O`?s>FEpF z@p2Lr+(*uyTuioj9X|v?7{GrYo`p)cXV#i=fcHg-@VGsYs1d0@Cv53~8%70A!%)f- zGt!(e%$}eJEED4fMJ+({wOGU5~Lj1QaSLR_jMDbbhk6=1ZY7H(MAvKlR?202HV7knzPYDFlfN zh;##D-jBgp6YiYbw6DvPablpkKLTi#*HBPPTFY`+&;7Z@a;Gq#B*dO@t?B_1!T`<9 zk&n_uFz0k~*n@5mq}IH{IVm;NfOcA;wH&8~#I3dx$~k-Q}3LaU_Kz^p7p?5qg|MRYAD!I{DIiS_R> zGfl0yLt|;uimF<@U#DzxVJV_z74XM%vV(m$F2DMg&o-?+B5n69bM4+!rlFu-+Qo~? zU7EBcF=KGwRc#6(RxAr5vMl=?8m>M#i0e?lE?EgtT$WACEQj?b) zp)BSA(F>tCntjdiIEn}4s^gxHx+be97c6cPaGmmHzWgTnAL=? z4Z!>0>-f^#u_BApzSX!LbDFej4l(ApG|#R?FeGm%DnQXtO0J&msU+@0ru%s;eqX8v zsJy)X;(krM-I)sCo`9BR=i|$Hkx9^fzspLT$(dsem{65-Dghs;>R02u&ri*`uncg4 zjx5NwQgrFwM47xEyg7Ke7zD&Z2}Iqxea=Vrww{n|7u))wK%!?Rw@vSdzgHnDgWxBw zUS6Z#jP4KneceIbL0X`49A>19UY2l4nMKWW$@!1n%haUjGj(BS^?g25>@Q=JkCwPI zf?^*XL z(zLvO?oat3tB2c+N*biS#kFk{!p2L$_+yqhN(ldLa#pS4j=C>fhV_x}eT>a* zRdu?_;k4E^#E(Dc+S-uP1;^bs0vQg1*tlp4mQuG-&ERZ8^tYzZ`6x1zt#+&%G`lSB zg2A1I1Fbe|b1{%Nw&z2WVbvz>fpM(Dtjp!I~D@zxB_@{;vQA`%t2vaJB#z2svKHqc-B(Vx{_6) z^mXQ%YyHfDPQPneWN~#s2TRo;cu5uce*~6+m4MyLAhrL{_T*EEF7BXn%g9-+tZcKo_ykh< z^tZ6y80E{A6ysiVan@KBBF$mZGz=tD8nhq28^l;>;=k0x6APgo_)LWLr;(XW-g?%& z|14=_J=3p`zi{DY>*voNzC5nh%!^^k4j(7zs{G2wmKFk!CEi&aW^_JCISQBlr2Te_ zaoow{=n-(+eeyy#X?I#$HFZqZ7->_@N7E%mf=_ROXaX^Ol~(&?Udt}ftnk=gRX6n~ zYE8c=f1r-u{%rau!Xuc`F$l}8vgxJKw}5x1DKs0IV~VuPbf@d46YpCTEsgps=EAOn zx98^l7Q$ZqSzT!_e@aEh?O1k6Uw3-o%jOSxbnmyl!atVouKfI5{L|6q&oMg|&+)|S zHuMNe{z9>eQ+o`I#`e)&oBu3lZ5yj~$$xAgnNIi{LL^gKPD61)9rE}=ix9&5zXM6E z3mrN{w;nAt9N-Uq-!C(a&-EPU+N~^opc7nOS??zrzR8^2w=O# z)AfCIX5)Lm^DxfY)bYPp)vk6d0b(A8m6ObrW(W{+^JfI5aYog1kw6e?(ZC?R{*L9jEDXtFvnswjgUc= zj!LLwwE5yf6C(T70RDPAwVQ@y-Wn+6`F2D~Y189=kMn8F3G+(LPjM;0# zUtGO?(iu+Ck5TFFSn@mEJTUKIlsg5tUUD>*k*Q7*T;NW5L8_~ZC?yJ01o2Qel5^dQ7ion*x4q{wWC_T^+! z0&6??K?~AkUp4ZUw(BFhcI-PLN!}aDPY-!b8{z!y^ZQfg;jL_^|x@M=L-K<`| zkH`x@Pr7U?%frGt8V`SCRt5FyJ%9YTZc^#V{4y`cv0fNfn^UgMcWm)3t@=^2yk9qI zkc`_uufPP#QgLJU5VfEWxU0@HarDh?f~p#NQ$(ao6WOI&a*}!S(siJ~hzj`b*m}X? z{Qf+nG@RZtz;jYc>k{ed4F8*^+I4DHr*v|U8(c2mhNW}(r#WX@f!;8iY)P8COTdQ2 z$%$U4DoB@Yd_gmx`e{vrbTxR}qY1z{hFOfjQQ~oEaKj0+x?)H5WYyJYJ3`|5&8tjl zUypk}(35|C*jFv#DPEPdEcQ={%_ zu84OlZTKhl9P{5_I8rSf<`%L&4>lddz{6Mgq^y+Nh{!WrjE7+ef_#fYp*hlyjAa zN?((~dO{;2aal%sA+Pjnn3SaJQ=k=NNE+ti{%wS{65P^MvdvAf?$Ib!Kc?mBTBpe; zVn?>PK773yuF9!3tyjgPHC;87_;{f_TGN*7oR?o3V*18eOC3iS&K=Oz@FJlj|DJWq zauxpMmHUZr-VOD(`Xu=7xauB9A&GvH*dcKfcN&r6AyHl$t|)8h)qMZw2yYXiz=o&c z7@5IY$@rN-c@;Kc3;9b`uv4-m9h8F|iXQdS&V~2>o?3M`X3Qma+o(?3{Ar$2eVFk+j4{ z9E^bnbV5RIDmIc@S~g7Tq!G&gQjXRbC6Fq2ssa+l1Fixn-GL}6d`i?IV=z(#kAqc& z+`V7Cj^5JenyT7}WK~M1i_?YWJ54oF2h??LH*&Ex)oanF) z0Z!yE93*_?%jPOa2j+j&O#m0rLkgv7LiRQWfE^2ahTlU1=Q6+Lu3|!_>+0&-W}{Tm ztLy4&BOBzloE|yJDpLWVK$v*X5CZoE-7|TbBW|~~hY$!-*}KiCP4|warQ}p7C26VU zqyI6gO#R4_(qIA%sEtg^r~zQ8NHJ*+l8=DKXGg}MA=1h;(&Tn#i^d={-2=Qfj^vTL zd|@h;KO>EmYau0zVua-l^*t>NJ!jLaRW078Zi4wg#cpo)@U z*8atTzkdf3X_iwq7B)~KU1aW=2WisNlbWTF7Gv4b|LiuVJC%-2WG+U&z%Dtd4mI^n@T$0*ea?&db`$_`IsiYDGE%1ig_ctwE&D2@y!}W-8 z97M|(&ayZIf`e7*zi|>i`nM2*htZS=2bbe}?hS;4L2p%MEjUCDjBeddd0oG6J$D`Z zU6FUaQaQ+w4%x~aKXo3Tk(x*uv_Pk2$(xQ$Y^;;jQMZuUh=Y=i6jN8a5 z>&7uVonnqhnL4fZT@{%eQ5LfeyCKXU`RU6W`wM(pcgD%e)5%rQ%QEPvx3D%hXiAeS z#1lU73d^HA4x*+xm)WPv1*SU`*%z@-Oi3Ri$41J@MUh4*t+z}hCr>#_DX02HuDciM z(x8m1>84<88lM`Yj%Q^@u-N|=`Gs?4CN5({f=0BO7HS@;uXZmo-3Ap*SGjiZnu7y|mPz zFmTcQlx5Gz(ZWb60z&!HpQ$QgJ)V|XxyBjpv0%^>3^}@Y;LZVuO2ukki5Z=Jb|T{5 zfa6wV~8vz$U9cf-M5S znq8|OBpJ#IN<#}h8g97fa~&*19fyn94BgqKRLnlJ!MgEKfhQUfPUa`1MY2p#nDn=i zPU|6}-TSF83ATgCN&VrDwRmDBx3*uDA4j^)RMRC*g0U7 zjg>_@ZACO_SP8rcRN8_cc@-Kh^Wuc^K7`Evy=n&#%wqkuu+z5AN2Db zMI;>BKY50=EZ6ZSa}+yL;U}R*-i(iZglXbSzgQsVzFd}7BkP9X5CHtlXeg{6L0a@o z5wMqhqw~7uCg<*lBr5%Ybk2o+%#y&|w#+#0N}qbgL#a#2$RaeUm-cgn)D!)n*!JUH z12>Rtg*ST^i(Z0JCHK=A_?OV8-CZI`xKM`vtbUA>b1jHwGq|hgiQaLEsUSDw?_E4~ z;6a_&fmgqKsymm@VmB-ckx{UA!;5Hxut%R5XF>XL`OwXc9QM(vKUV^8I^rt$#wq<= z;Zx%C*T~lC(MY3$B<{%D$EuAWZ8uEWWewFpqhiK`#e?QdF(8r3_U%2>b|EdGxwWWfyO1)|x>Dp1BlH+;-=` z#&0zKu(dc=!f)gAAcY6O)v(sU=OAPTy@QFlAH8r^;%nUW-y;3=y`lDIG8ej5ggFY; z56uv<^L-qj$vX7|Y1a{^xq^<6cF#nZWP5o6Azw^$&z4uC^pLmz;c^&X-+g@#d!*7a>6Bt5CCS>ZOXiN1( zJrfpb5PLx>_#NQ{9xlK(Il&P=Q0#0k3D43VU;IW>Cnef0WgbJbu*6}ll4c<}@RT!q ztNza54;L@f?(Vk=|GW8yK|s?QN6X7bFzucM2yW0L-rtciy9YBvP}6wS>n;+w1| z>uc~&!Ohz7vGOPfiqscvaBB)3#<4KnrA9eTN58!z{xp@6;6e!PcKEYmxv8HG=t?Ul zU2m;*W`$l8ujxQ24Tke-uLt)#b@B1HhKY!Tx%>sg&ip-8$lAtdV8%9qwfna;ljiGn z?Q8w+1c-l4i7j5mTEof6%EXY9WM1ra*Xy`9eXgq34cn1eDKAnVcu~ul`A8Zmd03Dt zFOISagR07fgYY(Tx|nX5?;!6^7DbXwj*1G^Po(@+sXV4y4BS7RjE8zPlqZtfHePL~ z8Eo|@Nk=J}y(ElmuHGY=pQI-;29gO9c>l0#Sll5Tp+5%Z4;&;+91LW>Bus#YCF)Oa zp<^63ysOC@=Zkba^92-aW;au0)J>qquei=o%U4yF(lQt|69+9poj&T3B@)zQi;Cze zYiFisYG&f*BqXJ#WFxU#9fszN zHY+24O#SE4XkNuDIsHx+0JvoAdbbTIwExGI_cPP0pN?GobMiUOJr#r@148l&#Q)LJ zJ@ee`!Yq@J`cB5+*J>c$BR|5gVavMj*(VsrQyYv*EC_&hI{5i>82<|z_ssW!hg1&{ zLZeP54O?HwroewZYU8s(Gz5zz3~e2iEFEAZ2Nb9Or&sUv;^N@qpmcAUavrAuhgu$Z zX}+cqNv&pHE~S8g97tHg{e6N8oHT0y?#G9S?r(HhR2k+6SZWspga>#G=17bPWjGm@ zNM#lDxw}YoSZW#OyZfl%$BCBQvmQ*)Bu5YcB@?|zDd>OshSO3~%KV;Sn5&qWH2A66 zK^yc(VXn2FNrv-&6@z@Etw9YIfLn-Eb`9OsXXu`3wevQ`)k{*DTbHXGE+ZtQAp|qP z`l~Mbal%DKc^uf%0>p53!O-Om`kv*jt5@l-8|SQV>M1UTs93O!r{t>85J}tOf;M#cd4__8R0 z1HI_^i2ZJA7g=8kSw9-uT$)&{4LV+T<)SAHwnLTO19{2Ibfz9-XK%kC=a>d~EaHA{ zY*L4btMclCz6Oll0tpi~{c^1Uw}XkX40wW?RR!2uEhs)u3KU^Tjw8>w(faliGm z1g0cL9aWmppg&3un45%C9f~Xs{3YB{l;>u@VxC(zZ;qSb`7?7cggWaNZ5p{zkZi-) zZg;2~X3qNawB6eb&x%Wi1acHt&>xzJ*x?UkWp*ArZu-c4yNGDBm7x!CCdry=<8*)dJN;F{jQO_%zmI=*>vP`9{OWF zaysj&qkFy@ULEz!R#PKUp^1poP;s(fy-&LQ?V>f7C|VjL1&^Rne(d_1t!Etnk^p{p z#fb8!a$JCFzlKRbwI{1mt-o#mFe|ZBltRyPi~c+99r01CcE`&tli9G3K=l)s@m8|` zkT^fbP8Rc=Jg8(f{W6JtfE=e|vkT(WuSucaV+oV;gx6nD2k$hF-j)lA?x9<%cG6q! z->wqvMB+5Nu##_mjy-Qws$FdGd0#%^_$zn(cSu7h|1y~<9&w5j2Yu|(D(Q0Y z*WX%fO(;wqDs7l$MOtHxJ<6M1U{4trNpH7LVKr8^R~}&Zh7LsBBW^=?aJHuu6?L{B zBShp5%ZSVfob6rR4MOU=er{(;_}-EH{id!cZw5PtZ#g^#YQ=2aw$p$A;v;Qip}rqh%&n?+^z zAw<~Hg@j;~Vjj;RB2ZmjOh>&>G8v3cAXMg#7x7T(BhD;d5&c#Yr58&Kv$qTyQpE~e z&QNWMQIXufaH7AcEwJm1dZ-*dreb+kh2loKGumU4{)x@(R$irt$p(U>k;;39URaJS zu1MNl+~me-&ZrIk>OA75%1CKO;#QELm*SK82>!SiH^SXQGiV5VAfh%}gamHAf#CKO z`>Eu8CY2Mqn0YJxOp_JMe!T;#l`I@+g5yR<=G|C`Ql~$}XZ5|iQm1sq(cN~R$u4$3 zy)%&Gi8>VrCf3X~*V#J%!hC0B7JQ#}KiLUxJ5#Mt7cIr=JAoe8%L$A5JP~i6!afUK zKBpJh{wi$p1}%PDKX$u@pw}LQ=JfpH_N)Ei{1I*AF8AL`Q09~A7sM_;C8nxXK@obe zuM@ix93UdpiwNS@Y-=G~K41$cZH;S(%zDFGSpNjEo%17Y39qO~sh(q)(Luc0I=;Vh zx<=r0;SoA8xPn4%`vw&i1~dgpDP6TN%pP^KkwC=jw}4&1;BT4OO)bKgQg%g(*)fLa zpY)F^I|n&6i@Wn5JSM{E35i)?hLGb!Ccg`jlvM_~A5;;oIBYzu&*TOt_!TNexsk% z=fC!y@NKC7-4qe2%8t%NkDM_fuVZ5au#LlO{%vIJBs5HvJ6Mp>8)D<~h+p?TX9z!d zqMpuKb;*B>g}ypE-kS~4D??^tyynQByP;TI;c{g+QQtr_aXxpm3YMRSGt#mU;UU^Q33tK4|sxSuyc?AXZK8PiQsVKeJh)a)+dqJ{8ire>O&@Uwug$H}iFS-7rC8`> zanBOw_7)BX_7+}%l>;3Q-Zfe@0^o~&K8tkkXXC@u+6)vHt_JPF-Px@L(zgaO!rJ16@`B+{U~&-WZH6}H`QnE3h5e( z+kYX)KZ>zouV2xtt)@%6WYk|-lQ4DA0x=qx7P!(Uc{QVqmM;%3F@Jx1lDGlnt+ zrB8y4KcUbas2@bYj}*$I=hove;8v}Yxj)G&9_`uhkPAEy=iG@_WtP)~b`QQHpU9oJ zkFn=qrItI<8tx!iUAO5Ba8Q+Jz+DfNY*S^jr9kZkCbibs!*3o{am6u9T&E^+Y;;PX1soPmBK+ zK3G)H@c}z42(B9GR*?crOHeidNI**g0+&HT~f zAPftS=a4S0*CL7AFBtx=^*^d-o?VyZ~B+=C`N0*3js0x#aO?8sOenr!qdFK6vGHgu{@c+M*hyAhxRJNH0> zt^X2$jfodGw0%gW@XB~|J+x77x23b?F}!KNs|H*u$p!wSkZh>kUD@DL0g|#Veosh zeK+G1qR29-P8-V^Rh#G*mF3TpQ~2>*M7~$29&^?1<+_`{l|$iHLyKI7i45d^A2K(a zI!Y}HFF(>LukS3DZ8AtgPuuQt`22MjvJK&kS%Hx)GjGh%G?AG(`X*C2o+noEBhBad z9{bk5z~d8h#ga!#nW1lZ>7+pBSGjo@5yApB(R)dAS3J{Kt!Dl$7~>v#05oF~T`}tC+SW zV}z<7k2G7qJq+-=?XG_-ru5M0tUFGc)xKflVyC91QW|4or4-|0YiagG{~30iP5&Kl z7cyFp0}GYObL6>=#2J~tveE;ndXe&ejn@*MOKe}?h~@g-Wcz09c0iVHNYd$O?XQ1ed+rB*CmSpxx#4lXDS--4~|+bQ{Q*D zgQq0=cSnUOr{;^8eh2*Cl5Q=55Sl8e3U(oEI&K;wsu?<&tC$M+t=&bf1e(?ZhJ0Kb zQ)rD2!`P46+-}#SY2v$>38a&k-dUer@Nz>qqn14@IL-~rX=YYa%-0KKhZ<-^G=28P z8ho`z7~MypjvtO`lef<0(yU7w!;!LM=&-7pAYXk6Ap0n%ndRxQ#mGI}!@=VKq zHG_IS6kzFwqB~``w%SgzF~?sNtqP$y-jSl+j_uuIYSt0Zv1LdR^i9k4l6*Xxw8S%N z4o5v*p!6QBi($aepvm2$+J#X*r{gj@)muf~6jv7&igH61l9oNP)*O1iwyc?k%;Sw{ zGK%_l4A(~JTx#~vw;KG?x0}F(SPf$c*lC}6gAo=l70ekAF*LPCh`#TWy^)BznmJ!z zxH{nTzfN8~sJAJ2aw*x_1i`mR=vflq-C)sqNX=^Xm$^upeIB(IJ`A<(!X!%teyoj_ zelVjyw$rD%`M3<%F3WR;l$KAT#BQE#*&RO*+2$E#(TLt2SZvq===xxL&Ov`sxM!XxZIgBH(&Ti6x9V$K8cJCx zQHvZsb1hkha}((dpUTIdz!;{F70GF2On7GeP74b${9jjtOeCk%Yc? zuZgD=-1+TyEINg8bb%^sq=_;yGP1L>5?VMpxtK7rGqTg0nix2{IGO--l`t$be!0Z^ zusPk&b_NQ#@_Rrh+9Jt*A`-Y>fathqdeQ&U_3bzDMG6Bi2RIokyl`x_PBZ;(r82}$ zyMHK#kd+ORrFoqGG?_eK0f%s<)vF-$lXGa@Y%-jev!Vb1#Ad<_FCYS_{w7NoQ1E97 z^fzc68<%kEK69ArY!ztO)%~`(mA7ejpz6Q5GBj|qFrs&McLsoRC}nobNq9er1fGgq z`i-4n?kmLG2BROFv?|r_Vt!p*!=K-~Ts7?{U2r5afKUW=({krw|3C14D_n>gs8dZm z*Z{s9d~9qCbO2xWq82hUUjp+#jN?Emvb#RMn5$hDfj!aB$yqe*lj@1A%`* zs%qREn`Iu-l5rXfYZINb8CPoJOvZyFOT^qqN5TRuVOC;#s)n{A{9OI+U|X;-dH<<= znOn5F3Dz0-R9KSOQlhp}T;dNPZccW3iZ)O);RpC!!(l(!WAU)cpWk6jOb?!o9wLWh zV$>t)bIde9ZMm23y+VK4j^xcV*9qLQY-wCx@^~O%|54g9jXJfZZa`<&WR^+e%36S{?m*4?> z|29e?i(*y=AGJFsz(zp#fI2P;#fDP$=1OJAtyACWRIAbZ!C#~^J~ zr^SvDS1#rl%Y=1pW87#G24HoG$7pTjp7~z*Del$pb2O=t<`Dv*K8FY>`Y&mbl3r>; zYVjXk(LFxzWwY${47Pt5^>}LPPkK{TAu%ohObl7-46^B*`yX9VyN``%sXezYcTV#^ zg~d_LX0i3lw>Z)$6elIrESZ<9Tus?n!&*Mc$B{`=_i!pUv#V#4$Y0TiM31`OWMpkVaNA7XpYEi4jKaXZuLTF)1vdVHrI zW1`@S@E46^-&n9eIVtaakP)>WMR2g=H<^7pXd^lpb(Is~Qk01_73n-SELR#f4_pRd zSkbcxu%`4({7Wf~811HkwI@3|sZ_plU+xPMpDjko=GKf!x0p(o##w=oO~o|6XqM2C zHjTC>U;+9^+!42C2iuw&jl0FgMBm`otifZ~GW^k}Py;5$99J0&_LSs74`!o^)$UQo zx2#z_owrZ@-}Z5N3Bvi1A>8+=vzRn9)cedNCqEQ@SVP;JmE712RhO-3p=GtO1abmt zEXY)M8qvv%ww;!QhF=TgCj7Kj$7I%dkSeZ&-rET*i;^PGzypN-W|yze{Tg~7(m-59 z1daxxc>*>>G$dgx&^u&;HzXlSHKcIh;Nl_wKTZ<N}WvTRJ!z3Q@0&kQbL=xj}YIueXlgBLB(C)FaZUq7S8(lctr2 zNIOE?ihm*EIAT+%S`Cf0@_T&bd`TBdDm=tGBu@qwVg^iVFZ-p$lDO_7rL+$xWz*lR zPPbZITb1@z?tSpaY27#MeL2EfcP(kvn(6nbqG?QbIUOmIc@%MR5t7NHtkFUYSJN`e z@6@uOM0m3-?`{*6CIn^<$ks50U?I4!=$hwv7y7-n>Md?8H>K5S^e&(mB?J9MdaGVv zhCAy@Ko1oxtk0cPs3aE|Q{gp$Ir>0tc-Kdb%V9r~W}o&fyfci!N12D2B0R4y;UtVA z%%s3er}jTe^l4rNg=>LiEY$>eZC59+nGog0ErcX2)x=#bq>TXU4K9(Tdc3o00;*LX zxi@=5-)G^ndAU+)85!nY{LUq{u8$DY;F-CTGOM6#wU6|pp=Z2eR8wuqw6iY~7FXv6 zy!s~snu)suBs6U(HI;-^#HJb&jh(M3lk@e@Rk1f6L%E=_E%OF2fCS0w*EL8G;P2=p z0POrZ06zeat3@ZNTx4pl+H&YY4q>yRdfAYsYD%pg%mH~sL~_3dq5q38`tE{F0vku* z)`O4kT?7KhDd=LtWDV9nyO>I?3%V)M0Oz}i-!HK%nz{d92{0S{oCc3iT5_4)CE~Du zOptFqkyj2`xq@buMGaD3&yL5k<=4kDJ) z$m3P*QaVOyZKpF1|J7YiamvJ2(>y%I2Fc)$qk{A&*76%1Zs(e0*Bde^#v~r$^2V6& zm6d6FB7nSR8;l)aT+I7BG*m~@dRN}f$5-qFb!V6o#HS@&7S@MDb_RTio5pwm)Yvi>J1CfHsZE!Zxo z{oimzfUW-wrwW2@mugxz^M<&hozlFohkUG!IkhQSZw`V8j+&38SOEQhhkEu77CHv< zCq7;V<`O>g7ZUQN;~+2Js02d#@;l|YFDEg*d0W|cc;xx^_R{0B>H9m;n!^8u@=L)5QHWTG9W8(yP^1a)9YS zU(Lwh%XIA?3zu~cd+wsJZ&<&7GFC~}B1T38~q6QQDHR-g*#>XGYpXtjh>-BHN~{d zcuio1j-pmVJQ8qRdO~J;`B<2V03Ec5s;o5$d0$0YaT8{?yjv@dFE9k6(AN>9nX=&P zNc{?I0#qF$2_j7$X0&Luh%Eec5GF(9brnZ$jzz{1HF3`%UtKa;sIZ6qkh}!*;G`d2 zE}QTt0C3z0m8pctEaBms%TI4VYP`p$yba)`C}Wxvln}DcL+Ls&>XK zU%t>k!I|{%Mg1>Umu9G>=6cbwtOi-7(8SBt_P(&^OOo2Ie3wWhZgEN7(sfp8Zt$|I zd?mM8<%#>l=OItr1mpNPU~+WtT-ukA;D%^g*8ecmc=GdzM?hb2@!$xnXb4LcH!T38 zT%a!8;ivjD^G4kq*Pp#a_Q*NE?p#j>3)r__4|r@<-JGqphW zu+MOCW%-9F1zvIX4FS>CNU^6-0aZl*^XdV`h$y8lu&OFBr=lXVA~GpZrAXMp*S1_( z%F;oqHc;HKR#-^M*Eby$ne6zOtOOHi4$AiO8rq^wg-)7me1f5RhKqZGLv4&ngIHV_O!*f_QK73Q8y_6woTfPlB~h)cQv0hqf&j=v$a<>3{cn?5L3&b>R%Y?fe>L{RTXO5Y2P1%Bb*86Y$!Yju>6pGF$y-K?ngk0wD#_NB5|4VmJe&LwVYCbr#` zzgg;F1_KcPRyTHtob-<5o@o=KAPvTZJ%~~iY2DE$(T+{|kP%L&TC8r*6i69Uw9`~* zv=$sLB{>&Ue+NsF-NWK8G(T5l_w41j^O^Za-#K!t|K93V)4TJ*E8ul4(e~EILtJ7! z-@m=YBrOr72U!%FU17f1Vn&)LVGXJn-OYT1olNgls&FeKz5ntXb0OM9SPB7DzGS^* zGDJWVALp`r$b&g$Yqk*3CWz6q@pww6VAm9J6q^D@tG>Kx2qIShB2cwLd_;QU>r`R? zXJ(xH(-vnbx|ye0ueH3|isYaVK8ylRtq?G+_`^ESl2t&O?dJQlRdWi1vHbgMs zqs9zYO+yz9Mj%_4;(U4GF$f9(B3(%e9tvJM4CLgzm6>79onfD`#wrO-{>=$_?o*M3rAl zQjCB6Ppr6g zkqAGc*i=gGlFx2#&xwYfG7e1B7PR*+u0ktNmT358vnR4=!+~c4Xw@zp?t9OJNj)8bfH^8bdnzO^@n_`@C9;OFlMNP|y%ySn zT9>f~o)@nH_K>{4hySUNZseDrKj*59(o8&F4k9@x@{T!FF09+VS`V;S2Mo~p#7lVS zd<;KAY+vavnD0gNkTn;;tdagri5d&3Bo6&p)QfP=hSOBPM}fY-7*CkIoT!0zk?(Yb z^UjL5%FHs32-u5X71=H9w8z>&?Th3?Y#YOHISMT56(=^`Tw(`0bi{{gEAcsL73G;$ zcqZG~5NT``jPX-nPR}}zY%tgy*1Z~AR0zm8aCSMhP_3#Di?c&?IU`Js0ch`l+K^NnoVxxuZd4d!&f=3@vbyyv$q z(^q=gC~hvdE5B&COm`_ZbAIA917SDQ2|~zhtGb zd^_e924A3BKPff$Ktq50MF1tALSFr{wn7kul#;ZgGc=_Q^=zy&ESc7$4D}vx&6rq# zsbtvV#=jILQl5H}j#7q>dTL@i@=%(dj#_$>COj0Da)tWu+CEJq$8{_+IV!{idzC7~ z2{$QwyS+{GNF%$w^@K=*9V{a&f*=%6wNk7p>CVxY5(^K+PiXZVwK&!N3piWT$OO?g zP@N)FTBT9vcdh9Gdf0S*7B23YRwmY_nYr9be24(VZ=g$!r0$tn@j^0SOvoYEuNYw2 z^&m8`AVNqGNcqCIv=-d$(VOHBrgLpre(kHSgJ*J19>#Y^88^jlwKP>Ca2|0k5fS6m zTIPDwr7>g`0M<;7ltlgS&Px;Iot)HW7uIGebLV!qCe?Zyxl75&-{-EH~PS?dP^wj zMM*oIqbkzHWMV=h2tH@X%i9fw0@G2V)6@j{tm3VswaBI?9gx;Shf01^MHxSZv$JvB z!&Uq3$(hg{Ikj~D;9X-dCdkhuL~}VqyIk)n+NBQ3|I2+%5~d^2gph}nkjYZ`!s(r1`4&a~NQI?r@Y3Al>Ob&-=k%D>nnndIcFC%! z-7i*mRaL)Ie9=NtaQ^Z|RY+!xvp}?^%V>VSvaQ!gdf*M2KOH<=w0|>rv2}G#>jfH; zBEg{>!RXJEyPZtZ%;qY%1fKw$j!6hbVNtvjX64IBqejs*m)u8_K_6s}Y3^JTFY7}R z6OKdmd;vs@E)`9tRvBE%nze#8Feq6e0gJFghLBVa`|D66Q)n|YP+3Bi@D5OIW{eyq{XY$>gmIyxpjyBOg_}OmCD+?wtY43yAd%?T= z{wELD=#HhzeA@F=zo*a~Hzn=;_fvw>-MFHfQREixx=3*}9b|-bQld4s#Do;wrI{A>~4?ARz^vk3H=IMdp5pff?+!~4o>5yF!6EHeixT{Ejv_n0nm9ku4x{svbMQcw|4L)BE4$qQxiKyH>-FA6hY6Mo5 z($}bx+3bLFfV&&>P=yn@{AUZEL=1F*>t_s6L#WP}Qvk;N-Y}39gNs7jVnzKIuRDj& zr?Rb$9bSnvh`P9WrS`|cFrxK4{R0zlf#dmhfPb)a6oxNf*i6x`m2gDvsREAlk^BG{ z`)l0#g=Y3K^U%lM6e!M5m=|`#IKjp|(loVO`k6&i4WDaXZ3LD6PQMRu4IDONB=Uja zWi1zNss|7pkyrjP6VPuqV5=qlm127mfQt(h`%x7H1INZ#Bjd`_hHu7zu_VH}r;qdB z0GM}GFUEm}v?AK^Cw)c|NHdOZ+O^fph7-(u+7X>51sJ=?C4+f7k4kq(J}h~{&Jz_vLe#r*UaCL-HQb;nBrRhSC7 z`~k+ovBmXcScazMVr;^%IxKf(&f9WhV$RDts@tt@p~W;zl36j}QrXO}xn4KzX}9m6 zdUjtUc27Idjt_hH^F{ah${^+a8c34$#rcH{Xo`c%;_m%z6sncVRDa798T%pkmb9Mf zlC@;Yw5+(ATb!1=ID5D;ll(yxK*b59b4d`AN$4u%A_{d&e4i($?G7N5l_b2qX#2Xm zG4!mTwC~uG2W2{UY69QSzJS~`yM4+2zGRD&6N4k0)!YI0XoZy!ORZ(llk-aSlqf@# z>kK^+wC^?)Y`nc)RlzH_Jt16(McPh1``~uI-(7fIDcRHh#x~7z;PoM&3Lcukv`K6l zO4U~~*TOt|;x+k0FK0@^Q6(!Y)Lh@5yAFX7RUfILBvr%rcitSHnJkZgp-7_lW&iDpG>bPFQ-vNj;@XH7tCNs` z#7yZoB-3Z0ZGB}nLAny~&hSK=H(>eaDj}+9uXpd&nFv85Yr;zeNE6y80vVD}U^4un z7j=toWJ$uk!rcy_&IxmYuutGgrufRt1epkygp2jyOvfLHPHKtW=U2cBadG3~<}acO z_nYw693B%vPPK^HI#S324bRXplsnOO_!Sqp}M{<7sLE(%NF(?snk27gQ*8p78z%Hub}C#bX)XIIGVXSx#D zEWFAT!N|k@(G{C;cbsH7sG$`QP!gQ=Mh>x#!aXg}g8Hl7>1zy@8X#MeV6P0;`2^tF zpfI$?GmOrK1XDFOIv{2W?xJFV0^BXE(6o>XXnA z=0l3Jtn?u@l(jOD$OTi^P&v?D_%aJX-@%TUVXj8sLmcbE|FsV2F}lm0!_vt^y`JH_ zV2jCAuUgV_z6YmfND|q&q;T6i6BRrl6ef~RpM4^qk8+T}EjSY{P-s+Z6BOApqn>!o z-%hRHvUW|U&o2DZ!Tx9$n(>)plYI?9wfr&t2Gc}IlMU|#FtJ-WNn2BrbR$VM?SJ)I zK1YYNW_i#$BPK;Z+Nk<^{FH+@`2HJT-lbYAt6VdAMdbkDftlNt-p#_cvXBf#;&2T# z+yYiGR)B&fd*qR&IDNq+_akzUSkE?%)hx3*ni*201L7DdNpzV=5uTpj?~A_hY+D!m z&DD*t5qh-;x_t>vp-FIsks+ZTZb12A0%v|K(T7%_UlDbvk0%! z9s#1r4X({rB}g5LJ6jIBwLR`ESl&E&ZGV8`DO(@tb`~%`Vt%G{vQLDevc_n0U$)fl zvLvyt!BKZm>?=u^6V`n}klepAc3-vbgw@ug`9_u;S*y~}Ou~8OxE$vqh&6g>BHgW7 zRy8j>UwR4FS$1yu)c&6DKu^=zhb?01ytfg+MU^Z)+)m+aY|(!A^x;NxpqLR^7^S0g z9#3ZA!z2Ck_hhc7w!m7n!mPJ7>cD{22NIBCKkM6VM<)2X%B376Y7|;lD1o=#mLS~v zeK%YjkQ0c(9u0<*U874fWz`e%-b0r{*YoOpf-ICQ90>t;C&hoT7VNim~5 zOk0FWXUN8m^z6JQU=`(%@I|UIuL8yv+?0Aq)&QRemkgK$ z;4OpT{{{EE2KxxHkrdq=DUayU`BoecpNqVgfUCmj$15l*%3GJzBL1OXk(!;Ao0V9W znwedeo1~|jURF~Lp8LNhkB*Yz3X$Qg!}MZIU==$2>fUc)_v~ghoBy3e{F%{nuwrCk z#Ptw>ghNU#uvutDr0pQ%=NoBqPSlVp7FAT}*6Za?l*FZQh^9TJkm~Tdx!&J?KMIa> z50df-IUwbY5OD`PCj3$?Z51m~Q7bPPqPCV^EqqaWYj}|=>VJ0$$_NKcY*D~Mjtpcq zHVQ$cU>jFsgPBqBiAQB64j9!hUEJdL)0aRlfoG(#asi|l$3p5Cs2e)?`SxPan`~kH zddTk-&5PoQrHOC|C!=;KV`c;>s?|a+ieC`W-W?8w%%<6Cc!n7x?&b2`jF*c@*88b$ z$2I5X7m}plSrk|Qw*O&f2nnH4RTtdtH_S;Sfl+d_-J!e$7&(>Xq{)C5#aR1N4w*6Y zQ>%&3l{6d$*IN;;;(&OC?wV|}zR?85ag`bijTAmrsVZ;{r;4f)eMZaz95$p%QfeNx zq1-WcPxn$y^V9SzsZ_Dgsrx(vG&M~e>wLr$4BO(Nexy%*%5VLV+?f{0LPJeZ0u8W2 z0zLHuw!jMX<>MxT3XAW=)`K6bMbDwMT??;2hUngI!P`HrF(ODDF zm9XLOjE{s^c0T|+iDADE$ksMWQpuudNc{P^7{wlj1ODQ13?XP~YZ4%HM=%O$fyy9= zGWLdCL=kh%@51$Xg2J;40Be}C1=IyRJOg(O=&0S~f4Rmu-a}Qm72uW);R;1EGC)pJ zeu308d`(s>ua;=J!qJu7Da@xKU0o+0=5>=-$~V#oX=Oqf0%V4YI+Yz8?;x;~RYB3S z3Bvv6up{S{*>&LQ;FiwDNm;c){(yp_m6mj+3Ygq@breamJxblI*JA}E8eL^`uyMGq z0{|xtN>7W1A*rFDTo*M5Qr0_5pj0HWxi8@?7`2GmU%e!<71YaH`3vuLrT5E#Zcj%k zv(mGS2?OI3AgS9aPYp|EA$Y+xxG?eB0Cj?_k4C1tt=dn4VJJr+LnU z(~#qHtH)7v(@6Ae4jq)nG3A`>+&o|R@AvP`$7oU3ub%rmNci)znrI{qh_uHzx0e9# zIO39>R9c@+;q1%JrnnCP?o(db=Lzv#P^%rmo@az>$y2DFx5n!{X*+y1t>RH!+R|jE zXw{qXn2Rk)3w*NQhb}{aM+aDi!z{g1_$PB$jGeame+_>e0pTrIy5ibs-m5(yI8Axm zAl2O-=V8aaw?NhQ+O$put&2vhYOAv%1G29VSrq=NRM?P)~YS4Gn+;)+9Xj!EMLQK(6S1P%*{8ZXjRMBO)=@Ewiwdh1t6?G^I2&<#vAK_fuq- z3XU~>7Pr6JDYT}p5?1*;p(cCbsN@50J{}sM6yaC1iEMhIuJtZc(K^z@2)odxNcB)w z1ouS*qDiO)H;q{oHK_LhMAxlJqnMe#S7DYxOd)I^^hLuRmWEctlhBf4%bzjiQSMY} z?2Ie=Cn4cTX8==1W}mjCNrFo6tT%5yk!}Oxc;#q4Zt85L`IzR$!9;_`e0yTHJ2I7h z^w0HG>RF7$Pp@O1u1=PpF(;16P_LQnxAq}$grIwNC%vDRtq|m{vFJ|vxat?#l(x1u zkc2&W)sYK+Tw(XWM+R6zerLF=rDYk-uS0bUSl8yBraTP2@fC5Z`fkbD3E|Hn_ z?1s=a)+GL|E0H<9dq4|`ZU9a&*ahqzh!2Qu`$4FfKXc2f@nGo%c+cHUbnj!%Z8qo6 z*XMEX3chZ3I(c0>*is8oGSj&AWFjS2gY~3QsW|AR)r1Dy3{6_7vG{Z_BtaYHzHS?8 zlJvq7P?xpDg8#(nA%H|Y_^wDIAZXj?4Pcgl=p$jAi#39)G0tHSG2X^n?oQm=Qd9zt0P2k;&Mfm$Us#(D?dbRWGH46r|`+FUo^5 zM2};S62YJSB_<&$TKX~U-mLYq`w)_*AsZTFq?T3rVH@! z>;Bd~tei(B2_N@?0rO5(l#6tR!;c`o82s=*Feonf-ey^vjiH8@m&3WXN$v&K(z3Vu z)t?Q;7AA=2h$z>vK{MH*`rVvU^JAye?aS#AQEBd;^TpfK73YkWFEI_L zOsj+c&}IT%Dw|A8GZr^`9u&Mh=E6zMT^b;7K9USp;$cg==W-8}8sIn#u)zr__c)O1 zXq*T4j*rAF)rm$;kc3)`e?W*9^bxa>`I=|U)a!0vvjll_mbd1-m^q+E^$#}I$oLV$ zTd|#1{-m9KCS3b*Gg+^m2GLA1H`Y=UBp5?T-jnI1DtUcJPF1wMa1zCpZ5VQ8pbP2o zkqEjFS;nC1A6@jvnFCLdRpaKqQ-!ZW$qXSKMdhU0u80?@=%v;5lp%nJizk|0nVDE= z=F`=*${FX0dxaoZt#fu+KpYNt@Fs&;EVaw#HhS31OjW!2ePnuj*xi$1`Y`@FeLPHm zqtFWaJ^O*jz=*roMmU&;hn~8ca3X}cC7oCW>cwcFfbJOXOV2T$U%d&1Jcy{pwZlTt z`Prg2Wq-wLSUM3?Qzy}sMivhpz|qw`Dzlx|mo3>iK86J4a100kNNQuCRzqvCkzaf;6 zP(UfwIe)Zc7#2DLD>0ZPWKawUHOPmiTK_OB;n?yzp|41FYTZ4l|*SaQZFuV~3yO zgQC%P;6pOVhWQsHk287VmD%aZKZlT~MhZw$d2`s*k*SqM!NW7`ct*{H#`l0; zqFy^U9i7T=BBA2in7bS!Wd?Aq#fy#C+)8AW2`g|iiIwE@ji!E0A1`rPx(83r3d?T9 zq|38C_}B00x{aN_dQ4VWWc4=Wq$(s$WdtDIb%o4ce@@zdw`hDfDo%V(Tw%Q3>(j>=b-q^A@>)3+HWT&S`#pG$mC#UE^Dh;aHsa7mMC;k_I{$=8wr*HS?D}Q^17W!EtXEV2zj1)cDM|_2$p2=K2^kvTh9?** zEX_`o6|d#S%FvMHvb2_NKURVJ1w$ca_+dhq(JS??$dzfwcD{e-C09#hsQI|tQk=@c1yf2d1SX*h|r1Nb4wAdYU>&D3FP7?^LuB*l7{^T)!p2d)`p)bmOE16&GBfJVr7fDn%us z!YcNQPCQB@cD%X0_~nGgq|sEuv5RKBObDcqll>_ROorOnErX$4m{P<8OdUxR#XQvXB4v`d#pqzQ2F zJYX3wCHVgTg_njVbP%}yo;j}c5+7tLJ6|waCBM+8XBI9cqSynrbX5uaUqyu{R$m%R zARk+E_kK4<_ah$`qZFh1Yg!t&*zV_z=+RfwF*;*yWQ;u>dT(fzH54orDA#(hba!mj z-oIYMFWo}%5qg~TCmo9%%QFuGqo=we-wqO&K*R}?UF>S~5)wKz-LD-+%3^1K(swQe zR5UdcppY*Ya;)U*e&&gMb}GyYfgha*ob=;sNcqV}9&|1pTLNo0A=BEYZy58NJBF^i^dBTS+|8yWBv?YSWTSt&IcyDbj5?oTy9_mXH?P==NN z(+UW9B>o>SW;mgY0<&dzQlSN7RGOFGT4Sk|Fxt)W75?~ysaNp?G>Igu(Kcb+hN}Im zNIE}YKVs)y2H#;t5HaI;bMb$w#FHFL56z%Y{!hKxgFizxcosyzZ}or%8t!IwsHf_* z-wDpc_ti91=R^k0Ei>`IIVj;^y&688USHr87NoOt`5olRV;wW#P16W5sn=C9qN;qF zLyh145@N)E6}xZM%;F_YY|b2|vO>~3fNAVL-rk7OnyOH43qq*nGm?WaystHpa`_|A zHSVVzc@7pALmF}Z(nAeHl#q!fc_)D346EUN=S2@h_B0)p&thm89H#58oPlI82H9q( zA1U-Et~ab2YW4xgK(jrDsz@W9hG^V8JFbVQD$=Vl_gyK^aHWBc@V6#3F~YdxC7>8QXpf*B);f*rVWRcq;LsD*(0S^)=|`X{Zbc znV5Io>k<3Ky?N^;n3{L`l?Fx}73ROA)K8Dv%Y{F6CZ$UDAtP1}b#;(;XthQ9B%lfe zeeZ&XT{@vQP541<>yv6NCItD4pm$m@5={S!P@HTzI;VNJD2Rx&-?j^F;lN^agU#9U z0e(``4<%~T(KU$PZ7eJAdoE$Be8fQ3ok@Jrka1B(q>%4dqz(WieZS#vpCrBl)c}te zhU`HHr|B6TZ<(K-J?mquH~u6&>oQ;{-*PM`TR`=V944C5@k@rChGl^KEiSE?cF4fn z7-X9(p0gVw^HltkFOkGMLhQA~ySicJp;ztORy!`;W32;zXQPxft)I9G=iKyEIup5X z!=iK6-K{30jrhRj;GXykv>uZWcP$#K{9of%lCee=LsR`qdXDXW*%(1^gv(eXy%%i} zh)~cc3sxkH7cWMKrcF_tWE$saXt>wxyyRbM60wx~%j!)rRM7pDD5OGa8(v9)RISP3 zP`(6;lBP?AfF7vC#jTrVT(bP?+xxmRmF4#^3#)f*VbLJGI`wR7B~*r2roeToDW0pV z`Q>b(OHpi)q1B{n<(wTmY{|N@Wto*KbjfbLc*aq+vK(R7qtU9FJwaYfk)l%&pOuxD zvv>}f+CHx7JgI$)NuySr=WWe=>B-(8Zd2CNVo_&fs-3<7<)Cy1?m2zIuwXrxdM@8D z2>9*t{KH+fKCLCV4J&6(_Yj(s!*)nYheo5S%iOvl6NFAq&Z1j@)0G(2zE-p8I@^@B z+o`tx>0@}i>ogV*MgyeFA3^92u8SS3LC%@$S3$;1(9H zbe#p;g?JW%Gy1laWB~KIv;S#JaM&gKMWI1tpmXCGgpM$6`Sy+fw&VL-{mQv zd;sV|B^6o$%+@R2c2|Qy2r2a~{RV8dYNi&)1c4dj+_IMx0@44Y4kM zAhq8_%HnJe$*S`7;G%Uxp&zJU!heLt?8X?9@9NU|5%Y$c?^t>eW)D{HhSBtz8wPDT z4f`uIS4kt1nT%9pW9J2nEI6hrv1B$W6{|0GW3&6yzS2@i@kIb>Vs~tb2Ok<&Vu|XC z4Or~eY%a16b@%LHB^kR-2Dt7^HKgm|b(ErQ z3#e3~DDpo4YenZZpg|n+8EEC%~dfqB3KafY||m-`Ck6z^2NBaTfL zXH!A0k7*o7$nvV*Zkm%q(q=%i3y!8BrNHeCF1Wnatu&6j>u#YNAD|&&9Japq*n3>I zCKW@?sg1N%1eUwi0zOxIKTPan9k^^SsImp(cAkb;CU_4{y$`+_;0(V4E=~$kSW=Uz zRb1WTAs;g|$}M=?-1v!Lr`+i67@4esb^OpfaB}Y{Ymw1K; z%QKpE@Fyq~j@ScQI9{m|9NW5+@rKQhxFcc@L0awXiIKRr zk^p3qsImhuy;A4e`Ur9(V%^MLr&C3*vC@=cd)LNopCe z*Nj6(Mr1<7!!Hc8$c=)6OBSQ^L+;0mG%l7n3c()i)1FFf#Ql{6edsNhltt}anVoO3 za;|&i*;Eo0jojCnGn~%8m5!Se~A4W?o7h?klyQb=TKo_Wn{%nkpChH;~%! z*%v_lmE4JenXt$vUGXhO+3A%^cJGja`l)*FJfaC0g@F*^#abi~v`01|{c+1r2%Z=x zv3R-?<5(n+XVHFArbG(K9rEyTULlpJjFpu5`Fc5SY&HF%%p*5yf_w-l=JK_qVI7lf z3bJ%C^e)(z`1=C753fLoj$9;EsFM1MsGLnI==URO?GJ%vsqt@uDQS+Cn>Yn%<5qlF zV=?z?>4RbvI4M$5nC0VW7?;>p*3@hW{rDX2pvQ!a&o@lc06&j22wap3lR+Ck?(Jv# zzywq|szPdw-~>fL0b^=060L$ zzb`|IO)B5$x<26;OP?;eRiCEo^y&|ia)RD1yk1e2zrwuZ>VWIp?uC;ATjkVrA~gjY&NGKd%+S?@Fam#J9Q2Mi%z zjh)UYUk1YhT1NKqr8WZ6#2@%?D^qD>-&My2`GY`h@PhbNu*!3OZ~9Q5znOyAodvPy z(9bOXK^}u6Ompd%DA;384_NVmV(8Qq3Y;w1`#eVrw~CG)okvdLI7bM5^t8`Sx!p5N zb6B&~%j+;Uxu7N28BmC5Gl8e9Hh3~1v{^hbW(kZ6=DKF#Q7=nO8wT?;&Gs$mzP@v| z!AMqcQoaMom8bn3K{s@P2bbSV=9Z5a#nX@YY(sGK-jRj1Ze(lxHN z^EO)M^ww8(dN=)HK9-J*&6#Byemu;vISud(@B__1hS1UlYAbM|edU><(2CNB#|HLj zv8u36sqq|n!w)1+n~)D|Z!phd<axaf#Dp&w;YEXxk zRMs6?Lsr5-sS|8;SiS@r?HFK-s(5L2*_a9);EEVhcHRniA(2Xs!$Icg#vg%d={Q=U z4z5Sb)Ird<_8#$l7ev#!Jf#X#;+EA+tVer4EvowmR&{}EvjGVAKkv93ei1gF0<=~x zVCQmyf4KwBmEHdRM9N-J_GpO}rF=eL_H%6ePLr>DTu}~!Syc1czJGLcFT;p+4RU4|*U2zpl&zcsz zc3XEp>+PPex%sNQ9H5U=9m}I!7SGY+N29k~ex-=-o4xN$UI=~6;*scPACbL>GZ!q; z=dM+Ybo+-^FhQBDvMzsJ@`7%${ImjD(Rk5lNbLMact9*Myby%g=Ol?uZ#;wj2bU7E zY8Yeq66tyg+RpU}LD1AU+-A^ZLyzT3rl*inIe`xb)Be0|EA^80gW!O~1klsxj5|Cx zb(>IVrZ6Uw4asSF{;tE6Yor_bZ%*m9z%~zWmHR=jh zyLt#ImmRm$k;Bo(B!i$jLP z`FVP(1iQuTdhXwjmN2W8ENHGS0Gb1?4gXGbRbK~8G^rnd<^WhLYsecjEPbzs#Tg$jmEnknCA8~Uv}u3K@%CNfZOP3%jdpTR6dbW zz+SIW2iDvdK!w~-QOTikKlk-k+o-j0EuqNAO)_A1^!dDndj5esv7Ir=*; zqvaWv4^go~xw!1=3g86N7wkhOh(e}j3#jchmPS@d47C?ry%LYLqFhY>40 z!9-)uB)=&CNKjau7bS^6&3$qZu_2E09xBG*0IJN^e z6M^)vEzLdupN1}ND@(|V_uZOq!)1}hRc}Dx+@jegI?iWcO=1KNBs@o~r zN~H@1Q=}xcV7IajYdflDZ3mr-6@{X}%;Oc&qMgc}s+G#?S(tLtjk29^00xo5!V4K8(prd6uX9$0NNNUXOp@fh9wpSja@rVoAbMGW|ny9H4aK zxe?7gAK#VI-VvQJyolWX(9(hvo#$RFy42Pt;7?1l(3^mAMYlgJB5OSFWSSB0~bs$sW~=6TTO8C*1f;!PJsRW)M26MLrXX+J$I z$>dob^u>lo(PgsR{fQB_{6SA6K+VgbBM#R*#CDvlDRw|IU+7wTZoPVMU%!3$x<5}- zZu4N&khyDYkSgW9rO^!)r5M8_bV!S84h>4_3O=S?yBl}Q**nekIm_cHhY=j>D*yQm z+~g|nRn(DDrN+oy@mmV?;C|f_PcuOpwiri$6b5vMU#ArsRb zv{Kpo{mnD|(Xoc3(pC(838Z0?SY%>cgQZ~pU3KC;5UZ9gTDe}~E??QH74*I57`KK{ zFUcL8o*7(?y6rDQcd#H18a>#&`#fOd(UjDAlrGfZqJum^A6!tDq;WE1FPx4$QY>{V zu?*MBfGSnZ>)){C{P#~eM%egHh1jnE8*~5y-yrFQ6t6Q=$ofW#OPHxK_*}$VPSauEAqa93xk(DlY9Vx#qGXyeX zA&aQ=pMjD~_%TUtkex8{R!NZ{6mn%5C)7Tdu|M%O+`SsC&5epWs$B>eEIo=cP27WQ zbhxjAcY?7w3W--WpAbufyU)NQA?E$U+vYJDkt8**s#r_FcD_7c6-!}qXeCzatCHEM zVgpeZx`=Q+-eRxQ#A(9f9`+A`(X`OfBBP(PijvsyrYSNqs)G)Xp)ZL2Plo;*#^fTS zh(-^lCrazxBI6HP2$(y`_qoT3mP;u9tmd%eSbTbAK+AE(U9P43odcKKXx@~p&#kCa z?TG8BZnc&WK@0Y^?Dw92?{ZZk=xht#RmYE}ftG)|Q0oJV2ET+Sj0k=WFx; zBw~-0oo%QEUWGDu<_S6@{V?%YLXW#Gd4dDUnekdSk%ra-(=$7JLv4LrkM`2fQP$#@zPi+mK& zOT{irUplR8x=F2TPxNNIOZ@o^Cs`9mgH*Al?H+E{CyLpU`^+5HsQyVGR{Shn=Dy!~ z(<^BJWj`S?7Vj9^o`mW9!>{^tF=pE?8Y6Vp+`t>dXO{e3(Y>`QY?XB4)oMrrCdLXc zMxpH8HOru5JCkP5K$+jH~6-UPN2La*ELin>6ZbF1Edx;_M!aJJDy#1 z&pZ2WpdC+-`xXxl-?rF4!7yK44iEHZ#CCc&fKajj%2=LHYLFk7EJYQEwk3ql@VE?t zd_xrsnNk^vJxmmkGuYfclyp?HrSsdqG(#uYH@io^pmB%85veyYuEG$ZEOU8;a}(=! z`*-K|)scm(y)bm5A)Ea>|ue3M84Cc=ISIvhM%f-q2? z2-(KahWN)3gI|A?YT8 zPc7s0?Ba4=%Vo!!DB`K1HEq`8dO5f?es)C2wkxrAh!@y9aK~sb3!<_8e^`^Ig|*SD zODIobsAgOAkPj-QWZ?>yB5{R_s8DrL$cD{o>{W)?gM=q}nA{0dmdzS)C)w@2Kx1oJDz?X2Uk7_U`Rj{Hkz7RYEGYI)GO4l>vJ zt=$~aQqdn!k4IzSo3EiO8!)dPJiM^!pa8t+T!Jc+UE2zZ-D@|ue+~wf$=fCmxJg0L zZ`0$Pec{YXNUzCZG>AO0Soem0jav?fRUut$@&PG^!s^qo_Ag$ekRM0Yq*BA5+K(xL zR@T0s6ElRxy;iLk>mXMi=k91lU*$cg+1MQxrDMj(Yz|FhI+f97L-*Iz)=)D$Zd>5@ z8)K-Wc#flaOQ6%tZ0b0Ha^m8!Ccw5Vtz(0`ORo^D2_ua(+RvOm{6F@xw}U`>mMbph zAYCJ+FMBM0wQeBuA)nTNfOXY56!y;m#h(YsIbC(;#J#q*_kbmoAMv0bcyn1~%XR=g zd6036IoaXIh-d_v8stfta1G|6JP648Gr}v7cFM`LC7p~<{qDY1;I(@gUb6`Kw@6<) zf8&I=XY%x)m%C(j)Y4krDdsD>=8G8Ftc0=;;hAP<_4x~SkQZH+XOm2s_kZV+g~gL% zfmK`=#>jl^7xSvgU{MGZ%onMA#(%1&B{--a_D4^h7cD2429G$Vz=r}^lBfv{V9v5M zG%a|Y(@&e14V30u0Ga_OLy_VM^pAnwe;y~~1xfPn&+Bw-w;r_MX?SUG;UVvUGYDSF zHQznh{E%^4Q;=~uh}6R74O){n2Tj{ae5+Ejack1JcQ9KBP~Cnk;n%J%ci3#sWuRs1 zJ~YP!d|%=ve%`1NIh~WAEVJfAt?(OM|4CW1wPp>Y&`w5|nY6sg$90V$TJ;5P>O#kz zs)r>ofgZV8c@;HT$QKsLrGPDzq|5YGoT2Xb*jHJJ*GJOyPNV5j)lpe(RWxU!<<#O` zD$@`%?e)fHpncyPeMj=@*pyGja_6!+_kcqey{L7+z&r1(Q%??hZul!pj4hNFVY!4;JzbR|yTP;+ z*tv=@{ z)Kosw?0hhfx_Vdb)R-qQSHn)}wRB5aruL;0&tou#0H|1EOqJhS#*dqB*2BP-LQIpS zV=etWQ2r*0O4pH<8`fw_=L_Z|Bd?8(mOYtocPp(KdOJ>NQFr{}VDL0N`;?9pTywB# zV1gz*vi4nvSze7n)#rzLJN0_j4gPt-BASPK)M!h+ z3C0lv#khhuehEe%A|{uMW4ky1teYCA z6iN!6i}H^Bm-t*~T`=~}L=#n4i_?YqnFdb_R7t#W$dQ}`o$z~)LXpvN8||qdD)t^j zTdE8oF70B05KK%P-O}G3v#8NMa)eU@q|8ka)8E9fxmDa7#!f0&@*|AU5dJs~mWV7x zFa~YizW^|4Nv0&AHa+_pUtYYLOfvNWyp#>=z1Of~xomCJ;T4j2{S*zkr;*q~jUxLr zp9|h}6v697h{8iK%5wNJs_u2;%Hv~tFPeF3-=3e6mdf>6ki<(HagL%9>j5y}%CS6I zgX@p(y|5;;OA%|=+>~z8Ph18>eWJFn?Zt(o_*ye}4M~60C!r@|;${P}133{cq-*m^ zD%I>{AXFYRovfK=bwj;+QTU)=YPfMiz1$M28|$)JIYD6AzD?4;!id)2wsFBezD3u_ z*?sXL+K18xjNChau^%9oTex#h!9jyj8E5nHtktEpa|?ZDJTXa)LczGAdte%+OiXb` zTpsid2N0`(T?ozOi9H+(Wqxkh4{b1Kp4w!ZEnRDpl~ku4QC0mZ_;w;vPM7c5+C}pj z%I>8@!>~X-yt>pt#!5u|t(cPq%BnBml=L6cK@N8eUpU+P{Gsa}or>T|{8rZHibA~w z?(8^Q_yv0PAArwVqdCf4ZB2{ehST<)z+DNB2Su$7;H?uT8PE|Y(349NA7#z-DyZf( znwpKa_XxXCok`L^*73wQ37V|hr28w2VKvy)#t27QQQ`E7_z0fx6=Xj}=OAVcs4d{w z1{&8aI}%OTb;$k3f*jH2d0^AJmrX9|0@sa}n14x;r7Xx3{`cMuRZkpVK4xZ{m}jXfhdGknw6 zPw&#NX)d1;;l<`KQc=TsDCJ!FB*a!E@@psCC|vmVjS{Q=)RlrPFKP}%dQ?kgyk-Xg zJJz*`L??LqfRWiR7$u7;nxBJtd?M33Ih)2!OlHeE9YaeIDYb~+K@Uy~coAq#V=Ab= z?P3U|e{PFVeP3v>0Eq!hu4(+Bc4{xA0EccXHHPO zr^=U;B1eM%?W?iltZ~{(W+g85AKEPIKW>(^rx`E!|hV*4huHu@(*^{s9 zSvz&4XW^rr#VMFPaGRDH|s|@%Ji~YmYG)JY!{hQkFcT@+a zPQw?q%opfAp+zU}`Be$~mds7JXOru?A4$P!f1zSG(IWW{=c4pNoz{tXh1|=$j)tR# zzDHu;ZO1KOG<}>zT%vd)KvE(vO{Q3>cYVE_Pk@W|i%_tdUAVZhkskkgf5QcU_vt`5 zhztr~c;D$b^+UbxYUHw5!Bkg?a`UzVem)z6*Slx3>J!l0RTmAI6Srbf4VCCVMT>d! zP=Dfr3!w=@PT<8}T;VWzOHx;Zjm*`26&FxA*W?s+C$Sw;xLk==J3J8~8m*Oql#ZNP zUE<Y%CXH%%xx_(u@M8A820V&PP5VWHR)p7PbC*&# zM@ngD;1DbYa+eQ##zS3P00-81B0c^%;d#y>Da%L^?5`EB4OpBnKI7@%-giK^xpBXL zbDbhy&bLtS7YA9=Q!1%DnTNU1}9w z8yf@r9yzUQXY4@5%ZxvWIK&P#GvX-jeSB2;6jUY;=b7Ub1(6JH zmaN_BOTPIz%fI-XIZ5k=XF$PGNfi=YM~9F;lDDs<*rS|53XGlS%<>Bqspq zazKAk==*TwmFlc^<2cP=ynK7MZy%@LHoqss@@h{o%b5Qr`7;)3&=rds7lLJ3^toJ> zC>ooC+>U_fWaH-92$v!>VbWO9V}Yt>O)4ppNG&eDLX# zSeFAUh(Mm_yO2XAr7|Hu(W6Vp;)n?pc6jQ^cZ9m}v2o)L(~A1v&Rn(x6Z%{wJp{dO|ckUGny<0;9b!T)TE zxWb}r^N~u^t}bP2FghcMG$Xyp9{$T$Xe~9l_cJU3I&96a2!%WB%Vtr+VJEy}4A3qr zx`2!Y z?U`vmb-3th;sOgv09gvQb!Y^uF+wBPf+7kTRLn zc>c3o9tfQ{z}<|2v0>CEJu{#}l>RE{DugLj-iFR6;cHg`ZL3}?r!czOhW|crPn6pq z6ibaOC+Fp9#>w(_n~gRwpUxmd6$N~fLjj52B`aK*dOwJeNAiF0bxzH~08DZ|wr$(C zZQHhO+qP}nwr$&fkI#O)sY>M{$)A|+o|@?gIQcgnszFU}Uqh2R-5~Vx0NzhVFcnKk zslg*zi>$bl=SJ1W!L|w=vahtOnawp#E4Q;B146d~^( zuKHH6jzil$?ki3ks`IdOs@OCJZki7$?S0tuKL1D5K$Z@3JhCtP{d7c@b;k?ff8RMu z+i!~@^j)jNtOQG_k|k6tv{D4&IawHhbfSn6)J>GOFiw)b8A?Jt?Q=7C`&70W0;9rY z9L@PW|GKGQ?hg3rd!EPc+zYbivcb(w<-V;!l4EanjS}^-IeFZKG``mo{RHzwl5bwK zb)~!-HBwj^(tgwGI3|%ThTk_iT)F|iYu2j$>#KtlVOf$i7W4-10=hNB8%Ff&%Ohbi0W8EhY9XOnFo2W`9##gc@zLfe-9Bf$bP3~FHcY|O z)r3LA&B&VkOnCRFq@F3aO5MIkroOfsmdL*FlmYO)U?^tZ07W+g7sQD#Lqz7#qQ(1% z<1#|-PTp|=NsfyJc|@UNjXT~z(n(5=UUT22HOYj16h@DvT@X6oH7cd{04cRwr!!M0 z2H>owW(3`k5ul}6hXE}CJp`wqP4~kF@0;i-Y~r6)Ty8cM$b)3dn9?Ed9pZ=7nm!PF zDwpw4h+rN{>ztr)@g|8CKB-QtrrBec?#zf4I*hs|Xpk%G%*KN)=;*h0r@Xwn^Vjq} zjbS^6)sy5)Tw9O38e7FdjRpzllyO86MX0nS9s$6tV(j>Ahor{zvOrc;I()FZ9PqY` z{wK~4ZJ%rRcDH4?>-KPb?#;dK9>K}laOkjXvyg8&$DN%yT%hYW0k!K=l{Q&&&CckF z%)aanGtdJvsPq1BAFE|c^dtS59|yv@#D~`hdrxJ{z&!P-sZiJlWYZ`en`Dk;z$~?E zf+@Gym>R2Ha1-gUDCbth8Xp73FBE>?49bKPSvMSO(kCYgk(%TvP~Yb9i`|V%)_ia2 z9ez%1`K4|KC8<|-?}n1{$6n5Eqdu}a#`KX(67SSiJ^D-ms>9|msnN`f8-*mkR{qEE z1hG;Q%Pz;H*N-Q@eJ>ITUS^~mTtRqlwBw3-AVq`Yeg9oFm#4(I;g*$OP)9KuO-G^jTMIiF@rJmFNLH0t zRH5AkDUzFwK}J0JBA%%Z*0CEjZ$^7h%fqa=-BZ!!$*62OH^6~f0al4=Xy^%~-AJki zh&f1f9QgZaZmA70gqJ9DP)djwZLn@D`=P>Xbj$%Sl=Z1~&&NGLq)2`y_0)Y4K^=i- z5up?6c54-hY4D>FLRz=}(WhBxXIz{ym*Qj1aBG|qas1I#=r5$6+m_+i7TD@*7V4U{ z1cjxd!$nJd3(!%1z>X6RBL6=4ni&6Of>Y3b!hGF=$Bu^eD@K)rzbpCfn*(^gRk+-V z=YoM%sDFz%?X<;?1*wYET50IBBw+?a%<33U3a|V>%{k{OY{S^?D}gIbm}P^Q=8BEi zC_nJSi!UvVgmk!jjcHXE#$+6jC7RB$+M&HA)79WsrtclhTzF&n>67@c{fpUq&9qYK zq(eT)4EZ4ns`yYi-vm>5boP6LSnYb@ICwI>D7H4hbHp!}cry*1{I4Fv#W8(@FZ9qh z0joL1HO_-zpswX^^#dTl^-I@Q+`QjWk_Vd_>@S|v7FU92w6BAY5T(Nu2h zc=z&a{VYuT?BvcN$jNaj9j~K^w>5qMN0B4`gFgWyvzrdNre4&1v$NihJ@5U0XCL#^ z{Mr3F9|<9nGMpq4Oy6JZ`7Cc4-Z8=;z7nsyXx7-YW-cxO8)3miNlZ6@@q@!Nr6&l$ z#~g^<`640796@do9S)_qwENaRZ;NqG4(~jJKR+Bpo=Y8>f**`H?`Edxiq)-cCr2QS z(I{T{BoSpZ-H@@!G9Nm(B2Wzu*3;U!)j)*5NOEKW5XutvK69{WV|Z{gjWrW6i;!+< zL>Ycqow-nfMtMsXpd!^t+6-%EnGXm(6hf$!ttzm?6>G>?`AG16N;Ib~b~=Ll+M(?8 zv}I(@ZB#xog9+Tlbs8x2PuhrKi6o@1)}zsQ0kR89e_qNjw4h;gl;)nDHjxf*S*;1{6X|tYi73( zGuC>RC+&O~xj)ap_1M>U{CXO0{=SCR#DBtHbblVrt0+^P^>y}kDq7DR`@2@Tp4#-- zAFH#{n`|!K4&Dqse+~@2%ea30c`##x09(U_PUR&1{=QHh7mBJI#*cy%Y}#6$GjFV3!H zkdKK~zXR#<_@z8)UP$S14k46PW-&D;v!~eTa}(1jlY&x z+f~zY+_Ty1R&8=$|AdrUgz?j==lrew?yAYzTKjQvXKpOrc`{({H&7u2NG=1FErLCuw@_gfUw-&|A#(dmcQ)CbcREQFB5EmDO zM_DAGKp+xMv`Cne7DiT7ewg1l|0N+{(^&8Sd++c2$L@E*_sr*iNpTrPGDWfram;eK zijSM^SOSP-*UL!`>gfwG2gp?yVYHw zCg7epkVTI-0wvK-#1|i8f68d81OWLbGJxPla@y8nV$@L}2COLGL@}VSh+-3r9=ELU zygUT@N;n5ZQzY;>+oAOfDwuYPf;DZ0II;H|;VV3Dl?9#R>O;gWS zonFp#EE7su3;V+)&$_mn`Z}Xfu7fk}!5gFVO4JyHZ4Jg*6&n8rpjh*tjjIesJs?eW1fx zE{F912Lj8sYjmbAc{Dp*jz!G8Z{wcl_kAHbQ#vd!=1@@EcaNlLy?lqV`quUiBRx&u z;B19r|&(+QaQ6btjMx zu_FWWnQYaFWrj^2%uqnIldyw8HAV@MLzZ|+nA*QCUx-o>`Iqt7ek zN;41A^+%?zr@~iOkkSKc@0p*9^F(ec=JdXz(^kEuHPK8XMXR4uj+5gCo;gR|c0xLO z%!}|8BSk^Oc9d%t+c@%pU<57H31Ye`8!SV58ZDw}Yf%QBIrHFRIM2=;ev=H59WIoP zC%;N(e=$c)gtePJN^#h5x)=mEl7fEb@k{9=?t^BAI;_l;GVtqLpn;&Y{TRA<;+~Z( zWJ+zi;9j<{-4JaZa3+$YuKP+rW@F(~UjB=7zO%~5b*}clC4AhUJ_vdJ7qAsB0Phm4aY54~N1JGsf|pR1@&EfN zoKawurIwOkt&pQxn4YblrUj#{k&=;~Hx;T|N7ZcbU*R3hQo zyA3dkx;R`X0~h{$KAuTfDZ7p%p=cBLw9!~Zuv%!#B`KG>gDRvn2^TX>vPrOsyS+F+ zlYo8ug{-gU@y z6x4bXMU$Y_Y*0=H!j#!7tEv92I0*)pgW~Zd^oA~o)TkgHdgUjbUM($05D1gJK8_Eb z_9hFt;LApS_3t|Io(5tw0&zh??%MqNK=w6t(QPJQ*+Okv{!@M?Z#pyelTLwLCVQWH zVY%*FjXs^(pMSFYtGvi4G*lEGVVpE&sB1OfdQ*bc(iM5 zvKv#6_ctY7Z#RFdE~H_~FkNY?w7rQ{fLkq|0dQ0)A4k=Vaez27iDC#(&bELA0H8Ij zFui*~HR({`XsjXfvE65tB-ijLoe{3Fz;9jemPOc(?PPb-hPzF&4AgIXsSB12~llzCTah}OP(NLQK-R_)OApS z6Ipy6Cmms1HmvCRuEVAyaWtkiDn-*#%*tnD)hnWjCTrF)@t_toIo{Z66mE68%Q>bty^Z9IK@?LkbW)Ls2mb=C~ zh@flm&`B|hsA#6;A{&BW!X;|rshi587=qd)O`LT^9#X^wc#jWnmL!4z!UxH*X`4zn zun+LA*@8_6-4PknT{vh!3q|Kp=Fkg1mqDLuPY~u4VRx7!fkysRG6kFpoqH(Q37S=u z%C-RTY{Q27thi>W5-fLg;6of8=GHs0$O`sxYu(dvD=b|oxE*|_SBWuDEO{Mmd65yw z=Iq<1kG+fwLF?%ri^c%1Z->AacDC`$o2Pe0fz7ggsm>@bouX!mzd z`HmF%hhcBtZ)(rMRI^7^p+HA8+G!z=A}!Uj6`!Q`tYQ_?zhOP*67$~khVF&vxro1^ zZ2o^beOpUeEJ<&V${Rn328VO1OpRdT22zuj+eRh-aPb=)oD#Aa^8!=6wbim{RN{YP z1D06y$g*b5E_GCI68AK-%9=IGn#3BuwpmEBHomeV)71AxbC9;xsAH-0n&>lezn_wP z+}P-^b9=K|`I|=4Xmr9CxJ-dYBx zh(N_*-@uNDFyH`hu6_staEIsj_KAho1M8@#P124hIKXtya@IwhAC$}y(g!HhaQ~2J z<k`-*-EJC#A-hE3t;n3pmCot1@h@1NORI0)Jk{ycgpXGhCh^hF@Z@y%y( zqggTAXbtVDPqiIgv#XYm84gs%YwPu|^jCh>(89|-#keqG`WNNOnzLSrRN(q&Qge)7 zhW2>5E=i`vrB=;AgY*zMS${a+!SNV5UWw2;i41U+`P%`MUq<0T3ID|6_80069kvkZ zNShjxls08R;iNLUixt)I+p8=y;LJ(f6sj5z1GZ= zrcT>e54o*feN^ziV`(S<%$yFx^}Ny3+6w5re_#QdsFh9TAh5iENTCK?$I&q z5;IGD!tgTO0IMryw$uGt;y3Dtna!B~p=HQqabU=Dd7zu7)Yuz1rFC?ab*A4P?8- z0D2KriR~ja=j@ELh@1n)`B_=X`9(;HT8c$#)%a=UwdslZndJZ~n$;CWYE?R5=@XPQ zGSl;lD;YR|?FQ*Ih^t@djy2jv&PdP8(uiw;7K*OUF0PP|@R2Xh@2)WJt}YumRZ|lX zjLwGfkS`FzBga*F(P~8iMbxGnOB8tPs&B${J4@D*2ozsR!C_T2YPYQ^y23Qk(y19U z%VcPVMmztCJ;VM%SL30zzu=&lBIpMSF(;FDTi50}Wry>8rt^I7+w1XG)fKS^6sLE(_hSmgwr4>P_xEGJRBxGOtNcf3=)+h z3W*2=vZ?77A?b6i5@KR1l~nqwu*i|bA^#UjH|BUAH1D$31XIj2D-9sH*O(|E;=h(= zfoe0dPyt^%xiUw498d``P;I8>cxB0Bptx_f8Vok>c%CkiJDyjrSaU#@H;nWI0`dNDP3sPK))h^YnnqymQR!1Fg(JX$pW^VUeOEdGdPG(0O z!rCVg2o($Z_|${Ma5aTf)JmZsb`qqJkQFHi5;0Uhnff z=lOZ}xu3h;{l2eqc<#RZT(#*LCY|uK7p>i3qN2ZCpqX1SC@P^11$-j!jVI52^E~0MQ#zT}%Hu7wx#+aB?a~Vbns%ka7}Z?^D+KjaMkvgsOgo{tSt!&( zd1QWNaM3D@DE`}wY{_JA1mRVeIr7jm6RKuv^Kx!e{z}al+(()qe;6Qg$ypxmt1|MW zsZp3Gq*(i2nJ5Zsw2|#5$=Rk#2|{V&i45cGGczdUR`EQnZe-GxyYzB`fOOY0f{BoU zKENDH?4eeH_6%??1f3x+Muf<@*=?nh?1+F`kU?9pDF5>2jcl~v=%=H6cRkDpS9b7w znHc$ePWclY$+@Ny8MEwrCX9xzq$6cr_OKyECq5$I#{rCfw}yQG1=hv#t!zyXNj(rt56(s3ra)mO1PqYv zt=Hz+jua`s8!1v9FaWc3sl@gp?ycIjDXbMPjRa(WW<<#d0@g>xMBQ>Oe>pkHBo#&i zU6a^)cYOPqgikmRIEzJ>vNTw)U#&MAH^$yPUsmrmc{)NPnBQ|;2t73(b-;xomEd02oE!TY&b_bab?4 z%E_f2!$poRRC03sqexREHpx^zSn%bpN=m>cmK+p zt1z`E(06X;WuH>}gMf9M4|wshcm8;?clWP35Mlm%<@a=7<#Dr#Zyrs08nEy6V*K?6%V^Eob&XRg>T3I=tWM;qf#p8)RBNsB^)^RmZ=9HX15M zaXO$9z(uJf9T~H|W|w7Q{63k|68L$U*`Tx*a8Quezl{(gI3bH?-(tmiKgW~QKm%+E ztdOXKD5=tSwkh3^YVi1SUh#%$|uumRZ> zE1TNcU4gz7-I+cVBcMidv4g)TPkB}sSq{k)^UCz)1vbP6?6eO|wf%h2aoQ1nnJm%u0>A!bmCFVK#fUN?T>v zHUxonhQCb`PTJ7MMHkoQmV)CiQVl0ehhQX$fOdS>SlpK|=Wj`)hZ>p)hz;TIO_&zs z9Wq9<1;b0Xu7BDUEH?+uj7J+x*MeQYL5ddocl zG67U%w0=r)sP3}62-8}r(bh;U*MN5r6k9@%j;laM;_$?>Ful`!Ts%>Bv!YLy=%$MP zB5f93JCXBWdcE*a#79k+oZVQCE3Y1GVdfv(qX+qU7?AOR@045I6Nd(Ws}aqh z0sqW|b5zYTO}wMC2L5=X(0h>2nsQL2XH-?-dqHd z#)84&-^ZJaV~L)~?r8$;Zd$QCDnvM~8muN5*Ll5(lNkuBBrkrra$rHuOuoximNiC>Rt$J4!xOws(vfO2@w@HlLNt-pMeKHLf3=9_|5!Jsm&?K4j}NoI?IY`-F7xsxIgC|- zX!du(hz9bfhCBdfogi3i%tyT6X?pU0QJ zn*&*OWG$utr8rP@Jsk=o((((yp65xPrRdggS>X-M95I&gZ zVO^l7!o8LLBfOF_VK77X_a_+bXY5#7$67nQUd+>FFpLh5yRdy#-8D0c57V;le>A>- zo+;PrNl!&0*Bel6{TnH)2#oE8LFpFPj`qpxT-fVr*I71%MxACj0EMElg}5<`5*%Q!g?OHca-Ywrsz>1{a6 zR@RskRAD*#3JN=}-Nu7!gyHw38LlnF+r#kdC0x;+0w$YmikSZu8{K%Z`Gv2R>QbO+Z7nTp(uA_)) zsz@^*x!DNlXuch>Ge?=Fn)y#t0jn#>P-9!dbY-^*ZtN7(IjA}7f}YA!P-n|pICjku z9$<;j^dsgoDpma}r_NkoS0`mcI0w}%Mpd3(D{cvF|w;4`C1 zoZ7=W_`Ou;BpnZ6Es5J`mu&T?@88}N83zYT%}(6fEnf3*_k6z_oO(h!?P>bCx>`DP zwWy9d0n>(UEqLL{**UqaVe> zVafr4Gi?2u2pnT!=PoMNSaB-=HkfUii+O7i&NN?_>cdXJjO3Q25q?B-l}s_KmBW5Hxp}imx$`edYcEj zA4kF725Yj2CDWq~R)vj%C6iy`q0aN*JEY(F!9sxhwqCdgwZQx-3jdaK4!^A1b37d1 zWi&2DhucMJF$H#30O3LW~W4Rj*C>?^((xoj^rWjdFn?Aq#bJ+_W`McF})At)ln1@n$ORFE+f;DoWbf89ACt zuqut;uhdt{r$`1wxxZS?(cu$njQt!Ccbq%+5~H!y-6KaDZ$&3X}`3f#66e(3`#!pW3C&)oB05D+rum(?Bj!s^MW!aTtO$(~x&> zJWpnCMwTtZ*ogv?5G84US<(8kdZp9=V}ZBtN@JnXX1mJ*DFbtsECfoJw2&9u>cl))KGs*A1ADvPJs8_}d+ekLsrufoY zce}{5YayC7Def9yTsiKB*XUqKZ*S82kSWq(Y*iBB1H*)=(H?S8w3UWBz0Gwmq-mx{ zNje`pe40x#`RMHri1!Oa%nXlANOm+OeiQUq%LJ2(B#iK@Djuxv_F4Bx@$n!FPtY}EGKv=p(t1gGT1iW>o0#_<92@))c# z{K~`rR{0pF2cFDbT^+DJnoJpSM(U_EYD!=o>aswm5ElJyjWb)TdMM-OA!+(1*P$`}?DJC;OXNyk3-j(rE=-@C29`!4{xN9FJ(av;A)PB+b$ zs@+g+KugiLPU!o4%Tm%((aO6==*&*gcM($PNXgN6&Qj8f2Sh$}4GkqLaU+dtJxOa( zNec-xcp2J=x&)0{1UMtxo`IQ>JS{*o`M!A)x48F z>eO1xk&*y#XXWT<P%9O3hb;#!6*S}cCsfl2B7+* zv!YeQv7|>1w>Dq3kI?NHY||P5z8NS^YZjmfV5*v;{k9m4-+Dbk3VLUAsF8dyAiM>y z@$3Sb;IRv3*AR!aic_u&)16%8u0DT~dz1jXUQYW6;uh35?@+Fv0B}q?zM%%mT5tbIusRY0 z6Z8P4xts{dN62XB0$i&lEd_&avnX|7r(P@D2&4DPFCGlv(=~~F$Vd*8vTQ>Ja1FRK zm0JW%X3^Y;3QZ>0{KVl1A_6+m5r~(whdkjY6@tRKL&#Eh$jCXug|j~=m-uxIS*bw` z;_X*fxDA>SZKJVNLjYZysCt1U-W;{EK@E;8FMJOBZ-X$p^~A||MCW$m=Lw1SHXJz; zkaZA@*;Iz0Xr(VQQV>aBBKUP&6`8Op-eT9>Gmqk1*a za>8W%kqiLU5{hsVo)B!GToFrj+vcMWZ(Ey7w%D!aZe~xegbOB(DZ+#tyDqQ|`7;1h zf7C#53kU!c6nBJ84O6Fi;!ifGJ=Bs;idlU#JR@DQ321c}8r+=+UZh^e5NJ9?>2=b2w4)q=zr@_TBUgafQ}5bXPSuUNCW`EG6Dz!gwGuW}Iu~Zw@ecut1;39GmCo)_zYpOyo&~jB zr?0X_`+mbixv;-8%aKx?-#}%BZyn3n045x$Z!4%A}Io zPfL8;>NCPp3gUx?O)8mXl^CDvZ{C3qqYbG&yfCl^&vD5U zlBc@)-N6(03ycUqFPm?9lcd3DTnD|wIU$?>DC~#-iOR3GM7i+(C(Et`M$+ul)6w$P zF&5qaZ=+V7p)V!02gD-{@)a-o+tu@YFe374xr*N6Oj3k!XE@6cZwNe^CXTJX8*v@^ zkSN zx#s)X<#t9@+aPLcIa*3ufJ!PIUS6B}UwhR$ZtCb}FSZ)*E*?i{h1AZ*oc+eAt|Ql;=7l)vXKUic0d)8X{+DnWb<;V< z{y=9t@vX11Gb7<`rdMWR00auj`Ed#FRNBAR!#3wIWkR3Go|$?~{>}OWvr^Lclb{;P z96aGiHrePf%3aV9icif%_Y6(ip&af(dy0PPK| zrkM=*G-kf)-@*0gn8P_^=>6SX-u7ObIKx-f{6`Kz%47&$XRGJ1^2?aR<^K5UyTncM z5*O6~_PobI?*W4#JaW7zzmq(NL=t_!I^j<2)>_qm4Ckg@hN@j1t1X|#O6g(%cFSOy zn(Dwk0B^Nz|1+bJe(Urb75GHxOo%A%k^=x_aY@N_tjgP-fm%QXrLCjUBUcis$2p1r ze)2MRHR(u|(u_zQy;-%y$=uD&&GS6X-bCY94&lSCa^#n8qWIjpcJ0nx6ZOlHb*q*x zLbEQWS)^sN%uAU*3YHb$KLk;yVSdh@NwQOXS*7_cTno!5Tix!*L*-)B#P%~xnUvEn zVSxC{%(Bd=6!D*rfMGc$p?TRnA1jwR`91xZ1kOE;#*}p_m}O(6>YI85#Ci2IX{ArPx zTk|(KJle>}lh}wH64NhXd1DOWW#(nL?XWy4^QF?POl6ZfaTJCE+?pgcuZBiUmiw0e z0>zDz|EX#T;pIi#9xV+}sprlSyLQauPhjK5&w+cVUk@mWh4x7u<`A*vqjiDL^Ns$2 z=bjJe@As(4uX;AFl@0`Lp|z32Nys4k)OfmBai%go zxW>RvM&wCg019+gAdmtRKfjj)2X57uL)epW!{Mt$jEKKE;968s4M0o_7@LP-=x(Es zAbpPyJn+LU&)k@Fz}SE`uh67wlI$m=Y#f~&Ny`fWsn>~bJ0wWV1~ilcR-RHkrw1P| zHm_G%Y;N8#9Nivic0hAAuMX35?qatUa3#igJ0Le{hy)Sgp< zH1fKQzgD4!wOk3KA~tCh`1k`Od?v{xUSpC7*0L6mH7YYC>w!uRGG=f1>@Xk(@$2ch z40`Q5%HoHG()vYCM@5o2Ca%NnZjVdC?=B2d!U$y@0)xJmI=vf=>O|y<9LUBf-`NA8 z9OD|9A>LdPOREIe9&yAAiJrdl=33n3b_X4I00PeOFRSC ze6T4{8lPOgG(TxaK!w>lVg!`du?C6}Ks=<5A|%qru5lpBBtu-XL#5v&U08dZr*Uc1p&yI}a|b^syeYl&EUp=Ma11@n@F zU>&Rw;Y%1DnpcD8B@bue#>83YQd695Mp@w9buCj`JX2baw`D_ZtyE^0k55DL5Dadr z=Xj;qdtb@=S%$TVhQE2}@0u8nvQkC97KO=*rtX7zaFf*xE2bJl6ELVyy8;f>+nEnX z7)A}DZme9v8ZT>q$Non5tY2+%Emo1*FozwF&wu7*_5Qm_U#|~KO%_8W{XP-Ke~Ozg^LyW;oHOK2uc33b*2~d}OM$#C zgsX}T{a>&6T8boX6Db^SQ=&12%avMzxy_%zC!*tGI349|2>viBP|o@&?YEm%#XIuUcacJ@@)&bDWHK>`$Xa{}R}# zJ$(hEZYgWo&*KJX*3>!dX-P(1=>#e_jNkmwlNw$#G7xCVgsetrs@z-Q^0X__a-%M8 z_L3e8ueRx)mVQbGA%qZ@Z8%D;0&h*57`GQ8Im6dJ@?#D_yUP7u1vzq+Ys2z!Khc%tWgWbteBnaWX z3GqppJe)gz1g-$8JTMhcK>Jb?_gk~i7TZ0lG?(e7B z34Ao%k7Xk1YIpiLwW6?^_=fn4^*Pe5oj$07r@=4O#l_(#4Z}WIzo^SqM**o=Yx!!z z*|mVE>)ecAJA7$VT2L_jzi&lT+4`+Hf^~$T+EnCu?_!MZak^r*RB`?+rs6m$9I7o2brnaSTF=qroA&OUi1 zhwImB#-A&p2w{5tcA=z~Ad^>FjY|CPFS0u7#~zpTv{~@WC$&1)S1Ls|bK_!>trAkb zHw`-mxgRZ%qGB0>D$xKW8sZoY;(ZDx<3E3&at@ERHklKmgZ&5(L} z!*f-2vGl8?hpF4@h1aKD6wYMZ;}+DVXD786mz(x7(_%mO3o^PlV_)=;5I)-=s1M}k zVq}RaFuhH)VV16jMGkF_`$No#vUQ`9ALYa7#p=Rt!q?UJ`X4lu;C8o=F?T05JHbsg z)$d7M0(3v6&NX)Uor09>0T_r6*Cib#xk&muz zJEEOkH5RiYi>yY|0M)%jOof(?6(xM?9)mSGH(6jM>n`(ct`b@v(MMZZU3DXRvij(q zxffVp6EgQsgJfB%B`bGf>~wa{L%4cv^a&y6o?WVS#j8N0iWK3lI z^dLLK)B3QFqZQi8>gY}0LsIr6biV;~?GszAC1`s3GAI4_A30^jpT>6vL3@UEGI(B) zwxVI*^YI-mcy<3q7K)bBnXP-G-LZu&R$F4V3D5##cV@@`raR$4FIuXt~lf_me z&uihO@D3ff>WLxtunMj73WsQSO2Ym@M19#n-1v7Z-+PXu;pv9xZ1EPf7KZ!-t(T1ve*)jbQ=QWDmbhmed?D~@rmj+nZ8qy%t zF^jze&F&DJ)m^{pa?Adt@=hinY(vL|)*E%Z;Py64aJ;Dg7`;IOqgKIgSs7ZD-}=@U-Ycs88_;86NhCH5?;yj^l;Ki;5j z`#Zfr%R7E&6leim=>3ZXEia$IvKP$M^R$V+Z0t|aNIM(VZ(Tb1U4iR*NLX%OChyT~NUHcxh1oaqTKz z4Q|7lv0mZ-LmP@!dKC#xnJHR1N%}653hf!$SwR6Uy$TvhiqRrS}8&Ttw_=H^iyP0=!^?eO0YJlFi)sP zRfxhDm5a1~qM@~BYrxD(hHepwQKn{!mX2Z-AbM0V79{A`pl4^~My&uP3vY0I;&*MF zHD|%e(7+Xt%lj5n-a|2haf=tI4fq0}WB#aXpSC&IY3pF`O$bn;7dejX76O1 zyoi969ESzgYyd0I07K+$YUieJXJ~8cOVr%S3js(nOOjqH@xNp3gY1l)?DUMJX-DcL zwuP#Pl1*-~le2-HY_0GW_I77 zc{L(LcF*v$`CSK6&`M9rOjH9`ULI^Czbg&L`rjh{cb$gQ?%#E+bzCariBjt)7uy{!iY2kXEnuE?b-UJPI#;;?hfYZ|~9OMU;|KqLw;B zmX?ZQN|usViXIHJ>-M>RuD*xYJA3Br<2ZGRdk)*5HLHkAsTt{c@oA`fl5A$XMc%jC zE34_0a*Lj9(Yy}r6H+ZbMLz|am7xvFNbgy>&T@TBFX_zYUu%Ne)%`J>50|N!dWl&n zx{-;{uX2yz>#gx2alAT;-ZS;T$Kt$l&kdxSo{^Re9g%+*o~E2rXY+I2;y7Hto`r7T zkL7L0sDsEbaB>=$f}0eT9+~T&b(sG;sXfy|WuIKeYEm%utUP^;^rU?B{2;A7{SYO^ zOf|sm*`mB@SO3Xx`Le9>J4}5dKh>X?AE+emn^BmTmRWC6Q|n0iD>3zjIG@Gjj%Qjc@!Wh}E2}YreTqH9h#(5RW$#QaT4nCQ*=*C-*+^w9k+b7>; zv`u(q8hV>&OR|x(f#rpR*5aGjZe67cH8e9XCA9)s8mto^30>JJr@oa0+F~#jC>tlTSm$TNoHLu$wXYls(%QA>i=y|W9h2pl zb^LQk);Yg?av-yq$hIpVGb~SJdu|GvBYwARRYIX`;?c>~Kpi)dYl>7ie%sLAW?62> z%{ArUtPg7^uVc>6StdJ`iB0AupTwrKtD-uKtZz5myaV+?Noh%bQD!2<3yiY9R&Rpm zX5aW7w)VQS>y&s=x%ohK=BB0!r3ER8C8_aAsTql7sqsL?paAdJ?^?N7Ut$BV=l?^7 zQ;+P+3yszS0C_v%PVYddlSX))y_3yq+dvSQ%SJ;K)VXbrO7$hy@ecl=mUiK1@Zt5eTE)-?;~_&DJ?Q4&Ly3ThSAJ_ z{=Z%6#<=}>)u^qG{UBzOM(ujJNWYV>D@DrI$zAp6X}DCu$**T`>XR3nt-3sGuWs&8 z4tji|Qy~)FJVYwe1p9)z-0Twhv)%Ym)J)L9psq_ThQr7~cEB*eP!K3$AGw|QvGAi1 z=BqmYIx=zE-j){{SvCpCN~crJl~np%zSC->vc^bYtZb>}Y7}N-m@?rH{16R17BFv6 z)$^6D8RC(RAx-?KK%ScV(I)Q~z}^r1SF}w0KQUYL9lcEjQvzk$y8NxxJ}tc9hcVx6 zSd4Bw0(vff+gU5`s#b{H+u53=T6O7k5V@`&y6}p|*=I>!mV*$(LtsUdoi{1K`^d_^EhzEgA0Yc*coK5= z?!mvrQ^7yLncZxD6qGLP%9-u`-f=6`=ySRG32CWnQu+2VJhlRPiF$*1DG z$yqU2TY==TbR#(`treg)fAZ+%>3iiq?9*d}e>^W3_w)4=l%8O*ViC74OdhZi@+~+S zm{FypR2WYQy+}|MiN&>qew4hwUK&ecfpKQw-D9e}0g5u$TAfVJ(;@ea7PD?)h@O(* z4TV6ivLmKBP>!jPC>+fvFkpI5bk%8$<+dJbeNE$>=WAkcGX+YZV6fmte1t+r$OXM$ zebhn(8p_Dn27g{WU>uH8g<6>QV~#oM63em(fdTV<6IpQ(K zA@y(}V+(BkZaecl&A*&l13Ob@r|ikkO|m{iV<<5X-@W!Kq>OhcXJJSue>T6ZWQJSy zHZ%@)p;7PD8&&AxfR0dagi#PM9#ldcVOXm-n+HuGgv_;=j!^hP5k2>rHjQc+cc*D( z$67#Um2I@^&HbJBUZ-Bw_os&A7^Y}2rP7U-F%9)^V7jEwLL^Hp|2;7anxvYYxyZK& z@i<>oQ;yrYZE~j#@RwBj5VQc4id@cO-fA@%|@sZ2?#bH)Y*Um$?j}2bThNe&L&31UOfpiS5F>#6l8B6Jb3j3^yt}t!K*r(q+tC3-^;+f&&&Hf zznSOVCm2~4+`~StBcyJn)2C5`^zo3u#&!pGp5=3|-YpvjQXelu^uxdlt6JWtjzgFp z09`9ksle`??e{@1m&rBtIk~Qk z)D;6%YW|G6nOchOrrx7OT@bgftg0DpX5P*nZt-4^vL5Ub8T#n)i9+ahpMc9fkB?%F zAU5?0jJP-mfHJ_I2R05!0BauaRc!3bP!Qk@xB%|DB@1<281oQDm`RWv!hlq5&Rp7y zg?gwQFTXI+1brTQPAma=Vr{^v?-QxMFXjppBG)@x?Yc{Fye+5_Hl%{H7>4DKkvht* zst?(#msVmU-6?RJ4+fYy6^}9!o73hC)0RaUEm#wPF~diusY>Q4b=hpHhvr5NHD{rY zIqAt8oF4?gq52hCN1cU++K0^2G}r)-k5eJ_6xRPY$X7U@oEW<{Ba76zd?{gBmi|tA z`OQO}2z)^`S}K8uQs1K%k;Im<0rXT62ZT-1$dm@ zT5WF|xe@-pzk*ma@Czheul;7gfOUz}8c1y;cAFlG!lrg9iRaaFZ^@Oc`;gz>XNKGt ztrXizg1e+f;z+xkhx0x|PEJp|Khg0-&E--Zi^|HGicUA*Mz?b%60=yyJRN2_SHc;S ziH2w{t&n0;<;h%_skq-*D$7~5P`R`BcLEQEwvo)N0bV}Uv#OMnOkrD{&xkNQbK2x$ zsxt+uQ55}4W|gucRZ}1WA{UN1+FFg>2n=f^FPBy3tXR!8I0H$vn=`SHYhjkEEOn}| zUGzFEdq>O0^|GE?TJ`*FDu%F1F=JLP6quZva^ZO^N@alnwk9ewD9 zB43&Z7|JWhsS@VVZf+_k)T2r&BK1mis_?QX0#T1iR;4QF!Q=-{08>nrbQNswtq;Ux zP5`BvRhfjWkED7_yj_oPZ_nRfGNL9#op%tg@@)MDfKvkWB6+-A?A)w2$*;Ew_i-bNeW2{`Ml458yE?l=knn~y zAgWw1icBqhxV28yqrZL`CZrT>Ic?Hh!U}ia)IMoMTcHvSk0Kg)_ZWIYAKENLzEz2qKu)$?e+qfZeCo$DEPB#>7U#1x4E5Tm30BDA(8 zLF^ZynVCJI9lV{05yh3_F$87Uf!>G z{E#^AnI3IVe^+sNb$fGuD~5#Nm(xN3lxsKN(o+iAr;FW+qIW-VNA+Trag@|rdx6R} zZKgBS+D%q`f@=389{f6Z+7AfaZVxc%h#4BJ+EGIeQ+2G98yX|9d}1sz7xjMK6z8Kg z>_j;tR|+hnfA9b!asDW&xSfc;0H;#`Q=qgKP+bYMwH5Sob@}dRmIkX)EAh{0HHSS( zgpsW#=>D;*abBfnf>sI33}qzNBeg%Zmbeaqnef6lfc|`O(#k=M4S<8czp*|j1$qij z$)prCP*eQ~_838mh0ZGrz0Nu?L&9ltJ+eXQBvXN~B=)!>gk~_^v~iLtSq^Lahx|j& zxJ0zlZFz~I(gxjA$a}I6rFPt4S=NHa{+th}<|vs`^6~kd>3=2qUn{MGua7e=eV4M) z3x#h;NQq)PJLo>z?jpFX(zaCjxfKW{l=CH@uXISq&Yzg5W_Ow>ZV5Z!*PjR5Z8U=K z?^T>SNtXTgnLLXGQG`gvC+hQaK4vHj9m<;j5*>A&{)y~{lu4~p60GnRFWWjxM@{lc z>YV(!6y_;Zo)UDcGe;=YRqyC>LWg6C(k3dGr8XfPh@v@uaJ3o#?e6^F*YD47ZZ57a zN6qm73y1z}K<>dkPUq;!EG&tIkUWAKV8_O4z7K48$&9Q6VMT;1UG&aKEvwjkR)=4V zg)z!;nzF4CA?uTnsg#IOaCIKH85f~B5UHV@(Qlwk8&o0x5r1UEU@ITpeRDnfV`72D zp5Jr++;B@^{_?_iyr}&lJNlTH`K&!JKdAM}l&Oz7lr+4oPyj>BbILf+XE=n-Tk0X5 z$vnh6I-QZ+HKE-+s0mNep(PXcXk96Do3R-|o+PTEK98tP-XePpa+eMU+n2uba=h#u zTtg_sALv_WeRx6_Ah)16Zz!VS#!nR8G!CG1=mW`>-8EGS&d3x9zO8y28hCC9eCfA* z#zLFD>CP0|{EGSqV4a*q#8!wLah9rOd(A@K8ZhOO(u~hD@mVZ}K5Zb27-cEtp&G!A zqYrZ|XH+t|>}i8)UFmFHK|T(AVJ%g-v$0}g3^vQDRq3(y(epL#Lnc_woLDN4GV|K8 z3TGDSe3K!4y&Hs+1wGSMPTyVQ_{Z^Y?M#Y3KlGOVqZuxHMa%BSKZ+lU`4- zuv0X?d^2D_p;{zyG}>B8Dz4Sg${EFnXQ3aUC_Y26KH`neev?Jq=bp;&M_SW7!77;N zC$*CPT;?dZu3_Yr%(;D|Ih5wa5s&=4GKrzKDE8k*D37r?1oI`g zG^j4Hg4d7f$#5Bqop-tZ zirF2|30~nBC`aB>RnJn#$BT;6wNC(TXM!A!(@Xpx&*p#Q+6qx!x0+L9P=&a-ya32L zQ$C7RXtkqgGy;>U8ctxqhm#Y~X}BQ%)ZkHF4Nti|;%g{;cieg2)jj3uTG`Iay0f)a zYJDjEMb260Ih2JD{D9kNr8z94ZI^$X<1LC5M@PIoDAsU_7itYHP)s-XN!cYs@$ z>rFQW(2xjP+!|6gIbuoo^-m*-+Y(E7A&Eww68{(vL<~{sABWem&s(v{(O0~cnXL)@ z@;}qM+|chSy^IG0#01l6JgOBS4x0l9V$rNrdK7p^c7rphEUn9{53kTgg{{DIu2$UD z+6@EyQUah(=3nU9+`&%f0R#_{EUAnGtv@Y8$xfaa2x_i5X7fuF1ydY+nMYI!YITIQ`o7tx?OH}F5Cw*dkGm*Bv0{1rr-9s7oQ;1uo z!hZ%NkK%ER;d_GqZN1=op{wAJ3XfN8TI%$^GMhV$-ecTbKhLqU%?@f;xC1JKe?(dGdt$TPrxoXrIy#TEt4>2`MKKl7jYeSZFJ z_^Dr;`i%RB8KbJ(Z34g^XB`DRQ)#B4_e{tAfR9q5=paE5m~x@yZnN9(5+U|VX}kq9e+Nvf4;0D08{` zQh&%Rz50j?K%z${6{ckeF(04K-#;VMGgFrsa286>bYfL*8yO&xLgAV=$CyZ?V(?2) z1Cy_`ufK2X7bhFF%XPcj{LNNtx&YfH+1eruI8TtUe}lZr`1C(O{+sc`Y)`8lR1h~N z6&|VOQ2%k`ZT(_N<^$-Sf%tCC-EHP4HyhXf2D&(gpY^qpHoKUm2%hu%$C8#oxvN(a z(FC1H{{7DV3wozucjV53M(o8|GNg@$JtT$t5j*yt?%3`zgarKgc`M|-P zzuszl=iy&@FY~YM*5gH}UmW^=@nw6w@(W}W1}N@`0fSI@oSl`=ZyQAv#}(3~VwcgOb7-I?votQ`}o95|E%Qjtc$2?+^N z4wOS=PF&!^0mK0bsRxA0feRPtzrdUI+NsCM1)uEsy!pk20;O- z;UrYsu@GWZ5=jD2KisoCJ$TxUtj6*NjbjoxdS%Rg+DckBcxyXgbF4izTnxz!R?^WA ziwkzKw&Cjd9W)4|EP)8JrXgie?tjOtM=ga%=+d!IEq#_s;0WL!d%t*UI5{83DiMIU z9?$8YpLyZ1ZKED9l(uGe-R?>i5Fw1p#p#_D`XN`3Z{>%DLSFA5b>BH}XZk2UvF{gK z0B{`|#tli6gpMv%s%KU&oqq+n=6$;xO+Nt@ZPkFUp0kTW<}N)k@uh9hUPyoysYMX; zS*2xPwl70NFqqT%VgIiqrCnnDkYM39FbhH=zyS9Sly-O^nM4sb?eKxSIOM*JnOnZ3 z|2a^x+{ex9^F%>5P`8{nZ+YjY;WraX;4)u(Wvi;P=YO6EAND_Z;)3n&uKhE<^yJ-5 zn=4!=-SkKeEGpAR^b;WnQ%Di1P#WT)E3m%(8yU-*4mQ1suuOj&nOK0%x@qB5iLfRW zoJB^>T=F#p)l7+0B$lW@P0$==u!IA|YeuIx3u3Gqskkf;SwbovJ9_^~*Xk){>H=B9 zlZ6Mby(rxV3FG5wP7xQ7HtU)Q!fnkfSxFU*zyToe)+uktkL+PvK{Os@mpUal2#u!Sq z%lhKX%IW|84{)|9eZsJyd=0wB%+xi^7+2|Au1UW^BCOvoA6iT8xs6a4r55NZpiIFt z2lVn>E^e5ux8UMvWkc|mM}u2vgRJ8y4vF+qSS;%^MWp|pozSn274*5{U;2JAug@ME z*O$j{cYd0^Go}w$R`-|*r)!mxzE=Le^I>IkRKM&M^-=H5h5kJWHX}22IdpT{OsxiC z-SS{V1aH!S1f7q)uSPnzPhJ@P4|Zw89^og43wWHpkTFXGF&Kv7svSzzL2z;TTH56> z2U1;x4u#fDD0CD#(p;_vb4i=zw4HA4q7L~3Zmz=p1%HBrlm9``-Q2a^oV$H|U-I%i z?^p7p-#)yoe*y?aG-iUqLM@ThQNKYwYF(VLRgMkSkQp9W$6vuKEF=Ch$SSz-Uok0+tZchkT&hQ|lOBI!^l6CChttGmgowP75qZ6}GlwWyt?RvSiERTRG{GjX7X zTOb0$QcR5g6OGdZ3^6K&tI5Pbn_hz%Qi{vWXi!^n&+NT!7{?V~@4~*5u)BTOnJhTx>->H}cm|N$dDO?hJ54lF8Y7RF=@wUo6ojfulZJd7+ zT^jAVj?QoCs&lSMfaEbEE?m!xFDpvN_YSJQ%KPlwAHRQhJr}ZHRXCk~ z)wXe)FyH&=&E1C&-`uV4-W;>gf%{hA68Vj@4SS)pfdYI~M+fRM0n)J1sUi3FD_ZY{ zgjFjm=1hl{i|3Lq+A-gf__;9@8E?p}a;K)VPR(Y+6yj_~Au12e(4d5E6l_N2@0sQw z<-Q9=c4RzWp`8?T|HC~%wua|PVSZ7=Xc%p&Dv)e=u|@-*Zf=mL3nIMs;P{$RmuRK7 z_-S0%L6L{ru<{Q*&Nl4BatjY0H&H-jzg&c=33g~(j> zQ2Qh5#nleFvvRFrDHxF?CJ7v-aWuGB?!tW7Ii(WNHO3b!d&J#CVv6N0dX|y%|46j* z2uXobnmDC=Th6IOsqzuAjZYE3bhfPMJqF)CA%}k~b90lC z7Yo6rBlckh$TFjU;@Wjq%dG!-Hw4Z`<9mMEm<7b%paCKjdSm**+u7o-*?mSpDV z6)Pm>r6}a(E2L%SrRt^^B?76G&F^?OFaiMYVvc@c${mLZ;;&(!6d9yRGL&-P+5|ZpQogtk&>F2qPaPl$(2zU#MCV)%Fjwo zF0ta`QUHR@E1CCl0RS9>5*g_Mr{)BBoSWtL(q+RIR%Rm|g~@vrWj9}8ZDZTa&C4$a z0DxTxj^hC*c$|Cb^4w*^K>@a;)QrTk)XgUa76<|WTt^6qqG?`S5Nfd~B1y2ekd`8AahR)HF7TC0IEP$zlinGNzT9v2XG)bD)6{@87+9jeH_ic7gks6&5g~L0~KXM z1#*@6XW_2!b>6tqJkNTQQ^|-6RT5||mD^|}37T1^BJ|U^Q8A+eLTdRaeWrux^dDN5 zqJ1&Wi?f8=xF<2Cb|N&S|Fcdp@V?;uGQ|<*O6eQQiO^;IZTZjR^+1nDCnMnt(+4?G z+S9C`Gt+dFO74@{##$-9eYUssb1GjKwz)u87=aLn#1$kx0Tzr$U^jAV@h19eV+ zrocGcK*~}jHyRX4f4+Tp!9;C9WzZORMAX{wvP5CK%bTVY88<@KxW$^1XTanNw-xY` zeY&||E2)@qW|Pvlz*{3$ZFwu(rZa;p4a}^8yYqpgw(}0JBnFK)`v&8dxj-sZS&t}cG5plCMYgxxq74~^H z$j#ijJ@21CywQb724SaQ?CJC8N3ydne)wO?H6nrFUU7rgu^ZUdvdneJ?k;^)j_E3+;M;%?z+ZX=w@9FEgcX7}?sE7qXyMI8jJ(=%u1P)ST$#W7{p zazhD6==4Z!&`8YwHGcs1S2lQq8W_9Hpyo=*Ir|`sg6a;j!t=6KtcFdmLJQ;M8G9!l zfZ%MYgzU=aH7;DRQqp0!v~)|9r`4A6ER$_*Fp5>h)z*oyQ;eAt!LsD4Vm63SBA8@H z1zPh0Y?QDVq!PT0sSsXt;2aZn8u7d}&}jD2=9|TefZbuLX?sAn*&YJbC9CsrrDWB^ zB`TYC1^GN>n>GE5728SvY}cdEfe}vZVh$@tS4Nq{V)TCar!6d%we9(FE)JW0~GbCqs^oE@{(Bn5g&NbiN->&i@k&Ot=PX5l{qg?w_Ka zUuY>{jQgFK(vY2;upeH%+Lu8E1sFnc65|ZhRL35m;UR~fE2Zzd_5!jSms}%OQoyUFcTRkK(beev)#e)E;^HB8f7-TA4pa{0Lh&JMtsPoej zGiv<61UgtVFQFISZY)5dLTK<<+l`;6D27wx>8j{>BltQrGqNNaEHK!&N+CC(Y)#bE~`8jagD~+v2EoT0C$*Lx^~_mO~2s zx5QDeC<{<;ag2Q{TMxWwt!yZ41xlB>J4HxbJ0}=cAhihtIREi6mz&xived!L<0;~v zm2FP!)+=z5%DLgh-}KJWzND1{;^eSv(Fj3yv9h$5{6lt#Y=yG95`}V=H)U;&)oX)l zQwSYL#&Zwbh9i;oHR)}g-1F63Yrvq9@vm*Y3J{dG&Do;DIbQhy@3W)LLMi1 zn%I=^^gJOE?Ip=A+Jlf2!eidej_9JJooU_8dxZPRjK?0Em!Nb^2l~Tw#e26goTQ}m znr`y}J1KBDuI)E^f{iAD79; z>zgHZ>eoNL`TOgMhu78haxrID5+g};Q{x0SEjE`eE0Iz|O{=nYfu@_|r;vEzCqXxr zYA{Fy?j4ae#2iW+drB?tUbHm!VT=V)AWs$giXF%n2GQr?@-F4H4D!YOPq$MaS4rHAt`ex^|ur+OV(@bWGRl1==OhjgC3RD-UY6dMvJ3R`n2Uy z7?HH^=^K3qctoG57k8-A{`vJKGYTMnJ`9hk=poWcKSBVdX`knNdql+HK6*7d6yuQ- z5ve&4!5tKM$L`@Vi_qN*XHO-jtX~Dt+w;t zpM$$0hzEp%VZfpFW&@*!(VL}X(w6Z$H0&$sq*g;C2$_n;*5(Enrkxvvp+AjjDxQ^s z@*tOhVq%4~J*0~zbs_}4L@vs+d+WS*ukyoZk*TLDg^bh99Sg`x*%NiNrEhN7R{4sU z1CnW>ZU1%Oq?R8&Rl~c^zOj&E1?D;p6{Z(8KT_cq(@F&%gzGEbYGj+7T}7CXAS8`|y* z)1H|Rf-~+j3~$`n@j_iIS-_ zI{F1?B22u}v^nu-D|0!jlP8PwDMlDmozZbGPY$Nn^0s54`Mo zXL)&SzsSf^2mb{wPDFt250El=oMntXPQySHgoT9xSxD4$?*g%@ktq1-K`1@icqiFM z_D}2QO-acCasl@=Na;8Wf{rWD;wb5uYBV$743ppb{kwR%wu0o9a0cB+;oz&Qf2yjf zK>~3{id@jW1@&Gdkw%6M(ZLI?47Y}23Yj&w%e!ag7h%#xv^?jwnxd1(-usc8heS6p z>NcaM2Mg7KL@hB=HiRW9AtMsI%cfbdn0{8b!8K{c);gp{@1AGlL&oN-I4Q~}cG0eX z4nKBoGnA(X`*0{P)}Kdj`{MQZ{Ok|$n_BAY41ipCocpf#Rd+&+pjAO-L8etgZfbHy zVqRudYQn?}B{8UAd2xDXd}dxrYEg1(K}o{I*)F0`8K>05(vr-y(wyM@(t?DE@Aa6t z6ei0u>Q826y2zVanVq6?9^vsfs(j>j){9Jt$C8#{E%?p|9c{b|^c(Vfl(tk*I=>eyx8+e?X zDE3Tr!c{)2g35wStAwP~jKs3kgpK!@xd4XR3KQc2ryoO@1w zymNL+=R?@rxsDGx3 z344k&6-E>qXveeIg>F-x@__5K11iUWM;&5C2)V>S3)z9Gh)bnGSOyAp z)#>{=(~0tZ;-hbxn1N@uO@beYEaGt?nInC=^CT3RHj`CB0hKC^D?b$y>bI9if7hZ(!XeFJ~YX zaoly&>Vh^lp(#l!9VVphFuNn8=FP~ZKG!whM=qM@=f}?9g3JQF zg35wKz0Ca0f0@*n0nShh`|ky%w{CcxTkF&2v%!&xv3Rp1(`iQ4Vk>?9;_S?voZ{TX zl9JRSz2y8{s6cXJaY?bhrIE4jWn*$H}^)l}G-0B6r36uAL-oGUKK$jqxq&d)0;%1qKt&PYuyPA$&JFW>?IhHeS! zwdV(ToZVY(kK;yi{?1>~$H34FG+eK9P7V`~Y%np7q;4XWh;DcjN0jYqkM-?G?EspCaqdE?%q_Y-I_!xl{e1& zi^i-mp~?+U#w&IG?nV_Z?{=nYb!%OvT%&fb=t@J+ecRAhze|!^C;QBW+_~Dj=3cEa zn#pU7Zb6yi@zewk>F0 z9ca-;ecgFm8Sm9~rOShF)hqSBc9qAbuhf3)%!6r&xxH<-GJ}b;^vUO@(v5Y@scjb! zU6Fj2fyC6eruONGRGzt;(jCS4G&9+sgbN8yW_vRTAyxmk?eQx{GZESV! zh0b%=Rqb72U~r{BH)Nz2BJ?Ae+MAWPtvNfoYiS!|_=f#;0-nhdtBr!byA^55v@L(% zvh#K|YkRMu8W@2$q*2`t{$+hqIGO0$XDjE; z3?8@JVV8>%ZlpZSJm11XlDEO{-jd%XCo$(*jolJlc$m%7vqz8-!O&p6h4Fb~S42^7 zRAia8Zd&EmN+n8)rQZ#^wpnA{d*D_~hRX(=otaOq0%ELS5& zlE<&Gb3tz~(juhX+p<(8Ji7D=k9;4Z%cc6kV3DSu%5RnW7P_iNw2Li3)J-Als8y-+ z`-_z+TNUQ0AGU@K7B8?nLOFQWyROkTj=0?(t%?xVm4!0Z26E@;JsBrdzK1U%3;srQ zzS(y9z51hT8o1uGq#|N-INe$glUo}Jx+#;9E>ucOr);0;Eq^4hU}JA-N{w7BhRI9o zyzO8Q97vLuV!)mhwKA+(&W1x!05xK%5&%51qS>*>cme`78AQlr$@xr{iM?%1Wg2X| z>0nOqnfaW_pU)HKTGd@s6PX}7yg@{w)#vlNYngD_oa2+auiTz;CyaVNS0SBAzC>(l z)D+@^ADgBkR(ax#hLc=uh3Ak0amCSMwD>gO6cQ=cVj<1I!h^E~|>$UgmA zFndhh5ar0z^EoYWmN|YQ3-=s`=qA>9Zw^XU1ZVVsHo`)+X-J10udK`sFOR4gz)4_f zzqR=`niAw9OKmmw4-YHX&VZjNs56LQu@Ys10*Rg5r`WkY!;V{lD1_Y@VdwJ^a?z!C zJ!VO-t0JXdi_6yR>|q5O{zk6B}%bNHyJVMRHxM2Mp3HO2lv!$>o44 z3EqtS8Q4=y+4tFoLffOfjbWgjAp1r<7>1A_2iZK%&r~!zGHtC+`J(l8zO~RI3-Nhl zIh}o}zAg>r&Y(~+lp96i>I=pPUrMZ6$*@JxB+A18q|Pv;r6IPB;%po3 zIef#aDG5LD|9DVx zZ0KZbYynY24kafWxq*7sv~tx&sA6Y|6|d{sXeu?65bpy*RE2Kg+-#%l3FJ5bf@jHD z%eU=>vGBSp*_OO_xs}3{*C3nc6-PlCD`Mqq6xJxtyv6sbe$;J%gnKMrH6pny~BxDiELdQQmCyv`4b;DvpGw>GuUg z4K|0g#YN3Qk!3bq8@7uiTIynCrGrh~N;0a*@`7iOBa%IEUPchNYnvybRZz&bOt+>+ zkSViY!xRlyg>g4VNqyc$IAPEbJ{N}IGWRTE{Nd+c>!vxx&jxYq4Z^BA9`g<$CXRV; zsT=bHFrq&ibGvsJ-*r3SqmwZ}3rF_HJp=&+ea5VfBcFmfuvQ0JpRmey??!Xd(SE6r z1e|p|gJLo8pcep}_ME1{mf1Xhp)u32-_V-XKv-y#_3<0t{=kwH6r%Io@KRK%pNE6B z6fcm@SB&1LlPAn)GQ${PC?;l_3(>R7plKqcaeI@7hB^VUUiM+;8L2(K{b z#|eF!{CP1_uRI^VPyRe(eKcl5fQuw$+5-`}*9R{^hFE1`h-lccF1XV}h0&?-g_v6! zx;)dCje>;(mn!zPkP(xhcFv49$Hm^`mh!mK^PX#jP855TufY)lb6+{ifUpnuYVkcu zk6U1=fIEsb)cK|LytK5ag~&}}(s=@-EFI-h77ev|)ST8NkOiVVU9cQWp8T}p|#U=+9zphxJIy=ck~P@zQS zFnnuUsF8s^Q9+SA8NAR^$)gE?Fs`WkUVAoU|LAFC%cxr^tr+tRjd3O!GHv?`YTM9$ z=d=_$)h+yrBuYjHDaDA}hvkpL&?vWnzaTO$Pbw7}sK-FskA}eFOH|-T<0SmuNGuCx z9!Erz4G@mwQ*U6AaSE2AcRANMZV{`gC>u!2RJPkCd$TGUOV-62qwFI9cWX+DptI+q zOAId0u|*N)i2xI0$_jA-u_N1(4*`{Pkyl z|NGI7neSFR+fHZ1H<>uG{hXGbVLVXc!3CwONSS}khb^uqmAe?plBWNBH;q#k>PN)b zN!*)o^ctUvFm(HpplE|InahbV&)wfmw+!GiX)uxVPSfkK%}7M)Y|&?f$-hcLqCRQ3 zrLd>&10%(M!t=N$yr~Rz0(bq3k2;RwI?Fp6;woB&hZIGaC<*ga-ktb$4}f9N9vJS z=%v1L6)0n$=O8UOq4|RnPAHXw=8-y@ne@uIV6n?lzGUDTtQGaFO+~g`O$5uN;Y&(hv0%X|DuO1qR^N zG?unZ=PA(5+{fTvHv~pUaD2tG*2DnTi=7c}vGd^h zTuoaB1UzWQO;EK7W1*TFzIEe_ZpE3G8a1xeRT$ z&htV_!U)h)Swy&`rCDEvI0gr$`i&h_f*mcRBHqXF4I@)-tT!g~p{*A>8KE|2(@`mI zKG4CRkKIFNizyb9VkHTEq-U&C8Qy+G>85cVVnaIp=XYPwlP|L@o27CV#wJb64V}!o zqk9K*L>us)7y<>cP{v^9Q>m!lq8{iOva&qf=x(J08m)3Hx=^}n9ZkwP^X+tnAaHcnk*Or%20_0i47uXuADSkW*^f`ed$>-` zw4(4~M5zy^NkZw~M=(8Z;LtGcfmu|RajUQ2f+3QJhjj1M4S;;OMlVWjvy>Mr?Ayh&7+WQZ7`T@7R;M`WCK=-Bn!!H@#yE7R^xNQM3ge=JBUL~|n0hAcHmjXp|k zLk9FwEsz_&%0qRbSkK-TfW{})ntHIP`@X+^_k3q0FD>=fuGAa;FinF`zy9nWvrqBg zYbjg2)Ag%#7AKvgK}?r*vg?xSoz_fqBpC49+^ucn+pEc2`iDCyi&4*|A4QSt0D(Y$ zziRTGj$^Pz2_w3ipkSZOnE6<$#FIE6T)I61j=%pmW>iITp68f~j#CDHoVa^x@w^`Q zaY)kvQ?h#DYmzTUPI`PE&wYQ+?cC%UQsLH7dZqh%qwddX>tDy?2TaG(=VtE!5v&}J zaT{ z%jLxdG)raC_|{RP!qqs={s>HDdMx6d^%rto58)14f$sCrq*)nyhH$TG3t(kBwj*@2 zT=MO>yWpyvy7`V4=VWTC8^2eHhDbVU0ib5YAj z@EKut6qR(G<<@-*?|l1|%A#+M0^*wx5TEGF2^q&1)8bvs5rQAx8&r?(4d$kyR#L)( z_7v{>yCUJ@2pg-+yE}%@T+A(Gp>wa|eFJaK@6C4wgFOyggpfR1D?AytdV0uMrw_)F@A0#jSZ*KPa}{_TuDJ%<274J=w{G_wr)!d#@`QXsW=VzE!3aaE5fn;fyYqhF%Ub$pv@P**MR_#(L+>%~9RjYC2NV)r7=5c{E*Qhpl@dX1Dxl+Uf>)_3F_+_~(u|!ngB_Neg#+ z`ZB8hY7lkyW(zSIZgR7%9*3LrqRRZXYYVrp9_!gMHf;pJP!$7`CR{rE0h)8rpes=@j*_}7Ccl4TZP@$h^83xMg}-Sn092HD|XYMCz z(Ha$Tm;48so*Tc_r)ZBca<7K(3Op~N3#DrjCLf%H3of7lcumRnL zlVjA=RBgir(9QUUY51`V{ThsR4;P+^;Ju|{uy5y_?kBIYpm1%Nbrh@Agrw~V=8`fVCOAK73A`VBMw4e%i6hdtm5cS+x;(V@B%$9r5v_zU6 zuRGS?FIt|CR^sA(&=*&~Ss(w5W?a&Q$-N-qx^+$FY2=DH|JvqADgi;saH1mO@c`%~ zGtS4jYiKMd%m$r?kYMFUe9}FHa?X&L#d}F77A`SmqT<8LvxIOvi~Gc3 zp`efmt^>v&y85)#E>quE;pi&X04=wQrF`!ZeE<7IB0LSfNj`!hWStDinz8P{+T!J^ zX-KG?v_gNWzccboo3!usi=WXC09{;^Z&D@kUe)o1+wl7^$ufLCp~>NnTM46Mj)a^s zmZ!lea-H6~*6HRlKN_zfIncOOcn#k>^U1{{{$7J*VWK0;*MboP}3Sj2uT5)^5CByKD<5 zPS%NILuD-Q%#LQ+1iXXd|7!~^>U>`KTliu)SZ5Dak5490N!0R2^7hAIKv|Efh4sW&Bo>*z}LfYw@ zLBQC$8uEeIlw5GnkEILsBkp2ddc0za(<%;M3%ThFGbywjOJQhZ*AFCne2>$`Y7)x| zcU5SFANpZ0TRwg!y^+6fa@|)$yyU9e<+*)~anA3$G8D0|nmkTIXxIKA3M4mD8(PNi zroSaaK9rpH6kAKTq*n;>VLunL+Xpf<&;=!FsRjN(px8b1ff60TeZ#vd=81lVu{U#I zLOI+6oF#2!q@NB^fe<5vij6N#KopH0L+3>1%(Ju`tHIcjcf!9ywmC{y)#F z3lQ>Tmy<;;^1DXbajvV>LYnkEt%C`)Yv_38U`C3HECqD#LGxK->6T zHCFQ;xbA0Wx^qJD-suXTFvnTNIU7kCx@Oa|hMy}rL=Ss#jGyJ>$UV;0<}&G`^Y>z5 zL7zPpT_{Pm4_SAsu}oS@C-^a;=)u$ZJT~V^MU#3ikM-Q!hxR<(Q_=Erj`uPze6^gC z-XcHG^Dxn!-t?oW$i-!@3o!Q;y+E8uBfXa(-6kRUNq1#Hps#1FwnB%DX_Hi`#Q z#34ug>A{vbFq01yoK@YOipUr%*rHipWY3|_vT~iPNXAHF%~d$gY#)!?GgH5O=2Ic< z6af!J*h@q&`}Kj!5f+Kqo*{Vlw*$??42X}a04lpQv+~4_hch2%y@Ow!W<2};#go}5 z2fvx$*0Z0@{`~+2JbQHLm7|Cl;$wYa*(ZlSm)$yiVyD<2~T z`c##3~oT>0B8bB-c9hzljs8F3coWleeg~Do}45r6~Glgv?A?mch;Dv+ytdSP`ukM zr|9}v;k#CvTtvQY_}kY{etkMeAp6xz|1Plj#i?`CZ?ARv2%aIWJi4iRfEa|rZJY;T zTzITf^34yo6m>|jrY{RA$g_bM!2mD_@iG1EgXhm39Y}cOv1T_3-R!r|zIfh|52c$J z*|O-jEf#Q()~$L$6wuZrqZWBLdv~dtjvE&_XkpM|KuO`}fy$G_Hkkc-7#}y6U53=E z)#_McJVvbX2=zgy_Q;OkL!I$>Cox8ayMzIS2VpO9H^=XxaG`L{vNg{xOT0q&9`^%qE z2eu!b{ps`pdd|LZ{zUfv{GW@(LG|D<)TpKG2d}=BeedFnC{o9>A03&?u3YTlc_aJR z#WPbY+1#aXOs_PuA6^RaaN=?cSAF@x(UqYe@kYalo?gj@mzT5IE5H9DUsqIDXj~eT zyDu~op665eQ6O~^+0jQw()GJOO;01+qo`jINbRADH#NBy#i~c~X}7ljc;&k@&pogU zn8)rE3oLtY?nF91sZebbn`q$5s3_Qdzt;~&jfDDhC!i2P)#MQsHpb9ePnm+UOeJ?q z!az^rkBVSlUTk+DAEd|%r~x^suEtbPS)h77$S!jDr96)cX_Od>w>BOg=>1m`w5%w= zkO)Hzx{+(hq9g<*fDLLMABvG?lxt%&s}m<YM^lEaLuzRAt=x^C`pv-$a^Um_z_I z!fX~^nZ>gK|gape|)Z|Ext0)PwlqCJE5Tj*up zBI}IM1?_}JJ*+LdAhfN#HcEY^HXYj(?I}HQky6NDpduIhsSL}JfX>zE8f%6`;6hJ= z=vUkE&*DWfwNc3%p#6^Ye2wv)u);MB$`48u zAfq};1=KrQbYr&^t4ilX{!@?VEBS_+(oSKy)03uFd8%|}kyk=hSy&*AGqx*dKdGNe zcd`qK`1EtAnNqABnnDwdJ}bPEe-2cdyV|bBbanmS>ISzeZmw=L`Ii*DN0h+Sf}_Y| z*Ul~u%RlnQ+t+X31K9VG18c?TRq}5!Z_CtoBCo@1wgm8Kx6p#K%bWs49~*YR#|tOI z2S{t6UIwEFHS3*x=(f-fT-g!sCSYR!0}Ji|U+k6vkt2AVjaJW#97Pmn)+8jIgXEC7 zVhGRKgzau;n=AxLnrt*AS&a!XkRR9Wn(o&#MS8kARn?mvMCanciy-vTvk0El`3v+Y zcoEN{9t=5n_9Eze)ib-9O(G7=&_C+?-h1EsUe!GQyz}XootL8swrp*cmZFF~@3WJu zn^GIwgE&)ZoXFBxQ54X}q1Z;aIJ>`;MBhAFK5{VDn8!`WTkgTdbSNr|IvNa7Kal06 z#LLj6TJ~i*00B7)TWbWRp*iQRcf2O|?l-HamZvL6|2()NRSCJ$UXpb04w0@os>*Xh zriIM&Zjwx+V;>&{uTAXo?dw1n^$1HVETb=qN>X0aCnuMdj(L7mY6D_h$U^iB1X)7Z3K4?eA47(@ zs0$l3|E#_`=|Nu@%s`bf#MQWxapD+~zytc+)@oalAXJZ$ql(yCey~GfL1R^jl-_C_ z)P>N1I~8STs4l~@fU#IHLX40!HjeUfmA~W--Dqj@G(NHW`AL%Je$@C_2sV*>ZZ>Vcpq!zQD1FDJ_ zlT*fU+ESg|S!y1=2T^96M9JCEopBMG@BHJFHuJiwl(q(*g0*Us7Oiy_2xpS}1`%Qw zAx=JOtw1gsNFvu;3?Pw$$n(N5&0T>ZIfatOGBYzGkni5(X zDrROJ*Z%Gmp)*MmNIQm27OD&WmCXQ5TVUI#%QWEBL79?NlQE=Z8B3%iX`WZ9Gn~dk zu#V{-zoQ~03&jJ?PF@5$+*9i}*4boLTS7K-Og)(i@2XhvIs2BjAeenZ_VBhSY7&S| z{06xg{006fy48b`D96DIQQ>~nWaI2E?CkS!4)zwq7NZety|-&Q?(%;d$!CfBY8zWa zXz~IhnqU0u&6(h4qk;<)Hv_(pjp_^kMJkmpW_HYiF+> zIz&8o5SyRQot{qLTtBeFXI8?SxK>5s3_PS?(@umH1Czwl-{U7on;$m+ntuPzwWXL4 zl4fUzYG6Is^##V1Yrh_>sd5dqrnARm;>Bn2^x%6pJCnVd+exE>vE(x$BLz#2PY-qk zYZ-WZI|yk-)#^1d+*$;L@L`l638?Y$~ zgY6)aLR6!ztG0t%s@!q_e=b1~?+*K*P<>G_$>I4kzBx{e^VQJ+ZC|Ov?>4{PIDV+> z;x_M|e?5ZdhnfGWXf@pxe)`qTjn2PF_cuGSZ+HRCRk3c{Fc97K6;}iXCD&HkECm91 z=#aKUhYmp(#}H`iWV4}3m89(W?|Vl|wVW88>miZIckiC=JxVw4ZaeR8*UH?YIY4^~ zJ8QB`?OW>tI2^A0$q$zsYntIY;7d3<*=895O6j(T<%bn4K&){m4=A#%adr>s4tiE5 zP}|PQps3dsKvnIfGF6pjM-_HpTQqskSUMl(0r#zz0Yw4QLvx=2{f0&A-johyoflbl zv)R{L8KlLFu4OBoM^`r1?PaKTs9T0741t%c>|9AVgo8%CU_FCpJRPm8Jt*^v)3*FT zKFRUVswJW?QhSX0R0E<$9|RW;Bniv%d5iGF#xh}7u@s5pjASj;ifN*x^A7V+8`>;= zkS=&0UoPfzV?}WZV`wk&(RE27ukr6H#WjLnGxb~E-LGiqy!>UA$)lsiEUGLhk*t{fh*pvBaS~*_2y*LVY(Y!2 zt+b-_#4CPeIH2N3l+_Af zT8ExPxftH=<>TkC)whT5KN2dUV$xdc61sH09B$fOJ;V2cmz!=hJDD zO(*IPNeLI8;Rb|xc%1vldy;QMI&(;7nnGG;MQVx_mjV4PVD`+_T`?-0#yLtM!D&*(oR4Qa7mZd7B<`$GxLJZM_n6f#UxsMqDOvD?$ z;{srKoIA;Pm2bm&W-&cIh5Uk&%=|nnD+Sf!n7o)g5V`p#a{)5|<;)C>qXc-IGcf=H zg{__go+u##a^>Rg(e&7=}b=0l%3qbYdZP7qT%E>Ts)Hn6nG}fDJj6!1S-De zfU=E&nrndy*(W>8%WZz3w4Mp-fX)4?vW%<>PN^k{o7bqFV?=j{qR#Be7c>?4(42xM zY>Zvl1Vvb$&j@Zf$UY2VBZxB;btbX_07$G??7y1^2X5WVv&cAP^#8spMV zFFwVj&|!ut8SFI8sUz$KYhomiB;zn`|9d4F%tr{g&9OQ#M*DX6?b}`Tk*GqT4_zW@ z3<(t&D=wChktHt_Tzn&f5~iSY*=hj<5(r2G@Dxe~rJxFhHVmLNC~c(kJi}{XoVf{N zz7M_|AgC>9h;C{r4zHXTK26H35mDwUz~3%Wr# zxP{Myaql)7jUQncJdW-o2&3`+ZFE2G`4(l)w5n2i^$ox~*VUmhm)=!7UqXG(AXJ7n zPAQ{`awdTbi*z$O5kwcFOXNby_FlBB_9_o-N9(WdrZmGBF31*Ca5hJ#Y7%EKx{C&* zuffpYwu3}flLI*<-X_TOO zW$jeWv$Lwn?!xrgmfAAP0^HbK_A`u;X*2gBGn%M?lqXL#_ zjFAHvnPUP@-JYr+_E*c{KuJ~V*N)~mje`f(T<%ga$G{roni875n#vkaW-@$qaeb0Wy^4&pbY2)YgRv$20n|fkK#VIrq9>qH zdNf``6()T0Pa1Uj@Lkc_`C%j$N2>}eN*4}E43$|VYQ^xweJFt9~#{h(Oa8@4f z6mr35S`fK;C^wZ`QdF;1%8M+qj2dY5p$=8mkX*xiy9U*le4=@d$)1Z`71Z44Q}u)& z!<)~7+2?%E*(!NlNY1bp(~Qtx>$tmUZxpptb7`tir`EKw%f~lMdO}lG@*Pd(+eC$f z>-?XL?;qBHz47W#qpy5;oQ;#uZxTTi$3w0CLDE`VTU+}hFH4hFDy-P_!a=(rCd39T zOEo=_1qOCfm|15BkfehNIh*9{D;R z-b|&y*fX;|*I}?ZcjCJ4w7E@*O=acfC}mZ>h-|Bg^s2p&*bydCo7Zb0f8vp*8n|aR zsG1D0>%qLESwcjHX&g-T?Yz;x{b5Y>n*9j^4+0`Ix43DLvRn=28;Dg$WzdEOV%2a7 ziQf}D6NWlTp7?itam0uTXYIcDJh>IH#D}RR@kX1`E|4nHq7oWQ&|*&}5ff9l7Nx}T z?79?#9Zl1^{!UEg8U*~-Knrubw=^d<#eQ&OvcF5>?&y+uH@6W_Qc}Uy6l0XdAw&IL z8fXqCpuH>1bZ#@u49s{y76fu#)T*M; zo04qaisN`d#)R$L$MGSdqZb!gLWZSokqaqjxmE_BW=sSjYkh&ry)FIP#Ayy-ah$KU+WV3~X6Roe9a6Xb`sG+7$I=oum89 zB`O5#TCJTIqgjgb=>mW;c%0kAa)4#RC*Jg&{G`O3_=3cu#N6VEe;=X>On%823;=sa z5(wlDDtMebz_N&K!c*RY%94!yy!e8|k_-*ajknSm>$y@=(-ewROG*pkQ6#On6o5ck zL04D7&(+n%)kW9MKgdcUEx#x?v7{umNUyXwwJ08_IWsRcMK3Kiv81#p6|5&Sw;;c$ zL?OQz%nOJN@$mNxa18NKumy_grRJ4o7Uk#ZrKgr?CIYPS#;m(uT4XiZk*{b5azFO7plBfS?A5OEMBmfJCYSOno)u z7Pww>CM7sKk?Aj-oyL3<&UR-hgtHH@*u&ZEtaTj4$*FmXMVa}NdsypO5_2+>CkwEd zPS)oWoopw~H94M*l}{lvPa!-%FD11oCowN&vcI(2*fmCw~!EnJg}108+-G z0F+d4%1;6+kOWG|Pi|mWXHEk01=&nkz!Lh>lDt3~WS$eyu*^K5Qi;iHr8S_+?@qqR zBQ|-rAlGC*UM{#J6?nIBK-n6T=kQ5Q{=v(~2NlrEOUzBR;+lMsUwE=7U+&~>TtcX7 zAMmqI{>7y%2MvD()#8{uB?VOlWc`|8{T%SneZ%iDc>}itry*SAH@D{Gc3I)c(*zVI z?~)amd{m%~KTt&1Tf7Ij9P*;I2MCYC1#KB@pl zO2^Dvt~(vT=iC4T%Z-JV7BotOV^}e1!78}p7UzGaB3OWQy<>1EUGyy+Clfmp+qNdQ zZQHhO+sVZC#I|kQwv+pN-uGYkez~_lbyZh&?Q^Qn?sN89do4}JE>v%Dr>26oMf+^# z-p5@oe9^p3+XIL61_kwz-cN%C5**SX44Ml@_kn-#qMAzs>rQ zjCTfzfk<@6ghNr!vlu1_)Vu%0PLHGojZKx(>ryXp$Hj^e?e=)tyO9*~RvkY^j1f_H zw!P`T@b0Zsy!mtKISSqPAO!31{YyCAECIa!O*$kyQL4`xzhRAc)|`2!i7^d?u2jer zGk;kbv_YJcEwmF;8bp=?WYu&!_tnU9jX54Ukg+w@t%5>der3`{Y1o><{2`|c-r$m%eB!c+A`zxT;R&MX! zL6pw&?v_rt+Tc=pk9!TL@g1&IS=waAO68xNPTvftgF^B_v4wh#LoK9u+XC51Lk00^ zj8Jz1YY~(lO0UomR_tUGq~;eg!$Zr?bo*2rgC9KGa3Q5=%QG(-e>KqdS6bVbC}Miv zQn{@XZ@x%(QXDF^jFe8)f#H#h3mdVfhMTANc!&^>Oi1u+$@~k~*pA27dJnE)II;@Q z1lBVA&~H(=8aAwWiGgdkE0bJ=kMZ)-WyNc86`D@ZHm#YbaBfqyB055M)aU+P%tY|{ zJzXOI+@TCS@tJGw@!c^lz-Q;h(awpph1Hy~UFoX|Riid{;O_I__G{b#tue5?$rcat z>M9F*ZAMYhuf-ovp0_1p%SWUpK0`10rKrZUrS?c_Bc~nLcwwq7kg*B;Q=3&N2Pyya%nEmD*ss3`O8sFEO@#`PZ$~ z*sX_WKoMWT+_mcMJdiF{FJosni+>u#EbRS^Ezl3>KNX<3OW=YW?*Ft^oR-Z7D2vCY zsgSeyD0GZL7|HzP_j5i)noxmya$r4=bAXHbIRScKD*vC`1lbzdzl~6FEh{aVhsi{-Ss2H`@_lI zAwkAgE`6UhRE>mL16pF10dgTfGf~e5PR+A2;q=XP`g>8wq zVY7n0tO3@?$fRr7EsKOggicloao*j0$|0oQu{Vd&8fAjuafQ%<_UjMV_&3(;+y`wK zIU|~MG&C{HTGZ;kOEA11#3+K!Gq4?Cs3fY=81h#zA_k!`SEwwVM7)V-Gn+5+_os+) zO4>-tn*#~wHiHgE(g5f;C({g{h0>>*aYkvOg>I~=2W{r>31cR%9n36@b(BvX7Sfb% zQH)oFyX+PJw0|r+veFM9>w|yqy{-zBze{v>`I^90>JKQ#C2bKschz>$2t+>6gry-D z_T`n0OHsvBggSQq(4a90q&oky$8HgJl8I+XFlnUgG|rU-gOj$0prPUtr2u_|?T|hh zdo?ToVPn!*5U|xJP_8ua-T($@AliZnq1QWg0paFY> zMQ_(Sl@iO;U3d#l)m1{%4#l$V-Vk~-VObx#;G#E|(ts-UBu$tOonL&zuu(;+_>5ue z;3`OV6eu55TI?JY;UYxASaa^Da19bCdsF7>uj0y-X7_@0l=k)n;vph0OSV^@x2J7B zYjQuRmrEn>nhn?ru!AHuUzC=1_N8w=P9nzCONX5xFex#8-5NyYLzk1ty8hact)eb0 z8c!Sa(#9-baBx3`UxV3Q6K4qA0!xRglYuG2y{yj?wWUC2p?+l(3ttB)N4-5wlcTe_<;$#8d_c@Dy_Q=bOjRmQVZ0 zo@m4wSi~u32+Y9RCL;7eg(m?9^ntoS8!DOJUz18u&0kKuM!OVLbQ*BpXdg1JI8MyZ z=KU<7CW`Lw_*Eb4%hD5LB5{qzStl3W?;s9=Y%Qn2{s29{k0LiYyC6`M4lPSV2@8dD zV~i4wtRAMNNFX3@*k6CIfb;j<+_Nv3-t0Q_mCPMMYQK-a1Yy+K$RpL5Wo1$6(=W-} zAb}b?VXV%9ixz$X_JekQ0Fr{B==S{nB5FvYcL<Ecl0en}g)lKzaf~3j^_&fN!NLfXNovY1=D{`f9#p3nQ#oEjF$MMVe!*fg9N{F55 zb~!{oYMzn5wx8F+ThS29qV}P*CkPwSl^2ddE+tfkaX{)ejP)ak<1Xbba)2nrUow8J z0IEL+1#m8lSfu~7a^Dzz?x=>w!?`h`KS9{2<#JWospF_Fw3-|{LF#}IWGt>9tFE`UF^}CLS}$%2LBWA;e)xsVeY_%<1=?(1Uroc!nyjA(oK@ z^OM!c8AEv6vC?mX&M!q07#QGj!NIu|h4bHRtLiaeL?Z8fjt!+=;gX?`vlPL;=t;3Y z3Am?R7kxQL6a=UTH2m#omCmkBc(?>infoe zEwgpKv^A=E%W7(@RoIs&KmoiWwS?>9T~-Q!gr*U!4}TIqe%gn0d}yo3O{EwYx{9UWw$I+gZ)L zOZVxRGwB)p5I;@A2swJ5BzW-D-=1Hf@Ws%RF*Y_fW*mY$NSL^1@<-*gFB3|N1tqDJ zP9Z4Wl#=Fz=!|w8%cy29WF%z}RlVj$0jZh)Qasu?PE*35>npo}PTwInRXiefqEE`B z;VLGKh?|@!e@K%eW`z*u#ko0*O^YIx>}Gg~LpHcy{zAXtH0c#(pr13#oV76cI$c#g z3SS1Q(Y&Pfik%ViX`yD}k1Nw*^E0Mjv-x6GS*3o4_GV>oOgg>|+!_g=pzXx6vBN)N5Qpfi3<$pt#e^)!NmM7*<@!ff_qzK=mgv zh-!WZW54UH^UIID-nZMr z3?A){?8Cj5B~iv9T!zw=nd$y&H+wFu|84DOrB{42!kg?Y%cLhD(i#ONQvz!0=%MbC zhD6Bl+AqNJYPAe3Cm+6sjx=gNh!?dhfOBx4k6Ys%z|X5jfvCNZ`#Zr8;O8Z8#m@7i zj?lYefFdzS5w;V0DlXqPNo@{NlRyo_IS%*=)3d8@pp-46mkwMf#_xij#ylWyyVs9( z`^)J+_G>l1Ly+~5wiXY{WJk8 ztH4TM@dQiAbghMF)$)pYf($q+73LO!`G>duUIxv2p0|RLY~s)A*s>O9y?-o?HH_#U zhifBv{Yx`-z%6cXwqDHt1T?T_;zUWI&mDQnx791mC6T@4cFS0#|0YE$OF(j!_6qv- z*5gl4N(POh*H~6+`GKUapM_LxLK?A{%m$(@(QLP<0Iqswtj`Ej{AH{DdV@&k^gI-Z zKwIA}73nnQZ>*(P;0C+$AeS{Ez7!qWi+gcoH z!YpJ(QDNYczHM9Tqvr!I1otii2!RoiV7r=h2>b?1+m9Ymvu_&~?r8MV?P;ivu~>pm z`~sxu{_HZ7+yb~LJ)D=e%YMu3MX~9;sL>% zxp+sOXI`}G8K?Wa0A3O>8_SqOyFOfa2>5*MfYRGa44MbDK%o!u)sRG8>I%l?@DmOC z98>y~>Iv#2rDuBemvFojsDfxEfO;TYCw^;Rpin&pVIgBd4K6=S@!z8XA&cNdrXoZ` zn()7>2ZBL?4hH`)v$c*(t|pDIX;UbC0T>l0bsBGg-7d5F{`PMSvTOBLr@gL)*sEE| zL5`@b?YIZNlh5m)=Z74*I>#LI&hvPHt6M7O zavKzQEYNe(S&pX3RB>B#94ewLj)UAswV;WBF@+4J>P#+5#iUbkP7}-e?cd#Ss429D z=G?-?WJC0Yg=%<7p*YY+AFGmWAzlo*$f+AicJdhd@EqHR{Q`*NeR0wU5Ua2rgP9k)JbNg)7Q1PF#hgJsm?3G9Y zcG~4iJI(gD1$4|c7w1?Q<`$sH%}~NN?qD;rMuP5;ypgCzkKaF1r-N#_@y+E`R5)T& zLl%mUp5I3t{xGsF>`5H|EyNJs^S^;edk_RojKNyX)|$`m;rC+C2xxE@tV;*hw5!>D z$PTn5VO?BvzBci_ik0yUwjAaIX`cmSp$Dq&bC@lP<3DiwCw9EcS`I$s37!Hw@og$6 zRnB$IarL7&wh0AX({G1ef>~fL1(4a0sHPAwFW0cu`t~_k$wZBl;=6v$a+=yK(TuAg zW#=Phg)~<1mi6^CWfHs?uH;Mg&|PgV`Q9g#Qi&sWV|78*skfk|9h(F$Ps@C0STxAh zdoSU%Z6Q7BGAy6*)e5NS=3pgfZ6o2OWhO@(Q=2vv$)XKrkhmf!I_|S$2H>~_4Xfd4Pw!?_2$3tWhS<%QsPs&OQC}4u;1EjCL z=P#`HEe!5g2<(IN8CAB&g^2J+`>R7&0OzN`Kx< zQC+>aNQ{7{)oW!NF987FQtFN!0KgmBd83wH6EZlb_{(#rT-2mgERzJWghx!@4O_U1Qx+*kbS3DDZVTRoB(wmfCjFJzaaMQ`(VP< z@dnmt7o(e@NZQ{KN9|7!uTaideS7QgMRID{x!@XRBV6+ z3zWA;>`2h-01QKjZ~c`lfg&+l{E}f$OkXsq+%KaEt)MBRqSNMC16`1;@w-Fs%Mi1T zGVaUKpCYo~i%P`yn2kJ6^tlsJv7>~mZ*TqkQa4`G1RHBfgg!k6c^X+Q)s|@T)$d}P zD$A#;KE+oi?BkgR?hj>>Y4D?J$>(>wfW+P15R-z@iOS)UtV_ zVyic2D52fKcT%$#8cOwO-s+^98fpdAa18&PHcSH0RYpR7qeCL8Ki^fSH$G$Y?urVnTG$*&IJwCE< zvqMTV5GqBd4dO9hi;$Y8V5Pu;NvGP(5+Q?i^CJ1Eb*cchOyV*N+1!I%v?g@jCZ-E8 z*0^8-*2ybWZ4l;|x|K9|KX%QPQpy)Xthd zYOjW`R3RiRL!tIVdG0|agEWpiEM0rANG;R9a&<|=S_&xH0;#8YCz0+BZ?>vG9_g&T zk&o*211F*dS%ymNhr}M}N|&)^CKxkIOU5u7xNCb|EqE#nQG&BDewp`d>;Le0^`CTC zQEuf)HJEwI2r5O}KNud^tied>aWtfB@l=e(rFmy|wV}z>|I&6KF7)oB4WLJG#0yzH zqdoakos1lSjzwl_Kcp1&v!n3&c~cxZeJ7F@LceyO!SXkxk&=jIn-6Mf(c|W5W#sz9 z+j6ocwIwXGxsb9sm>Qmf`^Wb>bQ52+r5i_Ti^pf;TZ_D>kcy2tlsYw9d&N`AH|=UB zMPwRI3L*VCd)`SvDf)KzJ_cF>MXGd$bNYmO!d~nuKxBPb%RCY(;eNS0u5WLHeI;p` z@~LCGt;H{+NfJ|rk%%SrcgWT%=L-MgTJ2j;jfKut3T@kICCHOo-=Y}xl#!OWGSfvn|hQj8TH2=OzDM$<(f{FQw z`t!>~4faK`S%#nxbX%LR4zW^oK6bji{&;+aBn~!(W#cNKX%Wmj{W_S!|8eCzL)2~v zH0pT=o__$_d)08^YlqKieRpC<(OX)MQYpXyMDXXe@SpwnwpvHXG|iQS zMzh(&+f4ZlHQ>qoaGzBTy=OI=m6z)kG{VEuS`pb(J=TA7W0|U_b6dTV|8vsKbCDOe zP4km$9GiMhgOt!fD#$H*w77KHp;W+Ytw);Y)cF8~0T_?qc~pd6=hmQ=MrGE0EkU2; zm=jN;`E;FdQH2@p^6I`-S$gKKbEbt-wQ1# zA19ek6AprC0H*|iKzH$R$#Dv55X>BmnCq4PswNd(XJ*${w}_FfjqE243Mhd*1s%W> z*HqoWXi@o_X?t^nO`GONAi$6;OXU}ky%UY(2}THjadUC(JHSjRR`g}F<#PPm*rt?lr<``W3`YN`GULAF?Aw0vyQQx=)~bpzU}B_t<_DXR7>02#NYL| z=511Bf%d261RLvjdPX{hF*-(C3E=kkS#dF0YBG8;Q#N~NT|du>>L-rH*m}=&rOh+z z4(g6|e`}b;;SG|i))IB6mS@3=MK;v5<&HJ^F>6MMNq~5VSJvobPQpib^<9f9TaRs{ zhR?~{7`OWSIbjJl7FNHE9flEG+HK{;;+w6G?p;~AuhI0-0);Fii!g^t%;B|Xr3WE9 z-<>2DSg9k&m;<#}AthS?HC<;~PKCl|_v)-JmD|)>PUsui$zyCmIa^RAI+H<{-IH@4 z`&ri8jeBSJ{Z2Ydlvx8$Wr%nI-b8&@V{0lNLsy?cc0#qacbU{LAg9RGt7GW^NkFN2 z;6cD$FjlkZRSZ{`f*dtwkn?6YTLTxJ!94d zJRwj}W)zf=$^HF#Wl&HQ;;w&-gNgG6%Av>OB1)+=e^3`Zc*`u;o^HjwLO@EaWsMK@ zkvU(_#c6&*axcr(T#v?aW$V8V({qcNA)?}0CDyMVv*T1A8cwwz3Uj+4x#ygg-|!fn zJd|uZlun7Ie8MWLNC@0|^{=VkIU>MLk@s_oE0^rR+2}+7B>GV5+#ekscA=-qk&0VY zxxxdz5-wbB)Xbhd z&HEvrEo;=K?b1Rj){*v)=NIh}20o4>RnxLrO+ITaw7A=Pm4F=6FVubK^kww*W`Ri= zD2G38r_i0l{qw`AykrVhNUeui%G>SfC7^i3DezOJ1O76R>XuK%#vV-l-7als(SF{4 z4_c2xyt=f~xncD3#hGbXH}<5zbh4~LqsuYC$NusLl2>XiNA?d79!5|p2C8c5wKWL`Bbnjq3U`8V^;9zMHYnCXo>(-6u8PyZsbm*#rQ%1^KWry4^Z-ICDzu)QL|=J+;g!%(JLjeQ12D z?A`|jgNE*#+tSuseg5T&PIAius4K+fqQY&x>@WC8l|8;!33=4_p0X?J(U?wb`B*j) z_W#<=g<@wft)jiT9vVTiWpQimjFR{Pe@m8!w-)w~XOCP>y=LRI^rwLqn!Jk6cQWca zjqpt_lA8y;ZYP;V;UnXr2U0qEjulQ2AW7LP<7<)-6Ts$zz+1>V2&C`;BtI6#Z00lW z@EB<$UzPYP+iwkA_y4(=qAHrxPzB|vCq4J%@AahEE)T9}PT0tqLKz~%JGD`b_p$%d zt+e}01CEaicBUlmcD!TGSqg_<(;Jzw?G;ul-pTH+t_<~%i?s1uok1qJh2b@Ek`+W* z&Z)cWCY&JCc`e$jUH}(mv@FV`(WLB7=1!3a&wewuH}EU3`-fy}i=V>*9Qt!YStceH zAT$2-o*?eC&ZSru9R?}ZvF@lky!{aX4DsKOhQyWskq3_Z}v)8mGCzJ;IN$i z*)+2c_$pvp4NK|qi}AK8q8IqA{dQ3fQp0RAv!BA`Rj{#pRUnYZ2XN;-Df-iPiT$N9DE zcWr|k4tn_+AcwZ{<~h65|Jfn{EwP4il23(!JCkRVf1+(WtT_f!wA zkmG|uzNjfIZh&Du5SAA^dwm$NJMfT-l-)W%V)p~J=wrMph-N{qH?#sp(;}O~-zg;8 z3r5|cZI>6M!1>RY>8cnB`NU&nG{RdWyd7`moy!PEI{h1AbirB&i#s>|6E8jaSAE8S zWW9loyVvxZ%Jod_DtWJ42(l%~>Y!h?*YyzpmREHVP9IKoQ&{pR^+V(_qY!b9^TASr z?g=E#deKaSFkeA{?NS~jYx_K;{A^ld?!m30Nu$h*96&{hDIgnAYX}CAXrSAR?P#mi zn3DTbH`vs$Lzo~|2FW^&$*CUAx5`H9g+DUd1>it9)`nNDTql!7&SJJi zqavou)PdWmkXXPc{^qfFw#C_2GFwrR?2BFv@Y>_bIG2>~+>CH|cO7(i0WqYNg{YX` z^oGJ!p{g3d9LVX@v`o3!;w0H}>7`>PA!R7n)nhW1GT`)M1VYq^mOGNRrCBXLDh3X* zDv9}&(Q=hW$L6~k|Iwimal>CpHXn=FEZgo@ww!KLQxC^J*H^*5FqqOtC>!{cGWwgv zx$n8dxcM;AcxLi$#3tRNm#s%f#)mGUB#2X16Pun>N%_lDZM%&4gyh%*KNjo#+PO^C z9K{F0ZQST6aq4R>Y?^D}4{}Si?u4^MGJa2*s8{C`sChOd%i!VLo{z zN@rdf{bfho4#i*eFwP{w$gnB477RQx#U=HJ?{7}wTFNXXx$;RkjRapk@;3tPxuE8_ zd4XF+n{p>;O`wW(0zy4k>+=0kPIv+It8u8Z`=(FKr1Xm73qU|d8 z*pWfyT&wcp5P6@=a8v$Tp?KqRP2JWYN#3|k44@p$on>9R4n|eNLH9)s7mPOl3y{dW z8Vs7(;ojZDl&-Kyo1wc!>3|I0DNmd3a{v7&`|{8UBkS%5JUKgM@(3dPS`Gkkk<@9~ z4+yFb6%0=9D}(oZBF}6FW-o3ob|x;Ot`rn}62&M!?INxKRgR&gFOt2~JJ@XxYfcI$ zJ1&j&thQ++CnvW889x!z-9TiY!21 ziJt}IW6(6v07#Cij^QGdLYmD?A=kRkbSgJHPc1P$gPk*X$oQTGy=yFPb&<@hG4hV$ z^z4ihl>{B5w8UP<)@Vr(ZPf4u0*L91SYj6>d+9fz1RHM|zy5ccc=!19?BKir5$C)J z8)qL&pY@HX^z)D*R|O~~iI^P*$T*7+FAm1 zpd+mm6nqmz%RK=Z$v-8~%T&WMH_&X-n4TQY}03ScLxYuT-fqxznx z;j|(2LXQfzAc#bw&KGrv+a!{ft9}GS{0UXCLAZ|=l3)1gKAHS&WF+Jtyd|vJ!*G{< z;Z`%9Ay0LjGLwDAv9EKwkat`2RS&n53`Ne6ntzPYK7{|uvFu&Ol2@*Y3)1X=mmGqU zn`q8<|0WSNodVrUya`(~)1&Ph5;d_Q7xX=)^YdO|MfaU~kBH6`DohoObJVUMJkX`T zYdw464;6q(_y{4)@ZixaH1#ju0Q50Ah}=hSnt2#>feV=!wUFO4)D%Yy$q|!K6zh$7 zA5mP*9Yn?;zr*`P>X9kX>lkKb9pQFj+)7a%#!xS+gkBK-u|SuE*q$nQB4eM6thmJp zuR(m2j^uX0#u4YHwbfBTXc64drkPO`h>Xwg{L_IsN8Ef9?Y!aNTcFnMBlkF zO%Q)5dh4?FUa$74#mepc0f(&TGZE(BQYF`!UkaEO>G8mDQF4-QqJGO2e6vI?+&>mV z3`UX;D%GXRbT5-rv)hZvP*{iIT6!A%2noiA*wsyzdB(qKoc1P7B{Fy?SpFGH43mtn zEG8P98q$!kJJI9WmtNXjXaS5zkUCxk zQl)ej!VG91FE+#&8-?n&4{HrPIl|Y}8>^UdPFznUK%*}Yx&oIloqLbaEGX_&6gQIo zUIz<`PfbVnVcz-+lqw#EP(0qMsn?cOclsfwWpDFX|=`;89 z>E>pW?U-F^TCkF5X(HUMM6Ts_7LG#bz`~9QZ(}~%;m0RbV$|x9JRI6{C9}XR^^x5i z+LJQ{Olf8Li*DxHBH0D9i3M~54{p4*72hX6FCki+xWI-r%03F(ycLJ1@~g>gww`~s zpkz`rH_Y;5c9gcOxGRZ|0Xb82vuu>48);2)w8drVs6`ece=!Niayc8 zOCWc{?OT=*VNt}10#0Dkhb?W*zuY(l~Del26S#H*xtGU4OF3Sgy)UMxIgSXXF>)AvZ#Q@ne zTwF5j9m6h4z&eFZREoZZSH7s?pHqrs6L6!kX$=<5**>FgD(cRkl2tw#jYIm|+l^4e zp7;coFofFf)gAQ|I|`=`EFQDVnrc>h1{VuA_a~8WtWY|TrmQhN1}5O}jL4vVoxJTp zIaIlEs`5V2=JkWA4eR61Wx+pH@KU9;20#5nufrAgA3bE>yA(UN>C-nT$O2->U?*zG{$%!I zCvwPQFk1;@FQgU%7i-3+;nVW6}E~%5_f#;^MH3ol!6Ks!9&VY7sv6|eQEJFj)$0-sw?*KAzlZK7c z#xT-%te!)m^RO|6p{U;Q)W8hmhQ7g?ob^D~8|Vp)<#2~#IRdBc)`ETzs$skC05 z%G#N-8o6!qucIv$p#*Lj7h+E)*1K)63Yxn)wRE4QnTzHbNFr4ZCHJj!VwPe^kg!@+ zWo*qY6O#or>0c)r>M_;cW|asG4MHg!nb@WfD%xa44>a54;v@1_G*i;Zf3nWDB66CV zi4vy)E{Pnv6aQ3G%d_v8QC28(XW6Xt*mAHiKlE2Tf#W1o;>#3AIhOySWJH=*7f_!v z+?or_LWN8rp&hJQKbrn2yv>rEk>%hWZquHhHc%9AU@EhAWikQSxBOb!I}wC^UD6{Fg}A3EJ)Y1B{?} zeGLv@?LQxqu0GhzpPxr`o}>YtTS|$O6p!fMsjS<@tEi4OO54BjAlzFaEi}-iQgaN^ zsP|N^p-^#Qfa}{h9Knz4)8TdU$K>^E59!T^iqd9W>Eg7U_5ntspYEoAz_oaq)sIX22*J=UdUyDmhaV`oXhby52 z(OuFX$%|H}H53?>BygOj(ya^rk>;sfC-XIVt%6O{7-r<+{6q?FI-^0QQ*508P4yaY zEIg-XaPL=Dly=E(ecere8v_(so=YMXbcLKcw};My!jH8c_A zv%w1ann+MJ2@DC#R3=<)<(4IKrqQFmUScZj)-E;`+nV{s#8S@p_=Q`u1j&k(N~{8H zai#S71-Je!&+Dya#Tv)5jRG)mk+~_&0S1}NN%@f%iXyrE#U3L2RR+EJ!3aG!MeZor>b_D|Dqk(#o24a#C! z-7&J`2QDqc6?^`HLyL)FTOZkPqWy7YCep5UksK1D#4`v7PDH11;m_J?DHU0d=MZ^i z6CGd91%*%9nXrL9CzAPR8+Q&ISP=rxE;LK?B`?Bm7wE_v%`bbEij<<%V5!TqOz4oY zk5$1^Rs0M1u&?F}33xsxSZRy#^nOGJ{&v#<3^!vP-xsmBn~yasyPRa7sPBtWKeo>od^Q5;f(WgV zyQu@1e0YL6(H71*sG^S%4DyMh<4?O_mXZ9m%yz;(xKQ{qx@LzqsAYNPMc8U}B~@NK4E zRdkkk*F!()zh+frMB9^ZrbcJ0!egus3n&j~N!b!a>P{lkvi^1$khks&*&G0LKAc%j zx*e$OTvW}tZP+!9?9zi~YvB$Ut4cK?-RAi-#y0$Gf|QRWn&5x_Jo0)y?)y#)FZlma z|csU51?oe_Q*4^H*M!MZQlL@~7(d6mgQO zP58w54~SX(ZA9-33SJgj)z1-}4JT$7Akyx>D=43~gB)u753g;MFlM!<+Sj&i*&H$|e3$laKFL=~- z*-1ZT1GC39(BA78WjGBlN4s^1cyhl$&^o}-VB_fk#O=~(+YSzNCjEHu@qcW*KVK$h z66{K7hmg*BuV&fImG120&$Jq-Tbi%3Zw7(xVkk~s#djaoRcsX@tyff%kg4LTu|W~i zai-%=i-2_eEiv{Md`o$hz+%|k$ltc4ohZhOvxs*@)IWZYP8Bfr$%4_{^3>Y2)mw5~ z9l*U_gcq(OF6_`oXf;sIB|v#=mXkz zdi6Cp(fUaCOu2&;_|Je#AR?LP zgQmg5NlwMJ1AYeO_;d^+C7y{qPk_e2o2sMwXJZi|!Z+Eh>*~=T7VI~{{`C1U43I25 z4O$g?RBKT~BzQ#s)mJh~eW6(x;}MP>Wy6wf{qnWKlT%Qg@l-N_Bnv-74K zI158pY(zrG&m6n>iFtfVu9Yo%+Zul%G*Pj0%jss#%PBu0GtugJf1jsBoF35Txa>R8 zCD7c>IH$UwprA8q~Nf=RhHQ$@iM4e+SQXtYkrdrl-UaAGr z+PkrxQ20;9$J0p~@T}JOA$*3ati1<|{|;&~wP_sFqd}B>4c@+q)M@)2;nJy;K&hkJ z{*SvZDH#Vd;g#&?@gsm+8}v1)@Xb*vsu$pVEXUU{N-h5SHUF}S#z&ctab zTo`}ABc8uL1nEb>R(Np)JNzW0iu)^2tW|7gZe)zA#V4t0?0V?V&WyDNk?3;I$ROt0 zoIp9T-OIDNJKsjm0P*0^O<4;mtlppAi6%I+CboW0RZ0QK`Y?*&!BRqKKX-z}=QtBy zBd0~XzNcx8NrdejNV*2i+15gXE@_v=lvXd&KNs8tXXYJ?+@AU~dVO~ur4Kr}wq&gj zk8APwHjeE))xO2?ph#(t&oBvH3a1lhQVt{e8N}A%HC7kJH@)S2_;PaOX3Y31slZ+m zdg2L}2a0oqji?foQLOlix`n*#tkKv=O;Uk0${S}Tae`{{CR4;$SmE5Ru6mrem=3j^ zby>Lxc?faBs)hWl06N0`LHCKiU~k|6q_c(aHu)XQeP)8a9MLMc9%0kQ(}6g6M~7lp z)ZNFy9j6cdxuCwc)bChATs85U5UPc;i!B2h(8%I~3GwBz_H!zdJx~VD(^edJ2wi7; z1~}!BKbI7pKR^PbN)*+||2GVO)wQ+wqoFG22BtK!KicojOYJ15(+Gg!rze4`_J1;0 z#($C2a#2H$boeFdI{&+ShY?I6Aw@SM3qteBT{p*@JAat6y#6eDmQXzd$KaOAk5p8g zP;|P7=^g*32-Em9Ut|7~*McIB+U*aIa9hOhOFkmU2wL(kk9*Cj)TMXZ*y}VoEWbi& zE?@7xoS>SX0j(U{zmW7Lz`rG&k@i2zHlF%A=H}DoUphR-C?3X8#>xmlyVhW_TIq-c z+ZL`r3o)Q?TS%pD$qS^Sk)Wj;o0Nj2p6F>YY`&`4@%8JGMcB#4EUEXi3qt|QP;ocd zgUZbE0-U+b)~5gLWhlm5>6e+sTh*lqN?1BbnCfz+H3ZrsMHi|mDll>8Fp{kb&csu5 z_Rus@F!HGMO{?~)&t$_CDXR6Y?aWLq@UV2NC37X2( z7b2<4Sz3U~TK*#!6|M2l2+#P#07*-eU0p$E=5qsTS>v045EQx^1piME0;U0hIn{xH zmU9d>djU~XUGQ+LGP5GH$)Vz^zm=7Uh=(_a2j`X8*O>eH*oc_>dpBm*;K}zd4-v}# zw=q?yk$s*?4-b-&Oi9j3%!*1;N>R-BFs%%viv&yrUa*hRRcO#uQcU*``xA;$k<1Sd zsMe^9F;B3IZ9tNNET?-AnYkGM%}vH|17S?UoS`F^k#t=~E}@#EuZE?9p=ZT^!PVz- zVgP2TrY5klCoiki%RJsFytF4Tu(mL-u%oiJQZGDERMb*dz*3>U1WirR!WI}{E@|qE zC*By48vz&?5HTJ$@g6Xs@gQsXKG;GK)a(DB`uD->4j^6>$hd2ej2}Q4ANh-goqL=p zh13K#m#+L%Sd`4FFeY zU;?0>pDf5M$T}@h)VTa2>YpE~nPikYL$ptZNnDWcwK52S< z+NotLx}+p!wI3#$iqL@U`iKS3En?y<0enwo895Yz-_z(7btK7xNUY#whz%V@Tkeb? z^<*)D5lE6CWMnRl@K-cd*J`e&tTFhT5oF7pXA*t`xiX!Ibi+YrUGDqGQ>PMUCA7(a z9*vW_HIKX(pW`og)8^8iDGJroj$W4PaA86w8U2m`d}N@Nx*K7zjF_%ZNh#KZ(Z*i_ z>5EN6NL#RT?J*MSRzq#KgiIGRPw!t&7>}&s3NY$~gn_n{{CLn89hQzriQ^DgY4>O7 z`Q78ZD;nb3$-WY(WWcm81g7bi0`{9&-DP_jF{t5hDqQGR-~$Z7Nr{hHedYk*=7O0fo>>4LeK48GtZ~RuUjZsM8q{puw*_m04j7tV~wDE)nU>#CO zqM>`Ap}$?A8gOdykU|?~3~VgCsxSgICOU&a=n0@4{&Zi78LS|-tkk}P_hSL%fp)Pn z@n{hN382s~*6M?)c>`{+-ox$0FpT~~qlB)ze?z(w?6(ZwE$lz5QI#=UJ*z$*3160>A4?>aD--a2GBOJEAnAVCYpNeb z-syNei}wP4K`U3e4B~pAWa4n2QMPC0uF`lenS7g;kA&Ae6r*4%fh@}@8mWmOA>b+?!(5F`ULvG?aaP*K7+1lHvRztIwO@my#|Y(26$IaX-ZjRub_cn ziKmJ-TeH8<;lD+s3dYLBNQg$Dj62gvDOYQzqHIW9mJPZK^D2TSF;9Baj8QUJbWkdy z)_tXl{P1^Byo0`c6`QMppA(5-h|HO85sAmxwp;Gx;G2aCB_uA81OvnEbnH0Ybi8!u z|J=$Rp5TiXkk37qTPP<>6)2Ap=}^n{08zs_`7I(YE4NixrDIsRXv`&+)r2Pwr@54u zMKmM}V;3|}S7!d*!%Af-sTyVd7rGMC@mqtYj4aK5siP0gq?|_8Sp*0Pey!7Oj@@8%afG%`=|UisNFR?BI`W`E(&&L}sXp z7IN{P<-N}3xguD3;Kt<^$_4CzJVEK)=TgebJ+;(Z%G>AT=KcKU6U~5?yOI!R5wFChWW$O{8B{uUZ~EdvCe#hTKjt*rO%8p_HtJJ1jaW!WQCq?5`IFJnRzOQ8{X zarV15Yr^Q7Fx!XPCf?58q~6{p*6dN1Tr_G^-LXKoC%x(dOAYchB=BP3L1i6kbFWU7 z#AM_B#1Il%yvWBkc%b5b1-aWFv^L%*bPi0 zUB;!0)X8-*M(ayIMqh?w6V3v@4qJ?b(!9$Qh1v@Ef~9ur3eyDjoq;SaKI*k|v{GyqMUqVnj!!(Mg=aoIsie zonk%S0_k_s^|VCeshfjl%w)QFyC>O@*EffvWq&cjgO#qNgaN{kXY9l0U8O@SA3J9q z`!uZD$DKHJv=^U}`{ccKQLi`?3>HF)*JQ@#`q<*%3xY;sG!QUnzYma;?bk>oJ8;K}(*^*#+UDm}X!Ik`MqF$PKZ-+i|I%Iov8hc1G-67sM@|7D@%Ls`=U|{RK#kq#b zz92+N?%8cgkcnIJ__n3k%f%COb4Xg?Me$9;M$-^@*}Oxu#M=>%4AJgtC~*-oao0kP6XrLDm|m6naSJKHB#FeSUKiiOJ@{U4X2ZVJyGc2;Uas1-ls-`M3Fn7C9&p$>yqH%ZxfI(+4R2K=-jEbA_@BczyZ( zUV0QfY)TIIR8rII%;w%u==22XM~^tC2gvbQQg&3_B>LFx>n7FH1BLsU`tGtoi(K(f zo%{+R^L(c@)Dcm1DDLJ@W4eI#nm+|d@J?lui5aJp&vcA zzf!4+cN3*)^8L}-?%krh6RR0(%IFx+xhHm>oH%wjY)ZIDe$n4c1|w%+S~x`I)^*J+ z;VZI)3nX&<;)z7u?$bzA(UclTQ^+~#uuAU7#=0CaCQ?TmjpJY0Gr+r@qCno~UL$8> zr|1ke*=wznmu8MO{)^VFQH1>PnWN-Ov1bOXq0ICQhM>l~u??FdJ9)->7-uIM?@UhY zaTsTVOyu2Iv~eW<$Y%UU;#q6l8E0okTj3!$FT6)S*mshw%>9NubMbLweEvU?!IS9b z&70FN-^xs1U0%qNk$l$hVqc}>hE)nRVXcZmzo_AwnqcW2(%hssY>VJher_RY;kGb$ zV~&!tEbF^VUxDl9HF=}8WZEqTM4(F)NIedvnDzjq(=My(Sq=n?%WiSOoImXhQu}#d}b3d_nUWV$+y`bVnM; zID0dQ$_TZgO?&|wj&3Kc7_*%)vS=aBZ09&z#1L!Nj&(ekeVOe7?{ovZ98)F%%7)ME zkffkv7cB^uFXlr)r=apBv2`#k37U|0%O;iY(6K&}3?(TU4!@s}4UTD|DoS*|m5MlF ziccaS>_nF7NM<I|Pgh`Hk)(1q-Dsv$N}hXP_#2^FJRKH~lYy+~W^vRpK$>b6DN27#~I zget^+wRu%FYpqXG%)Se#X9Td`@Z1d$N_%dEoq2t%&+U%YpuFkSuGOY@ZE-qfYJ~<{ z2!}GWLnwW4bc>}C&fPsEYw}t^@eX29TsH)zy5$i7!&&#-0cQH?+HRZK@CGyGa9a^k zp>n$6@I@mLD%=mG?}bP^as#(_-t*XvzN9~D?R9!t3?ENNjcvm2I|e&Sn6!`8h2P(2 z%%7GNdUttK7pmk}7l$PCLP4vf`8PxBuhne)5%a%%gRGl4dZ|@;ZC#Lj z;rc&0(8>ON9tW0e2hcg2If-J6b4$zlg)F^w($y(7Mz5X;^A|`vFm&efe9hPc5lAz3 z3Wqn7gQJ?ay0w9V34mbi0ENK&Z?SBn=w>*|IbOI+eirz^bzGEmY;BOm*}>O>hJK_`-u!QD`N^iWw*S1=H^?4u1NQH-pf5SBMve^C2)~ z{NATM$vb09bCNf`UGmDxE=t>Q-p-A4x$x7L>*~09QlXinA8Uz3;#Aiq@^c@F&#t($ zU6vRpd!Hmw8FW4uo>^f=x29GzP#HH+=}&o}p44Yo-1!d2$tg$9{eO)*=I*M}3qykaMwXAwc1D09sh-Q*>7b_~=-{p+8S;s}qd~>YFrqryB-ZqmI z2d|geU|X_wbM`j84u)C0wH0~vg<&v!!TW!QTr*ez!eI@*tH*UE0E75MFvQP!2k$I$ z%*#=HV(^|;!nrB+JiP4wJb7hwY;lKZ2}O+_b*c$0Z@LH>aL(Cldh5^coSWYkWzwZ% zng0Rgc9Hh#p$3KF6nLENT3c)z*?ER!OR~qZeACUc*FGA-q9l{FL~(72^=d^+l&oD@ zl2??JKvE_n&Y?J~;S4<&Qz{l+acN!4B0)%7rln&+Kyo&x=_V4l3{A02EZFZ)E{2=rkuf#+Waf{K zn|Rm!=od=!IZ-ghZ9!BeA*E%rST#w!37ta-^`R-dA%?=?@c!4EA`RqZ(^zX6?dx2T zaKF&B)Ii>!IZghdd9r_SbC5&MzdjTSp@qdHilbzFHioQ#YGt>uJ{BPH#w+`=mj7(- zRJ1(SQ=)+d!^AmZ2k+%IT_WeY?)GfUt9SvK8LVR@8^|!Nbei$blTS}xIA-2Wkij$N z{!d$_2JUUqH}rD)*WdrMe|h(BVrZF-fkDq6|M=Ov-+cD&2hSdV5JS@%IMc`QpTF_m zufO#t6(l`-{P@|U@5~`d^EW;MF5h_e=tFY-OrkA_6j9x_#BKaq;BAq7Jl;i~2KUJ4 z=o)#Yoj+j(Z06(-&fS6+n<07BK6(mXJVrksTG+qc_St3f`L&iadD+YeTflWkP-GQ@ zLEU6EdWC4$yUFKmZA9+xIPLiOo|VdQ-2T`5*Bj1nsPt_^rT>}TJbBa^AZJd7&i0{u zi*F@DZzMwT>FLCDj66BkQ7}v$yda4BwngVrpkg)46li-cN4sz~XYMf_i~$2H>A_g( z)Xpt0uOv`38beE>ZeShhIIBIx26BL6AX!COOEG2215xxLTWXj?Wa|2*!acW>&e3uT ztD-JzG2}I)BppLFbKzz%6=vm!SVf|bxoZX^cJ<_Wp7TA@zj0M6j(fG%K>I1Kt9m66v^fGSy2y9Gd~yhU0c{8c4jU4o zNa{V*WYT+yCr{74LatnIqeyOLNOq&fK^XTp_n~R5=g6aYJFKO){U7y@Hgwx%mWMRXg@8nNIR~v@O-;MNkT7k3z zRC|m}0TVGJcpAEL9^Pfuv^%ssYd#(B>9zvfI>st%e+Z})w-h#J|91GnF<86Hu2k|D zi(R%9&I;r;O|dyI_Ox1olxCV5<3ScDF5CSQdmWBkI%@^+Zcfn*z_P9H{iP{_UOz*A zJF!UKyMKZVbzCFwg>R4#-bxVVwXZPO{**sOg0a*4;pqEEQ=^Og;LRaNOp^R;tiKkQ zLzQhM|2lta|1ZZUj=x-=?EiLR^*C9Zn%)25)QMva9C}vY&`L?`Uzx3XHJ62>Tr+!xJ6Q7G-a*vfrCzWGqIm-fJcQHo=kKys6d0^cL$I zW544LgERa8KL3-(m*b87`%CGDAOM|7++x2e_RGcuaA31^*)XY>%B*Lm5cjK+`<5$zNZkTKvaM!Y6VABwseUFGMm)rWhT`-2yI{DUW;y8_=*9o4UgQyq9i`VJLG$- zqa~u_rJ_Z3&&<%x%@ORf^2BDv9c&1)DL`Ce1aC_+p%1XB~H6EpFZ`J^x(UzlBq&nCz(8@g@_J9!BLInB+&E<8L464d`Pz7B>&M+#?bIC;2*^pHMvY>-bkqsfO z;9VKS2_w`W9etiiN#qjSST%OUtpm<~K1mTO>8j5<33D@+x?{?kDk`$Mv5TYT3zj)b zWp)>>Ls$(dn!+vKMR((KFIZTV3Jdf(i?t||y*=b+D6k`2^mkYi56C8eb*ghexBAD; z3xJ~$u2hqpuH~?<>r7!F8jjuqreZ{z3jo7yNGDXSz_>aTw_d$Os%a!W$GY30--Jkj zWJrXtqHwO`L$&RO?9B_n_<=w^Y3*tV65(d>{6YK4gTPym$M`(}L6`S=fr;SB$LG4f zJN4B^4P|bTUwHjq8HmKcV8cyUh*Wk)?UF6P~n|j?cu9BfQai| zGBK0VH!3&WdXA4w3cmt+il9qua2&G{;xt32k8Gw8@Zf;YL^LG(ijbOB+3RJ?Uj%^NdB;LcHSH&!bK;?6s zr~OxZJnheqlxx39P{$mtl*xzT)rTdHDR^Tl@jakALa zb7(LwaI^wqRW!ZgFa}u8U?1z!a?Gx;px8cC?f_GtParb!5|tb?V+vf z!<#TeFwU($>?)AlYdqoCAxqCYn2>t4n1s*~HZwZLp|ob{(6GC^TV1u$gQ}4~ZyxCd zUhGV%lpAZJ{Lmoz=v1d))3VE{y7ldY{RxVY5VVD4HRKFOHI;V#*3gNNm&x~=`^oz=E#qlTM|82$OBX294t4sb1C~kho8-lYLGt9-1;44X`cPD4 zsUlzw+UHP*p$%&-r1 z5YnQoka$y9HE`HF5gh>*Cw6ldIg+%9iGNJ3RM6^`O(kaOnPKlO*{Tw6>+m0}- z9J@@X+-|_nHoLQ=`L8LyNkahmeUcuTIfR&=HBHj{Ga(q_z`z>a*ezAnAchc=6 z0(UJQdFH`jd(}UOPr@~P0{J7mAvv0F7VXh5-bI6Z zJ{c@c^7#olV%hg3fDbR>^_!DbIdO1s9AJ!WPd;Vj-f_BD_-a!^B#ML*r+HlW3~;FSB*4bI_pqnD%sHZN3iJ64>qh*V`%v9e z6-I$;>EC)rP4K2WD(OBP?sevL12$>r7Q2Nswq5V>!^Ha>L!h4U7P*HMn>lQEj4$ac~}owBP_2f*l8)lX&<9HX>H!I`1+C=chk9ay?tAX@GInZxOx(l zChER$h`e24+7ETOhnr8@FOsL{+Rpj|7FC&uE8SJXlxW*zd*mIoU~lp$zKxx&-rMLA z8i{yqceE|`7ez*)ty-w^GcN%36#ZxeAPi4pPBulw<2R#=YKlpQO&szW=FE&Cd(g9d(DoR(x3#Dyh#N>bO z_R~dNIAlL?&<@SCT6bn@WUy4?Kz%zyC0-jia)8+j-6T-;O+u^^M-JZ{M3j~x`K}aZ zXdHl~+!tsx)zIil7xff|7qJ*`bTEKE%oj9O(pVHI+coTeFMZP}pqfjzz7<;ioC`QJIj|#8<12x(ZMYG)rc%1DVYmeNv@w);42lWg? zT4N(8=r;ofQY1AHplO06g$rC3f_6piDyJ1ylDfTXk^kNqJ|w=hC!g=!OPYm|lgQz4 z-kc$+)QldJqNoQkFj5prbL=S-$*B>Cf{Rj+Bk9ERXV0J22)LtdOLn569XF5_smq}i zRkH&y-9~xdm*OzK|0r0~?Z5eMY~Z(id_I+|gWjnD=IraHCF86|y1O#deGAX)1hDT8 zy0@d8iL9F8 zU&+S5GDevT-O_!rD|?inf&ClZ?}4eWR4dZ6YfH|Pp9mL#N01wl(d{oF%hj9b&l327 z91~8&Kl+T5wl=N!W64{|cD9<@5Jpo8y=;2)0ZmtaP1qJB1t9OrmXi<_(uBCAbaF!^ zTOsj=Kmp_z8dm--n~nzrlYbRiDh|MZnlzm=!CK88;RJhgIS7bIxftp?U5N50Hq2ry z`hg#8fh@t~FJyk<`XlAO6p(b`%kf2SQ;B@LGk^UU%mucjy- zDh@!_IOmZwm?Q~*9%1RxTHlz0^1Ddo&fC;JyabcVWel7)I;bIvKd2- z)Hc{1lpf;tPiZi#)(fgHKmrRw2c=TCBbkO?ds+0iV3_Y!*GkWZIJKRZNeE_9&~!DO z%p%uD6jA|TIgr5wM}1}~>JSRHili{-#Y>h{l<+Qv;tPS4(k-A1@HE5`AimJ~*9E4_ z2!T$@B<0ZXlA()cBhXrcgpy9hASi3fHnq@Pn8phao$3#l=S3baS83PFJNmnK^cM-a z>Dy-4h`XHMtN(tl-meW04NEE~FeX*Kk2d9*(*Mc&@bKEdPqFw%%zv1eulKtYCFkP4 z3;0;EA9wM9jiSJZqR1JC2qm&KhrI8LRg5D!;>=vwKThNMGZbucO<yNxc0LUHcE8{V1O`d&w1Pp;+9uQFt0@22Xs_y1XK|obk_}|9UkE2{jD2n z&5undK3dLlKPCd0TeO+S7}%tcEIOkWhl(Ar5VtL<3KQQL1N|6)0Mw2X1GDvgEw2Vz)S9SZ`@MFTwt5%1F@;-R_WX01(?FC~+l$=FB^p zQ(&-Os0Z`cp~bMCxsyT4BJ&knKL{2Ru?rar6;~=*a?eP&XzD`C;;{wo`qUGZvtBe? z(n;&hQPu@Q6)lKsmArkMd>%_}hu)kq7du8uc|swN)f-yCl<-o~K`an)gnTVYg=?DOu3c~57_M#6Tl!%7wt4f6@H_Jhx5YyPAO2m_d!HBW> zR03<&!wNYjKMhD2TL2hU$H$A@K4kqex@5YS98y1%i5u;a94UD0q3o&_Y7sQuR^gFi zT_?Kd(dFxkEn?~)X~fR0keCH)Mq@$O5a}>zAtZXuY`Zdr65E6+d@ zHDQ}CHeqs&oyz#y~T3b6mclI3t%(4IT>-64w z?|zvqr`)fTHgeWyW{_I|ZP<^5s6IRd#J7v&x?~M*cgTej!i?;uAUU37FWE}&Bze=J z6}FcO+hz^YT1EB_-h+(3hXRo=zHjN?tvqw{5^8$9>`9o}D|TR%zye#g#`{>O(it6l z!r^vA36c=A8^IERi6S%=jfcZ(o*jl$M26|+=&%|R5eyA-`^FpV_r(=b zw!5K~Df@6df++=P;t-*uD|#q9mI5?eC|i2#?HP^zdC!OtxB2(-&pXp>J64D*HiZh< z+59+v1Ia}au%e<%$-ah&6}Rw^0Cl}6vcbmn4jTluz<_3u+e-6EpK%pwCGz5VFa0%^ zy?K6;tH^o=%qMpo5$8l{78YCp^8^hNS*d1W@_U6wP5#9ftmUIVS- zKoVXaiMrIzsg3PKl3m#)M?}hTA(Hz5M?kp0p&SYYJVL^Nh@)AvKZt}fNSX7v9Ot}A z(y(C2QhkM~;)iN=yuxOv^R`3Q$)&rNW#bMDz@_ULIjc3STdTD{Zl*aMmAnw!bb{v< z#eK;*1_b=0Ht#8T7mg~F9m*3#UI;pNqHuJ*tkHR#efV!8+(|(^ zTe?i~RvzBsJ5l-Pzz9h4Zdw;<+T}9ELHVQM^HpI8sm0fOD5tN`a-)LiB zIV>@Dr_%~7O3FEJDpHWThD-v0+w!=r%H-xva+Ay3z;l^GTdISX8ZxneM~+JoMg?Rk zSwJFMcDEB0NW90tp3Rl(S21BW% z=ZzbZELQw@G)GYEUao6y9DU91Z5?U8NPaprJlTSdX`SqEk6p<{vy-=A1cf!Hmme>^Z=iTN@jQ7?Kun}Uah1sy zx3poLjZRX7-C(dghz|otgH+5UcnE+C@^B>T`TOsF{N|sZad8V-z8vW+ew1D1iaz*P z17VQWz%bBMbAwnx5lFQ-;4QW-6u*FxQ^4I*yaaF}Ha32sLt6n;0*2it6-|KWo6BMrfjGmz$lc>`lM-V$ei)jH{;Dwm@odRJCdNdxU8bG!3b z8*|~PkKmdmpz?qTg!VZ;)v{Su)tsfm4E0j0j!|Ams=L;8F?36`4H&5-BRqvgJdQJ1 zvs4dA6|lXXr2J;2CEtT}%0u+ajZ+adeB7szAE6%Zno%VtyT zEtw4YwCA$U!k0~^FF!1wEwLOf&hM#guPh4IN&8kF2wRkZSGH!?-ZM~L`vvo=k4ns) zBrbQ76#5awGtAcWT>$BzW(%@bpg-CUj1q?g85TBSfN=t{q6t5Su|`Im&`@Jk5xcG- z$4hZWr*QYt@HgY|Ba5-g+R+#kUPIV=8WypO)@b}iGKdC31MbAg`~d3Tj+km5?Li}S zOoBrF`_?d}0i4}qH4B27m@^?XiP0=V4X_yDxROF025Yj14SVNMA-ID|g~?gUWcQtP zx!a%bRJ!?f!yv1q>~`)Fm0odW0*>EG;HF8q-7&i*sw;yr&DaE8b6*~X+oR*osO3(G zR42$@I(up$V{36g5`C^rE=;a{fwrTVmJ26(e+_AE;#5kJJ6#aZ>fj=;-p1GW_r99` zKLG3TNX#Tc(?EJvSRvVQ!d|{^0PgVdb*PSU#pF($i*99R|dnARM*JgYsuVe zdtY>^@I5#TY7$O9`M~$mR#djX4S8B7^tz_h)SBMC>c^6_9Ka;P;#hW2YqOaI)e(HS z2RPj>T!%&M=p(Dh%?2o0+Xl*UyPUtj>QY;V52D9O0OtY+X-S%{1xSRKYr`T*_V}X2%;MDI z$rB_dOx9-Oo&12wbh3n`!saPbbA%?Du?y$qr>6t;#pk4!rRFHuD){B+P5xjiE(#M* z%giZBErLj-ZdTNt!6mN%1;wd3X?n$}1qwjf{9?U=#F7jUck_1h?<_9L3I&xpnRz8v z3MrYziAg!Bw&4b5Mn=3`Fx|>P3>E^?L8&RJX_?sNe;tw z7phtz%wT{zoNKa%2j65tKZ(hq&dQTFdPqzb@)Mt2>81+t&;lRdLE<4zUM>WueDYq; z&6E6ukR8qrO6fpVlP`LxOm?-?r|Kvu!HieZoP5C}i->R-6j8c)ucrW`FoxzKn~8YgxkeL`DwQTL z^zj*79z@Gjz3vf{&-*$jT0bH9HR=e4vJ+-Xhk4t1LIB~!jy-YuWjUyx`qE4iUNg`M)1QYn&Gg)rw3co0GfcZPyZ7Gn^PO|M`jzTs zw8;R4k zWv@(Slxtfpcu}pFsZMC>Lo&6*HPz?x1Rrk*V70zQ7BS*>efLIXTDRekTebL;M!$}J zZEG*_%y^I627X)PCLYZ%Ym5qT17eyG11Cz!3k6o8tbx@8Qk<^l#v5|ASn&oQY~0>5 z`z>7$IISJc`WFvEbh=enhrgk=P;Pn9+$Bj4u3b`v5w1dvIE}N49(9UN&1fCEFfeJeSX; z=hH>zhWpc9*@KaLcrZd0^#fDW zx^odRJK37J7tFS@L<4?q*3~*aOxnhA+%eiFlUApR|EkS_H*L(pf7tr)+N2d% z9ct{iTX4f+QLbJeH$x^>0DOC4SrPCwIS>ZRq6WaHQ<-79ZbDS)lc6s zcPD8~uamy%;!D=5EvdY&HA|O0A*_0O6>ClKw0j`+e`eMvB@KGy#;Sdgo`*Dfh--HvW@7hl;4n*w8 zclF?-E)#yy<)o3-xg%mC4ol5JbGEzfob$(GD;7 z`0#p<1J`?|kb2yJNUxV(bz?qNkVH9Kv^ytyBj&ZT5L3l71#xY+e$s2f_1=NYeFFK? zjjR2dt+JwoXZyP4z09PttVnzdg>>-+ACY|WK7QHPCXa!BvpjyKf4e+>yj6=;%|UZXNmTDGHls@-ck4 zGXiytxFwm;_v-te1_9x{(@f!@1E3VV%2~k^@R6(uHhlNi3hiJEKOZ z6K?nuJ$O3dk)!%xp*UNrcx}1(AxDdJc!km>tt&Jy_huJh`IGJ|7FgAr;zU3(wnhvu6^XRNcQ)zc)1lafLDj4M(>(buPW}LFuL40pwQpPklEJ)!KDM=I< zZci;dlKcInXA_nI7mf(BH%`pWDO;&2_x&pEC-*06MpW{}g!uzD*_QzYtpWc^-Vd=b z9j!tv?dN*53eFn`^!LKKcdDy^<${^%tevg4+6cJtl$l;5{`$l=dHm^94f2>c)T&i9 zga;+rh>?SaveAx*HCbh<;=%(=jwNSs`tXoqQdhP2k7D*d<|-w_Oj7A-*e{&GZ7%5Z zvpcJc`Tr5~W4L&1JDq|EW)5rd!7(p$2+gy0)!I3za^rs+fAx_$KO5NM;~%=D9yz~t z+~&je=(cOxtenFcvh`n*=@vKS+X0Uoc%0Q%-EQ1O6jo6ou$3U8YBoiv4CW%X;_O;vq_PVsBdhane)wezH{cx{P6RI?|!@R?2m0c3xkM)*vFJ2LK}^76wJU7P2pn% zvcXv}LY@gi7!ee``1`Mo#PuK{z@Ecd=%IazLZS!5uaQfQP6M!qqB#ZNCg=w~k_I^R zP;L;G+k`@j-5H|OU?eOfGzNrWIUxf_M0W$9<7ANh;RD<|S?WH9*sJsAs4SWt=n-TB z?aQ5R@1B;C5dqbKJ;8M9a3J0FhzTTWQUjZ@%*SM?3h(ZAZWJxdsCrFZ$DlyFEj-nXY zzjQ3h<19BGgUpec%Tf|N;ToR@0cQG|6$oxFK^zue;~)Y@==ezxjktgj_9rG7$G!`& zp9_~1%5@YHiry9+jU1L9%(gZTe7zRbXf)(r9!C=g5s|wy*QfV2K%!AeP4? zzL=)Tvf*|>rzmS0Ruua_imVLGLJ~~YhHi*eIUnd@dTceyNDBSDS)|XmuB}K+C;hP1 zOt0N|;}RRpOji11Z=)Fh{vA+!-}<1r!RCqWUZ|80{sNljX@eFk{4t(bUNCW77}7XG zApP~m)iiwlV!HO)WlK&o>in`zOprIuf78{A>nmdfIgSY6+m$z+?B9|-m3hbyYgfGV z6Kp&dokRdC`ly-z2((&Y-yS^N1^4@R?exXk>kX5&-*82LbH6^+5PVq#M* zk5_-F8|j13t|VE-s>0+Sn`VvbhAMl62y5vJ3129A##5CSedFlDF`*_HL@_eXj+-|v zwrPb)$X_CIh7ezrgb=;2kf!;cYE!Avml7;d6q~y!q@XL#GS)lnC}Ld_5`d~J1V@gp z?Z?Ab5ilBcKt%+Nw^PPiM@FsuiK@T20sMR2i{qrDG`xF3gk}JTB%X=?9{&O!x9Y{j z|8XJDLw4muBPYq)o>mIzkza~NtKR@c{V$Fd$Q;;QXc+wPRa2JKZ5eqjI%m$xr?s5@ z6!hT?@ppHEz|+ju^{~tS0N8F9wmZSrP<(*)b!L18^0k#WU2(Iw212QWSmP11yGpFF zkhMb-d~AY)^m+Tr8XFUli^1)-c9=eEuP4lUCm4zwQmnPFGY@6C!&BPcIkGNqsnv5L z%lqvJVuBK)e-6DEiEdylYoRXmSQijw5yUhFVlx?^e_J)1OzH_CIBtQYY!I0f%>ZoV`{}Y#T)smeZ2Bu0#Hu|AbELrnbR$qKbl& zHa||XZ7n5EnoXKiZJBKB*?6hFYj)T9p+X3#xF8VlE^y#PsXzjSXoL^}g>v9WASw_D zRS0N%tW*ierBW*av%601q;}K;u%~_deeb>R&AfTD&;Me(eB1VN!x4w5Dk+4qn9(yT z!5B%Yw4&-rnAMbIMkm;^11POZvd(C7OqUcnfEFY@fi+#wNs7q&E4}Ue%}AQGxDkTa znaf;c)RDCrwDGEFp|qeUR-P%dVbg7vB!qbq5*0Ni=sHnDvw}wQ0udoKnkF()9S(;F z1%qgCGtsBB6 zoM0^>B$HSrny#?2t@I}1(@0YEcRNt_v9g7Et{X)aL>6NtZ7cwiG^7fWM&cp(u;O9( z$X?ZK`UjAjk(toYpduS8LX$i{)$8g~&R`Gx#h1e875m@=d+oM*FOJv4S51}hgr~LCiU2G2#{WY8oh8MR zhOH$nS_RzX%QxhU+sMx^*?i2nXgnk9Qi^b@s;EBq^x<%1*q!5ALJ+s1Cs%gMc4fmK z^$m2Q1UsBQm84bQf}qNppRPGSxo^`KSaV*da?RC}tzYY?QWq}Usp%w5ms`t9dOXOe zKNQQR$+mS=kx5=xZl(ycNn&x}*q&PY*`Dh=I*jtTA;eD(1o;VWtQ$=wh>QeeBtmAl zxRE3y^Vs-^AI2Va!DH@<`!h1zLP;iZY%oD+>ww^1r;|1O9Rxb}%|nOhY}aITh&vpK z7EP1yR4^O8<@tIC+^nyvH)}9^!0MAY7DP4)Alz27OUba)Y~W1Id5@w>bCN71@kZJ1 zL!;x7Bavu$7*B);hPhrhJ8#XkS#&dWC3By=dEY|mC5x^Sb~VabFZ#Prx48=CrgIOzyVK@} zOTkv!-SN{dsO&7WvzQ}{uZUx?g_0|SQaxi6GYe;ro(>)~wwBlOGuw!A<$!r$bKj|Uoa#^r(6yjJb^ zR5N{ikjurTbf{-XcH$bp9BeY*J~CpjzIz8jIn@j!{1jaqd&pKCPe6Kntq4p<_!o<~ zwm|Px6go&JU7Wm7j6-{;#3I-tMJJ#b2Ixcu?L8SRgj3~IY@2eX0FzF*I#UI|Cf|d~ zX+L0mt`L1$YNyT_zN82S&Y3T0G$s^GwJZhbmH3ZEd;@SLJ_chm&q6e|`YOK*I!`sh z3)78-idmMPD-va$dCx+>)B*TdHM}7P;X9$+=J*FMsqF>s5si^*c$~W}wo811xIki3 zaehu|Noss%Zb5!giOxi^4C%C@{9J|N%nH5S{Ib+y1&EA7QDRcm=Omg17sf{p9_ z8P${(A|fJmojqKgy>$a3jf|}nGSd`tGK)(zG!-(774lM3Q&Lm(CVymLsS6#Df%1p2Sow zmRcCEk)xv!otv1RnH-;=l$DxX6012mkX?Rr1ambT*y)omaYjKH+FU>Q!SJkN_rY_N|qG%zqTF;M`i)2qzQVQ`eHVmFH2w_5S^jyLij&HhY| zO7;e-0hw7;npcuqTvDu8oWWqedPh3nm$%kif8X%Viw!o8H2}6dKppD=fGBvJ0UH41|Dyq;0g#Urs3Opf z#3N|7@aMv!S^g$3nT4^HwF?dNx-EDCg;KF@+b|H_`4v}apj5;ZlF2ZTp-ZN8Ylgr! z0@^w$gry@vQgR9O<8zcPHvtM%)A9J;yQh0BzSU#!^}$e$G=WR;-I5SyaMnj~&Kru$ zDWq__NqXpoC`18c&>e2zXlX(p-^~4*-tw(-3GzXup$Dbv1HS7C>$&9;Q+rL_$lL&r zFcW&Ko6sBuPPy0>tR8Ip<5j`0{A;&I$Pglodp%POSPXNS>cqa3--dy z?1^bhcYC_PbH9K?Z*7y{^~cX=aM}m-;4zM#0%#b_Z!QsR3nQ7MZ4fjy5Tc(4W(Cs% z*$5^W3Q^M$%js?bSAPv;Xf`pa2D45n$JnlAb<_FeZiWTdn^?*}3=zEch!nXmr7Tw8 zSAfJKhPn;B{CZlgfqNVjw5CVskkIRh4II+H6KlO4uCdJtFKf)p-R%Sq;U|zI=5!z7 zYgiBaJCJ8~bp@!iHxbLLMKv4azng7I&h;zo^465&s0JO&+u-Vd#8K|()6ipY1D2Ke z01LwCC*q<3iv9|CoXu6wPa8)R76}-$VDlrPg+>jpI8AKCt}z5kTsf^%tl|o62TYU* z5wv*6F!g$8+1WL?2ytwsv{KPrDpg9Oe`SfvW^V|4pq02B1HfoYhW9zI{pZOPD-i{d&H_xQ!ODN1|Omt*)w#aYQV7y zccYU~vXE*cDAWsCz=nqQV@W9@MUKFGY)(T)d9>41moH|LV)np~hOoVZ zEO6N1g%L@me#YbM>x-|l)eCj@wDZwX%d3Vh+fj97)Zlgs5=vqUG>e!f*OfY^Ni0uP zvu^JYV_KONPHPmMa7?8V$}J@UxGXX<5ch4`H==OARP#CR%RF4juBPuSWfqdaL+F^= zkaF{yodnH6JkutP6AW9iWEt|grED$(Ypdz^MJ|PGVKbXs$lTvtTUlbefj3yD>+PXA zB_TC75KoGI(UoP}oj2GYU9YeY0>I`2Lu@z@37B;g128jijol0_FUv9yTFl>v!b+x) zUdhDo;#5A#D*8hf$hD@50Bx&77)aG?finI1V(=*`d$&AjCiI>;U zHD?bm4g?z-v5w&Iz*$*btLqIJB0!O=0;K#;#9zcviC#K6niIlhlP4Z*_XlV;{RDN!T)F2H-YKsyws%Wv3yWm%;yT};^OIWY_DgI zJ@2`DM*d!Jgp=C`z3FTKI(PDi&qQ&sFhWd3NCrZ}wStx0ua)?~+Z3PN8WS z4-W457mz{tXWzdiJfuoW6(5=MkV1V?t@5jrp9cZYdGL8cVlLKrcs)9mEp(n%Giusf)e3F zTd`f6jv2Naz7+6KcHI5C2XM)wVs=xEm)Y;#O^k@nzt{5%cFjOhuh-Mf}?Hl z7^@FP|8o+50#_$KyW$jxG=&i^;!O~LL?DLR{{X5>}EBgM0lJtG%zqTF;R$*&&i>%K)(cLkRE%$Y3R789S&&)`Qj|2`%9T-G^^E%Sgc=AYAZ8@z=N2TEFwFnA+FZkeJ!-Y>uNkhBSe;&N(1N)nIX^EgGrhDZ zu_QA;4`i4g_j&v4oU>aN=x#UVXXw5>Yt`0mFvIdniZYWJR^;cbWpz9+vZCaZ(Z8Jb z^USBWdqPc1%dCJoN|Do=r{%zUoehy8msS+-z8L(Vz5!xRT7FS(Vo6DA5yP!GhMNZ- zN&UPnYoNR8wwmEoz0x44NtuQgVCSfQ()$p?dU%33)0C+u;yK+#{=L#LCE$=wEdnV^ z6I{C>QcM2D>En~kC-pAAHP2hFlG5EsW~7u3ev9D*QU1boOIgk#d5Zp{Y(dS8<5q+C+9=#yq8?d z@Z;o(&j%)N-kR9a_r-ro{x1}TDXGQDz(@cqE_bP2_}8`dcJGobuFvN~cRzl$%?PR( z;ol8etIuxVr55e>XlL93w{Xd*s5}oyJQSru!jIvWq1}^px30H2{NUeX`0@<*q8rN7 zq2?5o=H)@m`MgLbe{wNz>LT~@)3!TKx#o7)m!K$$FD=Ogdp6QM_jLB5_O;Qw#bhi4 zV=ZPXN<4w81Z9x;qSW-v;*z3DklIbAh0+r%(`J~4Z%NhEVJklu|Md)1ZAoH!d}>8O zQEG89G->i)5S#dvIkKpG^(Q?8zUEFf-M8&Sa(J8ptpHO0!3eFSy^T&b%Cdb@n{ z1e1dTXB6yj;ISwLTN6Y^=78gS1TXly7Z8*F0yI96D&m_~rEK`=nQvfq&zgK97I;80 zFfcYWG$3+yZf<3AUv+e8Y%Xwl03s0gk4EA2l4YV5hLtQ=Jng;@&y#Qi(W}Q#CEx;p zJb0Wt$Z?QkgAudHhY#f|?^J9HVELjoUHu+op>OjWv&nAEzX9}j4&UknEqI&(IsnE0 z!3eTU(rXyAmtUA+XM$3h~;5rnNGAPOM)mR8|Vyr zM2;k`DGqmrw5&~Xzx|%4s$Yjgz4!v`ov<5|Gu_qI)m7E?*3Flu`?_l;#dNl~?wj@M zs{8MJ^5Vr+S=^fO_-egcm-%>XX1B|tT$yD#TdeSOF^8gytuvw zK=-w%+^5nvsqX#5>SmsQaV@IZ7abcPdbh>rymCWNipAAT$0;p-m-$WhIY+Z;K6lOD z&F1-GG0BMEt{F}8MOMy=#9OVjO|lb_FiI6gApe)FB#KYo9*cXsgR;PBw==RRJK4vzMR=Hz~L13G-y`?hcP zWkFBKIHehwQFfKbk6y%I@IGGuUi|LG?8=Z^PJaHj|H9xeep&ChF^XW`{r&y`Z~yq{ z-NE&P|*N6G%eBLQ8|CUcyJ4%H`c8hfy zm0(+($7iGAS!>s{_D>Ja4)*sB`S~3%ln=wx)8o_DZq(tYz0;$Eqwm>@ANlXW z(Ys^*`*!%|951BthZpkCpQ{z*ZgQJrk*D$m45a+jnG-|ev}@MNG-G)*I4TyoMOkoc zwfy*4$j>>nj_+%reF~GA#rifcXA=WOqc3}k00H#Dzu9f*(03;fpkDh@NmZu zX8R?`^$o;gYQSI-3YD9H=@d(|)^dD+>iQFzBLjxbBp+K5PZCi5zS6|IOO4*{H4J<$#ET3Q7V z$mnQgW|grol^?k_`~z23*>w)iY`ubV_tXT|Ro*wRs+M_W{>#%-JGuYHLz4-6e=BAS zqTUmBzxZSS!%o13y~=C`Me25_-d=f)by=*=pv8t|S(F`%Pv~XoEYp67uUExbc}S6p zDCQt2-}SI!hvfbvaKCN);)Ru6)m4hg@XI6@hO(fR5NN@dgG$r%F;&br{8;ZA3Dg$J1 ziuKCmU-HSCqsnZnRlcm#`>h>a%!zbxU0f`jSR>ZrsL-Bv#$dx1*)@(wGAO$RrWIid z<(7TU%0cUB@BMJ_cG*kQoMhNk7hS}z{pMGNg(A2ybWEC=??zf9)q zX`WKb&klyw*-$oPC7x{!J1?Pzt{Y}sEZQrBRX108Msr>`r7|!yCpTO**o^BrP!5J_ zL{m3QJLm?+GsSqecn-$4bu-4ti~0TY&@~>pgy*Sb#I|ogB&sLIeh)C4LSE)`aN?AL znk}aM2#wOv{ceVamz>LVR>F*g{$cy+`gWvUtub2xyNvT{1d7Ee9Q9#pp3 zl5E!&cvknjM|O*7lB&82Q*w3{yP~|Wt*R4`HkjcDFr~_dAUuxxL^HQ~dC<1Y*DO6k z3=BspzPp)0J$um>J_w7Ss9acKMw}w`2HqVU4ov~h*70SxQw%K@)>&)7VI&&r-fbg6 z1DlTR+lOBcy??)Bw>cSu``ncZr|Rrfn>?UKo#JomIk++lSnS-Rtm-6pJh;pG zEyHbWJ##|81+1X2L@~EXSC~qTJKY>kEjbG6eKwcv-UEfyC4>i5*@D1!s|-eRjZNIV z)x=14dFeLx-6Br$6uBwx;C|R9f)IozAVmmVrx{`h*eK5B5qSjZ8md){kInQ*DmEt0w4!t z`N${NYp4`5u)L7%xMnO`O{(u@cwMyb*%NvV{39ElV4mGx&aT(RnqJ_hwem^FB=JAZ zU}a33C8xnOxVI8U{pCVb~NY`s>kJ_y=?1ta>BS> zI%E@XHdw779fE8R*{BW69;{Yt_&mu*6?R{c;wu<{57_4EmaR1R{UUT4h;Ew+7a;6M zvyJW`bXdd*f$$#c1K6ZGL>Rz#+d!t(vPWJBOHd{d9)AXfjB2XFtaMT9#fw2i| zpFTqiiHQyCL2cdb9Bx~HFT^JAWQ%+E8T%-Wert(0AS}`WT{XMCg_WMI^7(yl$L*P3 zYk3@=%{J;%CQ*x;6bf?A zPZDI9Rm*vHPtCRvjg4?Q>{U8^UQaYk{-0|Qb?uZjyHisU61_aMi8)Q1NSdW-UvREg zrl}md0hV5#s@aMW;)g=X(5cMK8D#T?)?5Tou|&cZ9~&8iNipk#*06U*j>BxShO={P z!vMrj%`~R_#C)!LOq5kzx`t({u+6%@NW3AaIyINv^sw}Z7WqkHJ4fiK1Tajs0gjD! zaQkS#dKFSZJ5?WFxtZ%Hm(i)(+oz3aZ+>;VdfL3%_?y)%%)(Ki0m+Ca4R0Nl%oAzS z0K!vgW8ZiDh(rJ?2p*Z5T4(`VuBvu~41R+hsAt~zm{ZKPPI?1#aY3AbTO$r>7`0{a zYE={ljCfg8%>AND#6bxE##Udz10c*I&uutS;59j|A^PqmQYSJ%j9oR56Q^jpv#MI> zP5S8g==8|X?E52c%A8iWoeUnGR1wkj{#7Mjac$~uV zV00k2x`Bs`a*{Mhs+0+{*u_Bj|38|hkANIa2OUccX|4wXf>*OI5HuMgGqy&U!$u=m9v$EWGl@OLzi+GC_q@YnGi@__+-7F5SDjLQbP^7#2etX!7gs|aMq8D zwMcu}P@&|R`jfOw2KRbd7N1cv02Q6E@ZXhOe_zk?Rb$AcQ`# zW?-_bSt)qk=(Y6O-uL6-Ur$blqYcg4FvgG&PO<>LWICg6{-{u83N@8l4*6tOjp#RxIu)sU|Z6!KjEw z!``s;@*GLLIWpH&-q23;Zcy^yqzEm%6cDtFD`1NAc$<;)Gq3RBEMx7rEUpScgT{Bg zo}%)_9baXiu<>zPd4|FavRZ?+f+=@B=x3>M-z!>dr^$jI52(QMT%ZIGzR(oT7Q$B^ zEt6frC+8|fpd9BBZG5x1~uiCTzH&K5258uSE~5(P$ugaJZqLGn4^Me8cq5J&@!x%q%r z%Vzan-%q|M9Z;QzeqTWf95s;vYt?kLY!|&3 z=rNWa<4_omb7ud@7pPk9=sA^^52J{n*$|U|YQwhnv0(Ln@8>tezG*oz-(Kg0ULSB6 z;suNp6zyfxaiS1AH1llby}rN^h5hJ^Qb#kD`mRR++C>ChpR&*py$T+bSl#sSjpk|8 z3 zQB0rq5GGwpd9vV;z9mcy3sicr&C3;Q({ETi-;Pc?u#x+-2%y8oxBU+w5LD(QM-S?+ zaeFh*yNQtlh3Y^(_p{&;n;kP4m~Z_=TqFJ)jftZlz6tP_Hy~Dd>+sP z#XCtH!D4FE9zE&wBUSQHPBvM7;yJ69ux(WC);6y!N7>_HI^(n9N#EKy%mJyXHYwH+4xHyD zWkA%n8bP9qbh3e%=|-Uq10*_%0u5UvI7QhlHb?^{wJQuQ9v`wKbpr<~_*Ua;_79#Z zo9By;e^><`^^!x$5)p9Q<{&%y1fSKYDS!$jD~k=QkEQy;i5 z9;C<}Y3$zYnE!}|=OUzNOQN{bQYq@n0n@%YLuw6z1o3e!)_FDEiQ<;#l^>C~>7Q#X zqmGS*4 zl-6|Q!ht0tQ^bzhiN}s$vBL&DoEfG~-LYU4fdqivAMBY{1z?S6?Zk{H4g#R+!eK58 z4oolFy>B2*j!V>oCCNJN|8Cp83{${e5Ixw6D=vk~;pG1MZYC9~_~*NC+dEPv)ZRNe z;c0r=cmULfc>}d%T(9M<5iYzLT3>i5JSptgi(NT($wV_^ZDO-m5%svJZlXy;XQT9R z=!2@Gr;Js~L0337>t%0pb&b$Qz>_QCVFhPI z&oyNwn}WJM47AkT9vkIGyb3dCk;dR1&)r&x^=WTga*hb}EQoZfx(BomF*XCj3IYbI zoQg%9fLD#sMxjmOC*%dywR4=>;JNuuc0rpEu}GX(M8U!AMmiPfa&A`_twRS5ER_}9JnCx^WK zf;^&a9hB;u#)pWU^xQZuM)=L@u5b?@>(u|_zs61e>|pd(Uo;`)P*w5+*^T=FPUKpW zj?fc+4+2=?**OXgB5J9Os-U3a=5bG6iicR7lZpvAL!3>LNw&%0dWf?T%meT@j>FS_ z5Xbg`pn!`8V2X0&(0xz!3a`&`Z!QwZ!A?+8^{`owK`gmLq4U~?E?&QOy%la#TW?$8 z5cPF6XunRvhn%y~095;(J*DiEa;grQ$f2Mkyo#f8VELb-q zy(Gnnwxf>#Au4ivz#!R~{snHNZbua$%Ha_uETZQI|lIMiA~gZ8Vm*wWWpc0#FTn1zer$psn%`>n^~ z)X+wff*4#*Xl{@}t3_(q%1Pdhrikw3a)nHQ?QF8aFTaI{YImLt_Yd|CgV@>Sck^uN zF_1H`;=c^6Nij>j+u=U2O6Xo+1=cq=6s1j!o%N^7@$*9b~^kUz-z9s5Tc zq0^*%zwfp-5XdQdRa4Hz*9(dQy^MJ+SlD`iBtPXvvjcUy+R0vE53YA@G?9i9Rpx( z1}{0<6+@Tpc})$Uf>R^r>9b}$>Dfm;OSSqF?1le8=T%5KyE~4;0`|=T((Mo^6eu~T zK(r+^#~OCvCG{qgY^F0{flt@~EG%caC2(-Y=z3992