From: Sunanda Menon Date: April 7 2011 6:59am Subject: bzr commit into mysql-5.5 branch (sunanda.menon:3422) List-Archive: http://lists.mysql.com/commits/134884 Message-Id: <20110407065937.15262.qmail@helheim> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1118328321==" --===============1118328321== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///net/helheim/store/bteam/bzr/mysql-5.5/ based on revid:georgi.kodinov@stripped 3422 Sunanda Menon 2011-04-07 [merge] Merge from mysql-5.5.11-release modified: mysql-test/r/innodb_mysql_lock.result mysql-test/r/innodb_mysql_sync.result mysql-test/r/plugin_auth.result mysql-test/t/innodb_mysql_lock.test mysql-test/t/innodb_mysql_sync.test mysql-test/t/plugin_auth.test scripts/mysql_system_tables_fix.sql storage/innobase/handler/ha_innodb.cc === modified file 'mysql-test/r/innodb_mysql_lock.result' --- a/mysql-test/r/innodb_mysql_lock.result 2010-06-26 20:23:28 +0000 +++ b/mysql-test/r/innodb_mysql_lock.result 2011-03-09 15:06:13 +0000 @@ -148,3 +148,25 @@ COMMIT; # Connection default DROP TABLE t1, t2; DROP VIEW v1; +# +# Bug#11815600 [ERROR] INNODB COULD NOT FIND INDEX PRIMARY +# KEY NO 0 FOR TABLE IN ERROR LOG +# +DROP TABLE IF EXISTS t1; +# Connection default +CREATE TABLE t1 (id INT PRIMARY KEY, value INT) ENGINE = InnoDB; +INSERT INTO t1 VALUES (1, 12345); +START TRANSACTION; +SELECT * FROM t1; +id value +1 12345 +# Connection con1 +SET lock_wait_timeout=1; +ALTER TABLE t1 ADD INDEX idx(value); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Connection default +SELECT * FROM t1; +id value +1 12345 +COMMIT; +DROP TABLE t1; === modified file 'mysql-test/r/innodb_mysql_sync.result' --- a/mysql-test/r/innodb_mysql_sync.result 2011-03-07 13:30:49 +0000 +++ b/mysql-test/r/innodb_mysql_sync.result 2011-03-22 13:34:04 +0000 @@ -94,74 +94,7 @@ SET DEBUG_SYNC= 'RESET'; # Bug#42230 during add index, cannot do queries on storage engines # that implement add_index # -DROP DATABASE IF EXISTS db1; -DROP TABLE IF EXISTS t1; -# Test 1: Secondary index, should not block reads (original test case). -# Connection default -CREATE DATABASE db1; -CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb; -INSERT INTO db1.t1(value) VALUES (1), (2); -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; -# Sending: -ALTER TABLE db1.t1 ADD INDEX(value); -# Connection con1 -SET DEBUG_SYNC= "now WAIT_FOR manage"; -USE db1; -SELECT * FROM t1; -id value -1 1 -2 2 -SET DEBUG_SYNC= "now SIGNAL query"; -# Connection default -# Reaping: ALTER TABLE db1.t1 ADD INDEX(value) -DROP DATABASE db1; -# Test 2: Primary index (implicit), should block reads. -CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb; -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; -# Sending: -ALTER TABLE t1 ADD UNIQUE INDEX(a); -# Connection con1 -SET DEBUG_SYNC= "now WAIT_FOR manage"; -USE test; -# Sending: -SELECT * FROM t1; -# Connection con2 -# Waiting for SELECT to be blocked by the metadata lock on t1 -SET DEBUG_SYNC= "now SIGNAL query"; -# Connection default -# Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a) -# Connection con1 -# Reaping: SELECT * FROM t1 -a b -# Test 3: Primary index (explicit), should block reads. -# Connection default -ALTER TABLE t1 DROP INDEX a; -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; -# Sending: -ALTER TABLE t1 ADD PRIMARY KEY (a); -# Connection con1 -SET DEBUG_SYNC= "now WAIT_FOR manage"; -# Sending: -SELECT * FROM t1; -# Connection con2 -# Waiting for SELECT to be blocked by the metadata lock on t1 -SET DEBUG_SYNC= "now SIGNAL query"; -# Connection default -# Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a) -# Connection con1 -# Reaping: SELECT * FROM t1 -a b -# Test 4: Secondary unique index, should not block reads. -# Connection default -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; -# Sending: -ALTER TABLE t1 ADD UNIQUE (b); -# Connection con1 -SET DEBUG_SYNC= "now WAIT_FOR manage"; -SELECT * FROM t1; -a b -SET DEBUG_SYNC= "now SIGNAL query"; -# Connection default -# Reaping: ALTER TABLE t1 ADD UNIQUE (b) -SET DEBUG_SYNC= "RESET"; -DROP TABLE t1; +# +# DISABLED due to Bug#11815600 +# + === modified file 'mysql-test/r/plugin_auth.result' --- a/mysql-test/r/plugin_auth.result 2011-03-18 14:16:17 +0000 +++ b/mysql-test/r/plugin_auth.result 2011-03-31 13:08:31 +0000 @@ -400,4 +400,51 @@ ORDER BY COLUMN_NAME; IS_NULLABLE COLUMN_NAME YES authentication_string YES plugin +# +# Bug #11936829: diff. between mysql.user (authentication_string) +# in fresh and upgraded 5.5.11 +# +SELECT IS_NULLABLE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS +WHERE TABLE_SCHEMA= 'mysql' AND TABLE_NAME= 'user' AND +COLUMN_NAME IN ('plugin', 'authentication_string') +ORDER BY COLUMN_NAME; +IS_NULLABLE COLUMN_NAME +YES authentication_string +YES plugin +ALTER TABLE mysql.user MODIFY plugin char(64) DEFAULT '' NOT NULL; +ALTER TABLE mysql.user MODIFY authentication_string TEXT NOT NULL; +Run mysql_upgrade on a 5.5.10 external authentication column layout +mtr.global_suppressions OK +mtr.test_suppressions OK +mysql.columns_priv OK +mysql.db OK +mysql.event OK +mysql.func OK +mysql.general_log OK +mysql.help_category OK +mysql.help_keyword OK +mysql.help_relation OK +mysql.help_topic OK +mysql.host OK +mysql.ndb_binlog_index OK +mysql.plugin OK +mysql.proc OK +mysql.procs_priv OK +mysql.proxies_priv OK +mysql.servers OK +mysql.slow_log OK +mysql.tables_priv OK +mysql.time_zone OK +mysql.time_zone_leap_second OK +mysql.time_zone_name OK +mysql.time_zone_transition OK +mysql.time_zone_transition_type OK +mysql.user OK +SELECT IS_NULLABLE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS +WHERE TABLE_SCHEMA= 'mysql' AND TABLE_NAME= 'user' AND +COLUMN_NAME IN ('plugin', 'authentication_string') +ORDER BY COLUMN_NAME; +IS_NULLABLE COLUMN_NAME +YES authentication_string +YES plugin End of 5.5 tests === modified file 'mysql-test/t/innodb_mysql_lock.test' --- a/mysql-test/t/innodb_mysql_lock.test 2010-08-06 11:29:37 +0000 +++ b/mysql-test/t/innodb_mysql_lock.test 2011-03-09 15:06:13 +0000 @@ -279,6 +279,38 @@ disconnect con2; disconnect con3; +--echo # +--echo # Bug#11815600 [ERROR] INNODB COULD NOT FIND INDEX PRIMARY +--echo # KEY NO 0 FOR TABLE IN ERROR LOG +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +--connect (con1,localhost,root) + +--echo # Connection default +connection default; +CREATE TABLE t1 (id INT PRIMARY KEY, value INT) ENGINE = InnoDB; +INSERT INTO t1 VALUES (1, 12345); +START TRANSACTION; +SELECT * FROM t1; + +--echo # Connection con1 +--connection con1 +SET lock_wait_timeout=1; +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE t1 ADD INDEX idx(value); + +--echo # Connection default +--connection default +SELECT * FROM t1; +COMMIT; +DROP TABLE t1; +disconnect con1; + + # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc === modified file 'mysql-test/t/innodb_mysql_sync.test' --- a/mysql-test/t/innodb_mysql_sync.test 2011-03-07 13:30:49 +0000 +++ b/mysql-test/t/innodb_mysql_sync.test 2011-03-22 13:34:04 +0000 @@ -152,129 +152,133 @@ disconnect con1; --echo # that implement add_index --echo # ---disable_warnings -DROP DATABASE IF EXISTS db1; -DROP TABLE IF EXISTS t1; ---enable_warnings - -connect(con1,localhost,root); -connect(con2,localhost,root); - ---echo # Test 1: Secondary index, should not block reads (original test case). - ---echo # Connection default -connection default; -CREATE DATABASE db1; -CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb; -INSERT INTO db1.t1(value) VALUES (1), (2); -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; ---echo # Sending: ---send ALTER TABLE db1.t1 ADD INDEX(value) - ---echo # Connection con1 -connection con1; -SET DEBUG_SYNC= "now WAIT_FOR manage"; -# Neither of these two statements should be blocked -USE db1; -SELECT * FROM t1; -SET DEBUG_SYNC= "now SIGNAL query"; - ---echo # Connection default -connection default; ---echo # Reaping: ALTER TABLE db1.t1 ADD INDEX(value) ---reap -DROP DATABASE db1; - ---echo # Test 2: Primary index (implicit), should block reads. - -CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb; -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; ---echo # Sending: ---send ALTER TABLE t1 ADD UNIQUE INDEX(a) - ---echo # Connection con1 -connection con1; -SET DEBUG_SYNC= "now WAIT_FOR manage"; -USE test; ---echo # Sending: ---send SELECT * FROM t1 - ---echo # Connection con2 -connection con2; ---echo # Waiting for SELECT to be blocked by the metadata lock on t1 -let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist - WHERE state= 'Waiting for table metadata lock' - AND info='SELECT * FROM t1'; ---source include/wait_condition.inc -SET DEBUG_SYNC= "now SIGNAL query"; - ---echo # Connection default -connection default; ---echo # Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a) ---reap - ---echo # Connection con1 -connection con1; ---echo # Reaping: SELECT * FROM t1 ---reap - ---echo # Test 3: Primary index (explicit), should block reads. - ---echo # Connection default -connection default; -ALTER TABLE t1 DROP INDEX a; -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; ---echo # Sending: ---send ALTER TABLE t1 ADD PRIMARY KEY (a) - ---echo # Connection con1 -connection con1; -SET DEBUG_SYNC= "now WAIT_FOR manage"; ---echo # Sending: ---send SELECT * FROM t1 - ---echo # Connection con2 -connection con2; ---echo # Waiting for SELECT to be blocked by the metadata lock on t1 -let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist - WHERE state= 'Waiting for table metadata lock' - AND info='SELECT * FROM t1'; ---source include/wait_condition.inc -SET DEBUG_SYNC= "now SIGNAL query"; - ---echo # Connection default -connection default; ---echo # Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a) ---reap - ---echo # Connection con1 -connection con1; ---echo # Reaping: SELECT * FROM t1 ---reap - ---echo # Test 4: Secondary unique index, should not block reads. - ---echo # Connection default -connection default; -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; ---echo # Sending: ---send ALTER TABLE t1 ADD UNIQUE (b) - ---echo # Connection con1 -connection con1; -SET DEBUG_SYNC= "now WAIT_FOR manage"; -SELECT * FROM t1; -SET DEBUG_SYNC= "now SIGNAL query"; - ---echo # Connection default -connection default; ---echo # Reaping: ALTER TABLE t1 ADD UNIQUE (b) ---reap +--echo # +--echo # DISABLED due to Bug#11815600 +--echo # -disconnect con1; -disconnect con2; -SET DEBUG_SYNC= "RESET"; -DROP TABLE t1; +#--disable_warnings +#DROP DATABASE IF EXISTS db1; +#DROP TABLE IF EXISTS t1; +#--enable_warnings +# +#connect(con1,localhost,root); +#connect(con2,localhost,root); +# +#--echo # Test 1: Secondary index, should not block reads (original test case). +# +#--echo # Connection default +#connection default; +#CREATE DATABASE db1; +#CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb; +#INSERT INTO db1.t1(value) VALUES (1), (2); +#SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; +#--echo # Sending: +#--send ALTER TABLE db1.t1 ADD INDEX(value) +# +#--echo # Connection con1 +#connection con1; +#SET DEBUG_SYNC= "now WAIT_FOR manage"; +# # Neither of these two statements should be blocked +#USE db1; +#SELECT * FROM t1; +#SET DEBUG_SYNC= "now SIGNAL query"; +# +#--echo # Connection default +#connection default; +#--echo # Reaping: ALTER TABLE db1.t1 ADD INDEX(value) +#--reap +#DROP DATABASE db1; +# +#--echo # Test 2: Primary index (implicit), should block reads. +# +#CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb; +#SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; +#--echo # Sending: +#--send ALTER TABLE t1 ADD UNIQUE INDEX(a) +# +#--echo # Connection con1 +#connection con1; +#SET DEBUG_SYNC= "now WAIT_FOR manage"; +#USE test; +#--echo # Sending: +#--send SELECT * FROM t1 +# +#--echo # Connection con2 +#connection con2; +#--echo # Waiting for SELECT to be blocked by the metadata lock on t1 +#let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist +# WHERE state= 'Waiting for table metadata lock' +# AND info='SELECT * FROM t1'; +#--source include/wait_condition.inc +#SET DEBUG_SYNC= "now SIGNAL query"; +# +#--echo # Connection default +#connection default; +#--echo # Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a) +#--reap +# +#--echo # Connection con1 +#connection con1; +#--echo # Reaping: SELECT * FROM t1 +#--reap +# +#--echo # Test 3: Primary index (explicit), should block reads. +# +#--echo # Connection default +#connection default; +#ALTER TABLE t1 DROP INDEX a; +#SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; +#--echo # Sending: +#--send ALTER TABLE t1 ADD PRIMARY KEY (a) +# +#--echo # Connection con1 +#connection con1; +#SET DEBUG_SYNC= "now WAIT_FOR manage"; +#--echo # Sending: +#--send SELECT * FROM t1 +# +#--echo # Connection con2 +#connection con2; +#--echo # Waiting for SELECT to be blocked by the metadata lock on t1 +#let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist +# WHERE state= 'Waiting for table metadata lock' +# AND info='SELECT * FROM t1'; +#--source include/wait_condition.inc +#SET DEBUG_SYNC= "now SIGNAL query"; +# +#--echo # Connection default +#connection default; +#--echo # Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a) +#--reap +# +#--echo # Connection con1 +#connection con1; +#--echo # Reaping: SELECT * FROM t1 +#--reap +# +#--echo # Test 4: Secondary unique index, should not block reads. +# +#--echo # Connection default +#connection default; +#SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; +#--echo # Sending: +#--send ALTER TABLE t1 ADD UNIQUE (b) +# +#--echo # Connection con1 +#connection con1; +#SET DEBUG_SYNC= "now WAIT_FOR manage"; +#SELECT * FROM t1; +#SET DEBUG_SYNC= "now SIGNAL query"; +# +#--echo # Connection default +#connection default; +#--echo # Reaping: ALTER TABLE t1 ADD UNIQUE (b) +#--reap +# +#disconnect con1; +#disconnect con2; +#SET DEBUG_SYNC= "RESET"; +#DROP TABLE t1; # Check that all connections opened by test cases in this file are really === modified file 'mysql-test/t/plugin_auth.test' --- a/mysql-test/t/plugin_auth.test 2011-03-18 14:16:17 +0000 +++ b/mysql-test/t/plugin_auth.test 2011-03-31 13:08:31 +0000 @@ -490,4 +490,26 @@ SELECT IS_NULLABLE, COLUMN_NAME FROM INF TABLE_SCHEMA='mysql' ORDER BY COLUMN_NAME; + +--echo # +--echo # Bug #11936829: diff. between mysql.user (authentication_string) +--echo # in fresh and upgraded 5.5.11 +--echo # + +SELECT IS_NULLABLE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA= 'mysql' AND TABLE_NAME= 'user' AND + COLUMN_NAME IN ('plugin', 'authentication_string') + ORDER BY COLUMN_NAME; +ALTER TABLE mysql.user MODIFY plugin char(64) DEFAULT '' NOT NULL; +ALTER TABLE mysql.user MODIFY authentication_string TEXT NOT NULL; + +--echo Run mysql_upgrade on a 5.5.10 external authentication column layout +--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1 + +SELECT IS_NULLABLE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA= 'mysql' AND TABLE_NAME= 'user' AND + COLUMN_NAME IN ('plugin', 'authentication_string') + ORDER BY COLUMN_NAME; + + --echo End of 5.5 tests === modified file 'scripts/mysql_system_tables_fix.sql' --- a/scripts/mysql_system_tables_fix.sql 2011-03-18 14:16:17 +0000 +++ b/scripts/mysql_system_tables_fix.sql 2011-03-31 13:08:31 +0000 @@ -642,6 +642,7 @@ drop procedure mysql.die; ALTER TABLE user ADD plugin char(64) DEFAULT '', ADD authentication_string TEXT; ALTER TABLE user MODIFY plugin char(64) DEFAULT ''; +ALTER TABLE user MODIFY authentication_string TEXT; -- Need to pre-fill mysql.proxies_priv with access for root even when upgrading from -- older versions === modified file 'storage/innobase/handler/ha_innodb.cc' --- a/storage/innobase/handler/ha_innodb.cc 2011-04-04 06:12:11 +0000 +++ b/storage/innobase/handler/ha_innodb.cc 2011-04-07 06:59:07 +0000 @@ -2607,10 +2607,8 @@ innobase_alter_table_flags( uint flags) { return(HA_INPLACE_ADD_INDEX_NO_READ_WRITE - | HA_INPLACE_ADD_INDEX_NO_WRITE | HA_INPLACE_DROP_INDEX_NO_READ_WRITE | HA_INPLACE_ADD_UNIQUE_INDEX_NO_READ_WRITE - | HA_INPLACE_ADD_UNIQUE_INDEX_NO_WRITE | HA_INPLACE_DROP_UNIQUE_INDEX_NO_READ_WRITE | HA_INPLACE_ADD_PK_INDEX_NO_READ_WRITE); } --===============1118328321== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/sunanda.menon@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: sunanda.menon@stripped\ # w14c36ley9g0klkl # target_branch: file:///net/helheim/store/bteam/bzr/mysql-5.5/ # testament_sha1: 0a13f763e3512e18c417360d123d51d85cdd0184 # timestamp: 2011-04-07 08:59:37 +0200 # source_branch: bzr+ssh://mysqldev@stripped/bzrroot\ # /server/mysql-trunk/ # base_revision_id: georgi.kodinov@stripped\ # 2dzhjho596pgbxz3 # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWb/kXfkAEZN/gEAwRn//9/// f///6r////BgHMX3t1sTXzz3aedg9pMeXrUyVSEq1oaaVQNA2qnvTgBbAdzvePW17mt26GZvWvb2 93hoemq8jlTu3RW2KFBkzYJFET0Sp+KfpD0EU96T1TGp41SeNUyepo9E2oABppoMQHtUCUQAEARM gATU9KYmgBoANAABmppoAcNDRk0aNGmhkZDCAMgBkGmgAAZAyAJEQjUaGk0aTU2p6ZNU/TTITU8a U2U8iZAB6g0aDR6gAikQTKaZU/VP9JPVPxSe1NQ20MU2qeptRtI0HqeiD1Ghp6nqNNDICKQQE00J gRk0Jqep6p4ETNFPSGgBoNNBoGQZqYiI7DaQ84fgTiuL2T+XzTFjI3qZR76j4Chc+vZdsv9KDDgH 64qDFfp9n5MoF7SP8DWGX5ntMd+n38coR3o9hH0ZDh0HSSgVnTQijye6KKOGc8bQuz6Z9BPmRZzb 1KgkxICHIwI+9JpTRpmhyIe+KxcmwyGlKGMUjhzpOHycFblU3cv9pcQStvwid2BEb/bENz39lnyc dXa9JOpjzz6HJ6KGyWGEVWp8krjx31F9F7RfYfKfRcckGV2ZyyIZ2GpkXOxRyvinxylf4KQFvZjB Zgwhd1UYKuDm3gzqe5qqsMbIRH40i11z/r22eLJD5suSAufbt2YjpR7kIj8/wfytzQ6DkhJJaw5i tZvz/9da5u6TvvS71M1Et+yiDuxAsQxDKYM0MiRR9AjoSFFgGAJqHSMNQ5HygwMgc6j6riopx5cv KQdeJIyeB+ZC3kjSlJg4IIDGMbbBttttDaBn8Fp+IkdnW+nPExReGNsT4ztv1X4yxGJAdWmYdJiH Q8cXbdssOzDHWZGJTIhVZZ0eGmJVCek7QsyEXztOUCUquZKb2wIvfP1Ph9C/ha0sbZLk7OdWEKtc 5vWKTETGDmxBDeFXJ1/717zkMQIn0fGJRHxAflpPRr0hqNLZlJlWgOIPO8JSodhdMTaYqTHM2OD9 ArcrdaF461Ls1AbkL8DhgkQdgepyeH1kerqWOp7jbyT263lRM+OgtdToDwIA7eLpP2NhV0NiddhM 1mZ9T+9oWpxeweyEghYky0BMPmsJgkHKY5LisMKzqcJGhVlc68bk5sUNZ/hWVec4lpnvmiPTxDIN Id/h6/JVVsaIuD1QBRobB0pn8i7oPvi0Q6nMxu5mOy3tKq78y7SffbOZ+7uShdjvt5k40PmMMDEd Ih5mXYZ2OrCjxJNDOgjzLpUWFfv4neBmv2IVsNSZ0cM7qTU4lwROKFWToKQZZrNX0DXdh02ECfxK X7gvc2tHiGw9A7hoxVO4YqsU3tQ4PwEEwTrdCvY/CmWTdEzhKb3C+H1nHUVI88fvQna9+Tr49+pU T0QwcdFPM4WnX5Pg0usm5NT+HyfEEROM0ArAs5PXeoxzEQZIryH1HriCPriMPLmRj7uLK0kdyAOV crT6Xlls2bOQuNNADEwQz3toE0022JtpNoGNsQNIR0iICEDYAMNwHOCgPxwSFw+cqYB4Q5SdAxH2 AwNowuOr7hhyjUtEkeoppOHvA+aTWchkfitHd8+WlVH4XHfPIYlLjAHPYawv8PFSbxHga8MYXfei FISIAhMAY2YoCGzaCu5a9g4RgRKbT/TMC6TCDEE5HYHe0Bxg2DQWo0CzJg1An6tZywDIVKGEtDKH Ekkt5cZygeFL4lpaldcJeijqQ1kkpHVEXhBrbdiy1b5a9+fvS7aeKsm2Aq88ELJwY36wt7dVSsBW ZHlBJsEMQxCbYN5oiFCGYJI84kSmM9Jwh4HDgk7NoRUqFXDgi9AWl93NmhaujZEQqLBulKI8SmZU RC383IZ8bppQg6GhdLQKyqUaMOyKyjtxVS9m0O+igOHUva03wgpANzSx6Ei/WF4d98XVhnSBLiYp ELIgBghGvUIyMcJyLJC+VsoQwsPBmpYFlAKSrImoIa0Rt1i5TRIrCYaCZhB0JE2WsNEqE0EiDXrU gMCwKBZkQQwQWq0CqF0hl70qMpmVwMjVBn9NSCti6MUlUnpKHoDBpDYNormOl9xu/XtwGNuNTyJQ ciGOJQjVJnnQwMCBHC0Ve2K0dAu6b8EEyChhGgZp9ToKi1SCNwW3fgfmSMxsOMICWfR4icJJdZqL 3ZBt4SCegQT1079aBO5+QlFDBDFCQJhhKpnnxBau+QaNAmaEZt7ddKHY/JxTWEOtsxiDmvBCSUCq CVHFhgBkmxiKKMhD0R9GlwZql/Y3OZeWB40GppPoTgn1DQ/deSdoJyyeBgWGPYJclJ0WkwrcBvkz D/kExNCdUmktXaIcDGeGHVMSKCkUZwe4skaEAUY3VWqaITr4vhEiJMSCPzEBsRqDp1dDZ0oaNp6h EvM6kDl2nYUKeECr/JwfXLCHvnURml5Mq7gNYpz5EHbTuJ9ax2Y24UsrXno9MqTFulIBTvwtEomm lDHzDgV/Ft06jWLBAlwcGZTRcA6OkztJHfjSJjmOBhxFGATM04RFGmVC2QTTFSRkIQ+FiWFe4VjO IwsRr1CDpCtKBMYcwYSlAHmA1q0DBYxGOKZgnaQNh0EkT6aPATmjph7gUPcCGRHpNuWAONAeQNA9 gdaPf9lNN47g+iOHnDf45F4JI+twF0nz2Amim/t5SwiugrWc5w2aQlOjUE3CQ6tV/CgSMTYWhRGA TcEpXYo2KioVk9qiainXeHcjI0Y10AEcZEyePG7Bgwt5AmV5grAsawgJ3ZiwM+mOw13thOw7Dyba k+ZI5pomwUqfECHoHWJUhzBPXlv72BtzJhyUHCuayLGYQbmDGojvawXBiXOXKmIM9JJgzgJBJGFU EmFQ2CB8B1hBPQ3QTGV755KzNk5JGci2AoFotLDOfO4WWDAkiy1ToQDs0lmFK2VxRySVN7DCSjq3 PajpTYHdJeWA66rGjM5ZkAcwzFkVmh2DbKEAnnCo3Rm8SG56qc0yKzKlskvUeMJ3JmeRLIiVpJsk M1QaImQgK1NuANQMh/IE7hyD5CYYTMJmCQPFoNQtIoMCHqElSuvZtjBzO5hE1paYq9cuTwAsDgaG ji0BtMYQQkO2o5KDScN7Ig3AoQJGwW04EzaBMU2YYuGXCh5Hkyjg7BEzLWqohka9O5qMDjoKRQ1M g0k5Lgzk9htssuuBklA00MxoSIhPBhK3pRpMmMscgoGvQ8YUvrKY4E7QcPMOdEhriPwCpQKh3HlG 47FmDWDGMGXaoK5jEGIzZDPQ0mwinlFQMJAlCcmG5pdUvOiboC6NZU5TLgwEScYmPJBHE1LntFKE lQzhVoxHCZyLuhQXjeZHmGd7yqDyNoYY52Q0g7NOB1MeaaVDeLkePcaFh7b0OAxpgYG4JmNNxo/Q eXLYITBCJcc0FEInc0TvMNBDFN1pjeA6Sit7BjxII7QaIZtyNNGNzVxAPEml4HqMZ7Kl0EaQWuxo EDkcxUTMkGJMyWgJr0cnHIrQwG1TVsDKbzZY3EqImaGaIg6G5MviSJl5HEaaVMQ673KUMoENTgcw Q1gMC/VbOFqzYrhz2RVjGOHxhGA4EjBFQTFSlFIVUG4gDGtpNwcuoIqVbwwugFg0kioQCWibTm2A LU6MBkAZDYazYeuJ4Y1bfcVqMI5PMnljBHBeQrkI8UMjJdLA00CQp0HE4l8RS4iSkblKSK2ZQab9 P/hJGdIxCttliPfB7XWIWcEywIqQKJSUxKBiqCPJEzgDq7XGgiOZdJFmyhrq+FyhS1QxQR1YEomA 7gqPXXYacFco2GYVKYVii1YSsMpJVYyBbR5gYXlrRcLe8SHgnGExLtmvSugzN9oUwPMfJHk7xOZM CMb7canFqwMKslDApLNlKIJRuFFkPY1oSSUFlYAWQ20SghYFsJNUhLEiwQxAVhY4IaNAKuHtfs/B HO/f4FWYdEyAjIn3Ekim+VbO6lArSTeYSLsCveVLP0FC169T+AQh/aJzHuDQGJU6jWjQYDZoAaIY MVJhQokG22MYyERA20iE2+wqUM0epC4fKhgvQXhY0shSQ2iwgQMoI6gO47xCLAeUgAyoD6zclmFF ZgbGHmhuUwgmSLxQXwM797mSYd3pOeypcrukQhCQMIxCREjfaIRSwSQRTJIh5ocAn+XAdfxh0lQe gsJBBCbyRF+KhoKVUKBSHIOLBIIImQUcXyG5CYkQcAqJKowYEYSgiMDcY2nCYaqsgh/eRQMQk1YS RCMoSoE0tE20UJQdsixQ/yAs16S+kVsDAAoOVj+LYy/QGlxKI88BLAwf9AMwOQc9RKwf7h2hLuhA oPmCbOLY0H/M2Cd/7uzxA2do5EoDatR3gUoBr7GQn+JAVh6bCSlq6zA/UFSodDqs5prjcIweVCTs jj2/jeMiUCcHooHNQgSSO+5kWqGgQupIdsKXAdwEwsEJz1FS4QtX98GtsAtsOA6BDqJXEIYWECww JN7vYE0BUUAVVEmUNK3hqFtSd5yOKTSMnr/n+vX8l1Ps9lL3Td1sIz9f90Y+7d3buUQciAZwpQQt SCg5yARWcSxOndafs6IdSantdBalVgAgfYXEgmN47cvgBZKwIQPchmtwnmJVlkOuQawhvDSTPMC5 1lweBf0hmQEFLWglDAqP6fQoYYhAkDVfpMPQ3I4CanWzDS+8osmhUqRNK4GtxRDiSTAAm425YFiT aVLUwvWaaQiIPyGL7RM3BHEoIWFDKXYe6lhRCu+RiQG8lpQOxgyCSSeIw/lqGwT3l7a/YYjpnsFw DEUBAPmEW3en2i+v7vqD+v2EBsCwxNkIHB5/MDNrhBqA9UmxQiwP4LQrn6dwnQIyBslCMB6X7JFN hVU9pNCn3Dq8xNO0mExS026+zgPRQY0kekaE4j9RKPsBHpBUFQwvn7GUKfuHA8wq5ykTmRT3JQfv kCRIGITP5cETkZDCBr8puJn+0Z5159FEME1GrtMch49gdt4GW+F2FkWtDWXFBySG4Bw8PBf0hVrf yf+sDm/rE1XC5pU1oYJI+MFQHcLbVhSXWCpwQTUGG/EhSGOwaNTrcu4RgK6dx2eM9NkVjKqomC89 xHcIdQ+wcj9RD9oehuyD6X7fQ7LpBmDMGT5h4+A4Dz8jj3KQkfOHuK1EhuCo5xYm4ev4m8bGRGgv QYaxIqdvjPt17Z6qzwNgr6jYSV3IjazYPCRoYviqi39oQpbqseaIZilAPjTwkg1fmNRZJ2UHg2Mj vQ4Au1GuMOStF7YIhUrCuA5Qzz9gXo1RptYruPDicjoHMZlCVx0oQTtkFCCuBYDPrUw1mBU61yBs J2HXa7zrwVzB0ZktgLftBHXBLDx8Ds62zH9qce59E4dB8+B9XZHQHFjnL4NCbd4dChuBTSVM9IhJ IGSiFxn5nyMTwjKIpGRIA4yEIgN1M4c2J+glCxA2VFGYzxSzaQDDeJRtM9K4ClLRGMFJBpnklgxi DlE7KEphBD5IR24yt9h5Br1JXvO86nedatDLvHmikRgOPGZYYPNEQJFHFcPEUxREMiJUvSYvs792 eWpV3gwI3AOggKj9b4cwegEFYUOG05F0zmDye4pFT6RZukgIjzL9hsNfaWM43ktYhPmbELAZzK5l htEOzbhgk0HsO3wKBkHcHKYPHmGs7YDgnq5azkjFCs8XkfL0eLw8XHTbS3g6brHSq28cWjnC1Cjj chRhci9IGxlKmFAo1ali+V7qioyTQMGFrpCDraFC8x3mfqCERDw2zx4z8SppIj0hrd/saT94pe4x u9d3szZLLTMsFszzGvy8yww9O/RwV8B2wi+Ax5VnQeCCdUep6tNbJZRBCxJtOiMKNZMMBYmRiVcn Il13oIl2IYoLZIwWpkd4zhZwmUZrBItOxxtHhCgR8N7xwmz2a6vGh850nlK/Wa6+h2G2Dv97I76m lpGOyD0PG/j5+fOCFwZDc0EB+XA4ZofHqHSmWeeV+aaM98YUTbHCsf+pMTvXyDA2SI01dRwT4dUz WTPnPfFNm6vAwjgFmrRNU+YsVJhjBPfIXT9KoMncEaHb7dgO3eUs6gt6SHIJtEkgr1QXiuPN31/f bRXcUR1QM7Ua2xBRFEsDzyLgK8ZdzXkWa5jHIl8N9VkXx43W+6GBNKXWg3HhOk0hph068hx5qjMI vBOcxxl8197CzCoKRiLxCo4ZjsNPbnlgYsDAfaznHAMX4qsSvH1EDejnjIBppvLqEBeCabyw1Zkx DZhL5o/FHMX7WOR2BxZj0gO+B/KlGTJPHWFG46BJSBIApuDWO4E6hrPNG0S/b6vyFvR50fO2QyCD iQoyNOtfuPtCGS21Qdiucz3fQjRRvmHuZQqAkFmURcadTQxRNZrmnBB2gcAWEAaEoLnMRgA90O6Y UJq0kS9yP2yo/JqCn7W34OSZ7wu9UX5IPHQPEMuJQOcqnvgGeR2pgS9XBPaqzEdTNOB34JLn8ETQ 0t6i6UfpgR9m87ri5Qv1b3JukSYU5GUz1AeyQ7YsIhGk0taXAmLFyjejeHzaAXxPF0jZpggGQFyD N1/FPYmaZgpmMEJBAhCsGvV5GriYxEaE4AvQ58biB7vz9ZhpvCPQdISgz7w9HhJ0J23BsKvegCJw 221roDiDQaBNEErHJZAs+rz7hO8GEJIwFXzOIv10fqeYSDQ+ge0GAuGtLoDaLH1Bckj3TSUBIO+c xfe22YYZiBghWcAs+AJ7C8FuTcJuCoJahgQAcU+kkbnGsCOcIyqIQIyXJWM3DQbiMHjNo90MD3zQ o3GgotDuQN/YlGJNw1FvrcZXqCT2LBIJGjTx2hlkAw8AKJ9nAoJtV8En8g5hsCzGyIBExfE4zSjs XW8CotbhZpXxFLZh5++EklRhJ8h5l45B8Itt56EwEJ+EOU+kKYMJ+CE0kSLQcCQeaVIF9Te0ZDbM oIQ00IIcDzKGwlUoMIFLAS851wiFBgEsKNqG4roxRvAZkc0ZWJBeSd1DG2SAmApDfKCiJCgJyMOd Ai6SVNwlRQsJkgzTQGKP3Bqregn9gyQDHQqGADJJoOwZHgWmV8WMFooYwrFgJpLnuBG8oBoqNqQi 1NhV1wJg5RrmLziLxeGVLDDAHVCspoBi6i+qUJj34b5efrDb8KJbCCntgdwSyPxMCgCQwPMRhbEk NJVEhgiP1tB6hDFAm2hjGA2Qsz4uAXQnDcygDgHoIhQBny5oP4TFs6vxtVx6BrSofIJ4wRBuOplq huFO+FO42ToeKQO2Eml6nmJa2Rf7UhGFSHo2iGgulw7ReJWA8pOlFu6/5jtyPmDt9jG/GekM8tmp k+cXCR8hkaIh2pFSwLOPd0+Ker4hUmlgtgdFRPeCOQKsA5zEGcIGGIi6QSAJFwbptaOcYrBtCFCS A9bWsBgKepGKgnhMyODUV3jqHy0p8fabK0T6C9BPUxK4DHNMEkIaFyQYx+kn+c2JshdWgZC6jhaL gaghCxbJBq+blVNkaCxC68LwZugpQYCkUGYnXgGow59ieGLXytwPQ3ScMrWq7Qp1DszVXrDAr0B3 0YhrKu7BMtkSiyzgTSxMweVDtuK0SIWIghLUapk3duWSbYVJFTRcjh5BsdsARARAxBFpnllaeaH0 RXgKJTA2CZm2QMMKGDZTsAcwaVH36DQENiQSIl+BFp9bdJH4Gs8l3QD3zqOXikOBMlWoOxSSds2M QgMCaFYKKozALkvnJxE3ECQQpoDxDn+QwC6HNMjSGKNQ94jCTKjiGkMtI3tqFjbFR+Yki9IOeyRb E0yamilyyoEoCQjCX4DMUgWUiqbNIvRIuSpmbhMrwtNOE4CSgQSCBYwC5C60BwVtDwK1Kg0FrgDW c/DGSpaPtlWG2VTodD0MpFS8cyScvRbrClGoc+ryo2K5FGU0d7IupKVJjC8LWnUUdJApVjxg+37p ko4MBY4hoNfcfX1S2D7A1WhshwcATbzCk/GORyaSgB+0yfmnl6GFvkrxPGLqeuwO0LigJWIlV8YX 6/WZgMMhRl5j7jmFIU8hA/vQbz3hwm5cDOgZGPSG8NgUKncCOmJY95khbKeWpIQOAMxBCERDGCAD KGUE5Kh6bNRz0OTacs/RGr5nIk/UKJTyZ/Ox9jU5GQl7Xd2PAWTjzDwTJONodH2OX/4u5IpwoSF/ yLvy --===============1118328321==--