├── Img_process ├── README.MD ├── OfficeAutomation ├── create_gui_NoBackgroud ├── create_gui └── Img_source /Img_process: -------------------------------------------------------------------------------- 1 | # !/usr/bin/env python 2 | # @Time :2020/12/1 23:27 3 | # @Author :IronJoe 4 | # @Site : 5 | # @File :img_process.py 6 | # @Software :PyCharm 7 | 8 | from wx.tools import img2py 9 | 10 | path1 = r'打包\favicon.ico' 11 | path2 = r'打包\About.ico' 12 | path3 = r'打包\Copy.ico' 13 | path4 = r'打包\Open.ico' 14 | path5 = r'打包\Save.ico' 15 | path6 = r'new1.jpg' 16 | 17 | path_list = [path1,path2, path3, path4, path5, path6] 18 | for i in path_list: 19 | img2py.img2py(i,'Img_source.py','-a') 20 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | ------------ 2 | ### create_gui 主运行程序,创建GUI,生成用户图形界面 3 | ### OfficeAutomation 办公自动化集成功能文件 4 | ### img_process 图形文件处理为py文件,方便打包 5 | ### Img_source 处理后的图形py文件 6 | ------------ 7 | ### 功能 8 | - [x] Excel合并 9 | - [x] 同类型文件合并,有标题行 10 | - [ ] 支持文件合并是否取消第一行,即标题行;默认不合并第一行,作为标题行 11 | - [ ] 支持文件是否取消合并从标题行开始数任至任意行 12 | 13 | - [x] pdf合并 14 | - [x] pdf文件合并 15 | 16 | - [x] 文件名字搜索 17 | - [x] 根据提供的txt文件,内含文件名称部分信息 18 | - [x] 提供模糊搜索以及精确搜索,匹配成功后,将文件复制至新文件夹 19 | - [ ] 支持单关键词搜索复制 20 | 21 | - [x] 文件内容搜索 22 | - [x] 根据关键词搜索,文件内容若含有则输出绝对路径至文件 23 | - [ ] 多个关键词匹配,使用txt文件 24 | - [ ] 文件搜索过程中,决定是否复制 25 | - [ ] 生成的目标列表文件位置在执行文件同级或复制后的路径位置 26 | - [ ] 下拉框 Normal,复制,移动 27 | 28 | - [x] 文件比较 29 | - [x] 批量文件比较,两个文件夹有同样数量,同样名称的文件,移除相同文件,余下不同文件 30 | - [ ] 单个文件对比,添加弹窗信息表明异同 31 | 32 | - [ ] 鼠标控制,解决catia弹出重命名问题 33 | - [ ] 思路:点击自动重命名,点解确定,循环 34 | - [ ] 确定两个位置循环 35 | 36 | ### GUI功能完善 37 | - [x] 图标二值化处理 38 | - [x] 背景添加 39 | - [x] 重定向输出至debug.txt 40 | - [ ] 创建debug文件夹,文件存入其中(判断是否存在) 41 | - [x] 打包 42 | - [ ] License 43 | - [ ] 日志模块 44 | - [ ] 数据库(尚未想好应用场景) 45 | - [ ] 缩小打包文件 46 | 47 | ### 打包错误 48 | - [x] python gui打包,弹出缺少mkl_intel_thread.dll错误 49 | * 解决方法: 50 | * 复制以下dll文件至exe同级目录 libiomp5md.dll mkl_avx.dll mkl_avx2.dll mkl_avx512.dll mkl_core.dll mkl_intel_thread.dll mkl_p4.dll mkl_p4m.dll mkl_p4m3.dll mkl_rt.dll mkl_sequential.dll mkl_tbb_thread.dll mkl_vml_avx.dll mkl_vml_avx2.dll mkl_vml_avx512.dll mkl_vml_cmpt.dll mkl_vml_ia.dll mkl_vml_p4.dll mkl_vml_p4m.dll mkl_vml_p4m2.dll mkl_vml_p4m3.dll 51 | -------------------------------------------------------------------------------- /OfficeAutomation: -------------------------------------------------------------------------------- 1 | # !/usr/bin/env python 2 | # @Time :2020/11/8 21:11 3 | # @Author :IronJoe 4 | # @Site : 5 | # @File :OfficeAutomation.py 6 | # @Software :PyCharm 7 | 8 | import glob 9 | import os 10 | import re 11 | import shutil 12 | import time 13 | 14 | import xlrd # 用于读取数据 15 | from PyPDF2 import PdfFileReader 16 | from PyPDF2 import PdfFileWriter 17 | from openpyxl import Workbook # 用于写入数据,支持大型数据写入 18 | from tqdm import tqdm 19 | 20 | 21 | class FileProcessing: 22 | """ 23 | 根据提供的关键字进行文件查找 24 | """ 25 | 26 | def __init__(self, origin_folder_path): 27 | """ 28 | :param origin_folder_path: 29 | """ 30 | 31 | self.origin_folder_path = origin_folder_path 32 | 33 | struct_time = time.localtime() # 元组格式 34 | self.last_time = time.strftime('%Y-%m-%d', struct_time) # 格式化时间 35 | 36 | @staticmethod 37 | def file_without_extension(folder_path1): 38 | """ 39 | 返回无拓展名的文件列表,静态方法,便于使用遍历 40 | :param folder_path1: 41 | :return: 42 | """ 43 | # 遍历文件夹 44 | file_list = glob.glob('%s/*' % folder_path1) 45 | need_file_list = [] 46 | for file in file_list: 47 | (filename, extension) = os.path.splitext(file) 48 | if not extension: 49 | if not os.path.isdir(filename): 50 | need_file_list.append(filename) 51 | need_file_list.sort() 52 | return need_file_list 53 | 54 | @staticmethod 55 | def file_only_type(folder_path3, extent_name): 56 | """ 57 | 返回有拓展名的文件列表,静态方法,便于使用遍历,兼容大小写 58 | :param folder_path3: 59 | :param extent_name: 60 | :return: 61 | """ 62 | only_type_file_list = [] 63 | file_list = glob.glob(r'{}/*'.format(folder_path3)) 64 | for file in file_list: 65 | (filename, extension) = os.path.splitext(file) 66 | if extension.lower() == '.' + extent_name.lower(): 67 | only_type_file_list.append(file) 68 | return only_type_file_list 69 | 70 | @staticmethod 71 | def file_all_type(folder_path2): 72 | """ 73 | 返回所有类型文件的列表,静态方法,便于使用遍历 74 | :param folder_path2: 75 | :return: 76 | """ 77 | file_list = glob.glob('%s/*' % folder_path2) 78 | need_file_list = [] 79 | for i in file_list: 80 | if os.path.isdir(i): 81 | pass 82 | else: 83 | need_file_list.append(i) 84 | need_file_list.sort() 85 | return need_file_list 86 | 87 | @staticmethod 88 | def auto_save_file(file): 89 | 90 | directory, file_name = os.path.split(file) 91 | filename, extension = os.path.splitext(file) 92 | 93 | if extension: 94 | file_name = re.split(r'[\\/]', filename)[-1] 95 | 96 | while os.path.isfile(file): 97 | pattern = r'(\d+)\)' 98 | if re.search(pattern, file_name) is None: 99 | file_name = file_name + r'(0)' 100 | else: 101 | current_number = int(re.findall(pattern, file_name)[-1]) 102 | new_number = current_number + 1 103 | file_name = file_name.replace(f'({current_number})', f'({new_number})') 104 | file_new = os.path.join(directory + os.sep + file_name) + extension 105 | return file_new 106 | 107 | def file_to_txt(self, list_file, path=None): 108 | """ 109 | 如果最终返回的列表有内容,文件保存 110 | :param path: 111 | :param list_file: 112 | :return: 113 | """ 114 | if not path: 115 | file_path = r'目标文件列表-%s.txt' % self.last_time 116 | else: 117 | file_path = r'%s/目标文件列表-%s.txt' % (path, self.last_time) 118 | if len(list_file): 119 | with open(file_path, 'a+', encoding='utf-8') as fh: 120 | for i in list_file: 121 | fh.write(i + '\n') 122 | 123 | def data_clear(self, path=None): 124 | 125 | # 数据清洗 126 | 127 | if not path: 128 | file_path = r'目标文件列表-%s.txt' % self.last_time 129 | else: 130 | file_path = r'%s/目标文件列表-%s.txt' % (path, self.last_time) 131 | 132 | with open(file_path, 'w', encoding='utf-8') as fh: 133 | fh.write('') 134 | 135 | 136 | class FileCompared(FileProcessing): 137 | """ 138 | 对两个文件夹内的文件进行对比 139 | """ 140 | 141 | def __init__(self, start_folder1=None, start_folder2=None, tar_folder1=None, tar_folder2=None): 142 | self.start_folder_path1 = start_folder1 143 | self.start_folder_path2 = start_folder2 144 | self.tar_folder_path1 = tar_folder1 145 | self.tar_folder_path2 = tar_folder2 146 | 147 | @staticmethod 148 | def cmp_file(f1, f2): 149 | """ 150 | 两个文件对比,二进制法打开对比 151 | :param f1: 152 | :param f2: 153 | :return: 154 | """ 155 | st1 = os.stat(f1) 156 | st2 = os.stat(f2) 157 | 158 | # 比较两个文件的大小 159 | if st1.st_size != st2.st_size: 160 | return False 161 | 162 | buf_size = 8 * 1024 163 | # 二进制方法打开数据 164 | with open(f1, 'rb') as fp1, open(f2, 'rb') as fp2: 165 | while True: 166 | b1 = fp1.read(buf_size) # 读取指定大小的数据进行比较 167 | b2 = fp2.read(buf_size) 168 | 169 | if b1 != b2: 170 | return False 171 | if not b1: # 数据读取完毕,仍然没有不同 172 | return True 173 | 174 | # 读取两个文件的文件进行对比排序 175 | 176 | def file_move(self, f1, f2): 177 | # 相同文件剪切 178 | shutil.move(f1, self.tar_folder_path1) 179 | shutil.move(f2, self.tar_folder_path2) 180 | 181 | def run(self): 182 | start_time = time.perf_counter() 183 | 184 | f_list1 = self.file_all_type(self.start_folder_path1) 185 | 186 | f_list2 = self.file_all_type(self.start_folder_path2) 187 | 188 | for i in range(len(f_list1)): 189 | print(i) 190 | if self.cmp_file(f_list1[i], f_list2[i]): 191 | self.file_move(f_list1[i], f_list2[i]) 192 | 193 | ending_time = time.perf_counter() 194 | 195 | print('\n') 196 | print('程序运行时间:%.3f' % (ending_time - start_time) + 's') 197 | 198 | 199 | class FileExcelProcessing(FileProcessing): 200 | 201 | def __init__(self, origin_folder_path): 202 | super().__init__(origin_folder_path) 203 | 204 | def get_excel(self, folder_path1): # 获取要合并的所有excel表格 205 | 206 | all_excel_1 = self.file_only_type(folder_path1, 'xls') # 列出文件夹下所有的xls文件 207 | all_excel_2 = self.file_only_type(folder_path1, 'xlsx') 208 | all_excel = all_excel_1 + all_excel_2 209 | 210 | if len(all_excel) == 0: 211 | pass 212 | else: 213 | return all_excel 214 | 215 | @staticmethod 216 | def open_excel(file_name): # 打开Excel文件 217 | 218 | fh = xlrd.open_workbook(file_name) 219 | 220 | return fh 221 | 222 | @staticmethod 223 | def get_sheet(fh): 224 | """ 225 | 获取excel文件下的所有sheet 226 | :return: 227 | """ 228 | sheets = fh.sheets() 229 | return sheets 230 | 231 | @staticmethod 232 | def get_sheetrow_num(sheet): # 获取sheet下有多少行数据 233 | return sheet.nrows 234 | 235 | @staticmethod 236 | def get_sheet_data(sheet, row): 237 | """ 238 | # 获取sheet下的数据 239 | :param sheet: 240 | :param row: 241 | :return: 242 | """ 243 | all_data = [] 244 | header = None 245 | for i in range(row): 246 | if i == 0: 247 | header = sheet.row_values(i) 248 | else: 249 | values = sheet.row_values(i) 250 | all_data.append(values) 251 | return all_data, header 252 | 253 | @staticmethod 254 | def deduplication(list_): 255 | """ 256 | # 数据去重 257 | :param list_: 258 | :return: 259 | """ 260 | list_2 = [] 261 | for i in list_: 262 | if i not in list_2: 263 | list_2.append(i) 264 | return list_2 265 | 266 | def data_extraction(self): 267 | 268 | all_excel = self.get_excel(self.origin_folder_path) 269 | all_data = [] # 用于保存合并的所有行的数据 270 | header = '' 271 | for excel in tqdm(all_excel, '开始数据提取'): # 下面开始文件数据的获取 272 | fh = self.open_excel(excel) # 打开文件 273 | sheet = self.get_sheet(fh)[0] 274 | rows = self.get_sheetrow_num(sheet) # 获取一个sheet下的所有的数据的行数 275 | for row in range(2, rows + 1): 276 | all_sheet_data, header = self.get_sheet_data(sheet, row) 277 | if row == rows: 278 | for i in range(len(all_sheet_data)): 279 | all_data.append(all_sheet_data[i]) # 把每一行作为列表的内容拆出加入大列表 280 | all_data.insert(0, header) # 表头写入 281 | all_data = self.deduplication(all_data) # 去重 282 | return all_data 283 | 284 | def data_to_excel(self, data): 285 | """ 286 | 下面开始文件数据的写入 287 | :param data: 288 | :return: 289 | """ 290 | 291 | new_excel = self.origin_folder_path + "合并完成_{}.xlsx".format(self.last_time) # 新建的excel文件名字 292 | fh1 = Workbook() # 新建一个excel表 293 | new_sheet = fh1.active # 第一张工作表必用 294 | # new_sheet2 = fh1.create_sheet()#后面再使用 295 | 296 | for row_num, row_data in enumerate(data): 297 | new_sheet.append(row_data) 298 | 299 | fh1.save(new_excel) # 关闭该excel表 300 | 301 | def run(self): 302 | 303 | start_time = time.perf_counter() 304 | 305 | all_data = self.data_extraction() 306 | 307 | self.data_to_excel(all_data) 308 | 309 | print("文件合并成功,请查看“" + self.origin_folder_path + "”目录下的test.xlsx文件!") 310 | 311 | ending_time = time.perf_counter() 312 | 313 | print('\n') 314 | print('程序运行时间:%.3f' % (ending_time - start_time) + 's') 315 | 316 | 317 | class FileCopy(FileExcelProcessing): 318 | """ 319 | version 1.0 320 | 已有功能 321 | 1.精确匹配复制数据 322 | 2.模糊匹配 323 | 3.根据类型搜索 324 | 325 | 待加入: 326 | 1.大小写忽略 327 | 2.类型忽略 328 | 3.同名文件处理 329 | 330 | BUG: 331 | 1.input 的对象为字符串 332 | """ 333 | 334 | def __init__(self, origin_folder_path, destination_folder1, file_ref1, file_extent_name, s_type=0): 335 | """ 336 | 337 | :param origin_folder_path: 338 | :param destination_folder1: 339 | :param file_ref1: 340 | :param s_type: 341 | """ 342 | super().__init__(origin_folder_path) 343 | self.destination_path = destination_folder1 344 | self.file_ref = file_ref1 345 | self.search_type = s_type 346 | self.file_extent = file_extent_name 347 | 348 | def search_flag(self, str1, str_list): 349 | """ 350 | 精确匹配或模糊匹配,0精确匹配名字 351 | :param str1: 352 | :param str_list: 匹配的字符串列表 353 | :return: copy_flag 354 | """ 355 | copy_flag = 0 356 | if self.search_type == 1: 357 | for i in str_list: 358 | if re.findall(r'.*%s.*' % i.strip(), str1): 359 | copy_flag = 1 360 | if not self.search_type: 361 | if str1 in str_list: 362 | copy_flag = 1 363 | return copy_flag 364 | 365 | def get_need_list(self): 366 | """ 367 | 需要的文件列表返回 368 | :return: 369 | """ 370 | with open(self.file_ref, 'r', encoding='UTF-8-sig') as f: # 去除\ufeff 371 | filename_list = [] 372 | for i in f: 373 | filename_list.append(i.strip()) 374 | return filename_list 375 | 376 | def single_file_copy(self, folder_path2, file_need_list): 377 | 378 | if self.file_extent == 'None': 379 | file_list = self.file_without_extension(folder_path2) 380 | 381 | elif self.file_extent == 'All': 382 | file_list = self.file_all_type(folder_path2) 383 | 384 | elif self.file_extent == 'excel': 385 | file_list = self.get_excel(folder_path2) 386 | 387 | else: 388 | file_list = self.file_only_type(folder_path2, self.file_extent) 389 | 390 | file_find_list = [] 391 | 392 | for file in file_list: 393 | # 异常处理,解码处理 394 | (filename, extension) = os.path.splitext(file) 395 | 396 | filename = re.split(r'[\\/]', filename)[-1] 397 | 398 | if self.search_flag(filename, file_need_list): 399 | try: 400 | shutil.copy2(file, self.destination_path) 401 | except shutil.SameFileError: 402 | (path, filename) = os.path.split(file) 403 | new_file = os.path.join(self.destination_path, filename) 404 | # print(new_file) 405 | file_new_name = self.auto_save_file(new_file) 406 | shutil.copy2(file, file_new_name) 407 | file_find_list.append(file) 408 | 409 | self.file_to_txt(file_find_list, self.destination_path) # txt文件输出 410 | 411 | def copy_file(self, folder_path1, file_need_list): 412 | """ 413 | 414 | :param folder_path1: 415 | :param file_need_list: 416 | :return: 417 | """ 418 | self.single_file_copy(folder_path1, file_need_list) 419 | list_dir = os.listdir(folder_path1) # 起始位置所有文件 420 | for file_ in list_dir: 421 | file_path = os.path.join(folder_path1, file_) 422 | if os.path.isdir(file_path): 423 | self.copy_file(file_path, file_need_list) 424 | 425 | def run(self): 426 | 427 | start_time = time.perf_counter() 428 | 429 | self.data_clear(self.destination_path) 430 | 431 | file_need_list = self.get_need_list() 432 | print(file_need_list) 433 | 434 | self.copy_file(self.origin_folder_path, file_need_list) 435 | 436 | ending_time = time.perf_counter() 437 | 438 | print('\n') 439 | print('程序运行时间:%.3f' % (ending_time - start_time) + 's') 440 | 441 | 442 | class FileSearch(FileExcelProcessing): 443 | 444 | def __init__(self, origin_folder_path, target_text, file_extent_name): 445 | """ 446 | file_extent = 'N' or 'n'时,支持搜索无后缀文件 447 | file_extent = 'A' or 'a'时,支持全文件搜索 448 | :param origin_folder_path: 449 | :param target_text: 450 | :param file_extent_name: 451 | """ 452 | super().__init__(origin_folder_path) 453 | self.target_content = target_text 454 | self.file_extent = file_extent_name 455 | 456 | def single_file_find(self, folder_path3): 457 | """ 458 | 单个文件夹内容寻找 459 | :param folder_path3: 文件路径 460 | :return: 461 | """ 462 | if self.file_extent == 'None': 463 | pass 464 | 465 | if self.file_extent == 'All': 466 | file_list = self.file_all_type(folder_path3) 467 | 468 | else: 469 | file_list = self.file_only_type(folder_path3, self.file_extent) 470 | 471 | file_last_list = [] 472 | 473 | for file in file_list: 474 | # 异常处理,解码处理 475 | try: 476 | with open(file, 'r') as fh: 477 | for each_line in fh: 478 | if self.target_content in each_line.strip(): 479 | file_last_list.append(file) 480 | break 481 | except Exception: 482 | continue 483 | 484 | self.file_to_txt(file_last_list) # txt文件输出 485 | 486 | def single_excel_find(self, folder_path5): 487 | excel_list = self.get_excel(folder_path5) 488 | if excel_list: 489 | file_list = [] 490 | for excel_name in excel_list: 491 | excel_ = xlrd.open_workbook(excel_name) 492 | for sheet in excel_.sheets(): 493 | num = sheet.nrows 494 | for i in range(num): 495 | if self.target_content in str(sheet.row_values(i)): 496 | file_list.append(excel_name) 497 | # print(excel_name) 498 | break 499 | self.file_to_txt(file_list) 500 | 501 | def find_file_content(self, folder_path4): 502 | """ 503 | # 递归遍历文件夹内的文件夹对象 504 | :param folder_path4: 505 | :return: 506 | """ 507 | if self.file_extent == 'excel': 508 | self.single_excel_find(folder_path4) 509 | elif self.file_extent == 'a': 510 | self.single_excel_find(folder_path4) 511 | self.single_file_find(folder_path4) 512 | else: 513 | self.single_file_find(folder_path4) 514 | 515 | list_dir = os.listdir(folder_path4) # 起始位置所有文件 516 | 517 | for file_ in list_dir: 518 | file_path = os.path.join(folder_path4, file_) 519 | if os.path.isdir(file_path): 520 | self.find_file_content(file_path) 521 | 522 | def run(self): 523 | 524 | start_time = time.perf_counter() 525 | 526 | # 数据清洗 527 | self.data_clear() 528 | 529 | self.find_file_content(self.origin_folder_path) # 主程序运行 530 | ending_time = time.perf_counter() # 程序运行时间 531 | 532 | print('\n') 533 | print('程序运行时间:%.3f' % (ending_time - start_time) + 's') 534 | 535 | 536 | class FilePDFProcessing(FileProcessing): 537 | 538 | def __init__(self, origin_folder_path=None): 539 | super().__init__(origin_folder_path) 540 | 541 | def MergePDF(self): 542 | # 实例化写入对象 543 | output = PdfFileWriter() 544 | outputPages = 0 545 | # 调用上一个函数获取全部文件的绝对路径 546 | file_list = self.file_only_type(self.origin_folder_path, 'pdf') 547 | 548 | for pdf_file in file_list: 549 | 550 | print("文件:%s" % pdf_file.split('\\')[-1], end=' ') 551 | 552 | # 读取PDF文件 553 | pdf_reader = PdfFileReader(open(pdf_file, "rb"), strict=False) 554 | # 获得源PDF文件中页面总数 555 | pageCount = pdf_reader.getNumPages() 556 | outputPages += pageCount 557 | print("页数:%d" % pageCount) 558 | # 分别将page添加到输出output中 559 | for iPage in range(pageCount): 560 | output.addPage(pdf_reader.getPage(iPage)) 561 | print("\n合并后的总页数:%d" % outputPages) 562 | # 写入到目标PDF文件 563 | print("PDF文件正在合并,请稍等......") 564 | 565 | new_pdf = self.origin_folder_path + "merge_{}.pdf".format(self.last_time) 566 | 567 | with open(new_pdf, "wb") as outPutFile: 568 | # 注意这里的写法和正常的上下文文件写入是相反的 569 | output.write(outPutFile) 570 | print("PDF文件合并完成") 571 | 572 | @staticmethod 573 | def SplitPDF(pdf_filename): 574 | 575 | pdf_reader = PdfFileReader(open(pdf_filename, "rb"), strict=False) 576 | for page in range(pdf_reader.getNumPages()): 577 | pdf_writer = PdfFileWriter() 578 | pdf_writer.addPage(pdf_reader.getPage(page)) 579 | with open("分割后的PDF文件{}.pdf".format(page), "wb") as out: 580 | pdf_writer.write(out) 581 | 582 | 583 | """ 584 | 添加pdf文件搜索 585 | """ 586 | 587 | if __name__ == '__main__': 588 | folder_path = r'F:\001-程序学习\001-Python' 589 | des_path = r'F:\001-程序学习\001-Python\000-学习\002-办公自动化' 590 | # folder_path = r'F:\001-程序学习\001-Python\004-项目测试\pdftest' 591 | 592 | file_ref = r'F:\001-程序学习\001-Python\000-学习\002-办公自动化\目标文件列表-2020-11-.txt' 593 | 594 | test = FileSearch(folder_path, '块', 'a') 595 | # test.MergePDF() 596 | test.run() 597 | -------------------------------------------------------------------------------- /create_gui_NoBackgroud: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import sys 5 | 6 | import win32api 7 | import wx 8 | import wx.lib.agw.aui as aui 9 | import wx.lib.inspection 10 | import Img_source 11 | 12 | from OfficeAutomation import FileExcelProcessing 13 | from OfficeAutomation import FilePDFProcessing 14 | from OfficeAutomation import FileSearch 15 | from OfficeAutomation import FileCopy 16 | from OfficeAutomation import FileCompared 17 | 18 | APP_TITLE = u'办公自动化' 19 | 20 | class ExcelFrame(wx.Panel): 21 | """程序副窗口类,继承自wx.Panel""" 22 | 23 | def __init__(self, parent): 24 | 25 | wx.Panel.__init__(self, parent) 26 | 27 | self.title = wx.StaticText(self, label=u'办公自动化-Excel合并') # 单页标题 28 | self.label_path = wx.StaticText(self, label=u'请输入路径') # 固定的文字 29 | 30 | # 输入框控件 31 | self.label_pwd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 32 | self.label_pwd.Bind(wx.EVT_TEXT, self.EvtText) 33 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 34 | HSizer_pwd.Add(self.label_path, proportion=0, flag=wx.ALL, border=5) 35 | HSizer_pwd.Add(self.label_pwd, proportion=1, flag=wx.ALL, border=5) 36 | 37 | # 按钮 38 | self.btn_cd = wx.Button(self, label=u'路径选择', pos=(350, 50), size=(100, 25)) 39 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 40 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 41 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 42 | self.btn_clear = wx.Button(self, label=u'清除', size=(100, 25)) 43 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 44 | 45 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 46 | HSizer_btn.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=5) 47 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=5) 48 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=5) 49 | 50 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 51 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=20) 52 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45) 53 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=45) 54 | self.SetSizer(VSizer_all) 55 | 56 | # 三、调用局部变量并绑定事件 57 | def EvtText(self, evt): 58 | """输入框事件函数""" 59 | self.text = evt.GetString() 60 | 61 | def OnClose(self, evt): 62 | """关闭窗口事件函数""" 63 | 64 | dlg = wx.MessageDialog(None, u'确定要关闭本窗口?', u'操作提示', wx.YES_NO | wx.ICON_QUESTION) 65 | if dlg.ShowModal() == wx.ID_YES: 66 | self.Destroy() 67 | 68 | def OnclickChooseDir(self, evt): 69 | """路径选择""" 70 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 71 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 72 | if dlg.ShowModal() == wx.ID_OK: 73 | self.path = dlg.GetPath() 74 | self.label_pwd.SetValue(self.path) 75 | print(self.path) 76 | 77 | def OnclickConfirm(self, evt): 78 | """鼠标确认""" 79 | if self.text: 80 | self.path = self.text 81 | self.event = FileExcelProcessing(self.path) 82 | self.event.run() 83 | 84 | def OnclickClear(self, evt): 85 | """清除框架内容""" 86 | self.label_pwd.Clear() 87 | 88 | 89 | class PdfFrame(wx.Panel): 90 | """程序副窗口类,继承自wx.Panel""" 91 | 92 | def __init__(self, parent): 93 | 94 | wx.Panel.__init__(self, parent) 95 | 96 | self.title = wx.StaticText(self, label=u'办公自动化-pdf合并') # 单页标题 97 | self.label_path = wx.StaticText(self, label=u'请输入路径') # 固定的文字 98 | 99 | # 输入框控件 100 | self.label_pwd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 101 | self.label_pwd.Bind(wx.EVT_TEXT, self.EvtText) 102 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 103 | HSizer_pwd.Add(self.label_path, proportion=0, flag=wx.ALL, border=5) 104 | HSizer_pwd.Add(self.label_pwd, proportion=1, flag=wx.ALL, border=5) 105 | 106 | # 按钮 107 | self.btn_cd = wx.Button(self, label=u'路径选择', pos=(350, 50), size=(100, 25)) 108 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 109 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 110 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 111 | self.btn_clear = wx.Button(self, label=u'清除', size=(100, 25)) 112 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 113 | 114 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 115 | HSizer_btn.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=5) 116 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=5) 117 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=5) 118 | 119 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 120 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=20) 121 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45) 122 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=45) 123 | self.SetSizer(VSizer_all) 124 | 125 | # 三、调用局部变量并绑定事件 126 | def EvtText(self, evt): 127 | """输入框事件函数""" 128 | self.text = evt.GetString() 129 | 130 | def OnclickChooseDir(self, evt): 131 | """路径选择""" 132 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 133 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 134 | if dlg.ShowModal() == wx.ID_OK: 135 | self.path = dlg.GetPath() 136 | self.label_pwd.SetValue(self.path) 137 | print(self.path) 138 | 139 | def OnclickConfirm(self, evt): 140 | """鼠标确认""" 141 | if self.text: 142 | self.path = self.text 143 | self.event = FilePDFProcessing(self.path) 144 | self.event.MergePDF() 145 | 146 | def OnclickClear(self, evt): 147 | """清除框架内容""" 148 | self.label_pwd.Clear() 149 | 150 | 151 | class FileSearchFrame(wx.Panel): 152 | """程序副窗口类,继承自wx.Panel""" 153 | 154 | def __init__(self, parent): 155 | 156 | wx.Panel.__init__(self, parent) 157 | 158 | self.title = wx.StaticText(self, label=u'办公自动化-文件搜索') # 单页标题 159 | self.label_path = wx.StaticText(self, label=u'搜索路径名') # 固定 160 | self.label_target = wx.StaticText(self, label=u'搜索关键词') 161 | self.label_extent = wx.StaticText(self, label=u'文件扩展名') 162 | 163 | # 输入框控件 164 | self.label_path_wd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 165 | self.label_path_wd.Bind(wx.EVT_TEXT, self.EvtText) 166 | self.label_target_wd = wx.TextCtrl(self, name='TC02', style=wx.TE_LEFT) 167 | self.label_target_wd.Bind(wx.EVT_TEXT, self.EvtText) 168 | self.label_extent_wd = wx.TextCtrl(self, name='TC03', style=wx.TE_LEFT) 169 | self.label_extent_wd.Bind(wx.EVT_TEXT, self.EvtText) 170 | 171 | self.btn_cd = wx.Button(self, label=u'路径选择', size=(100, 25)) 172 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 173 | self.btn_target = wx.Button(self, label=u'清除关键词', size=(100, 25)) 174 | self.btn_target.Bind(wx.EVT_BUTTON, self.OnclickClearTar) 175 | self.scores = ['All', 'None', 'txt', 'doc', 'excel'] 176 | self.btn_extent = wx.Choice(self, choices=self.scores, size=(100, 25)) 177 | self.btn_extent.Bind(wx.EVT_CHOICE, self.OnclickChooseExtent) 178 | self.btn_extent.SetSelection(0) 179 | 180 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 181 | HSizer_pwd.Add(self.label_path, proportion=0, flag=wx.ALL, border=5) 182 | HSizer_pwd.Add(self.label_path_wd, proportion=1, flag=wx.ALL, border=5) 183 | HSizer_pwd.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=10) 184 | HSizer_pwd1 = wx.BoxSizer(wx.HORIZONTAL) 185 | HSizer_pwd1.Add(self.label_target, proportion=0, flag=wx.ALL, border=5) 186 | HSizer_pwd1.Add(self.label_target_wd, proportion=1, flag=wx.ALL, border=5) 187 | HSizer_pwd1.Add(self.btn_target, proportion=0, flag=wx.ALIGN_CENTER, border=10) 188 | HSizer_pwd2 = wx.BoxSizer(wx.HORIZONTAL) 189 | HSizer_pwd2.Add(self.label_extent, proportion=0, flag=wx.ALL, border=5) 190 | HSizer_pwd2.Add(self.label_extent_wd, proportion=1, flag=wx.ALL, border=5) 191 | self.label_extent_wd.SetValue('All') 192 | HSizer_pwd2.Add(self.btn_extent, proportion=0, flag=wx.ALIGN_CENTER, border=10) 193 | 194 | # 按钮 195 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 196 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 197 | self.btn_clear = wx.Button(self, label=u'清除路径', size=(100, 25)) 198 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 199 | 200 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 201 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=25) 202 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=25) 203 | 204 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 205 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=10) 206 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=20) 207 | VSizer_all.Add(HSizer_pwd1, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=20) 208 | VSizer_all.Add(HSizer_pwd2, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=20) 209 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=10) 210 | self.SetSizer(VSizer_all) 211 | 212 | # 三、调用局部变量并绑定事件 213 | def EvtText(self, evt): 214 | """输入框事件函数""" 215 | pass 216 | 217 | def OnclickChooseDir(self, evt): 218 | """路径选择""" 219 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 220 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 221 | if dlg.ShowModal() == wx.ID_OK: 222 | self.path = dlg.GetPath() 223 | self.label_path_wd.SetValue(self.path) 224 | print(self.path) 225 | 226 | def OnclickClearTar(self, evt): 227 | self.label_target_wd.Clear() 228 | 229 | def OnclickConfirm(self, evt): 230 | 231 | """鼠标确认""" 232 | label_path_wd_text = self.label_path_wd.GetValue().strip() 233 | label_target_wd_text = self.label_target_wd.GetValue().strip() 234 | label_extent_wd_text = self.label_extent_wd.GetValue().strip() 235 | 236 | label_path_wd_flag = 0 237 | label_target_wd_flag = 0 238 | label_extent_wd_flag = 0 239 | 240 | if not os.path.isdir(label_path_wd_text): 241 | dlg = wx.MessageDialog(None, u'请输入正确的路径', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 242 | if dlg.ShowModal() == wx.ID_YES: 243 | self.Destroy() 244 | else: 245 | label_path_wd_flag = 1 246 | 247 | if not label_target_wd_text: 248 | dlg = wx.MessageDialog(None, u'请输入正确的关键词', u'关键词内容为空', wx.YES_DEFAULT | wx.ICON_QUESTION) 249 | if dlg.ShowModal() == wx.ID_YES: 250 | self.Destroy() 251 | else: 252 | label_target_wd_flag = 1 253 | 254 | if not label_extent_wd_text: 255 | dlg = wx.MessageDialog(None, u'请输入正确的拓展名', u'拓展名内容为空', wx.YES_DEFAULT | wx.ICON_QUESTION) 256 | if dlg.ShowModal() == wx.ID_YES: 257 | self.Destroy() 258 | else: 259 | label_extent_wd_flag = 1 260 | 261 | all_flag = label_path_wd_flag + label_target_wd_flag + label_extent_wd_flag 262 | if all_flag == 3: 263 | print('开始运行') 264 | self.event = FileSearch(label_path_wd_text, label_target_wd_text, label_extent_wd_text) 265 | self.event.run() 266 | print('运行结束') 267 | 268 | def OnclickClear(self, evt): 269 | """清除框架内容""" 270 | self.label_path_wd.Clear() 271 | 272 | def OnclickChooseExtent(self, evt): 273 | self.extent_text = evt.GetString() 274 | self.label_extent_wd.SetValue(self.extent_text) 275 | 276 | 277 | class FileCopyFrame(wx.Panel): 278 | """程序副窗口类,继承自wx.Panel""" 279 | 280 | def __init__(self, parent): 281 | 282 | wx.Panel.__init__(self, parent) 283 | 284 | self.title = wx.StaticText(self, label=u'办公自动化-文件复制') # 单页标题 285 | self.label_path = wx.StaticText(self, label=u'搜索路径名') # 固定 286 | self.label_target_path = wx.StaticText(self, label=u'保存的位置') 287 | self.label_ref = wx.StaticText(self, label=u'参考的文件') 288 | self.label_extent = wx.StaticText(self, label=u'文件扩展名') 289 | 290 | # 输入框控件 291 | self.label_path_wd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 292 | self.label_path_wd.Bind(wx.EVT_TEXT, self.EvtText) 293 | self.label_target_path_wd = wx.TextCtrl(self, name='TC02', style=wx.TE_LEFT) 294 | self.label_target_path_wd.Bind(wx.EVT_TEXT, self.EvtText) 295 | self.label_ref_wd = wx.TextCtrl(self, name='TC03', style=wx.TE_LEFT) 296 | self.label_ref_wd.Bind(wx.EVT_TEXT, self.EvtText) 297 | self.label_extent_wd = wx.TextCtrl(self, name='TC04', style=wx.TE_LEFT) 298 | self.label_extent_wd.Bind(wx.EVT_TEXT, self.EvtText) 299 | 300 | self.btn_cd = wx.Button(self, label=u'路径选择', size=(100, 25)) 301 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 302 | self.btn_cd2 = wx.Button(self, label=u'路径选择', size=(100, 25)) 303 | self.btn_cd2.Bind(wx.EVT_BUTTON, self.OnclickChooseDir2) 304 | self.btn_target = wx.Button(self, label=u'文件选择', size=(100, 25)) 305 | self.btn_target.Bind(wx.EVT_BUTTON, self.OnclickChooseTar) 306 | self.scores = ['All', 'None', 'txt', 'doc', 'excel', 'pdf', 'dwg'] 307 | self.btn_extent = wx.Choice(self, choices=self.scores, size=(100, 25)) 308 | self.btn_extent.Bind(wx.EVT_CHOICE, self.OnclickChooseExtent) 309 | self.btn_extent.SetSelection(0) 310 | 311 | self.choice = ['精确匹配', '模糊匹配'] 312 | self.btn_label_type = wx.Choice(self, choices=self.choice, size=(100, 25)) 313 | self.btn_label_type.Bind(wx.EVT_CHOICE, self.OnclickChooseLabelType) 314 | self.btn_label_type.SetSelection(0) 315 | self.search_type = 0 316 | 317 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 318 | HSizer_pwd.Add(self.label_path, proportion=0, flag=wx.ALL, border=5) 319 | HSizer_pwd.Add(self.label_path_wd, proportion=1, flag=wx.ALL, border=5) 320 | HSizer_pwd.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=0) 321 | HSizer_pwd1 = wx.BoxSizer(wx.HORIZONTAL) 322 | HSizer_pwd1.Add(self.label_ref, proportion=0, flag=wx.ALL, border=5) 323 | HSizer_pwd1.Add(self.label_ref_wd, proportion=1, flag=wx.ALL, border=5) 324 | HSizer_pwd1.Add(self.btn_target, proportion=0, flag=wx.ALIGN_CENTER, border=10) 325 | HSizer_pwd2 = wx.BoxSizer(wx.HORIZONTAL) 326 | HSizer_pwd2.Add(self.label_extent, proportion=0, flag=wx.ALL, border=5) 327 | HSizer_pwd2.Add(self.label_extent_wd, proportion=1, flag=wx.ALL, border=5) 328 | HSizer_pwd2.Add(self.btn_extent, proportion=0, flag=wx.ALIGN_CENTER, border=10) 329 | self.label_extent_wd.SetValue('All') 330 | HSizer_pwd3 = wx.BoxSizer(wx.HORIZONTAL) 331 | HSizer_pwd3.Add(self.label_target_path, proportion=0, flag=wx.ALL, border=5) 332 | HSizer_pwd3.Add(self.label_target_path_wd, proportion=1, flag=wx.ALL, border=5) 333 | HSizer_pwd3.Add(self.btn_cd2, proportion=0, flag=wx.ALIGN_CENTER, border=10) 334 | 335 | # 按钮 336 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 337 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 338 | self.btn_clear = wx.Button(self, label=u'清除路径', size=(100, 25)) 339 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 340 | 341 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 342 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=20) 343 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=20) 344 | 345 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 346 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=7) 347 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 348 | VSizer_all.Add(HSizer_pwd3, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 349 | VSizer_all.Add(HSizer_pwd1, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 350 | VSizer_all.Add(HSizer_pwd2, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 351 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=10) 352 | self.SetSizer(VSizer_all) 353 | 354 | # 三、调用局部变量并绑定事件 355 | def EvtText(self, evt): 356 | """输入框事件函数""" 357 | pass 358 | 359 | def OnclickChooseDir(self, evt): 360 | """路径选择""" 361 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 362 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 363 | if dlg.ShowModal() == wx.ID_OK: 364 | path = dlg.GetPath() 365 | self.label_path_wd.SetValue(path) 366 | 367 | def OnclickChooseDir2(self, evt): 368 | """路径选择""" 369 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 370 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 371 | if dlg.ShowModal() == wx.ID_OK: 372 | path = dlg.GetPath() 373 | self.label_target_path_wd.SetValue(path) 374 | 375 | def OnclickChooseTar(self, evt): 376 | dlg = wx.FileDialog(None, u'请选择文件:', pos=(20, 20), size=(100, -1), 377 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 378 | if dlg.ShowModal() == wx.ID_OK: 379 | path = dlg.GetPath() 380 | self.label_ref_wd.SetValue(path) 381 | 382 | def OnclickClear(self, evt): 383 | """清除框架内容""" 384 | self.label_path_wd.Clear() 385 | self.label_target_path_wd.Clear() 386 | self.label_ref_wd.Clear() 387 | 388 | def OnclickChooseExtent(self, evt): 389 | self.extent_text = evt.GetString() 390 | self.label_extent_wd.SetValue(self.extent_text) 391 | 392 | def OnclickChooseLabelType(self, evt): 393 | label_text = evt.GetString() 394 | if label_text == self.choice[1]: 395 | self.search_type = 1 396 | 397 | def OnclickConfirm(self, evt): 398 | 399 | """鼠标确认""" 400 | label_path_wd_text = self.label_path_wd.GetValue().strip() 401 | label_tar_path_wd_text = self.label_target_path_wd.GetValue().strip() 402 | label_ref_wd_text = self.label_ref_wd.GetValue().strip() 403 | label_extent_wd_text = self.label_extent_wd.GetValue().strip() 404 | 405 | label_path_wd_flag = 0 406 | label_tar_path_wd_flag = 0 407 | label_ref_wd_flag = 0 408 | label_extent_wd_flag = 0 409 | 410 | if not os.path.isdir(label_path_wd_text): 411 | dlg = wx.MessageDialog(None, u'请输入正确的搜索路径', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 412 | if dlg.ShowModal() == wx.ID_YES: 413 | self.Destroy() 414 | else: 415 | label_path_wd_flag = 1 416 | 417 | if not os.path.isdir(label_tar_path_wd_text): 418 | dlg = wx.MessageDialog(None, u'请输入正确的保存路径', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 419 | if dlg.ShowModal() == wx.ID_YES: 420 | self.Destroy() 421 | else: 422 | label_tar_path_wd_flag = 1 423 | 424 | if (not os.path.isfile(label_ref_wd_text)) or (label_ref_wd_text.split(r'.')[-1].lower() != 'txt'): 425 | dlg = wx.MessageDialog(None, u'请输入正确的参考文件', u'参考文件为空或非txt格式文件', wx.YES_DEFAULT | wx.ICON_QUESTION) 426 | if dlg.ShowModal() == wx.ID_YES: 427 | self.Destroy() 428 | else: 429 | label_ref_wd_flag = 1 430 | 431 | if not label_extent_wd_text: 432 | dlg = wx.MessageDialog(None, u'请输入正确的拓展名', u'拓展名内容为空', wx.YES_DEFAULT | wx.ICON_QUESTION) 433 | if dlg.ShowModal() == wx.ID_YES: 434 | self.Destroy() 435 | else: 436 | label_extent_wd_flag = 1 437 | 438 | all_flag = label_path_wd_flag + label_tar_path_wd_flag + label_ref_wd_flag + label_extent_wd_flag 439 | if all_flag == 4: 440 | print('开始运行') 441 | self.event = FileCopy(label_path_wd_text, label_tar_path_wd_text, label_ref_wd_text, label_extent_wd_text, 442 | self.search_type) 443 | self.event.run() 444 | print('运行结束') 445 | 446 | 447 | class FileComparedFrame(wx.Panel): 448 | """程序副窗口类,继承自wx.Panel""" 449 | 450 | def __init__(self, parent): 451 | 452 | wx.Panel.__init__(self, parent) 453 | 454 | self.title = wx.StaticText(self, label=u'办公自动化-文件对比') # 单页标题 455 | self.label_path1 = wx.StaticText(self, label=u'对比路径一') # 固定 456 | self.label_path2 = wx.StaticText(self, label=u'对比路径二') 457 | self.label_saveP1 = wx.StaticText(self, label=u'保存路径一') 458 | self.label_saveP2 = wx.StaticText(self, label=u'保存路径二') 459 | 460 | # 输入框控件 461 | self.label_path1_wd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 462 | self.label_path1_wd.Bind(wx.EVT_TEXT, self.EvtText) 463 | self.label_path2_wd = wx.TextCtrl(self, name='TC02', style=wx.TE_LEFT) 464 | self.label_path2_wd.Bind(wx.EVT_TEXT, self.EvtText) 465 | self.label_saveP1_wd = wx.TextCtrl(self, name='TC03', style=wx.TE_LEFT) 466 | self.label_saveP1_wd.Bind(wx.EVT_TEXT, self.EvtText) 467 | self.label_saveP2_wd = wx.TextCtrl(self, name='TC04', style=wx.TE_LEFT) 468 | self.label_saveP2_wd.Bind(wx.EVT_TEXT, self.EvtText) 469 | 470 | self.btn_cd = wx.Button(self, label=u'路径选择', size=(100, 25)) 471 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 472 | self.btn_cd2 = wx.Button(self, label=u'路径选择', size=(100, 25)) 473 | self.btn_cd2.Bind(wx.EVT_BUTTON, self.OnclickChooseDir2) 474 | self.btn_saveCD1 = wx.Button(self, label=u'路径选择', size=(100, 25)) 475 | self.btn_saveCD1.Bind(wx.EVT_BUTTON, self.OnclickChooseSaveS) 476 | self.btn_saveCD2 = wx.Button(self, label=u'路径选择', size=(100, 25)) 477 | self.btn_saveCD2.Bind(wx.EVT_BUTTON, self.OnclickChooseSaveD) 478 | 479 | # self.choice = ['精确匹配', '模糊匹配'] 480 | # self.btn_label_type = wx.Choice(self, choices=self.choice, size=(100, 25)) 481 | # self.btn_label_type.Bind(wx.EVT_CHOICE, self.OnclickChooseLabelType) 482 | # self.btn_label_type.SetSelection(0) 483 | # self.search_type = 0 484 | 485 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 486 | HSizer_pwd.Add(self.label_path1, proportion=0, flag=wx.ALL, border=5) 487 | HSizer_pwd.Add(self.label_path1_wd, proportion=1, flag=wx.ALL, border=5) 488 | HSizer_pwd.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=0) 489 | HSizer_pwd1 = wx.BoxSizer(wx.HORIZONTAL) 490 | HSizer_pwd1.Add(self.label_saveP1, proportion=0, flag=wx.ALL, border=5) 491 | HSizer_pwd1.Add(self.label_saveP1_wd, proportion=1, flag=wx.ALL, border=5) 492 | HSizer_pwd1.Add(self.btn_saveCD1, proportion=0, flag=wx.ALIGN_CENTER, border=10) 493 | HSizer_pwd2 = wx.BoxSizer(wx.HORIZONTAL) 494 | HSizer_pwd2.Add(self.label_saveP2, proportion=0, flag=wx.ALL, border=5) 495 | HSizer_pwd2.Add(self.label_saveP2_wd, proportion=1, flag=wx.ALL, border=5) 496 | HSizer_pwd2.Add(self.btn_saveCD2, proportion=0, flag=wx.ALIGN_CENTER, border=10) 497 | 498 | HSizer_pwd3 = wx.BoxSizer(wx.HORIZONTAL) 499 | HSizer_pwd3.Add(self.label_path2, proportion=0, flag=wx.ALL, border=5) 500 | HSizer_pwd3.Add(self.label_path2_wd, proportion=1, flag=wx.ALL, border=5) 501 | HSizer_pwd3.Add(self.btn_cd2, proportion=0, flag=wx.ALIGN_CENTER, border=10) 502 | 503 | # 按钮 504 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 505 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 506 | self.btn_clear = wx.Button(self, label=u'清除路径', size=(100, 25)) 507 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 508 | 509 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 510 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=20) 511 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=20) 512 | 513 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 514 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=7) 515 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 516 | VSizer_all.Add(HSizer_pwd3, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 517 | VSizer_all.Add(HSizer_pwd1, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 518 | VSizer_all.Add(HSizer_pwd2, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 519 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=10) 520 | self.SetSizer(VSizer_all) 521 | 522 | # 三、调用局部变量并绑定事件 523 | def EvtText(self, evt): 524 | """输入框事件函数""" 525 | pass 526 | 527 | def OnclickChooseDir(self, evt): 528 | """路径选择""" 529 | dlg = wx.DirDialog(None, u'请选择对比路径1:', pos=(20, 20), size=(100, -1), 530 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 531 | if dlg.ShowModal() == wx.ID_OK: 532 | path = dlg.GetPath() 533 | self.label_path1_wd.SetValue(path) 534 | 535 | def OnclickChooseDir2(self, evt): 536 | """路径选择""" 537 | dlg = wx.DirDialog(None, u'请选择对比路径2:', pos=(20, 20), size=(100, -1), 538 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 539 | if dlg.ShowModal() == wx.ID_OK: 540 | path = dlg.GetPath() 541 | self.label_path2_wd.SetValue(path) 542 | 543 | def OnclickChooseSaveS(self, evt): 544 | dlg = wx.DirDialog(None, u'请选择路径一相同文件保存的路径:', pos=(20, 20), size=(100, -1), 545 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 546 | if dlg.ShowModal() == wx.ID_OK: 547 | path = dlg.GetPath() 548 | self.label_saveP1_wd.SetValue(path) 549 | 550 | def OnclickChooseSaveD(self, evt): 551 | dlg = wx.DirDialog(None, u'请选择路径二相同文件保存的路径:', pos=(20, 20), size=(100, -1), 552 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 553 | if dlg.ShowModal() == wx.ID_OK: 554 | path = dlg.GetPath() 555 | self.label_saveP2_wd.SetValue(path) 556 | 557 | def OnclickClear(self, evt): 558 | """清除框架内容""" 559 | self.label_path1_wd.Clear() 560 | self.label_path2_wd.Clear() 561 | self.label_saveP1_wd.Clear() 562 | self.label_saveP2_wd.Clear() 563 | 564 | # def OnclickChooseLabelType(self, evt): 565 | # label_text = evt.GetString() 566 | # if label_text == self.choice[1]: 567 | # self.search_type = 1 568 | 569 | def OnclickConfirm(self, evt): 570 | 571 | """鼠标确认""" 572 | label_path_wd_text = self.label_path1_wd.GetValue().strip() 573 | label_tar_path_wd_text = self.label_path2_wd.GetValue().strip() 574 | label_ref_wd_text = self.label_saveP1_wd.GetValue().strip() 575 | label_extent_wd_text = self.label_saveP2_wd.GetValue().strip() 576 | 577 | label_path_wd_flag = 0 578 | label_tar_path_wd_flag = 0 579 | label_ref_wd_flag = 0 580 | label_extent_wd_flag = 0 581 | 582 | if not os.path.isdir(label_path_wd_text): 583 | dlg = wx.MessageDialog(None, u'请输入正确的对比路径一', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 584 | if dlg.ShowModal() == wx.ID_YES: 585 | self.Destroy() 586 | else: 587 | label_path_wd_flag = 1 588 | 589 | if not os.path.isdir(label_tar_path_wd_text): 590 | dlg = wx.MessageDialog(None, u'请输入正确的对比路径二', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 591 | if dlg.ShowModal() == wx.ID_YES: 592 | self.Destroy() 593 | else: 594 | label_tar_path_wd_flag = 1 595 | 596 | if not os.path.isdir(label_ref_wd_text): 597 | dlg = wx.MessageDialog(None, u'请输入正确的保存路径一', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 598 | if dlg.ShowModal() == wx.ID_YES: 599 | self.Destroy() 600 | else: 601 | label_ref_wd_flag = 1 602 | 603 | if not os.path.isdir(label_extent_wd_text): 604 | dlg = wx.MessageDialog(None, u'请输入正确的保存路径二', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 605 | if dlg.ShowModal() == wx.ID_YES: 606 | self.Destroy() 607 | else: 608 | label_extent_wd_flag = 1 609 | 610 | all_flag = label_path_wd_flag + label_tar_path_wd_flag + label_ref_wd_flag + label_extent_wd_flag 611 | if all_flag == 4: 612 | print('开始运行') 613 | self.event = FileCompared(label_path_wd_text, label_tar_path_wd_text, label_ref_wd_text, 614 | label_extent_wd_text) 615 | self.event.run() 616 | print('运行结束') 617 | 618 | 619 | class MainFrame(wx.Frame): 620 | """程序主窗口类,继承自wx.Frame""" 621 | 622 | id_open = wx.NewIdRef() 623 | id_save = wx.NewIdRef() 624 | id_quit = wx.NewIdRef() 625 | 626 | id_help = wx.NewIdRef() 627 | id_about = wx.NewIdRef() 628 | 629 | def __init__(self, parent): 630 | """构造函数""" 631 | 632 | wx.Frame.__init__(self, parent, -1, APP_TITLE) 633 | self.SetBackgroundColour(wx.Colour(224, 224, 224)) 634 | self.SetMaxSize((500, 400)) 635 | self.SetMinSize((500, 400)) 636 | self.Center() 637 | 638 | if hasattr(sys, "frozen") and getattr(sys, "frozen") == "windows_exe": 639 | exeName = win32api.GetModuleFileName(win32api.GetModuleHandle(None)) 640 | icon = wx.Icon(exeName, wx.BITMAP_TYPE_ICO) 641 | else: 642 | icon = Img_source.favicon.GetIcon() 643 | self.SetIcon(icon) 644 | 645 | self.tb1 = self._CreateToolBar() 646 | 647 | # 分页面创建 648 | panel_Excel = ExcelFrame(self) 649 | panel_Pdf = PdfFrame(self) 650 | panel_FileSearch = FileSearchFrame(self) 651 | panel_FileCopy = FileCopyFrame(self) 652 | panel_FileCompared = FileComparedFrame(self) 653 | 654 | p_left = wx.Panel(self) 655 | p_bottom = wx.Panel(self) 656 | 657 | # 分页控制按钮创建 658 | btn_excel = wx.Button(p_left, label=u'Excel合并', pos=(8, 20), size=(100, -1)) 659 | btn_excel.Bind(wx.EVT_BUTTON, self.OnSwitchExcel) 660 | btn_pdf = wx.Button(p_left, label=u'Pdf合并', pos=(8, 50), size=(100, -1)) 661 | btn_pdf.Bind(wx.EVT_BUTTON, self.OnSwitchPdf) 662 | brn_fileCopy = wx.Button(p_left, label=u'文件复制', pos=(8, 80), size=(100, -1)) 663 | brn_fileCopy.Bind(wx.EVT_BUTTON, self.OnSwitchFileCopy) 664 | btn_fileSearch = wx.Button(p_left, label=u'文件搜索', pos=(8, 110), size=(100, -1)) 665 | btn_fileSearch.Bind(wx.EVT_BUTTON, self.OnSwitchFileSearch) 666 | btn_FileCompared = wx.Button(p_left, label=u'文件对比', pos=(8, 140), size=(100, -1)) 667 | btn_FileCompared.Bind(wx.EVT_BUTTON, self.OnSwitchFileCompared) 668 | 669 | self._mgr = aui.AuiManager() 670 | self._mgr.SetManagedWindow(self) 671 | 672 | # 工具条创建 673 | self._mgr.AddPane(self.tb1, 674 | aui.AuiPaneInfo().Name("ToolBar1").Caption(u"工具条").ToolbarPane().Top().Row(0).Position( 675 | 0).Floatable(False).CaptionVisible(False).Resizable(True) 676 | ) 677 | # 功能切换 678 | self._mgr.AddPane(p_left, 679 | aui.AuiPaneInfo().Name("LeftPanel").Left().Layer(1).MinSize((100, -1)).Caption( 680 | u"功能切换区").CaptionVisible(False).Resizable(True) 681 | ) 682 | 683 | # 一功能区域 684 | self._mgr.AddPane(panel_Excel, 685 | aui.AuiPaneInfo().Name("CenterPanelExcel").CenterPane().Show() 686 | ) 687 | 688 | # 二功能区域 689 | self._mgr.AddPane(panel_Pdf, 690 | aui.AuiPaneInfo().Name("CenterPanelPdf").CenterPane().Hide() 691 | ) 692 | 693 | # 三功能区域 694 | self._mgr.AddPane(panel_FileSearch, 695 | aui.AuiPaneInfo().Name("CenterPanelFileSearch").CenterPane().Hide() 696 | ) 697 | 698 | # 四功能区域 699 | self._mgr.AddPane(panel_FileCopy, 700 | aui.AuiPaneInfo().Name("CenterPanelFileCopy").CenterPane().Hide() 701 | ) 702 | 703 | # 五功能区域 704 | self._mgr.AddPane(panel_FileCompared, 705 | aui.AuiPaneInfo().Name("CenterPanelFileCompared").CenterPane().Hide() 706 | ) 707 | 708 | # 消息显示区域 709 | self._mgr.AddPane(p_bottom, 710 | aui.AuiPaneInfo().Name("BottomPanel").Bottom().MinSize((-1, 80)).Caption( 711 | u"消息区").CaptionVisible(False).Resizable(True) 712 | ) 713 | 714 | self._mgr.Update() 715 | 716 | def _CreateToolBar(self, d='H'): 717 | """创建工具栏""" 718 | 719 | bmp_open = Img_source.Open.GetBitmap() 720 | bmp_save = Img_source.Save.GetBitmap() 721 | bmp_help = Img_source.Copy.GetBitmap() 722 | bmp_about = Img_source.About.GetBitmap() 723 | 724 | if d.upper() in ['V', 'VERTICAL']: 725 | tb = aui.AuiToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, 726 | agwStyle=aui.AUI_TB_TEXT | aui.AUI_TB_VERTICAL) 727 | else: 728 | tb = aui.AuiToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, agwStyle=aui.AUI_TB_TEXT) 729 | tb.SetToolBitmapSize(wx.Size(16, 16)) 730 | 731 | tb.AddSimpleTool(self.id_open, u'打开', bmp_open, u'打开文件') 732 | tb.AddSimpleTool(self.id_save, u'保存', bmp_save, u'保存文件') 733 | tb.AddSeparator() 734 | tb.AddSimpleTool(self.id_help, u'帮助', bmp_help, u'帮助') 735 | tb.AddSimpleTool(self.id_about, u'关于', bmp_about, u'关于') 736 | 737 | tb.Realize() 738 | return tb 739 | 740 | def OnSwitch(self, ret_flag): 741 | """切换信息显示窗口""" 742 | 743 | p0 = self._mgr.GetPane('CenterPanelExcel') 744 | p1 = self._mgr.GetPane('CenterPanelPdf') 745 | p2 = self._mgr.GetPane('CenterPanelFileSearch') 746 | p3 = self._mgr.GetPane('CenterPanelFileCopy') 747 | p4 = self._mgr.GetPane('CenterPanelFileCompared') 748 | 749 | p_list = [p0, p1, p2, p3, p4] 750 | 751 | p_mode = p_list.pop(ret_flag) 752 | p_mode.Show() 753 | 754 | for i in p_list: 755 | i.Hide() 756 | 757 | self._mgr.Update() 758 | 759 | def OnSwitchExcel(self, evt): 760 | """Excel合并""" 761 | self.OnSwitch(0) 762 | 763 | def OnSwitchPdf(self, evt): 764 | """PDF合并""" 765 | self.OnSwitch(1) 766 | 767 | def OnSwitchFileSearch(self, evt): 768 | """文件搜索""" 769 | self.OnSwitch(2) 770 | 771 | def OnSwitchFileCopy(self, evt): 772 | self.OnSwitch(3) 773 | 774 | def OnSwitchFileCompared(self, evt): 775 | self.OnSwitch(4) 776 | 777 | 778 | class MainApp(wx.App): 779 | def OnInit(self): 780 | self.SetAppName(APP_TITLE) 781 | self.Frame = MainFrame(None) 782 | self.Frame.Show() 783 | return True 784 | 785 | 786 | if __name__ == "__main__": 787 | # app = MainApp() 788 | app = MainApp(redirect=True, filename="debug.txt") 789 | # wx.lib.inspection.InspectionTool().Show() # 窗口的按钮显示等 790 | app.MainLoop() 791 | -------------------------------------------------------------------------------- /create_gui: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import sys 5 | 6 | import win32api 7 | import wx 8 | import wx.lib.agw.aui as aui 9 | import wx.lib.inspection 10 | import Img_source 11 | 12 | from OfficeAutomation import FileExcelProcessing 13 | from OfficeAutomation import FilePDFProcessing 14 | from OfficeAutomation import FileSearch 15 | from OfficeAutomation import FileCopy 16 | from OfficeAutomation import FileCompared 17 | 18 | APP_TITLE = u'办公自动化' 19 | 20 | #将文本底色改为透明 21 | #第一步:将主事件中wx.StaticText全部换成TransparentStaticText 22 | #第二步:重现StaticText控件 23 | class TransparentStaticText(wx.StaticText): 24 | def __init__(self, parent, id=wx.ID_ANY, label='', pos=wx.DefaultPosition, size=wx.DefaultSize, 25 | style=wx.TRANSPARENT_WINDOW, name='TransparentStaticText'): 26 | wx.StaticText.__init__(self, parent, id, label, pos, size, style, name) 27 | self.Bind(wx.EVT_PAINT, self.OnPaint) 28 | self.Bind(wx.EVT_ERASE_BACKGROUND, lambda event: None) 29 | self.Bind(wx.EVT_SIZE, self.OnSize) 30 | def OnPaint(self, event): 31 | bdc = wx.PaintDC(self) 32 | dc = wx.GCDC(bdc) 33 | font_face = self.GetFont() 34 | font_color = self.GetForegroundColour() 35 | dc.SetFont(font_face) 36 | dc.SetTextForeground(font_color) 37 | dc.DrawText(self.GetLabel(), 0, 0) 38 | def OnSize(self, event): 39 | self.Refresh() 40 | event.Skip() 41 | 42 | class ExcelFrame(wx.Panel): 43 | """程序副窗口类,继承自wx.Panel""" 44 | 45 | def __init__(self, parent): 46 | 47 | wx.Panel.__init__(self, parent) 48 | 49 | self.title = TransparentStaticText(self, label=u'办公自动化-Excel合并') # 单页标题 50 | self.label_path = TransparentStaticText(self, label=u'请输入路径') # 固定的文字 51 | 52 | # 输入框控件 53 | self.label_pwd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 54 | self.label_pwd.Bind(wx.EVT_TEXT, self.EvtText) 55 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 56 | HSizer_pwd.Add(self.label_path, proportion=0, flag=wx.ALL, border=5) 57 | HSizer_pwd.Add(self.label_pwd, proportion=1, flag=wx.ALL, border=5) 58 | 59 | # 按钮 60 | self.btn_cd = wx.Button(self, label=u'路径选择', pos=(350, 50), size=(100, 25)) 61 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 62 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 63 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 64 | self.btn_clear = wx.Button(self, label=u'清除', size=(100, 25)) 65 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 66 | 67 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 68 | HSizer_btn.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=5) 69 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=5) 70 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=5) 71 | 72 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 73 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=20) 74 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45) 75 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=45) 76 | self.SetSizer(VSizer_all) 77 | 78 | # 三、调用局部变量并绑定事件 79 | def EvtText(self, evt): 80 | """输入框事件函数""" 81 | self.text = evt.GetString() 82 | 83 | def OnClose(self, evt): 84 | """关闭窗口事件函数""" 85 | 86 | dlg = wx.MessageDialog(None, u'确定要关闭本窗口?', u'操作提示', wx.YES_NO | wx.ICON_QUESTION) 87 | if dlg.ShowModal() == wx.ID_YES: 88 | self.Destroy() 89 | 90 | def OnclickChooseDir(self, evt): 91 | """路径选择""" 92 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 93 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 94 | if dlg.ShowModal() == wx.ID_OK: 95 | self.path = dlg.GetPath() 96 | self.label_pwd.SetValue(self.path) 97 | print(self.path) 98 | 99 | def OnclickConfirm(self, evt): 100 | """鼠标确认""" 101 | if self.text: 102 | self.path = self.text 103 | self.event = FileExcelProcessing(self.path) 104 | self.event.run() 105 | 106 | def OnclickClear(self, evt): 107 | """清除框架内容""" 108 | self.label_pwd.Clear() 109 | 110 | 111 | class PdfFrame(wx.Panel): 112 | """程序副窗口类,继承自wx.Panel""" 113 | 114 | def __init__(self, parent): 115 | 116 | wx.Panel.__init__(self, parent) 117 | 118 | self.title = TransparentStaticText(self, label=u'办公自动化-pdf合并') # 单页标题 119 | self.label_path = TransparentStaticText(self, label=u'请输入路径') # 固定的文字 120 | 121 | # 输入框控件 122 | self.label_pwd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 123 | self.label_pwd.Bind(wx.EVT_TEXT, self.EvtText) 124 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 125 | HSizer_pwd.Add(self.label_path, proportion=0, flag=wx.ALL, border=5) 126 | HSizer_pwd.Add(self.label_pwd, proportion=1, flag=wx.ALL, border=5) 127 | 128 | # 按钮 129 | self.btn_cd = wx.Button(self, label=u'路径选择', pos=(350, 50), size=(100, 25)) 130 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 131 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 132 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 133 | self.btn_clear = wx.Button(self, label=u'清除', size=(100, 25)) 134 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 135 | 136 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 137 | HSizer_btn.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=5) 138 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=5) 139 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=5) 140 | 141 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 142 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=20) 143 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45) 144 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=45) 145 | self.SetSizer(VSizer_all) 146 | 147 | # 三、调用局部变量并绑定事件 148 | def EvtText(self, evt): 149 | """输入框事件函数""" 150 | self.text = evt.GetString() 151 | 152 | def OnclickChooseDir(self, evt): 153 | """路径选择""" 154 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 155 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 156 | if dlg.ShowModal() == wx.ID_OK: 157 | self.path = dlg.GetPath() 158 | self.label_pwd.SetValue(self.path) 159 | print(self.path) 160 | 161 | def OnclickConfirm(self, evt): 162 | """鼠标确认""" 163 | if self.text: 164 | self.path = self.text 165 | self.event = FilePDFProcessing(self.path) 166 | self.event.MergePDF() 167 | 168 | def OnclickClear(self, evt): 169 | """清除框架内容""" 170 | self.label_pwd.Clear() 171 | 172 | 173 | class FileSearchFrame(wx.Panel): 174 | """程序副窗口类,继承自wx.Panel""" 175 | 176 | def __init__(self, parent): 177 | 178 | wx.Panel.__init__(self, parent) 179 | 180 | self.title = TransparentStaticText(self, label=u'办公自动化-文件搜索') # 单页标题 181 | self.label_path = TransparentStaticText(self, label=u'搜索路径名') # 固定 182 | self.label_target = TransparentStaticText(self, label=u'搜索关键词') 183 | self.label_extent = TransparentStaticText(self, label=u'文件扩展名') 184 | 185 | # 输入框控件 186 | self.label_path_wd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 187 | self.label_path_wd.Bind(wx.EVT_TEXT, self.EvtText) 188 | self.label_target_wd = wx.TextCtrl(self, name='TC02', style=wx.TE_LEFT) 189 | self.label_target_wd.Bind(wx.EVT_TEXT, self.EvtText) 190 | self.label_extent_wd = wx.TextCtrl(self, name='TC03', style=wx.TE_LEFT) 191 | self.label_extent_wd.Bind(wx.EVT_TEXT, self.EvtText) 192 | 193 | self.btn_cd = wx.Button(self, label=u'路径选择', size=(100, 25)) 194 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 195 | self.btn_target = wx.Button(self, label=u'清除关键词', size=(100, 25)) 196 | self.btn_target.Bind(wx.EVT_BUTTON, self.OnclickClearTar) 197 | self.scores = ['All', 'None', 'txt', 'doc', 'excel'] 198 | self.btn_extent = wx.Choice(self, choices=self.scores, size=(100, 25)) 199 | self.btn_extent.Bind(wx.EVT_CHOICE, self.OnclickChooseExtent) 200 | self.btn_extent.SetSelection(0) 201 | 202 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 203 | HSizer_pwd.Add(self.label_path, proportion=0, flag=wx.ALL, border=5) 204 | HSizer_pwd.Add(self.label_path_wd, proportion=1, flag=wx.ALL, border=5) 205 | HSizer_pwd.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=10) 206 | HSizer_pwd1 = wx.BoxSizer(wx.HORIZONTAL) 207 | HSizer_pwd1.Add(self.label_target, proportion=0, flag=wx.ALL, border=5) 208 | HSizer_pwd1.Add(self.label_target_wd, proportion=1, flag=wx.ALL, border=5) 209 | HSizer_pwd1.Add(self.btn_target, proportion=0, flag=wx.ALIGN_CENTER, border=10) 210 | HSizer_pwd2 = wx.BoxSizer(wx.HORIZONTAL) 211 | HSizer_pwd2.Add(self.label_extent, proportion=0, flag=wx.ALL, border=5) 212 | HSizer_pwd2.Add(self.label_extent_wd, proportion=1, flag=wx.ALL, border=5) 213 | self.label_extent_wd.SetValue('All') 214 | HSizer_pwd2.Add(self.btn_extent, proportion=0, flag=wx.ALIGN_CENTER, border=10) 215 | 216 | # 按钮 217 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 218 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 219 | self.btn_clear = wx.Button(self, label=u'清除路径', size=(100, 25)) 220 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 221 | 222 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 223 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=25) 224 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=25) 225 | 226 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 227 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=10) 228 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=20) 229 | VSizer_all.Add(HSizer_pwd1, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=20) 230 | VSizer_all.Add(HSizer_pwd2, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=20) 231 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=10) 232 | self.SetSizer(VSizer_all) 233 | 234 | # 三、调用局部变量并绑定事件 235 | def EvtText(self, evt): 236 | """输入框事件函数""" 237 | pass 238 | 239 | def OnclickChooseDir(self, evt): 240 | """路径选择""" 241 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 242 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 243 | if dlg.ShowModal() == wx.ID_OK: 244 | self.path = dlg.GetPath() 245 | self.label_path_wd.SetValue(self.path) 246 | print(self.path) 247 | 248 | def OnclickClearTar(self, evt): 249 | self.label_target_wd.Clear() 250 | 251 | def OnclickConfirm(self, evt): 252 | 253 | """鼠标确认""" 254 | label_path_wd_text = self.label_path_wd.GetValue().strip() 255 | label_target_wd_text = self.label_target_wd.GetValue().strip() 256 | label_extent_wd_text = self.label_extent_wd.GetValue().strip() 257 | 258 | label_path_wd_flag = 0 259 | label_target_wd_flag = 0 260 | label_extent_wd_flag = 0 261 | 262 | if not os.path.isdir(label_path_wd_text): 263 | dlg = wx.MessageDialog(None, u'请输入正确的路径', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 264 | if dlg.ShowModal() == wx.ID_YES: 265 | self.Destroy() 266 | else: 267 | label_path_wd_flag = 1 268 | 269 | if not label_target_wd_text: 270 | dlg = wx.MessageDialog(None, u'请输入正确的关键词', u'关键词内容为空', wx.YES_DEFAULT | wx.ICON_QUESTION) 271 | if dlg.ShowModal() == wx.ID_YES: 272 | self.Destroy() 273 | else: 274 | label_target_wd_flag = 1 275 | 276 | if not label_extent_wd_text: 277 | dlg = wx.MessageDialog(None, u'请输入正确的拓展名', u'拓展名内容为空', wx.YES_DEFAULT | wx.ICON_QUESTION) 278 | if dlg.ShowModal() == wx.ID_YES: 279 | self.Destroy() 280 | else: 281 | label_extent_wd_flag = 1 282 | 283 | all_flag = label_path_wd_flag + label_target_wd_flag + label_extent_wd_flag 284 | if all_flag == 3: 285 | print('开始运行') 286 | self.event = FileSearch(label_path_wd_text, label_target_wd_text, label_extent_wd_text) 287 | self.event.run() 288 | print('运行结束') 289 | 290 | def OnclickClear(self, evt): 291 | """清除框架内容""" 292 | self.label_path_wd.Clear() 293 | 294 | def OnclickChooseExtent(self, evt): 295 | self.extent_text = evt.GetString() 296 | self.label_extent_wd.SetValue(self.extent_text) 297 | 298 | 299 | class FileCopyFrame(wx.Panel): 300 | """程序副窗口类,继承自wx.Panel""" 301 | 302 | def __init__(self, parent): 303 | 304 | wx.Panel.__init__(self, parent) 305 | 306 | self.title = TransparentStaticText(self, label=u'办公自动化-文件复制') # 单页标题 307 | self.label_path = TransparentStaticText(self, label=u'搜索路径名') # 固定 308 | self.label_target_path = TransparentStaticText(self, label=u'保存的位置') 309 | self.label_ref = TransparentStaticText(self, label=u'参考的文件') 310 | self.label_extent = TransparentStaticText(self, label=u'文件扩展名') 311 | 312 | # 输入框控件 313 | self.label_path_wd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 314 | self.label_path_wd.Bind(wx.EVT_TEXT, self.EvtText) 315 | self.label_target_path_wd = wx.TextCtrl(self, name='TC02', style=wx.TE_LEFT) 316 | self.label_target_path_wd.Bind(wx.EVT_TEXT, self.EvtText) 317 | self.label_ref_wd = wx.TextCtrl(self, name='TC03', style=wx.TE_LEFT) 318 | self.label_ref_wd.Bind(wx.EVT_TEXT, self.EvtText) 319 | self.label_extent_wd = wx.TextCtrl(self, name='TC04', style=wx.TE_LEFT) 320 | self.label_extent_wd.Bind(wx.EVT_TEXT, self.EvtText) 321 | 322 | self.btn_cd = wx.Button(self, label=u'路径选择', size=(100, 25)) 323 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 324 | self.btn_cd2 = wx.Button(self, label=u'路径选择', size=(100, 25)) 325 | self.btn_cd2.Bind(wx.EVT_BUTTON, self.OnclickChooseDir2) 326 | self.btn_target = wx.Button(self, label=u'文件选择', size=(100, 25)) 327 | self.btn_target.Bind(wx.EVT_BUTTON, self.OnclickChooseTar) 328 | self.scores = ['All', 'None', 'txt', 'doc', 'excel', 'pdf', 'dwg'] 329 | self.btn_extent = wx.Choice(self, choices=self.scores, size=(100, 25)) 330 | self.btn_extent.Bind(wx.EVT_CHOICE, self.OnclickChooseExtent) 331 | self.btn_extent.SetSelection(0) 332 | 333 | self.choice = ['精确匹配', '模糊匹配'] 334 | self.btn_label_type = wx.Choice(self, choices=self.choice, size=(100, 25)) 335 | self.btn_label_type.Bind(wx.EVT_CHOICE, self.OnclickChooseLabelType) 336 | self.btn_label_type.SetSelection(0) 337 | self.search_type = 0 338 | 339 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 340 | HSizer_pwd.Add(self.label_path, proportion=0, flag=wx.ALL, border=5) 341 | HSizer_pwd.Add(self.label_path_wd, proportion=1, flag=wx.ALL, border=5) 342 | HSizer_pwd.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=0) 343 | HSizer_pwd1 = wx.BoxSizer(wx.HORIZONTAL) 344 | HSizer_pwd1.Add(self.label_ref, proportion=0, flag=wx.ALL, border=5) 345 | HSizer_pwd1.Add(self.label_ref_wd, proportion=1, flag=wx.ALL, border=5) 346 | HSizer_pwd1.Add(self.btn_target, proportion=0, flag=wx.ALIGN_CENTER, border=10) 347 | HSizer_pwd2 = wx.BoxSizer(wx.HORIZONTAL) 348 | HSizer_pwd2.Add(self.label_extent, proportion=0, flag=wx.ALL, border=5) 349 | HSizer_pwd2.Add(self.label_extent_wd, proportion=1, flag=wx.ALL, border=5) 350 | HSizer_pwd2.Add(self.btn_extent, proportion=0, flag=wx.ALIGN_CENTER, border=10) 351 | self.label_extent_wd.SetValue('All') 352 | HSizer_pwd3 = wx.BoxSizer(wx.HORIZONTAL) 353 | HSizer_pwd3.Add(self.label_target_path, proportion=0, flag=wx.ALL, border=5) 354 | HSizer_pwd3.Add(self.label_target_path_wd, proportion=1, flag=wx.ALL, border=5) 355 | HSizer_pwd3.Add(self.btn_cd2, proportion=0, flag=wx.ALIGN_CENTER, border=10) 356 | 357 | # 按钮 358 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 359 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 360 | self.btn_clear = wx.Button(self, label=u'清除路径', size=(100, 25)) 361 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 362 | 363 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 364 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=20) 365 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=20) 366 | 367 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 368 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=7) 369 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 370 | VSizer_all.Add(HSizer_pwd3, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 371 | VSizer_all.Add(HSizer_pwd1, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 372 | VSizer_all.Add(HSizer_pwd2, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 373 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=10) 374 | self.SetSizer(VSizer_all) 375 | 376 | # 三、调用局部变量并绑定事件 377 | def EvtText(self, evt): 378 | """输入框事件函数""" 379 | pass 380 | 381 | def OnclickChooseDir(self, evt): 382 | """路径选择""" 383 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 384 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 385 | if dlg.ShowModal() == wx.ID_OK: 386 | path = dlg.GetPath() 387 | self.label_path_wd.SetValue(path) 388 | 389 | def OnclickChooseDir2(self, evt): 390 | """路径选择""" 391 | dlg = wx.DirDialog(None, u'请选择一个路径:', pos=(20, 20), size=(100, -1), 392 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 393 | if dlg.ShowModal() == wx.ID_OK: 394 | path = dlg.GetPath() 395 | self.label_target_path_wd.SetValue(path) 396 | 397 | def OnclickChooseTar(self, evt): 398 | dlg = wx.FileDialog(None, u'请选择文件:', pos=(20, 20), size=(100, -1), 399 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 400 | if dlg.ShowModal() == wx.ID_OK: 401 | path = dlg.GetPath() 402 | self.label_ref_wd.SetValue(path) 403 | 404 | def OnclickClear(self, evt): 405 | """清除框架内容""" 406 | self.label_path_wd.Clear() 407 | self.label_target_path_wd.Clear() 408 | self.label_ref_wd.Clear() 409 | 410 | def OnclickChooseExtent(self, evt): 411 | self.extent_text = evt.GetString() 412 | self.label_extent_wd.SetValue(self.extent_text) 413 | 414 | def OnclickChooseLabelType(self, evt): 415 | label_text = evt.GetString() 416 | if label_text == self.choice[1]: 417 | self.search_type = 1 418 | 419 | def OnclickConfirm(self, evt): 420 | 421 | """鼠标确认""" 422 | label_path_wd_text = self.label_path_wd.GetValue().strip() 423 | label_tar_path_wd_text = self.label_target_path_wd.GetValue().strip() 424 | label_ref_wd_text = self.label_ref_wd.GetValue().strip() 425 | label_extent_wd_text = self.label_extent_wd.GetValue().strip() 426 | 427 | label_path_wd_flag = 0 428 | label_tar_path_wd_flag = 0 429 | label_ref_wd_flag = 0 430 | label_extent_wd_flag = 0 431 | 432 | if not os.path.isdir(label_path_wd_text): 433 | dlg = wx.MessageDialog(None, u'请输入正确的搜索路径', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 434 | if dlg.ShowModal() == wx.ID_YES: 435 | self.Destroy() 436 | else: 437 | label_path_wd_flag = 1 438 | 439 | if not os.path.isdir(label_tar_path_wd_text): 440 | dlg = wx.MessageDialog(None, u'请输入正确的保存路径', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 441 | if dlg.ShowModal() == wx.ID_YES: 442 | self.Destroy() 443 | else: 444 | label_tar_path_wd_flag = 1 445 | 446 | if (not os.path.isfile(label_ref_wd_text)) or (label_ref_wd_text.split(r'.')[-1].lower() != 'txt'): 447 | dlg = wx.MessageDialog(None, u'请输入正确的参考文件', u'参考文件为空或非txt格式文件', wx.YES_DEFAULT | wx.ICON_QUESTION) 448 | if dlg.ShowModal() == wx.ID_YES: 449 | self.Destroy() 450 | else: 451 | label_ref_wd_flag = 1 452 | 453 | if not label_extent_wd_text: 454 | dlg = wx.MessageDialog(None, u'请输入正确的拓展名', u'拓展名内容为空', wx.YES_DEFAULT | wx.ICON_QUESTION) 455 | if dlg.ShowModal() == wx.ID_YES: 456 | self.Destroy() 457 | else: 458 | label_extent_wd_flag = 1 459 | 460 | all_flag = label_path_wd_flag + label_tar_path_wd_flag + label_ref_wd_flag + label_extent_wd_flag 461 | if all_flag == 4: 462 | print('开始运行') 463 | self.event = FileCopy(label_path_wd_text, label_tar_path_wd_text, label_ref_wd_text, label_extent_wd_text, 464 | self.search_type) 465 | self.event.run() 466 | print('运行结束') 467 | 468 | 469 | class FileComparedFrame(wx.Panel): 470 | """程序副窗口类,继承自wx.Panel""" 471 | 472 | def __init__(self, parent): 473 | 474 | wx.Panel.__init__(self, parent) 475 | 476 | self.title = TransparentStaticText(self, label=u'办公自动化-文件对比') # 单页标题 477 | self.label_path1 = TransparentStaticText(self, label=u'对比路径一') # 固定 478 | self.label_path2 = TransparentStaticText(self, label=u'对比路径二') 479 | self.label_saveP1 = TransparentStaticText(self, label=u'保存路径一') 480 | self.label_saveP2 = TransparentStaticText(self, label=u'保存路径二') 481 | 482 | # 输入框控件 483 | self.label_path1_wd = wx.TextCtrl(self, name='TC01', style=wx.TE_LEFT) 484 | self.label_path1_wd.Bind(wx.EVT_TEXT, self.EvtText) 485 | self.label_path2_wd = wx.TextCtrl(self, name='TC02', style=wx.TE_LEFT) 486 | self.label_path2_wd.Bind(wx.EVT_TEXT, self.EvtText) 487 | self.label_saveP1_wd = wx.TextCtrl(self, name='TC03', style=wx.TE_LEFT) 488 | self.label_saveP1_wd.Bind(wx.EVT_TEXT, self.EvtText) 489 | self.label_saveP2_wd = wx.TextCtrl(self, name='TC04', style=wx.TE_LEFT) 490 | self.label_saveP2_wd.Bind(wx.EVT_TEXT, self.EvtText) 491 | 492 | self.btn_cd = wx.Button(self, label=u'路径选择', size=(100, 25)) 493 | self.btn_cd.Bind(wx.EVT_BUTTON, self.OnclickChooseDir) 494 | self.btn_cd2 = wx.Button(self, label=u'路径选择', size=(100, 25)) 495 | self.btn_cd2.Bind(wx.EVT_BUTTON, self.OnclickChooseDir2) 496 | self.btn_saveCD1 = wx.Button(self, label=u'路径选择', size=(100, 25)) 497 | self.btn_saveCD1.Bind(wx.EVT_BUTTON, self.OnclickChooseSaveS) 498 | self.btn_saveCD2 = wx.Button(self, label=u'路径选择', size=(100, 25)) 499 | self.btn_saveCD2.Bind(wx.EVT_BUTTON, self.OnclickChooseSaveD) 500 | 501 | # self.choice = ['精确匹配', '模糊匹配'] 502 | # self.btn_label_type = wx.Choice(self, choices=self.choice, size=(100, 25)) 503 | # self.btn_label_type.Bind(wx.EVT_CHOICE, self.OnclickChooseLabelType) 504 | # self.btn_label_type.SetSelection(0) 505 | # self.search_type = 0 506 | 507 | HSizer_pwd = wx.BoxSizer(wx.HORIZONTAL) 508 | HSizer_pwd.Add(self.label_path1, proportion=0, flag=wx.ALL, border=5) 509 | HSizer_pwd.Add(self.label_path1_wd, proportion=1, flag=wx.ALL, border=5) 510 | HSizer_pwd.Add(self.btn_cd, proportion=0, flag=wx.ALIGN_CENTER, border=0) 511 | HSizer_pwd1 = wx.BoxSizer(wx.HORIZONTAL) 512 | HSizer_pwd1.Add(self.label_saveP1, proportion=0, flag=wx.ALL, border=5) 513 | HSizer_pwd1.Add(self.label_saveP1_wd, proportion=1, flag=wx.ALL, border=5) 514 | HSizer_pwd1.Add(self.btn_saveCD1, proportion=0, flag=wx.ALIGN_CENTER, border=10) 515 | HSizer_pwd2 = wx.BoxSizer(wx.HORIZONTAL) 516 | HSizer_pwd2.Add(self.label_saveP2, proportion=0, flag=wx.ALL, border=5) 517 | HSizer_pwd2.Add(self.label_saveP2_wd, proportion=1, flag=wx.ALL, border=5) 518 | HSizer_pwd2.Add(self.btn_saveCD2, proportion=0, flag=wx.ALIGN_CENTER, border=10) 519 | 520 | HSizer_pwd3 = wx.BoxSizer(wx.HORIZONTAL) 521 | HSizer_pwd3.Add(self.label_path2, proportion=0, flag=wx.ALL, border=5) 522 | HSizer_pwd3.Add(self.label_path2_wd, proportion=1, flag=wx.ALL, border=5) 523 | HSizer_pwd3.Add(self.btn_cd2, proportion=0, flag=wx.ALIGN_CENTER, border=10) 524 | 525 | # 按钮 526 | self.btn_confirm = wx.Button(self, label=u'确认', size=(100, 25)) 527 | self.btn_confirm.Bind(wx.EVT_BUTTON, self.OnclickConfirm) 528 | self.btn_clear = wx.Button(self, label=u'清除路径', size=(100, 25)) 529 | self.btn_clear.Bind(wx.EVT_BUTTON, self.OnclickClear) 530 | 531 | HSizer_btn = wx.BoxSizer(wx.HORIZONTAL) 532 | HSizer_btn.Add(self.btn_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=20) 533 | HSizer_btn.Add(self.btn_clear, proportion=0, flag=wx.ALIGN_CENTER, border=20) 534 | 535 | VSizer_all = wx.BoxSizer(wx.VERTICAL) 536 | VSizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=7) 537 | VSizer_all.Add(HSizer_pwd, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 538 | VSizer_all.Add(HSizer_pwd3, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 539 | VSizer_all.Add(HSizer_pwd1, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 540 | VSizer_all.Add(HSizer_pwd2, proportion=0, flag=wx.ALIGN_CENTER | wx.RIGHT, border=25) 541 | VSizer_all.Add(HSizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=10) 542 | self.SetSizer(VSizer_all) 543 | 544 | # 三、调用局部变量并绑定事件 545 | def EvtText(self, evt): 546 | """输入框事件函数""" 547 | pass 548 | 549 | def OnclickChooseDir(self, evt): 550 | """路径选择""" 551 | dlg = wx.DirDialog(None, u'请选择对比路径1:', pos=(20, 20), size=(100, -1), 552 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 553 | if dlg.ShowModal() == wx.ID_OK: 554 | path = dlg.GetPath() 555 | self.label_path1_wd.SetValue(path) 556 | 557 | def OnclickChooseDir2(self, evt): 558 | """路径选择""" 559 | dlg = wx.DirDialog(None, u'请选择对比路径2:', pos=(20, 20), size=(100, -1), 560 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 561 | if dlg.ShowModal() == wx.ID_OK: 562 | path = dlg.GetPath() 563 | self.label_path2_wd.SetValue(path) 564 | 565 | def OnclickChooseSaveS(self, evt): 566 | dlg = wx.DirDialog(None, u'请选择路径一相同文件保存的路径:', pos=(20, 20), size=(100, -1), 567 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 568 | if dlg.ShowModal() == wx.ID_OK: 569 | path = dlg.GetPath() 570 | self.label_saveP1_wd.SetValue(path) 571 | 572 | def OnclickChooseSaveD(self, evt): 573 | dlg = wx.DirDialog(None, u'请选择路径二相同文件保存的路径:', pos=(20, 20), size=(100, -1), 574 | style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 575 | if dlg.ShowModal() == wx.ID_OK: 576 | path = dlg.GetPath() 577 | self.label_saveP2_wd.SetValue(path) 578 | 579 | def OnclickClear(self, evt): 580 | """清除框架内容""" 581 | self.label_path1_wd.Clear() 582 | self.label_path2_wd.Clear() 583 | self.label_saveP1_wd.Clear() 584 | self.label_saveP2_wd.Clear() 585 | 586 | # def OnclickChooseLabelType(self, evt): 587 | # label_text = evt.GetString() 588 | # if label_text == self.choice[1]: 589 | # self.search_type = 1 590 | 591 | def OnclickConfirm(self, evt): 592 | 593 | """鼠标确认""" 594 | label_path_wd_text = self.label_path1_wd.GetValue().strip() 595 | label_tar_path_wd_text = self.label_path2_wd.GetValue().strip() 596 | label_ref_wd_text = self.label_saveP1_wd.GetValue().strip() 597 | label_extent_wd_text = self.label_saveP2_wd.GetValue().strip() 598 | 599 | label_path_wd_flag = 0 600 | label_tar_path_wd_flag = 0 601 | label_ref_wd_flag = 0 602 | label_extent_wd_flag = 0 603 | 604 | if not os.path.isdir(label_path_wd_text): 605 | dlg = wx.MessageDialog(None, u'请输入正确的对比路径一', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 606 | if dlg.ShowModal() == wx.ID_YES: 607 | self.Destroy() 608 | else: 609 | label_path_wd_flag = 1 610 | 611 | if not os.path.isdir(label_tar_path_wd_text): 612 | dlg = wx.MessageDialog(None, u'请输入正确的对比路径二', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 613 | if dlg.ShowModal() == wx.ID_YES: 614 | self.Destroy() 615 | else: 616 | label_tar_path_wd_flag = 1 617 | 618 | if not os.path.isdir(label_ref_wd_text): 619 | dlg = wx.MessageDialog(None, u'请输入正确的保存路径一', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 620 | if dlg.ShowModal() == wx.ID_YES: 621 | self.Destroy() 622 | else: 623 | label_ref_wd_flag = 1 624 | 625 | if not os.path.isdir(label_extent_wd_text): 626 | dlg = wx.MessageDialog(None, u'请输入正确的保存路径二', u'路径不正确', wx.YES_DEFAULT | wx.ICON_QUESTION) 627 | if dlg.ShowModal() == wx.ID_YES: 628 | self.Destroy() 629 | else: 630 | label_extent_wd_flag = 1 631 | 632 | all_flag = label_path_wd_flag + label_tar_path_wd_flag + label_ref_wd_flag + label_extent_wd_flag 633 | if all_flag == 4: 634 | print('开始运行') 635 | self.event = FileCompared(label_path_wd_text, label_tar_path_wd_text, label_ref_wd_text, 636 | label_extent_wd_text) 637 | self.event.run() 638 | print('运行结束') 639 | 640 | 641 | class MainFrame(wx.Frame): 642 | """程序主窗口类,继承自wx.Frame""" 643 | 644 | id_open = wx.NewIdRef() 645 | id_save = wx.NewIdRef() 646 | id_quit = wx.NewIdRef() 647 | 648 | id_help = wx.NewIdRef() 649 | id_about = wx.NewIdRef() 650 | 651 | def __init__(self, parent): 652 | """构造函数""" 653 | 654 | wx.Frame.__init__(self, parent, -1, APP_TITLE) 655 | self.SetBackgroundColour(wx.Colour(224, 224, 224)) 656 | self.SetMaxSize((500, 400)) 657 | self.SetMinSize((500, 400)) 658 | self.Center() 659 | 660 | if hasattr(sys, "frozen") and getattr(sys, "frozen") == "windows_exe": 661 | exeName = win32api.GetModuleFileName(win32api.GetModuleHandle(None)) 662 | icon = wx.Icon(exeName, wx.BITMAP_TYPE_ICO) 663 | else: 664 | icon = Img_source.favicon.GetIcon() 665 | self.SetIcon(icon) 666 | 667 | self.tb1 = self._CreateToolBar() 668 | 669 | # 分页面创建 670 | panel_Excel = ExcelFrame(self) 671 | panel_Pdf = PdfFrame(self) 672 | panel_FileSearch = FileSearchFrame(self) 673 | panel_FileCopy = FileCopyFrame(self) 674 | panel_FileCompared = FileComparedFrame(self) 675 | 676 | p_left = wx.Panel(self) 677 | p_bottom = wx.Panel(self) 678 | 679 | panel_Excel.Bind(wx.EVT_ERASE_BACKGROUND,self.OnEraseBack) 680 | panel_Pdf.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack) 681 | panel_FileSearch.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack) 682 | panel_FileCopy.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack) 683 | panel_FileCompared.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack) 684 | # p_left.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack) 685 | # p_bottom.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack) 686 | 687 | # 分页控制按钮创建 688 | btn_excel = wx.Button(p_left, label=u'Excel合并', pos=(8, 20), size=(100, -1)) 689 | btn_excel.Bind(wx.EVT_BUTTON, self.OnSwitchExcel) 690 | btn_pdf = wx.Button(p_left, label=u'Pdf合并', pos=(8, 50), size=(100, -1)) 691 | btn_pdf.Bind(wx.EVT_BUTTON, self.OnSwitchPdf) 692 | brn_fileCopy = wx.Button(p_left, label=u'文件复制', pos=(8, 80), size=(100, -1)) 693 | brn_fileCopy.Bind(wx.EVT_BUTTON, self.OnSwitchFileCopy) 694 | btn_fileSearch = wx.Button(p_left, label=u'文件搜索', pos=(8, 110), size=(100, -1)) 695 | btn_fileSearch.Bind(wx.EVT_BUTTON, self.OnSwitchFileSearch) 696 | btn_FileCompared = wx.Button(p_left, label=u'文件对比', pos=(8, 140), size=(100, -1)) 697 | btn_FileCompared.Bind(wx.EVT_BUTTON, self.OnSwitchFileCompared) 698 | 699 | self._mgr = aui.AuiManager() 700 | self._mgr.SetManagedWindow(self) 701 | 702 | # 工具条创建 703 | self._mgr.AddPane(self.tb1, 704 | aui.AuiPaneInfo().Name("ToolBar1").Caption(u"工具条").ToolbarPane().Top().Row(0).Position( 705 | 0).Floatable(False).CaptionVisible(False).Resizable(True) 706 | ) 707 | # 功能切换 708 | self._mgr.AddPane(p_left, 709 | aui.AuiPaneInfo().Name("LeftPanel").Left().Layer(1).MinSize((100, -1)).Caption( 710 | u"功能切换区").CaptionVisible(False).Resizable(True) 711 | ) 712 | 713 | # 一功能区域 714 | self._mgr.AddPane(panel_Excel, 715 | aui.AuiPaneInfo().Name("CenterPanelExcel").CenterPane().Show() 716 | ) 717 | 718 | # 二功能区域 719 | self._mgr.AddPane(panel_Pdf, 720 | aui.AuiPaneInfo().Name("CenterPanelPdf").CenterPane().Hide() 721 | ) 722 | 723 | # 三功能区域 724 | self._mgr.AddPane(panel_FileSearch, 725 | aui.AuiPaneInfo().Name("CenterPanelFileSearch").CenterPane().Hide() 726 | ) 727 | 728 | # 四功能区域 729 | self._mgr.AddPane(panel_FileCopy, 730 | aui.AuiPaneInfo().Name("CenterPanelFileCopy").CenterPane().Hide() 731 | ) 732 | 733 | # 五功能区域 734 | self._mgr.AddPane(panel_FileCompared, 735 | aui.AuiPaneInfo().Name("CenterPanelFileCompared").CenterPane().Hide() 736 | ) 737 | 738 | # 消息显示区域 739 | self._mgr.AddPane(p_bottom, 740 | aui.AuiPaneInfo().Name("BottomPanel").Bottom().MinSize((-1, 80)).Caption( 741 | u"消息区").CaptionVisible(False).Resizable(True) 742 | ) 743 | 744 | self._mgr.Update() 745 | 746 | def _CreateToolBar(self, d='H'): 747 | """创建工具栏""" 748 | 749 | bmp_open = Img_source.Open.GetBitmap() 750 | bmp_save = Img_source.Save.GetBitmap() 751 | bmp_help = Img_source.Copy.GetBitmap() 752 | bmp_about = Img_source.About.GetBitmap() 753 | 754 | if d.upper() in ['V', 'VERTICAL']: 755 | tb = aui.AuiToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, 756 | agwStyle=aui.AUI_TB_TEXT | aui.AUI_TB_VERTICAL) 757 | else: 758 | tb = aui.AuiToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, agwStyle=aui.AUI_TB_TEXT) 759 | tb.SetToolBitmapSize(wx.Size(16, 16)) 760 | 761 | tb.AddSimpleTool(self.id_open, u'打开', bmp_open, u'打开文件') 762 | tb.AddSimpleTool(self.id_save, u'保存', bmp_save, u'保存文件') 763 | tb.AddSeparator() 764 | tb.AddSimpleTool(self.id_help, u'帮助', bmp_help, u'帮助') 765 | tb.AddSimpleTool(self.id_about, u'关于', bmp_about, u'关于') 766 | 767 | tb.Realize() 768 | return tb 769 | 770 | def OnSwitch(self, ret_flag): 771 | """切换信息显示窗口""" 772 | 773 | p0 = self._mgr.GetPane('CenterPanelExcel') 774 | p1 = self._mgr.GetPane('CenterPanelPdf') 775 | p2 = self._mgr.GetPane('CenterPanelFileSearch') 776 | p3 = self._mgr.GetPane('CenterPanelFileCopy') 777 | p4 = self._mgr.GetPane('CenterPanelFileCompared') 778 | 779 | p_list = [p0, p1, p2, p3, p4] 780 | 781 | p_mode = p_list.pop(ret_flag) 782 | p_mode.Show() 783 | 784 | for i in p_list: 785 | i.Hide() 786 | 787 | self._mgr.Update() 788 | 789 | def OnSwitchExcel(self, evt): 790 | """Excel合并""" 791 | self.OnSwitch(0) 792 | 793 | def OnSwitchPdf(self, evt): 794 | """PDF合并""" 795 | self.OnSwitch(1) 796 | 797 | def OnSwitchFileSearch(self, evt): 798 | """文件搜索""" 799 | self.OnSwitch(2) 800 | 801 | def OnSwitchFileCopy(self, evt): 802 | self.OnSwitch(3) 803 | 804 | def OnSwitchFileCompared(self, evt): 805 | self.OnSwitch(4) 806 | 807 | # 背景图片设置 808 | def OnEraseBack(self,event): 809 | dc = event.GetDC() 810 | if not dc: 811 | dc = wx.ClientDC(self) 812 | rect = self.GetUpdateRegion().GetBox() 813 | dc.SetClippingRect(rect) 814 | dc.Clear() 815 | bmp_img = Img_source.new1.GetBitmap() 816 | # bmp = wx.Bitmap(bmp_img) 817 | dc.DrawBitmap(bmp_img, 0, 0) 818 | 819 | 820 | class MainApp(wx.App): 821 | def OnInit(self): 822 | self.SetAppName(APP_TITLE) 823 | self.Frame = MainFrame(None) 824 | self.Frame.Show() 825 | return True 826 | 827 | 828 | if __name__ == "__main__": 829 | # app = MainApp() 830 | app = MainApp(redirect=True, filename="debug.txt") 831 | # wx.lib.inspection.InspectionTool().Show() # 窗口的按钮显示等 832 | app.MainLoop() 833 | -------------------------------------------------------------------------------- /Img_source: -------------------------------------------------------------------------------- 1 | from wx.lib.embeddedimage import PyEmbeddedImage 2 | 3 | #---------------------------------------------------------------------- 4 | favicon = PyEmbeddedImage( 5 | b'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAFlFJ' 6 | b'REFUaIGFmluMJNd533/nUlVdfZ/pue7Mzl65F95FhbbEkEFA2oltSZYDI37Ji23AkAHnKXkU' 7 | b'AgQB8hblAgRBgMCA4IdEieTYcCDZjhJKpGmTFENxSe5yZ28zs7Nz7+npe3Xdzjl5qJ7lKoCd' 8 | b'7ilMdVV11fm+8/++8/3/X4uZmab75je/yS/+4t9jdXUVrTV/3cs599eee/K8tZY4GRPHE7Is' 9 | b'I5qMOd7fZev+Pe588jEP7m8wnCTYJEYgSJFYqZidm+eXvv41Xn/9DWq1Bs6BBYyzOOdwzpFm' 10 | b'GXt7+/z4zTf59//m3yL+6I/+0L3xxhsACCEeD8K54vPpPjhAAA7n7BPDFk8cd1hncc5grcFa' 11 | b'x2Bwwo333ubP/uT7bN3fwFpL4HtMUkOc5QzjlHGaoaRG+wFCSi5eusDv/t43eOH5F/C0j53e' 12 | b't7g3WFeM6e233kZ0ux33N3n9b/L+k8cc9vQgucnI85xxr81/+U//kf/+P/4X+70hlXKN0Pex' 13 | b'1uArScUXBJ5kq91nkhtM7nA46tUq80sL/Nbv/Da/8PrrlHx/6pxic85iHaRZjvY87/87+NPZ' 14 | b'OR2qm87G6ZHiowQgy1KsNRxs3eZb/+Jf8s5PP+P82bO8+NxLeF6JOEmJkwlZmpIkMclkzEw1' 15 | b'xQ5jnITM5ESTMf3jI779+79PKfB59ZVXKAUlJCCFwCKQzqGERkTRyDlncbifHdAUGKcHnePz' 16 | b'86cXPPHPCUeapliX8+HbP+Tb3/rX/PRhm6/9wmusrl6g3YtI44Q0jsmzlDzLSJOU4SSi2z/h' 17 | b'sN9nPElQSuKkYpIkKKWZn1/k1//hV/mt3/xNhJA4mELJYa1FIixSghICIQpPS1lsQorHhigo' 18 | b'PABI8fkmhENgMSZDK0H/4W3e+8632T3u8htf/bu89PTTTLLCc1JKlNYECiqeohYoZssBjTCk' 19 | b'7PkEnsJYg7MW4RxpEnN0dMAf/tfvcXCwW7jKOYQD4U7viSje0wcIKZ6Ay9SgU98Lim8+AabT' 20 | b'l688pM1Y/7PvEA06NJeWCcs1Pn6wgzMpgZZoJVECPK3xtaLke1RLmvl6ldlaBSk9rFUkuSG3' 21 | b'DmMhSVLyyZg//u5/w5GByEHkCJEjMGhkkXkeD3oamEKIx/sIx5Onf+b6YlIx1nC4/h6V9ICt' 22 | b'9ojrz13kxqf38KWkdf0ScZxy+84GR/0xQkq09lhqVDjXquF7NWJr2D3uIYRDYbECpFaAIM8y' 23 | b'bt64gcRMYeumTwWJs0U4TvPs/4tz8YSXi6xTGHO6f5pWhYlJH7zLrXsH3OvlrG/32eqO6EQJ' 24 | b'yIBet081DPG1QLuc5ZrPbLPMwSgmTsY0fXhqqYlwOcJYpLNo4ZDSYHJDPI5QGCQZkCPIkC5F' 25 | b'Hx1sMRpPCMOQMCwDDikVSkqUkmjlgZQF5qQiSyI+/fBjpPZpLSywsrYCwuCSNsPtO/zl3ROu' 26 | b'ra1x4dIlntMeZxbn2H60QyY0sRPMLq6ysbnB/t0Nriw2+cK1i4RBgMIxSlOUkCDM1DEGKSQ4' 27 | b'R+B7uDzF2sL/1haBrP/xP/t3xHFaBOoUTlJKhBBoX1GrVAjDErO1El/5uSvcvbnOw50248EI' 28 | b'ZyxhyWNheYnZquBofczcwhzIgDAssbo8x+3bD1BSUA3LBOUaWMO5+tOYPCeJY6LY4mvIneXB' 29 | b'YQ+DI7dTAyyEvodxOdr3GUYRcZKSpSmB76GVRo+G0XQJco9h4qbG+Lmm4XtcXKyj8gnf++4P' 30 | b'ybKEshaUTM5wf5ujLCPa2WBLahLrsPgcH3dozhywH7XpHR2yMDdPYhXSC5HSoQRYcjxliQZj' 31 | b'hr0+J9GE7jBiJgwIZIn5Rpn93ohRZpBOU6nW+d4P3uGT9YccdXo0axXOr84jXvvV33BSChqN' 32 | b'BsZaotEYDSy2anzx0jLDTpf9gyOGwxFlXxMEmiyK6B8dMT4+YmLBD0ImWcrcbIVJLLBS02ot' 33 | b'0KiW8TxFICxoHyUcGpAYbJYhbI4xhqNejzuHXUqe5MxMFQ+HFwS8fXuLSeaYqYfUzl1D1GaJ' 34 | b'k4TJJEUiGU/GaOugXCozNz8H1jLxJF977VkONra5+8k6LksQQEUrBoMh3kwDJz2oNAnyAo97' 35 | b'vQGDScb6/QPmKmXONhrcvnuXs+fOEZqc1ZUFfE8gjUW6DIwBm5ObDJPnOCzLjYD5egXhJINJ' 36 | b'yls3NxkmKYFSKKmoLqzQTx1xFiNNTjwYgOeh89xiraN30mWxWeN3f/sfcOOtH7G1+Yggj8Bl' 37 | b'CAHK88AHkU6oeh7NuRpZzWMcTbAmJ8ky5uYb7HZ6TJKEC/U50naHiXMc9064dH6FWuijhcUZ' 38 | b'g3AOMFjp8DVcXJ4lSQ27/Ygf39rEAVpKcKC1xEQD0kxSrpaR9SrhzCwojZ6tlZidqVIKq1y/' 39 | b'eoGmnrC1tYOXDBF5wkR4DHJHIBwRGhOlXJnNyScj3rqxTeoEK6tneP7CHCs1wc5OTteELMwt' 40 | b'0iiHlH2JkhJrc1yekdkMnEUJCAKPkqcoBXWOOmMeHHYYpzlJbtBKTtcjh6cll65f43J9BmMc' 41 | b'SkoQAmMcujHTxAtCrJQsL82xeX+TdDxCmJTEC2i8+BrlOKK7u0VQNjSJiTqbvH+/zUmcs7C8' 42 | b'wuuvPMtamHD745tgYL4eEvqKUlhCa7B5Tp7nZElMlicYY8A5VCQJPJ/UCvpxhud7lFxRo5hp' 43 | b'bSaVoDIzR31uDic1UkmMdWRpjhEW/ZVfeQOtJVopXr44y/f/4E1MPCGPE577+q/RPLtGZnL4' 44 | b'wvMEImF47xP+5D9/yFYvJssdr/3c08R7Wxw3y2wdRFSqIX/+2RZS7lAJA0JPU9UKgQUpUFLg' 45 | b'aU3oeVRKJUrWIZTEAIHn87AzQSkf6RwaR6PWIJrEYC3KE3hKkeLoDPu0ZhvoZqOKkoKZaoWD' 46 | b'e7e4v76BzTOS3LJ25TK5czirSKOI2z/8Ad0o58qLL7Le+QnGM4wOdznunnBncw9fwL2jCM8v' 47 | b'MYpTosEYC5S1ZG22QdUvI5Uq6i3fxwiNFQIcZE6xdTJmfxQhpSbPcjItWTp/ERMNyMYDsryG' 48 | b'73lYHLMzddI0RYNFoGhqw3e//zZJEqOdxXolJklRYebjPg9/8B2iXHN5bZW6D3/1/kfcOZrQ' 49 | b'2dmhXg25dzRgOMnoZ5A78JSiVa3QHY6JUks/TlGejy8VnlAYBDkwTC3b7Q6bx30cAoFCKk05' 50 | b'rBJFQ7Ye7XD96kX8ah1f+WRZTpZmtPsD9vYP0b5StOp1bn/wY44P2zjrSLOcsNXCCRjHE2o7' 51 | b'NwmVYalcZuP+Bkn/hKYvaQQ+99pDvM6EKDN0JjmZK6racsmjHmriRDLJHYeDCUJqak5RQmGd' 52 | b'4WgSsdPpEaf5lJUanABjJQRlZpqzaJnw5V/6Gk4q4iQlGid42mNpcZ75+Tl0lqXMBoY//+Cn' 53 | b'kMVIa0ito9KcoTuc4EzK7RvrtCplwnPP8MwlRe+Tt4kGXU4mOXv9BIshMY7cFeWylpJJnNJV' 54 | b'DiUEJU8RG0t3GFEJQ4SSxMZSCkOef2oGJQW5cURpxvFgxPEwxkpFWG+wHAo+eOcd1p5/CT8I' 55 | b'qDfqeKoozZMsR8/Wqmx++C4H7R7jSUYUx/THEc/6JZoVn87+MQ96hhdefY39gzbtzW22Nw/Y' 56 | b'aEcME0PqIMkt1jm0Uqw1fJZbTe7sdYjijEatypnlWWYbDZr1OloV/FvIIh1KKbGnVbwFJwXD' 57 | b'ScIHdzcZdLuovML1NcvNt97kta98FSEEqcmJJgZjHOLh3ffdH/yrb/HB7S2yNMVmhtwavvTL' 58 | b'v4xfrfLT997n0uoyKuqRjfqsP9jhsDcABzlwHBuSzKBkEay5geVWjWvnz7K4sABiyuWm/EFM' 59 | b'1Q6BQ0qHlhIpChIlTgUOYJSkfP/9z8APubzc4pnVWTphi9Wr18AJMmMoBx668+AT9nYecXDc' 60 | b'R0qIk5TUGN75i3eZmZvj8tUr1GzEYHeP925t045ylFLEmSW2FuMg0ILZss8zl9b4+RevMEk0' 61 | b'BkWUpGBswRdw4ECJophTUuAriVZMDXAgC3bokJR1wLNnF7jx8JAHOyl/5wuXOdptc9JfZTJJ' 62 | b'iSYJ4yhCH65/xEl/SMkDYy1hoEnHGStrq1RrNX7ykxsc7m4TRxOiLAcEIjdFKe1L1loNziwu' 63 | b'8rdfvk4tDDk6GTFJc1yeoHBIZ8EVC5cWDgUoBNoJNBKBLAYvBO6UPk3Fn/NLs3z4YBelFCfD' 64 | b'MdfPLPCj9Ts4r0y1WsM60B+99xFHw5xBnCGso1LSeEpxsLvP/c13GY+jxxRTiGLBa9aqzM80' 65 | b'WG41aVTKVMKAvcM+UvRQziGdQTiLdA4hi8EIIdBSoCk2iURMCbpzglPhzInCCCehFgTUQ5/E' 66 | b'wngUcenMEl8Oqhz5DZSQOGvRZ5ZmCe6eUAs8WtWQRyd9DoYRu7duTwddgDLwfJYW5ji7sECj' 67 | b'XKLsKwIFnhIomyCNRTiLFqAEj6kn5lTVkCgnkI+5tEVM40OeijrCTVUOiXQSXzkalRKdUcZg' 68 | b'MEQCc8SU6/NM8DnpD9HSLxH4GrRk63jAQX+MYyqrTIn9fLPO5dVV5hs1Qi3xhEMJg3QOmTu0' 69 | b'tigKeUYAcioGyCnWC9VjSsidBCkLuFiHFAZQOFEYJ5RAOFBOIqQj9H0EGcPxBJPGBJ5H3ttn' 70 | b'O68X1ehxuwsCjgYR7dEEoRRySvA9KbiyusyF5UVqvo8nHcqlSGcR1iGFQ0lQzhV4n6p1QhaQ' 71 | b'U/Lz7FKIs1MJcmqgOZVYRYoUXsG7nUAKgxUCZQrjpXRMkhRMRlCpYMYDagT49Ro6SnJa1YDh' 72 | b'OGXgKcaZAaBR8nh6bYm11iyhBulSZO4QmIIf4JA4tBAoPpd4hRRM0oz+KGYUx/SilLmVJT6+' 73 | b'tckXz82BheZMmfMrCzzcOcbzAwLfR2mHlLqIFzkNaAuTOEJpyTCKwVmwOUFQ4vmGT1QroePU' 74 | b'EJZCnlqG9jhilEJZw4tn51moBgQuQWQOOZVYtAClCohNMkN5cQUXlKksnMFTDiozbHz0CSM1' 75 | b'ZjDZ4VH7kNa163y6+yGLzSorMzUGE0OlVmFmJqY3zhGmqDy1tEimAi6QGUt/NEaUQrqDEQ6H' 76 | b'yRK8UkgeRfzo7gP08Shjsa7Z7I5QUlEvK87M1Fk9d5aVlSW0EEhPIfOUN//3WySyRLvbpTdO' 77 | b'GKaWf/SN12iGPq7WwktOmGSCtUsXcWGD4YNbiDTCGoOSksRIpC4hleDm/SMur80xiE8w06C3' 78 | b'zqKtQVKQmShJGUUxvtBEk4RRFKOlQvs+SimWah66NrfAnQf36IxTzs+WeG/rhGdefIkXf+3X' 79 | b'qZZD8jwnSRNG3S6DP/0Re2mKiWLS3OKs5bPP1pmfm2Nwf5eVps9QJ1yoC6J8TJ4bjJCsb+5T' 80 | b'LYfUKhWUFyC1InGCjf1ukf8LxRahirWIqSbbGUTkgEtSrIP2yYBK4KMzQ54bztYb6Htbjzgz' 81 | b'P0+90mPjoI8ANm5+THv/VXaVj8ky0tySRCOeu7DAo/9zn6qvqZUEwi+zs/mQtctXmUkH6CAg' 82 | b'FZokTdjY2UTEI4yVHPdGtGpV5loz6HLwmCrmFCqFcw6LxLliHTDW4YRkMEkQQpLnOdbC4fGA' 83 | b'5bkmKkkBmCkb9PIXX+Gz997FCU1amqPi71P1JX/xwzfxzj6F73JadkB/8w4vLwgaJY/wzHnO' 84 | b'1SQfffaAhWqFdNhjee0MEoO0PsJ5XF6VoNfYGhzhusecmW8x22xgLZipHHn6FsLiBFghkEJh' 85 | b'AesEg8QWM+IUOHjUPuHZi0skSuJ5Humgj96PFeHaVUZHO4RVn5evXeP6+SU6x4csXD2PZ2Oi' 86 | b'2+9D2uX9OwkzF65z/fmn8R99wlyrxbOvvMr82nmU7yOSEbNBlUoY4MYnjLpdFudnuHc4oFav' 87 | b'4nkBuXEIa8AZhJM4DEIW/FdMmyRSSJwoqlKTW5RSgONRu0eaGbTKEFKRT2L0aBwxu3yWtWvX' 88 | b'WWw10M4SJxGLrUWGo4hQGuzMKq3FY+5tj3j2y19mIe/j3IQrX3yZufOXGI5jsn4fl8YYFWPi' 89 | b'iPHBNp0Hn/HM33oJ8pxOf1wQ+WkPQiuFlAKbFZT1VJWWQiCwWCSd/gCEeNxv641TDnojVlt1' 90 | b'nM5RSqNXlhbJ8oRAg68EJoegVKGfZByd9CkFPteXlvDFRX7+2hLaRaiju9wxTWbWLnF3c4/j' 91 | b'ky6Xlpvc/ew2ebeDyxLqK+eYv/oCn36yTpYmPIpi7u/WeWqxhRYCb7rQWU+QZQ5jDPa0YSIV' 92 | b'STZNoUJOm4rFonZza4/5ehWhMvBB/dN/8o1/3mpUMVnK/tEJncEEpCraOCanNdskrNfJmysM' 93 | b'UseDnTY3ttrcbsesP9jk+LiDyQ3VULPfGZIZgx+UiGSJXreDmllicaZKu9Pl9vYu4yRlrhIS' 94 | b'KtB6uiIbgzH54yYLQvLouMvt3U5RnhSdGKSE416f2ZkGM5UQAP3R7YdYJzAmRwlBoOG43cY6' 95 | b'R6UcYrOMrZ02G5vbHJ90yY3D6Cb1ZY/A9ymVAnzfpxwo/GoNrz6L1AqTG7pGkLaHOJMhW8ss' 96 | b'lPvc2tph/eEuC40a840KtdBnplZmvlai5Hk458iN4dPNg8flx+fNFQF4/M+f3OLRuTNcv7CM' 97 | b'+Prv/J4bDccMB316nQ5pEiOUplKr0WjUsdYyHAzod45x1uKVyjRac9SbTZwz5HHMYDjkCxcX' 98 | b'+PRhB2ss1hqyvChJtPaoV0ss1EMOOkOaJcve9i6j3gCbZ1hnQQhqpZDl2Rr1Sshup89uZ/Az' 99 | b'7a4CSkV24hRQUqAlUAkDfG+WSq1KPIlBSQLfR0vFcDjCGIsfVpBSEpRCTJbxaOM+5CnOWoyx' 100 | b'xItVht0eQiu01uRJirOGtbOLTMYRN+8dg3M89/wq9/fr1C+fpZL1ae/sMEky+lFEP4qQomhk' 101 | b'iyl3Pm1nnc7GlNjhcCgU+tHuHlpKtFbFhcYwGY3oJwnRcFR0QQKfcrVKvdmkFPh0Ox201jgp' 102 | b'EUJSDUMqjSbzK4I0SRkN+szVy1Q9wb2tHYwBrTWeJ9GlCvXWHFkc008sX3rpKp+ub9MdRMRp' 103 | b'inQCLSDP80IEmxLl0w4qCJwVj7mz7uzuFZx12gJ1U3IhABX4KK0pl8torZmMx3SOjhBSMtOa' 104 | b'xSHw/QCbZxhjOT44QpqUM7NVjnt9Ho0StOdRqpSRQuDSCe39PQ4ePMTZHKVLjJdqXD7b4v62' 105 | b'4/AkBWtBFH1RayxSaXBFc3v6x7R0KgwQvsaTCmcdWZpgbYFJpRTlSgXPL+EHRfGUpilBGKKU' 106 | b'YjQYkURjcCBcykLpPEuNElJWeNTp44ykUqsThiHj0YDRqI/LM5ypoaXCaR+lPS6eXyU6OeLw' 107 | b'eEh3oEizDDAoIae/iTDANJVOyYYTBaysNejBwT6lWh05xa5UHp7n0ZxrFcqXkiRJRvvoiJN2' 108 | b'm2QSgS1mTEoFwNXVJqGJ2NnZIU0twvMIKjWcNRzvbWPyDCElQmhubbW5ujLLxt4JaWLQSvAr' 109 | b'v/r3+ejmf0Aric2Z9ukcUkiMA0dhxGmLVSCwAuIkQZ/sPqS+cIagUsUGJUqVkFKtRpYb7t25' 110 | b'SzQc4HKDyTLclMdKpaZE3XJmvslhZ0DoBaiwRrmqikc4x2TQAwR+qYryfaT2MFLyaAzPXb/M' 111 | b'w4MOLzx3hVdf/RJXL/0x0a2HDExRadonItYJM/2JgQNX3DtJYgaDHv8XfmADnDcBgPUAAAAA' 112 | b'SUVORK5CYII=') 113 | 114 | #---------------------------------------------------------------------- 115 | About = PyEmbeddedImage( 116 | b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAxJJ' 117 | b'REFUOI1VU01rXVUUXfucc9/tvTfv5aVNmqaNjwSxNm3RibEiamgH7cSviaADQQQRdCKdSAul' 118 | b'OFHIwN/gwKEURW3xozwioqImVhs1akzaGFqb95Hk3nfvux/nnO3gNeG5YI/2Xou1FmwiIbED' 119 | b'tgYzF+sTU+NDTx8Y9E76rqwZa22U5H+v39n68vri0uVr7716C32gHYF7X//YfWzqwPOHD1bP' 120 | b'jlRLRz1HKSEIYMAwI051tt6IFq7/vjL70Vuzn5D4WgOAJBLg0++6zzz+4JuHDw2+UwlK48ZC' 121 | b'dAuLJLNIcoussGBABb57T2WwcqZ67Oj2Uv39BSLBkkjgqVcuvlgbrbytpPST3CDJe+SRsoOH' 122 | b'Jsu40UzRjjW6hYWQylOud0KOP/rr+o8f/qnue+3yZDkI3sg0/KxT7GYzlnFoyMVw2UFaWLQ6' 123 | b'BQRRL7dyh/eP1876x1/4Xg3vDZ7UTMdafWQGUN4jEWcGV35pY7WRopMZ0G5xBCoNTB984MQp' 124 | b'ZSBPhl2tsLsGLDOGfIXnHh6BX5JY/CdGM+pzQIAxYsDxqjMqSW2Nhe4t+hzM34jwwQ8NvPzE' 125 | b'GMJUox0XkHcFGAAzkFs1qVpJbj0rUVICShDu3sAYxlaswczICos0txCCwMwoDCPTjLibs7La' 126 | b'rGjL0wOSEOyRUIJ2S/RdCSJC2VOo+gpEBG0ZUdcg1jl0N1xVrOMvJAXP+q509wUOXIdAIBjL' 127 | b'qHgSgoC9gYPRwRIAIC0stGGEURbqcG1O6I21K7ZI53PNYDAcKVBSBNfpiWwmGlKgF1ESjAVy' 128 | b'w9DR7e/Cxc/qMv3r88i7/0wbJf+0kspzJEGK3jQ7BeZXIzSjAoVlJJnFZmKw2Wzcjv6YO58t' 129 | b'ffqzJBKIrm0se0emQkvuI5aUT9SrOtOM7a5Gqhmd1KIda7RajX+3lr+50L46e4lIWEkkQLRm' 130 | b'w4U7PzkTY4sFnLHC0v7coJRpRpJbhN0c7e0w2rx186v2b/Vz7auzl0hI/b9v3IE//dLoUO34' 131 | b'KXdg34zjOBOWDfIkWuk2bs51lufq8cq3G/2c/wBPUYzbu3uNBwAAAABJRU5ErkJggg==') 132 | 133 | #---------------------------------------------------------------------- 134 | Copy = PyEmbeddedImage( 135 | b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAgBJ' 136 | b'REFUOI19k89rU0EQxz+z+16epG1Kk4am2B/QUlQsgepFBfWg9Q/w0INHpQW9eJP+BxYRRZAK' 137 | b'etSj4k0EEZGeFNGD9SIKHkREaENrIU3e2x0P70WTNnVgYGHZz37nOzMixqLeAQjdQ8XYPa4g' 138 | b'ALjz7HN5ery42BvJoPcogAisbyXxyvuvj5bmT77+LwAoVPpzc9aGI16VlpxcBEemJ08vLr+4' 139 | b'vHRl9mU3gAFobDdwiZJ4j3OeZpwQJwlxHFMu7JuaqR64d+vx24vzN54OdgVsNCBWBVUS5wit' 140 | b'YG1APgop9gYcGhuYOladun+0evjuhcXl4d0KAOcUVUW9YtvsFBEEiMLAHhwbmps9c/Z2OyQF' 141 | b'NCBxiveK13+p6lH1+CxVjOyvlOeqM8dvjp5YGOhQ4H1agqpmZ58qyjI0Sl/kKPWIjPYH50aG' 142 | b'Bibbu4CSPSCDqOK10zAraXeMUeNd+nkAEAGCpgOgpPJRdAdANZ0P5z2JpPi/CowIxggikpbS' 143 | b'BdAOakUAUN9c99++h9v5nG3aXE4rpXwuCKT7aKukMtsBqyvvfv5YZcH6pKc4PjF86fyp64VQ' 144 | b'SnRTIGlrOwBvnlyrA68Arj74MNFsunrdNHaZ2CIkzYRAjXR40Iovnz5uPt/oexgZLYvs1qCK' 145 | b'rNW2ftdqa78AZOeqZqtt2Hu9yUxQMVb/ADNt9o80cR6CAAAAAElFTkSuQmCC') 146 | 147 | #---------------------------------------------------------------------- 148 | Open = PyEmbeddedImage( 149 | b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAolJ' 150 | b'REFUOI2Fk79vFFcUhb/73ux4Z2a9lokUA+JHSKAgkRyUfyCBJiWFJTpTIGhQQCI1KQJlqJEF' 151 | b'LqyksWSMqygOdBHeyE0i23jBIMw6m5j1miXE8np2dua9R8Eudmh8pasr3eKce76nJ6I0u5U7' 152 | b'b3L0sp+APJqEMqsyqdsAspuAGzZ570O+9fs4JwFBEpBkm/ykN5jLNwm93dwLEcPacdWvMC+W' 153 | b'x/Yg+7MDXHYFElXhoQewMG784qFvhnLhvs8AGmsrTycmbk1cG9VbwWsaapWbdoGR+jOWoyuc' 154 | b'CTY5oSIGvJRFb+S8yfV/fOninsNfXffDvQUQegdq8WnjDpfnb/9wZ1zfddZMidJOFETGJFLh' 155 | b'PgAveCjVB0MXPvjk1I188aMiKAAEaP5Xba5X/5jM+7YCIlmaqvLc0uzXF2Z+BrrgnKcD/3Pf' 156 | b'bxZd+hwRBWgcQhjZ6OCx42edyxDAZG0Wl9bGgF9E6bTLyBPbFLK/wflkqaUdx4hSXYN301nD' 157 | b'kQPZF5WZk99nrcz9Xqr+Nvxd5Z4HLbCvAE17M8YPQ7S383EcOAtkHD3eP+isHXy+1IiXlluP' 158 | b'RWk8sAgpJokRpfH8XCdi9woLLutMIWmlPFqsz4xO1H4FjQcKR452ktITRSA9IMEOThZcCi4B' 159 | b'PFarja3SbO3HtS29/pYBObJUEN2D9iOQQqe7MUxHoEVr8zXlhUZpbGp9umvgOSxpKyHfWwTJ' 160 | b'g+oFCbcFnAFpg1Ws/rWyVZr95507gNf8d4MgDHHGkSYGlAXJQGxHwCIY2nGT8txKaWyqNr0d' 161 | b'D7zlJy+Xa3Xzp87VgZ63DFD/h4gjjptZaXbl1k53APnyUwpJSt/7n+j9Ui1cvUrjmdLJzv0b' 162 | b'+EMmhoeCKn4AAAAASUVORK5CYII=') 163 | 164 | #---------------------------------------------------------------------- 165 | Save = PyEmbeddedImage( 166 | b'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAjJJ' 167 | b'REFUOI19kTtPVEEUx39nZvbBgoIiaoJBoqiFMTEWNFr5DYyNlHY2SmVnYmPtR9CSWNlpZYyv' 168 | b'gsIokhgLIiEG3RVkhbuve+/MHIsLCzGBSaaYmfN/joix6M258rmhI6dGajgqHLxSaCZ5WFqZ' 169 | b'X5V3j3pO4wN3Y/rSnSvnj85ePa2uLEEPwufq5O2yD/Pv5cmLN5cfu4nb1yYmxofvjp88dObi' 170 | b'RKTmwoEGOt6ynFl+jY/eGz974YOzFreVSanRiuRRiaqA7ANX8qg0ksBWphUjfsilKay3A8NJ' 171 | b'JERBEPbLIAghQqMVabYjIYgagCRTWpmiB6bf9qDQSpVOXgw7gF4G3UxRQAT2syBSPHUz6Hl2' 172 | b'CbpeSVKlkSi5L5zI/zVsV7PRLWZ7XgmAy4AQoJ4oD195rBRgkaLKHaIQC/teI3+7xbnvACCo' 173 | b'st4uhCJSgPdkCRFMn1z6xA7AWHCmUDRpi1GalEqOwVqNarWCtZagwtIfpUMJBPIdgjIFszWF' 174 | b'5gnTZLL+DA0Zt2ZmmJqaYrBWI0Th/vMNPq2DMQWm78CK9C9ElEZ9lU5rE6Kn4gzlksFHwRrB' 175 | b'yO62qLg8S4J6H8x2c0aESrlMrFaxxiBGkO3AImCMYDVCpx1jTINbW5z7MTLgnpqNY7NYys18' 176 | b'jbHaJIeHDZ8X6/xsKAMDVUKE+rctuomFTofNL69fZisfF0SM5fjY9UE3NDat0Q9B0FrF4azF' 177 | b'h3TvR5GlHo+VGNOQ/f660Ey/r/4DqqUO4HBdp/0AAAAASUVORK5CYII=')#---------------------------------------------------------------------- 178 | 179 | #---------------------------------------------------------------------- 180 | new1 = PyEmbeddedImage( 181 | b'iVBORw0KGgoAAAANSUhEUgAAAZAAAADICAIAAABJdyC1AAAAA3NCSVQICAjb4U/gAAAgAElE' 182 | b'QVR4nOy8abBl2VUeuNbaw5nu9O4bc56zKmtUTUIqIaHBEhZCgBCNrcYM4bBMO8IGQdPddmO3' 183 | b'6bYNhHFHh7sDaIxBDcJiEKABVIWRVPOsUmVlVVblPLx8+eb77rvTmfa0+kdKMoZKBUlYbiI6' 184 | b'v183Tuy7zr77rPOd9X1rn4vMDDdxEzdxE99MGKhFALZREKClhboCnVVABNZ7K2UUGAiEQgAu' 185 | b'wFcgu28YB28S1k3cxE18sxFqH7QIABorCAagGRAJLbACDAAhBPAeCQUBIAHQG8e5zuGbuImb' 186 | b'uIn/ciASgC5gH8CBiz1haT14ZYoaLLIFYlJSCAlBOBPq68WR/zUnfRM3cRP/f8M1DRe8R5Qo' 187 | b'wQZBpAWUEjyLhswMAAQrIIAg8KEiYpIBIHrDaDcJ6yb+Uvi6dYCI/9/O5Ca+Af7aXqZcV62y' 188 | b'ISgtUCsBof+aZzmZ3icCSJKkpAAIbEJgAQnATUl4E/+FcNP0/GuLv4aX5j8RKLm6OuVHTyYY' 189 | b'VIDepYfy1ZcSmEr9VCgS9CIABXRKQmAbzHUD3qywbuImbuKbC2ZmFNasbA3/uFWCLBvj9aea' 190 | b'3TfJwkBYCsMgZg54lnUIQiNgSdICpG8Y6maX8Cb+UvizefLXTW7cxDX8NbxG16bEzABEBhZf' 191 | b'/1gx2vADCPXxZOpWmLpza+nzFN/5wLf+JDbuKgxEMQRbKwXX87C+6ZKQGWwYe6gZwHHBAMxg' 192 | b'/OiG4wAYDzAaAkMORckwhgJs7dnVPniAEMAZBgALzoC9fiQH7CEwQAAGCAABgMGDc1AFMAGM' 193 | b'86WrgR0ATAAgeABwAI4DBAYbxgEslCVU1gOUDqAEDzACgKJm2C4YchPAVQBuDGXhAcyoBA4F' 194 | b'gAMDrgQHDsB4BgPGQAElVD3YLscADAbKUF1/+h4ASoDSVQBgA2ywu/ZTnIPKQlHUA+8MMFS1' 195 | b'9dcWDYLhzRJGHoArcPXAQYAAwTEwAEBd2xCAAawLpgaGSWVXXFWCBTAAABYAKwSYOMwn9dgD' 196 | b'FFDZ2kANzMDsr60PBP7aenqGvKoDA/gAHmoG6wKUsATgQgjX7qwQHIADCAF4BBZGQwgeLNdV' 197 | b'MADg8xIC1GNgCx7AAQfjYJVhYkoABijAmqoMBThgV1ZQQ3GjaQUQqsAGIIcc/NiWMDAMkAfY' 198 | b'zscAIxhDCLV3DiZgAcBCgGCBmR14Zg9swVeVBQc2MFQeLOQAI1+WDNdW5nqwzpc+1AwQGIKH' 199 | b'a78RTB0m4xoqBufB1lDBJIADZn7D2sJC6cAwlAFG6NGbcVm9xCVCvgRgiwAllAZGvgQI4Aww' 200 | b'g+PKQ+09OAaG2kNZVu6r0wAO4av55G2AcMPL6W0AAIbg2blQI+YIV/Phi6PRn5repyYTHYo1' 201 | b'GL+alrP5yScvvfQvHLp77vlxSO6qaZTEQ6iNElHgN2YrABA/8zM/c8OTuhE4C1J6ZM1MSIYD' 202 | b'c5BSIoK4oTgWRoEiFDwMG5FrhM2rjWYjuEhgKTEyo3UV10wCUYL3FDzRG6tdZmSwjB5AAiCj' 203 | b'YWAA4lBKTr0XIQQlBco6UBVCzOwYLJGCILwFIZ1AAq97oOJIFBAk5VKoYowBcxOzZkVOxbpy' 204 | b'BgKgImHqOtINwoIEBys8kCBHiBgEGDGRLopGdVUmfiZObAibFrwQQKjeeP6+Ak4CGyaPoAhV' 205 | b'bYJUgb2yziPJSCaIAgGJsHZVLCF4JyizRkoA0gUiAyWE4INHQkREDEQACIBBSbCukqolRewD' 206 | b'VLxGMvdgBY7qEeFoNW3smtihkg2WZTXZUHELkRAAABkQGAECIiDWHCISjhAJgJkxCEJPmITA' 207 | b'AIQIzCEAMKB3HDOiSljYnMeJDlzUXDasRiWltaFyOSojKCZuIbJQazmQ1ugFeJTkAijnwUsp' 208 | b'EG/sGWyCBBbWj1mXMmrky5dTUfhGJyRoJlebZUBo+kBSliikCQphBFQjOQIEIODAwklhAXJ2' 209 | b'qSSQaG0FUmVAUNmxEvEbnjd4QUREAcEH9kgByTAVPRQNlckguSCAiReCpEbRB0jgjeqmwEqA' 210 | b'gKAIJSAU1Vfy8nRDHzNpN58s1utlq9Fldk7rmutAueJYkA/eBSclIYNFAK0iAEAEAmQOzIxE' 211 | b'dO1cN1iokWDmwAgAhCgIyNamKm354i8PLjxejI5HBUwM91WuxHRG+46+9Z9nu76tQihwIhAE' 212 | b'ZEho3EBeZ92+6RUWkUFQCAIZCEgQAwOyvtE4EqpgaiESpdpmfGrtzM+DXSo0smgYLqCZOZyq' 213 | b'MJQ2F0ziG3lzSAiEcO1SEDKRBwRBAQAEglTAID2wCbVH8k5IkYQAxlihDEAVDIGBTAMUHgOC' 214 | b'7wP1G8maO/uQYkccZNjaXH84sBVSC4AkGnt07Bio9CLEiBqcxUlQ21X1XJCqX9QN2Y2GRTUZ' 215 | b'BWjHYQbojQU8AHisMIAgraR3LmwPSxXL0k/AQqwiCMp4ci4AM4ONlGRjHbgAMiEFzgKAY+GN' 216 | b'YwgkkTEwBBIIyAhBIEBNCpsEkQGoMI+ipoBZN56qpCqKF88+/TE3XIlVWw22t/onGs0dgX3g' 217 | b'wEAAhIhAjIIABQBJgcGba/UZMhGCxCYzhRCuPc6RiFASklIicF2RKQIYnkKoJ5efklA3qPS4' 218 | b'RRrjpIUkai69h2Aj4N0RojOyziMFigSwy5xNEcc3mldKWAdFpBo50RCv9i98evHZ/8vDGAFH' 219 | b'F3+/7j0FkHuyDhSDZxeIIqSYIQOIAIUF7WxqjRIQec4JgU3igwQBZVFpfd08ZwZEAQAQAjIg' 220 | b'CA/SANb5mh+tDsOg7zcENdGr0tcc3njbNwBIBASuzbYtl4BzUUduaF1+nsfLvZXPufx58GPp' 221 | b'bcQQQ5SSds4AgBRCa0Lg4Dg4dsbD16gJEUMIAAAEfyW7KAR2zExIxASslOy0Gju7b/9fYe6t' 222 | b'cQO83TR5zxZrCblY12vn/u/J4n+Ix+Oun454yntmBKGue/9+0wlLSGSW3l8THxIAicI3qpSv' 223 | b'A7Kz1fpJ3rrY8A2TL/ZXvxJGuYWcl16+8OrvB1fWlhIUqbIgRHXdfWfAyAyKQTEyo2cQDILR' 224 | b'MyKIgLI2drMqt2RIk9Ce9E9v9J81dUkUdJwjeedL0lsYhxSccANNGLlZhuk65L2Xfzc//idg' 225 | b's8HKsxdOf6ostgFyn6PErgtS+oYHxUJAAHDSm5apiqtLn8LiQjfeAeXK1asfr7AXRGT9KkB+' 226 | b'vflLSUDgXPAG11YXH3308wTknSSunLUCgQMoJQDROwZmxJREEgBQgBCxsw2SDaELD8ggAOha' 227 | b'gfm1DwAKkAgAGDiSiTM82djIIleHLphqvP7IoHxZ08Sc+c3euYfZXdN0wAwMwACI12Q2AEeI' 228 | b'EJgAgFkEZhABWCEAEV2T4j6wtd65YK2XKoyGr8Xji12EweqJ1ZU/DGrTOyGLOSgFhNoHkpiR' 229 | b'BKDa25y8lgqbMUjH6J1EaCBBuOF8RiihTqESDUgh7I7Rr5z++PjCqfL8c/ny8waNTxKtlbOJ' 230 | b'BYjYgtfM2lrka9qcnFKoAYNvCM11uY1EKlWTapBGMcL1H8zCMDO4CHxMqBEEssLQ4vO/d/nl' 231 | b'j4Pyqj0HpeX+eqzKa7fpG9pSDtYBJhC2JsWz5fbjvhiFYtjb/OOt13+pHl/Mdh7ysullHOoQ' 232 | b'rAsQy0g7zwwCMHjvpYqlioGQg2P2AAERhVDX5KfnG9aEwTOCEEhwTeozgFAizVQ6Z/tr/StX' 233 | b'+/lQZslCaz5uteo9t8dqrihfnRSPsu2xqYOj4MBdv677pncJHYCtvZRSCrAeCYGEdwbVDdaa' 234 | b'FnPvLi5ffKK58wOTwSsp7hleOT7pP77x9MPR3m9NtTJ14LwCNCExIbt+orCFa/UdGgAA1oAA' 235 | b'UFeoBFgFUZXntn496b4VDG1eebgxv4OrtwOCVwg2ESoB2Brl6zKbT1ut0hpdD0ElhdpNDdi8' 236 | b'+EloxysX/2M7abejfQBBRsQ1ixgAwQUVHICAYMeJnAHexbkaXvyddOY7Fk9/tsTVucYPWkdZ' 237 | b'1MknlGb8FxOUmdd7a4qG09MzYLP1pZMnX/78B9/3wUbcBOpvLffmdh1RRJWpIfg4jkOgIMFZ' 238 | b'wcwMtSYhSXlvWbC3VikFACEAEeI1QQDgofDOMygXpNDSlcOri5+FMycP3vq3x2U13bmvt/rw' 239 | b'eO1ktPblvQ98P+pIYsngga+pwq++YxFCEKBAMGJsQghsBCCBD4EFCkREYgBARCFIkANwYJXd' 240 | b'OF0MTsfd+1Y2/mPlF4OuPJQiXJDQATuNQnt2jJ4IhJDBKk9DIWqTOxk1gOvgpZKtG7WavVMi' 241 | b'XR28frGRxO0du6Pu7nxmT2/5Fzs8m7Ra2fS3CE9gKwtkhNQkgOuAHoQE5ys7tjJBzP3gSTX9' 242 | b'PZXLGmlebL0c2nuieAqcc470ddwYxjGHNgdJhEATZ8c+6EhPN4rt5eWTDf57Rb144umfm93z' 243 | b'7p2z32dgW+PUGwRhFtjAkCWy6f1ro9F5YVPJI18Uxiy2Gw82WrcZBALEODieBGgJwIARAYRg' 244 | b'AJFZBg+BvSBGIO+9EAoRvPdCCPqr1DOKCAACsPfBg0Bka0x+4U9+0i0/EetbOBWkQ6ybiH5+' 245 | b'/h07b/1oiasWnMFYQh1FAByJ6xdS33QPKwAhC6ksQkBWzCCoFoL/8lx5jexzMWlH86OlR7bz' 246 | b's85stENzPDhhe08XU81jb/1ntZ6rZRXJBlIGoragrsdYiAzAgHzNvQFgACbEANo7p1lq8pPi' 247 | b'KRiv+8HmaPCo4vnuwl1gVjeHJ5VcAFQBOYq6BlF5UY+ujM9/crR1HGkcts9JV/TsVzAMZqb2' 248 | b'NVr3DSYninpTxjELFijYSwkQ+MJ2/nwwY+23w+Qij5cng7OT8ZWFHfc3Z95c5y7SqCn+iw/V' 249 | b'rz70rPnVX/nX/bULt+w/8uKzf3Dl4pfvOHyPr0e/9Rv/h3F+197DKJQgkkIgCOfY0ERWIopE' 250 | b'IEtsoDrXWz8Tt2/VAhEAAQgFwlcXIgQAAiWkFKCECI7iqNGk4eL5p/TK42P2jU6qwcRGUWfH' 251 | b'1K3vr3IAKjkQskAgRgfgEZFQYeDaLmrdhiCAHCAJxAAeWQJ6vCbHgYgCQMm251TCxaXh8hOT' 252 | b'/onhxuswrvPN/pXLv/2V1345jXa323djxEglcBosbfUuN1pg3JQzg8HoeNyakjjnnbbSqRsU' 253 | b'DRUpV6f56sMXXvnptbUvODOIGx3dPpwmLplfkGnL9pfILIo087IJ5ITXVhSEIEOiQkYq8sWV' 254 | b'Syd/QcWz7eyI2Th9/PivtXc9kKoO5UNM0+s165itoBQRgLzza5PJ+bpY1Ngri0FSj+vRxvLp' 255 | b'f7u8+MStb/qYShYsWIl/nvmu5QOBtnUP7bqvNlwxkd4TT4IVrtJme3O89Oxg8zFvXZYcDTbE' 256 | b'QDU4JSQ7Xlm+5L3JkmZV11FMtq6FFCEwkQD4KmH9FXqNX80qYAZPAgShC9V4MpyMlne86Xvm' 257 | b'bvvhUJyUJm8sfIjjOGtobD+I3IypTaC9B2NzBE8oAN+YH77phEWAgsD6DfC5oCb5UNWrCCVS' 258 | b'6xt86+sLxV+DQKlCJy5cbYaEWaTE2Awarl3uvmth77156bSSHpULIDBECNdVu0yMG4AFcguA' 259 | b'GLcAS+QmIATfV6iQ8zo/Pdw8X+frUvTNMDeTF4+/+nuTfGvPvr1SicrUzrKWKCsRp7DVe3H9' 260 | b'3EN+64Qpq0ayj6BspHtLv1FWJ7cnVwoMne4t2jcdOYWCMFR+O8+Xit6r5ebL3mzYqkXcRymc' 261 | b'A8zP9Lae2cgXO11NOANvpAKSJCVXPf34b5595QujjUvdhlq6cOqlFz8TsPXO93xHu7vbeiKB' 262 | b'hIFDkEJYCnGxVk9OU9YUIt48/YnR8JXZXe8FrGw54eBIXvPEGZACe0BZTZxCRsHjsoYQxe2d' 263 | b'u2cOFv0LUXtWJgmGmUa3Q80ZSxO0PY+pQCVJM2AINgRLIBEF5xu9wTPN5n7wWoiCgxSoiBhR' 264 | b'IAECBw/eBvRVMV5aXz99dfmZ0D8/GF9wZS/xTuZmdOXFSfnlW+796X2H3w8yK1zfBRmRFjJf' 265 | b'23gIhqdS2htG5zdWHibqZPEhGC0OqvNZsvMbZ9Sfw8RuKwzd+fua+iBTv53NCnmn7JZZcz/r' 266 | b'pB6d97bns2ac7RG+UYlRZBKjAgYhnQ9+IHUmzXDt5U8NN1e67V3PP/T/+KJ/ywMfnkx0nLIX' 267 | b'6nr0SRwBooUQgkVkX41dsUJ2ue82m1pu9y66/LVdCx+cPfYj7EeomOB65v1mYV6qitfq4hK6' 268 | b'kq2vq1XrtiPTKIuTzm0LlSTNfVnjVik0eEYVJEpXFc8+88Xe6tLBw8eUElXR6/UGrXYLgEJg' 269 | b'Irrmu8MNe+4AAIEDoCckRAFAiMSA84cejKbfohq7ti491Jo7NPPAPw+dgyX1u+khGWqCEUEh' 270 | b'oKVkgkIDyuud95tOWGA9oB9sn6+KYZrsCnXZ3zrn3TjO9rzh8D/Xu/06YeHmq1fXPpVgL8iR' 271 | b'h1ZNmzZO0ng3rG1unf41Xj7XwT26Ky05xAzGnqLrdCEdOLzAXAo3DwEcLDIXws06Vwq5ZOvL' 272 | b'RX8rVLXCOviRd3VsbK//ZLu5567bfgzFUVvLOG5JBQI1killqhbe1uamHF2MZptjh/Np09gD' 273 | b'OiNwdrbzXTv2v9OjkhwqCpodeBZitpXdklZlPbgSx20XWeWDhxBCr3fuBWa9/9j3CDwGxPjV' 274 | b'GvA/Ww1k2jmzcGnxjxReaYhWM0oBt1Es3v8tf+fQnW+Z5KAjjYgc7Nc8cFWvPf/cc7+qpw60' 275 | b'xZ7Xnv4FIa7M7v2hYLe3+5vG1EkcIRFDQLzWGHIRabASFJAWXnrvtra2L1Szwzm1N1IdmNrP' 276 | b'3Y3YTNPmuqBWSJpaZSgzBHamMK5iFlLoqn96pffoTOs29h3SY1sTgUYROCDjNY+CpBQoGO3m' 277 | b'aLSkz32GNl8b+l6Vb/kyr32R6KR77H37b/kfKZrJa6CIpCRvvSAWNa++8suT4VKx+aeyWAtl' 278 | b'd7z24tWLv9tpNZLOXW942a9HWIlPlKxGodALdxVmKyU/NXWrTKzh4EYdkcv2/IN1914JTVGQ' 279 | b'jiQGEaTjwOXmqxeXHx7bkZzU668+Z7fXj7/+abO2enjnu7u3f4uKKExKG0XXtT4cgoDKjTyL' 280 | b'mNqRaKtqgK7XTPag8i6aj5OmTOfHRS3CBqojUl6H+ryIqIV121YDggkbVZWFAGXK8zg7s++B' 281 | b'n2/s/4F4Zn9NE1S0kQ9icoK1VPTckw9fuXjugXseMEX+B3/wiTjrzM7MCaLASESMgIiBHd1g' 282 | b'1xUQQnBIgIDeQ/ACSWqVCvRmbHSki0me7rmbm4eaoDtifpLlQAtCZh49EzIxQ44sr9ftvXHC' 283 | b'KitQnDMGROCKxw79eHnrkVZ6pKomQkUWSgvbCFmdg9KTsQjk48bq+cHpf1tGCYxH5uqvR/oe' 284 | b'390pKkNhMw99U02Z+pRmQJFhGGGVoEDDyATMJAN594LVFniqQq8VKqOFaaRkOXgpMrvjYLTj' 285 | b'3dmOvQXFInScGbos1SWA3ATIGMFCaXnCvCZMAlr60WUnXpeQYHHSuhOG741U5pUy1TbVtS82' 286 | b'BW57vGSrhvVjK+vgWnO3/y2ee4AUDDgfQWgKh6yhGkiZxYBhcnLkF52IspAlODfKPEgzP3M0' 287 | b'2v2WijpUWymlZixDZBQhWREKM1iueWzUNhQqCNJcobGN/R/Y+5afBj2nMEfB7FUIADQMXIdK' 288 | b'mbweDk6ePv3p5Wd/TefrIwpTQsboQ1cs2JkRXKz7Gy0ZU9QnrRib1m5Llw193kqPrZ3/1IXn' 289 | b'Pl1duTzcvlgVmasvnHn6Fwennzp6y3vrxhwg2IqEAmIcYSF9hAxekalAjs6a3pcEXpznnVbF' 290 | b'gYjLGksxFper5t7OzPeKqCOgCWJsbaIBXvnCf9df+tJM923D9c/0zz7VaezzIgyvPpKwke0d' 291 | b'eQjohCSJPoBgj1gBy3jH1PRdU2rnmcuP43g5gtpWOmrNcNPocbOkxXZ6l0xAyYqNgFoKnYzt' 292 | b'cLz0B2W1uF3k4J3qv7J94anO0QfS2/4uoKJQUq2RuPJXg0DAODgMBMAFOo9BAoKHSQhDAgGS' 293 | b'SxxrX/Dqk+3ovFeHx7RZbJfRoHCTpXW+aNG2mvcVIkQsnZuwVhqtpEyK5taJJ9ef/PG1117b' 294 | b'oLT2EvIpy62SxfKrzyy9/PBWz0zP7dE6AnQMCAE51Iy5YTZBjQfD9cWX5mb2D8ulanvdrD1d' 295 | b'8sPGZYpiwI6KbZw03eZmWP6TfHyaLZmZ2bhOLY1dUGRDIYfOxTo4pKhwYzl1OApxfekxwsHA' 296 | b'1m4yTsamKrZVNNOYvitnF8BkkE4uvvoffuuXivJKh5onX3p4ODqNVf3sY78x6b/4jr/54SzL' 297 | b'fCkBNEpg8IQUJkTX8eA8QACDRoADL4sAACwc5gI0kUAQAEREJADxGmdrFenAdTp9RMd7ImSp' 298 | b'U4g7GqYEAgAQRoSCgAiib7A35YYJa6JKC0kEtfTrDjo2UZsbX1z58q9MHXxHEk9jQF9TRE0C' 299 | b'UMq7AImXRomc3MrqF4rVx/Pti8b3tMjrteV87RP93nJ37v2xgjPP/4QW3jbuGquUdGnycRLL' 300 | b'gvuWtgGcxiMqmknj/Wz6PqwxjbMsJUwLv0Xd3fvv/qfoK+yP0qmDDk1qUj3aLtsxY8YIASoZ' 301 | b'EuVR+FchvwyhJ6qXJdS+HHF5Vmc7RXpXDTVamapZCRmYcT7cDn4CRSagMhOA6tz28stxvtpw' 302 | b's2ljZ6IBByFHrePU2eWzp/7dcP3JRjQXeE42UhObqDUdQdeNoKxLykhHDfQRBqE8yODK0SvF' 303 | b'4FFfLEWeI6gQauSmY1NzrhLZaMwLOe+BmAaCIsbgQ5CUCCVrs3l5+eWV058d9K5M6VbaTph6' 304 | b'ndSO3FA3gigW13svDfLxwvy7o3SHNXWsWiAsqlgGb8eDlYuLg8HrrnKhnL186blyUh19/7/S' 305 | b'e293eUVCxprRy4pNGlIBiFygUKiQldXx/iy7z9TVpH/K+hX0lRkPt1ZO1r3lmak78kbqSRqQ' 306 | b'VhQSk8Tj8vFfmLz6b0bjdaGTkJ8p+5+2aqqz78OBdASeSQGVKEoE72yQIZaEWI3On/35jc3n' 307 | b'o0mUwmxoNeVUGjeStHVAeQHaer2nVnFhrq6d+e3lZ/5nPPmQGTlVb0njy7wo7UYU7+vOvG9q' 308 | b'9nY0nnQ6FoPKyQZ2qSLBEyEkEBEaFGg8ekYpSFDmjWIpBIdqsMIBHbUcFH50Pi3qyqxWWAWW' 309 | b'o1e+ZLeOz+36boOg4tgAYfDG5y7Kdh55Z6/nemvSmrEP2cSmjGK0fr7s9UK8cOydH0znF8BZ' 310 | b'JD0pUEZgqkJBUwqtaHLmuU8un3ry4F3vGm5dGJ/7d8X2o340k/nOCHOhm0IQSeLOwfjWD8eH' 311 | b'PtBYuJ1wSpXAMbGVJChQUg9PJLgrD1bFTazOLy3+DmQtEHP1eCmN4tZt96/m24trLxzYsztR' 312 | b'h70zE7vW3XmnqE4//+nfOn/6SWyvtXSVr18a58v33/fBnXd+GDABJUFC7Vxgo6ikaADQeGMi' 313 | b'4FJgjCJH6TCkyIJxJBHhGzRGv+ogAxEJIW50J+Y13DBhBYgEgCiu5JefCnmeZtnq8T8Srz3U' 314 | b'PvbjOlHbmyeCG0R6FgKD2B7n49Gpj5dnv1JtPTyZnBJ9reuRg83eSq83eRL93KH7v3cc7cBR' 315 | b'P1z6Yj10c0ffmY1WXnjqJ7rpbBwdiRRLmEFImCBYhVhNisVY7QPUo2rZhUxFMh+fau+4Z3D+' 316 | b'mZXXPj539L0FNoZbv7O+9srMwl0Ijp30bEAEwcq7TeOPy/o42B6GOMhF9svg9wmaVxyQYyJ0' 317 | b'5lJuvuLtKFZ1KJjtiCNX2XaUTY+HlxFkvGPfNm1nakbo3IJy5SgF3L3jbcT7ACrf2DQijmTW' 318 | b'bBzJ2geVEkEjqpYMkVU1C0cETMajSrJjzFDWZ0mUANKJ3EBrMByNRxd0PK+aM8E5IEmoicBa' 319 | b'Byx0ImbmZo7d8dEDR3duX3re2O0kVnNyNmYVq5U9d/6jN7/vX+889t0unqndJEIgVGcvfvHM' 320 | b'k5888/wjvYunq81hJ90ZpDLBgu1mje6hB74/ztJEkyThXQBLqEHUAhQwjcFFJMCIOlK7MbS2' 321 | b'Vn6vGFwZ+Xpy+UVZ+3jm0Lh/5krvxIH2typqgvNSjgAbjal9w97rWK5WwfksCwWLEGD6jmb3' 322 | b'7RQwSAkEzESggFM2SuoQzKkTJz7Re/YXs9n9cdIR0lN7NggdT909c///3t3/fj3VANGQIlMY' 323 | b'1ePeaPOVSf9c6VGGACGvbA1Y1+bE8pU/2b7yZJZB1NpjpQwy0q6yo+MyzoISrtYMEkmQwEAG' 324 | b'0SJA7VCQEUQkkqRzm5YH+1cfnmyeDI7K7Y0x8+67f2D3wvud9nWrJRNGRuWVACVRKBF8OVo5' 325 | b'9/L6lcVE15OBkRwpDEz1obe/913/7c9ESTcqtk2aGeBIo4TRoP/sqTOfa2YykjteePyp0cVT' 326 | b't739wwklMLyAsw+mzYXx4CVZOxX3JThpGizbev4oin0QIo1guGeRE4hqWnR1ffK5/23vwr3c' 327 | b'6mg0vHXOOd8+9Ldandvyta+EUM/f/0937f1At32wzqNY7lFRLCNVWD195Fa3ctrXmyNlg8Dp' 328 | b'dpQ2EBihfmmwfCGlRpx0lRBSYIBgXJDX3RLoEB2AcqCubWLgIAklXKc4Yr5WaiESEhGCAMBr' 329 | b'B28IN0xYsp6ABEA/WX9t/cInw/DZ0eJLwlwpIltMHt8aHU9arbSxp3IGJXsnrl781MapP1o/' 330 | b'91moqwilKXuhRBLDKhf3fuuPDo2ogm9BXvee9LzeLwYbX/yBokiPfsuPjlymRUQMLmx56bWM' 331 | b'Sn/J8uV2elRHcenzhekPtmbeImhq6HXX2XNn/1XcnW/5uaWTPzc/fW8ydSdxQT6WQgm0wJpc' 332 | b'LHEAxRJIZYKyViIFY16t6j+R4SXOMuO3+uMLzvsEb6nLQVFsWz8s8le7+37owAP/pLv/3c09' 333 | b'941ErDAmJ7HkEJHUPmsdrehAOp358SXSnZnOrVjXLpuNZu4WyTxDO8/SMdwAACAASURBVIhM' 334 | b'haIkj2gkNoTsymS/jhcm5UVjlj3cVheGIRw88rHZuXdlTSPV7pLmMpU4IxEAaROgZtdE0Epk' 335 | b'E/Z2cHbtwqezLkhJrl4STa9qwNld07v+xhBSI21TgsQJs0fqDC+dv7r27Lg/EKFlgtmauMqk' 336 | b'rs4GOa+++LmtpVVopK1GJkLmYyRwzMFIYakmnxCgxVJymm+8fPX1T7Sn3qoXHpiceiimnbve' 337 | b'/X/OLTwIkUAU2N5ttdHFuF49vnL5tybDM1U5jkpw+ZKoIxeiYC7Zq1+C6lIdIagUuJYiBibn' 338 | b'gICDH00m/Xvv+ce7HvxnhV0tq4s79r2/FccRjTu7vv2qsBpmlVUS0aNoz922++gPYnNmNP6U' 339 | b'ClNaSVKpVlNZ1Jifvz1tHlBi3qPmRDShW26/uj16IsnureVUIioMFoRGIAAXfAXEWiqy2lrp' 340 | b'4tSiV3a7d+a326370kMfXD77+6Tl3B3/U9Xe1Zi7I1CibZfkiFAZG1ioqxdf+Myv/vSVV5+P' 341 | b'VDziUTS1U1V1V5aktsZ6Y9/Re1CqEJqREVpP2NiQN5uRPPPlT5x+5hFYVouXn2pXy6NBvfX6' 342 | b'7y8OPn/7u3524/QXBit/2s72jPJ1D91GY1ewW3ENEXcdFloOheyWJccISnQji68+9g+77bQx' 343 | b'+7Z87U+LzY2pXW+v0l1plNbjURBzjV13MzTS1gHRaGKKzkhN2oxfOvXMZ+rN51IwnXiqo6AV' 344 | b'KuHLgpdXr34ZQ9ZsHs6yGSZ0XhBqEun1tBkGBWBKZoegIUckz1IwXa/X9fUuGgIgXGsl/lXe' 345 | b'd7xxD0saGxIQjUi1ly5+Lu8/ZtzWQMRqcsrVeafzjrld3+NlashG2NKUzh96T/PQew1tif4y' 346 | b'2txJ433KIW/nW72Vi1Jvzib5ZPiSI0bZMsUrVS0O3PU/6B1HWYvgSAIIkQaIEC36uWa6F8VO' 347 | b'UnFphkKl55b/0A76DZmF/pqIxw5pcvHkjnYa730fZl3GFAUgGQirLn+GJ49TdcJR7lmBzYVd' 348 | b'BVyK4yzm91j3oG7czzyTNHe3G0fjbOfm9hMi9tPzR2lte0tSd++7iqAEkCixGl5o6DmSchwG' 349 | b'sahDiL2WFi6Phquz828X8VGNttYNp+c1JUJEDBRKm6iGNAy1QvCBaxsWy8krXX1L5/B3QT0e' 350 | b'jVemd343ZV011ZXxjljJECpJRIhl+Wpwo1jvJnB5vtFw5cVTP9VozS4c+BFhjguJyeGPip3W' 351 | b'LH5urntvEh/WtCrZYTXPIlKNdPetbzt829t6w9VBfgkwpLqRCBeJmtJut6Wj9t50YUer0RUy' 352 | b'ZgHOVQpEBYIoKBDoECAWohyOjs923zq97/v03G2TzUcrjKJbvjuOuro1z529lhTAqN46k/de' 353 | b'2Ow9LqxtuA7Lok2qQjOiDelI6BmYOpA1vi1NW4K1tY6UD6qoQ66j6Zm5+4aNHShkvvKlVGXz' 354 | b'9/zzbMdbydd1SWnEKXYQMAAXsK1IUdFbOf+bKU4kNuM0E1lsMVfJA4fe/uvt278/ad7j8Wo+' 355 | b'eLSJnTBZnlQntZyORLK58sfWV0JmQqYCJPkEOUIgJDDOsJLOVjxeqcab8wc/4mdvn1WdpdWX' 356 | b'dx76iMk3sH8hTQ+QgpKtD5HRxcjmGysrdx07cset3wXU3J5c0H69kwjZ4XT/bSR7W2denN6R' 357 | b'2anDEUuQMBQMsUaKZpvd9XPHr5z9fJhOe8N6wovxeOX2O3+WZorTj3708MLfj4/8N6tbXwCZ' 358 | b'ze7/qIu6Epcwbvp4l7DB26QKp9YWf12Umds6VVz5zHg0LF1/vPTFqHFLc987qmqohHWxTjsL' 359 | b'kd6HAitvUWEFw0Q2F88+88gjP1m/9ozsIEV1Yk2KrMlGjcxOJw/+jV+55c1/R8zuszqQoGCF' 360 | b'ABBkAf8z4fb1nljwTJaDRgBWFkIITrJEz19jrDdkI+Zrx5H5zzeU/rL0c8PfCJl2k/7WiTC5' 361 | b'0s1uq8pRWVzWYq4T2mznO9FODLLmQpAKAMylDwkZnRjOqcF6NmqNbTkwNZvG/kLk28sPT4bV' 362 | b'4VvfAapr8sHU5lTY5+tykda+ksa3WDU1UeOYut6VSmohAEg4572HrHUgyQ7u5G9fOvFT1ebj' 363 | b'c82dUfs255Nuh3y2Y1utZ8OBlFNK7hLUsTAw2AcopFpWZse4vDyFDIx1vVX5+WTmNsyOgRGO' 364 | b'K0ENBgDfGzk/13xva/o9jVvuOL/y2xTW2ioF75TtP/Hkv3nfh359UtetOPU5kInjNvRGsr3n' 365 | b'AYh22TpRjWNN4QMw2G1fj5xoyWwKClPU5yO9n2QqSUFoU3pIx/fU2Ermj03JTYiXR3YH+Ei5' 366 | b'gGE5H1/J0jjWO0K5akqfNOaD2iKfj8ZmeupHZw69G5L5ePJyxU/P3vY3Pfwjjh4qfK3rIcJu' 367 | b'oAAJBC5NrRoE2Fs3Ky90Ip3wQizOoF7bmDSP3XL47g/9bIkyAQcgg7dhgqIRgZFxDZgKFCVw' 368 | b'JokC5Mn0XZjsdxYqcNHh7xUuiLAIYFDtSqB2eRHJGeh+W3vm7bP2h6+e+hVYfWE8brFxeWlB' 369 | b'2BDv2/9tv1Cnc1E9MKWLolgEVVeViFEq8oDAlMGILMzP34OcTlCjjrMDHyi5ytxuCA5Q1mGU' 370 | b'6aYMuLH8p4kukwP/WNgrG1uPZenhZoQrm+fWh19udt9LTaGqfXbjs9vjf8+mg84Mrnwhjh7r' 371 | b'5X7Hvt2CEu9BIqAAhGB8GZSMkppCBJhOaKF99AdDa29er8zt/fZj8TRryMZB2he9msl5phXa' 372 | b'wGUMohG1po+9k8Q22anNrZO7l0x8eF+jGA9w7Y4Hf7a9sFC89hqMiebKPIosDyXLzGZhu8z7' 373 | b'Fye8Hu/qtlZYJF0Kwsgl07iyvrx9632fTe99bwIhu7wvLhNII04PmypW2LIQYhGBcRiEt1uv' 374 | b'nfixOGAadufDzd6Ff9+Vx7L9CwBlByNvYt3Zp8FVvogREoUcFNsZB7Bv/1v2Hfxsf3xh7cLz' 375 | b'S6d/ReuR0jvGdhIn/V0clC2RtalEEBxpoxQQqcD1n32n9c928AOdFd5pvsMiQPWMFd6r+wIy' 376 | b'svr64L/Y4wYAZrzegL8M/gpdwtzDpX7vj8uVxyOTO1NVk60mm5CCi01I+k6uAnOkZgVqxwW4' 377 | b'c6PXfsFtL7V3P4htY2HooN3uYPv2Dx0+/Pfa3Y6MYxG1vGt1p6SOADittpeGg8+cOv+51syt' 378 | b'WXvBwVZM086PBGkAKUgAZ0BBSh9F0+ncUeXzoLVqt6eSRjPdJRPN41FwhSIvcRdCi6K21vdF' 379 | b'+HbZUDh4xIuBNAHZ1mowhC8bvwbwfVFcoaotx2yUZGIazSzcj1mDZnY3spnQK6J4DlR76eyj' 380 | b'Z1//9My+w81097njTzz92JN33PcAIqRp29Kscpo1oIyRFTDaarB99Sk/utCc2ZWvvLBZfiFp' 381 | b'3CJUF7CQMEVyHuM2OkDVBjWrVSfSCVJDSSV97MrV0fBlzkfo++jqejzoD07YnNr73tWcv8+o' 382 | b'xiT4hDY0NOTc9zorce6ISboqbrKwFfQFKQmxVhbK/uILP42D1+++8+9aXLPVk7Pzd2/FmXST' 383 | b'mSPvzjkGDySJyKMXqAKyAK6AJQqHrN347NboianWOyqcCGEkiM7UXc3GnRE0gTLyKVNCxlGI' 384 | b'Kl06KRVKs34ilOeaWZcZqQqR3SiLno7U2tWH1y79mov3d1oZyZhAeY4gJAIkeEA1qUhReyFq' 385 | b'H9JkYlegm3FO1bqwhCQUIGlUoQYLydyevx3tvrfRagzLSzPzH5ne9RHdyjnUnXTPpL6UeSWr' 386 | b'ylSrACigQ64K+fL0zgc7ux4g0SmMhVAJgYwepUdOCQlDCRy8qlVzB1GIq3TinuxEB13sTbmy' 387 | b'ufJ4lc124qP+ytObm6ezZJ8ppY4QBYIqT7328T3Z7sMf+XkqcwrP7tn7w0Ht07MHRXQgRLGC' 388 | b'cQbdCFauvPST547/973zx9MwbwsaYw3JXD0ezHfS9ZUvxqPHdkb7sAEg94nqaiTbqnNnkFEs' 389 | b'FAUBghmdElWs905Hd0+u/oHPCyhS1FsN0aVkZ9CqLs8RSVA7lIolp0Q1u4RYB+NUjA63Aln2' 390 | b'Xd/cxWe/aAcvN+cWUtikeNSdva01NGNzppPMx9mBRCtk6+sAIEASXccaF34F6pcD7CQOUPwm' 391 | b'gOH4LYIr/DN/C/OGfPRnN+v8VyEs1iNqTE+/uVmpratPj3EjzjJX9qpWFieHpO5kaTuT+5Gn' 392 | b'WAOT8mujKNnVuv8H9cKt4eqpdntHNPdm2Z8u/CqMVsebp8HPuLAWycL4YBtdiglbOxqzHz1y' 393 | b'74/JZCf4hIwUVgXZF9wu80DxGkmvaLYshBSNAGPq50nSlnEnieOJDkOKG96p+bfFjfsxTo0w' 394 | b'Ho0KMdTWmCfM8sNZ901jMxjDhc70P2n678TqsUzUwA9SxIAgUSLqLMpEtHsY1muSXd41uPQv' 395 | b'L6590bVmi60vb51YMq5YX1p96FM/f8eb79hz5M1lOUHtEVHWjrl0gqxzpBLUcbnyzPDSI5N8' 396 | b'BXtnB/mLs9l7bWUHg09jwYmcIW0pWCuRolkyCRIbtwnCC8xibIwnX3HlxFeTUJXOTZQo59pv' 397 | b'c+1sOFIttFoJ22xifJhpL8cbBCax0+RJGKFVM6CxJkiMzpbDth7JZBvmD8jpia+XFuY/csd7' 398 | b'PzZYfWaqWu7O3GXj1EOpMEblzagsEw+i8CENgmXwk9XPryz/7nz7wzHGto6qfJxETKSML4MK' 399 | b'zo2ASIkMYldTBLA5Xn5MmHEdjSsrUe9W0jq/qXC6vvT06OKX9h786M5jH0Ivva2FJknEzkly' 400 | b'RIa4qUMUwDmfSkoZUxsgjksNQfumoYFCjz5mdnFnplC1xpiq9SgUjYX3jSBrzRyIaHe+/aIa' 401 | b'LvY3PutMP/hpA1DYLVJlbQuHu5LGLq/ajqpEEUJUGxmkjiooAb2MEKVWwjoBeEHb2Uk1oeVP' 402 | b'e7tcDS+0y7YzW6ONp0erv9/Yd0x1bq/ikt1Y+pYB2qLX73zrP4SwMDW9L9evcvwu6sQFrcRx' 403 | b'AlwJ2wwSRibO5t6z69C3Gw9rV5eVaU8CN9ndf3uxsu13Hbnljtt+Avfe4bv3kJCNmVtU93Yb' 404 | b'RwKcdAk4jWqSQyt23qir9fYFGhy3k8TiebZAkIwa284NWyRsMp1M7ZJQIhoCBhtBQIplbmql' 405 | b'OgQJUV2PnqLXf0PsfVP7TT8S954jmU2/7ZPtI/+A4Qw3DnNzrgYLiFqkCOhoIK73R3ouCuMn' 406 | b'anEp4DkxfAXhCDXuRh4j/qfx1yOsbzzgG+OGCatg16zcKGrVelMvfyWMC2MYndCKZTx/8I6P' 407 | b'RTPfWSQzXgeNMdqRnNrjs0Yq90UqrMqTjfnv2zH/Q9WCUaqV3fIPOnvf6nvPJmVvYudKvRXZ' 408 | b'uVT7pj6SzN89DBYhjuS2LbZck4HmgaxQwdZCyxhYKh6P+3802npdtwNHUxAXpqxFX6n87Nbg' 409 | b'fJze6pIFFiIKXoC2QgheEVufmEx/MJ7+X2K7ZkaPqJ3/cnvqYKv99704CEkCoAUqJAABqDoM' 410 | b'HEEab0vfVqVuD8/8knvlD1eXX5Gd9mhx9dSVR9szt3/nB35K6AaTBvASkGRsZFRZaCAT8iQw' 411 | b'2V7/wmPl8GTPLTuv7MqZ3pnfqCuzY/93gky3JUWEAgJBAJIEpLCBZa+anKw2T8TDDe8qcrmK' 412 | b'2gOzlfrReLToJ8+kEx66F2TrSOA5SdNaKfLeUicgMFWkSkAijlnKGje6sNCavoWvXBqY44xu' 413 | b'Kt27rYtGKKk4X4iZ5vyBWE1DTSRcwFBEQXGaQDl46UeVLsvmfcXZj9uTL8E9H0on8OprP7u5' 414 | b'fm5+/luDslaW0rU1p1Yi1IzBg5QBhPbbdf/kaLGfh835qT2j7fNFv0iDAGgffufP4X0fkJ5Q' 415 | b'SJI6BIGAQhGQcJ6RBBAIjOW1DdYIQgBAhJgAgYSYIAJkFAIBNUQAlRMdaNwRBCQxE8QYpZTu' 416 | b'dTzhKpU4HOZOt66oXtSw1jnV23h2u/ckr5/vTt9bMSsfcWwVC1SbCpWsEcgGAiIpeRqpjuLG' 417 | b'yA9g/ZzmcZ7pSf91zF8TO98zu+d7jTUktBSRpzHZas/U20FOkzZeRo3O+6O0oUjF2AbQCDqX' 418 | b'QAE0myRmQYeUgu3tz1artFVHB/et33F//+Tres8DP57c8h1btDgVDiJNELWQWgES8//L3ptG' 419 | b'WZZdZWJ7OOfc6U3xYs7IIXLOyqx5lEollQQSmkAgJAY10AzuNmvR0LhpMKbdqzHGuNs2Xl6w' 420 | b'FsKAARt3MxgsZDUSRWueSlJJVao5K6syq3KIyIw53nyHM2z/eJmJEBWgKrJoEPn9iPVWrHgn' 421 | b'3j3vnn338O1vB3SggDGNQzHonc/XPtJZfWCQb7IIllkOJ3NMp9xUu3Xz9I0/Rq1bFZVlEdmQ' 422 | b'aI5R4bi/xbAmAEJAUr38op08vO/Gn6xF+10YdqILexZ+BLlTm3oTqYNK2JBniEUwACgyDrbZ' 423 | b'pT0Pwk7ngL4zghcw33T+aV35Sp4yg+cUDRGPcWWH/rFRedLwPFLiYQggCErQVlIoNF/lW728' 424 | b'HNZLpzUQqagCPPf8439SeIB4d9F9nLT28f6BXoKaakzdSRQhFuiZpRbYEmgGDTgE8K3aUYra' 425 | b'OjKpzBeTcaTh4mMfGuWrEqx0/aWVtbg5u1meNxpr0eGKVpmmZDCg7c9QdExjMRo9H6hv9GSZ' 426 | b's5eKVL1dX9R6fjQ4V668IIOloT07cLI92Lx4+v1RbFrtm0dVxCon7Dqg7TA/2fgOH1kqUkfP' 427 | b'6PoPk2ppsKVYrVL4SyYfESX162FjqnbE9c8WW6uaWtv5qjK7NdarChrtia3+gDiq1ZqEAFjZ' 428 | b'ahibJD//kWc/9E83T743X3+k7K6QlPVK2f6gKJ+uWmHith/XrRMurGaQQIiRNAIhCpCtyuWN' 429 | b'7cdX1x/vDR7yeTePfWlWBp3NxCkohpdEhqNqurl7e+m3Bytr7d33ARXrFz+z7fJJU2NmIvao' 430 | b'EQ0G4NG6657p+y/0Rs8ClWk60/TNKaix9qPeudC8ZerAq328uwpRrBVZpErFGOmyDyGWzme2' 431 | b'Tv5yuf3I5oWzbtTtbJ16/NH3Pvnc+Tte/U9bk7sGvQt1ahCbUo3iYUQKMGKCvHTA2cGkfni7' 432 | b'95A5/1Q00V5efyo2YUhlNJ1ptTjdvsNrZNaITFcMEwCIhJ24gjvd1oRIxMyKWY9pioiMxCE7' 433 | b'2OC13upJFl8NesbUVvJuFW8fOPS2bO97Wotv6PmikU7lg7P9cjMzXIVJRgVMHnMbPIVIOQA7' 434 | b'IntpOHg4lDaoaMOtZpg2/LQt0lRmTYi1rjMyUUyKrXIDGcYUIxEAEvEV5iQiQmQBfMERh7xG' 435 | b'xdojX/gfDi62ZueOr23bfYu1qT1VudY3g62I/iBzfQ23YpwBKLj89nFqmhCpAqehnUQzreyW' 436 | b'TFqd7Sf6w9UMppiLKnKlKeqtG+NsLwBwKDlytAMfKo4bsZrkaBIJY6xJRFn9vhA4yAggZUWA' 437 | b'JYAlMBDE2w76SVBg1VIaSnT1UTqs+Ml48KVKNowdiFTB1py7OCw+x4P3Q/4pPfFurWaFIhEg' 438 | b'iBAB0AMm10oW5iUbrEpcFSpddHQ3mrvju1rzr1p+6rdNc/9tr/1NqA+27WqWHTRqhoB9GBEj' 439 | b'YqUwCyKIpVYzOpoF0sxtJYmJplYf/fdnHvuVG+76n2qLxx7+wv9bbR048U0/LUlfW1ahqaKs' 440 | b'j9YNN9zKJ9P6ISlWt7cejWKIokVhRqOMmUYzbfvbm+t/7EeVK7eXVz49PfOth27+wVZkBj3O' 441 | b'6gcpTQVdyNMoyiSrSTUcaor1nKa9LmsRJgwSVH0cqf/l42HLSy07smf+n/7ZR0pcH0IapF3k' 442 | b'50PoFq7z4U99+ORzpwZ5cejIMcWxtRKZvLBpHE2iH21svrC1/lyNrRtaGcQYLpo+R26uPXc0' 443 | b'VQcjmEAYoCGBIogNARGN5ma9cWC6fTytHQpby8VoDYc6sSYJFcBQ775zzy3/PGqeOP3I7+Pm' 444 | b'aObwm5cf/MPTn/y940feSrWmoHHAHoIAcwDwOUEfh8sCvaZpMMdxmngdjeIMo1Zj9vWNmZtB' 445 | b'TQQgowBkBFiAwoEZbavmRHZwsPSxjc0vDFSiJiZWzj1XVOt33PpfHjrxbWXpIoWsGkAwDGvG' 446 | b'RGNlwFBV2qMBPVp5cPXse6vz5wuKrQ8p102zWTWl71ZC/mVu3kdIzAqAAC5rNuCYn/Ni2PlO' 447 | b'JERGZAQWwbFCDqGCUb975rcG/QsUtRMvo2o9QL1W4NSeH+jYYZq1VDqrQu/Mo7+YZXvT+v4i' 448 | b'FIoMEgCSpoipzPPHt7ofy5cfCfmlzGUYenZ0sVFlod8f9k8/u/G7uX+BCJEaISQBNVCEpDUo' 449 | b'BCRShFfFKREAwAJpBVR4KHv9k73tjaOH7ubWYyeOVElLnE+mZ22z9TzWTmPyY3byBo2EgBIA' 450 | b'L28MIJIIFFjFmFA8gclkvn5qe/BkUEzDHrqU9twzIrFFkU0c0SpD0UNfRbyDxDDGSrUKtBYq' 451 | b'rfaauEZqDpCRgVkJogCLOEJEFEYBiEhtRTKLVa3wqyM1U8MjepBbPmtgBNhnx4Q98FWsbqbp' 452 | b'f2fwDlCx0AZiTlgDEcGcgPEaKVm95CohYxEg0XrPzP7Do0gLQxnvWVx8F7T3LEz8RDpYjuM5' 453 | b'oqELVimNQAAaABAlQI15QsR7KUBiFTX9wHobtabv6AyKdmuhN2iq7e7K+um5xusunfnDSv5g' 454 | b'Zs/3t+bntqtHjQnrK3+gOQ4519q7wWnG0kO/sNqaHPpPbF1cPXzjz8Rcnnz6QdrL0jhRO3wi' 455 | b'dV1itbH9kag2XVe3VOsrZef/C3N3o9zgjNfZmxTlLORLW0VoQL2IeyVSFeu9tV/tnP5sFNo6' 456 | b'zkM+EllvpMfyURlU611vfuPBm+6Z2rsgCgNYrTT4SfDDsjbRuucnb1x885lP/qvQ+aKuZ3l4' 457 | b'lMwsbmfD1UfP/+l3NRe+8c5X/TzPvVo8EEeIoQLwJaAAMyPWTVEfbLxQS6tq0CrN+pYrqNoA' 458 | b'F+ylNcAFsPnyyucu/fvvH3ZO7128S+06XOI4lgUFELytgpZ4irI0adyJmw+44qwzAbM6FTjp' 459 | b'c0NpPzxV9SuIj0R62nlAlQCG0lc6r2XVg+vnH+oNDVfzaBvLg2HKB3qD4coLa5F+YPrAofrc' 460 | b'odyBhqLJUxswbEqELiiTgQ+9kx84/dhvdLdd8+Dto+2lrJ5onbWyRbPrrWbm3loY9XGs9RtA' 461 | b'/NXaNuLXRHoefyPj1+Ni0xUH7fLvEaHf+7DyxxaPfu92cW70wh9GvL++cPD80/+7X/twtfWo' 462 | b'PVXb84Zf6F06K2vPTe4zldeZsiAgAj54ZkAwsdnjYusXXN57rL+9CaVLcL4f7MCs1RcOHGm9' 463 | b'K64t6vSAjtoAIC5HtIYAoHGl356ufEgBgEFcRCExECs98vX5m+/7H8F2YniO5XkV1QaVM7Xt' 464 | b'MNxjkpto4hsuQndeYhBGUlduxvGaCJCA7ToVD2l5y51qzr92vrb4/EP/2oymbrzrv/dc5huP' 465 | b'5G4Fi1qkahwlO+1hVQ51lPlQAFpQGem5EDxxiSEDGgCwQBJ8LYjVGgR8EbZSaYx6hTcQ1aab' 466 | b'APnWc1pvqDIJflBRbqDHsB1BCZpc8wjB4wgHCabHotsIIEEDqJfakrgTXrLBiqAG6K0GQl9V' 467 | b'S5Ga233zu9u73j4MozRqtFoNxBIA0CeE5BywAi8lc4QSC4CAY2IP4pUTXc7f/T2d4D73J//t' 468 | b'/MQtNLRGXXrho7/21OBBpuZr3vBTZ5c+ULskUUBL1imrY8l4BopLg9F5ibJ647iGJkN9rQ/H' 469 | b'bv1BM3M3Mxy8+dtXe6ttCEObOxVNmDiR1dUzn64tNpVcsuce18kbW2mcl4Bxn6UuBTCTwQrh' 470 | b'RSSJETFp3WZq/9vknqLa+ODJL/zrdpVkSfrc1gtSNbZ6/r49+6b3HnHWh+BJARJYlFRzVQ4V' 471 | b'DXvrH471qrTnHexOZXZk+gNFB27/4d0TB0C1xMyMRh1FLQVCHAx74LEiuhPwm+d/fbsaNA+9' 472 | b'qbp0/lz/s4uHf2w2JKef+Q+rJz9UDTVqsrhYbQ36vcZ2eXNv0FWQE9eElMcSdcxGe4AiQFyc' 473 | b'GS496Ip1M7erOwypqzd1tS0qnUiHna3mdE7aFj4oVgBggw8Xf/b5p3+/6MZxMm1dEqSqpCh6' 474 | b'JRCcOvOZL576RNQ+/A1v+YljN57I8349mp6kCG2AahS4RuxlItt7zz+emr9vs7/U/fjP6YkM' 475 | b'Zw9UF5dSnfLkQagg0zkhwWUHgq42t9PXpr30FUmQP9eWI/pzyXPbPt6uH5aE62V7+alfP3L0' 476 | b'n9CRe+enZldXlhfMnee++IsuDiGOp5pt75eh2pcPH9bmoNL7iFUIXkCznq5PTIOT7tYnS/98' 477 | b'5JKmquWyOYJhUibtuXeBxqKCICHigKTBJ1BBMOFFXUKGqPQdIy0nOktBwdMuf1yFlsgkYjON' 478 | b'VwkEJfDwLOB756pXufndTDFhAsBwmQrACECewGaQCKBqTB9v1+7D+t7ttS/m609KYzdbaMxO' 479 | b'SZyiaMjBwQig+aIbaDgIhJhqAM5CUBijcBALFsCgjPUXGcBrZ2Ft+yn223r6GylJIgPe95iX' 480 | b'OHq4a/stxTDqk0IQLWJcaf3wj0VOldO/GpkMFAitC6QoGQN57APUv5bv96/FS68SegiDKo9D' 481 | b'oKwOpKnWmtqH8aSKY0EXaLusRppa4pFUcNJjjH0omC5r5ol4RIMwGri81tcqYtvfgovne5uT' 482 | b'XcTYTo46X0qS2pF7/nHrhneoeKLYOq1xOHTElNmqWxajwXC9m59Xpp6awxAMl9iY3UfNvcIx' 483 | b'4TBEjdnF242ei2RIkakE0n4Pts/0+qeXlp8wqpjadQxUmo++aNXAqCb5CigVpp00wwRWRNqK' 484 | b'i8H2Z9fXP++ZC1e3fmja9WHoP3Lq4WM3nMiaC8SqGDltAmMPoQ5gZPjF9Rc+Ek/c0Fi4x47W' 485 | b'gePWZEtZPb/rPa1j79ZTs6wl1jNK50TOOeu9CCgB40pjS3Nx0WbKwwAAIABJREFU/dEb7v1n' 486 | b'2a635GtLw/4Xjt3838WT903fcMvZ5XPbWxcCtEchHQ10Ss1ya/2pB/+XJx85mbCeXVikOPYB' 487 | b'xAau+jK89NxnfsYMS1Szo+Fz5dbzPu8E14mm7k6n32CivRy3Ab3iQOBcPkpRRfU3T+15m5lY' 488 | b'uHDpZL/Iuy4BqquC8mG1eMP9b3jnD73q9e/YM3NIIbIOFUe6gkp3fRQrYSvVqNaiyVvYtED3' 489 | b'Rhc+MnXs27JD35fo1CWWGpPGMmoDQCLjBBb9DSrcl8exXPHRLr89hRmKac2dY0h8dWly4S1e' 490 | b'N5p8pD4305qY9cXTZdHTWS9t7e0En/gV67qE00ovIBOhBBw6ySsYyHMfGXS/1KjvA8G8e7pe' 491 | b'uyHmheHFL+iJo3EzZkVCAhACFZ7dyA8jFY2jW7iSUR5DV2hMENAQQuS3Qu+x4B6BoCmaHeUD' 492 | b'DCVV8wA0HG16/2CUnnXp/YhMqMfeyWVGOCDTAH3sMDDVGvEixtOeMYl3rY1WJ/beG4CUinOr' 493 | b'vPfBOYoStZNKBLIDVI5Y2FOpMAWPTgIhIsU+6IAbINtGmiSwvvEBv/TFyX2vZ446Zz+8sfZY' 494 | b'3NydxjdxtR/SEfUfR3Tsc09FXnt3iO8wPrOTlcJFlFgkQyAc60v9JTGvl42XThxlSxRriFUA' 495 | b'yJtDDyaap7jIqy1DTa1aOpIQQHTHQ2XUVAjAbADAeacUSjCAJBBqqr91/pe2l5e3up0hr2/F' 496 | b'WnScy5ka3tqFUxaD6y3FllfsMuiml0jhJfQcqQiwPjN/i5q6CVA77Corohs2hFDkyqRTs68X' 497 | b'gF7vYjbCIZ0X6cVlqUIN/FY9waLIn3/m/XbgR+m5bOF7d+89kkYZCNhyoKPWi1+ua7P3YGn1' 498 | b'3EeymbvnF//JFz77O9nghTvu/z9FhY9++pMnT6/eNeGL3DcaEUBeucwQ9H3lefbAXT8Hevdo' 499 | b'+Kz4R8i8q5XsW6f/Y1B9Ki7epNPMSafoQdZMggcC4PFXgYBaAODo3T9ZWFV6mdl18/bgJq1k' 500 | b'a+OZh04+3Du3rnSzGPpB2efkgJfNYWd1+viJ2+57V2v6OHBUOUFFmhWUEPJh89A3Lsy+wyv/' 501 | b'5MfeM0HME3tXlx/Z7eujuVdHaeSD9y4YHYOQkgwB+tFzJj6eVhtUxDKKhqN+jWeqrlnZLg7e' 502 | b'cWT3nvvdZRNhFbELlUSmBBQYSyVjw0wEAC9rUTWld39LNP9Wr6az+fvz4VkEApsGE77CpZKv' 503 | b'IVf14rjCP8SrZMZxUMhlH7A+q/eVg2r64LdJNjlaf7Jz6n09XVbq3FS91qBbdZzGtVgQpFip' 504 | b'N74N1B4hcBIICwURkLau7CR5o/XOtP3qzZU/u7Rx4Za9785qs2pqYmPzVGNyAqM6kQGAEAyT' 505 | b'jyKF4+FLQF8lxOarIZvIhaBVBNVRjo+yvzO4k0X+UNpMUC9IP8/xbH3qTUDvhtoMU0EYAWgA' 506 | b'AgiAHmRstyqIAMUqn4IyFrat0/H00eMTPx6TCbLpsAYmiSAgmmHpINrhARyoFNAeIDhJg/fE' 507 | b'AqJIUAAsigbLxehZXyzFAdX22cG5s+W+h88ufWDp2f905+t+yegjhV2Ja7tH+fMMUciO8Ogc' 508 | b'VI/59mEfvzGxI223QDUdA2KXIIUAABUAwotFMC8DLz3pDsssTScdg0NQqNM+VJHTVcoaJSYK' 509 | b'AYoyp8hk3glL5CFnikV85XpaxSRKAjCh7WCaPL5x7rTPN32ZhsLKkJWiNOkG6mytvD/e+FN7' 510 | b'8Y9iyvK8qDFYF4OrBeoM3EZr+i6KDw4sgEqYjS/J6KFS4kMgT94TpgbjTayeqTY/UQxWgsor' 511 | b'28FRplxehEGCLxzd9dNTB18TKC7DReKRpqmdjswg4MgM++F0YmqLu/+bZPpGVw3L9ecO3/GT' 512 | b'WXvhxE13T++aIVVEUZAA4ONcVVG3G8d1SaaRNaPSXA0HG+nu1+rpO2li0UUNytrgdKRmQpIr' 513 | b'tERA40yr5N4PWVmlQjmkjBhUj+IpnJjvdRqPP/CLnSc+zX3ZDhPBRlmao2mZ8MzExPTd3/lb' 514 | b'2f6DmE4GYkDE4AE06IhrzYmpo5ZnC+ye+cz/PD/zHXOv/bfbxcX+pU+3Dr/bUCTBKGUcoEdA' 515 | b'7Qq7ncBurMLJh362e/HJffvfvd3HleFG/cSCjtqf/cJHbz5xvD4xn4t3nHsbYkmLUGWYRcEL' 516 | b'B00Rlz0s+6xntXdqYb+YuQRL8ZA194NUbBJERCQiInqZhe0r+Krc/Hhd7BiTh37iIiXsdH2o' 517 | b'Qy3F1DtzYSnBUaITmMGA8zXuqKTa3pIcHWea4tRjAGs4GBBEyam+t968GVSsZKXcPDt39DVl' 518 | b'tnei/aosmte13aVFL85wkGqoIOKggdy44+SqnwUAImIjY8sqMmXheWSw0hAkVPDFiLWzLWs3' 519 | b'lCBWzPUbrL6vEw1q2ACJQAhkvJAABkCpfM1hiBgpcBUqo0FTzaELqq16iiQLJgoAaCsibUxn' 520 | b'PGXnL0PIeVKaLci2Uzo4o8B5VbkQAW4TZCokvY3Pr57/s2rjzGj1Yig3nj/9W6Pzn5lK37jn' 521 | b'VT/hoSAcem7G/U8QBjvzM4QnovX/hPEtkB5PRgOVTiKSx5KQSCKQ4KUkjF+OEuCL4SUbLIYm' 522 | b'KFAcA6VAGiEhTQoMgEECAEKItGYAYDJAILRGoYFCShLBELj0llmNQmKH9ObJG9880OHi80/o' 523 | b'YjL3mxC3kgJ42hy68Udae++K5l/lG0eG7rQZRFAApNVAXOaht/x0EWfxxGIy2kSdkQKACMEQ' 524 | b'aWAiBgWKvSZ9i2Oi8LQfNYRmy7BCPhW/qWa+qXHwHY5DsOuxnyeV5ujNDiGhAkyQYzUZ1W7j' 525 | b'tAFQsMKBmlo4cDcgAKDCSGFCEBEqJNCgIM6AwAAwMlBV+gDJkVrtEIhoPRunhxSnrDQSKtAI' 526 | b'elzDBkBETRQjRABGGwYGhghJZ8metF7bd9tbjt3/3XZxqv7sZ9Fv6Vrably0LtRozW19fv7Y' 527 | b'PYo1BQNAxARY2LI0lIFnFsUuf360fcM9P0Dl9PTCazs134iP02UlZSQBheOZRgZ4FAZLLyx3' 528 | b'j7/hp/bf9B0rqyfPL5/6ru/4lZtf+60Q7bqw2lvcvxgroyEGYVSkmQEBiAkZEEAlZGqEADo2' 529 | b'VNcAAApVBACMybjpdSwg/zfEV61wdc0YfIwGFYBGrXQMmjDjiSPJ4TcN7VBimvWHaia+GLq2' 530 | b'uzXoPbl86j+snPsk5Plk+zirLIeCVOmI0BmtSYoBwhTXbk+yeQWCTCqpAaIaXzgwqWgc94y5' 531 | b'CF8Z5AIAIioIWukghokiLI1fB38JbFLWjqahEL8Z0jeW8cxo9KFYRTq6jYGvlE3HaxACI7Ai' 532 | b'UIgADATMDGAAgVFpQIwANNJ4fgiPNaJ3TLojsAYAZFCZAqMYhJDBiJAptgCzvqGJbHd+7vPl' 533 | b'2lNhuNZVl9LtMtYLE3d+ZzQ/ayBh2w5qlVBD9s0MsTHNYgLibDbyCz6qlXmhtWYUAoKKgVGo' 534 | b'ABS8RuMjXvEhFBgWKjvQBhEzoYIASNNwqDnjZgLYb3W+/Nlq2EVqJTifD/ww6k+zPnTondBu' 535 | b'e+caw4vbFz44Ao8TUvQ39y6+s9a+uSie7YQeSQHJ5M5XVlfFFpQXe6U1vh85G0A8dkxZ9s99' 536 | b'+Fyxsevwm+LmLSGAl8q4eCePlUCCBEQEIGdBqWRiYv8Nx/6KmDyMs6SX3w2s9eU/Hhe5vka3' 537 | b'4qsGZ45Va0VkYTTxcH66eey+KiybLbnrtT+aJ8PlS594+qlnDx1OozSrCidcpUbHkYYwHt3l' 538 | b'geu33/ptOp0qBj202b6994NVzHz1H12lQXnQgRqvfcO3ip70Fe3ef8v51fP16QVAed3rXu99' 539 | b'MNpYa7WOiMj7sKMS5n820JXQbIwQQhDwTGcTHtjEObOVbyrsr0v/og77b7nzu3NLXFsANkBB' 540 | b'AzIkFChoDyCsDWtdR0YTjaWcXvrnCePEOQAgGOC6DsJxjXkPqCqEFRUv1ugWwQz1DQVU5q/U' 541 | b'k3rlMOJtSic5AG18dmPlVN+ujHSp1UhfLEw2YVU+PP0+HpxJpm9Np18PsUJ9g0cO7GyhyN1X' 542 | b'lcakkcXtkE0Mq4uJURVkNgoxMPuE6KXOnNkRr7hEsne5VlkAFwJCiPPSVVZqmYShUyZ69rGf' 543 | b'6mx++aZbfhq1W3r+6dnDu9uHblq++BEdZ8m+e0BT5/wHVlY+u/eW9zR33bR24UumdiDd+026' 544 | b'ubfGLaT2iHKzw8DRbXs6rDxYjLaDmUjcUEaDwimCKs72Gt7VHa46TExtPxqvsOSAV3JIX43g' 545 | b'g4hnQiItgOCBODVx+yvv3a/mQ1xR4b+SgSWlFOKY3vG1MIz+Aq48by/j+Yd+sbUrOfqWf1vL' 546 | b'Erf2Jwdf9UPJ4bcfWHyHjqDWnAbQxKSYAUMIgYAdBSZ0PqrVdwPEFBdeQPEsodBlnf/LZnQs' 547 | b'rgaoQRJi7ckAqiRt1iemWu3D3tk4To2OvA/Memx8mf+uWSu44qte3t4QfBAnEtZPfyCt7/Hx' 548 | b'8bKzWvae97bTW3kiVVn79p9KJo6oZFYUeLQomoQxACqSEAQEmZWJADAICl6Rz3wJ8IACVwuj' 549 | b'oIEypKZQRCIOPSS3AdSIFoDbOQ/iHVphXmkkIfHVht8+2V96//rZD6r8HHbC1vYZFJNMTKt6' 550 | b'HGW7a/WbVXN3qE+gbiqKShgojESKqrxwaf3RidYJxZoDl1trcbzHgwmoGLwCDVReK9/oFfew' 551 | b'FBcAiQ8aYGiUySgVB8Pyc1knz6N7s8XX3H/DP/fxHnVq7ksPPrH3tvv33vpd049MB1kNxVac' 552 | b'pBTl+4/+s2T3u4yDqbmnXexGVGKZZTpjAt752CtdT6NdJr4npH7Yf2+IBhU0aHCpbN928PCP' 553 | b'zKtKVNfJBAiAh3HW+EVBxD74IIIYmGk8VTyI4it28qtNjwhgEEGRsT4ZIurLD9iXEgj9RaOG' 554 | b'V8v/M8deP3/4pj7vntr9LXLs19HEedWNYWpiagFElZVVWhOSAAYvrC8vwYy21MhBKWOMzgtI' 555 | b'zFXqU7hqrRARxZlIldaQAkTQ8eSx4/d7ACWx9xKCD0GUohBCCOFr5CL8beKrZgIg4jgbP7fr' 556 | b'W11WMLbz5U8NNtcbh7/Tc+25R37b9P+rieZhVJEAAjD4cYSbAyRegICCB2L23iOrl26trhT6' 557 | b'IAiICCEQAQFCkAK4RXTYoQ4EQlqxMa/8edwJlkDrGcimGkfu1q2l3uM/76sHTU2E6hSCxizb' 558 | b'fdfE4e8DSoPLERIQkJJJa4WFs/3e1heq1u2mtu/iIz/JrZuztMU0SSYHRY6EJNA18rBe+Q1y' 559 | b'ExVtKVUr87C08sezteM6ubWz8mixvmJqexem3zrofn51eHZ2/vb2/iOLR94ZNB6+44er/hkh' 560 | b'dFVVb71Zp/s2cj+FPL/323vc0WAByGFA0kkV7+RBx9jG6eMaJly5ud0rpxZvaUfHR6dlGD8r' 561 | b'GjouIPfrGHFIrFBF3Qx2HK5LaIKUYxlrVgYAxP9V1kdErp6UK/zGa3awm4tv6XNWFJcm4vn4' 562 | b'2PdA48AE13xVuNJrJVorHwISIrDWHEJQJN4LMzCBc95VCWuItYUrXfhf7e2F0gUVRVEII5TA' 563 | b'ka7syCiPyMzIrL2/zCdQSv3dtFlfiXGGX0S8nrHQU+JG/XXV3NU8+LbpvbdLmB4OL9SzqcjM' 564 | b'BAAEJTSefeYAgEkRgrWWmADk5VgrABCFKAgQMIg4AQrICMhSAacaZgO4AEHQAkYxZNf4+r9m' 565 | b'VH6gudZRqyqaas3XnnnwMzY/pfnmrKG1mieTedgK7jypY2QVIIQwlGJl0H2+oQF6eVyV3Ysf' 566 | b'KVxnsPTQwoG3F9lkFgJYAMUVCPlrZopfeYMlEGgkoAy2io3iuRd+b675qHPPrWwOJvSf5IOt' 567 | b'5d7HF+/5ZZ3Fd37jN8UN7e2GqIybB4WGAEB6H6CbkhxCxPVFAyMKopUuZYhguTSwwzRwsSog' 568 | b'VGoo1RrXDmVT38rxQjaaGC79qUz16q0G4iJbAgeoAXlHazVOXDBGAM4HB2gBkFh2KtMiQBDB' 569 | b'K6nlcWAoL2tcEvxFntE4CjMxj5yfNolAxVPfXlVgQLlIKc/EDABAGEJgYhgPywTPGImUSFqw' 570 | b'0FSXEJiLK0S+cOUnXRmnxiM/JG1cXppEC0CelyZGz7G1No4NQAjhGj0uXwH85QcJIQuGZd7a' 571 | b'DW2oJKR3Nub3FBCci/be+dN5cSHSk+BJxJEKyAQAQaIQhMdcsav7DxBeuqTvlSgyEKAgCgiC' 572 | b'RwDyDSBAMgZcQK1UDQKgqFd+FvuLI5Ia+EGq502J64/+zjA/f8Nd/1K6ca98wBx6Q9K+jatT' 573 | b'fuskTO4ZJTHRMK18GkG3/+R2v2/73YTKqv/E5tapRvt12dRdfYTAFQkDEAOQ52tlaV75MV8q' 574 | b'D5DZUESUtixsLL1vc+UjRbejsRhuPDLcXNoz953tfe/wNJqePV66Va1mBAeISeEwiNJM4Dso' 575 | b'LSeemEgpCMyeShtEg1YM9OJdHYQIEqN4ZShpzJl4F7Dmmplu3YjNjFCPhkMChSyo+yDAOwxu' 576 | b'dKESAMIxvyYEERCSQDt6Fjh2sQQRxrerXPn1S8LV0AYvDzm9/JqC9l60Db2qF5u5mOKed8Jb' 577 | b'EdWtc847RiTkcSaNCEWEUHkpASLBnDEGdt6HMY1oPD71ygtERLBIMTsIEdVAsAKndawoIkYA' 578 | b'CSEopfBKi8zXzlD/W0S4unlXtg4RgCkxZfCqyib2mvioUhhrXzEkqg3IIQiIIhLBCgGCaBB/' 579 | b'NSq/+jME/1KvFzGIhMsT+i6X/AAAUTBgAAQMyKIAMEAI3tN/prTgSqdcee6jOm0mSe3cF36r' 580 | b'E9Zvfdtv1uYWttc/mR28v7nrbUm0h3Qc0oUSAaE03ECYELdS9jdD2CYx7DNweqR6fvD0YO3L' 581 | b'hc9VNgFgKLDg19h89dfjFd+d4Cm42FsdivXO1uN2sKT9EPKerD9vO4N1PL+iL1XVSaNrG8N1' 582 | b'ZeYG4CEkJC5jnbJCVwrGOTunTIAhgAgpH4ZZiiJpkB3ZaCVuEpVK4nzU4toJ51yoOpWp99tz' 583 | b'XRk4AJNFkORWW/Riqh2rfsQi4p0XEJCgJTCi4h2s5FXglUMTwAdxAi+eI/uqhMtfWOHFFWbF' 584 | b'YscYB6oW12aj0IEBAJc1qYsAoTLajE/UeGEBIYq8ADGHAIp1Ya0Xy5yJwHimvHyFNUREEe0A' 585 | b'HCAIQCAkFQChgqoqlCKlyHsLV6qW4zrj3zFc9RnH23u5vy8ru2JcX8U6aROtI+SQ16LgCyoc' 586 | b'DjwVxADAAh7AE4BiRPlzi4yIcNnnemkQ8OMCiPjLs7EgkHgStp5KAA1iglSCuacB7Tg/9BXH' 587 | b'fD1f/9jHP/O+n1u++JAa7TGbzaXzTxWgGnom7p0xg4Ho6bK+HwCaha31GyNYGeX9KlgviY6b' 588 | b'EiYLn3M8SkspH/5d89gHZaUjusFkCEX08Fp9TtzxzFgABYJgoQxQETBLTJ5A5Th0VtcrA7EM' 589 | b'OKRBCBhIAECAPAA4FwILoXioIojyztKlp97bffRPqs3VZHpiiJp4SyjUhi3LRVmWLdXSe+9r' 590 | b'3vsTtZkjMURXCmzWiSWJCRVgCGE8u71EHHdX6fEz/qqPjuN8twAAhADIL35dfzOy4nX8/cZV' 591 | b'ssjLo9d/PcCDQHDBEilihgA+OATHHC899qcf+r1fb8YhyYYqpkYzAnuW9uy+91W/5pIFb3oa' 592 | b'AkqKISnsljYXh5vnfLUOQ+bcjkbPsApFJ3HDC5PHf0AfefVIirprGMAQRhKZaxUT7riKKAHA' 593 | b'EEBhRMgAHtAC+KFNMw3al7bqVwY5JCQAqltZpY0a60ggshZEBLFc5GXS2rfrrn+hJ9/KWx/f' 594 | b'Pv9+3fGk9okbSq1mTbc2e2/UvKux61aTzMVeBxyh1JAdQE7IhAQQnLVXhn4zCIugjL1q9GFc' 595 | b'lRcYzy0OAjCetX1Ntuc6ruPrC9Y5bZRmHUIoi4I4aOURHbjYTibt2Uytj5yaiiAU3ZFvHT26' 596 | b'8M1Q21MhOt8CRhWsrYZxEoE9kTXmudjsFp/HxhoGbYveUC0FvDjMn5qzt2tdB+4CGgjkYMDw' 597 | b'4q1vLxU7GqyAfQJNqNBp8EqEAR0SWd0JEpHWBsgOt8reVn3qUIAGGSvAAfiytiEAeNCC2tQ8' 598 | b'rDtjasfeKMuBVh9IsjzXHFMqERlVn1385taBHwgM7AYgiphBALwKoYVjmSMEVi6ARzAI5oqk' 599 | b'CAA6gICgL8c/EAAAaTy245oxa6/j6wz/QB2rK1BG+eDH8qNxbADKbmflhXMnw8kHNi+tQLW2' 600 | b'Tdgo94/8SEVV1E26Tz7Yk5n64mFMDoJH4L7T7KCpBCRqgK28L33aEJWCG9TaN4mZXul8Ui5k' 601 | b'8wvvEW55KpkiI698a44ASAAUHGvXIiNqFuZq81kcnFLZIZTEX3xga+nBaO6GUukElAT2DhCB' 602 | b'CAAsSAk6iGLr+uRr9WAuPPcH4Fbm5u6RrGnUpKndzsShENM8AoDacak0ow7YCWBRItIWMPcB' 603 | b'ESMvAqIQ1Lj6RhhEAgiO+yGI8Epf+7hRQv4W0nPX8fcOL4O4+/WGywRYAqHghQgVB2cL6J3X' 604 | b'vWVUxpsW+MEAqlInbRisr108c+HkZnFqemaP1rMAUQCw5HXAHm+GfF2HCrI7wYvNn52c/8HJ' 605 | b'fd/hgzCn9ewwauWoQHQk14zpvqMbwi4KAgEcKyuEAagCb6WK+9HJz/2bPXduTC6+6+IzH+h6' 606 | b'nomm+8MltGUUtzTXfVCBBHDMg2Yrm4bnsQAozydJ1jjxXzdbd/il38Iyn9r9Y2AvbHc+HdEF' 607 | b'oxpA8YC3GDIvWyL9BPeB1DyeK2Fgwi0ak8v5YRQEJxAQFAgHEWYEwBACAIxTpGPm0XVcx1W8' 608 | b'aFPUy5s09fccHkAQCBDL0qOw0u29e24a7XvN8MyHOg/8r9Peb/sWUlX0t/v1PQfeeteBY9/i' 609 | b'U41qYli6CAujUgNBHItmwVravitKdlmuikGs6m1Xi3fv/0cQBMxACAgMggt2SNG1oZjtHDdh' 610 | b'IGUBrIPgfASgFJNGzXuP1p+ae+HkL69uPFyjKOVsdPHj7U55kUa799yEcQoOXOCxAJYPYKjh' 611 | b'AUj3XcXzx7+7olkvYGoHbLIME02hidr0ojgGZbx3GpSGiOxs6c842FblLZ7WUW0puQd0TqBC' 612 | b'IAEn5AhoTHAh8GNNj7/QdPrXVfGu4x8aXtQw/cOzVoCAwTshYYrSVEMAqaAog6je8OLHSZ82' 613 | b'9cMzrlbZFZ5IVs5c2l/uT5L9I+g5V2QmC3mtrDynq0otJKBA7QIVBYKotj+dfENIbN+90Iz2' 614 | b's1gAh6GOAsh47eSwdg4Jndsg9gIikDBEhoDDkOya12x7/XLz6apa4nReaye9R6m/HmZONJu7' 615 | b'kBveKWYgFPHAgkAjkRKZfDQVqDa0S2glTXap+h5FaV+6wi3xJogFjFJkKJB8EdyXvH0C7TaE' 616 | b'DRRmf8LDIygVYYQQXxFjRARCqryvgngmQJQQQoBAeK06Aa7jOr6uIJ6IxgUqkXEWhVFHRq3+' 617 | b'max8YOLY27P9bw2dT0Ga7LntB2zn/Pba+WOL9+usQcGRCMVCpDzFzBYBUWJACVIg1Ey0j0yS' 618 | b'0jSgrUKuqYGAwZfIQ4ACr1GP5M60hgABwQYgBE0A1crq+Y9fOPdZ7Zd0iNsuAcOdSVAS19wk' 619 | b'zi3OLn47QN1VFAC0AQm9UFUqykASKACSkUMc9XxDZ0BYmE2H9VpuIIJKegayIIxqVG39rlNJ' 620 | b'ZkwYbVX5VmTYU3DgOIpHthXr/VF8I/AsAPjgBSwBCuZFUSBQnGYInJcVCCZxcj3pfh3X8SK4' 621 | b'TFcaa/8qBPbBig8inyp7e6l9g6HOh37jHccO3n/kDT/bG9hHP/UbB4+8c+rgNBL7QpIIRXQg' 622 | b'IPFSMsXBg2WIysqxUWJBuwKiKAgiQ4BlqGqkmn0LjWvkZO2cdA9ABEyAAIKCTKCjwK0wPO2h' 623 | b'G2XTAVSdm4bbIRViY2xMPuVMleQBWRyMOmdjIDBxl7qBR5hzmiY52cKspDKnBYPpBJdojIT7' 624 | b'RHGRV95gtvlHdnSeyy2GPEQRhURGpUIhcyTKvqEqGxZKxQpcGXzBWEPFq+ff5899ub5wb9dJ' 625 | b'uf7hpOmwXAA9KgMGJA+595ZFA4CgxR0m2V7HdXxdIcBAhgYFClWpHkCgXFfKsjhgKnKrdZKP' 626 | b'rGZFAoRYwdGo7iObUqA+rs4evlvz0SjR+w/fQzqKk4qh1FhzObDOCSUEYIMwdMFEIxilgkg5' 627 | b'o3HKEylECBYIGqQNQjAU4Eo77Tj0ET9u73rJDZo7GiykIGADFIBeQkDRkZmcqO+fSe8pB6us' 628 | b'ysRMGtpDRnHmQWaqaNmh4wgJUGPMsD3qnYZyW8cH47zYWHkgivcPUZRWmbRD3meIvUqGvK3I' 629 | b'ShFIea1jo+bz5uscncLqkgooxYaFDY4s55Wr302syRilQHAUJGiTBO6Sqw3WT5XnP9HIt03/' 630 | b'yc7yl6VxPG3MkI3QEiEoAkUGAF0AB5XaQY7mOq7j6wmCA0BQLgUFDoMt+pq8KLRWSGmttfMu' 631 | b'igwgOm9ZaSBUWKGkAEqbMDGxaPSkcOlsiDONoPKytFUZJam1Bkgx5/0SIoqcKg1EMAKv46Ic' 632 | b'GU2IJACCAUnwsrQOCNC4qfIycZcIAK9qMH3t+CvipiDixz10QUhEIQKIXt/+s6HfasTKkRt3' 633 | b'SSV6tp68GerNypfoh7baEN9n6Uq10sm3XcS985+wVSeuf4+pUTFagniO46wqumSaGkFJwyNU' 634 | b'UmhRUFxKRk/brcd8GOisxq6UagK0+HJbDf5dXr0pm3nPSJrMEVVnn/3S7/vh81PNe7vlya5/' 635 | b'qHPuhXo27XlyCqcwFFCus5oHiMWzFwdgWAHAtcv+Xcd1/B2GDTUNASroqWVvsoar2/K0jaaj' 636 | b'aE4kOF9570Nw1gszCwBDhRAJQXAwPftqAAABkqrSgoAs9dS0S9oqXF5YSKMeS4KIwIHAWL+m' 637 | b'OQhmJkEENZYAIwaAq/xtgqu+1Vi6AhEQJLxkDYwdPSxy59DxAAAgAElEQVTvHFGEoEUUAhOD' 638 | b'tRubvdPrnQem2q9pNW8c+ktxPeG05bRLG3MSzSJFiko3Whl2n/XFBam20Zdr3Y+N7NbCvu/j' 639 | b'2jTrXLvprjtdRg1lMlOdD1ufRp0MIgyoolJV+Z+p9Z8KHrU6GFxBJZFTuc+hfo8pXqWyoiTw' 640 | b'POEBEp5qAzz8xZ+X5z9Qbi1pBhe0G4kqN8utx86d+o8r+SVt6lGyQIzIHskDoA/C107p5Tqu' 641 | b'4+8sBCuuAjBrlQaBzTN/uvzcgwuLb+1315MksmWZxLFixayQiJBYBJAFgxVA0hIUgCMSwRqA' 642 | b'FccYSGsVoEzjuBwJGQX5s5tn/69a47UVhchOWdwkP8U8VqQQAAoiAoxIgJerYGOPimiscHlF' 643 | b'humlYMfTS2zGrTnBgwgAWjJBx3jk6I/O7H9PPHGjjVumeXNr5ptN7VDHnxnJFnAB0E70LIWh' 644 | b'Ly6g66IbHd2ab1lfjLatPdVZO+vKYvv87zbXHiMAv37Krz/FSBG0shCDAKbSn/iFcu/v0/Rd' 645 | b'+eip3KxA9rjLT+rG7fnet5XZ98fpPTUtNeWExbbvfMv3ng4TdRoVsKH1sG/6I9Xpdy59Pm4f' 646 | b'OXL8/sm5A6BdhaX1hbOCQuZ68fA6/mFAAeXDp/qX/m8qtmohXXvho0vPfgwGw2aDP/+RDz71' 647 | b'8ENgnas8Cmgkm+eISgIDlFoVlQ0hjBXdIhZgn2hdEHgI2pVFGHWy0MxdVi2/cO7zv+O6FzU3' 648 | b'IAAOLUkhnoIHAQJA7zj4sXHycLmRM4wNVAjh5Ul97BgSIoDzFXKlGAU4CDG2W40JDNr7IImP' 649 | b'Gns97wGeqMf3DItuzG3n1n256YaXxJbgasENq+Li+ZDmI7/26C9QuJhOvCk98TNEcuqJX2rv' 650 | b'fo1bX1eGsyFI5/wwfyyuL0j7NUrNB7UFyxMOVmXmB6F6Yzr8Puqccsm9SVSMBhKZhsUBoTM1' 651 | b'd/LJ38xbt03Icl5UA3dRSW5CBkofOPwtBDdLoEHVUbGPuUYSiYcAFav45d8F13Edf0/gChVH' 652 | b'9WeefZ87+8Ds1NsHF/s0qH3x07+2urR56vnlf/RDPwqK7chjkDgySaRAIIQAIEwAMlS6joDO' 653 | b'ATGAd0AAxCFAZS89+dQf3bDrRH3vd6/1vkijLS5XfA6PPvFv4uaBY8f/pbcQEIgRQImIIgBx' 654 | b'oeqyaVyZjaDGHehj5aWX6kHsrIeFEMQyAQIBKAkagQHZO3ChZ0xT6TpxRKyQrFFTEFxRPtnt' 655 | b'P5HnF4LtSoVi0VZb7PXADeNdN8/e+q/aJ37QRDOq92zn1CNu9LlO/1Luuq73pbWL76t4TbUO' 656 | b'R/GNUWnZZzD8jxTNyuy/0OkhrmY9Potwr5FUR4XnDqu2q1aXnvnVsP3JMGi1uaPTmqE0oBu4' 657 | b'Pg6WNze+NL33TSquiWMANKydI2YkppcrpXcd1/H3CaUd6njOFOXJR37/0oWH+5ecy7MXLqx0' 658 | b'15+7//X3H7rnNdud3NRa2rCtchYLrAECBk0YQXDMJMBWKqaKWEFQ/WEZlKqnONz+0tILfzDY' 659 | b'+GjwSaM+szV6cn3tMwbLfYf/Cx21EVQQR0wAJB4VA0Bv2D8vlDABEXnvxrJiY3b3tTNYEIg0' 660 | b'gnZWB8dKIVCwvs+qVAow1MpRnGV1Il3kI61S8RSbubq+taHnfbiUD89XeU9CCdV5Kbp1va+Z' 661 | b'Tp76/K/kz3ywu/TxEW5HI5dTLqWnrdOIMH3kx2uTr+VqvR8npJQmrczbLS4MsZM0b8zNUciC' 662 | b'UhlKFIIgG3Eqxl27pt48u+/IqDzXC4XxzRApM3vi4K43rm8trYyenmrtTuK9ig2QFxwgsfdM' 663 | b'16PC6/gHANI0GHabONs9teRHCYR6btdA17KoaM/O6bjVmF0MrIvKx4ZIiQeviAi0lMhqPLiM' 664 | b'4f9n772DLE2vMs/nvO5z1+ZNU5VVWabLdFe1N+puSajVCEkIkAaBFoRgGYRZdnHL7C4BAzvL' 665 | b'MgwbLDssMxhpYAQMzAozyLQkQBIC2ZZa7X13VZftclnpb1732fd9z/6R1UZSF5BF7cSG6v4i' 666 | b'40ZGxr2R97sR37nnnPec5xFOcOQcCyVk4Ky0omhNTb5GrJ1v2XSV2+FkHqPV8LIzcUs8+xZr' 667 | b'lVQe5IgIkOwhhIdb668/D9Uyxgghy6r0nrUONjpOm70dLz44ummykSs0WqZcWjr2vmF/XhSJ' 668 | b'8OdQlktCyIVDe6/9oWP8bP7UPckAVTBlOY3khOZRJc+UE99y3Vv+oAiThoTjyuelVq0BDUMl' 669 | b'TRVC5yPo5Guq1wvno/ng7KGf90Ec0Pbi6KeiLd84ccfPEIZ5nkmptYoESUC8oK0+Xooe8/WK' 670 | b'Z2bQBf3YtbMfXXnuw6unVrt96UpVpTZFBrO9xauR6mmTzl7z6slrvqu9+y6GykdlkEhg3UO4' 671 | b'qq0lhENVVLrWd+jkaS8xTXiwLYjKYnB4mH1Rp6tOTJpSUaJ82ZKNs1V0XQM7kQSpuioQ3i49' 672 | b'kpXd+vY3cpqvHfl5Ia6ZuOFHu8vvXzh8eOer/icTtkwmy6g0F7dQfEUu3zi4c4FsgYfzS59O' 673 | b'rZ3acreqRseffXDu6v95aseO4qlHF9bP3vimf9vf9oNPf+5nVLZgBNb9GRVOCrsdZx94+H0H' 674 | b'r7rzrfG+X1ATO1U09JwlJH0ZQpC1LlQXHUfI7aF644ao8wapW4Ny6BLpMDQuNoYFqY1o9YJX' 675 | b'3ZgxVwgksce3bq/Oniq6Z6BcURotTKitr7GZ2Tu373Wt2TvaW3cy8nRok7jlK0DFkjwEhKgA' 676 | b'6EAzT6y5xXo84+AJWVYuDboPU3G6IRrlZMsxaTqbDqcb7TDLaymdNF6XYqreBEoEoVo6+cly' 677 | b'5bM2b47yBeHPVV94qnfuvsm5t9fCJMtG4LZ3vNk57ssWsBg1X0LKKK5t7XRuDKKDWH/Su49E' 678 | b'aqqs72vctrtavc/7uL/2TCLTSd1aqQcTuU0zqHYQTk9PJDsLMbk0GmxtkNeisOuR7BCDBbwv' 679 | b'zcUXkULTCSZey819pUCw/VucGgEeVa7CjcgtNuwV8JXi6GPGfH3CYiPJanVuVttnDhykL/3u' 680 | b'/3144Zkw7ExE1vPQi9XOtpt33/qOXtlet4OmqinB3q+y7wDOWSnYsrCWCqVb8DQlBTyKkil0' 681 | b'ptasBweN22J7WW1wtkcOqu0ys5Y/OhncGjVeP1KuoRsONjWVkTcHrRMrz74vYOtkasu8KA5Z' 682 | b'CpKtt1koKx0AXepNJliXMcOSXXBNCt1q3lySHvnKF712p0XbWoB97sgftX1YpJ+x3S8lk29S' 683 | b'jQm1+PRUSCO3NJB6z2t/2uvXqJg9BFcAJkNdodAiqEp2Uimw+Nru3AUrBLWXkjKlrIJIkv2h' 684 | b'lg4KsmSWGyMel6/mHTPm/88IIs/MYAHAAw4T8ycfO3z6qJ6dJZtadyqZ2aWL9vmTn9q+77pG' 685 | b'5/sK1/CqMrEmbrAoPBXMLanIO+OU9RgaSlA04RBoaWEqRiyvJaoWB++tn366n5i0UiVyb495' 686 | b'f7JTvwlTOwfDlbiWRCiYB2EwqqpVkcM6UUpZWBI0PPn535AP/EF89Z3Y80P1+tRmL/KyBSzv' 687 | b'A6VyeA1uOhoEOramGcbBysoTzf6KPPfXydyPiPZNc509or5zYfjF2uhJ0/mG+oGp9NTHi7Uz' 688 | b'jVlVFIU2/QL1iA0wgmx5ts5qqdWGfPvXzpgRUQYXaRMSNPpaxRDSw7FMmDem1L4qWo0bWGO+' 689 | b'jhF0oYeF3GcB4s98+d6JvVd98/f9i8P3/9mxhx5+1V0/M7XlzpPHfiNfPd9MBo5MKcuQtCHN' 690 | b'lFkIJSSqJSGmCxdKybokG5qy9IERjIIqTxVGZ+9fe/5jw+TOIIn7Z/4yTPa3p99+9KE/6Qe/' 691 | b'urf9m7Y2aUdLzz/170cn/jZbPReEcekC5pVSJyQC6/u2OJEE++OgsOp5yBo2mWJdNpsvV2hS' 692 | b'gXOQvufdkpEtDEbF8BFx/hSvd9PsjOvc0pm7SqYro+x4wDPQy/U932UmX6NrajComtPXW668' 693 | b'YzJk146tLHym1jpQAiEZ4dnShcO9r41ZuVgxlAiG9BU4BIhRsZACJMSGwuSGS+CGl8wVKNg2' 694 | b'5origvSuMnp9qb+t03zVN38rRdtroV5ZP7XtwPeUk7unt94aB/tFXekgFWJCMYhTorhgoVkt' 695 | b'nf1ELZopqBZLKXMm09dSCZTWulC14Hur3YeTcHr29p9UduLY539jbscPt2/58amtbx2Uzwk/' 696 | b'oxqRdLqBJKE5GeguPW1FEdN2oYd1GUlZn7nth3e++TeT6dfVTb0sI7VJJ6LLlmFJhQq5UL7I' 697 | b'53tLT6XpfdoNI8WqMXmuf6TZ3IHuA4c+8qcuzzu3vWPL9F126geCoDVMBxOTb01aOLl0rl7L' 698 | b'J6M9DsX5kw+srHxyy9bvUJFEdha+J5ID4FcONDFC7wFnCd4DRFCkPIZELxqF+g1LwQv68GPG' 699 | b'XAE4x612oidvg8vykW/O3dzc9cZGMrswojCZkrWSnYIsq2KVYYIggvOhgijdcPWL7XA2mbrN' 700 | b'jhbk6tGs3JE05yC0RGAZQ+fN1js6ze+yQKt+1daZa+qdiWUebelsiQe7wgkrOXLemR13hHOv' 701 | b'b2Xv6t/7g6Y849KpejSjpYn6XdNd1UXhfYOEKTe/3HvZMiyiPPVOiiRwnURZto+yn/fD9tAP' 702 | b'1WSXBo08XdLJxOxN31vf/S5Ba8JsUfBGK6aCS5r0xQf+489rP6hPXX36/o9l609NzH1PZVaW' 703 | b'T95D7qyo75MU4hV9fblkF0gpvBKFzLyQGpK8gWBm/+IpL0FckQKTY65QSDgnK8dakA6CKiM1' 704 | b'vW1HKExTQREgyXoYMkbGSpe90UKVntaRt73R+tKfoGqHrS3Hj/7V0pE/ax14t9ahraRUxGIo' 705 | b'VVAPpsHsmFjUlD3UE3l9ao84/enR/N9OTN5dGRVQPS+6ZdhfPXevPf7YtvruYOZ6X3i795aJ' 706 | b'3QeHo/NVFIXRVQqMMFV4Zef2i17X5epJW8BXzmgLF6AEZ493Fz+BbChcbZSfDjmGS9d4277X' 707 | b'/QzrkAeFCIJSOWYyMh25PJHN++75d8//7Z/L627r9PpF5LfMTU/a+0dS7XnjH5tgn3ih1PXe' 708 | b'E8lx7Bkz5h/Jy+9x8hvf3RaAB7P3zJ5g7dn35wNNkeguHhoWvimXi3PH2jf/XG3v3ewTZZRD' 709 | b'ATgDU2ZD59d7CW3JZ6qFj55bfzKSdQzOlnrr7M0/VKotCpmwsaTl5w7/P532NZNTr1/KDq8f' 710 | b'+8D2nd8dd24ZFUsu6zaiWZh6SqMYm9N6v2wZFqMirwQpIE+Lw4PhI7Y4r7wc2nVlkkGZo54P' 711 | b'i2Oj1ceTUKjGfqaRIiNlkZWJ4EjDT9eue+zUSbO6wNWaqPF6byUbyrnbftDsfKPVQnmHl3Kk' 712 | b'C64n3vtx5BozZhNQClQbcYugBSlBWgg9z+uKRra3QmnqIh7SmnfB9L5vD2ozig1AZSXgpBKK' 713 | b'3Crbs9XpPzcrR23Wz5A5WkNZ+SJgm/LCkf7aU7WoSWK2Xj9QC/ewDRKjJaVx/RoyTaGcElJS' 714 | b'C0KAIDc5iHX5mu6+JEh25LmXViedzQKqs3c+sEh1GLLTW+P4Rs2iOxiY9hYRRHBD4RrwnC18' 715 | b'afT0Z048+ZGlwaMtNTHMV9mLSDm2rhVvmWzUq6GHCWjDz4voxYCFcZk3ZsymoBIEhmQIgmTn' 716 | b'2WXWDtTQBuXpMnNKIqd5LkMzsOeX/+b0sfePumeScCpKEq88hIZuCDWbuHBtdMzbKmRt7CDw' 717 | b'YZWud9c+u9o/1G7clEzeWiI3MQtdBxMpH4VNUtNOGoKXIiRnPADpxCYD1uWbw/KRUgXAnlXC' 718 | b'+4y5BXawMv+XJS9ONabXV8+GrWsnr/5BEFgVECJzWjFpB/bHTs9/dP3wqe6Z87va9fMjjuvb' 719 | b'bb/Zz7K4Xj7yuY8ePfrhbTe+efer/pX3/oWA9cKHP45WY8b8Q1yYWLxADS+dPXnHw6rqWtsP' 720 | b'RsesHxWRCysbdyNha0L6UWqntuxqNa+J4jnIxPvCwxlIAD6cKWLhZWWyMk9XnA+l6UyKW8Pr' 721 | b'31lrXZvllTaaXQ2AlVbJBonIO2ltpRQTGQa8B8Ft9lou3ykhAbDMnjhSsgkCoAuimda7wmD3' 722 | b'gO4ZZsOOXxlGRoBFMQhNRLLjBBux79pX/3J1S390/PiDn/jfJiNeG8zrRjHMVjM3ees3/cTU' 723 | b'rtl48kYhxEa02pD9ulxve8yYK4EXv9o9A8S4oKYulFIEI2VQdLb7QWCL45zZhGdWxNEsmd+3' 724 | b'72fjXa/zLDNmj1RTZBzBrfveU8XK5wO3XjGlIizMtrLMheuKYr1TVGBlQgGqvIUQULq0rDU0' 725 | b'CQhRCXgA0BAM2vzmyWUbpCThnBWuCpkNk7OUVViImjNhe2/R6sQHXx/O7iBkdcRU1iK53RUT' 726 | b'DnBy1fF6VUUqmBmUz3WSvuaFqXYTTLUw8eVAT09O7rs7Tqa01vIFc1TeENQZT7GPGbNJBGWE' 727 | b'jJF7tswAx1JOGbO9Xjvg09xUgSJdBOtFrble+LWFPx1mNU8RiVCQJTFwfq1IT62mZ3xjXyN6' 728 | b'jcgqZEs1H9StCdhkonfmsV9ZevIT0onS5SWNWHgCS7fKAkLCkBDQDEBASH8JCdNlHGuoiEOp' 729 | b'JAmQAMk+ySyJ9gyqttSirOJavF3pKZfKIHDOOgoV+wE5rSBUqWj0+JMP/9Ls5HS09428fLq0' 730 | b'2dbrXrt07uzSqRM33fBWQRqaX9a3upBqjQdBx4zZLPSC8QN7AaYNwTsMH8tWjpvmXhL5MF1o' 731 | b'b31nU94yWPhCGcWtqK1FXSMABZYjGW6JW9dnjb0hd9L+QyEUl718eGxm5run9/9UpzZRChPW' 732 | b'k8o2Qh25ggBIWWdyBAACXnkwyDEIXm/29r1sJaHzgPdS+qKoWERah9Y3ZTllYiv78y01W4po' 733 | b'XQxqiaj8UJkZhxJZXSdZVkahRMHHb/iGH6tPfP+6Qfbog7vmmrvf+os3v7Z85J5fXV560u3d' 734 | b'Ou1nX/rEaUMr5jJq44wZc2VQaUiQAJFnSWD2qIh5TVbJ9v9GdGayeaZzi43GrmBuZ2fv7Suj' 735 | b'x0Wo4Lx1ldKCyTKVTKnC1jI/U2DYmfvviqJYPPnrtYaIJmPqvL5Nk1WFRK8DS6QioTq5g5EO' 736 | b'TPAagCDpUIlLqu82f88XQJW6GveRaO9qzFyqYdQzXNMsBZVg2vhQWI4IEUh47wFs6De//He8' 737 | b'qGn1QroEQFj70BM/n4QHDu7+ESQjbwf5aDKuK1j0AyeRJlkCKazpKbau7Fify8i5PAk0Cjns' 738 | b'unJGGhrUUN/8hzFmzJWKraAUbNGVIjty9Ok9+65VZsK5UApKCZEDVb4I2FdppMIUOvaD5RNP' 739 | b'6aTXnPkGUurIk78f17Zuu+rteb6iwy0OllEENiGgwpBlzVAFSF8KBqRZASL2CURG/1/rYdnA' 740 | b'QxrhbFLBSAk99FpJmMBKlpZd5SrDIZgyAZ17UaOvOMv7Ktn5r5pOYGaw2bb9NfXaLgTwlknH' 741 | b'JlFelMJ6kjJQiTflsBQJN1F5GfQlNyo7lAGcrwK3vkVsXx9VRg/iccQaM+YfzUZ/WOkAUkzN' 742 | b'zCkdAoKI0rzy4dBLI0WiCF4GEF5wdyAb5qp9kapliIx3W2ffrLWpBiqINHtAWI2CZIISECwp' 743 | b'AzQjJxULAYbeODe7BHv2TWdYvRKBQYBV8m32oqCMEKHoCVNkCgmEHQquTQhbGWddIOQL20Iv' 744 | b'E6V6ZTae4C1ZOh+oxLtGXo2iMACU41SxZqFt4XXgSsCnNjSmS92abOjesAglAh+st2HQj7MA' 745 | b'0diAcMyYfzwMOGuVJJCFL5gkUeC8YgGFYQk4V1XpuVDNmmDCpUVZPCfrDal2uWpolIAMgVVb' 746 | b'SiUnIOA4JxLCG1g4mQkVEIRFX8AQDFB6D4GQhN9sXbjpKrLpEFaVzQiFs36BZDfAij35AUpX' 747 | b'DaaLfrUw/8kMT0jRg/O+fGlR6MWiDy8Uhl/Fhc6UgsAMo+apUjIEFHsrIDMhrAdswaXUwMr8' 748 | b'x/PevZGcdGyK7n8W6ccBh3qaqYEH67LY7HWNGXMlw6ggyLP01kDUGNpDCoGydCgSY2vwbrTy' 749 | b'YDl8ElUmhicXTrxXFKkoYaRBpUelGLJSegJUAJAiZC8ZgGYhQ++F9/BO8QW/QoNLNQjdfNNd' 750 | b'F1al0DU4XaBFCA3j7PrjrXNL7YMj457Tg6dDe7egSQg7MtR84SDv7ykMX4SICJVn7awV0ioV' 751 | b'wYM9CaUVbF5yPRGVFdnI5r3jTz/74dtef7BwC8ef/ItdN/5IoSeFhgkKCyfcJoVXx4y5smF4' 752 | b'KTQ8PMh7EsI49kSkUCHvItwakVldXVhcfGI1ujdbfrYXxLuSgykhpKGUE5IgEcAVlVwiNykQ' 753 | b'CVl4jICYOBHkAKk4ZvZMTBAQArDgC0b2/3g2HbBGyjiUVDhFXvoTASbIN1R9Ol35aO/QQ+S6' 754 | b'tfjqKPPWzvfzZ8rWtmZ4YGPj76uKwRezra8pEq1SGxLsktmClRACTJpzNo2B7UaqFsuoHe06' 755 | b'fuTPjtlfy8Xi+lK568Yt7ZiRdm2RB40a1EUllceMGfO1OOekBANSwjovBODZE2wxPL/81y5d' 756 | b'a6Lj1s+58mgl/Wh9edvMm2glg1/Ik8oEsRe5EE0wEeYcD4i9oFgIUyHVAHnpcUrQTrCwXEmh' 757 | b'AXj2/zVOCbnMCBEc8rUTJ4/+1uqpexpiu4lrI3veIa6rZhiGI10OkW3d/uad+34Muu2c21gD' 758 | b'BGCtZWYp5cU2bNiXJDxgAGFtCfJKhs5CVoM00mePPxmMeqEOR/PPnXz0Y0W1YrQW9TyZvDVs' 759 | b'qNKv1Le8Zdu+fxYHLXn5lo7GjPm6x7pcioCZhIBzlZTkHDOTUlha+ej5Zz/szp8JJXye+coN' 760 | b'na3nw54fDRq8/Ybv3bv/f4mCOahqiNMR7yEuhLfOoUJmgobwXKYnCvFMPfxnYFOip1UIBM5a' 761 | b'pbDZnGnTt7UzgXN+KM9G26460Pjl+ZLOHP5gr+t12DLivIjcMKdUjGavfuuOnd8Ham+86sXB' 762 | b'9KqqnHNKKWMutLe+IloxExnrB8xKCSEUOTgHeAkS9RK9mhMP/MUHB9mzbKJATalGUPmuXZ7M' 763 | b'zj0fBevt/e+45s3/3Ik+lxWgN3tpY8ZcsShpvPUQEvBSguGlFPCyLHh68q2qNTh14ndsVPhU' 764 | b'cjFAoz9Cw6jWa2/9pcbVby8lc1H4sgiTPZaXApoGBkP7NxXTpPxe+PVe/ruWW3V9FzDtkGoQ' 765 | b'EHgnLqEjtemkTDpoaSOxvSxSJI3ZV/9cbedtGrGi1aL03XIl7R6J+1JH14+SHaiAsl9JKThF' 766 | b'tpARlenqvf/lN0JTilwIVMNcFORRAVjOsOqJQFCirqUigoDWSCSgCXBp0Gt29t/2xp/91fbt' 767 | b'36LCqFMkg3KwlNZE1O6OgmTfm6/97h8dWEiAzXigdMyYTSGEkkIAEIAES+/h2JqgOvPIB449' 768 | b'/d68WkkHw5QWyzCK5XSUlFt3/WBj77ugotTCxQHCukIeUMPyshfNpu2olV9I1/8d9x6aOv3x' 769 | b'qf4K/ERuskKWFTdyAEageoXDt7+fTa/mEIiIFclQ0XD09MkTvz/oPtiKazastV2jhmhA1dAt' 770 | b'rp//MtLliS03DFBZof1wTScd79X6sw8+/YWPzF57Y9yJhwv3Ly5/ZKJ+DbO1asIiDlFcLOkj' 771 | b'N6oC1XduQqmkf2jx9JOaqK+r6UD1F6skKBfOnI2F2bZzmx3VvFJq7PA8Zswl8tL3fff+Xzt+' 772 | b'+EOxXJBDV0c9TJoyaXHQMFFrgPOVWjT16SiYgXfwhaBoJNj6ulVSIuT1+wP/MOT9ZTkqOnfo' 773 | b'rLKr7w/z+wyu0abpacX7mtzk8dimA1ZVDCSMzT27atA/2u+enYivlzRjkWvXtqXnxsyu67+z' 774 | b'LreV2ShLgqnObW7UO/XAh84++vHOZGvh9NEjj365YSLbXXjsy7/SiJOZ7e8QHEgBRUwDieAi' 775 | b'gYYpV8NIVmfu/b0H7/sjCsPYQAZEo/VI6qBVl/XpI4cOra/1rjp4pzLjaDVmzCXz0oEYbz0Y' 776 | b'XP0dO2/98TBsL8yfqHUmS/KNcGJq27vDTscHJgx2hWpSQAjJ1sJICkafN6NHRNpFvqycEq6h' 777 | b'3FxmD8H+nRfPkfwuFbwWui+RSGk325XadNPdYyR8AgJ86dwqFaGQ7ZUzH+6eep9u32yLhWyU' 778 | b'XvvqXxHBXi6KqlGIgS3qE2713gfe/y8HqcvFjEitLCsRD6Z2t+961x8NRFs7oZUceK4Llhep' 779 | b'UjMghD935PHR6T83k1tVsOvMfX84XO9yNGtGp5p73nLgre+2qdeuQTVjRER6c1rRY8aMeQH/' 780 | b'YtPZ8tlU7gyYVp/85aXjn91/4/f0s67KFqf3/GvUQs+F9U6KUKoQEplNIzmPlYd9/knGOlc1' 781 | b'KTTJNVgg86hXPv6psvNtQF+XLHzDhbTZLtamMywLmWfOmApEHgqqKTRG9ERLHGju//54ant/' 782 | b'cLKM29zYJ0JlUYRBtoIah1HTloPnzxV9KDGhg5l6o6dpy/S2Xb5sJD4RwVpFMeGiF1ABaohG' 783 | b'PDu5/+bG1m9qJNtXnv/jZmfnzK3v7J28n0x9683fMVKdZlL3dqh0DWMVhzFjLpGXZidVfyL0' 784 | b'pPO1dOmJHXvfFGz9Xt1uVuXzwbYDEC1SIUtHsgTCwkFqctzOwhusup281VQQAJooZFsZ9m7S' 785 | b'B5Xj7dLNaLPC2vUQRpvUttt0wGII60dGGfbGek1m5ETfQ1J9Lox3h2FTmFqzsaeuW8pD5kYU' 786 | b'Ub17lI7+3dljT2TswNUo73rthaRJIU4d+e311fdPts6r4EZwHLDHRWZKNTLSvgrVysBBBKE4' 787 | b'e/b5D1x1+//Q2fPte6cne8vH2rOvCsKW9qmkppU0bmGNGXOpXNiiI6KBIWeGHAxkuC3e8oZM' 788 | b'SghdU4mLp3NXsJBCGEUhCfLkPHnjNaksEqD8lAsWKwmFq9lEloQvSPmRV5/3aGpxPUloqy9y' 789 | b'u1+UTZeEDgAPJSfWUsUwgRcY2FGzShCXgEZZevYJqycAACAASURBVGMFYFn2IYXNn5n/0vvc' 790 | b'8mNn+sVq0UbZEraRZxrNshks7Lv25r23fTuirSUOFEFRY0V0kS5cOqyict3LCSkFdK/3eJwf' 791 | b'VtNvd7bp03lKnzWtGwpMm6gi1pn1kR6bPI8Zc2m8dHjnLUP54WC9Fk4xAF045wxLTwGkc0wS' 792 | b'wpVWqEJKkVkKrBLVWVSPOP/IUF5DbqnBZaZFxDH8TugDgMzDQJi2qIQqo02a5lyizZf3pRMm' 793 | b's65OIPCSdNM28KrIWGsnjLIOyq/Dh9ACkBilo5W1E48d+fQHwmo0381d0OxggKZ57ff/G9W5' 794 | b'weX9OCwqO22oC9l+5f/pUEp4IOx1UTd9ThrsHLO0fi1CCEHD80jmPCHAMriuKNz8dY0ZMwYv' 795 | b'D1hwwntY3WeEZEdGjoDtlqBsChmWJUzg++vn8rw/vWUv+2gkLFdLiU9zvSj8rnDpMbiVlam0' 796 | b'3c/TxkETvkX5nMTAYqrgQZ2izTbdN5+GcAlmoTW4IYlIQKhpDjyxh+ZSZDkGgIPVAYIQ3niR' 797 | b'2yxOdtfKvM9fHDJNazugYqVRN1X/+F//XNhnqZs8mjZAX2oLmxW5yxkOQOVQWKBiFBJwp0MP' 798 | b'X2tXNm4wIKtKKURmAiaGimpzESEBFKbG0WrMFU6FQQVbjFI49nCMAlxWOTsMgPUhhgWAEZD6' 799 | b'AVclqnKjDmR4Lj1Kh4Lh2IEl2EJWsWGj0UbVAsMBzApOWGNzoL9275lH34Oe7wnE+bxbf9T7' 800 | b'qyBu0mpb3qCyuXtS/XCV3BJiSlWnBVUCUwaoU/0S4s8lBCwNSBBAIAFBHrCAE6TgahoNhQDW' 801 | b'wENwBas80kBNSzc8cuiP5na97eBbf2IY7W9X4eu+8xeuu+s/5vGOU2t/TLKkCLBFo6oV6TA0' 802 | b'oQzJYeB9JjmQHtYPXNEXdgfICrmoTAUGiCWPNv3+x4y5AigzUlBBHEMWBOugKqdUSNbVkdYi' 803 | b'r9lbGCAS8KSK3LuCN8Q1STEr63RVaVsJciMRVaydRc9RF8azyDnrZ7abpd3IZyaTRTc/eewB' 804 | b'139K9Vae//Q7aP2YMiSrSqSZFntNvA8KQTAn1RYpm/SSO73n/yquOQQC4AEP8MYjA8QKnoSn' 805 | b'QCgIQLEiC9KOC8Curh7af+Cfd676nrydbT1z6ORD90/s3FXb3p669j2r2VGJshAuDCPO15Io' 806 | b'AlUFmIUOEXJZVShMoKQImIajVMXhDIlRpVKNRIsBNlsEjxlzBRBHNWLHQJ4LKbXUVCmXu2Eg' 807 | b'ayAlvar8KJelIKO8F6gHcsQMXyoPSVoo6aUcQTs3aji5YoVjNRlIAGtcOqPbVRV+6C9+t93s' 808 | b'3vXqb15fOOrLxWee+PUB92Z4IGrXjyRJGZMeENvKGc4CE+4kAvCSMDIzX4L71eZNKC78D/fC' 809 | b'dJkgKLCylAMsBIiIqYLwGzPxghKJIIyRbH0Nx6lGoinpyTPX7HxboQc+UIpKlF2PqfU0CxOT' 810 | b'LR/3YotVytFKQJ4oJhgntfQlhHYcKAkmDSosepRPQ/4DuoBjxlyBMAN+HUKwCLWjyrqSylD6' 811 | b'snjeBHUmB2WdkAIazilSLEBMQgqhBAmwJ2utr1wZl2rwdNE7HDaulSx6xz5Upqv5xLZQlrOd' 812 | b'5FN/9ZuPPXRPqMokiDkdROLZoHHVzNx3c6jLNNW+LuSspJgUiAQgmIjBDA/mjeC12Tv3Elxz' 813 | b'PLN/wdpMAhJMBPIkvEild2Cy0jkYctp71xv5IJAklIVxtG7LpN7YUmscqqV116iPaJRU8ZP3' 814 | b'/frOrTuSZNt6umDwlJRTSieSanABPFgXDPhcMGXkDctuXuWBaAuCd4GQwDhgjRnzlTh2ksgS' 815 | b'5bYb2lVlmt6ZrHfmqfs+P73t2tRZpQVcHICU5BQjVLGSEsKBrGfBnjS0FGEmtVo/u774EYmo' 816 | b'7B5aPPbnoblOztxARd5sz23v1M+dfMbbLE4Swzr2JiuX/frneovvlTRKkjk4WAirpLgQMljA' 817 | b'0QXjK0EXyrVNsOkeFsODPHtiLy+8nAAGsRTQsH1UXQG9YTsmpWw0bEk5WcnDRWNbBZUuAJ8+' 818 | b'stR9T+DiBC1Zthr+/NnH3ou1Z/Xo4cI+Z6ivfaWqFbaAhIOzrqdCtbb4d+ef/7imVk1PUFpw' 819 | b'uo6ge+Fdje1zxox5OUKiiKtSLXcffPLB38HK81GFBz/xkaXjh0KZNHXdIPBlHy4DFU7VdcAg' 820 | b'5yzbUhB7pfqenh1lf9tI+5rCYf/s8hPvXXzid/LR2UbSatoiEq1nHnv481/6gtGRksn6qGuD' 821 | b'Xuaka8SV5wn55k79bRReTbouQYQ+EYi8+MqmFW8+zbgU1SiGIBIAAR5wnlPPpfCTkAruOPyI' 822 | b'+PVEBH+S0FDcWu35sB50e19MD53dve/uQk1Wi+npM89Nt893R5878cSX92/b0Rt2u4sfM/Wp' 823 | b'0gFVv7v8/hPrn2lv/9bZbe8yJjYi9DTonji7tHLfzv13wE2uL/znIKlZ88ZEjK0Jx4z5agpf' 824 | b'Ka+DSNdM66kn7veLcXvutfPPfH5u/26UpR+up/awnporXc3IUAtySCUJIZSHEgJAtrZ+ePHc' 825 | b'g2LpPxkdVsNUll2X9rMqf+rR/zO93z57bv+ZtSUlVmfDkqqwtWWmm54Ok9ZwmG7d/03NA//a' 826 | b'B2t9PqNkEtME5+cR1i/4Er4AXxie2FzOdAmT7hvF58YouQNSh57jvhaKyKD8gq2OOHG1tV2b' 827 | b'f9k6r9zuWt3ZvAyTaw7f+97zD314NX36/Nl5kcnzx/528fDRIj+WdOrR9CQnVqvtPqf+4ifP' 828 | b'nfhgO751974fXsmOHD31mSauUpFMjx09dfKexsyO+aWPLp74D7PNt+vOjfRKEsxjxlzhWPKa' 829 | b'RsMs6DRmceaZI8987tjZp6NqqWdFkZ1//tB/WOveO7v3TVrOUSWFSiubKCmISucrdlqgFsu9' 830 | b'LXmwOv+xovdcNeBBuTLM1kwphT3nCn/H3d959+t/7Ibrv6V7/jlXLHuRh3Vb2XLPgJboy2H7' 831 | b'tTrcHYiWo4EQiSlbpAmewARH2AgjxB5eYHNyDZsX8IMlD4mACQ6lh2QrnT03qh7R3pgsVbaG' 832 | b'4r+wf5CwC/E70cqqQZCK5SSMrnndjz9xz28Fjz5vq4xN0nVV7qptV3VMuGZcS5a7EQ8ZNs2X' 833 | b'G3vfufOWn/VezIitn/nsxx5eeveBW+ZG62d9Ep35wv/V9iM5N4Xdrys4S1wECSauYAkgCDAE' 834 | b'i0uTuB8z5uuDkO3KiQ9JuXb8/PJoeDpoTQ3z2IttoTW9x98f75rce/v/IeWc4z6LhkbACt6R' 835 | b'hFQCqShHkGGogpk5JXctrT2xVQdiMOqHUkXKuu033P1veP9ra6g1Buvr2byrsEXsLwZHJ7bN' 836 | b'ih3fpPJPLZx/TyR/LOrcqUjmfikMpyVeyKUEACJIYJOxCsAlZFgSitiTl2APeM2x4obGhMzv' 837 | b'1WIB3pd0Jhf3WTtXRu/MJmZ8HqqEYqOzU3kxf/7Q8cf7FBdRMBooRi2I1NqyG6xtGaR5e4sJ' 838 | b'1dZitBJVfn3phGYVt/aOdLT/uqvPHPnk8uEHjXcmrgsTOH+6Gd2o2dQL1ecjSkPImmAFWKJM' 839 | b'wBEIF1vxGTPmCmBYlrE4/dzDf9k79gz3VkYl0tJETkRKQGU7bvr22avfkeVShcpLkeXnjAiU' 840 | b'9BDCOqOEjLE+PPnnh7/wi8eP3mPkUFA8EkrVW6GZ9tKn9MzE1gO63HrouUNffuyz3/pt/+Or' 841 | b'7nzTQ0/es2PHNftv/VfTk7e22rdpc7UgQ1orsSGid3nux82fEnJFYJAiAvzQ25SqeVs+Qn5Z' 842 | b'lAqUWuvFoBa4nqQlTlUizmUj+9T9n7rvI7919KFPMOUsgmK0mAsQUI1AXhdupGuq2W5PtPSS' 843 | b'nV9dPjfq3zt/9EOUrkztvsGZztrC6vJqN6rJlNa8DJtaN2nUX/7TrPuH2H4wNE0htnFJcFJK' 844 | b'RSCwvNgS9ZgxVwJBRaqxd3r/WyrXWjh5Xqom6cgV/TLI6kwYPoPigdjUqbmt5xcn3HZhNMC2' 845 | b'rKwjcmQHq72FY8Olc9uuur0T1/pFyvFUFDVryVxn7vWl0ivzg+kdrzp97tzBV9187U3fKpLJ' 846 | b'hYXn4mCqs+cuGU4INe0ITrEUUoAIBejyOIVufvnZVYI8UQCylVtEtW6LE2X5YEhtnc572asg' 847 | b'9ICVP4PgFER/rf66ieavrPWT3vzR3ulTZ058Lusux3ZqXeWtqBB2pT2TzB28pjN7LVG9LNeH' 848 | b'q49EwUHRvsXUav1zw1Pn86cOfaY485BqiS2hI7kSNKNGJCCf3L7nB1o7v0OZO0MTs4LzlTQ5' 849 | b'wQEhbHhJxwljxnydYIechxSq9LlP/9rqk59e6Mqeb0SxrCueSQatZq2+1TWvenW55YcomG2n' 850 | b'XNRIWCgP0gDZkq1gUkKjcme/+Ivnlu7duu1upIs+lLte9fO5bYZqNU2juDO7li4GQZTIxvyJ' 851 | b'J5LAim1T2rc0hYIswwEBvBBsIS/Pttymb2sWmsmBnYeDiLRuarRDYWjwJMg5n0tRcLTirWf9' 852 | b'3/vwJybqhEomnZVa5/bd19z+/G/dY6qjSVJETTNcS1n1HW/dvvNH1kenOD5hatPr53LHp+c6' 853 | b'P5EmQvDJ5ae+WDN5beuWHj+TVxNTqq18z1WdILih1ro96LxBEwBvnSWpgbr38AxxMRnAMWOu' 854 | b'DDimhM+e+OIfnHjkL2vtOamSyb7kxUEUD8XOq/a+/TfY1LQ/VVGzEkCtJGatDFh4RulLK70j' 855 | b'6bhqqSCL6pN73rBj3w+kS08sl08URqqoxUhMIBi+FbcFnK2K2V03DgcrCZoEBUcgw9I5lIKA' 856 | b'y7fbu/lTQgLDMmn2ChRJGMCQX+Hh531tKAqlhoWkkyiqQt0y2vaqUHFV9rWv+zI49tRfrJ/+' 857 | b'7HX7vkG2G6PBYzfd/J1b99y8VM2LoC9j35o8GESvSZN8/uhj27e/hlxcbwb7r73t2tvfsOeG' 858 | b'bzzy9FOLw7PaFJFpsimL7OxodM9c+w5rdrNgFkMhCgZVjh0KKa0Yu+aMuYKRwGh4RDhcf+uP' 859 | b'X/Wqd88vHDl//NGrr3kd1enM6PzWg6+Welr7tlRFvzwfUotSJ6T3oixhBaIIQcg6KjOHtcCo' 860 | b'xswdsnUNtaZEWGdfVxQNaWBEUuRDI3TeUyaARRVEsSuV8BU8eUcMQcILEuwv0ef5Fa5rswFL' 861 | b'oCJYAc0AEQiOq6PD/L6Shj68Xg6fprTvku+AWkX1oFN323CaTOSUJIyOnvzU/hu+aderf6qc' 862 | b'DAbn33fgxp9u7vqu+vZJK5bqyayQ+0U83Qqv5zRWdaFa7UE56BcDJWorR5596FP/dt/+b57q' 863 | b'TJ5ZuG/fzT9y663vy5GfGzzamj0oRCkRCG6QV+SlgJCSaVwTjrmCWXGViZqt9i6hd1IULB3/' 864 | b'bLfs3fVTv7brutd0Vx7uRGmruRdVH0YGcotwmdAxpHDwgkh4gVxQBahAIBBhU4itGclKBQ0z' 865 | b'FyIiHQbCVXkQhd5ZbUIJ5YXQHlaIilQF5UgpEsQAe++tl+ryNN03r4flwSgAeOEJVkD4/FQ6' 866 | b'vDdsvk2KWTr9YzmOZbv/KuI0PPOrSG5A/K0cIfNVXM0gX0JSsyKu/Pzqw9/f2fYeOXsNy0xl' 867 | b'QtoSUZW6Cc3nSW8dyTNhuT0YEaI1BBN//ae/Djv8tu/7pcHClz74Z+9449vfM7f325FnELok' 868 | b'GBWC4Tykci9M4SsxjldjrmAcwJlXlJWanIye+5sPTgfhlrve5kSl17JV+0w0fXXgJlB4Fwgv' 869 | b'C0JFPpIsJQFUeMpyUIGg6cOC+hFiUNVzql5poUdDGdWcB4qKM/AkdGb9KPSTpKoSmp0XvtJa' 870 | b'MpS1ECilKoHaZbmuSxPwu8DLX+srkrbK7G9W3tXjn4KJi3I1VJFH+OJg58bzvfcA0uEn6tGd' 871 | b'hW1L5ZXSzqHikTLJ6VP/vqHvmtx6U2FzqWNXsi0Hp888t2//9RKGZPY3H/+jvXv37tn3WqDm' 872 | b'UQoam02MGfMK8Asz1WVZVlUlpQyCrziq+0oPYwdIMEBgtgCIJIEcrXpMWE+aobiEHQEepuZd' 873 | b'l2mCiAQBmQCXqKHiQHCeARHFkjJ4szFrlYqBQD10ABe5ZEWhsgBlIxEkm6wVL1tvmk0PSmvx' 874 | b'6kDeyVI7FEJqIH75GPrLHxPzbSNrVZzBVMdOPerseqgSnw56n7u3t/Y3FZHWkSsfN6YXBI0D' 875 | b'V9/qHZgFYK67/o65HdeAAmcBHvfWx4y5KBspwobRulLq79kGIWIiTwJEEEJckF0BvA+185GH' 876 | b'dPPDasGaNpvO6vCzeX9BSlNIvYoiT6SrRUAAl0qR1yiW3K0KndEo9ba06zFCh2XQCFIqCj0A' 877 | b'6kOw3nxn67Ld8BY5NJS5Ves7ILSDgzAbq9gv/5joBURIIJJeq5Epz5+65z/94sqRT1drJ9PT' 878 | b'p3l1Wa8ujZ747bMP/a/p6nNeAlSSVCRQFbxt7loTTruKGKBx4TdmzEVg5o1qRgihtZb/sGep' 879 | b'f+EHgNiQuiOROFvBDofp8ZX1z+b5Arls2H8qXX8azmqPvFhNMV9gYH2lZa20dVigUmT6ghqs' 880 | b'lOcEhQ59A7Ag9gD7nOFBl2K78E8qCfGyqrCg0sAITxsKqo4gyRNl4pUE9pi5KPuBaVYemkpK' 881 | b'l/7wt39O+9RU29qRLaLnOs1AlmevveMHatf9i0LAp2kQNwhUFlVgtLPWMbRRwCVIgI0Zc0Xg' 882 | b'vWfmjTjFzBu36ovZw9dkW/6Fx5eSAGbnSGa2iFSA7Ozq/D2Bs1G0bS07FYvtjebOfrlaku10' 883 | b'bhdqm+OcpbeIQ65QaQQjOM69dVqoqhe4OVaZVdajRt4bZghVojK0udP8f2qG9WLGZHzAPoPY' 884 | b'kO6rFEOCwfZirwoEOULXu66wrrblzm94px1WsT+2wkdcWV9aS9eDg3rbW1gUVdmLVBOwnssg' 885 | b'kJ4BIY0RgK1s9k98/2PGfF2y0cAS4iV5zxcD1gZf/QIvwAIQ8MwWbAEPIgankq1iKNlpYqft' 886 | b'LY9WHw9yz8X55fNfSNefbaiWoCnAk3LkYk99y84G1ntne78nh18K0LB6K4YP2OqMg2ewhAQp' 887 | b'kJcoNntdl62kEgQGwyuIXIgCiEGONjyiXwnSWvnRjC/XTjz63IkvLh+dj1l5OeIBnAgoqLHh' 888 | b'Zz/3we179je2X21bSqJRVUNpIu+hlNgQkr9cC0pjxnydwcziZdtpF41TL4f8RpS6sJVMDigU' 889 | b'dNU71u8/U1Xnq6qodKBRqKpf2aXStqP2jUHzemtM6hcihNrBq8IVdYqdQh29E04dVsm3OR6s' 890 | b'j/73IPhJiV0EIQAm9sjkpo2fL+ewkgVpz0RgIgUmhmVEF/uEChsFlJXdc/PPfH59/u8G3eHk' 891 | b'zI2L3bgZUm+4PCEmw+X03NKn+uUT28O3bJfXqrYQEowKrMHwVAJQYuyOM2bMK/BVsekfFl8i' 892 | b'gC2jABSJEIDzQ4+hltssylE+KNIzBS8a1dZoVWVP6wkNZ7MjvZWGqN2ikkgJkVubBFOEVeda' 893 | b'8CTK3SP7J27tfb78HPInjI88jOOu5oRJe7YSF01oLvo2L5dWJ/sSghxrpkxyBAevuoz2xSpU' 894 | b'z4UlbVGS56DITzzzwUfu+7MIQbkeZKIKuG6LI3e+7Sdnbn+3p6V6f8YGpILCwwpOAIAygHwV' 895 | b'ivFA+5gxF+fFSnCjKhQXFQXw3qeeC0FaiAjMpVst7boJDjgMI1/j7rmV079XDE4aMVNSVdqw' 896 | b'bshXixWMaNzS2nFr3NltbZOskPkfrIr1JLwpXPlwv/+4qTXC5aUqjPXsB6r6bMmHE5pjSgoe' 897 | b'hr622ZTp4k9nMJjJEjakkD3BATZHZKpUUFyJjIiUC9kPS1WTIOW0gmWskpiCD1zZJj1EWXOq' 898 | b'ZyVJ1ETpBBS085UrHMJIlLmkyokozNfOTsqhGenFTmb6uShmV6tdttEKIGy+BRET5XBZKiNv' 899 | b'0chTCJ8JAp+K9DbvU0EGHHIFJwqlCOPhrDFXNi/vWG385cXfv6r7vvEX5/pSROz6K+sPTMa3' 900 | b'iGBLr3vIawrlTqkDeNDqQ4OFZzmcTazKaEXL+TzrNA+8I2nfUuMmoqTvy4YSloStbq6lv+XX' 901 | b'PmFlJwlv4fKkj7cK0ePln3WrJaIYyQ9Q8A2hJpabPjS76GoOew9iQQAIIGYCBAgalmzXoqpU' 902 | b'4AhcrAjf08Yw9YTwzJHnBss1LwopAiksIISU0h6yaQ4z6bTzlSSzbriW5kPE/SRIusf+bmHx' 903 | b'j7ddfVDN3eUPPbujHgY0r2Wvt4qrr7tLhTZ3S5WaYKF4dDYJsR40vMlXznyYekPZ2eK8YSE9' 904 | b'jbwqSCaeZMVOjRX8xlzx/P2V4Ivxi5lZRhaZdLV8cCrLvqDTVZGniVkz8VW91WeL0dPnFz6e' 905 | b'NSI0Jou1JwWrTM4MspNhtH1i6m4WboBFEirIQyEg9KxSu9kVIoNELoxyUSg5HCLPw6aI3i3j' 906 | b'b/SB9GRyNzRic7nF37NL6CCYcKEDJzYiNMhZZ/MVzyuRaWv4dHDYV16quvSTlqVQnoX3XIeX' 907 | b'YO+qYCg9icoOvsz5Y6ZxrUJEg89JGlnfoigkauiyEtWHt0Zzk8lPWP2Q7c5b7lp6rpWEssKg' 908 | b'92CvfyKKttSlIVXOP/D7wzMfq+14g4E49/B7W+0dtdZtxJrICao8pLcGDKBQmzwuHTPm649/' 909 | b'TMDawFsi21OCdLlYDk5LztkW2XrRzw6PVp8P4o5MDm7b89NTndsXT/xlUN+758YfLcqzK/3T' 910 | b'W6bfWEnBqhkRi9wWkZd+lcol9kcrihBWEh3hQ6JQBlO1+r8MkpsyzWk1ENJFItlshnXRkpBI' 911 | b'bVizerYCCgTAwuVW1cBJ0T0s0qKyWTE8lzRvIVODy1UVOsCqwjsZKiKM4EyNYwdtqqAsvpRn' 912 | b'2wOeFdVj0P9tN6navha4Hnyiaj83VB9ZOP3bdnVeTv6/7L15tOXXVd/53fuc85vu/OZ6NVdJ' 913 | b'VZI1WLI1WMiWMTY2xrFxAiQQcKAJNKRpSCd0aJpeHVZDAnSyCKG7gQY6YGARpjgesI3Bjo0s' 914 | b'yxKaLcmSSlWqud483Pk3nGH3H68kZKMSkfxELNf7rPfHrbtuvfs7v/c7++yzz3fvPSr6LjGp' 915 | b'sTTXRmkWp6a/Pm3vQWVyl7Wb15155A9t9LMT9Jop8i5ycN6XJ4TLON0boYUAaMGOtdrhsudS' 916 | b'1uoF3x/3Pz3uPcNlFxVsFVyyRMZZacabw5n2oWz6ZuiaC+DxhZLzmaPfgNb8viP/lJfu8WaD' 917 | b'I20wDThww6FbuYdNddzomFWzgqMA7VLwwMqisx+I1HcnlMSm0GF2q4H8S+LSHtbWZlAAAXMA' 918 | b'bHCDwm4qI6Ya+fEztly2+SLcME2mJCnz9SUyuU7qDCO+pBAHe26j/N1k4zfKajV2C9r2K4x8' 919 | b'OBl8bdy4JWUyw5hEQtrtJorqR/vdnuud4tGFoj8kWxlOS+HZQ2+fuPJ9IxXnXlOkW+2rly7c' 920 | b'h3Bf6npZs26j6SAnxuXZAMU8SVyHAjFBeEdRusPlzAtapeeyC//6J61bkGqUby75IgePy2rs' 921 | b'rVKqpDwiMx7DpMmEuJSRisuzQ3fIiHU6k3YOGBP5EKKQWVtInCQyEF9T8S5FR5XrK+tIly6O' 922 | b'ia+FqZe+F5yLzS7mWR9gsaE5fUnjepEYFoi2fggQwFdVvyj6/cW7bf9c5dbG1C9dz48H480L' 923 | b'6yuPLJd3kXSy6KAyrFVg0iyTyh3E4P2b7pOJy5Rvs8pj1AEu4lHNHeNQQc85X4dDUxe8dHe5' 924 | b'/KAOka2WOahG7SAlXOpAqp3EtfzMXfnGfyqWn3Qub89kcWev17uayVTfXqilVzfbb+CoXXJZ' 925 | b'QhxxCRftSLR22OF5/PVY+/Nxye52dkMSMB4c89WAg4+d8f1xqTGsTi9tPp73F1SjodLpdnaN' 926 | b'SiYjleTsDMdu7FmazNCkRmpdSxTJvFJzBFvwKdYHtJn2rrC1m5L6u2P9jRwraO1ds1AVqdS8' 927 | b'RO36JbeEQbZC+H/V6cJwzWvHWny5DOdCcHCefR6q9di0dh/5F3F0ABFc6AaXMYH1MG5OQH6t' 928 | b'VvyYHQr5DXIBOKB5ozNcctEeTlvQhUFCm4+vPPWJ7tmH4qg6u9GLjcSoD4PvTF/pa+2yONEa' 929 | b'TMfD1ZWFz9QiP9u+dpDvr8z+Wr0mqqiNEzUuJFqhekexZkTqpbeT3WGHy4St7EJ86QEiAO9E' 930 | b'qvH6+l8ONk9KMCoa6rRBHuLU7t3fPd98bYY2NdQAA6M7Lnc6CpBNVdTHGycau1/rsayqjlbt' 931 | b'kiUjQCrR66WeVfx6OKXLT5em8PCcDr3bG5CouEiQhJd+/S8Sw/IAAxw8EMBKs25lOs3HB/Lu' 932 | b'WRk5wHGoxDoreZxdHWe7RXedZ4SaicgHWzijopyqD2L4dKoWyVzh9PQ42iyt69i6ax6BPpjL' 933 | b'KCIj2b54z5v3zX93UZ7KPvN9GLc863h+QJM3HrjiB2EqX640b/jeI1d/Q7X0cbt+YbKxJ64b' 934 | b'5xY23WaytnF64yNjlc7tfdeu3e+Ks+xi2uaOsGGHHf4aL6i7FJEmzMKF/3tl8eN7a281mT69' 935 | b'+kDZjZK4r1a8PnpwONFMvILnSCUAOF1BmM/Y5Ct3nTv/J6/Z/ctWUhVUBgWgohycCs9H5d5I' 936 | b'JsCw7V2N0BJXQrWhc+sHyja1Aqo1JFMv6fpfxB9jAby4ym11lw6ozg3W7948/8HxxmKFoYuH' 937 | b'A1mu/FDldunYH5y495+MVh811DTKhLKvQ8jsveWJ75CF/7M5mCnChLMDXWmTrHZ82/Nxzi/o' 938 | b'qlu3qUYpqNWbb0wm93vdsBsXooPvOPLun+0Or6jLiM2oQuQ4KeFMOper66JdV2YNXQ0qV1K5' 939 | b'2l+X5Wbnm3bvu90iKsoEOhc9DNGOpmGHyxoHuOB9KLZKbuZDIU80CAqKuBscOXuiGj9C4oJb' 940 | b'Z2HQCmevP/rm35r8up/Su96w2v383PzrZl/7U7nS62f/aMIXXWUrquI8DcWj44WHu8MHUU4s' 941 | b'PvOXqDYqWgA3ERd+sAYg0mnEiDGdmLZniKWqzwAAIABJREFUHzjE+jZEr6GkTYQIaUM1jQEY' 942 | b'L9Va4UU8LGt9FDET4liRIFjb7Y02N8Zp/cYkET/8L+7CqqlC1eC4fcvu3besbm4sd0+X8Xyn' 943 | b'cQXi5lCsia5NJ39KOoqi09Hw16knqBb0mkVjn/j9lhY0pkDMYB0TBQfuFnK6tu89V93yHaZz' 944 | b'8Lqbq95Gd0LIe9RMCshg895AXxyFJKd4YM+H3pkwfDq4icM3fTc60z4aK8rgEaoQTMV/czGN' 945 | b'HXb4miX4ccSZBDUu1lWs47oRrJ3ZvCvu2nTft2SGB49/mCn090zoTrsxhqj23O7brK+gg1VG' 946 | b'xzfN7nsnJg/W3vQvl8/dP87zen2CxsNRvfLpfjl5hvy9y+5Jq89wGUUrsrz8Rw+c+P+uO/pz' 947 | b'9aMdAFt511uq+i2Z13Y1Zr9k0F0rRQQvNoQAKKV0Wk/bnana1NVN3T7x9G+0o0ON2oFTS3fP' 948 | b'7Hvn7PX/cGb2jomZG+JkmglVGAt0ohsqaUl2yOfr+cIHTftqbk5Sl/3kG0PnXYYc0bwPddY6' 949 | b'gEkME6pyNLPr68zMzSPfaNan03RKZRNgrZxDJUW11mhPNhu3ke+ur92TqUNZfOTpE7+STR+K' 950 | b'5l5f8VDTgPIaQBwLvZy2sjvs8DWC4lE11kqxiahwUuRpHKX9wcJjH/2J6emb9Lg48blfasVz' 951 | b'U1f/3QpIgxSujHSWe0C5qhyTtKYOvK3UFGpTE3NXgRtlT2epVsrlRTShTBh+QaJBpNJE+qtn' 952 | b'/uj0sY9MTF+/97rvE/3CBTu3y2C9WCbPxQoV6uIxISFjHXuY0DtjXbt+83c2s6Pmzx4qBj2R' 953 | b'NnRFZFRACF57F0uNlPPFM6F2Q1Scd/XgO/8D1KQd/Tj5zRL1pr4JgT1gxYqAAoCsUbtJt3jg' 954 | b'dRAEno7a7XE5imMFTiGUtl7rNKIypd7IbS7vvuGfV82jB9z5hcG5Ke7ZCkmUwoB0CeRAe1tu' 955 | b'0A47vBopck5S7Zx4W9ZME8JUqr3pLcv2qi9+5JeSjhTl5sZma/Lk0oWFj66ZYveN7y19zJEX' 956 | b'oVpj39Hr56BRhvVENca+nhmnm6PzZ+6njTsn4tqSxkzzILPv+m4jbnj6zN7dd+y//d+spxsT' 957 | b'MvmsgD6IYNvrqVxahyUQbHXnIQDWhrJy1glpN1hYaO3ar/e+CfHcZKNpHaLJGxxyYANklYpZ' 958 | b'R8QMDEa40Ks+2TDORP/UNyovjuWq2ABqnkQRKVFWcyXkCMysQF4Apb1hNkRFUemUAYbTpOE0' 959 | b'lxizS2x+xoPaB99bxTS755uIuZldGRWZimPH8FwEWIVse+/UDju8itAqDgBzJeQ2Vi+cPv6g' 960 | b'654YrX3xxJlzwW2UQ4zdxKA4e/7Y7y2fe/DI4Tvqc0etUKSsoTpLwlGaV6PYqCg462ORntZZ' 961 | b'yW6w+oBdfQbaVumSxlRWjyuMbbBUT5w0mvEBj606y/xsD4f/irI2L4VLV2sQBAlAYOYAESG+' 962 | b'mJ2X5/0iSY1TTqGtYMfFqTQ7AoAkBE8jFE6qJLR0jE15wiz/bEd/nUtuUOMzpI76yd3KzdoA' 963 | b'0l2mmEgLGEAIjtkxPBDbMCRoDnUvQRvnAmBTHY+LykdRZF1s6QJJv85X2+pCmcxm2ORBDdBo' 964 | b'+BxJcJQw1E7YfYfLmKK0cbxlJ/R4sPYXn/jd049/SkYL0407mE8o5Ey1yhc2o1ve8V1XXP9t' 965 | b'KGsSI5eVNEzBs2O4sJmqDngUqhobCGMURDFVC/cOv/gf0JlspLv0RCfnDb/Bw+7y4spdc8ne' 966 | b'qdv+rzRNIxMBLCIAb6O1wotsCX2wRIpZA2CEIMH7IODgETcb1umYc4irrImz/bZyuWy01BSD' 967 | b'Is3Kr6R2E2XUkn5cHhW3CDklrkW0W5ztyTnScZ07DAVwcCCC4os1IQQcLMdxIkJam7IstDba' 968 | b'wEMpIRXisoTEM0ZPOC/G7MqLiqPpYMAaQGlglYq29RbtsMOrjziufIicRSCbNaa++d0/OHjt' 969 | b'zXf++W9vnn4yrU86Z1IV1+LJc+PehZWwv6xxZSU21lNGgA4CUjpHWfPKkAZgXbloQ2LSyWHv' 970 | b'oaX1z8yk76nC2Zx1NttQ9Xy6/fZDR78feTZUvDX7BF6EmC/mV7/iMSylCGAEhCAgTyRaa4Cd' 971 | b'TxX6QmbkUqWRmAoSlIqDmgm2z64RK+OKR/sXfi+xY04m+2mehMOR071aTfSD7Y2TWdQ0yY1W' 972 | b'z5ASIkfkWSlAnBNCXAFp1IEPPjAzkjiFQJzzFJvYBtvP4hgUw3FBuVVZk8K4KFTmPTIVSKNP' 973 | b'NAGMgMa23KAddng1IkE0GYphsVFCxVHL1PZKPEFTD1s3w8b0baEHPKV6z3zsF8cP3nvdd35/' 974 | b'K3u91hk8wN4DHksq9BxfbfV6lK9G3O7EMxsP/qdzn/35xqHXO/F5saYawvmtKtfYxb3Gfouq' 975 | b'E7acD4QQJBDRNpcFfpGguwYABjPheW3fdQygqdWz/3Or8pSCxjq7SRAE4yJ9b9g7Rd3fNgsr' 976 | b'pUui1obYyZo/X2F+FGe1xutLtztWQch7mMB9b8mYutYD7yfTrdEpfrZTrAaBDIwgIARFxLG1' 977 | b'QnCJjsajSrI0yy4a76IQlU4BsGXNfEkHth12uLwQGjlfJ41qSM0olu6D933qF+zS051OHnnV' 978 | b'D+dTHAj+VOfAO6+95h1+5YSzpDHgqgWDArlDTbnA5Udjn8U2q+xpVz+sqqxs5Ie/7Vdbu96l' 979 | b'1h96/JEfSO217dbrZPy484/Xqzdh+MVBs9aSqwhutPxnQhNp7faoDkEuEj0vmMUvnif0Imxf' 980 | b'iWTxUABZT4mmUEvfHIZRMfXjdVeDRWF6KCazaAxrUAsq0qh8ECGGURNguEp0FAc1UC/iGQUx' 981 | b'HAWpIhOFoCA6iYWIyrJkhnMuzdIQXFkUabYTcd/hskbR5LAYxnXVqLfgeGnYnzz8utvu+N4F' 982 | b'Kk594OcPpof66WhjYXDjtTfFR29W829QVJKy3m1U7gsqTCU0gzwLw2LU+GDiJ7yPhUyZNOtH' 983 | b'vqUOR760zb1+KT1y6OtRPxgONMripDHjEed8/JO060eCWz7z+EevvemtaK71rGlVzZB+eR7O' 984 | b'y9skvkg9rJeGUBq4FEQazH07Xvv1wv4Yj0fGNZ3aFLTTWEs1oHQwkBOIgsF+Zk0AlA3iRDRx' 985 | b'5CjXeOEy7cHnSpmtZhcinsQEH5Si3rCXZRkrxVoxCRGUJmcrpXZyc3a4nLGGMoGuaI2UrzUP' 986 | b'dGavjiZ3Q9nyzB/MXfOmq97443r0RNFbT+bfZJuRFx1xxNDoo6p+xa7frUPPxmXmg0ePpREV' 987 | b'Xc6Pawqkm5VNKjXOh2HqwLcXKVfWU21GqOH65/PFjy2un1zPP7q+ft906x2meaPzNuJYlDzP' 988 | b'w3r554bbZrAI5OGYRwyh4v6q+qD2zSx9p3NnvEcSFyjbMHukdXPlD2R2sjJNpQbeCytX+r6O' 989 | b'as67CLVLDURgmWJrRSkKElhpEfIhpGlmnXPOMysmBoSIWfGOcHSHy5kQNOtA7DTVSRIwk8ms' 990 | b'1LLRRhk+s/vWX+zVOvum39gfPTG7+9qBsqkJVcEqcpSlkd+jqs8yLxaoRcPY0pomx+VZrpaJ' 991 | b'a2VsYKYiJVO7byhricPI9Bclf8R2N9XgeHfhuOmulOcfQ17q8Xjz+AeefuQ/5MW5id2346+8' 992 | b'qpcfgN++JhRjIIMHnIWmsxqxc7OFGqZn3pdjUE/eszn848b096D+/WyAXn/QjCWczcLhSLMo' 993 | b'CMa5PVPjqy9lZzycQBWjKo6N1hgMe41aO3hSGsPhsF6vF0WVJJFzQcQbo7axqfUOO7zqsBII' 994 | b'FTxrjkJA5QoTay9kus8IBkXn9cCKL9rQyw2Z8RVU3ZaDGjeChcrKBWz8LKozLrSVzNm4ZJVp' 995 | b'laDxjVVyu0dInXOIdDFAWvQUZ4NB//HfHK6fyfVS5dei3hhDhso2+ucs3P4bv+fA1/+k983n' 996 | b'9Ul8+XNz22Y1ZQNCnyGs1ok6ULNIFjxfGPpnzMR7UP/RePaOnE5oFdb795xb+61UxW11ZcS8' 997 | b'uf44YUTIUjMFX136G7TA1mqxeCbgqafuvXDuccUIdlivJb3uRhJHwUMrJtY+7FirHS5riApF' 998 | b'EUJkrRMaJVGiRNvx2QvLH+Ts9UJV1jNPPvpjZahjELssFK4yhoxVauX+zdUfGvbus7lnrkgt' 999 | b'RkqCXR0Vx8P4uCn6xrL1Ougtafl0iro0Dky+7if0zL7+8NR4wywVZS/2G8WKi9Xum77rwNf/' 1000 | b'5Pm8s3VVX7l7tG0TOyD2tsmOInSUcqi6uj/fchFPXhU3f9S1Eat/ARyCzkcLa4uPfthuHsMQ' 1001 | b'/YU/Hg0+Ib4XAMK0xQt3igZAHsH1CLlygHMLpx++567/jFGfqXj0wc89fP89QCAEEJSiS7Yy' 1002 | b'2mGHywP2WUBPR6UxmlVkw0ZZDdJ4tth49NTjP5Xm+Rc/+T/L6buaHFCXih00UQLYC4o+mtrr' 1003 | b'0tbbKjNdViNfroXiyeDOG0RhfC/1/1/Nx1zsHUZFPc4B66PCeURZYRM/8I1qremCLl2jmezZ' 1004 | b'sydfW7rwxF/sSretQ/v2GayglFkGS2V5JK0ibtumLVXSaP3+SLveYHDszIfEfptFXAste/zk' 1005 | b'2WP/ee2Z33/k0X9m3JjsvMdm4a2OLnm6x4RyvLm+dDJUHpCEB198+M7u0sJ9n//Mb/3mr+6a' 1006 | b'ayOUlS22THhhX8RT22GHr33YQ0kKmDyMClmDroEaophlunj07ic+9QOjtd+bTW8u0UE8NqM0' 1007 | b'KTrBoUgnZfofm33/Ss3+jCQmLe/JMetsL1GHo8mfKzo/vBpNQGpRoTPUUoRIbZBQE2ef+tC3' 1008 | b'btz9Sypf61qpRxPN1pSdvHJEV+5pttT65xfO/ul2jWvbZA2aFTALRhQjuqiz0FBzqGToljuN' 1009 | b'yXOnzUf/+NvnD31TwSdzPuIeuDeP/1DJ3MSt3+ESWF/WqAM/hKq/8BcIHBcP3f0zbtSfv+Lv' 1010 | b'DcdP7G0lv/+BnxttPrln31VXvuZ2cHAy9CSlP9/B3u0a1w47vBoZGygyEB9xTZEerT3Qv/Bo' 1011 | b'HV7GRWHORxdOaYmtX/WP/t5CslZrzEV73hV8kySxvpnpEYZlv/hc2nh7NPuvojP/UyHHVRzX' 1012 | b'7LX19IqBj9JkXEjNO12jkCmcP3ssmTk4eeR9nLj+A7+7SM+0WrtqZTp75D3ZVX+fXH9upIQ1' 1013 | b'tqNmw7adEl4KCb3YSN+OZmZvtdX6o5/9lB7mkZJR5YqqJclkWo/KzWfScljYZlFvX1LvKRc4' 1014 | b'uXKmc/3i8T89/cjDtUIaBIjNkM7NNlrxYV9VARc0Nxp6Woo+RTvK0R0uX4yHJtZEIRTgSpt8' 1015 | b'OH7s5MLH/GBDSzwq+y7ygf2oerqMbGf3OyM9T2aNycG1QSWZJ0os1unf+PY0YWrdP540bmOe' 1016 | b'IurHiEKVaL2uSLis+UhRs9OefEu654aQqf6pjzX3vWNu/7foCCqLks5rSNU00VZy71evwXru' 1017 | b'yrhMoetKS82kkV0frTwViqyUEPtMuQ6wevypj104fn9DJzPz1zjdjNQLD6l0WV8tTjZ2q3yj' 1018 | b'sk9Era41Fqadcj7oHnvw0U995oEPVcJHdt+ulKYk3inrvsNlTeiLD94rFzT5RNNsTfRw7VR9' 1019 | b'OBitnwZrru0y9bRTv+3w9T9Ttg7GoSBVZ1hS5Gng7D6oK5L60UqJyQ4FrtXMbU6TpQH5Oqvg' 1020 | b'KxWiMpB3HCuKTWQ8rBpoNzoxffS7GnNfp2JDHOL6wUCRKNpqY/WVG6xtkzX8dS6q7y2GZRXc' 1021 | b'Xz792T8/f+JBq8a2mNSVH3OkB5QmeXv/4Vve+cOh1mo2NYGAzgv/Ou/D6OGVpz62dOYTwzEc' 1022 | b'R0HGg80YvDuUvcauq69923dOzV6nJS3KcZX45k4u4Q6XMR4OYEEAEMrCbZwcLXxy4dRHKe/q' 1023 | b'sbdCtk1xo9GpXTN/1T9wc2+OLAvD05KiaRDZioOuiEfaWaYZUiP40ajoqdqVHraGHtaOV1M3' 1024 | b'+WAUIUKQ8ahgTgdUhKfiuas8Ml0Nne2p2pSF0lAk21PD7xU/Tqui9Tgpio1Fzb3Z+dcmtal6' 1025 | b'NmiQIT3QUWWHrhqpRudKbs6s5iLukqeE/WF/beUD55f+gM1kc8KzO5uhvmvXKKqfl/j04UNX' 1026 | b'zbVvyXMl1CcWoHylx7XDDl/NWKsDQhVyL6ORPbvUu69bnU/qcyPd6psTDoutrC5uMspqG2sf' 1027 | b'i1Yf9ArClfiUSkXCxowS9nCaeILs2ANje4KGHzLlWMFg85PI/72yy94jeMAzaSCuhakkmrkB' 1028 | b'MK7ogus62V2BIJ7tC0vbX4a39Ap6WABEZIPcpDfoL4VazOgc//SPX3jsYxGuqPRwXLQVNS4s' 1029 | b'PXr4dW9787f+NLIEuKQINscwKhKV9NA9e/YL/0feO1b43f3uujMM9ktd9+a3/ez84b/jy75K' 1030 | b'2kLbVs5ihx1elVSAscFZcCYEaxcTAsbRw3/y7kH/vvmJG0Pcbu395tmr3ifRcjXQanK3opiE' 1031 | b'xRJFI/GWuA3PY40soAyIwqJs/pNKbknqb6/O/49VfFV97/udxigM6z5Rfq1IJhiVA2Wooayg' 1032 | b'I6dgMTY20/ICXaxeXv7ztnlYlzJ8sffwQHsu153x4PygeCCd2jd562s9ctkz8fU/9HNv/4F/' 1033 | b'z419Z86e7FV2SBdL1v91UsHAbniZxLDh+w9LzacT6S69vmf2O2+56VcPX/NN55ceLjbGKm6X' 1034 | b'1ZDcjrXa4bLG+QABQ1gFIhizC2ZyZbwxHj5w+NAvHrj2X47IJ+0J35jqxVOhfUSFOmBBRUWb' 1035 | b'IpmgBjgQBEvBevYVoWCZDqN7MP5/gl1x+kqMh7r/EMknHa2jmjMuioThrHggZieOYWMIAdDb' 1036 | b'5hVtX7WGF4KI6qGqQuKoygi2eHxi98SeO35pMNGJz5050yHXbky17thzzbXjUT+LBygn5FI5' 1037 | b'y1WhGzNDWI0Ppbv3zVz9gSCby+ffWNvtawduveXI68rhBR35XA29ymLx2Mkl3OEyxqVsIUp8' 1038 | b'hLErY4ZBYq1/Su+9vX3r96mJeH/92Ghj3ApBV7MpAVElPgPBUl+TglIuDABb89wt/8gIsQ0i' 1039 | b'jZhabnRGNW6M3Mex8mdueDzMvxlTb0AdnhfZ78o4cx5eDQrRLTQgLjBGXNYuUdTgpbJ9yc+X' 1040 | b'cO0CGW3EQLy3Pp6vz7xXZa2MkmR297A6t2/2duSx51QnbYsVze3gicPYjb7g8zE4drp0lJRe' 1041 | b'gtJp0AltFKrI5v5hpg/FPvQaOSeva7Zq4GZAW0eJgkdVaG12cgl3uJy5WMROvCNNJiYNBGZM' 1042 | b'7N3/Xu4YLWVRrEqzXddXG7pQqaamihQJsZa6QmARERMoDlzLol1w58Se0YFY5eC4sL42VhYn' 1043 | b'pfMTZvJnvIYJolhGPo00WEEjTVQMAGSIEb2QY/Tyar2/4rP6YgsNgEhpFWlttt5RE6+fPfRu' 1044 | b'6MTqrtY5W1Avxni5pApcGxYXRuWTmuqxVVX3ybpnrTgAwHQ9vdmY/dYBPDM/875mYw90A1AE' 1045 | b'BTDBEGmEV9Zz3GGHr3IEPohTFEdIlIMWy2HF9R4zcWTRhM3OP/4rjVHuA3wyYc2qd8F7cS4I' 1046 | b'AFIQYWbFUFQQTWn/Bh01KQvgFGqYmghaq/p1Ue29iCIO7WqUVj7y5m+8rq+Uvw2DJUISiIi1' 1047 | b'NlpHTFoCxKjJ6Zs8RdAmgEMAUKx1P1KNPi2jM250wY3OY3S+u/65Xvez4p62wXoagwKpOXBT' 1048 | b'YoskxLXX1Jr7gboEJkUBAJTiOPhXelg77PBVDYO9BYQB+AAQBe/Xur0HPvwjsnAXup9eP3N2' 1049 | b'feELSjm//NDJuz80GI2EwJqVIhCgWEQQ4F2A92P10MgPrG05W8d4v1J5Eel8dGLQ/2a3/Cny' 1050 | b'lWnaSEnrlc+Ie2VPCbcQERH//AKpIYBkg9AGsxBGRVmPY4hbuPD+tDhh/Kz1PeZ6STykbq31' 1051 | b'utnpt7jQYl0SQSQOBKBSsD4EzTXvKQhBgcgzQKLEgV95Y7/DDl+9eAgAZS0o92SUioDNjcVj' 1052 | b'v/+9TlUUIo8smeVamD1z5sFd17z75nf+LwJVeRaRRBMQvN/yK0qPp8vxgP0m+wXOc42N4E/D' 1053 | b'zHM+7UNpmxG336L0UeWaoEun1m0TfxtbJyIi+pIvYgYkkcpTXJKkCiVkjLIzxTeN+k/n7oyK' 1054 | b'DOvIuvNR0piKroZr6cjBx06gNVjgXOSgjCEB++CFSRMgfquvEPROAGuHy5rc+jShAK+gakqL' 1055 | b'C5r9dLt5rHP78tKfTMl8UfrNgS7Lz+7af9vN7/xRhMoFBsVGswBlUQCIkwxgL3EWXwOSYvxh' 1056 | b'iVe1mq3y4wl2YeZ7QjohYRB5DdkcKVNQffIVHtffaqzHS8DF8qjkKZMIDKeAOBp2N/5ydL5f' 1057 | b'15uVtEX5yvWC97G0fTHcXPyE488nM4ez2tVKT4MCMNI6gTMIAINVYGaCgFiwJe4IO0H3HS5n' 1058 | b'VOI9KLigAlE1OnvsCycf++zGwpMRqt5wIm0DRe5Cp7KvlWLX8qNPzV5zxOjUSyhKl0Q6SRIA' 1059 | b'pa0UR+KuhDFAKIJomo/V7Zx2RuXndYCnPvkmqECY1wKth8Cr3MPa2gw+1ydj6x0BXNBaVS4g' 1060 | b'AERRYVHRcs+e1KEFpC7kFIwOqGw/hGd8VHfjqbRZiC48PIJVzIGDCxyx0kyAAAwwAQFC8LRj' 1061 | b'sHa4jJFwMd7DJoaOa61W0mz6ZUXdflPmR5sLkWoi6U6a2ZXj95x85p7k4FtufeM3XHndTVkc' 1062 | b'2aqCIlaGtRbKjSJfGq+WVVKL5VqoGV1+tziJzSaqw6AF6xs5kErcqqK/LhDdXl7xGJbIXwXA' 1063 | b'5VldqIdEVURxN4ACNYOQlCFWrrt4f3X6N0sfQpRH1CnLXNXac3u+00y83ovnlHO4CClZKELh' 1064 | b'xiYhJRpEEgDRW62pAwDyvKPD2uFyxgEKQrYCVwIOnJIvRxsf/u2fiKtl2lQ+S1w8qI02Jpvf' 1065 | b'kNx683x7pjE9n7XnoBKAQ3BCDGKLgQGVdjlUSRrNKqMrKXvjc9NIi6jhjE99BwolQLBpNUbU' 1066 | b'ekWHtW1uiNvSujtAILDO54AT68bUC6LgladRPioY+enTH4m9q8wmKOVgNCpvYZjBg3H3oSov' 1067 | b'xDXKqp2HKrIkK5ubvcdHCSulSIzyRgRKiUiRRKwQQAZbhTQUQACBCTvW6m8mQCS3vi8BEmB9' 1068 | b'XyTHl7diAhCe/dnh1USpN0B9X/RjKC1KSWD015++s7N03OiumehOqmHbDyVx7de0r3/D35s5' 1069 | b'8sakc8jDeIEICFoJq+AT3+BQL2k4uP/9arQ+wCg6dd+5z/yvw0on3KyDyEFyqGrFuJFErVGx' 1070 | b'WQF50UUJFMjDeBwADLdrXNtX030rCfCiv6aIFcCktSrLsPzA8Nhv6VCqWq33zJ+On/yEN4q5' 1071 | b'Veax9ZlHZcyQ2Y2WTi4vnxnXIofNuBza7sJm+USBlXxjGSuPnHnm/ZJ/MRYPC2EKRluOc9S2' 1072 | b'6/ovNwJABK000V+9CIAIvtTn3tlZvyphP4HQFNf0DoZhdL659sQjT3y28bqbr3jTj7TbB6LI' 1073 | b'7bvxm6Kp6aWTn1QbXRAARyxEngjEEDgJFRilLKR6bpCfPP/or6Urq3d9/LvanFFnIve9UWn7' 1074 | b'UWUThPzcaPNOkkEtbpTdu8eDx63Ky2SomTJAtm/B27YYFgMi8BI0KYCFjAth1OumnV1QvZNP' 1075 | b'/i6tfnHmmu+WxTs7bmRFkuCHw/NJo0GhIRycXrWxfc2N70EUfeETvzCvpVU7sDCMm7Ozieoe' 1076 | b'v+fnawfuIGYwh4sFHTgIdhKcXzZCDmACb1knggGCkCPo5yeGbsUfdzysVx0UAAWTMhRK8RK4' 1077 | b'Xt932xu/ffLAHY6GWPtjbvKRr/vnB0bfsfrYL6+t3jk18S2g51aqACAE623O3aUkSvJyJdIb' 1078 | b'qwufO332kyo6J+lrtDM8jEyjOSZSAaFf5oMvtGqvkULWz3243npDmOYS65kk8KmXSG/Tnmfb' 1079 | b'UnNCgCKwYgFy613wseYk1WulylpTbvjwePEvwvi8zbs66XiTbJ7+4Gh4OkkzpacCxTbENnQa' 1080 | b'7aPMeyaSXjl6ZlC6yQOHVKIH3d7eXVe0Dv5jU5+3REJBE5PzOlitZCdn8OVBFIKAoEIgERAh' 1081 | b'QJiIiOl5PPfx/5bXusNLh3hAKKAcwESaYDRaWXv/eBxAvSys11tXyvQdqjXRmZkznQNKtwlE' 1082 | b'W+61kIhI8BLcxuCP8lP3bi7/edk7RkVns3v/ZLpnmCrq3RvyM4QV0CChSR02B/0HuhsLo/Wn' 1083 | b'Rr2TezvfquNZoxNfRop1UXgTbY9vtH19CWXrofYgZQUAWIp8uF6PnLOD1WN3js5/Ikkjl01I' 1084 | b'MvZlrGrN+blvjSdvDboijiGmKPKR/SLJktlYtN2TXgmiuvjCmCSrXZ3Mvt1KcMyRSjkEX1kd' 1085 | b'KVAA7XSlfzkIYK03WtHFR5Ss88Zcot7rDq86wlZIN5RVrnSkWFXFWJxP6gk8XPeMKDbtAzmq' 1086 | b'yts4tGK9tV8JXoCwtVhVJK6nFuSJDy0+9Xnxy9WAgSU/CI29+7yp5q/+oXi2XQxWMUQVlnzV' 1087 | b'M1ZxkBH6u9pv9T4u04DO0aw5r6W+XUve9soavPeV0jETM1BWg/7mwskH/3UIZxq1K6Pm3srp' 1088 | b'YOPEtJvhgJtoxBNHoCLrA+wwCiaShbx8qpRVHXYnjeuiug++gcpJsr5qjzXWBqz2J41rlWo4' 1089 | b'lD4GSI8dN3eyBl8WAkFgAoAxAEINgQVCFwUiX/rhnd33qw4BCBDWKhGxIXgdsUrM5jC0Tera' 1090 | b'e6CsyXUETylFz30eDAFtSbvBEGT+CkWH1uxnxdTX3T0KnWxyjtDeffCt6dz7bIpoeG8ldzla' 1091 | b'1TRlyn7ppYJ9+tx/RGHr07fF6SzVshoxb5NjsW1bQu8DK2EW551zAWLjyKVRsat5i07qttwg' 1092 | b'ikJSqzVsFnuXNUKwjvve+DTuaNWgoNnU0vRgPRxRVR6pVY9eUZVS+uBcnOkQ6lE0zXpa6RSs' 1093 | b'QEKIXKB4Jyj88pBAwqxskS86N9KysurnAAAgAElEQVRRHaKYQwjhYq76l5qoHYP1KoPL0lWV' 1094 | b'D5ExijQJO89BojhRrIjYMJQEryLSJPnAmUQTiUgQgmICIFLacrRx/ncWj31c1CPdwYBKpLXd' 1095 | b'RT0TM6J6IrXpem0+Fi3jc6EQV3rhde8hQQvU7N73zu3//np7r+aE2RK2pynM9rX50hx8VZR9' 1096 | b'pZMkqgN2tLly9tRjh173HfnUnuqxX5ocr9l4PyHAUzkR5kfNchyC6ZZqUfMs6ZrntCLUtaxu' 1097 | b'3K3L86JnKz0mP5C80amuah75+9Amd64SiUDsNVA2FL1AKcMd/mugwEyQcjxaBZCk08wKFEII' 1098 | b'RMSML8um2uHVhQ2VNimLFkFwQZFEkbYCDe8wDiMbRYmLufQmtlHcsgQBgsCLAGSAUFXj8bjn' 1099 | b'QzF3+KaNpf2jjT+dqCaisusTPjx7O/y+YvXu0vfz8TE/fjSTPc5hyFnCBZfjYAo9u1vaWmxf' 1100 | b'yojSxnZtCb9CD2trNRZAclSRS/Tw2JlTv9bkq1lPHH/6f0vK0fSeN64f+xD7RUrqSateUQi6' 1101 | b'NhcfDjOvT6aujeLDiidIGWKrKZDFyhM/1zt/n53e58ZL8dqFwWhS0eDc4ifrh+6IVS1QXCkS' 1102 | b'grKeDFsylw65/9W1AbT1T5FAdHm5ZMGBOACVD947jQDYSor1ondXUT9QUFY/9Qkz+PNq7g3B' 1103 | b'JitP/LLxcaLrpGoiIPKC0jkA6mu1mbbIVjXt556WLZ2zvNrPGRiRBDACM4hF2IuIZjhvNWuO' 1104 | b'MqgIAiYhxQhCshURhicqEQoE4SjLppsT19qptzRLVZz4Q2QhjSYiZWrX/9PmFd9KWVGONr2R' 1105 | b'Du9WY7vpqqZc8L4xcktsi8Un/nSy1jKdG0YYx2rbulht2yoqyGFiSg9Wrjh9/Fc60dXxwLZr' 1106 | b'qjjxcZM/wGXUal9fSh43Kau1V/onpvg6EIGxlVYTJISAsihdaO67/l/X9l+/eOe/O77w0ze/' 1107 | b'7a7e6M+bwa/e/fHmm34wjhA7j6AshKmkkIJf2GQ9+yDi2aygrVOvy+543qlCBVI+UoqUgaAM' 1108 | b'ZmD9qPvER+Iz96nW4dXh/cX4An3uF2iwwvUL1XXfDlIKpfaR9oooZVM6DNUrnCP234rnHpJn' 1109 | b'pRtfI4aZiJTamhqBiCBqy2RolYp475gZSjEwBJQgdfDsNasQoYygUQLFeVsdQ+sb6hoLo0+7' 1110 | b'+UNzN/1bofHS8d/aXzN9v56ZN2fz2BDRUp7u/aRr5KO11Pkzjfbtu3a/s188fnawvCvfNHFd' 1111 | b'wgapiW0Z11dksJ5/wphWDRAgnV2dq/K1u2VoIyeD0dJ44yOL5bHO3Lvnd91Q9B6KeXcS31rt' 1112 | b'OuUcm61fQSCQIgUSpWjvjT8Wxqbon9Tted51DSQv+u7K1/16WZ1DTLkfoApKxzlXqUSRVZfe' 1113 | b'GvPWIrmVDLT11uXmXgEAaSYNj1BVlRSehLjDmJrf9b1n7//pku901BYJHO73Y1+b/cYmpisv' 1114 | b'Ag4UAhFzUAg2uK+VifwifK2N8NkuDxcXbABbqgAipc3FLYeXIBBNTGRJFIQhgFNwPB6uLy7+' 1115 | b'l5m9otAZbZ7fNf2Nc7tuWh/+pRuN1fJK88iNg3yspKrpNq0uJP1edsU/0HPzFx7836WZYtc1' 1116 | b'UXHV/mg9SB2eyWxbz72Xb7Cel8wsAOz4s6PxiaoXlFtQql4aLyqtAmmHdOat+2794YA68mca' 1117 | b'7SsQNRFdSeVIyARxADExQYFDGieWlU8W1s9/QKjat/97RvmnxZ2QZKVsZKeP/cep9tF46g2l' 1118 | b'KlOkGJgXqRP9/Jjxc6+f53ZdLngLpaAMSKuYMoIgEEpbNGaWtHXFWq0cervGSZAyKo4/PFn9' 1119 | b'GuqHkvkb1cQui1Kh0pIkrv21GyoMIlsHo1/yaLzaHxURvzUukS9R1HnkChkhdzJkabO0nVgY' 1120 | b'QBzEgFCKIcPGII2mw3Bu7ak/oVqm1SaPLpy5+0f6+RNz6dfp+TeGvBelJoR2XAG9M9O7bsLs' 1121 | b'm0bF+Ub7YLdUDQx01IhoxlOptHIjo7cpJ2XbtoSVqcem7arj1g6Fmjkj0ja1mhuO4jQOA4+4' 1122 | b'NXkLTEsAE1QUNYmY6WIyiICIWChIv9Ctzkzr+s2VD1OcFL4y8eyF4/+u6A+qvGrUr4lIl8HF' 1123 | b'MJZQmX6E5gtf0FahGQjRc4aVQgjP+smXC6kSsHNQlhQDkp9dOf2ZpZN3+dU/o1GR1KfJLZeF' 1124 | b'9dJOqtVy7VP3LX9m6sA7DjS5NdHRSJ1PthyPrzX343kQ0ZeJEUX8ViTh1WuztqzUl41AxCsy' 1125 | b'CKhCt7Ln6vFRoBVckcv5RO/2oWJlmNmFAaux+NV2MhdRv19uxtk+32tW3dPNzuGZq79tre6m' 1126 | b'pBNQKo8xTmVXXGXxRgdjzt6nUjq8++8oxGX56GAQGhP7A6ch3Z4OFPhKgu5EW9Gni7fGxnvr' 1127 | b'0TWJi5k3yJAilYpT49zSyPUXu+cfMkpn09eu2SKOJHGpMG9VeyciIiVCROJ8FaloPHow7XMl' 1128 | b'/WF1LBo0yKflaL2WL+177Q+r+dsRYIYFYLhGBXyEFy8tGkCB8JzNCnyJmNfXLI6hyMM7MINi' 1129 | b'hqq6yo9s2WsVmS8Khoviw4GzxEhz/htufMf75w6/K2kf9J6DLVjlUCOn+vprNIYF+C2F5bMz' 1130 | b'OwicwF+U/X+pwXpVmTCPLSfgooYuBLHOVZqEnEFYLfOT5LQSPxg+BVqPkitC8IpFka0G5waL' 1131 | b'D1crT0XDTU+hlLFKhl4NPEXCV05O3FaPZ1CBTWlE9zbvPPHYx5rxRJbWFx/+napcmZq+qbCP' 1132 | b'9NY+P9l4Dcx8LtBKbdeC9xV5WM//4zFGedktwjkfxuSqBKx0rYhFZH737n29fFR6Oy5Xk7im' 1133 | b'qArOB2owIwS3df5EgICFsFh+Opy/Kyrbo9qEhHo77m+EnrjKpwcrJOLWtULSaIMpwJoyu1QM' 1134 | b'KwQQC5EECT44gJmVUpfdUb1jUgJNoFAFROBWY9c3NmbfMnPrT56688fKpXvrMqEYmkPkOlHS' 1135 | b'Ce0jKtKAYwmaNIStxbhw8bZFIb7a+LKpFERcEMcwL6/T51cJIlv+hFx8Qd77yvnSD05rtJVa' 1136 | b'xLCbu5MjfKHwvVl9M8QzR4AFXBI3KN0nPids2oSxmbkxm7hfo6o3vOfJx+/OzOHp6//7BHuU' 1137 | b'46nWW86d/aMTj/7ddN/t49HxmjQe+8ufi+dGjew26EO5F51ExRD1bVrvtm0CZ1XZHz8u0VpL' 1138 | b'X+G7+dgt5KrsJy5tSrL/nSaaFbJSVaasBQWb9WIBwERbZ8lbiQTiRWZq+9XMkWrjLitP1zE5' 1139 | b'9Jt9nplVGxvu/Im/+GfT8ze3rv5H/ckJhUrbYRxd8uhBtjo4AiLe+QrCxsS4/CqRBpVvleXR' 1140 | b'BEGVB+uJjEnTxTP5yoOd9t56NL1cHa/P3J4VzQ13d7b8kc7sjRQdrDwgMDwyLJ369qj+vmp5' 1141 | b'zr26mMIv7lWuaoCIMD8XmBMArEA+DAcPwGZG5eWojIi9PkVeKXdQ/JhVI4gZ21Gc7M5mdle1' 1142 | b'+sb6sumPm1nkfDM4E0bV7ORVVSNJk9vKum2gPnLny7h5w9v+7Rf+4G39Z/6inkxDbcQRxquY' 1143 | b'2HcFTOyi85XoVjq3XeN6yVtC8SDY4Eakggfn1gl5Ra6ronYxk9aOuunrxrLmRyszs7dx1B4P' 1144 | b'Horl+jiZFb1ZubaKHOugg4OLEQAyIAooiCx5bSTmMIW4XuQPqXzR28BxiMfO2YZLOjNH31w0' 1145 | b'jlBtolPLNGCotZXAGLwI2WdjVQJ458aaIINA2njqD4dP9hYfbjc7wXWc6rrepo6SobVWhQgB' 1146 | b'3lVSKH7hqLIDCIEsIWCgShZWVixvijcMD1iRACKBg1ckGHLhXWXIFPkZTW2PwpMmgQMYOcEC' 1147 | b'xhIsHHtLlYbGGGIw7joID00ROd0dIlWAjMBRMURZIIp8CLYnOkFwW8VURUofLLEHfBAQ5cEb' 1148 | b'ckKgrV1OoLGDicSwEDiAQcSK2UAryIWFD00cuK596AfSqdcOhicm97+1c9U/6jSPFryHVN0Y' 1149 | b'ZZRSDOIIHIEumWPoYX1QgUpCJc4AICoRtKNBqCJyJAqOLKAYcL5g3p41soBTjj16YxLAyKBg' 1150 | b'pUfcixBtCe6e01JtHRMHeBYG5S6skmtU6pRCS1ygUoHzis04X4op9tRVvsErv23jmjFNiKls' 1151 | b'YAXAB+8pKM89lgggSxV84Cq48dpycd4ksQLbkpQiIQTAlUFdfCjF+UIxeS9MHAJAr3jmAJUM' 1152 | b'Bsh7BCvBhcDEkTYmuaJY/aSqnIhhv6EqbUO/1/v86MKdo9EzppFR1JIQNDvXOz7qfpFMbajW' 1153 | b'FIVMZCw9Nf2mmYP/HaLphmk6GyvdrPkw7j2xPjrlRmcwhMQhHw8M+Xj9MXfyj3vFWR9PNeJZ' 1154 | b'bNPf/SUbLOIAQnASQgqvNHTEmmzZV0PNU5prx5/61TpptOJk5u1J51bkxI2CoxnSWaQhKNgn' 1155 | b'UEMhDZYgFISYNUMTQyCk+t31O3vlY0DC1hTjyirJ1f3t5jdNHfiWdvuWKJ5nHUlQxAjImYzA' 1156 | b'CYSgvCcJzMSs9LjoLaz8BsrTNfXa4dI9ve6nGrWpbnh685Hf0XpWxZ001pGL4ZVlxyq7lN/F' 1157 | b'WBtJLVhoKrTyXkQ5ozgNmoVcCFCIwQIMGYn4cXBDQ20OgNTKaARkynmlvKeeJgNoL6VHoUhr' 1158 | b'jkBwHCgfqrE2SaLB5MWjllEVqNQhYKyjSMcyoEpYNwRQvOn8ChOT1P7/9t4zyrLrOhPb4Zxz' 1159 | b'w4v1XsWuzgndjRwYABCMIikGUSIligozVliWl61ZCjNjeVkzkmdkW2MteUkje5IkalHB5BIp' 1160 | b'UoEiKVEMAgmAJEAEooHuBrob6NxVXfnFm07Y/lFNiSLRFBvTECwT349ab71VVfe9e8/97j57' 1161 | b'f/vbwWkRyxyDUBBBUaQdIANVXoCIxDPB5d7my3eIXOb1WjzZjPdEtd2mnkZEaWOPiqZNrIyp' 1162 | b'x3GKqEVYBDe7DeXKltMIHgMrEgAHYhBCkAxRBR9BADaIaANUDISBCNS1CnB9qBQoglhIAVRG' 1163 | b'IQiXCFoQLudVGb6adSIitFlQxloxql2FSoVJxBXhhtc50Zoa5rD+S6oMo/odg3CsNv4gpXeh' 1164 | b'n0csRJ1njBEYKCeMKDfeU1F5B0OltbWG3eixz/z7qZl74qjOuPHlRz/dbMwgiom8dwoJiWQz' 1165 | b'7xFCQCKRQP8AMlz2gOIDhkCGlSIhzHx+aXThgazcCALDbKEsi9QR2fWNiqG2uzN9V9zYrbCu' 1166 | b'UefjY6P8VLt1c6N+S1WeYR+ltdvHoHPXT+tdrk2MsZeqWlh7dOHYb6w987FqbTGKY6yb0SBn' 1167 | b'nbGrDdjYPXu5fee26ddkRazNtWHoqyYsB0gASMREiMK6AFzOBk+140bQLSkuPPn5n59r3d3a' 1168 | b'/uaMWoq5ZrZDHFNUJ9QoGgICslAC6BCFSAAY/eZgCvGYFXa5HFxKujfUGrdG1XJWZap7C5As' 1169 | b'DZYnWzdw1AUNQhaEEQgpE6+DeKUYkRDIOfEuOOt16uzg7Nkjv1+cfVytPR33TpYXBitn7g/s' 1170 | b'uwe+d5x2APs6xKAocJDyitktCQzkWfUQAcFQ8bj4oy6ezp1lioGGQOAqYFQIKoTKBAxRHKq+' 1171 | b'orRQmcHEr58hEyoCkhYJI1WIDiFBQETvkQwxoIw54OiRkN9fxdsNmTHGSmVkIghc2ICk0HAf' 1172 | b'F0xOg/FTDMRqMoTlgCvMGhBRIgQAKrywUE+kxoTBBSIU3NwY4OWcDBAgkW4jtoHBEcVmRmHD' 1173 | b'IzA3mBlAiVAIgkiIgABBAl1BwibegjBSgM3ZkBS8VMyGkQUscKjKIF4xk4jdXDpXtd6uBEaF' 1174 | b'4oO3xEoCMykvlpj5cvqc4KvloE2qRjGV7WtTc+AiBgyMyrgikIoqIKW71FsNo38b4/lq+HQy' 1175 | b'KG3cwrDi+BRQSbIVxABWiCCKnA7KKBWggrGYVPvisXt/Z5DDzt177/v07z5++Eu33PTWOEmB' 1176 | b'Rs4RaxYQ5x0SBglIJBCCBMIXtvgT0AEikkJBDBDKwerCU+dPPVHPH/WjUo1zk2Q2xvF4XOVZ' 1177 | b'PLV756Gf1kkUQoMFgu9r1rXWbWTmyGwpRqciM12bfR0mHZB+FLconldOM5igGBJqdnYIdkW8' 1178 | b'd6NUcYlDO8iSdP91d//7+uTLRAYYp9fq2159hLUZz2IAFCtlkNLb3urKYnHkIybu+vUvnz38' 1179 | b'2xOT+9tb3jFevn+j95f1ydtJTRIaHzIiEudI6yqgDwoJCQQRIWDwENABiVFRDbeo5iFPM271' 1180 | b'EZWY9o73tGt3DsPDuj4lqoURMIgEFkEgTxgBAqAEAQBQmliB0lJBrU03jntfWu3dp4CklPX1' 1181 | b'RUvDbvOeiZl7KIoFkMAgAWHBRFfSlFZYRVXEFXpTB/G89CHMT9rWm+shCnZNc5vAiJRMFki8' 1182 | b'TRnisV4crn82qkpdm1Ohl116CKKWjrbx5TYhItAoKggELDD07aiPaScjK0vvzy59qbHlnzjh' 1183 | b'CMeD4UWlVGGNjiJWMhwN66ajSsnGJykEgzgunwIptJ4PflO1jAGtc5HwSEEdAQmrcFk8gn97' 1184 | b'9QARIEdrgAPlGZbMLcaICQtUGDYtxhCAiDZv9iDhm1RXPYAgsQ+CyIDkPDIbDCJKLLhYxYoZ' 1185 | b'kIDwq1vDa4KAQDaMFMci6CVjjNXl0vNl09TL+RuBEMQqG7uKmIIz4GwBF4FLU0KhzbDoeVPn' 1186 | b'ZF/Zuz+qjiXJCHhXkDLwUyixkjuQ2sgggoBUYVUUBVdluXFvf/GzXZ4p1pfPLf3BaHRx48KJ' 1187 | b'T33yo3fc9urrbnht8ODARSbdfEIgKkTenO1EyJtD6V5QOO+RCIE27UNRUS2Nm+2JUfNGI+u+' 1188 | b't1AWo9wt+aKELIeNx0fxbGtiF7L2ULBOAZoQFJBGLgs7Vsk209gd1VpxPGWieZHIgPJSZlTT' 1189 | b'zeuTiRvH1Zly/EwUvPGqbAbWMlp+XOHExI67+3KhRt1r9X2vnrAEADxAEOTKG4LE6K7GbetP' 1190 | b'vffS0p+uHP8cj5Ro2lj/5Oql+7bOf1dIJwSAkYP1jEMAQgKPY5ZYPAWpGAEpCAIgMmqECLBe' 1191 | b'cChwpIYb9e5WbB5SXJ+cOJTUtwWKkAxBJIEEPBMDMBIhiA8OwBOJD6P+xkW18NmlI7+VXXos' 1192 | b'G47HZVa4YS6Dscu5d//w2fuqtUVQtVp7BgNCcMAOr6CMRK+z8X1V9Xmtp7mqZPU/BXvStH8c' 1193 | b'Ng6vFL+ITIb3k2JwSVaITofWx1b5avlwtXLY6G1h/GSx8bRuzppoq8ialR6IRomDAJBDJFsc' 1194 | b'vXD2vYmaaKXb+0//Zm/pY5Nb32MHC0995T0RdFvdm41mCb3+2rHehUc6ylXVYjZ81pfWl6Oi' 1195 | b'vGRoWptdhMrLgCgWEcWKkDnoEDyqCkBvhleXvw4CgITgAiFKgcgBjUdnEAFMQRATb0YlX2Ur' 1196 | b'EAkiciXCQgQhAmDvEdARcvBaAtj1M1SLsuC0AEkY2UKpiICu1ZYw9+uKU6QSJGaCPKwabFSD' 1197 | b'JWBDtBkYbiayBAEQpKARUzJe+FDiJ7AxqVWyePZXa64RJTvrw7+KV3oMH0U4P7QK5Trlz3C0' 1198 | b'jYBIrkO6ARQKDREVBKOCirFS1MJCL5567+KxX149+1BWTdjy/MVzZxrJzJ7dt03PzAbGovCA' 1199 | b'CtAj8OaZDCLOV0T6hU9hAQEjoKAVrFyw1oVAiY67Utvaf+YPxsOLGO106yeV6XR3v927teX+' 1200 | b'sW5zuzJbLWlBa7GHVBACkvc6BTOjJUIgiDrAMduAyKQH7EkXGsqN8fBomjYnp141Gi5IbcvO' 1201 | b'6386RLi68kCtfUg3bzCer1WPydUn3QNg8AEdIgILIjBWCodZ9nAYr2FPOzyDBLZc7k69a2r/' 1202 | b'uzWlLNrjUGMDfA0xEsoBmhoDSgARIEQUIkBgEKpcroIucJhwkqoO1aZKrou3DG1QibA4CyTM' 1203 | b'vOluisEjEQgA0SZxuWF/bWVt4fgD/271zMdT14uYfTFQRVYHiK3um7EQxM350NqZtOdRNDrj' 1204 | b'xVwpgCBwZZBKPk/+jzA76TMvMhA6Mlr9tQDciH9EaMrReaY2ADO7ABJTvTZyw0sP2KqospOh' 1205 | b'ylStUWUXC39GuGDdZkoJBdAjGOO3ZksfPXv4F/LeV8pLY+Xt0sZXLh75z0hu396fBL2jxIpZ' 1206 | b'B4ikOLNy5s9dWLXVJbIuhBFIHwkwWOvPVKKNapMEgSWWDghU3ioVAhDh5S6ly+ESuOBs5JUn' 1207 | b'UhAp5ML3WJCCsVxo+NuHfwhBRBBhs9703OsBCMCDMAEFGBJ6xRF6e+bof0g6c9psN16BpwqE' 1208 | b'FDCNrpXNiPOGmLycrUZLJmoZatrR0qlj72/P3Ka0ApBNxkIEJEQCE5IBqd6RD9DGH6ttr7aj' 1209 | b'Z9eP/C+19ju9mg3+k8PsX8L6X0Xl3nGch7iIs31Qs95HYETigQ8qhBYRA2Xoo8KPR8Goie7M' 1210 | b'xPzG6WcARkO8ZPysoVRR48Szz37mgU984ZEvIKb79h5gqkIAEA4eFHsiREFn6YXWL4sDCZ7Y' 1211 | b'IwQkgxwF0oKq6n1x49ifT2x//ZZ93z26cF8GNP+qX463vnWr2sVJFEwbSRVhrMgabEPQGCJr' 1212 | b'Uq0SFSAEckocOI1SKAYAxTGxIG0INdqdVyfTr8iqY0pfN33wJ1r7vm9+/p5gO0mzuWlje02+' 1213 | b'11Wn7gUBmcEHkYAhq/KFUfbscONEntN4VYIbUZrU9VRJJVG9Wjmp25PIXUUKKCvyIjYdCUgC' 1214 | b'Zf6YMVuUngnAFioGSwDgtdEaCNKQEihvug5HBpAN+apPmBKw0SWKB0gkgAUxCrxs2rwTChFx' 1215 | b'a2KultR3/OhH6MKFEw//Sq//qNLtmmJDnJW+vetnb7jle6A5Z1EE0FnRBtQ3O5tYT/Z49yq7' 1216 | b'cTLzJ9NUs1OjpScJ7FT6sxDvLzVY21UEWkOeL7nxSVW1Vb6ISlfFYaFIq6btnymdjSb2qnRK' 1217 | b'KBKwiI7EWAsY+61bf9GeWu4vfcnZKCln14YnWmRb8S9C4zavoHI5YCuqzdW3vfH8YNGOzkcJ' 1218 | b'KFwHVwXx2fDEqFg2yUS9PQcBfDFcGt67pfvDQEAKK1EMdNmtIgCiIAYJ1rpchid4Zj8Eg64A' 1219 | b'v47RHFiIQYXNYbeXpSYAf18DZghAJOKByNpiofA2SbZUo5X+hU9O7nxlPb0R8jFIr9GaLMDb' 1220 | b'om/iK3QmXCUSVjYMoUpt9uUKChPf1Fu+N1/+PPNPSvCIGELAzaYv8c45FRxHaazvOvnMD7bM' 1221 | b'VNU7GuVZFLdcI3L8Uyq9MxqvQv7bDZjJsFV1KvK5BSTKCUcOxhw0AgQpPdVEE4FlYEFTpjFa' 1222 | b'HRVdG5Apsm41IM/MXH/LK954x8vvEfEBRgAxkd6UOCF4wEi98O0WpACQnBcRDOIRiJiYcGQH' 1223 | b'c4d+amLfGxxEuns7jc5F4LyLuH0b1kF47KFshKarGsNivVHrOgS2SmkADSSgwVW2BB0zjAqx' 1224 | b'IghUMrNq7VO6XbrzUXNnvX7Q82BUQLd1oN7IANYr1zD6RTLwq2DMyMEbDEpRZMLYj06V/WdN' 1225 | b'9mRa1kp9aaP0WNmoqSDOwvrhIua03pWgs+rCevXhJOqCnwQ1OnfqwyZqm3irFyytR6iYNAg7' 1226 | b'5BAyxWP07CPxJAbMuDgfxdZVEygEJIQWIRIBYEcgQTwREzIECA5JFCm9jq0GTq2c+7M0qiLd' 1227 | b'5Yg5nbd1Tky/s++NGw7Jr0dQYyWOBhaDuoJifojrHHJlLykPDmsR9hAGjBOo1lRj3wqds7pt' 1228 | b'uBXConLNYpAvPfvexVN/MS5OsJkAvaL1DHISyn4zbdWbr1DxASemCn1FgGCCw4yyhd5fXTr3' 1229 | b'8Chv5GI5m3dsxuj72cLF3ueG2bDL2xITAYxHg6fHG0/YPip2vipcoRV1gUxitnc7b1Q1hT4d' 1230 | b'9M6cPv+h+YnXQFQRx4VnhQERgwBIQBRE8b60rtg4+xEztYM8h/6pQbkW16Y4RACMBIgCCLRp' 1231 | b'7r4pCwgBr7Ql9IAU0AlIPho8lQ8vxuB7K8/qtaeTzss8pMcP/+H66kO1qTmE2Qhb18yCHweu' 1232 | b'spGdDcXx/ujLzsHKwp9OVDhx4J3WVlk+dtZrrZCwqsrBYFCNV6gal3JueeWRaHGhVtCQoecv' 1233 | b'js5+cv3MbzT1gWiytrL4/zSL6ZjzCluKO0Qzht7CdAeaMSuPkninFW1o6ETj5ezcv1l85n/z' 1234 | b'1SLkplZIboqqJOHMofnud/zrfTfcbUPfe7W8dIJARXHqbZnn/X5/RREpnbzQm8LK50TIpBmM' 1235 | b'AsVMTBVBXk9m0vTmSrkBjKemb7Iy0ehMkS6zeGPoMs0TOhiwY1LaRFHJK0KonFHiS14HDOwS' 1236 | b'KZSPWOcmwigCHZVKCxtqIoTV1Qfq6Khzd8JNOfvXK/2jcXe/VC3N4UWTNbA34jybChmKSshM' 1237 | b'Rq29zYmbh+fODv0xl6+nVRqTV7Up1b2nvvsHOukuS82BzpucDh78jWLtvtbs95556ter0++b' 1238 | b'3/YTLp10YTH1bYQIOQfHoKiUYYG01r+vXe4B8KRp7fQnrGytN4J3glVCEkElqFBwmbBFqBAI' 1239 | b'AZCAeLOPlWsBVhbeW65+eeb6fyG1LXFho10va+z9Xuu+7Mf1bvNWUgG5KAqONJNNv65os6ly' 1240 | b'FhGdP+yrT3v3BAYxgKTZU1oiSb2LS0+4kx9rqJ6YiUQdWLjwMfRrW2/4sTip+9462Nw5VdcU' 1241 | b'sgpUO7iWjkJgbaKmJiU+8b73zIUPn/3U//rMo+8FD770KI2e749kPau2l2sXBxeORlTD1ny7' 1242 | b'ObPw+J8tP/EbVJyUgBljxqtGWAobsG9Y9S98xdsVb/aEtQeKxS+66a1R7WC2/KW1tc91mrcg' 1243 | b'VIXjoBjRF2OIVerL5bVLnzA5K2tXsvvTWj2h60UB0ma6C7+6i7y8oboSWwGAIyjdUDgBjtNa' 1244 | b'xw+etv0ngr9UNjO4mK0/8X/1Fj+998D3pN3bvYky3oggeT7r9O/Ce78s4yZ3kN2oOtqsVLXx' 1245 | b'pJIpgLJcObfxlV+6dOQ/TjFv01YAACAASURBVMxcH9oHBdhA2Ljw8Yc+/W+XTv7e8OyTlDfF' 1246 | b'NNb90GHPDnrF6FGa+aFtne+G1R/PeLvuHGCXBT8PbNAUZBzwHOGMIAfKmBMXQs4hzxeguFhr' 1247 | b'38K1WjbeqASgKH3ggcSY4dPnjmy7+WUND2H8AXdp5ezjvz1x4F0jlaz99b8ZLX+6e+CHGfog' 1248 | b'EQA6B5sLz0sB4BGlsIwcrAwESkS96VNcVkNCQVQSALGSwMFDAADq4xUMAJg0bhZP8G+MSxRA' 1249 | b'RJiKEgYVi0HVbHT3AyQocUytlOsMm9PfDBAikoK6AkMKgElBSmCAgAwwAFJYV1i5zFw8dvHM' 1250 | b'b0pnu2do5qdji5nW6xsfOPzgbxza/26Kd7GuQPRlgcx/NZ6HDgs2I0wRhaSYnbdrKyvHi0uf' 1251 | b'WiuXc1uyV6gYtZmav6O943UeY8Ca59SHVNmvLJz5ULHy7OLiJzb8tt37v590vSovuhByCaJ1' 1252 | b'z5m6GxtpRQ4vPPL+5TMfntx6p7d67dj7eGZrvba1gtjqilRwynsCh3V9hSxuWS70s8Hu7T+a' 1253 | b'TN7TmqgVxdGpPe9KJ+6YqL1RpYZ0TViFwEYSJA2qd6ULT9RUeEDJJMgYIcOAGBRDrNfOw953' 1254 | b'nzyxdelMY+amd7v+0vkv/GsVgZl6c+TdyvmHa5DHEK0HP1ZFLfajcKrA8ciVHCMxQUiVSpNo' 1255 | b'Nm7snZx7xXrP9wdrRlIZd0NmlNjawXve9LYPbjn4tvb0tt74nNcrs7vfpFpv5vU1Wy6psjKW' 1256 | b'y4CVDoPRs5Svrly8N5L+YOExV42krGTp8xtP//WW1i22cxA5GAYY9zfOfX64/AntLvrMxatn' 1257 | b'IhjY7LTNim7tlVSfAV6xUN9kpm8949APtgkg64tjNeiPT/DGYqvWHADGWZSHZTdRNPe9e+b6' 1258 | b'n7AcQZXXigZcCz2OiKw/8KvrZ3/Nrn25xpHW05wAQiizhfX+Ixt5OnPwX3T2v8VDKWPvbJzO' 1259 | b'37xv2+1nLz2d2ZVxsQahgbYDBbqhMttecePdv75S/tGIsTv/B4LbhR7w9TyK/luvoooFqME0' 1260 | b'gYQIDI65yAzXlZoOjTuSyde36PUrJ383lKtFvJML6Uzsn5rtDXqrl87X9syerrKPgLlzsHAv' 1261 | b'V30aPnrpyO9Ozr8t3XZ3kZPROSAJgJeAJIibDwlmCnlWGY4UoXMeRZeFTRKFGFVVUNo5yQGB' 1262 | b'WRFCAHoe8oi/lXp89ec3dk3+/f8EXCIcqwxVfOnSvcOzn64VGxVkDnRYeXD1yQfnZ97a2v4O' 1263 | b'0QapCKTpGrUOXH3SfbOdWJQIIQGhraqljY1TGjam5r8nW1sZDxbn9n9XRuXYriYTbw/pKD/9' 1264 | b'vmj5I6Y4vnDuoXF/ucqkHFhRvHHh6Fe+/IHjzzzU6W6bmtwZbBEbQS4LSEKkuHTnj/zP1eKz' 1265 | b'q0sPV9Ujk/E9sWo7fynIaqTaYmMGMnDF86CoXpvohmS6JFJJqEhBfDOicdjgtOUQFCOTEfQ2' 1266 | b'rCueeM6kMiI6SpkaIiMnFxgF0QmWTC2s/GjuLnLX3/vB9zkEWX/yzJc/uePAP63P7T31xZ+P' 1267 | b'1OmSO4q8+HGUNtGWs3PvbjZeb6L9JukqaokQITDX651d3S17jx37XG99sRh675W10dL6+czX' 1268 | b'D938VlOPnV1vJlub6d7lxeXZLXdcOP6fgqxo0XlYkcmdO279adO+odXclQ9OUb6YQhSp6Sis' 1269 | b'lf2FePo1jZt/aJyDMYFDzqqRmnRp5cFzp/9IuSfRtD07GwrNBiwWxYlBdiTGCTZtuBrCEmEa' 1270 | b'2VNP/+eF4/8uHi+lnDgc12vTKppVSAxFzF1GQyyR6wLR39Or/q0eVDqTN5aFHm8MgTdCHEAj' 1271 | b'exVFAEVzasfLZw/9aEXsqzI1KcXD5Wo8oXcx+xMnvhKkLEuFUi/9EBnyZSyqC7vnvqfeec9y' 1272 | b'qFpmPs8ex+QNOn6l101HSrhJGBEKimBgpxAJWJWIXIgfLHyqn92/48afldqh8yd/75Zbf23+' 1273 | b'ZQ8d2nPuYPunxvKROCm5/hozVuXyo/5S7m2+de87td4fqcXV3kqUGGIGhE0JIQI7i8w5BK2V' 1274 | b'LkuLIEoZEMyy0XhcpXUElKIQ5oRIKpdp1s+71Qz/Lq72z914jBL3cBCS2U57S1g+YpxXbdTx' 1275 | b'dFwcHxaZ2f2q2szO0ucgqK+dp/tVE5aHgEibRW4RIfIglgUmZ36sPn9odP73qnxwwzs+2dn6' 1276 | b'fcGfMwlLtF33j6w89WcXT3xqnI11vLXXL1KeHPf75eqSLenQnT+wde9b/FAbiBmqATfrNCKX' 1277 | b'Rdzonf5DWXgKpRfiNAzPjbOjmVuIk8ko2sHAGLyrhPVzXzDvpMB6YdfqUbyeX5B4fyNprp04' 1278 | b'GWbrjHGQkpEQIiRm9hCir8sp/M0l9IBAK0V4IgQ2tA9UXuGQcD9qM3TLbbpj6fyTF47cO1x6' 1279 | b'uj7RGGbj9QsfCb0/7e58czT5nevnD0+1t46zmbqcxO4rTftGFSeBAqImcoCl86SRjj/92U/+' 1280 | b'5X/ZPvuyVmf38YXDtbk9B+5425kn7h0UywcO3SW5D544Hpx84v9c+sL/Ta0kakyhmix9wGhy' 1281 | b'dsedNstHvaNKi80tx0pUgZiXKlXbr7f1blfXuXTODn0UVbrbmbklEZGl4WqUB2grmtBxGLtF' 1282 | b'URAl22rNeaAGXA1habTOFNMzr+rAdTI+Y3GNzLR47NFGqmu6KqrhuXMX7x9VqyqZjZsJXAvG' 1283 | b'EpGNuJ5O7NXlat57ink2TXeKD6UzSvfLYrkaDJrJtElbg/FGoqUJ7WOPffgPP/DrZLlWm3Bg' 1284 | b'BgVKHI1tbdJMnbnwQG/t/OyWV1ItRHkC+cg0d3ueAoqYphS0AFlkhBAQo0Iph6jziktvDC4P' 1285 | b'/rA19ar2rv9+dv6G9YU/jbbc3e280a39Tto6Rf4dOW3PCkkboRbXILFqjnr5ytnj79s480Gc' 1286 | b'eG2SNrVKERUCCggChQCVy6M4LjLRyiht7v3cx7bMzyTxRFqLyrLX66+3mtNEKFACCGH8YvU8' 1287 | b'crRhVcNJqQfP5Iv3D0enTH2buNlML6hxQ/vG4vGPXHrsVzbOPalqB+r1nddKznLVhBWAQIDQ' 1288 | b'IwZAHwQU1uJoegCCJmBPTHxjuu/uynC3tsNE+0IV1Myd0fybzy9fwGCrHMp8XBRqxDrPmy+/' 1289 | b'85/tvOV7R4gUOSQc2yB+RCfvXXv899cu/vl4dMFTw0nEee516bRtTb56ovNmC5TBgJVHjXSF' 1290 | b'QicySgH1KOBoLU12kWqunn3iyKd+f/rG16dKRxKh05UfWY8K06qo+AqDHhUgYiZiDR4kusFi' 1291 | b'XgAhveLssS/2n77/zNPjS8VaYqJQUV45tqf0Sj/d+YZtd/3vOsDgzMdp9rXbbvvJbOHxVc6a' 1292 | b'jS2g47IaEylCALCCiEAPPfipPXsOfNf3/R+xnr334U++/q0/dv3NP3jwhjdu5GGya5LaVhfx' 1293 | b'GAZRUa6c+ECc7pY4VB7aeF1UWC6PZktPlWuPQ/BRumPoKjYi0uCYi7Uj7QvPrrhn6s1ZiucF' 1294 | b'lQ5QbDy6fOavwQ1iThJhFQjJe+Un51+VTHxHxY2r3RLmI4BIhliPpnfb0q+cul+qVZfWJltb' 1295 | b'g3Amjfrcd9a23VnfusMk20Ca10Q3KiI1KdaOf+DSM79j+8OamYBohI1hlLTzIhfOlntfysoq' 1296 | b'aV5PSUtjsnz6/vu//Je33fKyg/vuOXtusTfK80rGxXjbtutu+b5fuPWef96Y3EHNbYpTBWNO' 1297 | b'r3N+FrHHJAriyxo2CUCIqHRpS1aoDQQvRkvSnW68nb3fkI3tgrlfbtQvmWFV2BCSoaKJGCZK' 1298 | b'slzbCWlU6a5IPtvct33+LWbqxiSdENFBUEDkcp8AKBVbPyYCRQrE//kn3puNV/fuvQ2q0Sc+' 1299 | b'/iFinJvb7rwLUmpObEF8LSLW54GxLRHGZx7+tTOf+5nywmOYpj6lZqOm21vUyBTlSqARZzt3' 1300 | b'7nl3Y/tBNIh4bRwgrzp1jwAoEILf7M0JyOIYKWrV7EZJauvr57ZXjA6hhLQ5KLjFRQFQukUD' 1301 | b'y4vLC4q3K71tveh77XpZ/xOf+fBdoK+//bZAiNzgRDfAr6XGTXf8wqMTeveq3tgY9faxydai' 1302 | b'AEOa7UHINGlEITFFWar4uUPN8TivR7HPi0c+9x9373nr1IG7Lj7+yNrFx9RoTak5u3Eus1lr' 1303 | b'y4wDa92ESZ/jn3z1ps3QTUXYBqNBwNkZIE16h5m8c/n04ujiA8rlo6rbiWYABhkpYHXdrveU' 1304 | b'rmm5qG29be76144I0tt+RgYnWE0CmEh1GAE82BBYiwV352u/r9PsQKla01u73Zs6je2NNIbm' 1305 | b'3nt2zOiCXd+rVFp6KmCTW2gvPAZVw8XRRKsOJCXNdba90cPK8NQnXLLRpHbTN/J0JVO2Gx2o' 1306 | b'w6wk+3oFp3EVy+rS4Y8OLn5GmQxqczGJhJFQSb4LoeotPdGyu5TZArWrY5SkhjlkKdT0yuNH' 1307 | b'H/zxFJNG7fvt6NyggnSilXS53p2v8a4SekqUQntNIiwA6D376OnDf+qV7Nr1GutPjftrNXNz' 1308 | b'y03MzOyH+j1zbK3LWGtHZemiePL27/9vXh0ZB5W7/+GHc1u9823vvvezH1xdXMP6zpFsNLvX' 1309 | b'A20IpKDjrFyHWKU+hVACrQNECClCKiABHAV2sqYwVqa2Vp2J49u8DYwC6lzJD0y1j7u1WIdW' 1310 | b'1J1h5/3wmUKtK90W0Gk8a3xURE+zvBbmX5GwBVG2Csik1GZmI4gAAhVFVksMIEO1VuPs8Yf+' 1311 | b'8ra91z/6yB8/feTca+95A3jFAh4pQEkmB3hxfH8inNQF3LD3X8Get69ePJNlj+sQygGUemM2' 1312 | b'YjECe9+6680/DsAO+ghX7NW9WjwPAz+PQORZAIEIAYMAInoXDEe1VlPXI5K6s9ZDT5lIQbpx' 1313 | b'6UuHP/mLxcKxEqas1If9vDA2X9TdrTdYpY8fOZa4idlttwYxalMw0bkumrs1721E67aijTyU' 1314 | b'qjT1+FJWra30z/T7zyjQtWQXSqQhuhLlKlMgOlITG+fve+QLv26Hp9aOL1zaGEx3JvLlJ449' 1315 | b'/V4bbHf6buE4K1diXQA8t06kCgOQFJGRQ8ABICrd0SpuTh/atvuV/cWHG5Y01HrjDU5H/TAq' 1316 | b'zAb1N7qpLqO5qHN3zE3rche3m7EmpQBZ0BEGCeydYu0BSEepgBmWa61u0pnYvnPXDibwYmJy' 1317 | b'AEkhjy1c/C8rRz+08uxfQGX0uGQTiUSW1vJUzJZ31ebuGGPF42cGeqlOianAJhulN92tb8l2' 1318 | b'vbJRn4mTpnc8Wh+n3J6dfHln+vZ+no+yM4FaTmWsZ5L63swtA9oknQWdwNVEWH7cA9ONquzc' 1319 | b'g79pbHrzq39Vp3NLp99vJl7dab3M2dIXhYZ5JXUCE75h3OHzg4j4NN27/Tt23PE/1WbvfPbw' 1320 | b'+9N0xswcDOVF0lGo7yqNUaZUGBixpDyKCZRBcMG5+7/017fe/oY77vzhbVsOPPTwiUP7t7Rr' 1321 | b'uzEAuIygYQmCrhlICBUgBQmAAREQFQiCCGpVgdM+KBcb1Y4oeNuvKE1ka6p/QJvbKD+nGmbU' 1322 | b'b41W4tFIjQqvQ1X06uDHCRWCzbFZBTXG0CDiIMLMlx1gREIQAFxfWvzoH/9Bf/WIhvXzTx+1' 1323 | b'w7ULpx9cWXp4+5Y9t9zztlCKB9JaVTbTysO1qLo+DzA7CNWIVNnZBfXdGxfvU65PrX6SHiCw' 1324 | b'2frDa+cfnZ2/gXnOV0VQoq/Rg+qqCcv6kSIDQMGjIAYMSCWSrTBEhOjJlhyQSEfim5Eoj+cu' 1325 | b'rJ9vtndef+u/jFovv3j04SRzG4Vh273+NT/yqnf9xG2vet3E1HYwjCYwEKM1lcp7p+3wPgUn' 1326 | b'iqrUUeLz9fWsNzPz/Vt2v70xtTtt70M1VUkucXGlKRQI2tlRjums6a6f/ujSUZSRyrqjjQuH' 1327 | b'ly8+0Gl1br7r55CbJReJmgg2oSsYqARMhbyQD1KEEAx3GVvBQ4XZ8trKM8t/UvT7mjJvomxc' 1328 | b'69qtddWkbGFj8UR9Znt960GANPZx5ANxW4gciHMZc46YggDwAId1FQUQRpMXPnS6e6I4EYqM' 1329 | b'HwDDBmXB7G3LfLRyNKoGRShLCiWsQN4Si5xMTk7ek8YwPvXHGlTSfVVZDlSce9rXLptkB9nk' 1330 | b'QcYCM2OEVAvGE2w710f1nUvn7lPFqNPcX6mLludmdv0PzdkbfCPOOY0ohashLFKJLRwmUG6Z' 1331 | b'79z6A6U+mARcevaPanvf2Zh5dVChVF4nc47AcwCia1ItEpFxxCnOjMTl4Wx29OM7d7wD5++p' 1332 | b'RVt8uaJbk6WtJxBDFQXQATfi0EEoGakcw7AYvf6t7wgUNWe6kzvnm/W6qk2MxUWqBqECZgWk' 1333 | b'+v0yBoAIMCKMARxCgYgIelz6OicqrDmdVVzD6pTG+UIPE+yP0qSXKHRHzGhxuJ7mVbmaDhqx' 1334 | b'zldLNGdLW7pqAWWqXZ+qlk6EdHsUR8x6U5HvvGNSzExQNJvdYnD+Lz/xH04//XDk4m7NKDoT' 1335 | b'00yjPlvma8vDo73yXK3WMTQJPnmBe6iviCIErSOObJDF/PS9vdMf3L31TdjcZ+zZYf110/Ov' 1336 | b'08MLZ84emd16l4aWDh6ukXfm1euwKAJAICAGQiAgAo2gNWpAAiLWigkJQDEAAblosnMoqt1W' 1337 | b'n5ooR09/8nOfvuWN79l28Ds/89Bf3HTTLbtm9hnV1klUuZFRprRVoTKTrfD4vnU1ouY9powl' 1338 | b'f7ZsaKouuNre3a/4JV/fbeqRoljpQJDgFW4Ab9d6oyd56cGlE5+9uKwoghLOQTHdNnEw63e8' 1339 | b'/n/kqRsyLhJh9uD1FYVGDMBABExomGJAks3J7eNHVr/wTznUxrM1vbG9VeSjgnI5c/C1P3bb' 1340 | b'O3+udsO7azMH2AbNAQx4pTd7jxhYcYyQAgIxICRgBIAQQUFiKNaXlTCAGAcqFbhQci2aTdqv' 1341 | b'GBXniurRFBvDnqHGQjGOY98frzzk/YbtTLd2/VhC2yt31iaqu+WHqokDG7TeFQx6HgHJSIAQ' 1342 | b'fLOJ7PtPLp/7Yvf6d3W3vSsLpldcmtlyK0gbQVKa+qpc9GqAgUmlPEOVrsXF2J07O4gO3vgj' 1343 | b'AqL0dGS2EikmVLhpqnINCIuITAhkFIVeqNZWYOf8oTdFPAmmHcxuCUnEgkSoNxvN64JApASI' 1344 | b'I96773oEQwQA3OlsidIuIUbEgAisaNNNIo4VqM3SHQIgKAADwIBgFCECcJOwrgGZO8AQQSTI' 1345 | b'kV2D3vvL4nFlrqtPb09mm5Odm6HqjU99gcgUwn5QtXe9kqbfkuibdaMLYBAZgQiJSQGAiAzQ' 1346 | b'mJXBtutv801jLx2ebtqMiraOuLZRd0trJ+6rhqdn525rTuzSUkda2CyS/EPisls8ENGAXF0G' 1347 | b'9MziF+YOvrM5/06O9w6GzzTa09w4yNNvmpi9XVGFMVh+8dwarv4IMM49Rczgjh35ijH173zn' 1348 | b'j27ZdkhBdeFi/4ab7gLioiojYwBZkyFMMdecTnVmXtOs7bHrRzFK5/b+jAzap8eHdx28M463' 1349 | b'BChIIlfpwAPGK+inRmeq5Q8de/B3eueONDHa6Ekl6USYHuqFTrNerR9u2FE90SXb0sWxLq92' 1350 | b'gnQ2emZu+lVbDv7crvlbz574o1Cb6ey/c+H8M/WpfdsP3aJN4gHQO8UIQHj1sjkUdC5CTI2m' 1351 | b'ABcHg8/3B0eIqrJqmOhcWopCau96Y3P/d2Uyv737ekkbTNqFDRU1o/pB5BjIxukcsMZw2SYm' 1352 | b'BKUYKXgGmdx2B6iujoIH16rvBY6AnVD8PHINASoiFCHvQLGK4rhRbya1rVconF+bshYieYtK' 1353 | b'URSb2NSSdEaEAYEQmZlI/c0R5fIT5m/Dxuddy/+mUHl1QYK0a2/h5O5KzlRYpMnb1545fPzS' 1354 | b'x29+9V+o5g3nT/3WzMQdob0/RNFmQP+Nn4Es6qa5dObwxtE/S/JlH+qUYhKDUomp+cmbbr3p' 1355 | b'Tb8Xb7kxUq6kashTL86GcNNhDSA4pRPdnIi7U7tQT3gUCoOotgXVBIAmEFYaOJZr59HxghOW' 1356 | b'85YijYxIAqJ27rqp2dlhMdq7c6fSnam5rQFAK4WIIOzdplkyS9qy2FCii/Fxbm9p7PjhmblX' 1357 | b'rNunVG0+NnuD72tVY0IgS1fYEnqaMtOv6R54N2paefYw0OwqYAYXO6ahYiV0zJVPlTDSM1uM' 1358 | b'2WnXQSVXF7LGvB1ah4KqQV6cOfe+Hbf+d9e/9oeUc6cX1/fsO4RRHQEipQDE+xCE6AqUhVcA' 1359 | b'0FiEJJDmorIXsnwliWYbjdtGvZOmPh4tzfbGz26/5Xvq+9/TnjrEZd3GxEgIhnRHmW4gIk6U' 1360 | b'agSoSBjDpn8OiQBRkjZnIJopLca1GkcNpTtIShA9eL7KOoyEIOCJEJEBSISIk6Q+iWiuwAvX' 1361 | b'iibQO2GlACmJWwDx5syFzU/yNWy16Vd4+Y3/GuXRN4eDkqiueJ5pH2A3h3VQE1H0yv7S8akd' 1362 | b'd5kd9yTN7VwObYDa7CsyWokg/cbPgIhKxvc9+iuPPPhbqr8Ya9JJP4kvMDmjeyYMk2Zzateb' 1363 | b'FaWq8srGQasXa/qaDQCgnLdBXJJ0BJLKBVAmoRijTsBYNs1XyACyQKBrdMJRvm7C0bWGcw4V' 1364 | b'lVCB9amugcB4XHISGSiJojy3pFAZQhAC9g5AjVlqHu0wjGIHoX8KY4TGjYl3Wb7gIGnWJwCq' 1365 | b'aqRNmgpZvGIyr1hzvqWSk5/+tTNf/JO4tn01876qtfBUunv33W/55yrdDWmz8FD6qhWbb10n' 1366 | b'smm5i4GsyvKQ4+ry4rO/ve2Gn5fGdDpePX782IGb7qhAw2bxJ3gfAqur1ncLjBDY+cAEtszQ' 1367 | b'B61rfmwvPvrjVWvnls47HnvwX9W6u295828WGCXWFNoZYLTeBSCtAoEEUAKBM/SagwYGoFAG' 1368 | b'x6IVYRWgKMtGGsHmSCtAQXAyjPAqtxhBPFSCwmgAyFYAIkrjC+2pKQAggAK2LLTWQAwEAeRa' 1369 | b'KaqvFpUsaZgBgMIOQxghDpl1JDtH2el6LQ2qVkHDjFcLX2FtKoEhfMMk5MszL9xqsbKRjwF4' 1370 | b'dOn8+0YXPqPdRNKcLIxvyGCUX4inv2P/jb8CzRZYXUIVJS8OZbnLs6SttYXmRlZY0FmkG8qT' 1371 | b'kPcYAIgDowCgeLT8YskarvoArKy1mgBZbU6grdUjAeedliCsSWkA8ADgfWClPSjwwKhjRGXq' 1372 | b'2L0dxAeAoV2up3usA4AxQIrsfSiI4Eplctdb7bZm7dGPLR9+b3zw+n6vE/pPmajgZHKYP1ty' 1373 | b'njcaDosacytUQH9PteVr5zttvsjVIoHUaIu0a9fd9NOQTi5nq3Ft8sDNtwFr9KgIffAoqJQJ' 1374 | b'IFfKtV0JrqprA4o8ABtdAwNAobBrnGyb3v1Pku7tt5hfeOapv8Ky8HEZdKyBCTyoSAfwUDIg' 1375 | b'kfHeCyje9N8RAPCKSisBMNYMKpXgLYlGAluVJoquZAr2zYDIGFmXO6wUG2Uw+GvlKvrNYG1m' 1376 | b'tBFA1hEQAgWAIMEDRV/7DL7mkdSVQKEpAMBeGyRoBIhRGAR1azf4dXINlKKqKYZJb8fgO1dq' 1377 | b'Ai/1VNyaoOayqe9YX4oHbnFuy86i91SR4s2H/gSQV4uPZni8gl3CsxP6RRtvq8D7SrFxSgUM' 1378 | b'EBvNSrlgASNBAvAA/nKfJG7y1rXBC5/DAhAftIqISCRYlyvGIh9FUSoSlMIQHCN57xVzEBcQ' 1379 | b'2TMEAIeglCAgEFSk41pZMWHlrRGvdEwojJTDlaqEUXMZzy+fe3Dbjtfsf9Mva50+9eVPX/fK' 1380 | b'n73hnjcsnD9uhxvb977OoTWYUWgBbgD+/aNp/87qR4mkKQUXNDLxHDhMVGIJnLUiRIhILCKb' 1381 | b'c1ttWSl1dc8GpAo2qxoAQODCWKgEDojN5tzLVnq9ic4tk91dFXUiE5PVSB4RARQggDiiTc/N' 1382 | b'wGAQg0AIIRADgRcUAUPBEdrgA6FGBAgVMaMnuMrQyPlAhEwMEAAFQZACAX7j1u+aT80iCs5b' 1383 | b'pYwAANoQ7GZF6Ll2fOGrjmB/+/61/TyEGiQACGOMYggSAgXobWU1NYqwGpmmAlWWyzXqgAug' 1384 | b'n2M/iIjrwUXmEpr5Yn20eOpn99z4I7tu+n0Hn2k4bu3/Z0Wnm7RvAjevk67nZeU0vWiT6yrv' 1385 | b'iJUPwUOIEQXJBgeoNAAQCMFmbh4QNweCvEhVwquFCzkrEyxWlUcjzEJAGlVeWmOUs9ZWVus4' 1386 | b'BCJCAa+AgIOwOBuYKoKCiQJgAAafR5FjigMAcAY+QoYrnYjKrQlPTk6+vLn9psJGnaEsPP3E' 1387 | b'zW//wcmdN+3ddztSVE/nI4oCsK2UIv5W7C++NsgKRcQaiVD0wAYnQ60i8lRplTIrIgze+RCE' 1388 | b'mBCY+WpvDMRcIABCABG0AiEENtxIWjttyOIk9pXW9cnSY/BWqxQARDSQIPpNl03EIIAUGMgK' 1389 | b'OgGDwkjCAAjKlW4z30OkAIGUFSjBx1dbJnfOEhEiESqAgIAi4px844Tta5s5ImIAa12pKJEA' 1390 | b'XsbM9LUR4tccLgDAN3rIXeNMFlokhULeBe88ASGRk5FChayCygiIglEUAXKlS4XPvd4YHSN7' 1391 | b'LPLyyW79Zd1dP7lRQq2x27ijuvFGa5oRJb7KIk60RIotXKOt1vMAK96snAYREUvMRLFHy4Ao' 1392 | b'CoUEBDDgZfq6Rl7+LzRhBSoJI0JgTR5FIGBgRKMNSwhEZHRsS9GaKmuVYij1WELFqBRqMVgY' 1393 | b'YQXKMRaaasFnlQ0mQg85U+JLpiu4YxPZxKZsaZXGokWqkarF07fe4YchNDvS3hPHAuA9xUFX' 1394 | b'gNG3Usb72vXNICWccdJU1FBUsVEopNjboAgFgkNiZh0AJAg/D28NbwQ0YqiCZYoYI2+BmTFw' 1395 | b'wDFhy+mNYHUSB6WURVbIAhjQBfAoEQIDOQ+aPXrKAANSLB5ok8uEWSnvFSvwQapSlLaCJVF6' 1396 | b'tSkg4k2fP0IBCIjICIzCgC/skGTvAMkDCFGEBICWUJUFKfV1rCRfJaYX2H8qQJCcEYgUUxlw' 1397 | b'jASEMZKtrIogQjF5DxzAqgAAAPNJREFUCKhyoihgfiX9oCqZUIdRotqRbe+KfZtxDRu7MZqL' 1398 | b'ajuNjUTWdJIKFcElqMpr1VR8tQggImQdAAKzIIm1gKiEcgINAUU2VSECQuKvNMPkqvGCJ91f' 1399 | b'dFweSxfC5uuv3Zr9gyU4XsJLuCr8zV35jbfn1+VSv93wbTG6fbPcDc91+V/CS/j/IBDxm6fY' 1400 | b'vj3ZCr4dIqyvw4tSQnoJL+H54ZtEWN+e+LaIsJ4T3+YX/iX8o8BLq/Tr8G0XYb2El/AS/vHi' 1401 | b'2yXC+htefumR9RJewj9evBRhvYSX8BL+0eCF76F4CS/hJXzL2FThXNvf/P8T/l8qL7eCe87f' 1402 | b'SgAAAABJRU5ErkJggg==') 1403 | 1404 | --------------------------------------------------------------------------------