From 7a23a8660b3e811549bd74e86879e9cb32b1e2e9 Mon Sep 17 00:00:00 2001 From: dengwendi Date: Wed, 15 Nov 2023 15:02:14 +0800 Subject: [PATCH] INIT --- Makefile | 847 +++++++++++++++++++++++++ README.md | 177 ++++++ compile_and_run_polardbx_on_windows.md | 236 +++++++ docker/Dockerfile | 25 + docker/README.md | 165 +++++ docker/entrypoint.sh | 152 +++++ docker/image-build.sh | 16 + docs/images/dingtalk_group.jpg | Bin 0 -> 45312 bytes docs/images/wechat_group.jpg | Bin 0 -> 45890 bytes docs/images/wechat_manager_a.jpg | Bin 0 -> 19073 bytes docs/images/wechat_manager_b.jpg | Bin 0 -> 22942 bytes docs/images/wechat_manager_c.jpg | Bin 0 -> 21156 bytes 12 files changed, 1618 insertions(+) create mode 100644 Makefile create mode 100644 README.md create mode 100644 compile_and_run_polardbx_on_windows.md create mode 100644 docker/Dockerfile create mode 100644 docker/README.md create mode 100755 docker/entrypoint.sh create mode 100644 docker/image-build.sh create mode 100644 docs/images/dingtalk_group.jpg create mode 100644 docs/images/wechat_group.jpg create mode 100644 docs/images/wechat_manager_a.jpg create mode 100644 docs/images/wechat_manager_b.jpg create mode 100644 docs/images/wechat_manager_c.jpg diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bd9c585 --- /dev/null +++ b/Makefile @@ -0,0 +1,847 @@ +BUILD_DIR = $(shell pwd)/build +CN_CONF = $(BUILD_DIR)/run/polardbx-sql/conf/server.properties +DN_BASE_DIR = $(BUILD_DIR)/run/polardbx-engine +DN_DATA_DIR = $(DN_BASE_DIR)/data +DN_CONF = $(DN_DATA_DIR)/my.cnf +CDC_CONF = $(BUILD_DIR)/run/polardbx-cdc/polardbx-binlog.standalone/conf/config.properties +CN_STARTUP = $(BUILD_DIR)/run/polardbx-sql/bin/startup.sh +CDC_STARTUP = $(BUILD_DIR)/run/polardbx-cdc/polardbx-binlog.standalone/bin/start.sh + +UNAME_S = $(shell uname -s) +OS = $(shell lsb_release -si) +V = $(shell lsb_release -r | awk '{print $$2}'|awk -F"." '{print $$1}') +CPU_CORES = $(shell cat /proc/cpuinfo | grep processor| wc -l) + +export CFLAGS := -O3 -g -fexceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing +export CXXFLAGS := -O3 -g -fexceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing + +.PHONY: polardb-x +polardb-x: gms dn cn cdc configs + cd $(BUILD_DIR)/run ; \ + if [ -d "bin" ]; then \ + rm -rf bin; \ + fi; \ + mkdir bin; \ + echo "$$START_SCRIPT" > bin/polardb-x.sh; \ + chmod +x bin/polardb-x.sh + chmod +x $(BUILD_DIR)/run/polardbx-sql/bin/startup.sh + chmod +x $(BUILD_DIR)/run/polardbx-cdc/polardbx-binlog.standalone/bin/daemon.sh + +.PHONY: gms +gms: sources deps + . /etc/profile; \ + cd $(BUILD_DIR)/polardbx-engine; \ + cmake . \ + -DFORCE_INSOURCE_BUILD=ON \ + -DSYSCONFDIR:PATH="$(BUILD_DIR)/run/polardbx-engine/u01/mysql" \ + -DCMAKE_INSTALL_PREFIX:PATH="$(BUILD_DIR)/run/polardbx-engine/u01/mysql" \ + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ + -DWITH_NORMANDY_CLUSTER=ON \ + -DWITH_7U:BOOL=OFF \ + -DWITH_PROTOBUF:STRING=bundled \ + -DINSTALL_LAYOUT=STANDALONE \ + -DMYSQL_MAINTAINER_MODE=0 \ + -DWITH_EMBEDDED_SERVER=0 \ + -DWITH_SSL=openssl \ + -DWITH_ZLIB=bundled \ + -DWITH_MYISAM_STORAGE_ENGINE=1 \ + -DWITH_INNOBASE_STORAGE_ENGINE=1 \ + -DWITH_PARTITION_STORAGE_ENGINE=1 \ + -DWITH_CSV_STORAGE_ENGINE=1 \ + -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ + -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ + -DWITH_FEDERATED_STORAGE_ENGINE=1 \ + -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ + -DWITH_EXAMPLE_STORAGE_ENGINE=0 \ + -DWITH_TEMPTABLE_STORAGE_ENGINE=1 \ + -DWITH_XENGINE_STORAGE_ENGINE=0 \ + -DUSE_CTAGS=0 \ + -DWITH_EXTRA_CHARSETS=all \ + -DWITH_DEBUG=0 \ + -DENABLE_DEBUG_SYNC=0 \ + -DENABLE_DTRACE=0 \ + -DENABLED_PROFILING=1 \ + -DENABLED_LOCAL_INFILE=1 \ + -DWITH_BOOST="extra/boost/boost_1_70_0.tar.gz"; \ + make -j $(CPU_CORES) && make install + rm -rf $(BUILD_DIR)/run/polardbx-engine/u01/mysql/mysql-test + +.PHONY: dn +dn: gms + +.PHONY: cdc +cdc: sources deps cn + . /etc/profile; \ + cd $(BUILD_DIR)/polardbx-cdc; \ + mvn -U clean install -Dmaven.test.skip=true -DfailIfNoTests=false -e -P release; \ + mkdir $(BUILD_DIR)/run/polardbx-cdc; \ + cp polardbx-cdc-assemble/target/polardbx-binlog.tar.gz $(BUILD_DIR)/run/polardbx-cdc/; \ + cd $(BUILD_DIR)/run/polardbx-cdc/; \ + tar xzvf polardbx-binlog.tar.gz; \ + rm -f polardbx-binlog.tar.gz + +.PHONY: cn +cn: sources deps + . /etc/profile; \ + cd $(BUILD_DIR)/polardbx-sql; \ + mvn install -DskipTests -D env=release; \ + mkdir $(BUILD_DIR)/run/polardbx-sql; \ + cp target/polardbx-server-*.tar.gz $(BUILD_DIR)/run/polardbx-sql/; \ + cd $(BUILD_DIR)/run/polardbx-sql; \ + tar xzvf polardbx-server-*.tar.gz; \ + rm -f xzvf polardbx-server-*.tar.gz + +.PHONY: configs +configs: gms dn cdc cn + # config gms & dn + mkdir -p $(DN_DATA_DIR) + echo "$$MY_CNF" > $(DN_CONF) + mkdir -p $(DN_DATA_DIR)/data + mkdir -p $(DN_DATA_DIR)/log + mkdir -p $(DN_DATA_DIR)/run + mkdir -p $(DN_DATA_DIR)/tmp + mkdir -p $(DN_DATA_DIR)/mysql + # start gms + if [ -e "$(DN_DATA_DIR)/data/auto.cnf" ]; then \ + echo "gms root account already initialized."; \ + else \ + $(BUILD_DIR)/run/polardbx-engine/u01/mysql/bin/mysqld --defaults-file=$(DN_CONF) --initialize-insecure; \ + fi ; \ + $(BUILD_DIR)/run/polardbx-engine/u01/mysql/bin/mysqld --defaults-file=$(DN_CONF) -D + # config cn + awk -F"=" '/^serverPort/{$$2="=8527";print;next}1' $(CN_CONF) > tmp && mv tmp $(CN_CONF) + awk -F"=" '/^metaDbAddr/{$$2="=127.0.0.1:4886";print;next}1' $(CN_CONF) > tmp && mv tmp $(CN_CONF) + awk -F"=" '/^metaDbXprotoPort/{$$2="=34886";print;next}1' $(CN_CONF) > tmp && mv tmp $(CN_CONF) + awk -F"=" '/^galaxyXProtocol/{$$2="=2";print;next}1' $(CN_CONF) > tmp && mv tmp $(CN_CONF) + cd $(BUILD_DIR)/run/polardbx-sql/; \ + META=`bin/startup.sh -I -P asdf1234ghjk5678 -d 127.0.0.1:4886:34886 -u polardbx_root -S "123456" 2>&1`; \ + echo "meta: $${META}"; \ + echo "$${META}" | grep "metaDbPass" >> meta.tmp; \ + META_DB_PASS=`cat meta.tmp | grep "metaDbPass"`; \ + echo "metadb password: $${META_DB_PASS}"; \ + ps aux|grep "$(BUILD_DIR)/run/polardbx-engine/u01/mysql/bin/mysqld" | grep -v "grep" | awk '{print $$2}' |xargs kill -9; \ + if [ "" = "$${META_DB_PASS}" ]; then \ + echo "meta db init failed."; \ + exit 1; \ + fi; \ + cat meta.tmp >> $(CN_CONF) + # config cdc + cd $(BUILD_DIR)/run/polardbx-sql/; \ + META_DB_PASS=`cat meta.tmp | awk -F"=" '{print $$2}'`; \ + awk -F"=" '/^useEncryptedPassword/{$$2="=true";print;next}1' $(CDC_CONF) > tmp && mv tmp $(CDC_CONF); \ + awk -F"=" '/^polardbx.instance.id/{$$2="=polardbx-polardbx";print;next}1' $(CDC_CONF) > tmp && mv tmp $(CDC_CONF); \ + awk -F"=" '/^metaDb_url/{$$2="=jdbc:mysql://127.0.0.1:4886/polardbx_meta_db_polardbx?useSSL=false";print;next}1' $(CDC_CONF) > tmp && mv tmp $(CDC_CONF); \ + awk -F"=" '/^metaDb_username/{$$2="=my_polarx";print;next}1' $(CDC_CONF) > tmp && mv tmp $(CDC_CONF); \ + sed 's/metaDb_password.*//g' $(CDC_CONF) > tmp && mv tmp $(CDC_CONF); \ + cat meta.tmp >> $(CDC_CONF); \ + sed 's/metaDbPasswd/metaDb_password/g' $(CDC_CONF) > tmp && mv tmp $(CDC_CONF); \ + awk -F"=" '/^polarx_url/{$$2="=jdbc:mysql://127.0.0.1:8527/__cdc__";print;next}1' $(CDC_CONF) > tmp && mv tmp $(CDC_CONF); \ + awk -F"=" '/^polarx_username/{$$2="=polardbx_root";print;next}1' $(CDC_CONF) > tmp && mv tmp $(CDC_CONF); \ + awk -F"=" '/^polarx_password/{$$2="=UY1tQsgNvP8GJGGP8vHKKA==";print;next}1' $(CDC_CONF) > tmp && mv tmp $(CDC_CONF); \ + sed -i 's/admin/polarx/g' $(CDC_CONF); \ + rm meta.tmp + +.PHONY: sources +sources: deps + mkdir -p $(BUILD_DIR) + cd $(BUILD_DIR); \ + if [ -d "polardbx-sql" ]; then \ + echo "polardbx-sql exsits."; \ + else \ + git clone https://github.com/polardb/polardbx-sql.git; \ + cd polardbx-sql; \ + git submodule update --init; \ + fi + cd $(BUILD_DIR); \ + if [ -d "polardbx-engine" ]; then \ + echo "polardbx-engine exists."; \ + else \ + git clone https://github.com/polardb/polardbx-engine.git; \ + cd polardbx-engine; \ + wget https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.tar.gz; \ + mkdir -p extra/boost; \ + cp boost_1_70_0.tar.gz extra/boost/; \ + if [ "$(UNAME_S)" = "Darwin" ]; then \ + echo "$${VERSION_PATCH}" >> macos.patch; \ + git apply macos.patch; \ + rm macos.patch; \ + fi ; \ + fi + cd $(BUILD_DIR); \ + if [ -d "polardbx-cdc" ]; then \ + echo "polardbx-cdc exists."; \ + else \ + git clone https://github.com/polardb/polardbx-cdc.git; \ + fi + +.PHONY: deps +deps: +ifeq ($(UNAME_S), Darwin) + @echo "Install the following tools and libraries before your building.\n" + @echo "tools : cmake3, make, automake, gcc, g++, bison, git, jdk11+, maven3" + @echo "libraries : openssl1.1 \n\n" + @echo "Press any key to continue..." + @read -n 1 +else +ifeq ($(OS), CentOS) + sudo yum remove -y cmake + sudo yum install -y epel-release + sudo yum install -y wget java-11-openjdk-devel cmake3 automake bison openssl-devel ncurses-devel libaio-devel mysql +ifeq ($(V), 8) + sudo yum install -y libtirpc-devel dnf-plugins-core + sudo yum config-manager --set-enabled PowerTools + sudo yum install -y rpcgen + sudo yum groupinstall -y "Development Tools" + sudo yum install -y gcc gcc-c++ +endif +ifeq ($(V), 7) + if [ -e "/usr/bin/cmake" ]; then \ + sudo rm /usr/bin/cmake -f ; \ + fi + sudo ln -s /usr/bin/cmake3 /usr/bin/cmake + sudo yum install -y centos-release-scl + sudo yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils + if ! grep "source /opt/rh/devtoolset-7/enable" /etc/profile; then \ + echo "source /opt/rh/devtoolset-7/enable" | sudo tee -a /etc/profile ; \ + fi +endif +endif +ifneq ($(filter $(OS), Ubuntu CentOS),) + if [ ! -d /opt/apache-maven-3.9.1 ]; then \ + sudo wget https://mirrors.aliyun.com/apache/maven/maven-3/3.9.1/binaries/apache-maven-3.9.1-bin.tar.gz -P /tmp && \ + sudo tar xf /tmp/apache-maven-3.9.1-bin.tar.gz -C /opt && \ + sudo rm -f /tmp/apache-maven-3.9.1-bin.tar.gz && \ + sudo ln -fs /opt/apache-maven-3.9.1 /opt/maven && \ + echo 'export M2_HOME=/opt/maven' | sudo tee /etc/profile.d/maven.sh && \ + echo 'export PATH=$${M2_HOME}/bin:$${PATH}' | sudo tee -a /etc/profile.d/maven.sh && \ + sudo chmod +x /etc/profile.d/maven.sh && \ + echo '' | sudo tee /opt/maven/conf/settings.xml && \ + echo 'aliyunmaven' | sudo tee -a /opt/maven/conf/settings.xml && \ + echo '*' | sudo tee -a /opt/maven/conf/settings.xml && \ + echo 'aliyun public' | sudo tee -a /opt/maven/conf/settings.xml && \ + echo 'https://maven.aliyun.com/repository/public' | sudo tee -a /opt/maven/conf/settings.xml && \ + echo '' | sudo tee -a /opt/maven/conf/settings.xml; \ + fi + if ! grep "source /etc/profile.d/maven.sh" /etc/profile; then \ + echo "source /etc/profile.d/maven.sh" | sudo tee -a /etc/profile ; \ + fi +endif +ifeq ($(OS), Ubuntu) + sudo apt-get update + sudo apt-get install -y git openjdk-8-jdk make automake cmake bison pkg-config libaio-dev libncurses5-dev \ + libsasl2-dev libldap2-dev libssl-dev gcc-7 g++-7 mysql-client + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 \ + --slave /usr/bin/g++ g++ /usr/bin/g++-7 + sudo update-alternatives --config gcc +endif +endif + +clean: + rm -rf $(BUILD_DIR)/run + +cleanAll: + rm -rf $(BUILD_DIR) + +# long variables + +define START_SCRIPT +#!/bin/bash + +PROG_NAME=$$0 +ACTION=$$1 + +usage() { + echo "Usage: $${PROG_NAME} [start | restart | stop]" + exit 1; +} + +if [ $$# -lt 1 ]; then + usage +fi + +if [ x"$$mem_size" = "x" ]; then + export mem_size=4096 +fi + +buffer_pool_size_byte=$$(echo "scale=0; $$mem_size*1024*1024*0.3/1" | bc) +awk -v size=$$buffer_pool_size_byte -F"=" '/^innodb_buffer_pool_size/{$$2="="size;print;next}1' $(DN_CONF) > tmp && mv tmp $(DN_CONF) + + +retry() { + retry_interval=5 + retry_cnt=0 + retry_limit=10 + succeed=0 + while [ $${retry_cnt} -lt $${retry_limit} ]; do + if [[ $$1 ]]; then + succeed=1 + return 0 + fi + + echo "Fail to $$1, retry..." + + ((retry_cnt++)) + + sleep "$${retry_interval}" + done + + if [ $${succeed} -eq 0 ]; then + echo "$$1 failed." + return 1 + fi + return 0 +} + +start() { + start_dn + + echo "start cn..." + $(BUILD_DIR)/run/polardbx-sql/bin/startup.sh -P asdf1234ghjk5678 + echo "cn starts." + + echo "start cdc..." + $(BUILD_DIR)/run/polardbx-cdc/polardbx-binlog.standalone/bin/daemon.sh start + echo "cdc starts." + + if ! retry "mysql -h127.1 -P8527 -upolardbx_root -e 'SELECT 1'"; then + echo "cn starts failed." + exit 1 + fi + + echo "try polardb-x by:" + echo "mysql -h127.1 -P8527 -upolardbx_root" +} + +start_dn() { + echo "start gms & dn..." + $(BUILD_DIR)/run/polardbx-engine/u01/mysql/bin/mysqld --defaults-file=$(DN_CONF) -D + if ! retry "mysql -h127.1 -P4886 -uroot -e 'SELECT 1'"; then + echo "gms and dn start failed." + exit 1 + fi + echo "gms and dn are running." +} + +stop() { + echo "stop cdc..." + ps aux | grep "DaemonBootStrap" | grep -v "grep" | awk '{print $$2}'| xargs kill -9 + ps aux | grep "TaskBootStrap" | grep -v "grep" | awk '{print $$2}'| xargs kill -9 + ps aux | grep "DumperBootStrap" | grep -v "grep" | awk '{print $$2}'| xargs kill -9 + echo "cdc is stopped." + + echo "stop cn..." + ps aux | grep "TddlLauncher" | grep -v "grep" | awk '{print $$2}' | xargs kill -9 + if [ -f "$(BUILD_DIR)/run/polardbx-sql/bin/tddl.pid" ]; then + rm $(BUILD_DIR)/run/polardbx-sql/bin/tddl.pid + fi + echo "cn is stopped." + + echo "stop dn & gms..." + ps aux | grep "$(BUILD_DIR)/run/polardbx-engine/u01/mysql/bin/mysqld" | grep -v "grep" | awk '{print $$2}'| xargs kill -15 + sleep 10 + echo "dn & gms are stopped." +} + +case "$${ACTION}" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + sleep 1 + start + ;; + start_dn) + start_dn + ;; + *) + usage + ;; +esac + +endef +export START_SCRIPT + +define MY_CNF +[mysqld] +auto_increment_increment = 1 +auto_increment_offset = 1 +autocommit = ON +automatic_sp_privileges = ON +avoid_temporal_upgrade = OFF +back_log = 3000 +binlog_cache_size = 1048576 +binlog_checksum = CRC32 +binlog_order_commits = OFF +binlog_row_image = full +binlog_rows_query_log_events = ON +binlog_stmt_cache_size = 32768 +binlog_transaction_dependency_tracking = WRITESET +block_encryption_mode = "aes-128-ecb" +bulk_insert_buffer_size = 4194304 +character_set_server = utf8 +concurrent_insert = 2 +connect_timeout = 10 +datadir = $(DN_DATA_DIR)/data +default_authentication_plugin = mysql_native_password +default_storage_engine = InnoDB +default_time_zone = +8:00 +default_week_format = 0 +delay_key_write = ON +delayed_insert_limit = 100 +delayed_insert_timeout = 300 +delayed_queue_size = 1000 +disconnect_on_expired_password = ON +div_precision_increment = 4 +end_markers_in_json = OFF +enforce_gtid_consistency = ON +eq_range_index_dive_limit = 200 +event_scheduler = OFF +expire_logs_days = 0 +explicit_defaults_for_timestamp = OFF +flush_time = 0 +ft_max_word_len = 84 +ft_min_word_len = 4 +ft_query_expansion_limit = 20 +general_log = OFF +general_log_file = $(DN_DATA_DIR)/log/general.log +group_concat_max_len = 1024 +gtid_mode = ON +host_cache_size = 644 +init_connect = '' +innodb_adaptive_flushing = ON +innodb_adaptive_flushing_lwm = 10 +innodb_adaptive_hash_index = OFF +innodb_adaptive_max_sleep_delay = 150000 +innodb_autoextend_increment = 64 +innodb_autoinc_lock_mode = 2 +innodb_buffer_pool_chunk_size = 33554432 +innodb_buffer_pool_dump_at_shutdown = ON +innodb_buffer_pool_dump_pct = 25 +innodb_buffer_pool_instances = 8 +innodb_buffer_pool_load_at_startup = ON +innodb_change_buffer_max_size = 25 +innodb_change_buffering = none +innodb_checksum_algorithm = crc32 +innodb_cmp_per_index_enabled = OFF +innodb_commit_concurrency = 0 +innodb_compression_failure_threshold_pct = 5 +innodb_compression_level = 6 +innodb_compression_pad_pct_max = 50 +innodb_concurrency_tickets = 5000 +innodb_data_file_purge = ON +innodb_data_file_purge_interval = 100 +innodb_data_file_purge_max_size = 128 +innodb_data_home_dir = $(DN_DATA_DIR)/mysql +innodb_deadlock_detect = ON +innodb_disable_sort_file_cache = ON +innodb_equal_gcn_visible = 0 +innodb_flush_log_at_trx_commit = 1 +innodb_flush_method = O_DIRECT +innodb_flush_neighbors = 0 +innodb_flush_sync = ON +innodb_ft_cache_size = 8000000 +innodb_ft_enable_diag_print = OFF +innodb_ft_enable_stopword = ON +innodb_ft_max_token_size = 84 +innodb_ft_min_token_size = 3 +innodb_ft_num_word_optimize = 2000 +innodb_ft_result_cache_limit = 2000000000 +innodb_ft_sort_pll_degree = 2 +innodb_ft_total_cache_size = 640000000 +innodb_io_capacity = 20000 +innodb_io_capacity_max = 40000 +innodb_lock_wait_timeout = 50 +innodb_log_buffer_size = 16777216 +innodb_log_checksums = ON +innodb_log_file_size = 134217728 +innodb_log_group_home_dir = $(DN_DATA_DIR)/mysql +innodb_lru_scan_depth = 8192 +innodb_max_dirty_pages_pct = 75 +innodb_max_dirty_pages_pct_lwm = 0 +innodb_max_purge_lag = 0 +innodb_max_purge_lag_delay = 0 +innodb_max_undo_log_size = 1073741824 +innodb_monitor_disable = +innodb_monitor_enable = +innodb_old_blocks_pct = 37 +innodb_old_blocks_time = 1000 +innodb_online_alter_log_max_size = 134217728 +innodb_open_files = 20000 +innodb_optimize_fulltext_only = OFF +innodb_page_cleaners = 4 +innodb_print_all_deadlocks = ON +innodb_purge_batch_size = 300 +innodb_purge_rseg_truncate_frequency = 128 +innodb_purge_threads = 4 +innodb_random_read_ahead = OFF +innodb_read_ahead_threshold = 0 +innodb_read_io_threads = 4 +innodb_rollback_on_timeout = OFF +innodb_rollback_segments = 128 +innodb_snapshot_update_gcn = 1 +innodb_sort_buffer_size = 1048576 +innodb_spin_wait_delay = 6 +innodb_stats_auto_recalc = ON +innodb_stats_method = nulls_equal +innodb_stats_on_metadata = OFF +innodb_stats_persistent = ON +innodb_stats_persistent_sample_pages = 20 +innodb_stats_transient_sample_pages = 8 +innodb_status_output = OFF +innodb_status_output_locks = OFF +innodb_strict_mode = ON +innodb_sync_array_size = 16 +innodb_sync_spin_loops = 30 +innodb_table_locks = ON +innodb_tcn_cache_level = block +innodb_thread_concurrency = 0 +innodb_thread_sleep_delay = 0 +innodb_write_io_threads = 4 +interactive_timeout = 7200 +key_buffer_size = 16777216 +key_cache_age_threshold = 300 +key_cache_block_size = 1024 +key_cache_division_limit = 100 +lc_time_names = en_US +local_infile = OFF +lock_wait_timeout = 1800 +log-bin-index = $(DN_DATA_DIR)/mysql/mysql-bin.index +log_bin = $(DN_DATA_DIR)/mysql/mysql-bin.log +log_bin_trust_function_creators = ON +log_bin_use_v1_row_events = 0 +log_error = $(DN_DATA_DIR)/log/alert.log +log_error_verbosity = 2 +log_queries_not_using_indexes = OFF +log_slave_updates = 0 +log_slow_admin_statements = ON +log_slow_slave_statements = ON +log_throttle_queries_not_using_indexes = 0 +long_query_time = 1 +loose_ccl_max_waiting_count = 0 +loose_ccl_queue_bucket_count = 4 +loose_ccl_queue_bucket_size = 64 +loose_ccl_wait_timeout = 86400 +loose_cluster-id = 1234 +loose_cluster-info = 127.0.0.1:14886@1 +loose_consensus_auto_leader_transfer = ON +loose_consensus_auto_reset_match_index = ON +loose_consensus_election_timeout = 10000 +loose_consensus_io_thread_cnt = 8 +loose_consensus_large_trx = ON +loose_consensus_log_cache_size = 536870912 +loose_consensus_max_delay_index = 10000 +loose_consensus_max_log_size = 20971520 +loose_consensus_max_packet_size = 131072 +loose_consensus_prefetch_cache_size = 268435456 +loose_consensus_worker_thread_cnt = 8 +loose_galaxyx_port = 32886 +loose_implicit_primary_key = 1 +loose_information_schema_stats_expiry = 86400 +loose_innodb_buffer_pool_in_core_file = OFF +loose_innodb_commit_cleanout_max_rows = 9999999999 +loose_innodb_doublewrite_pages = 64 +loose_innodb_lizard_stat_enabled = OFF +loose_innodb_log_compressed_pages = ON +loose_innodb_log_optimize_ddl = OFF +loose_innodb_log_write_ahead_size = 4096 +loose_innodb_multi_blocks_enabled = ON +loose_innodb_numa_interleave = OFF +loose_innodb_parallel_read_threads = 1 +loose_innodb_undo_retention = 1800 +loose_innodb_undo_space_reserved_size = 1024 +loose_innodb_undo_space_supremum_size = 102400 +loose_internal_tmp_mem_storage_engine = TempTable +loose_new_rpc = ON +loose_optimizer_switch = index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on,use_index_extensions=on +loose_optimizer_trace = enabled=off,one_line=off +loose_optimizer_trace_features = greedy_search=on,range_optimizer=on,dynamic_range=on,repeated_subselect=on +loose_performance-schema_instrument = 'wait/lock/metadata/sql/mdl=ON' +loose_performance_point_lock_rwlock_enabled = ON +loose_performance_schema-instrument = 'memory/%%=COUNTED' +loose_performance_schema_accounts_size = 10000 +loose_performance_schema_consumer_events_stages_current = ON +loose_performance_schema_consumer_events_stages_history = ON +loose_performance_schema_consumer_events_stages_history_long = ON +loose_performance_schema_consumer_events_statements_current = OFF +loose_performance_schema_consumer_events_statements_history = OFF +loose_performance_schema_consumer_events_statements_history_long = OFF +loose_performance_schema_consumer_events_transactions_current = OFF +loose_performance_schema_consumer_events_transactions_history = OFF +loose_performance_schema_consumer_events_transactions_history_long = OFF +loose_performance_schema_consumer_events_waits_current = OFF +loose_performance_schema_consumer_events_waits_history = OFF +loose_performance_schema_consumer_events_waits_history_long = OFF +loose_performance_schema_consumer_global_instrumentation = OFF +loose_performance_schema_consumer_statements_digest = OFF +loose_performance_schema_consumer_thread_instrumentation = OFF +loose_performance_schema_digests_size = 10000 +loose_performance_schema_error_size = 0 +loose_performance_schema_events_stages_history_long_size = 0 +loose_performance_schema_events_stages_history_size = 0 +loose_performance_schema_events_statements_history_long_size = 0 +loose_performance_schema_events_statements_history_size = 0 +loose_performance_schema_events_transactions_history_long_size = 0 +loose_performance_schema_events_transactions_history_size = 0 +loose_performance_schema_events_waits_history_long_size = 0 +loose_performance_schema_events_waits_history_size = 0 +loose_performance_schema_hosts_size = 10000 +loose_performance_schema_instrument = '%%=OFF' +loose_performance_schema_max_cond_classes = 0 +loose_performance_schema_max_cond_instances = 10000 +loose_performance_schema_max_digest_length = 0 +loose_performance_schema_max_digest_sample_age = 0 +loose_performance_schema_max_file_classes = 0 +loose_performance_schema_max_file_handles = 0 +loose_performance_schema_max_file_instances = 1000 +loose_performance_schema_max_index_stat = 10000 +loose_performance_schema_max_memory_classes = 0 +loose_performance_schema_max_metadata_locks = 10000 +loose_performance_schema_max_mutex_classes = 0 +loose_performance_schema_max_mutex_instances = 10000 +loose_performance_schema_max_prepared_statements_instances = 1000 +loose_performance_schema_max_program_instances = 10000 +loose_performance_schema_max_rwlock_classes = 0 +loose_performance_schema_max_rwlock_instances = 10000 +loose_performance_schema_max_socket_classes = 0 +loose_performance_schema_max_socket_instances = 1000 +loose_performance_schema_max_sql_text_length = 0 +loose_performance_schema_max_stage_classes = 0 +loose_performance_schema_max_statement_classes = 0 +loose_performance_schema_max_statement_stack = 1 +loose_performance_schema_max_table_handles = 10000 +loose_performance_schema_max_table_instances = 1000 +loose_performance_schema_max_table_lock_stat = 10000 +loose_performance_schema_max_thread_classes = 0 +loose_performance_schema_max_thread_instances = 10000 +loose_performance_schema_session_connect_attrs_size = 0 +loose_performance_schema_setup_actors_size = 10000 +loose_performance_schema_setup_objects_size = 10000 +loose_performance_schema_users_size = 10000 +loose_persist_binlog_to_redo = OFF +loose_persist_binlog_to_redo_size_limit = 1048576 +loose_rds_audit_log_buffer_size = 16777216 +loose_rds_audit_log_enabled = OFF +loose_rds_audit_log_event_buffer_size = 8192 +loose_rds_audit_log_row_limit = 100000 +loose_rds_audit_log_version = MYSQL_V1 +loose_recovery_apply_binlog = OFF +loose_replica_read_timeout = 3000 +loose_rpc_port = 34886 +loose_session_track_system_variables = "*" +loose_session_track_transaction_info = OFF +loose_slave_parallel_workers = 32 +low_priority_updates = 0 +lower_case_table_names = 1 +master_info_file = $(DN_DATA_DIR)/mysql/master.info +master_info_repository = TABLE +master_verify_checksum = OFF +max_allowed_packet = 1073741824 +max_binlog_cache_size = 18446744073709551615 +max_binlog_stmt_cache_size = 18446744073709551615 +max_connect_errors = 65536 +max_connections = 5532 +max_error_count = 1024 +max_execution_time = 0 +max_heap_table_size = 67108864 +max_join_size = 18446744073709551615 +max_length_for_sort_data = 4096 +max_points_in_geometry = 65536 +max_prepared_stmt_count = 16382 +max_seeks_for_key = 18446744073709551615 +max_sort_length = 1024 +max_sp_recursion_depth = 0 +max_user_connections = 5000 +max_write_lock_count = 102400 +min_examined_row_limit = 0 +myisam_sort_buffer_size = 262144 +mysql_native_password_proxy_users = OFF +net_buffer_length = 16384 +net_read_timeout = 30 +net_retry_count = 10 +net_write_timeout = 60 +ngram_token_size = 2 +open_files_limit = 65535 +opt_indexstat = ON +opt_tablestat = ON +optimizer_prune_level = 1 +optimizer_search_depth = 62 +optimizer_trace_limit = 1 +optimizer_trace_max_mem_size = 1048576 +optimizer_trace_offset = -1 +performance_schema = ON +port = 4886 +preload_buffer_size = 32768 +query_alloc_block_size = 8192 +query_prealloc_size = 8192 +range_alloc_block_size = 4096 +range_optimizer_max_mem_size = 8388608 +read_rnd_buffer_size = 442368 +relay_log = $(DN_DATA_DIR)/mysql/slave-relay.log +relay_log_index = $(DN_DATA_DIR)/mysql/slave-relay-log.index +relay_log_info_file = $(DN_DATA_DIR)/mysql/slave-relay-log.info +relay_log_info_repository = TABLE +relay_log_purge = OFF +relay_log_recovery = OFF +replicate_same_server_id = OFF +loose_rotate_log_table_last_name = +server_id = 1234 +session_track_gtids = OFF +session_track_schema = ON +session_track_state_change = OFF +sha256_password_proxy_users = OFF +show_old_temporals = OFF +skip_slave_start = OFF +skip_ssl = ON +slave_exec_mode = strict +slave_load_tmpdir = $(DN_DATA_DIR)/tmp +slave_net_timeout = 4 +slave_parallel_type = LOGICAL_CLOCK +slave_pending_jobs_size_max = 1073741824 +slave_sql_verify_checksum = OFF +slave_type_conversions = +slow_launch_time = 2 +slow_query_log = OFF +slow_query_log_file = $(DN_DATA_DIR)/mysql/slow_query.log +socket = $(DN_DATA_DIR)/run/mysql.sock +sort_buffer_size = 868352 +sql_mode = NO_ENGINE_SUBSTITUTION +stored_program_cache = 256 +sync_binlog = 1 +sync_master_info = 10000 +sync_relay_log = 1 +sync_relay_log_info = 10000 +table_open_cache_instances = 16 +temptable_max_ram = 1073741824 +thread_cache_size = 100 +thread_stack = 262144 +tls_version = TLSv1,TLSv1.1,TLSv1.2 +tmp_table_size = 2097152 +tmpdir = $(DN_DATA_DIR)/tmp +transaction_alloc_block_size = 8192 +transaction_isolation = REPEATABLE-READ +transaction_prealloc_size = 4096 +transaction_write_set_extraction = XXHASH64 +updatable_views_with_limit = YES +wait_timeout = 28800 +innodb_buffer_pool_size = 644245094 + +[mysqld_safe] +pid_file = $(DN_DATA_DIR)/run/mysql.pid + +endef +export MY_CNF + +define VERSION_PATCH +diff --git a/VERSION b/MYSQL_VERSION +similarity index 100% +rename from VERSION +rename to MYSQL_VERSION +diff --git a/cmake/mysql_version.cmake b/cmake/mysql_version.cmake +index bed6e9f0..b76b7ba4 100644 +--- a/cmake/mysql_version.cmake ++++ b/cmake/mysql_version.cmake +@@ -28,17 +28,17 @@ SET(SHARED_LIB_MAJOR_VERSION "21") + SET(SHARED_LIB_MINOR_VERSION "1") + SET(PROTOCOL_VERSION "10") + +-# Generate "something" to trigger cmake rerun when VERSION changes ++# Generate "something" to trigger cmake rerun when MYSQL_VERSION changes + CONFIGURE_FILE( +- $${CMAKE_SOURCE_DIR}/VERSION ++ $${CMAKE_SOURCE_DIR}/MYSQL_VERSION + $${CMAKE_BINARY_DIR}/VERSION.dep + ) + +-# Read value for a variable from VERSION. ++# Read value for a variable from MYSQL_VERSION. + + MACRO(MYSQL_GET_CONFIG_VALUE keyword var) + IF(NOT $${var}) +- FILE (STRINGS $${CMAKE_SOURCE_DIR}/VERSION str REGEX "^[ ]*$${keyword}=") ++ FILE (STRINGS $${CMAKE_SOURCE_DIR}/MYSQL_VERSION str REGEX "^[ ]*$${keyword}=") + IF(str) + STRING(REPLACE "$${keyword}=" "" str $${str}) + STRING(REGEX REPLACE "[ ].*" "" str "$${str}") +@@ -59,7 +59,7 @@ MACRO(GET_MYSQL_VERSION) + IF(NOT DEFINED MAJOR_VERSION OR + NOT DEFINED MINOR_VERSION OR + NOT DEFINED PATCH_VERSION) +- MESSAGE(FATAL_ERROR "VERSION file cannot be parsed.") ++ MESSAGE(FATAL_ERROR "MYSQL_VERSION file cannot be parsed.") + ENDIF() + + SET(VERSION +@@ -80,7 +80,7 @@ MACRO(GET_MYSQL_VERSION) + SET(CPACK_PACKAGE_VERSION_PATCH $${PATCH_VERSION}) + + IF(WITH_NDBCLUSTER) +- # Read MySQL Cluster version values from VERSION, these are optional ++ # Read MySQL Cluster version values from MYSQL_VERSION, these are optional + # as by default MySQL Cluster is using the MySQL Server version + MYSQL_GET_CONFIG_VALUE("MYSQL_CLUSTER_VERSION_MAJOR" CLUSTER_MAJOR_VERSION) + MYSQL_GET_CONFIG_VALUE("MYSQL_CLUSTER_VERSION_MINOR" CLUSTER_MINOR_VERSION) +@@ -89,12 +89,12 @@ MACRO(GET_MYSQL_VERSION) + + # Set MySQL Cluster version same as the MySQL Server version + # unless a specific MySQL Cluster version has been specified +- # in the VERSION file. This is the version used when creating ++ # in the MYSQL_VERSION file. This is the version used when creating + # the cluster package names as well as by all the NDB binaries. + IF(DEFINED CLUSTER_MAJOR_VERSION AND + DEFINED CLUSTER_MINOR_VERSION AND + DEFINED CLUSTER_PATCH_VERSION) +- # Set MySQL Cluster version to the specific version defined in VERSION ++ # Set MySQL Cluster version to the specific version defined in MYSQL_VERSION + SET(MYSQL_CLUSTER_VERSION "$${CLUSTER_MAJOR_VERSION}") + SET(MYSQL_CLUSTER_VERSION + "$${MYSQL_CLUSTER_VERSION}.$${CLUSTER_MINOR_VERSION}") +@@ -106,7 +106,7 @@ MACRO(GET_MYSQL_VERSION) + ENDIF() + ELSE() + # Set MySQL Cluster version to the same as MySQL Server, possibly +- # overriding the extra version with value specified in VERSION ++ # overriding the extra version with value specified in MYSQL_VERSION + # This might be used when MySQL Cluster is still released as DMR + # while MySQL Server is already GA. + SET(MYSQL_CLUSTER_VERSION +diff --git a/plugin/galaxy/CMakeLists.txt b/plugin/galaxy/CMakeLists.txt.bak +similarity index 100% +rename from plugin/galaxy/CMakeLists.txt +rename to plugin/galaxy/CMakeLists.txt.bak +diff --git a/plugin/performance_point/CMakeLists.txt b/plugin/performance_point/CMakeLists.txt.bak +similarity index 100% +rename from plugin/performance_point/CMakeLists.txt +rename to plugin/performance_point/CMakeLists.txt.bak +diff --git a/sql/mysqld.cc b/sql/mysqld.cc +index 9fe6d12d..eea38fa7 100644 +--- a/sql/mysqld.cc ++++ b/sql/mysqld.cc +@@ -869,6 +869,8 @@ bool opt_large_files = sizeof(my_off_t) > 4; + static bool opt_autocommit; ///< for --autocommit command-line option + static get_opt_arg_source source_autocommit; + ++ ++bool opt_performance_point_enabled = false; + /* + Used with --help for detailed option + */ +diff --git a/sql/package/package_cache.cc b/sql/package/package_cache.cc +index 8a81734e..30ec6a08 100644 +--- a/sql/package/package_cache.cc ++++ b/sql/package/package_cache.cc +@@ -76,7 +76,7 @@ static const T *find_package_element(const std::string &schema_name, + return Package::instance()->lookup_element(schema_name, element_name); + } + /* Template instantiation */ +-template static const Proc *find_package_element( ++template const Proc *find_package_element( + const std::string &schema_name, const std::string &element_name); + + /** +endef + +export VERSION_PATCH diff --git a/README.md b/README.md new file mode 100644 index 0000000..b77895c --- /dev/null +++ b/README.md @@ -0,0 +1,177 @@ + +[![LICENSE](https://img.shields.io/badge/License-Apache%202.0-green.svg)](https://github.com/polardb/polardbx-sql/blob/main/LICENSE) +[![Language](https://img.shields.io/badge/Language-Java-blue.svg)](https://www.java.com/) + +[中文文档](https://github.com/polardb/polardbx-sql/blob/main/docs/zh_CN/README.md) + +[Windows下编译运行PolarDB-X](compile_and_run_polardbx_on_windows.md) + +## What is PolarDB-X ? +PolarDB-X is a cloud native distributed SQL Database designed for high concurrency, massive storage, complex querying scenarios. It has a shared-nothing architecture in which computing is decoupled from storage. It supports horizontal scaling, distributed transactions and Hybrid Transactional and Analytical Processing (HTAP) workloads, and is characterized by enterprise-class, cloud native, high availability, highly compatiable with MySQL and its ecosystem. + +PolarDB-X was originally created to solve the database's scalability bottleneck of Alibaba Tmall's "Double Eleven" core transaction system, and has grown with AliCloud along the way, and is a mature and stable database system that has been verified by many customers' core business systems. + + +The core features of PolarDB-X include: + +- Horizontal Scalability + +PolarDB-X is designed with Shared-nothing architecture, supporting multiple Hash and Range data sharding algorithms and achieving transparent horizontal scaling through implicit primary key sharding and dynamic scheduling of data shard. + + +- Distributed Transactions + +PolarDB-X adopts MVCC + TSO approach and 2PC protocol to implement distributed transactions. Transactions meet ACID characteristics, support RC/RR isolation levels, and achieve high performance through optimizations such as one-stage commit, read-only transaction, and asynchronous commit. + + +- HTAP + +PolarDB-X supports analytical queries through native MPP capability, and achieves strong isolation of OLTP and OLAP traffic through CPU quota constraint, memory pooling, storage resource separation, etc. + + +- Enterprise-class + +PolarDB-X has many capabilities designed for enterprise scenarios, such as SQL Concurrency Control, SQL Advisor, TDE, Triple Authority Seperation, Flashback Query, etc. + + +- Cloud Native + +PolarDB-X has years of cloud native practice on AliCloud, supports managing cluster resources via K8S Operator, supports public cloud, hybrid cloud, private cloud and other forms for deployment. + + +- High Availability + +PolarDB-X achieves strong data consistency through Multi-Paxos protocol, supports cross-data center deployment, and improves system availability through Table Group, Geo-locality, etc. + + +- Compatiable with MySQL and Its Ecosystem + +The goal of PolarDB-X is to be fully compatible with MySQL, which currently includes MySQL protocol, most of MySQL SQL syntax, Collations, transaction isolation level, binary log, etc. + + +## Quick Start +### To quick start with PolarDB-X +PolarDB-X supports one-click installation by PXD tool, through which you can quickly try the functions of PolarDB-X. + +See the [PXD Quick Start](https://github.com/polardb/polardbx-sql/blob/main/docs/en/quickstart.md). + +### To quick start with PolarDB-X on Kubernetes +PolarDB-X provides K8S deployment mode, through which you can customize the configuration of PolarDB-X cluster. + +See the [K8S Quick Start](https://github.com/polardb/polardbx-operator#quick-start). + +### To start developing PolarDB-X +Try the following steps under a non-root user to build and run PolarDB-X from the source code. + +>NOTE: CentOS 7&8 and Ubuntu 18 and higher are currently supported. + +0. Prerequisites + +Make sure the following packages are installed (for most cases, they are installed already): +```shell +# For CentOS +yum install -y sudo git make redhat-lsb-core +# For Ubuntu +apt-get update && apt-get install -y sudo git make lsb-release +``` + +Create and switch to a non-root user with sudo privilege. +```shell +useradd -ms /bin/bash polarx +echo "polarx:polarx" | chpasswd +echo "polarx ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers +su - polarx +git clone https://github.com/polardb/polardbx.git +cd polardbx +``` + +1. Build + +```shell +make +``` + +`make` will download all repositories, install build tools and libraries, build and install PolarDB-X. +Repositories are downloaded to `./build` dir and binaries are installed to `./build/run`. +You can run `make clean` to remove the installation and try build PolarDB-X again. +You can also run `make cleanAll` to remove everything under `./build`. + +This process may take more than half an hour depending on your network bandwidth. + +2. Run + +```shell +./build/run/bin/polardb-x.sh start +``` + +Wait about 1 minute and use `mysql -h127.0.0.1 -P8527 -upolardbx_root` to connect to PolarDB-X. + +3. Stop + +```shell +./build/run/bin/polardb-x.sh stop +``` + +The core features of PolarDB-X community version will be consistent with the commercial version, and more manuals can be found in [the documentations of the commercial version](https://www.alibabacloud.com/help/doc-detail/71252.htm). The documentations of the community version are being compiled and will be released to the public in the near future. + +## Architecture +![image.png](https://github.com/polardb/polardbx-sql/blob/main/docs/architecture.png) +PolarDB-X has a shared-nothing architecture in which compute and storage is decoupled, and the system consists of 4 core components. + +- CN (Compute Node) + +The Compute Node is the entry point of the system and is stateless, which includes modules such as SQL parser, optimizer, and executor. It is responsible for distributed data routing, 2PC coordination, global secondary index maintenance, etc. It also provides enterprise features such as SQL concurrency control and triple authority separation. + + +- DN (Data Node) + +The Data Node is responsible for data persistence, providing strong data consistency based on the Multi-Paxos protocol, while maintaining distributed transaction visibility through MVCC. + + +- GMS (Global Meta Service) + +The Gloal Meta Service is responsible for maintaining globally consistent Table/Schema, Statistics and other system Meta information, maintaining security information such as accounts and permissions, and providing global timing services (i.e. TSO). + + +- CDC (Change Data Capture) + +The CDC Node provides change data capture capability that is fully compatible with the MySQL binary log format and MySQL DUMP protocol, and master-slave replication capability that is compatible with the MySQL Replication protocol. + + +PolarDB-X provides tool to manage the above components through K8S Operator, and the RPC between the CN and DN can be done through private protocol component. The corresponding repositories of these components are as follows. + +| **Component Name** | **Repository** | +| --- | --- | +| CN (Compute Node) | [polardbx-sql](https://github.com/polardb/polardbx-sql) | +| GMS (Global Meta Service) | [polardbx-engine](https://github.com/polardb/polardbx-engine) | +| DN (Data Node) | [polardbx-engine](https://github.com/polardb/polardbx-engine) | +| CDC (Change Data Capture) | [polardbx-cdc](https://github.com/polardb/polardbx-cdc) | +| RPC | [polardbx-glue](https://github.com/polardb/polardbx-glue) | +| K8S Operator | [polardbx-operator](https://github.com/polardb/polardbx-operator) | + + +## What is polardbx-sql ? +polardbx-sql is one component of PolarDB-X, namely CN (Compute Node). + + +## Licensing +polardbx-sql is under the Apache License 2.0. See the [License](https://github.com/polardb/polardbx-sql/blob/main/LICENSE) file for details. + + +## Contributing + +You are welcome to make contributions to PolarDB-X. We appreciate all the contributions. For more information about how to start development and pull requests, see [contributing](https://github.com/polardb/polardbx-sql/blob/main/CONTRIBUTING.md). + + +## Community +You can join these groups and chats to discuss and ask PolarDB-X related questions: + - DingTalk Group: [32432897](https://h5.dingtalk.com/circle/healthCheckin.html?dtaction=os&corpId=dingc5456617ca6ab502e1cc01e222598659&1b3d4=1ec1b&cbdbhh=qwertyuiop#/) + ![DingTalk Group](docs/images/dingtalk_group.jpg) + - WeChat Group: 阿里云 PolarDB-X 开源交流群 (Contact group manager to get into wechat group. Managers' ID: oldbread3, hustfxj, agapple0002) + ![WeChat Manager 1](docs/images/wechat_manager_a.jpg) ![WeChat Manager 2](docs/images/wechat_manager_b.jpg) ![WeChat Manager 3](docs/images/wechat_manager_c.jpg) + + +## Acknowledgements +polardbx-sql references from many open source projects, such as Calcite, Presto etc. Sincere thanks to these projects and contributors. +## + diff --git a/compile_and_run_polardbx_on_windows.md b/compile_and_run_polardbx_on_windows.md new file mode 100644 index 0000000..049a4d8 --- /dev/null +++ b/compile_and_run_polardbx_on_windows.md @@ -0,0 +1,236 @@ +# Windows下编译运行PolarDB-X + +## 安装WSL +参考官方文档:https://docs.microsoft.com/en-us/windows/wsl/install + +## 安装CentOS 7 +微软商店里没有提供CentOS 7,可以在这里下载:https://github.com/mishamosher/CentOS-WSL/releases + +验证过的版本是:https://github.com/mishamosher/CentOS-WSL/releases/tag/7.9-2111 + +解压后运行CentOS7.exe(右键以管理员身份运行)即可完成安装,再次运行CentOS7.exe即可打开一个终端。 + +## 环境准备 +1. 安装wget: +``` +yum install wget -y +``` + +2. 使用阿里云的yum仓库: +``` +cd /etc/yum.repos.d/ && \ +wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \ +yum clean all + +cd /root +``` + +3. 安装工具链 +``` +yum install -y git + +yum install -y centos-release-scl + +yum install -y mysql + +yum install -y java-1.8.0-openjdk-devel + +yum install -y make automake openssl-devel ncurses-devel bison libaio-devel + +yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils + +echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile && source /etc/profile +``` + +4. 安装cmake: + +仓库里没有cmake3,需要从源码编译安装 + +``` +wget https://cmake.org/files/v3.23/cmake-3.23.2.tar.gz && tar -zxvf cmake-3.23.2.tar.gz && cd cmake-3.23.2/ +./bootstrap && gmake && gmake install +``` + +5. 创建admin用户: + +CN与DN都不允许以root用户启动,需要创建一个用户。 +``` +useradd -ms /bin/bash admin && \ +echo "admin:admin" | chpasswd && \ +echo "admin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ +su admin + +cd /home/admin +``` + +6. 安装maven: + +仓库中的maven版本太老了,装一个最新版本。 +``` +wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz && tar -zxvf apache-maven-3.8.6-bin.tar.gz + +echo 'PATH=/home/admin/apache-maven-3.8.6/bin:$PATH' >> /home/admin/.bashrc && \ + echo "export PATH" >> /home/admin/.bashrc && \ + source /home/admin/.bashrc +``` + +国内使用阿里云的maven仓库比较快,https://developer.aliyun.com/mvn/guide + +修改maven的配置文件: +``` +vi /home/admin/apache-maven-3.8.6/conf/settings.xml +``` +在``标签中添加 mirror 子节点: +``` + + aliyunmaven + * + 阿里云公共仓库 + https://maven.aliyun.com/repository/public + +``` + +## 编译PolarDB-X + +1. 下载编译工程 +``` +git clone https://github.com/ApsaraDB/PolarDB-X.git + +cd PolarDB-X +``` + +2. 编译 +``` +make +``` + +注意:如果机器内存<=16G,请修改PolarDB-X/Makefile中编译的并行度,否则容易出现OOM,将 `CPU_CORES` 修改为 2 + +![image](https://user-images.githubusercontent.com/2645985/173988137-dc514bdc-342f-4a4e-ae05-88f0ff44898a.png) + + +3. 运行 +``` +./build/run/bin/polardb-x.sh start +``` + +4. 停止 +``` +./build/run/bin/polardb-x.sh stop +``` + + +## 使用IDEA开发GalaxySQL(CN) + +我们使用IDEA来运行CN的代码,并使用CentOS中启动的GalaxyEngine节点作为GMS与DN节点。 + +1. WSL与Windows是同一个LAN内的两个IP,在上述的Demo中,GMS中记录的DN的IP为`127.0.0.1`,Windows无法直接通过这个IP来访问与GMS/DN,因此需要获取到WSL的LAN IP,并做相应的替换。 + +在CentOS中执行`ip addr`,记录eth0中的IP,如本例中,IP为`172.27.47.106` + +``` +ip addr + +1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever +2: bond0: mtu 1500 qdisc noop state DOWN group default qlen 1000 + link/ether 7a:44:78:58:e8:32 brd ff:ff:ff:ff:ff:ff +3: dummy0: mtu 1500 qdisc noop state DOWN group default qlen 1000 + link/ether 7a:e5:bd:1e:a3:ba brd ff:ff:ff:ff:ff:ff +4: tunl0@NONE: mtu 1480 qdisc noop state DOWN group default qlen 1000 + link/ipip 0.0.0.0 brd 0.0.0.0 +5: sit0@NONE: mtu 1480 qdisc noop state DOWN group default qlen 1000 + link/sit 0.0.0.0 brd 0.0.0.0 +6: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether 00:15:5d:05:db:9b brd ff:ff:ff:ff:ff:ff + inet 172.27.47.106/20 brd 172.27.47.255 scope global eth0 + valid_lft forever preferred_lft forever + inet6 fe80::215:5dff:fe05:db9b/64 scope link + valid_lft forever preferred_lft forever +``` + +2. 在CentOS上登录GMS,并修改DN的IP。 + +``` + mysql -h127.1 -P4886 -uroot polardbx_meta_db_polardbx -e 'update storage_info set ip="172.27.47.106";' +``` + +3. Kill掉CentOS中的CN进程,避免冲突: + +``` +[admin@DESKTOP-UGTN860 PolarDB-X]$ jps +13174 Jps +15625 DaemonBootStrap +16105 DumperBootStrap +16139 TaskBootStrap +17334 TddlLauncher +[admin@DESKTOP-UGTN860 PolarDB-X]$ kill -9 17334 +``` +4. 在Windows中clone代码: + +``` +git clone https://github.com/ApsaraDB/galaxysql.git + +cd galaxysql + +git submodule update --init +``` + +5. 在IDEA中打开该maven工程,并修改IDEA的maven仓库为阿里云的maven仓库: + +![image](https://user-images.githubusercontent.com/2645985/173986060-a0cdba7e-04b6-46bf-a76c-66582c83d630.png) + +6. 调整IDEA编译的内存上限: + +![image](https://user-images.githubusercontent.com/2645985/173986190-f647d8d7-4188-4f29-854c-a906f0686ca2.png) + +7. 使用CentOS中的`PolarDB-X/build/run/galaxysql/conf/server.properties`内容覆盖IDEA中CN的`galaxysql\polardbx-server\src\main\resources`,并将`metaDbAddr`中的`127.0.0.1`修改为WSL的IP: + +![image](https://user-images.githubusercontent.com/2645985/173987557-9b2f72aa-25a9-4149-b1c9-8a05cd26c19d.png) + +同时,修改代码中 polardbx-server/src/main/resources/server.properties 文件: + +a. 将`metaDbAddr` 改为 `127.0.0.1:4886` + +b. 将`metaDbXprotoPort` 改为 `34886` + +c. 将`galaxyXProtocol` 改为 `2` + +d. 在shell中执行这行命令以获取`metaDbPasswd`:`mysql -h127.1 -P4886 -uroot -padmin -D polardbx_meta_db_polardbx -e "select passwd_enc from storage_info where inst_kind=2"` + +e. 增加`metaDbPasswd=<查询到的密码>` 。 + +8. 运行一次`com.alibaba.polardbx.server.TddlLauncher`,此时会启动失败 + +9. 修改`TddlLauncher`的`Run/Debug Configurations`,添加`dnPasswordKey=asdf1234ghjk5678 +`到环境变量中: + + +![image](https://user-images.githubusercontent.com/2645985/173987036-5aa9560f-c1b7-4451-b164-82c457b0b597.png) +![image](https://user-images.githubusercontent.com/2645985/173987081-4767f56b-20ce-43a7-9cff-f35fa01ab5ca.png) +![image](https://user-images.githubusercontent.com/2645985/173987109-7ca46936-7f87-4c16-a0fe-73c7d5ab9bde.png) + +10. 再次运行`com.alibaba.polardbx.server.TddlLauncher`即可 + +11. mysql终端可以连上本地的CN了 + +``` +mysql -h 127.0.0.1 -upolardbx_root -p123456 -P8527 +``` + +## 固定WSL的IP地址 + +注意,WSL2每次重启都会重新分配一个IP,这会导致GMS与`server.properties`中记录的IP失效。有一个折中的方法,执行以下命令,会分别为WSL2与Windows分配一个指定的IP地址: + +``` +wsl -d CentOS7 -u root ip addr add 192.168.50.2/24 broadcast 192.168.50.255 dev eth0 label eth0:1 +netsh interface ip add address “vEthernet (WSL)” 192.168.50.1 255.255.255.0 +``` + +这样可以将GMS与`server.properties`中的IP固定为`192.168.50.2`即可。 + +确保每次重启WSL后运行该命令。 diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..ee080e6 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,25 @@ +FROM centos:7 + +ARG BUILD_PATH=/home/polarx/polardbx/build + +RUN yum install sudo hostname telnet net-tools vim tree less file java-11-openjdk-devel -y && \ + yum install openssl-devel ncurses-devel libaio-devel mysql -y && \ + yum clean all && rm -rf /var/cache/yum && rm -rf /var/tmp/yum-* + +RUN useradd -ms /bin/bash polarx && \ + echo "polarx:polarx" | chpasswd && \ + echo "polarx ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ + echo "export BUILD_PATH=$BUILD_PATH" >> /etc/profile && \ + echo 'PATH="$BUILD_PATH/run/polardbx-engine/u01/mysql/bin:$BUILD_PATH/run/bin:$PATH"' >> /etc/profile && \ + echo "export PATH" >> /etc/profile + +USER polarx +WORKDIR /home/polarx + +ADD --chown=polarx run.tar.gz $BUILD_PATH +COPY --chown=polarx entrypoint.sh entrypoint.sh + +ENV TZ Asia/Shanghai + +ENV BUILD_PATH=$BUILD_PATH +ENTRYPOINT /home/polarx/entrypoint.sh $BUILD_PATH/run diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 0000000..ec25b63 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,165 @@ +## 简介 +PolarDB-X 是一款分布式数据库系统,其核心组件由 CN、DN、GMS 和 CDC 四个部分组成,实际运行中,每个组件是一个单独的进程。 + +本文围绕 3 个场景介绍 PolarDB-X 的镜像使用方式。 + +## 1. 基于docker 快速体验 PolarDB-X + +基于 PolarDB-X Docker 镜像,可快速在本地运行一个 PolarDB-X 实例并开始体验。 +首先将镜像下载到本地: + +```shell +docker pull polardbx/polardb-x +``` + +之后运行如下命令启动一个 PolarDB-X 容器,建议docker内存>=12GB (CN/DN/CDC各自分配mem_size=4096): + +```shell +docker run -d --name polardb-x -m 12GB -p 3306:8527 -v /etc/localtime:/etc/localtime polardbx/polardb-x +``` + +等待之后即可通过 MySQL Client 连接到 PolarDB-X : + +```shell +mysql -h127.0.0.1 -upolardbx_root -p123456 +``` + +PolarDB-X 高度兼容 MySQL 语法,与分布式相关的特性会对 SQL 语法进行扩展,可通过以下 SQL 指令初步体验 PolarDB-X: + +```mysql +# 检查GMS +select * from information_schema.schemata; + +# 创建分区表 +create database polarx_example mode='auto'; + +use polarx_example; + +create table example ( + `id` bigint(11) auto_increment NOT NULL, + `name` varchar(255) DEFAULT NULL, + `score` bigint(11) DEFAULT NULL, + primary key (`id`) +) engine=InnoDB default charset=utf8 +partition by hash(id) +partitions 8; + +insert into example values(null,'lily',375),(null,'lisa',400),(null,'ljh',500); + +select * from example; + +show topology from example; + +# 检查CDC +show master status; +show binlog events in 'binlog.000001' from 4; + + +# 检查DN和CN +show storage; +show mpp; +``` + +以上过程在本地运行了一个 PolarDB-X 容器,容器中运行了1个CN进程,1个DN进程(该进程同时扮演GMS角色)和一个CDC进程,并且使用默认参数进行了系统初始化,初始化完成后通过8527端口对外提供服务。 + +## 场景2. 手工调整 docker 内组件配置 + +您可以通过传递环境变量 `mem_size` 来控制 CN 和 CDC 的内存占用,CN 和 CDC 会***分别***占用不超过 `mem_size(MB)` 的内存。 +同时,DN 的 buffer pool size 将设置为 `0.3*mem_size` 。此外,DN 的 my.cnf 文件以及数据文件位于容器内 `/home/polarx/polardbx/build/run/polardbx-engine/data` 这个目录下。 +您可以将该目录挂载到本地,然后暂停 (stop) 容器,修改 mycnf,再启动 (start) 容器。接下来,我们用一个例子说明这些配置项: + +1. 首先运行 polardb-x 容器,传递 mem_size 环境变量,并将数据目录挂载到本地: +```shell +docker run -d --name polardb-x -p 3306:8527 --env mem_size=8192 -v /etc/localtime:/etc/localtime -v polardbx-data:/home/polarx/polardbx/build/run/polardbx-engine/data polardbx/polardb-x +``` +上述指令,使得 CN 、DN、 CDC 分别占用不超过 8GB 内存,即一共占用不超过 24GB 内存。 +同时,DN 的 `innodb_buffer_pool_size` 将设置为 `0.3*8192 MB`,最终取整为 2560MB。 + +2. 如果要修改 my.cnf,待容器启动后,先暂停容器的运行 +```shell +docker stop polardb-x +``` + +3. 找到本地挂载的目录 +```shell +docker volume inspect polardbx-data +``` +通过上述指令找到 `Mountpoint`,进入该目录,修改其中的 `my.cnf` 然后保存 + +4. 最后再重新启动容器 +```shell +docker start polardb-x +``` + +## 场景3. 基于 polardbx-sql 进行开发 + +polardbx-engine(即 DN ) 是 MySQL 8.x 的一个分支,可参考 MySQL 官方文档进行相关开发工作。 + +本文主要讲解如何用 IntelliJ IDEA + PolarDB-X Docker 镜像搭建 polardbx-sql(即 CN) 开发环境。 + +### 启动 DN&GMS 容器 +CN 的运行依赖DN和GMS,GMS可以看做一个扮演特殊角色的DN,所以在进行CN开发时,可用一个容器同时扮演DN和GMS的角色。运行这样一个容器的命令如下: + +```shell +docker run -d --name polardb-x --env mode=dev -p 4886:4886 -p 34886:34886 -v /etc/localtime:/etc/localtime -v polardb-x-data:/home/polarx/polardbx/build/run/polardbx-engine/data polardbx/polardb-x +``` + +该命令会启动一个名叫 polardb-x 的容器,通过环境变量 `mode` 设置容器运行模式为开发模式(即 `mode=dev`)并将 MySQL 协议端口和私有协议端口暴露出来以供 CN 使用。 +数据卷映射可以将数据保存下来,以便后续使用。 +`mode` 所有取值见最后一个小节。 + +之后开始配置 CN 相关的内容。 + +### 配置 server.properties +首先修改代码中 polardbx-server/src/main/resources/server.properties 文件: + +1. 将`serverPort`改为 `8527` +2. 将`metaDbAddr` 改为 `127.0.0.1:4886` +3. 将`metaDbXprotoPort` 改为 `34886` +4. 将`galaxyXProtocol` 改为 `2` +5. 执行以下命令以获取`metaDbPasswd`:`docker exec polardb-x bash -c 'mysql -h127.1 -P4886 -uroot -D polardbx_meta_db_polardbx -e "select passwd_enc from storage_info where inst_kind=2"'` +6. 增加`metaDbPasswd=<查询到的密码>` 。 + +然后开始配置 IntelliJ IDEA 相关参数。 + +### 配置 IntelliJ IDEA +设置环境变量(Environment Variables) `dnPasswordKey=asdf1234ghjk5678` +由于 CN 编译过程比较耗内存,所以需要同时设置以下两个编译参数: + +6. Preference-Compiler-Build process heap size 设置为 4096. +7. Preference-Build, Execution, -Build tools - maven - importing - VM options for importer 设置为 -Xmx2048m -Xms2048m. + +至此 CN 的运行环境便配置好了,之后可以启动 `TddlLauncher` 进行相关开发和调试。 + +### 远程部署 DN,本地开发 CN +当然,上述过程也可以在远程机器上部署 docker 容器来运行 polardbx-engine, +对外开放相应端口(4886,34886),然后: +1. 修改本地的 resources/server.properties 文件中的相应 ip, +把 127.0.0.1 改成远程机器 ip。 +2. 登录远程机器,执行 `docker exec -it polardb-x bash` 登进 DN 容器。 +3. 修改 storage_info 的 ip 为远程机器 ip:`mysql -h127.1 -P4886 -uroot -Dpolardbx_meta_db_polardbx -e "update storage_info set ip='<远程机器 ip>'"`。 +4. 本地启动 `TddlLauncher` 即可。 + +## 附录 + +### 1. mode 取值及含义 + +| mode 取值 | 含义 | +|----------|------------------------------------------------| +| play | 默认值,即体验模式,该模式会初始化并启动一个完整的 PolarDB-X 实例 | +| dev | 开发模式,该模式会在容器内部初始化并启动一个DN进程,该进程同时会扮演GMS角色 | +| dev-dist | (尚未支持)分布式开发模式,部分特性需要在多DN的场景下进行开发和测试,此时可以启动多个DN | +| cn | (尚未支持)cn模式,用于生产环境,该容器内仅启动一个 CN 进程 | +| dn | (尚未支持)dn模式,用于生产环境,该容器内仅启动一个 DN 进程 | +| gms | (尚未支持)gms模式,用于生产环境,该容器内仅启动一个 GMS 进程 | +| cdc | (尚未支持)cdc模式,用于生产环境,该容器内仅启动一个 CDC 进程 | + + +### 2. docker build + +```shell +git clone https://github.com/polardb/polardbx.git +make + +cd docker && sh image-build.sh /home/polarx/polardbx/build +``` diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100755 index 0000000..4747f7f --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,152 @@ +#!/bin/bash + +# Copyright 2021 Alibaba Group Holding Limited. +# +# 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. + +source /etc/profile + +sudo chown -R polarx:polarx $BUILD_PATH + +RUN_PATH=$1 +POLARDBX_SQL_HOME="$RUN_PATH"/polardbx-sql +POLARDBX_CDC_HOME="$RUN_PATH"/polardbx-cdc/polardbx-binlog.standalone + +if [ x"$mode" = "x" ]; then + mode="play" +fi + +function cn_pid() { + ps auxf | grep java | grep TddlLauncher | cut -d ' ' -f 1 +} + +function cdc_pid() { + ps auxf | grep java | grep DaemonBootstrap | cut -d ' ' -f 1 +} + +function dn_pid() { + ps aux | grep mysqld | grep -v "grep" | awk '{print $2}' +} + +function get_pid() { + if [ x"$mode" = x"play" ]; then + cn_pid + elif [ x"$mode" = x"dev" ]; then + dn_pid + else + echo "mode=$mode does not support yet." + echo "" + fi +} + +function stop_all() { + polardb-x.sh stop + rm -f $POLARDBX_SQL_HOME/bin/*.pid + rm -f $POLARDBX_CDC_HOME/bin/*.pid +} + +function start_polardb_x() { + echo "start polardb-x" + + polardb-x.sh start +} + +function start_gms_and_dn() { + echo "start gms and dn" + + polardb-x.sh start_dn +} + +function start_process() { + echo "start with mode=$mode" + if [ x"$mode" = x"play" ]; then + start_polardb_x + elif [ x"$mode" = x"dev" ]; then + start_gms_and_dn + else + echo "mode=$mode does not support yet." + fi +} + +last_pid=0 +function report_pid() { + pid=$(get_pid) + if [ -z "$pid" ]; then + echo "Process dead. Exit." + last_pid=0 + return 1 + else + if [[ $pid -ne $last_pid ]]; then + echo "Process alive: " "$pid" + fi + last_pid=pid + fi + return 0 +} + +function watch() { + while report_pid; do + sleep 5 + done +} + +function start() { + # Start + stop_all + start_process +} + +function waitterm() { + local PID + # any process to block + tail -f /dev/null & + PID="$!" + # setup trap, could do nothing, or just kill the blocker + trap "kill -TERM ${PID}" TERM INT + # wait for signal, ignore wait exit code + wait "${PID}" || true + # clear trap + trap - TERM INT + # wait blocker, ignore blocker exit code + wait "${PID}" 2>/dev/null || true +} + +# Retry start and watch + +retry_interval=30 +retry_cnt=0 +retry_limit=10 +if [[ "$#" -ge 2 ]]; then + retry_limit=$2 +fi + +while [[ $retry_cnt -lt $retry_limit ]]; do + start + + if report_pid; then + break + fi + + ((retry_cnt++)) + + if [[ $retry_cnt -lt $retry_limit ]]; then + sleep $retry_interval + fi +done + +waitterm + +stop_all + +# Abort. +exit 1 diff --git a/docker/image-build.sh b/docker/image-build.sh new file mode 100644 index 0000000..1b675a8 --- /dev/null +++ b/docker/image-build.sh @@ -0,0 +1,16 @@ +set -eux + +echo "Make sure you have already run make successfully" + +build_path=$1 + +rm -rf tmp && mkdir -p tmp +cp -f entrypoint.sh tmp/ +cp -f Dockerfile tmp/ +old_pwd=$(pwd) +cd "$build_path" +tar -zcf run.tar.gz run +mv run.tar.gz "$old_pwd"/tmp/run.tar.gz +cd "$old_pwd"/tmp +sudo docker build -t all-in-one --network host . -f Dockerfile --build-arg BUILD_PATH="$build_path" +cd "$old_pwd" && rm -rf tmp diff --git a/docs/images/dingtalk_group.jpg b/docs/images/dingtalk_group.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b29ce25afc2e55706446cdb26aef6d5b2c9f286e GIT binary patch literal 45312 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 PLIdpKkb2Cmj#;A{Yk@}lq_6e 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 literal 0 HcmV?d00001 diff --git a/docs/images/wechat_group.jpg b/docs/images/wechat_group.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9694c50a912a6618b3b9009bf8e31c016811f5fb GIT binary patch literal 45890 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ƍ!8VWTC8cMoC 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�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 literal 0 HcmV?d00001 diff --git a/docs/images/wechat_manager_c.jpg b/docs/images/wechat_manager_c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c7cebd50128ae912dc2d0b470aad8ce22e2cb7d GIT binary patch literal 21156 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�Su@M#IWx`^EG)ha^ve~IZTw|h0>BTXuJKXz4FMcLnA z=4@kj*WrJTy}yQCt^N_%wKbJZn}U}q5cfV0#YG_1=I14ZT2E!4&+^R_@XFWNUekM$ zpHW^hpc%JS|EA$>M1Q4hz@S74g3;Okii?vbP1lEJ=WD9T{#9#+63j;(@)5oRlf?7f z!O=PmQHK}i53>yLRhikLSuiVc zhmPf_B;o|;PR%D9&SEF>IP?o<^_CmzE!dxVTxq<&p>$aBO28qOKN#vH#G?y410N0b z(Y$*IFGA|vL5fLIe0w-B-8xYj=o!3h)i#(nn3L0}dX1%30%cAe24heRK@60kzpx4+ zHwfSg?BY={^HXC>7{;N45bvrtT@g2IE1U}*n=oK|?jsP>`m-Js6GxFn9%`%~TGsxg zRh=8WrZ*{1QGvMT>4vai{#pEWO3S)K9wp zfzYc(tm-wJH_Nd-M^N*V8#{DI+{gKbviOP!Jk5mZPx7QI9SC)Q+>raJMK8>_+!}BxkE$467 z))*6~0unh0X&6v*3F3*Pi$I^E@?hBDZY{F*C%q}j@HoRf-2mk+j1Rw^H9f>0mg}q8 zdCkuJm5cV1uGkkIo4#wnj2q1f6rp>-RE-mn8)UkLm&GE6V-3SA{kCPyIg(^1U+eho z?lgH$7ajJ|RQ!$g#asWd{W%G%`w_SgtO36-bw~jVXWaJ?1IN(|yLgHj@JDAp5f5Ip z2dEz)Pk6u3usZB20qT(b!v~>Zyhw-WTG*UCC4R@7_)u#CcdRW%|K9oAl^W^>0a~s1 z&wMwE!rTK~GC}Qd+6XfNrv;6m-mLa;4-NEGA+NI1s6U7F9G%RSRJZ)6kG3^mnmJ?g zX|()E@M+X!d6!Bingi{vlGsQPHe`t?v7%-s1U}DIh`DUqY*A_E%&Gd}h2qW1L!l?8 z3=WvsU!QvzXk zh7Y(e3>!TZWe?GTE(EH#7y>O1YeG*aTogg9|E16{2Fu%wThPKQUof&9Ucb0?YV)Qyonv zFVNMwhp1a6zh4}liKe+SUjlCEc)iR%-pqUHFMWcE#7Cp^WVGMdN>l8jN$xSD9M|k` zRv%TL2-sD@j@8XQL|ocn0Q$}O^Y}k0*?WivFSZ>twErt;LseKvB=b>mDku=RGIG8{ zU@S{}Tv7Segt3$P!jyDN%BjAqNUXi!!nmJ-+hS#^ zW2Lv)@#6ebCu_|lQqIYgAg(7m&o5nS66)Q1Xo*SdQlmy+oNCEv32uKAh zK#vBxd~ip;(~6E#0{ieO#N51~hJ7nJ{ne4&?w#3wxs-QlHnm*)O=UPaIv`lbJ;Hqi znovC`P#)7cJfly0&3vX=o!km!g!1w(Q=F@5#X%*`v)&@MuiSl8TdtNR=*&$MMizC0 z@9SP>szH782hiTt;87KZc(O<)tc+RwvC*U|oL6Qd<19I#N~&e?d_(eb^kvnHH(CXc zpY4(1Ov`7azym*o*Grh;OUFVV_YnL9QYBEQortwvoKMErOHLFnRv!W}=6cu(F{{_* z&o#C+3#^3R_K)Z5MBCM9^xG^ZhAbm_*1@cwZMVfj-bo`ZA+-&TBAj0x@9ScB=2 z*v%RGxl4o&U;R_g$6v{h1!Qk*3bUWr$w}4Sr_=RE0pe1k3*u%8^-cHMmFOPO*Lks@ z!&0Eg#h8Gei=g|GzQxR=r3*0K#XUej*#x%*!(#a=kg z8AL($&%d!AK+ni84s1k+(>1^2M6wqG`T`HE=p)S*Ef$@YANiWsD3~j+UU2wU-nh&wvGyT3|8rZnE=Hq5R@&-qsxM}U5#Q}WY@Aa zz1*sD#?kS>rwtRzyJVB=S+=bQj1&Y8g{jDOhTeFT_WHIe1_pgF{vyH3w4T5?SORe` zQKD&8RNEe<6KJW3?Zt_KUT3i{%F5EIW-ZyKt>Xc%_O62Z8fuP*6VC8GSq^=Q9LxkY z5=p4eRLs3SgqTvtQ7)%eyca?z%)qT)ibdt+oyX)3nj=EbV}A0y?n zcRkaAl^_&sbf%>Nrbr~_FxC{-Wi_YWOYk30wE8&&<$z4Y#zoIELYf$Ii6a17E>=#eLG*XE>sB}EV z1`X<@E+uwV3uA@95L~S{W~@cLezj`+y6EG4^S((8Tj%yOjSsKhNxZpqTGr*kY1C6Z z#bL| ze_X$OXJe4Po~0o6#{Ul(&}Ksw#w7~SxfSm$2M$v?%v?XW%a_isi>2jK-Upu`PM;t9 zIMQ>#Th1lP{Mm62gMVc2VhW^mm{o>K5bUy2E;yOcVquZdUZbglb=TS*F~~WvXw*W% zX+kgMOhxiSYf>vYS^mnbl*QdNe&0%j{lSAD%rZYf`){&6z{o>GKvO1JoPHE*SHsLl zliuKt)?^RN3p1=0QG7}aO_yI6&7PO^1PE^XnhNX4*_T_Ze(PRHn9w<53$KbLZWO&Q z6h*XHG}$;*bXa>2akzu~dsINd5cgZuQ&XR+q`Xxeh|IY)wyR=YGjns@GHL{ zo~slU8UcPn0MKOu`&RQr3@r=HUPKbnmLr;l=X!I)#N4ZvC&k>;8yLzof%-b9WA1`w z{lS9J5~n=J9dunas3gCUNsXqhz)uMUCuu$)lJ6n(&%{=Ue!=;1<&J>>=NKF9cLMA9Txv@aPfbze{flIt(`9*ZsFw(n7fGVM-r(7E2 zE>&J`e?D7LAf1pJzrL?#Ibb?kb>D4HY_4FHqx$itrr8Zi=+zL+@!f@Ap;| z%Q~MH)jhnV31!aLxafZkL)cS8M2-{tbbzeNicIz;#A@X>cPb2Y?8DbtifK3$ z=C-%qI9KB6`zvVJ_mId-#c{cJ2|BXr?hnG_b53{4UgX^MrnAGMuLY25;c(HuNXjbX z5C-Bo6S^R2vLPkjM)^5DC-wH~Q32jmOZ%#JpO3X>N5bcy=#UV>D=3Qn9s)e3%@A>e zcxByJqll-LhUDfG-89^V}bB)v&mb0{3YuUR@@w3bW@O;3xHt_{DNcH<5@ zEpSQ!;)m5)>}%{*_;?Si%FH%A8PRkWZ$94c>b)@J!K)-Ta=1@onEi*u+DcwfQoR42 z9O(o-+h1;UocA805m!oA05irQ?q8wLr?Gb4en3t6zKh|hOo#2vUB(zn&OC_I$<4GBtBxG$zQU_cQ$(G`HUm+)i&>pQnhaU6?Hb51-!iC z*KOaQoDh%xl1eJ!jW(J0CD7&6ewlji@+5A5#JTftMpO)iyo3GdPEhe}jqh6{-&!n; zLUK2?-6MY6y`ODXLSPMx;7~+duh5q=s!Dg5W!fES_6!oL_Q_4#N_cZa0n$?p#m0Kt zlUBrh0wWHUDYxsR8dbm&yKN&Y3PsJ%67)^28I^KrjRnt0;Z4~N}Q$91Zu;kDwx z&7)C3AOSosLPk+-d-FOJ>Ol7@?`sa#al4W@@0*Qdi}_0*fI61~w>A&b#Kw*^Uzgy37HO>O`~<+FM~u$anq#!zgkO!Bx~`V4E^0jC?`dH+8cu{JxB} z@P2<00YnrGF0p8ewUst)VHCFU%%g)4k9_2F4EBm+)UZzvB=vZG>T-T>Hs{jaZjH!E-AERVT7RC}qenpW)<&sDXXg@`&ku z!^xgIabM+Tzh?Id%jYkA@gM0mFEeJj!g9A00{)*J>o5NYaKWlI#P0&4ov^1Oq2yE~@iMo*BG9q#P)ufG)u7XfbB{_vN>s)g7=5AmsP&q#nPP1XAwqq7m z_@OyMgH~pAXazK!n>TlKv_V`yl`^5~==ZiI$nz%28MS-U_27WCf7?|v9dy4Z<4`5U z{}x>Eq}!xxL)@iHr}Ta;RDF6}&NX94S;l)qpC1m=vV^HsW!v4q<;*TsHIsEX?wk^V z_>kaLDvA_HZlj;YN`ZZ)*S(yNQ&tn|XRIz;w_i0QmqR1X**9ONeGqr6bWuGllh5>E z=5?q8UD5V!&>Oq7DMnLEeKS7iIw<_CY8q-YwaOmknEMo>6Jg9p{esa!0IjeOJ9BX{u_0X z4!rKRH-ucTc2k03q{2<0*c5s~T(EIOB0wYL234vJ)l*F#vcjDhI8J4KFVk3pdc4d% z^GW{L7W&4Lj${~#jphh(%Td*7pJ5q+Wva`|00ryMK=3Xl1>gc%SG&dV@y6vYLx#EX zH5sO~#~#N|KKwL#cI^g_D941$ZFI%f^dK#pSqI7Err{_Q7vmOajzv)hy3a`+q=x_Q+M?c4`vL1J6r?w$m9fXfd03UC;lAx#6Gs1%2X zZVS7kKVoBUSnv*VYx0J*HRZkYiaWEvYNzQD{}*@mCkQ(#njx+Wi*pOJynP>4WO06@ zhknM#@Z5{(*7!hC|ZTnXv2E z^)?^RILNWo>%2cOxv6!1EvRB&>^zSxbn16d2Fq7n0F;%_@Pv=U zU4ZcV{?zDdUqk(IWugX`Y)f`;p7inwo!NRaXDy?pFJ@^mkXTOI>fTMmo~O#?W^Jdx zm)Oo!O^7yD>y0K?4@JafsOtFny@`l2AV=y{D3b8sdPJdZmMV! ztSlSy7zejVtBix|mGyfgOMQwz9RU&N!Qd#xke1zsosw*`?L2I7oEEifK^%%EYsSJ`Q13)$dp4h~oY`!+x~aJ4T8@E*m#*rM-T^7{Gm)r`($F z1O6t*d8uQxjn530r)yE={a%aO`R+q2%VCW-#w(%4EAge-x16!P4p0M{^pa3pzA;U0 z1mF=HQRKn0x4$}75~9LWH0DJ#?=?}^e6?x-SK+iHi575(GGDeeJuYdAt0&+{*#@8w zXGLLrHw6$?Xiur1O6X=lmtIH}EBY>^cYeYE$$U{gdoC)(k?u7&Tb{8!vAEz=J9@*O z_fD7NzFTOYL8`AnVuG|nuq?ET^Uv&V6)HDs+ivVw`WZ*dhwVW)KuRO9V=sFy5{QGe zf-i=WJ~-v9ExXz{r*Q*K7diEz)vpDZMsND8Ozthi9ijbCi*mppltDO^M`wjTqbUyQ zoHTyslMZzsDLv4(0yKAuWL$ps)vIZe?Q(xgUgYM+z~~KvyV% z^a#>ozQJiRctQG-qqxOz9KaP)WgeLH09HuW-q?^5rNW_ibrx6DKd$pVPZO3;pKgrz zdt%#-uC*n{!(gx+*NYL`KzjvFzs3lA%_+WVYH4U}Z?2(cJbk7xF7Tn_>f(^-+*6mF zcS}MOw^1;h5+V5DMSw0e;1S3U_2DVzXylLi`pnD@f!Bo#RzQ!*r9`@$>8O%op$uW% zt)9mP{K+ zcH^ik2ZE)_FL<3TFbt-hD3cF2Run7?RMJ2wlTd!`G=Cc>vYc zYNA@XxOLRPj)9&e~Y8H2}xa9VNCkE1&u zh)Sk}69GIxl-v(J%5b_MC|ON)be;C;er7dI9rXly6sej2MVbh}=W{yWrWV9SP zz#k3qb^q<j#$tlYB3kvC9Q~4L`>gd#slRr_&qsJz zeI9E5D&)4x%Cg@o#u^r$M64cINC~7(fOHD5B!!PD0rPsKghn@1>Ss^m4Tr{Tns3H` zZoAj5cRwZU&ezcDA9z|YI7vT?BNA%ipcoPf%>#ThB>n;)Vo|(*jO;zpdVBxFhOcX# zj+k~Qc(B~%Zc;ieA-RVjE5Yo?plp#FJmHHIji7pII_lbpcs~bGpHB&^DDp9DH?Qv9 zP*+Rp$3@i7duC6z(MssRYEb(!t(aNIaDN$LYsxIqNM|E`$*rW#b49RP>HXN9M>>`g zrd^xrQ|A6~Ju@x#77*09a`i!u@k!3*Niyt>u)}II7E5FZeldVmD*GJsSwnROAnxL* zvSGd7JL*$ng^%sTjm_!*-YZO1z@3HGnzr8vvE0<@V-%=^mXS|MT3B=&GPP#N9ww!wmwpTk#B=inTw^ zxgDBMoY$+k$K~;t+G+`T(dQowJSu%WjwOU3ZX5gl4sNF&(x!Pg^^9th7%geX)rmKcLXBa9ChwUHpka2CEZkcMnna)RVph zW>QyCsnYESrz{rvY6eeeBrL8>^9*F^=Sq-XkG`$TC%5ZUHc=*ZBE4c$WN2E-3+6YLEjVOMTNE|YkQf2Vnvhc(Y#n>DOMfyriaaccb531k|F;AWV(zlumu@OM64Dh5YoYssU! z;oVxVPcE%qkAZWSNIcA$Ot=K)jx%i5M*&FFVWk;ex$xri+uxTkw`+z9mafSQT|SW0 zQV>Rtu?z%t>aH?t3|#59&=9_+d}D`-a-=9{QayUEd^Ru&zUdjGXH@j9fBxh6(WKYk z87*=)J0+4JzgqBbQJC>J;K8&aOlT^92aUkc44F?~)uU58Bmy}w>zACZOX~A&iWaAP zPuAOJhIE7&nuWR@y9Jl~z;mm?P&vj^lVixZ(;a?j04dNNHU=kp0^d?oe5_ZKY*uRVvp}3;%mz6X3zLyi`;9k8{M*5NVpv=E%37C zYel5YVNn(4eRxmjkl-=f6u?ITJ;O`$1?jIM*6l!G$@FLCl*V8o4{en1l6VQ0rtLBJ zdGPR!Wexu$58#BRzA1v92=RrDHdrAcE-EQT#UaHm;Mt_X1zG!%l5F&h_Vrqw{oL#C zhOn;xh4KEgn4+_E-MHA~I!i_a19lI)7SY>o7#{S-vufy3XcP>5^&S3sb_cyT`M+zh zU7zyHKs*4=vPbhKC6&?=qXJTh9AVUc@u zTJ)k!%L!IiYxD<^?qN_KInV<5NQy%|uzu#4nEL*Jp{jSDX#6;QN$KqFJ7Vm6&9a)- zVSC&5nO2<<-r5tjsz%baKnsT0w%`PtAi{LzB4?*R@>1hyC{hdzzVewIu=$`gg*%XZ zv&qa^HY8F&v`4M-h0Dpq2lF8fG$|YQm|^f=4a!wBggv_m6boxHh8=+#-Xo6WT9c9y z4htIed{#A4EK$quS2av<4DH}A2fTsK$CI$f>(+2#8+HA0$ z;pJL0w5GZKo_t5=H=ZLz3o&mnG%?_bJMhYQ!-Wu(pNW(u@cDPK0h&BR#?W?}PzS37 zeApgBk?mXLOkG=}YF`w7EG7gNhWG1*RhBY>=;&#U3YV5kkLWmp>vPCUfS=SbUvJhl+QI6T8`TjX zSuxYz^yi^%_@%y*-V%$31dD`o5qGtZ?KCvqf60%2ZAT!j;z60xUV=y50CDCWzgBg; z!D+`+db|>oBsA_7*4`8<&k}1zkgoDP=w(+d33}; zp5(7`W=zyTT`_ED?y-!Mu^m}ZJArum+ktzk7g^XzY-DRtSB9oQQDGc9u}Yfk4&2YM zqzuGD^7ijvID@`MRQKPbRX^AD7udrsyhB&4p}c?}2f5mtl+%nk&QPz!k+M8Ye=nH7tY|5%V$6=3JpKcxz zKJZI;PGnT00F5L@=KJre&iWw3jO%WX?8`drtaURKcfj?o4!sBBaieT4U^ZY%_VF?w z0Pesv(BojzQyq^N3*3^S4##UK@LEX9_iB;D%VrLTTG%ZLTsQXLl#A~{=4<_9=6oV1 zUxPLrhPxOcv#8xS&kv2j;xe!y0LzCRTpQFO!#E2HEg*$^(5cEaJm36WMC_tC^O88X z-0bQM@dSIu#S7nV6+h0h1T4ik84{v&A>2nP$*~Ru&~?TjG{}ug=+@F|l+tS&Z9i4% zG}ZT7uKl*NQaddy%dy=NfBW!M`n`~4TNt)CnA}0Tozka$ZiZR-60AS_0>@OwEpwMY5Ke)MQ-;`14C7HNr{a}2xc^ys0g&f)5nHi#GYI@!-NpYI`D z=2`8aDSSPq-@-b@P@1}x^n9%P^|k&r;-+t0`E{qay`vUEivF$os-irpUoPC@s#FhH z{c{t7RV!7cKX6)m5!FLTd?5F!dNGrCEleyV*i_o2xxGG1=j!ZTu2-K}Zt#zMQegA~ zZd+4u?H-&IVqb&j-4+4BzR;7Wl(%^UT#VzvFQ*48=8R%W)78FlWZW1#yo5RViqnVu z+jK1$Q#wyEM<$>s*R8=5=mJ zM=XWpPh5z$ogJj};NV@Nn4mI(fi8b^AR&De_c@SMrHtnLYHv6FTdc2F?@Ok{bZhh1QzgYFyj{kln@a($$5og!A$KC!(ep^1~A;`0ZNupsCyva z^BZBjsOe2@?ZPKJ+pkZpFU%*xin1%5KuW@k)vHV^bjf!S1C!t~;Oc|cmD5K5G<_lE zU5$KNpHtd=l*OC>_X10pq1u1}>`BA5S~W&Z8|BpCg>UIFlX8OUBtDg{KlA-V{5?*D zajU|rj_SyL%Vt6QqvAj6s<*PL=iPdKD+qH0=rTh4pr`6clW@RRpYac~*pL_K9-t1S zH7LP3$pd4%bOLB1=ScrY>iclS56#+FV?D>Cu{G13iiZv$8vs&KB|WHmqw6`WlCJ#V zqh55H2fPY-2kD#-XnAz`oD~Fm+;0|N5EhIXuKv$eZtJn4q(Xytl1{;CFW7N8jLiQR z3;+3l-NFw*HmClF!nRlfsZmORnT-`%+De>n+(YzdrcQKlQ&+oAsoPSKaSXZWN_+3z zxf3mQS#ulqpX5!Nvvie@#IpK7d{-23TJefh91Wma0+d^M3_;!YGgNc&%y>a?^>RyN zzBS*cJngW!GhZkPqFYLxhCz)zn@O(M@34Gp&IFY)3|&dAH)VSX;`tI@NnA@V_W>yI zUb#1Rv{gAo8@)v`llXxse=x5oK1#KEKdfd*EqF>GYD1G^K0u3LKEXy;c^e9i1t@Ql z8e2ZM+r%8nrG+&Yrv18h+k9pvEbwuL`oJNUp*dVPN`w%YY6g(90Z9#OF)WM{>6(Bi zo&#%Hd!Khpn3?;@NnNdBsHTbYec{|?VT#Io$W%1yjwyzf84_TNo=#+`QCLreC459$r96*$iWUBaSa zK=<%?0?d*RFuiC-b>%$8@)R61r&mJn_YmUkuxG=5s%UZN@)wmYmDeacr;8@?DFJ@$ z6Cc-KB~2MGEPC=bDoWf6zJnYN7YvFUS3LzZM9 z><3VC&xL$?Aue;rpH24!-Q4qu?REhi{$T&>j|{Ha(wcB`aE-C}m4pvLK@!@z;p$J_ zw~_;{v!$hXda`HSo1{Ia!?N0Cf+p3xfzK{j*u`ci!JRV+_o{BbrM%rr+N^3vyNiB2 zE36eCC>Xxnsv0`QMdUEmm4Y3DeP!^id2mN~Oj5p-!6Z)c9Gu~DFYj^+?5*>f6U?>X zQu!&Lxsm1cv^hQC*$IQ@W4{YHL|Xc*B==UN~wo9cvZcJtsP5Afx777_h!Uah5R+Am1B#H%9DEx-S%} zUnBiaW@C6N8{+v*_r!98awQNE&dXW__jE{rx>U6J*b0U3SHkX#*8!U-FnE%SpDT`h=2Ik{vD2Hih9Y*&TrK({ zcg?2qyP&5XU;wdQw4X{y2fR^8t>Wh(2Q`m5sIvtib2` zEdi?-_sZF?*DdqH@zdI$#ZSw{9zkX+W_!vfQPTu{>17jv0I7@(;&Cdo|K9jVfcXf1 zzj!A`{Wp3BH6wMUU4Hmmq&VYM;qz5=PnIDs9EHsUNQH#@Jp|)W9_qu( zGhMvT|E04Wb2m(&s^o_)%_!GQs4Gxy7w_btH)%N2mSG}`$-7PC3Sa>rF`fDfmB660&w7L+V^j)KHeHG z(+q3{r%9n>yKm301y(t(-FhD`^J&a6_l>I$Hk;iE&od|@-QiP`e68chqd7YaP? zxsgMMqwYTS1ir?+MgL1q@>We0xJb`)r+%Wjfqr{Pv%Sdgc4TtkO0C*`ZI{VS94s{K zk?^!bLbhfuz$yKmnBs^etX;>*r?(v0%(lgBaqk7E_N@ly(;0pl*EfR%na%Bg*mm?G z?#oM41QH1~?bwZ?SZ*a-RbZ7y(Vj@8S5!`7Qo9mXj_^gcDK_S?Nig5aiv*o%-gnOO~4iJ1n$3zBZ;l#Jx?NOrNthNubuz(ZpG zZMB0z>O-<#FSwN6j)xv46sdqm!aIi(2(_yW5nkFT6OThWShy}&b546VI=I*G42H^H zjD&)&6@^9K)L(XMnJ#$ZiLhM}VMtttRYW4Q&`=pSjb`c4!}UP&dXvc=+}4$5K{WCS z8kc{APN;%NvXp)^d16J~R}0&8d^_`zU_A@d59n&ea6-CR9$0K`LH&gRvgp&bIdQ6g zS@j}!z(#0&mj1Z?Pse0eZ}!qhTj@DDsaj_~SvxS6;nn>gbMb#x;YB~itm)8#=HS#m znhzR9)l2r}OeX)dvb|o{oNe789QN%L`cl!Tpk-v2TLk%e+^uH3>n-82XHRZsHGTI^hoaWmzu$$-iYVvEd(M6BLj4m;%hj`;dEJS1Xu;o%^BKMk-KC~ z6`mh7TJZWcHHQI%nl)`fgP=Bd`y5HT3f-%_&~T}4*|>YKE}bw1p*Pb zZbsShMjZ;7aZ*)Q+?^TR81zta4|_W!SFbH_ctRv|m7OHnvyv_XaTUOw9AR#4h57+L z+)3OB&~Q&mmQtRwTZuaC-74HtKCJsD7aD5(X5kr!eX)N_AmGrZpNeHDocn@RQ5|iD z`2=vQ!a!UlbY-jrHM~ENWlmDzI-IXI)0`+@9jr{h=6k8eF{a3kyU}hi^7}R2L;i9& zAJqPOf-r3V>rrn4doVK{zA@ngQp(^!xwn+Wq=EPnZ_}7RR$F^YxgoNo@xY8#kZ6Lb z81lql zA!i*E+<0eir_8nAm;Q1BZ~@X`gNB(Nom|8)4z4aLRl{(It`U*GT!-e_+O3$FpxATc#cqNW+A9-0UQPbHYDOSzZ89Mq1xhL{FuEFv`#AYa z9e#2={ts(j^EC3lw@IMQM4I{hL`df!UU4vJS)K~FhL!D zr-sGAWk_zauL^agNZ;RZ$LMWJL{;wMpKjt8=Wm+=K67rtd8c`W4zYl<@URoi`VLXh z6RvM{hb6=F1!9 zo%p)bS#82Bf#2gG)CH1%!GlsjO}acj=}+l=yrEQ|YjkNuxuvj3lV0yF?=d?QgV8~W z&*pV~`lg@mZ2Fx%N*Kn|Bq#vmP=PVCstTtKeKh2!Hua|?Nn7c;`W4d6g#6LSkeNi) znb}r@lmyc+vidjtJmX1{&%)98D$eBF^?Iq0E3%K|HS0m>d4&}PW@zE4TNEi`D zITIF&9LFIer-dXdi$+UQX`D)C#Jr(Mg^WX6$~ZJ3G{lf{SmQLIjPn>|#?V1J7-|~k zV88bMu&-;cy|2ALyq}-W^dc{ZHfxl@_M3$uqfPiqz1 zKuRbA+sMD3j1I@j7Ge2xg9viEeMKQaY=V5d$w3wG;E%*lB!U4L1Y4P-^0{ARmX zdQ5(4Vj}QF`G@Hl*Yj0Qcw5kS7bP<>o!Df9Rfgv?Wq`13@Ccx6OAKbi6+qWrJCpAx zaN}&f%M0&O-^urS5Ffbhx>QVJGhOc71l~&~atnpeOKI>dkJi{C_6DE~bf|upWdv+G z=M+Jv$GW*?ypfp>g75d+1TY=*OEGF~U++KNXKoww^$&))tN#+-z=p)L&K2#Dj^{MN z!34m)%26QfDrvO7Xs;WAl78rm{-x{l(v>)qgDz=NZ_}px*c}hxjBt?@iQ~*g@T53D zxfeOKYv@*&tDI2Z@maSY58XM&m$S(f?V`YGD)(d;@#WVkm80z;j?h{F6o!zr$*4bp zWgisJ($G_wZ+q!U@Hv>u1|%a6i}D*SZN{%?KIRpY$|sFO@tQ3xe{?_YSj?avba|Dl z0R9#M?hUhnE>H{ynVzOrXBI)>LV`r^YPfoK1*7S2Cg>?8AD1pKtXj(qQmL=NJ7K+o zN?1PolM39znU3Q$-*9p}>x?_D##KEsJD-qx&?Cua=H`I*h~dT6D+_vq)&Z7as9e}2 z-nZ@H+@sLIdk;+7x8UBWYjb2lH8wmcvY+n2X(P9;27%SosXVTn#{mztf~1y`R%4DQ zt4~?X!3ti=R6&H%rUpb(QT#)^+w-(9c3_92DjKx6;^{y76bPiXT9)+LSZ3^;@IfI5 z=_l$uG%R-!U(`VNHD`V}41o_R33i)vl{irX`6BNAAs{SjFD7N6dp#|u@)Mm@d49Ps zYHRAT_JU;ts-ewOit%WHo%wx%=U((?L9t*=45j=t|W{NK5}e_6l(x8bb=w0^IOwzFfv=r0i# zQ8plD=sA+mqRRoE4=e{0CZ$A@N_Wl+T=ANfJrFpL(fAAE@kBNLE0|Nhh8uC;k1WXwFTp5Sk8ghl45n( zPki4rCstT}u26xqxPELQ!AIi#Y!#ReDDL;b8N=yEi}!JC!CT8^> z;OXqeIL`@~lEx&^nWLTM<*qaKy23B`w+#p}_uUQtu@s4%&crs{g$;;PYqmT1HKFV% zaJWJ-Q5OvYb#Mxe!Dl~^o5EyMie-ks2mh+4b+X)}+VFT<2;M~IW!_x6FDeUAL!1V9 zdZ2FqWL*s^+P-ftN(Kn!&93l+IDMQp0ex`2bS0F0^~Ce%0S?31 zD0lE!(%7sW!W~>1BGLyUX}m+!x%4{-bVur}sqkK_Vhp0oCiBGCRrbkNj#_`vt7gj_ zj~AnZIYei2#TD3lTfEgPMJ}QT#Q@oN6TaBe1fjuOAZOTFEajb?5LPjbrrvqF&^9Js zon%W_Nz*M}@Ek5w4#F1hE4-#1E%8G)XVEQZaotDa2JW?=;7Y5oI8ia4@8f(P&4GET zylM52A!I+(sr&;)HfoHUAY;MMWzDBd~JGvkHlBbzG^h1c>Dr1TSH`6ALy;U%Vh?Mr`o*4mUd{!AO!7jbW zJTCFjp3Bl5A-kl~VQEGr-QO%=1L0RLW#tRN6Z_w$f1;LHJHs_FSEqJc3DepYk~bhO z%A3BRA&IrAVHX84&Kh^m=DCK_}{1EX3{?7l<~2YLfjTuOoca7R9cv zvbe_(C)c?1UHzJD9$%FCpz25Dz2!Sh4=e;@8hY*ye9-Q=XWUTJE4q|9Am`e$Q!DJ9 zPiA+ln4)VZO6dn!V1ANK(yk@;7wx^Rk@Nd>pyj%g0nDsNEEXd1F62-Aj;+bTVRS0x z>ZPQFDNRRXVq9n(A|EFSuRBuLquzB^3@KHhQA+caDUtI4+1K*s7{%V^dCW|TQxoxN zwcLX<`VV%S|EZaplM-ua0l&j+^zSweqOgHIw&oj5m% zevs0oS&gK#D@V8Ht`*f^;Ose$`#ukuuT&k{md_)CG(?Pg+x(T4j)_oTde$H`agy+E z?Pz4oihvn^KVPJS8ykM6xnyrGZ89Uy?^cc!$lB;abF&JSmrfBYag22?v2y0r3?_C| z>3~{uP$MZXwGU#NjJaso9Q=Hra}6j73pQ+qd#jRj8>mLvwrp^jOn9MeSZzvBy$i=RiyS4O8+^G*wd)iBm{gtQh>KP;4P7Bzo{N<|7V+n$;dmYQQ+_hG3FCcF1sga(p=;miT(5tZ4+v ff`;Tg*ln0zc1`jhe88B<^dso*)B8W44aVOAP0APK literal 0 HcmV?d00001