From 5d87f0659c2ce99b041908c815e1fc45413f4be1 Mon Sep 17 00:00:00 2001 From: cai-weiwei1989 <734267852@qq.com> Date: Mon, 25 Nov 2024 09:53:00 +0800 Subject: [PATCH] =?UTF-8?q?[msprof-analyze]advisor+compare+cluster?= =?UTF-8?q?=E6=96=B0=E5=A2=9E--force=E5=8F=82=E6=95=B0=E4=BB=A5=E5=8F=8Aad?= =?UTF-8?q?visor=E6=96=B0=E5=A2=9E=E9=80=9A=E4=BF=A1=E7=AE=97=E5=AD=90?= =?UTF-8?q?=E5=AD=97=E8=8A=82=E5=AF=B9=E9=BD=90=E9=97=AE=E9=A2=98=E6=A3=80?= =?UTF-8?q?=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- profiler/advisor/README.md | 79 +++++++++++++----------- profiler/advisor/img/block_dim.png | Bin 0 -> 39545 bytes profiler/advisor/img/byte_alignment.png | Bin 0 -> 27296 bytes profiler/advisor/img/op_no_bound.png | Bin 0 -> 39129 bytes profiler/cluster_analyse/README.md | 8 +-- profiler/compare_tools/README.md | 20 +++--- 6 files changed, 58 insertions(+), 49 deletions(-) create mode 100644 profiler/advisor/img/block_dim.png create mode 100644 profiler/advisor/img/byte_alignment.png create mode 100644 profiler/advisor/img/op_no_bound.png diff --git a/profiler/advisor/README.md b/profiler/advisor/README.md index 78e90a192..dc0160049 100644 --- a/profiler/advisor/README.md +++ b/profiler/advisor/README.md @@ -86,27 +86,28 @@ msprof-analyze advisor命令行包含如下三个参数: | dimension | mode | 参数释义 | | ---------- |---------------------------------------| ------------------------------------ | | overall | overall summary | 计算、通信、空闲等维度对性能数据进行拆解 | -| | environment_variable_analysis | 环境变量设置推荐 | -| cluster | slow rank | 慢卡识别 | +| | Environment Variable Issues | 环境变量设置推荐 | +| | slow rank | 慢卡识别 | | | slow link | 慢链路识别 | -| computing | AICPU operator | AI CPU调优 | -| | Dynamic shape operator | 识别动态Shape算子 | -| | block dim | block dim算子调优 | -| | operator no bound | 算子瓶颈分析 | -| | fusion issue | 融合算子图调优 | -| | AI Core Frequency | AI Core算子降频分析 | -|communication| Packet analysis |通信小包检测 | -|| bandwidth contention analysis |通信计算带宽抢占检测 | -|| Communication retransmission analysis |通信重传检测 | -| scheduling | Affinity apis | 亲和API替换调优 | -| | Operator dispatch | 识别算子下发问题(路径3/路径5) | -| | SyncBatchNorm | BatchNorm同步检测 | -| | SynchronizeStream | 流同步检测 | -| | Slow dataloader | 异常dataloader检测 | -| | gc | 识别异常垃圾回收事件。需要Ascend PyTorch Profiler采集时开启experimental_config下的gc_delect_threshold功能 | -| memory | Memory | 识别异常的内存申请释放操作 | +| computation | AICPU Issues | AI CPU调优 | +| | Operator Dynamic Shape Issues | 识别动态Shape算子 | +| | Block Dim | Block Dim算子调优 | +| | Operator No Bound Issues | 算子瓶颈分析 | +| | Fusion Issues | 融合算子图调优 | +| | AI Core Frequency Issues | AI Core算子降频分析 | +|communication| Packet Analysis |通信小包检测 | +|| Bandwidth Contention Analysis |通信计算带宽抢占检测 | +|| Communication Retransmission Analysis |通信重传检测 | +|| Byte Alignment Analysis |通信算子字节对齐检测,传输类型为SDMA的通信算子,数据量需要被512字节整除,保证传输带宽不会下降 | +| schedule | Affinity API Issues | 亲和API替换调优 | +| | Operator Dispatch Issues | 识别算子下发问题(路径3/路径5) | +| | SyncBatchNorm Issues | BatchNorm同步检测 | +| | Synchronize Stream Issues | 流同步检测 | +| | GC Analysis | 识别异常垃圾回收事件。需要Ascend PyTorch Profiler采集时开启experimental_config下的gc_delect_threshold功能 | +| dataloader | Slow Dataloader Issues | 异常dataloader检测 | +| memory | Memory Operator Issues | 识别异常的内存申请释放操作 | | comparison | Kernel compare of Rank\* Step\* and Rank\* Step\* | 识别标杆和待比对性能数据的Kernel数据(无标杆场景是集群内部快慢卡的性能数据对比,有标杆场景是两个集群之间存在明显耗时差异的相同卡之间的性能数据对比) | -| | API compare of Rank\* Step\* and Rank\* Step\* | 识别标杆和待比对性能数据的API数据(无标杆场景是集群内部快慢卡的性能数据对比,有标杆场景是两个集群之间存在明显耗时差异的相同卡之间的性能数据对比) | +| | Api compare of Rank\* Step\* and Rank\* Step\* | 识别标杆和待比对性能数据的API数据(无标杆场景是集群内部快慢卡的性能数据对比,有标杆场景是两个集群之间存在明显耗时差异的相同卡之间的性能数据对比) | 集群场景时自动进行cluster和overall的environment_variable_analysis解析,单卡时自动进行overall解析。 @@ -115,34 +116,34 @@ msprof-analyze advisor命令行包含如下三个参数: - 总体性能瓶颈 ```bash - msprof-analyze advisor all -d {profiling_path} [-bp benchmark_profiling_path] [-o output_path] [-cv cann_version] [-tv torch_version] [-pt profiling_type] [--debug] [-h] + msprof-analyze advisor all -d {profiling_path} [-bp benchmark_profiling_path] [-o output_path] [-cv cann_version] [-tv torch_version] [-pt profiling_type] [--force] [--debug] [-h] ``` - 计算瓶颈 ```bash - msprof-analyze advisor computation -d {profiling_path} [-o output_path] [-cv cann_version] [-tv torch_version] [-pt profiling_type] [--debug] [-h] + msprof-analyze advisor computation -d {profiling_path} [-o output_path] [-cv cann_version] [-tv torch_version] [-pt profiling_type] [--force] [--debug] [-h] ``` - 调度瓶颈 ```bash - msprof-analyze advisor schedule -d {profiling_path} [-o output_path] [-cv cann_version] [-tv torch_version] [--debug] [-h] + msprof-analyze advisor schedule -d {profiling_path} [-o output_path] [-cv cann_version] [-tv torch_version] [--force] [--debug] [-h] ``` #### 参数介绍 -| 参数 | 说明 | 是否必选 | -|------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- | -| -d
--profiling_path | 性能数据文件或目录所在路径,Ascend PyTorch Profiler采集场景指定为`*_ascend_pt`性能数据结果目录,其他场景指定为`PROF_XXX`性能数据结果目录。建议通过Ascend PyTorch Profiler获取性能数据。
advisor依赖Profiling工具解析后的timeline数据(.json)、summary(.csv)数据以及info.json*文件,请确保指定的“profiling_path”目录下存在以上文件。 | 是 | -| -bp
--benchmark_profiling_path | 基准性能数据所在目录,用于性能比对。性能数据通过Profiling工具采集获取。
**computation和schedule不支持该参数。** | 否 | -| -o
--output_path | 分析结果输出路径,完成advisor分析操作后会在该目录下保存分析结果数据。默认未配置,为当前目录。 | 否 | -| -cv
--cann_version | 使用Profiling工具采集时对应的CANN软件版本。目前配套的兼容版本为“6.3.RC2”,“7.0.RC1”、“7.0.0”、“8.0.RC1”,此字段不填默认按“8.0.RC1”版本数据进行处理,其余版本采集的Profiling数据在分析时可能会导致不可知问题。可通过在环境中执行如下命令获取其version字段:`cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info` | 否 | -| -tv
--torch_version | 运行环境的torch版本,默认为1.11.0,支持torch1.11.0和torch2.1.0,当运行环境torch版本为其他版本如torch1.11.3时,可以忽略小版本号差异选择相近的torch版本如1.11.0。 | 否 | +| 参数 | 说明 | 是否必选 | +| ---------------------------------- | ------------------------------------------------------------ | -------- | +| -d
--profiling_path | 性能数据文件或目录所在路径,Ascend PyTorch Profiler采集场景指定为`*_ascend_pt`性能数据结果目录,其他场景指定为`PROF_XXX`性能数据结果目录。建议通过Ascend PyTorch Profiler获取性能数据。
advisor依赖Profiling工具解析后的timeline数据(.json)、summary(.csv)数据以及info.json*文件,请确保指定的“profiling_path”目录下存在以上文件。 | 是 | +| -bp
--benchmark_profiling_path | 基准性能数据所在目录,用于性能比对。性能数据通过Profiling工具采集获取。
**computation和schedule不支持该参数。** | 否 | +| -o
--output_path | 分析结果输出路径,完成advisor分析操作后会在该目录下保存分析结果数据。默认未配置,为当前目录。 | 否 | +| -cv
--cann_version | 使用Profiling工具采集时对应的CANN软件版本。目前配套的兼容版本为“6.3.RC2”,“7.0.RC1”、“7.0.0”、“8.0.RC1”,此字段不填默认按“8.0.RC1”版本数据进行处理,其余版本采集的Profiling数据在分析时可能会导致不可知问题。可通过在环境中执行如下命令获取其version字段:`cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info` | 否 | +| -tv
--torch_version | 运行环境的torch版本,默认为1.11.0,支持torch1.11.0和torch2.1.0,当运行环境torch版本为其他版本如torch1.11.3时,可以忽略小版本号差异选择相近的torch版本如1.11.0。 | 否 | | -pt
--profiling_type | 配置性能数据采集使用的Profiling工具类型。可取值:
ascend_pytorch_profiler:使用Ascend PyThon Profiler接口方式采集的性能数据时配置,默认值。
msprof:使用msprof命令行方式采集的性能数据时配置。功能完善中,暂不建议使用。
mslite:使用[Benchmark](https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_bench)工具采集的性能数据时配置。不建议使用。
**schedule不支持该参数。** | 否 | -| --force | 强制跳过用户属主(文件是否属于当前用户)及文件大小(csv文件小于5G,json文件小于10G,db文件小于8G)校验开关。配置示例:--force | 否 | -| --debug | 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。 | 否 | -| -h,-H
--help | 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。 | 否 | +| --force | 强制执行advisor。配置后可强制跳过如下情况:
指定的目录、文件的用户属主不属于当前用户,忽略属主判断直接执行。
csv文件大于5G、json文件大于10G、db文件大于8G,忽略文件过大判断直接执行。
配置该参数表示开启强制执行,默认未配置表示关闭。 | 否 | +| --debug | 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。配置该参数表示开启Debug,默认未配置表示关闭。 | 否 | +| -h,-H
--help | 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。 | 否 | ### 报告解析(无标杆) @@ -208,7 +209,7 @@ memory模块分析内存的异常申请释放操作。 ![memory](./img/memory.png) -communication模块从通信维度进行分析,目前支持通信小算子检测。 +communication模块从通信维度进行分析,目前支持通信小包检测、通信计算带宽抢占检测、通信重传检测、通信算子字节对齐检测。 ![communication](./img/communication.png) @@ -228,10 +229,18 @@ communication模块从通信维度进行分析,目前支持通信小算子检 ![bandwidth](./img/bandwidth.png) -computation模块从device计算性能维度进行分析,能够识别AI CPU、计算bound、动态Shape、AI Core算子降频分析等问题并给出相应建议。此处不再详细展开,按照报告进行调优即可。示例如下: +通信算子字节对齐检测,传输类型为SDMA的通信算子,数据量需要被512字节整除,保证传输带宽不会下降。 + +![byte_alignment](/img/byte_alignment.png) + +computation模块从device计算性能维度进行分析,能够识别AI CPU、动态Shape、Dlock Dim、算子瓶颈、融合算子图、AI Core算子降频分析等问题并给出相应建议。此处不再详细展开,按照报告进行调优即可。示例如下: ![computation_1](./img/computation_1.png) +![block_dim](./img/block_dim.png) + +![op_no_bound](./img/op_no_bound.png) + 上图中torch_npu.npu.set_compile_mode接口介绍请参见[torch_npu.npu.set_compile_mode](https://www.hiascend.com/document/detail/zh/Pytorch/60RC2/apiref/apilist/ptaoplist_000880.html);AICPU算子替换样例可参考《[Samples of AI CPU Operator Replacement](https://gitee.com/ascend/mstt/blob/master/profiler/advisor/doc/Samples%20of%20AI%20CPU%20Operator%20Replacement.md)》。 当存在pp stage(流水线并行)时,computation会按stage分析,每个stage就是一个流水线切分,比如0\~7卡为stage-0、8\~15卡为stage-1。 @@ -244,7 +253,7 @@ dataloader模块包含Slow Dataloader Issues,主要检测异常高耗时的dat 上图中的`pin_memory`(内存锁定)和`num_workers`(数据加载是子流程数量)参数为[数据加载优化](https://www.hiascend.com/document/detail/zh/Pytorch/60RC2/ptmoddevg/trainingmigrguide/performance_tuning_0019.html)使用。 -schedule模块包GC Analysis、含亲和API、aclOpCompile、syncBatchNorm、SynchronizeStream等多项检测。 +schedule模块包GC Analysis、含亲和API、aclOpCompile、SyncBatchNorm、SynchronizeStream等多项检测。 如下图示例,GC Analysis提示存在异常垃圾回收事件,用户可以通过有效的Python内存管理、使用`gc.set_threshold()`调整垃圾回收阈值、使用gc.disable()禁用gc等方法处理GC问题。 diff --git a/profiler/advisor/img/block_dim.png b/profiler/advisor/img/block_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..7d0fcb703d0f585a0c2834c9e05e7567bcb07b87 GIT binary patch literal 39545 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 z zsl`Wiv0-i^Kj^tA8%>es9Rl5N!3n2re%OY&{TgTZ>{Z*3gQ3hsTr`xR3-*)m%^fcZ z5xL2|HB+pVUf+5K0^Fp(+w+LYoAv|xmGc`|Rr^)s!dprTvp-e&oI|nm+7Nf42_9k( zbObcd_TidTWXh|Yo+9_(%)zXxOw@t7B+$iJ`n0+Km94+z6l#8ER7?J@;*R62bo$l? zhDOdaZ(&jg^-bU^~r)7PTa#+rtdfGugnmn^ttZdGB6^+`IDCX zhuuY-_E6sQ9$aX=_U&*u0m)N?Db5>)PPwY^XuT}EI`iaw$erQAul$Vh=1Z+b-$^)8 zR=j{nk8)-$RH+e_BA6}zF#GdNoC=#itCS^SR-Ap)r)7SerKtCAZqp0M#8+u4QDkt- z%OcIQxi?djSN7f4lPr|l@hcC&`v$Vr`wmyK&5^9K9#>Q!vK zXY(MRftYGT;rdZ8o%F$3OS!$gCapSC80g;iT|Z9iCZ&92;<2VI{|TPWQqPf(a#)!& z9iKW?oTbmmYMvcnFMAzQQ!_5N^U$gBd(UoP+Bh_y_00S?@&55{$0h*Xo-@(kH_o}C^kJM$&C$sNb+MeEafG!O zly!*W`N}@~C6X76up(WyDYrj;G096IA2L^$Yf1RlFI#L{35FU|2eI*b<@3`AlWGq& zp8jd3Z$6Z27`4(g=+K4ri2vm$+;#Fj?Py!?^P=g%+yj8+`nxxB*Ga-IrDiSgGyACY z^Pj%U^vzufX02LIIU@XdeH!uOl-^I<8E^G9H0g_~&RbbMSWl<-Pu~M*pRcb4_nD8T zxGCaZ4kD)x{p;5klv}tpMVioWfB84ki55CldH-*BX#Qs&R{8!PPT;+GjYlbDME0yiFWS7{58Oxw*bSxT#DW64nFyY#Uk&I4^X9afK_l*H)Ium) z9S3rUkK71iP0mc|&*($Wg2nq&>8D)@(Y-Z{cd}@)CLl}IHC#7lZoDK62r>bfk0fzo zryo|fPI5R1G$&QJ6w^XU1$+_#Tx?=|-uq1)L#{I|aBCxv0=&uJ*S^*$%NUuB^5PxM zH<=?Yp{*%*^C}!|oIC>D*Tts5fbCzLikV{sKH|uUzG*AQBk%Fe1AFzCm&u<4Yt-hu zu=R?s!ZLOO@o{$6=1n#HVOeCg!oyXs<7H(pHog%Ar^bCNwFuFb$(1NmMTx&zYuI@v zg7%JTqSxx!Kr8Q@)Fkbm=8eM)&jWm*hQMh4*#M40Y!zinH9K5JCYhlSi;oZO*#2fj zH6Hn(&>}P#F_OG$bu_Z0q3rI^vRPW!j zA=X8?C3KkbMm$I@KuyM!u}8pO)4VAMiP|le({q6bLP*iC4H{1x9w)2SvL=89D6Dme zfHBnf?IY;6N^-of(oF6}eRom6k3e`4pA@YL)q2QG0$nThngYlw+uC#bQPLx`1By4MiiEBTE8)>9N7H4_=~_mJI_3K zSxj-`_eC$U2tDv=sS?>i`bJjXVzN&Bws`*r5K+P^A3eSNnPnz=Z?XFA>afpn#M0`s zjX_FN0m>~?YKy=%@a=&3P*kdE0M*|qXZj0^m<81Kdt4g)gROl-!%%!sqOx@*_SA-^ zM!-**1QMYIeI2XsU+iE!;Ecz5-XRzY<+a!`M1v4P+Dw1KHlhwhH@t$Wbv4fUlga}nQ{Lg z&OeQxQP4MnLx25I^uK-#x%d~yuMI%F^!+fc`t4^(T}%%slK=jXH~*(P`Ti_}SnX6| zV1yBfMjlZU0R>(VFcLo|5v!8Ntw+PdIE+>%L%1x9y<@eEZ~Zh5gyp6puKpETEN8_r zVSyYLO5o4=zq-5sXSVM+4&bJWTfZc0Tv=76Y_~7HQN0jSB)V*^*4MjU9j3{)ZfIml zD+?yXmkq7en5mu6bU3}u)t6}+5)pR2V@S+0l!(|yk&uvxe3NAFPt?xsm;JcA{Q;l% z=k@-4-uHgrJs@_^kT#UAGa9(HOQ|If?0P^mA^afaI7F9je&Lxhk}4lsuANz%-Nwc*vd*nz~oX z-5eYZafi~ViQlyrp;?h2CDOE_?gmU#|aom#4K!UDgo(ey4)y5TWk@(D0JEL_JUUv9B6x^b5 znZcWTOX^KwE@cNrWjMsx1HBW92$oIq7A483Fyo`!PTpI&n1bZ^E3u z;1^Jj(Y*EzeOQ3Ggm9uuk<_oxySv2{^>S`@Iq1I=r^IC+3H?NqHvIaqx8~vu#^|+T z{p{8GxrrXwx!2NpK??&^sLlCsr~_}p8(h9jP9&la61j!4@U(iX8YM!yUPiYV#ZIMW z6gj0@DdGfGHY^dokDZzPF*?QgHZe3K)4Tp&e)WzZ!2mGSg7c;vTO;CvU{_*`1f}c_ z*WyPUobHu^(6=%xCv%c)Eu-OMfrZ+4lfIgs|Ma*UWw(fYsE9N0Fst*;kMoecaTiLp z`9Z`S@-*Wbl6Og7JG~I{+Z$jh(ve4LZ1afu{bSAcU|EF)egu+8P65gN+XhR?Mh22swNSPH zwhITD875j6EfRpj@Dc`PuhC6q=`jr8nMR{{V?Gg;e>#Wh+H;oe5QfSzM%>h?^JS_5rK{`EUQx z=M)JdaIF8GWlia`I$G;a)%$+HMdzm=UYaPs}*Yw3|CR49#X9_HeY+nT)`a=#aeVbcS z{t~6HCwH+XfzH&fPOC)dxu*iH_$;52r)806Ik$vhXKUed7IVE=meprjlO^BsL(aKK+)46J~_Uepab9&4XYBX;ANjxk2IwFDmM{9IF=N32UMgll274mvI*1QsH z_idRR>}0Z=_Znc2cyo)S&NW|B2tDtxhd%Zo4J$aqjV*YTdMrw#V0?jxRnW^Qz zQ(2lTx!?{|E{q$brnsY$kRqZYARutCX5Qa>uIrrt&N;vHy)O0Z^E~&n+|T{o%jdbj z@t2+KxBXN5pPM#q+U9Wn%#}@>G?F%L`oj5}uhk{hU$ITpf4)FnvH#bmN;+Up{m+;F zr!Jk^w5ck2%lh@N)c=2b=e#Fs(kAINc53&%YYyLi*?jHAz>{y9&s=zZ z-o@RZ-LcrXraRy5NLe@CWGs86_2cmOayX_1A@~7lw`k=LiPPAAU^#$T zm6C@8tEaT_yn=0~eSX_yV}#uL`Slgb-6%=L!%0p5sYt-hQ29_XYUU@di}3XmTD^wCgDT0?RS6ixy@3T`3_pEph_GB|6Fjl z*z_Vm%Ym(0A*fJMf3@1=?06EnPEgGe-fsD8^e8Wbq`zt-Ow<(AA{jxstl#=y^`&jg ztCB?3vc7VE%U?uyi_gyN`TTy3`(N}<|91-)LCAG3K2kYP)WnhJ+NV<)laN?JYltpo z`w(ig04rGH!?0m%1B9;y6OW0ptIFxKW*xf;%6&(h|K!f+6HEmPI*niwPL7f+*^Gpb z_b@eys)dPGJYhY035u8C!lDYw$2$FS$SCj;d4H{BNFkk^Wbr2Ne^ z11p`eB~n{Vka-oo3#qLHihd@}>Tm9ONT#;a>N7ql=9=OCYrA+0%j|khfgjtmMY685 zY+68bx1x)C&aEOn#Ny1 zugt8$0JIZ{Y$8N8wd9nM7t32R{S86a`&VcPEI1FOoHFXvLt}k-=5JJ~tpa;y%TDpG z&uisDu`_EQbnt?o9a@OG1sH3k_VfS(*)J;7$5p3UVRV41oAAS`BKDFbNX0svDaiL+|~iJoQ&QWHY}FdzNTEUTY8bufv5ThABr^pytEgDdv<5LH8q ziSuo+YArd5C_0#=T3Ql0r#wf^wokXheAXlxELB1)zEf1(cKz`a8%b5e;)kxbWg8ZQ zvk!Gt&UcR4PNP*}Gt!J(K+t*ve!`bi{)txW>uP>X%9Yd3cE%~Wg)Q_NVv9;VO}s3D|d*wG?K|30WwdTVrzTGDh!fvk1BY0>e|pUDHcLmTZLJO86*^Bt+lnjh}u0K z>LX$GZm(FL?Ap%igY-nH)SDv=?_>o*$55%ITE_A0viZ;YXv&hj+P3VDUC(dTkIg%{ zUZ76_8fgfr`@J#7Cme5IVsZG6097}EOVzWnG{Dh9=n;QX6zfts9s(jmV^K{~=+)1iw))hS!mvpQ_4k#ijJ~D#`(7T2;?q7_z>tjUs@t9C8)6RbVu>#1{1kjfp61YFqK z|&pKP^TD{KwX6p)39Ga=WCh3=BsRCY}M&`Q*Vz+bg*zq6ZW zrAmj^4*B|gN~yG-?oIuNY_w73HN>^G$}^f2R@I4zMj<_aN>DQBD1Lu7+N;<_38WO` zY|R3Ul89wmpH_c&Z1wJTnyDrOqMM2h)E%jRFc5OKZilxKBA%_)FG&i|p#B4hrV8D6 z`zwyBD122|6i+xu{;|Zi`A6isi>!C#gcbJc!3_89v_ay}%H=W7f7E7!lneHqz`HoX zlFYQgRIp9BWM}GYOguXs7u(k&z?!aQ$d@ATt7euew5X^xK`E7J8~8sh;xz?nyY^wJSpRuv z$GP7?mu_Q}%4yH+bzesSQCT{3<>zLQQGMgkq*~Kn zQM5i>)kmbUwDn{8OU>;>-Q*S!eU6$(^z=?Z{7=W)K%U;{S8XXz?{2OCQP?)*t$)zZ zh#b!zTWc=SUpELWa~0L6j-duciEIWgbWOGxf^qI48&U6(H@ zD5g@PgUWUIKd6qg8Frq^Q*Vv*RY+*v?1Voa2w7L#t(~lUP+8w&kW2?A|z1A&LbA9w(*)HB}SIc!Omv zO|?;zNbT_g%u=H3_C;feT13&*i`(B26d#ucs~0aq-PaH`M(w~6bMLIpIRD>#7mOo2jo9QdUJLuCFC);bfi#YnbIuRjn`V$94SP#I`lT4eF1WHT&K0 zYDIp?P8`uz;f6sUtNbrbwzQo_z};CJa(>pNb_q3R>wm;aBl52m{NOMu%{d$`!{b9< zu#Rfls@CNE5G_I)>;1*lxT>Sy<|$(4B0`DzAiEf@-1A>1!jWW6+|YV>kNZJW!4YKa zYPyzor_zB049)=2m34yhd=OM&GyW^_2I?_3SG=KhFK-^NBG6@*=u8f`c+!d5{Z7K}W-Tvot?A#&wi@=tz?!Q6(E^T}$c zPGm|)r$rkAGMTV@r2ZJJW$oiqF~m`Yy?uI__ba|_fnza3)X~HKv8>f08SNwwwk=QP ztGk(ECurpfaR-p>m~%c6vdqI#!>s$CXCGO)yBH?wr9W~ z^fBS{iruY5xh8cmhxtS0>5_4Mf}(v|G=OH(75nCe_W1e&wOY>|0j3Ouup@iqeQI0u za=Ng!J^{9yV8gNz00hK^+%5uj!xwDEhbUHgXQdUShT4CtK3$`v5T?7`#T_*7_+wqv zPH!XLwJYnRLKua#5`_J%APaId2q0yb4VSuiJy)REry3mC?rq-=^n$hEqQsMHzzmkO zV>*(6OT(ar@Fd7Sn9? zDABeCk8sQD(oP{k1^7&L*FK<2Zn=XtKrGXvgs-clEM>jxO4J%>nJTYWiIU$VU+(h%hlLSpk8!FVX4SIN)mO%{T0atn>n2jgS*CMm_wa75Xw&|=5DF?P$W+2Zha^?ab>juf zOUt9_jB@#%0q(pXHYQ4FZa*dw%}P`(J&JrDl)+L4E-AwoBe5|@*|9?MM};ElBB7!n zFZ25`$*Qdbdt_=CTwBfHrLc)ZYPWDIR7<+ATD2+C_RirhFue_Fo6%ean1|$@Ua5&; zh()F(y-9f-5pk>DU~Pl$#IuXJDZl@eZ?1P90J$2O?lV%N?g;xjr!yXL zHlA%i_4HtpX?8R$z)K*%9 z{@F2F1W@ZvYHLQ1hn)Zc#f9Am*8}IQ*DrP0f$9{e;FL1i!0GD5s^1XL!vyqMZp2EX?cv4bo|cZYHg87j1%1Dm{w{G1#_)eL%WDh2G;i$<_kt!1 z+Cz1d1cvY&?$ej12*?=FPwLPJ(`W}rm-|;n2I+2DZg?QS9)nqAUbbYh2W`)Ur^B}` z#tHL&VBQc`QR))5aQuTPWs-Aq9&SuyeMhW52L)nArZKor01_{9tGs7 z)p_b|nds^1i1XhWp1;!m>)Z112@mWXFEbf)s0$FJ57n*EbNhflM!J!dBecmF+2hE& z6UaMmNC}>I#}1pPC2QWlIbdy0yQ0777bEs4yU2Lz5*ift${kV8YGJvF+xtQrG8R>A zsBu@2fLehztVHGT#;8U-%;Wmh+>WY7dv~U|+R~Y$goYCBhXm|OklFkZn`BdHvXF8M z2H`gk#S-MNCYilt?@EUw*^;i74u_)wq^Rh@j%3^y3!VPzPazL-CI}6om_pQ%yNUm^V)RgT}$1F3;2-Pf< zTfU3Lh0qp6dj{&Y*w$W%0c~b9>lnXX^5=F}H;&N=?6C+O`TpUyxEns+65+h!6?kY# z7Ja*~z(KyVV!9*moY|8faK%V-K~+hTNJM$r+gGg-19!ebPHcgI(Z?3MUs>`b!xtv( zF%s#Jt--8+=b9z+&YeylASc2Er66yhy67-_96QST!v*XkXWVON&FrGh4_;KRPMLyh zvnrjnG@hMqn|-%G=9o>n2Y4!e)XtFx)_-Lna)VzW61rdD4>Z;)KfWrpJ>#Ppos@z- z%B-WUyb0kd?lYgJ0XWZt7%Aeno3qz9amN`i=r35E+Ll@oGRbfRRXe4rpF(=B5i#OH zK`+8uD06uiQ3T2^KCdvaXO2=p+r`h0UF23vLY==BvYPahiMYtTTnad6b-(vmqGf7z zU(<79ulywvbNC@-8r#dfF|s3kq!H5YlP^C>O0BfFi{#ezM?1>0hen2leSld-vc%KN z-WoT;LvWNw+26{^NB9F*oXv}rBuAnt*ZK~CcC$sZqp8-69s<`gQ6$Yfc7F{o5%*oo zt|?(nk3Uz;L6hI~Cr3m3m3sNKs#W$nYfdlu7pGTRg>nd=w=6>SjEoxbc;jG5zA!)0 zA`$4zEQULX&$tNQ4^@n_?0wB_Jh=<9O5|7aqSJ_N14xF*5aHJATop2}+?CQa1I{c* z%CINwQPgL0s|r;>4kN(y9=vz4vE+8`Vq&z`P$$eD{!EF6YJgNw(+|LB=sBN6b5qXCCtd>^0{qezW9R*KwW%7!L#+C2NtXqr@lUmoIlP9}_9(!BW3?uIeAgVuvk1RiET9X?>eH|s&cD9i=g zOOo5}g(?!Z;)1LW)9`*W(%%^KQd6qU+a)$SqN86Fq`Pp*Z^QJ_^y*y#786BEf^YxL zkdY>zAV2-Eo^FE>$YJK4NiE|b|L}|yvtWKz=r{rm%qncq0;8W)apKn~I_9#gB1HJrO ziX#bUWZdEqiqLvMx#~-e(9gj59!5_q$mORGkHk4-huJlA4R6C0dOq{??soJu0DOhD ztpf8slkif^f7V2Nt3KM6tOLlAD9t+Y@YM(&C1KPvcVKli(ei{bqH0vtXBZ^TsOUO7 z%KyL{Z)RF@jy&{yqix7)EN=A8#yfLrPCaubhqz|IGYW zHS_<}vVCTKfFFv{_+=Jn$|NG{ZS;@!@=f3mHUG$v2EMmqc%Dd-P6hCn5LG?xBaOXL z3!WpPi_Mx7|4_5vjcREzcE46U@w{qRTxotqcmfl1SV!XLi5JC@H|&u#S)P)`8y+pJ zh^9X8HRkL?7!S@nzsELH)(ZrIk?%Z`3mf@&AcpXTNqEHy2IJe23DtQizVf5hg56=c zC1SP2`Y81Ve@N^aSOUx$h_3jpDntHiofq|5!M`eG=dSnMT1Y=dN!s&gx%Jcnnzcd89cPs_LR8aRyQ3eKbc_^l)*%6wPl3PJ?)(W-Aivx zFwZ^#%LHud<)6dRWH*290_qJJ$cRn}j93c@Cz1P$3pUR3GXqX=*7Qq2wq6^FO+?Za1l`yBe+ z?268iGH;27FC^N1#g`B#T%sUfKSLg5(uIJBq)~ilc(+HtTJHYjR^|||QIGk>g^W}!37s8ZPRB4Uc zy2wsAa11LBRNDB`NzpCUc;6_+L4486 z#3wniy4yns@%Z6^BV*9qnx_0jt9*IZYO&}cDDl{6p(CJo=;;r+g_g{rI+tLu_{`Ag zp695+8m2ZT+Z^s@j!(D)`&n)?$Lc63=@wUBhsW*~WVcjyy@!TU-?P=p6L&FZd@U<;J;C0~A#m!YOlTt}>FI>$0TRmDM z+&M=H?5Lw7`=^#h#}~cy3pZzx8a=FD?S0O>T+Vc0eBs2@LsazLd+scq9?Q8lkzmQ& zJiKCeVLqV8CF(UW^AZOf*etjf5{vP}o#mIaQjLYM3VDCM67025sA z*gC1`jV(~txR83P(R9a1p5|UN{xFr2<0(_emq71w8bNl=ko zmX(}($ZcpPhN19;BF14Ods3MRF&QVe^@4#H1aU5;-6_@?(hIV*MdFi%6GOH98+NVa z^o(O2kTh73Kir9n=(gI*iEb*&Dqc`_4IP0B5=M_MGL^$SI=PKa&ZR4-aMiLg$x`RJ zo~98DwzJ^du84~17btSIzn1_g+uOTaedZQA6V=%!<5xqo_Uh@KF0TC0uEhskv0p27;xh5f8tcd0{5Y z@hmkIwX#AD+WM2jClE3UpoWZ~N8;fo?kY^zfzEI4YFzlQ3N@+v`A-G%`)Pew%3L4V5!P02EN76-HOx5PIU%#20&O+%wN0 z=K>9rXwR4TIesVa*Z_02Qa@q35;%XXjsYF}%u&6ApGoXjj7zC&9p1?7LaBErb-802 zFXZvhENHRTW_$#@DNCc%o+(f0seKN*_NVn{>XP~mB%QmpLe_a76sMMq>z(-)*dHW~ zEJyt=t3PRGhsJy;6|tqpJor26t*tzvrW&E9IDA?Kr0e%v?A(S-gCr(aB)aAV&~SKv zan#LtIrpHyj$frC!06lQpF9?Ulsyl*>ieOcr^tzl9oGvz}_jADGK-$@oUE0tB{Hzb#U`g9GG212w=gNjfVhQALmGmvMPrbNR| zbyC(QkNuy!y0E=8+wl9*To5#+u$>s_wEZpj%q`=1o!Y_my5)eQ^#;$3&gwVqpv~3a zPcR7U&lG}Essr-}qY7c@{DUvl*yfXipE^<`VAEH!wvug;KCxvHhDaY}DF?BG=84?d7xe(ak$(k;{qf6`i(ie*dt&aMVAj zQcbh0H!-C{OL(qtgblY))0lnUC)%TLDk#f229~t8z_jn^SkcN=dl`SKadJJk?&r4_ zm%b@x+JDRX@v*!W2t^!B<=u!h-tTiTNm$j++M}uLKt|52l}q`z)gA8nYdiYS1YL8A z2~I;8#vhmnKiD~O)FIz9g^qgG@JM-Np|q!j6+RP%09-#2eE>NQI32SgXa=8<+Xkaq z;-!N3tlxTf5L)G(B+r$a^G%xHP7ML?Bz#z2g03T~c-2M@%`P(_1n>Etkdw$*H>M}O zyLUUy53TOy(PuUUW~WlTam5Xf?{63a-Oq)OwYO8->qApRST|WeV#TBLz*t_$7PT0> zrhGaKOXq)}7FoN-jz#f90P?yG`TkrUbry#JUHr0`b*3OlaRi|*AJ+PRb(|Z$oi`+P z<5^luld^OSlW+vQpC3wh&DgOyA|{?Vw34i`q_G zy|WV)wwS_h!c3s}dMzSrz^<_^4*U(}vCv0i@URdgGUtAH+EnNtyf*$AwD?2En2p6` z&9Cw#K^y}9nj~~1Np^0(4pc1E&)C^*nULrO%nxs2ibYo>gY@=-w~CFMujF@|&jX6_ z516`Md0IJ?ur*F`Cy#x-HKk_+IkQ$dzWNhaJ+Cd;f)9BMiD%w!Yk9~xrBDsC?R<7`4n|HEyj7B0&BpB?V&~A;`puFh zqMnu8U#iEwVhTjYTAN$xUmgG8{q^;kwL_3^qW5YPnbOF*nKlU6I)9Iwyjh-D@xkB4RPSn?ezmBwjRZg{%zDg~zYZZXefaq@t03^#hKc;*Enw7OsNjB2!d;n$jd zlpgq@ZW9hABS?+bzdOg3FXw$3!>v2y-kx&mcu}w1ujOWArjZM)TcM5FHFD@=y+rI2 zyw|bH-x9uYA!w`TY^@fRt65qW9j(8vK007^7X;gpCY|O~Ok z_?J-|)#t=t;{^MQv!nFk%vxOc^ijOWW`10K0oUJ?wOrk|Td=Y7~(uiQVi$^bbdtzMFdC{J%!qCU*%0Cb(9T~3@ zV*rDS9U{r|18$_DwSy?q;d%R~HHweQpnncskB0|76l4j9TEcszjSL6$Y=M;`(vA=U z;q8Gvqexb)OYM4yU%|J^Vdarl_fn^2qG(;80p?|dsT;av(SG8bGmE{vS_>2;tdat8 z`m@3;8;J!qf}fo};ZI|BF={F#%^XZQ933oVzEz4R3A51Lj>m($dqUpT7s#8A?5G2R z>a)cV^w5T7J0Q8CzUTd-Z6yvH{nK~4i-522QH{$@b4xF*&v%~1Y|#Q(e?Yzes9Kec zzHyYY3MsN3i7`hiLfJf?@G@i2Pb0w?(O4D16KDu`B-IR?ZtKgMA){&s1@~exahBc6 zNTT;E?$^GG+Y2?Ni8a*><^-&QJh8|AX&y}}8lK$J7quex!Vro4+_Ea4SINTVhZ;5Q z<7wd?K|alTr!Z`v5H11fBz+jR&nypu?j$0$e@;fI(Z zN8K0xklB5#!1YF58WkXqUeDtPl#RMhV~Nb?5v?M?PIM_x8Mq1ztu)m=ZEgxAl!dcx ze=fp`>REZT3uW|W(G902PV9^17oqer%+&=JA5-`AB~hgaRSls~+rg~5(Y(B_LAgJ_ zX;Hd|*CqJ{p8o(FMsg8@%bSVhsN_pTNsoPW5S*VQNAVN|R*g4;iG0CY%xE%Fy#j3s zd~am8)nX$N-BmkUCfi8gckbDt&I`bAD_J@I1oZO0W@`$Q-FkO<34UBZ>LM|nzs*w9 zzANtj58T$Q=lO0bZnd$7Y2xPO&}~JQg_cg%T246{SB&B3S&&4V?6RAf_%P>Md3{}k zy|E%eGtWz5O@{J+^}z%o1O|eM8>$|nVbCt#h_*A>w1TorY!qd*bGL?c`ivMGC@&;>9TB>0wMA* z<5x(SGk%uIiCD{dQ>H+M@aDNs($o-Eyhcd}xTX$L99m&C z!-D8ef?oKoM6-qv8}S?4%3I|;Ui}d3;(Pp16RaWm83h(5xWTVj$WMxXDEC@qR17!i zqJdn+Ih6Nm{m)F7aEz6G1;TmOM0&K}m9xguVMFszs<$DktzZF|glOOYX8knowza`| ztw(gl7EPT8O{H-~AIKNO9+`hT-_v15(bok9>9v?^md#rnlEL(DM*w2BIVs{htdsVG zA6ZE-VNFGLVM$s=9ifG;`CtX2a$*H4eEl*jxm=JgBKxXCgqE%^(XVzsENgKtwM>v& zlUbzT3gvr*JHn^A$v&a=&C|s52yBPaUj8g6H7UBB%UMFDZbetuRI{7q4n{bMVsv(-D)G)%`=4#IZlJ#RKvT1XuLy}% znY>5^X*qAu0WS*e){Ezc2dSkvo1_>S7+RaOEqFx{D^4`e#b{Pj9>PJ&$N+8cLaM8; zt8`isv-M5v@p)e;xylIVRuC+#mM+SNXs-!k@b zf#um4L1PXLLH008w5BP;ZW3G&A&6g=q(H3;N_&5yytUH3D(s&}kRwPPq%w4vcI%L> zc^JzEBiu7oUl*wkc=9^1i>)OUwd)sH#p+YyE<%SL$*lXHj)7M?`w4=Em!Q6s zTg)7}#6&$3`2kvo6ay!fF5r7l#*g(3HYIXjf5iuKt7@<2xpHOXIBh^(j-z@NX*7H!VHkrxi> zCV_M31&}`vi_e5ztF`0|puOeCclBZrlU}^~k0X#%x$VO-%nAz?ADnZ`XDo|b?aWmL z3r0Ky4)g{W)`5~WswBr6JbE)S1c$Q70{yirjxxFFUK zP4fwp5Q(ak8}+k)EI&FpHPjmeo`#osse{lLEd;fEPa)Au@od>rQG`iN_`6+zyoVawMzmzD z`%ek)z{}xLK}S$WRWT8lFYD<&48Ngac^b@99MggoMW3fxku$_N>-%2dsBD@`rYF=U zLt0VGfKSYUOl&WAj_MG5Ww1e@Z)6(a_*tGW*)rMRPjI`!w+zx7S91-Td@tI2j2aiE zRWEjudR6$V(){Kz{f)uBc0s*N&%xwVgPAok1zxDDbid%7WWTMhkQK^m58Rf%LJAB4 z1eH%rytBV8F&YJxO&)8MCx8U_tssd0SssF79=u zS_`s~M@Im#>U*<@H|tt-#Ncjw*-%X(4lHplq|P=mBoSu!?%;fE+~L_rOm1|AZwsr_ z7nAol?dFF6IsY-i(`5{dg8I7mOpj61nbDQ-n4ocHnb2m!=q!$KiJd(O6Uco`a`C5L zVc(4A$$bR_VdZ0(ZS#SLCBH1kkTO${?Yz1{NdP^g8o}?CILN#T6R!;4taWq6v|H!H zd15)z=8vQ*u{g5H-BQ4)>Wxn7XzY=Fm(FV<+H{rIW>$=OEUtT9-S`;J)+FyZ)NdLHb=5Z-{Gv7N{&5~?r!i4lQQwNp2+|T>)g8a8aU{-7(HYJ@^{3B4(3cKl zFz>=r^3%$xpAPCXjt?z2t-eBdb-QMlQ0EZ#rxnu;sM&Qtg!^iU)%((8K|2+HPI~W1 zEQ!UW^`7k(D;sYSe&<<=t48(vM$e{L7FlZ}+>@R*DW7wd^DU9qoMnUf9l{m^;}(SuMD)^9A3MHl?c`wmoJbDwMCGHE;^5qS#rF7iSa21S%2QF(c|(9UBr_Xl{X zD*yHJ}2qq}PC!H2zCJ|QczwB5@MneU*+Z{#jEIB%ypPp%mc0PI4m zuB#Ksla`rZSPyUhcmTQe)gGnG8KqUIEPQ&#U_)}gRJR?>nzDIp&heUMwb`g4)h}df zc;^EhX*TVCb;HGv`-D8I8*h4r`d@yQ`G2f1lJ__2wMma~LWK_hJB#;j@u|OG{||mP zxv00DhC{C{mZ?#r=-H3;IPDf(Bvv$GN*Ke;_O@!gkwv86OLJNM+5W3h7kp28jpO`S=#_8@1wv_ zz2VkkZ?leH)hg;#uTIIU^&c8NKYmC2MI{#s; zBK#Q~AJ6V`yaip$6x0xvZScRu*yYOj5%0l+e&Jktna!ffmesXrKE%iq1_3h$A<-h=y z0W8zcc3JKTK5cVW-%=feLDHISrKrxBt>HuR8;8BiT`iLuAY}+-^=il-n3zBKV@d9y z1wS=W{vw!q$hGz{)VqvZ?bGZ?%a!1ckgZnP-Tu6sTKB=Ke!4@I5r>)l8#*W+ zC-S+8>FRg{BDwTThxPWImCRgrr|Bj6RMU$i9xR_>rB%-Na8BwAuSRI&z>BqsGX(_} z;*N#i(4tlBJE!jv7s7MfwQtDp+=3i)t@m7v|MO;Z+%=UY4?01FXD7)r!t*%FYPoR* zu@dp<{qD&S#}P5sLwu?>`BOe|LACr6fGV4v-v@%MUP}4?4^iuiINaYsr(*Nc+%*jQ zZj0S*JwyB?2G0)v*VGM*@2l+S1LGQazR`7ZqFs-}y&<`OcTRbx&Z^#PQ`Bw)>wjcc z*q^RF2plep^J`IqR7v4Z0s<#^5<#o`P3qXqh)GGF#)=X|@hS+`qi?m$y16L*|A zibs6ObHRXD2x$kOp9Hq(ZRJpIS4_+)ZfM#Fs$Thkm~(2TQ0P@*)QVM1!9Wx%uVe5* zAWEk~RxB~qcOAsL=^&PyNF9lC)Chh|0Ufe=HxLYW$`w^EG86aY_PDTWs%j`V7CGdM zM8sY}EF>wYO~UoC(?#@eq$_N?3vN*Rf}yXQ0b5Op>G)R;ep$EUyZ=q?tnlsL|#T?5AbteP$Goy8&sznb~ zI6F~7vmLszE(8UGjD(00tfOpaEqNh6z?LTo9#RMN0y?IfYcra8o%(=T933y75|bNN z_fselY)n4A7gW^9|D}>XTZGUNUGf8R{9ip(=Zti~wGG%_xzwJs60VCiM4h5GP{o)X zz+C+p0Gv$r{tbQo(R%_#kKfodktj!yDA)9#3#~G}M+2alo|6RGwoi(7x2Yfm;Eo@e zdy07u`jcQN+N~iN+#im7=@Y;Gn?S+=At*!X8w;}Y3@V!_enEbrh5W~{UA|OHq9_LT z>T8`DiqExh@B`~Ia8x^V!Y3h}ymJzm*qGN{+1ni&lz-l{(PY7Xp2JRLUOTK~h^@>{ z?N(p)w7h3B(KDrB?S*b}ONOw2kLpPdv59IlsFzeLLyb`A+~af3t&I@A>_?X?;fUmk z8yDx+d#z>J-ke`BRIL=s?(2{W$`&w|EL7P{~){qg9+k$ z!PZPN#dJ*A)PjZ5I@UA>0q+&y67ikqg9Jx$_z3eH?#P(v1(Cr^dp|;^<;;3x{yb*J zzs)O%7ccwZ;QC_mi=mO=%gWowoM?yZF@ zOW+^_c?;EzpYE`uV)QQ0fWVJTH6JGXv3#uFUD8_Nic@8or{_ORHJ*RHKHnU2Fz6u0 zscR5Fi6o#kX~u72(`KacH1o`3J1#x$kiEdqck?Y!qH;q=V?154V(QNR65K$MDm0(&2UL@9 zf0~twq(c=e!{SgyJD#0Qijy0RxCE|39M4-^#T?dR!TY8$xB2hv>U(@?7Q2b|w@18p zFAOe{JRHvbA-U9#5960syU1Nr3<439V2qtNs&-YnvfSZ7NUR3tq^^@L4?5XxFhLN1 z#O|S!;=b&=h3;1ct~z}Mo>bb~#tSkX!StU$@BkOs!xu&xll!tX`WiAZliKX7i{q?r z+SQ4&-8A0I-Yo*g&D>L}n;5<&{1Pd^*T3UNhVqFN~jggaPd%YL(c#{8DVa&qQWMAsEKo`_MnW7`ns?2k9Ap z6_e89@}ptH;P3*QQIV@8P-P z4r6l#du|9J9`o}fnf@+$fr9LW#r9fiuUaBv^UIcR`e~fXPb6QSFlwg&WRQCIatE6v zU(2EjyEf+TYK7UV-`r`H!gC=xH8E?nFWAmmiVo@oWJumVY0{r3*VWo2UVlMPk~#I0 z9C+u6jQPo&fmsC~y@BR#nhI>pZ!@#W1SmrcUGEz0bD*4cII~f)X-fSOEoawxKv_6T$jqfSoQXmPjr+)S4DKIB&UrxJ!q$91u9K1fNgr+%`b zY91Z9%E5)Cft2k+?xuzN!&#%PA~mos{S=v^AQte+lJM9rcYUJcYUaMyPFaf#fH)R76)qF z8D^?2pK^HK$S0H{9lU8lhe(~kvx=R0W=SB6pKucJ&I`EF;A1x@9+%)?vFwT^g+;gU zdVC?UL{MqlX7}qb&Y8nNYpu3S{l+Lv|9FzSI*PGFaj>=zt&$2ZG3OwNrt)5YJhMZ( z;xqc6+x70S^wiQ8qFqAw`0&c+*10&$=*_u#yN3{4pD;`x@zvJk_+iHB)vG&b-3@hG zaXCRr8h#@pcXb-i=I7P_qrETxO9Ef_w{a#rQ)y#mmIgEBR&H6jBi1x#rfFqviBg)H zxn+bKqBY(!b4|-V$Yjb@XlhcTF(f-Nth5cPC01GlTJPA|0XjXBd@$ZsoI|uS7L()hID}u#? z;oatrl0v)bAc=YguatADbId!i-ZNjgaU#w?_U*q|>p4ubv}@zbHiYDIYs4Ar#;r3t z=8&eX%ZxQ5NoL~FPqGs-62o`g4YJEM&kh3~e-u)$*lpmbZaN=zHC_kl4G}}~i>zNF zUkdIIPh{qU)PCkOgnagebD*xB zq=L{IRHVXQ7OEKNMxsbd{MePUvehqcD%=~OY?kV z;qPZ92^!p)to2hvd&B1f1}ujK4x&taN`Nz!9-^6sW;i_Cp*ZlYsAW=TW-D3?l$<}q zLiLs(mbxD^`P29NXjzBdJ50sOs);wA102;u;$G>0<9Dd?-Gk@fQtYn814`Hg2eEgL z!{U%h+B>7xg+#+xM1Vi;{FCI2Ewa4?oECu|Oda^)}65=mUx+oWydkynCyRsG{Mu3fb&={zx=BT35YQo{ z6nO!YMAyhjG4+}e;hsOY_LvM@OR{Sk7~blsW8CqPwr5NkvaMcFEnQ-pwfq=zv3)CLs=!6Bi%V@NI6A>8WcUWl7X zc9k)JX-7BFjXa&sXyscUmK0zev?%g$YUrpNVW9UYH)m6*HCa1~1axGGB;e^F(lY4+ z%xVJpyn|IUeOzTs-8UbfYRc)eK4&gzjpirnL$bo zF4FEiRfP~~+lVa3IF-2xF^*4}LtF-Sm!BFIkM6(kc(M%F$L!|?PZDeS;`@h(1Px;W zAL>|4oL6=E^v*8RnZ0a41@YGoBd0Tf58vB8@X$AP-|cO8SCIOusO05xv9aAURIu6U zi?qR^->15M>W8djNoakeufR&5C-j4YFg#16owqc;-qci`QBGi-!C?)a^bQXFqia`qwK%%L z3W&xLB7(h&)I4E1Df*V<->3K{E1sSwlQIkH)eJ4>CP~()kewz z>r7^XJB|bEJsHr(4u8kW&vo}mHw||PlcpRwEU#W?h-FDV+R&AWIk3Ep2z8@!J?k2+k7I96V}-;j=w^fVgV`z%}o z#{u-0>(N08s*Rk9W>}GKzqzU=n+ieS9Wa$qlBEMZ0Z}zt6Q>Y)3Ap$&i3Z|cT3JrL zhYoWpYT!*!CO9BFdW9NbJ4kS1G`$NbLeIB!jb}?bk@Vm{Lsl*k9q#@NtXHOHjnvnt z9QZhNL+#t8g~?5_?ugQFcthA3(ytRTy5o<9)lh-*_W4`EcYz%eTfJ0E=M^2r%r|Cx ziOm~zr`P)6V@5&IRa+U>UZ^htPgCuiZTb*2(YBLMdEqPgS@Vp(wyOc^h*NX$@`ZDe zF=i+2$iAWnAfCDS3?NpgsP_fwfsd7QG!RYDXRAuqpVjaGa*P1hZ?4>(o<1J0Hsrp) zW325ytBkjKp9Pb%R&=Vw9O9uivB6c6a!z{Ov|eR%nEWTADxJs@G( zgog864Qo;vr1rx;xhEep7$B!fTVkfp7ff($R-DMUiZEsaPOE+!pi0x14R+}CM?JbwT7s6$OJJ)F`aI{lWy$A zMBj~j$5e1e#c;plon0|3>A-!M;CcJm4<_HCUrT3 z0iRUFpuwe?5*OgR1O}NKV^YH2GuG>Slsofy6&&^00!lyA*xLuek|5T!5~6ezieRWJoM>g*TFOXYEb6Y~L*gX(V|! zUE7rAXE4tkCTB$#XmX(Ike=QK@`vcvK~VOrm4UX*>HFPts9D9sR!FbD9-lBctAPnh zp8we(S-)6ED~uDChw>Y6^@$C0SjlHB3T#d~-JH0c(uT0*uxpA}V51GMoXS7MuIp9# z1`m-ct5PFs%%MG@tetBKzpk?7ymcl#S95g$w&&s`$V1>>jqq}c4mk<5;(Z+WtB7ac?r00WynX3K zO_~^qlgqAF-+krghXSfQ@un7(SM{l;q4pJO3IkIFD z=}HuM?4cOODE85;a$bV(c8T5fLQ39n57F!C?`q@SFi zhE@ffbGNl{1*l=ACSSTJjlna>NY9Yxs5)Di6-Nw`z5>@#^wc`LN)5}%^sSN4#J3YO zKdRI-!kSF-(oa8jf!Cp2M%7C&yWwfDlaQRQjq)%Ua+K;d=8vCVV)FAx;Ciqhpith? zct=K~(l`4g0Ij0v)n{AEY2Uw%+k@a zPK_;Z5c9r7TrE`3)~BfVw)K8Z+BZe^;Kov5;k%mDM)#$Zked@*lQw8f!j0e@D~0TO zD8fW6l{6L{UMpNy^@c7(=z0ffkkBE?duaY-#n|icGeFYn(DZ?sC=;o4mFY@1xzCT? zT$dGa#ir9;e!{h8${log>toKYUn3YbHePmx7k$U6+zmm%uyp3hqn2=RRdZ3+(&VjO zfz2+ERGLrF8dF9Q^NkaanszZWqu4qu9|_Kftp2&Shq5k{25v zxXm{B}q0^94X^-$ckYps|G?0HS0kA!IkpH=?%_pKpFWdH{1O9vRM-O)UsHsw*MpnQGE^M(@;~-0P-P;yKXxo^)4bCDvz60-DOdpD1kkfsO;&i%Esj1?@ zD1cH?%k>eX9DOF;=m%lgxp@5U-UwM99zP#Wn)w{2t}XULWEWDvU1%&cTD`Iq8xnZ* zAXzn%Zo&YQ{c6ZV{7du&D(Z_&=Sxw^xZW<80nWboc7EYv7VN@A?*c%sTho52P& zX3c@k`fM_re^^j2S}}8<{EV_+%N&Q^p_NKX$ZcPH46zkb@Ws@twu{54eOunL#5pE0 z5I^BA)P>N6Xe>E_16g)t9@ao$D$B5R*o+!7k8->IVDj=y^4*Y`m65;3I_Vb$@84>e zie&}v=1mlH*YhR$+b4kpTcvEX--+V1YQs`aoA{6P>#q;2R|Be|YbFv0sLHxRUr+b? z(JpF3N$bNeiBFPI@-~z}uVQ+v1JH*Z(Cr#Ou&N2WdeM5^k(q^j55De!uC)h`ph~SD z6sCyZdZYG-d=T`YkI0hm&iN4Z3Ktm}8PZ4Agu5IHc|4SB(lhDEyz@DgeFet{{=){A z!_`l!@PeKAT~IV)nad1qDH=n8PRVYG#AO!>0HcW0B*axBD8Q4s@8U8m&Oo32gH>`p z3YSot=7)mq{i@ZD_w%P*x!y}nTUdBJiRa2JDr7E;94Pxb7euujh{=->PT_YPuf2P9 z`E|H4bqDfuNM?51Qg2pUr7MdG^c_|U)&?KPaSv0yXE=1 z-NTsPkMDAr576~?f_oikQ2rO~J?}_cWJ5?Gg&4-E;|(!{RwK!at;lR*b8J;M?>Z(C zvH6=xg&4Ms@Wm)FanE;ihy9^xnQ)3=#fal)Kz3)lS}nQ1Imv11`={2N_I&DXf2i3A zkRRWw09^MA5Xgt zf#n4svYte)`7mX^W=_e~247*lhYtKzA;(%_D1s?CKA1RnUoknLdkE#;s8u_kcY^GN zCvdk}F)2QIy)~(JSo&O(L66cbIM;f&tZ8c0m^SGFRLw*-44)U{V3uRocu`~i0NebH zA8~KA{VO~9BEgYr#qi+Jpr<^$yf1lKDaMG1eX!GbQ{wOoV|(TWlwbH%Cm#CA|609E zm^%@)HpYG*WzzR_vxQVz#eE&qV-&{CvriH$wJV=HglKM@ae7J`5O4VEd#hmI=~=#j zB3k*;wg09`<-N6=N%x9QT`6=Rzh80Itxg+~-2dWt$W{V^1fh>g9@F&4%nKT-%rA`H zfg9kQeB#T0K=@l>4H}&?5xS{WON=hIIFo9-h`ieQ>+7jxn(L7#&o`!`WZ`KiS zA$unxJl4Y}A4ms2;h*@NhDvT2OpAYeU%MkNiW(|Ozn2+*D<+{`ppv+ylr^sOr71OD zgj-b^Ac)SDUi$kHW#U~^**r6On(#WQ-Ts7rWSek_YU!1A z5~rVtg_kArg69i|{xjwNYvTXM;2wegCnO@5?vy8OxiY^+Zj~6zSswY%od5q0x@c+W z*r2p>dgflZd0XQT<9TmI>l~Vyw>e(YKHH)&-`!`tKD+hPH~(LJg=TN3o(M*8OPhn( z!(jlzNTqPKok`@VjxAJP357IFgtd6(c)*s=-4k0&>2tMjA?d}2rZ|B2>)!Y$TPy4R z@kLb2gf4Mpnpd*LKsHaPn`meytkiMNU7NCJMa%h{TAaBqR&RK%8<$RcvhOeg$9tiUc{CW{Ojn3YLnY*CLVbs$4Xrc0<13|F^)1 zU~S>2VT%%KMqI|`Pfu-^hsNUtwwe>g@v+k9yfr=$9lNyN@5DYifo#sZc0pNQ2Kcx& zFUtk8VbpxW7BVhE{ROI`i_yM_B9oA7(v%(R_r27G6{uPw;{j<-F8%SpOA%9077Zqo zMJDWWha&fU@GCv$DF8?X=pHKAy=0HEegRZ6c7kb!_Z@|MZN9oZ-8{D~K9-g3%Id_v zG=z`HpP_VOTN$#~W#?mKB2xT9kA=q$lM>~ex?KXmejvqoe}&m%Wf>&(2Xw`g>?P99 z4)7@owsSWx3wA$x>#!lY!ta0JieSi>%#(+`GB2B1i3T`@l-zwv9oQ*DD+D4`chxs; z^~&=LdW?7IzE52s?&}r)iQwaEyvR7~+q!rHer+K_iJG4nHK*|GNH~a#u`qKOGeWcs zUs6C;euz54`zwu#(3(CmNN&TDli*hM=v ztR=y4oCN7uT`$wOFvDznn54nB8q|wf*~%A^HPsq-kPEH1rOm-ga?15TLHYtn-_+)HYQMi2C@C^o~oJ3fgDY zL#Oxl3wbN*YRf{i6lg!=dpXZgWnlxDSlTonxe>er_0t5SesCE!`y1(zoaJ51Zh2Ja zHo)G$kyPmBjF|yIqhDd*wm$AUM6I6uR{Hvv>8L$*{L8z97TN!xT#tWSL_DRc)ZV zdu3Pl%^hDD)jnm%-PqPxUO<$jk)C*MG)qKd9Ne9Y8m2|xO(DM>|Djv{Po(!x}XS!K1qn)ID3J-*jQxEqkm%v7LR*YEHlzJfcAgn!ma za^r~A#0eQ`syjZuWBN!vpjYd)0e4+|i<4^9WEB5+CM?r9EdM96eoBm3nSspG4tx$%TwbWqQn6|KPX$O8J`jGw*;tyZH@7Ndk(m=W8?Xa+W^6b ztXGT0*T%hRH$KZ0n`>4Li1VAG#pf&zh^ZDIo-*b@Z~}Vp<&mmAVQek z#Fz)daDjO+-LRVdjj7o!{O#5@d6*@(b&n*Wa1)sLfyIaWS;;|UQ4`f9IpqcwrGed$ z+(6`oQ2{8HM*1%~rx8DF>xM@QCp|(gD&xO@w;M^crS&%#8YSxmz3o~TsoU))-?yBv zVabFWkCVu$XJrK*PVESHH_1(`kq+ZaR?oxW1cO$Si(073*a+|wN+{Ev+px($##o8% zpNiEnBYRaY{y4tVd1lzS+PnG0k|hL{lREZ(<_~T6`bhcS<+K}tDGy!LFRlqIq}VR^ zh7O~TqXuFs>JBn38C<(4n2-E|dnZ^?5sU7gte=A&JhM1I4(*(rMtvt2rSspS-%X-r znVVZ4S4!#n_UG$wK=;3=G4myIljYmulJeava;L(Dq%lV0Qmu#Zlm}E4imX0v-Q2lqHvY|R+;Q%K z0P}g>kF>7^(;oy1R*Q@$5heO6|Nj<+g4Q=VLralH7+^QUz7LQHG1a1~A&OY|J0+Ar zukhtWxpS^G8@; QKikg6@t5kKZ~XfI0PV*5P5=M^ literal 0 HcmV?d00001 diff --git a/profiler/advisor/img/op_no_bound.png b/profiler/advisor/img/op_no_bound.png new file mode 100644 index 0000000000000000000000000000000000000000..081333cd2e0082ab8efcfc16152185c7dd2c2fcb GIT binary patch literal 39129 zcmdqIcTiJZ^ezmD6%jii2v!h5x}g&l6%_#$r9;3-Cm@{=La+cLO{Lce2q-PmOCUj! zAT>&hB!s8|A}tsKgd_yM`088k{pZd%^P9Qfe3@aGea=4TtiATyYd_CgYscO&GZx)( zXorA+faujL7jFp&Y>pQY5Zb$K3;&Amy*O9?Kf!=o#uo%C`=zJ(4Pm$Qrso9&s**(3 zoHz5^+wWho2@nw2)&A>Gu+#VTJpq9XpQ{(o-wt)0=aEonI^kcTGYdZukCN_Cg*Kvn zfGHwTr^W9(Hjh?6P&g;%8TvNCYsj+ApYF8_h`ED5zXT3%Q9K7#1sxQ z{rkVkT{?J@A!qwNH)SYkRI;J>325z@x_?D#6Ty}ZUyU4t#=Jb%2_|heG6wc$0c~S zX{&C3{8jDG?XR_uB~S-963%Xp7yNUHmK6E--L}##@e3`i8oDALf#M>O>lC!z#_HeF zw8g6WkvEo+SQ2l-3Ps;Y-H%_NIdJx$FMF^{8Wt8<#tZAnjWvg}&VNhf!Db>OO1Kl$ zBsAWTH?$?u8qSh*q1lr;{)=+l=E4_v&pMI^FcSH~)QZ5R5}$81m~Vm&}g6M)nNfXwsZ-PWQK zi1kr7&xe0HL=G+y@ew1f>>g0?#^N}PY%Ck$PHju(e@g8h)9>CHzWMz1Yx8K1U{BH$ zw8no#EYs1yCg)|unazUWKli^xa#{2s6m~s~)lc#bk!{(CfVHg-nj7BSC;X>NPBAQG zAsB^Sv1P5;`Hn8A0sNeVaDQ&TJs$!Ji~U#co8$XrF|gS_t?d$Q;gKi5_V|+FoSPiVa1;^0kW>~Ar(AQxuIhTtMq_DdhnqyM9 z{Ud`(!Aau?4EI|=cazj&F83yOZLWj96%Viv*)X0t8?#(UpU$^GOCYz-(wecnX^OX# zk^#|Rz1x}v3z5B3`8>F3>u-^0->(Sa(#h>1pgBjz`O++_O5_ZNQJaR-VY{-#RmP_2 zqq>v@86Yvzk0Q%L48c8SnhSSGBsqpobKPV#<(zi@^`1y*;t{9tQHOCfQ22FL%c6Y< z)Xrq~x;`sj?4VTVVO0R~3w*J^eR(!f(<$5=0t@|HQL6Zat?}5UwZn|A?_6??iopnc z9*LQ*gwEKJ33U4)bK~<$?cvqS_=~n~)K@~dR;#>e%=+!gW~prwKwgV~-ynhv=XKDM z8Nmy57IU_L%intM4QLmnVrL_AgdZ*hCvBYAs4ZO{Vxc=xRIh~);JQcPI$Mw0#0AdC zH1n)k?dc1b-@W7O8D<`cxVfeq7lQ_3nYUSUL2JA&0$D_bLYIN}Z$%wP_-S!&*KT(N zZrHOftg?sEh_`Zotc>KToFzhB(G{ua#b9y`euR zUDK0$@I#Lr;P-3?h7zRwE^LCGqn;|~x| z*aKh5;y6Nr)ROgLE-nsV1RsGF$ujZdJTBeqyZF|3NJCa3-ET0@C^!Bmd?1}|0IMz0 zSbze?LSA>y)9KJj4x7%PVbK)}=D&?4JE%sGs@E`R4jbp{@tVJmmf&7`FQmeN68H|m zSF?KLK~y5)q~qBK1E)-9t6{6-4!p40X7q8)0$}@MtG|{)I%7_RQcd95fGRa_D0Q4) zT!~~D0io4si_*d%vH`bXn}4jiGWMD9SC|SgKSI{8e7`CHA+X?E7@WI9V&V3BDOm`o z(xSO#B{v#%r3pheQ0n|7BiJ9P)N1XKj%LfAYatWR+9O;)$y}12(;9!eWxLgmJJ65- zWW<(A?)u*IR0Co_I*px=d=(Hk6@{j)=MsJ|1TAURb!NI_ypTHIMi2!cEsoEjx6Kir zYZtxup3Az=yT?jBMFzr-^0I^+I1a5>pP7eE2D6@Q&oWrHW=)iRTjkL^L)LLya@Lnd z^Mv4s2V^ zcf*hjUaa|bXnusOb(qwh1HY1mA@-0%-bOMWThR>;7IAawTP*~~K4Ju^D$Dq*+Uwmt zR%Ak+AN5iqZAl!+z#dZt&!NcjwMdR7D*^3i2c#Hqt~Zu67{mGzdDvkC&SL1;TETY{ zzz<#@T~X!3J0Aw>(C@+be@fUAkIfVAPI>w4*!GJUjy>y&w)`d>%8+*fpze)1Msc})AN zRF}LH3au9+JBzuC^`vH#t?2s65f_$INo1{|zy!3>Zap)soTxDHvw^>PZJF5nVIiDe zI`*`vgt0QyjO&&l8eYk*#_vyuMH$ z+RE4@G_f-=Q|dda{K=y(btkdE^l?AJN7E@s_&~^ZiB8rD!B=YcbwXzr3eCBfAG}3= zI6p)~8&8J3m7{g8@h3WnHNiZFEsYs`Ib9yf5Nnq0TyA7NQu@mMl&k&B-SFx(J~on} z$XbuEeEa32(7OiYkGzELeKWUqNi5u4FVzvG&eEe`<~tvJ_-dkpLx$pkaBs}a5%xND zRvrx$qwPAViXriSj{d-mxBJ~NJfsMU1Bya0o+sBIS02T@ccDc3ae4%)KCHP`dGx{< z+lMtd5b}r;QH@R>8!UmsOJHjqoy{mp@Vn4ui~}j4gr>8eE-=2#BqxD5H(5Ue*7tq> zZ3I$&g@V)*yNfqR?Z0}YdTBd#b@l7FiR6byyEV4!n@T=v@OWmv{rXAFD4Z?NHwR20 z8fLq8^sJXz+iH{cwoo$9TC}+M{OC7W*rm4BQSm9^ro(4;uen`)Im{Dmx!V?sT(s)r zJ+AU=;5siEA52yUf!2JtD^MQ19u8n5vy^VV=7KN(7R3N+=4Rnaw6^Ifff?fO(K0m z)jm^ZTZAUhXW9z6ke7fk6T-n#u%(lF@hWH(xhZ$uujYrM%G2|7Ym1lumm_Pec5E}x z^;Pf<@52a!_gV8eCXA4Cv%MiU8#Xyp^Vo&Fc%V2tajWg1|2{8;axAh8+7)t>MqPN#LaJ{qwJLF2SDew8*7KL z-`CCy;XI*(z`ad~wl6S_9=Tm*oSt`Pi*+5!9oonpFpn5Ah}h^@)NbNCyTA0Bh!6N# zf?t2hCBg6^Di^6LpG%-NJi;HmR5I_n3HM#>cBZ+cVcy!iHyUQhc1yz}c&#r#5Wz(q-rz8CimBS_{<(q*?LZ-vqvIpcPu4Tx^E^7Oh__B?1V3SYM zqE+42_>Hw9?H_veMq%N|gOqP@_jD6bbB9#TfcYEYtRL?w&gEeo6n`$*H(8q) zTLouXzjntJ7TVacC3pQi_SV-BGZ=kU-)nsd$@iygYsuunF6lZ_z;CQ}|Fn;`(^>)@ z?-=U1wvRPS?{Ae20&U34YS#~dv63g85r)EiF^Hh)t%z9~EcLR`Sh&tE z)sA}WO2BVzphixmT`K^YQ>MSc8{-hhxkb6J-iXUJk-#v!UYbb zZE@wUG;^(42e^mdQsywnNT)g7Q7)Tst!{j^pW$3Z`_TBK7mhdOm=_~n;f14(Ufx-M zQ2)#0T?T)L#%!19F(1Q5z|pV?8|GMsIn(f{ zP%d{%{2=Yb8?-+qH+>x^WB%}`Ehx=!PfGxd{!?F`(pN4#o=ltK1I1C5y}#Fde0aCfr$q)z!Cb#V&ahlU{j;PIE;w{`|=Cz#zE{w{`as3(5@U zD0b`0Fp1pGXzh}Xj(glTJAc6mkemi(MEa?09NIP6?9c;B-4bt?xj;IM?f&+SJ{v+c zpSQFJ>O{aFGKO;2#P+Mwk-5gnpvOb=-0f8C6X0j>O;rd8;wTsw$RU4H2?mCal*mWK z{(RrccVKK#_}VnENN~)G6VP7L$8yKB@d2E}W2lz!vup2X{@OqNRZ1J?LjD?Aq(*?S zAehQWA@n8LL3PKbh+>#E_c3U%DuzNx~7jydqq85%IIG-``Y}w?R zdFFS@Ny>r&vBDr1imzE7qD)Xfk7?*Q{%xi=H^;MHY>rR$`h7t_;L_g=LO|gENVRDD z{$XfyQU7weV}HntfWX^rf3rCOrGKcOK-~Xa*YZ{&+y--S1D$p1&j7yGu9NvIIN4TSC<`A#4`eNnXB`o|WqNJ{rJe!W zx7BBt1Y-5wRx)ZF-T>{=1;*u8ylKy22P+OEF^x<7VZpYS2b zG@S4OYT82h05@GDe0X50ubn7XCP<}3tV3B{owB5bs?c9S1klAEbAfRm~m+1AqNv_iCJ6f*a>wBvlpVDCEcIiv10^SpDg|B@!Ci_P4yt1Ff>Sre@ zW-m0Vg5te1{#DD#5BE*~S2^lXg{ni5eyb^d+YV(vsbObSvwcLEQ6HyJKO}uy*>Zm? z|Knqc%70YgyX~MCQW-E5S+!?tLSJWcUx;mn$^`(z0Ds~iQGMj{yuLTfVZ6S#)Hzk% z+$kY7CC87KBuBD^?j>h1rsa`;>n73u$@HHHlCOfb_w7x%2Um{>C;c7%DLMHev~Jb6 zT;U(H)kgfkSOoufy3X%cT^|p@iu@U)wz{o;NMi0LoJ#BJF##v%-UflU`ct+7)-nNS z1j--r7hI0cl-=*9Qc}}Ffsyn4;7PwU^Nhe>&9qK?5rNqwd=0oIvJVRU)$9RRZjKDv zt-2*rqcdDY;IHPS8bPQ{m%pmpGQpV5k$*K8GrR{s+FK{^b{Bui z-=E6x6?FQm`IkIf`C$a@fd3ofJ*9KAb2e2hYNt^#Hy1|f%#Zly9cWvk+qkcLN@{*s887mQ|TP!;ibWp_9R&=wjrEBnqEG)NeI`dGaOkJBD^o`F3McUI4-LNX)Xai-`ns+ zi`1kcA`!!`Ex~Fsw}X`)@jtX%HE*B0Bx%-_cvorG`C-SqThn(ve!bj7#)QuiadYZv zvUQ3Xen*j>z)j| zWd41$)6Vjx>0K^?&=a(Kx>J`dC-f#19({cP+PN6`s3m7qg!!z5d;9vLl*#(^cK%dJ z(4vTh@%=(4I?``2x)LKW3jHo!WA5EIJ}RO|o-qqDXa!!2)WkCl8H#oTQm8$XrrjCo zVx$lDFx_ak2-mjI9O~r`Ru2*8{IW&1TSqM$nG%AowdYB*=81as$4bC(1zaF zn|6<9Uj*9C92|H;gS7fS4SHR#hQ#Py>aDwRcwRqkknr+-Oi!)$g%sm7ERFb56|}Or zTwZV7X1PZd*B2`XoIiOc@56iO{3UWMV6N*P@X+F^9I@md8J&;FkBn456an)F#h>RO zL-|}-ynEW6&@p+~Lqw`RihXd=|uRwY~rDraU~aClU(*igRdTh;fN3$p?7kp?M`?EC>LtS+%`2VQsReVPgLkX(o6vq?QKoIr zE^F$*( zygn>jP^yXsT0AZ-pop-k8xeaRZzEjxhza&AwL>Tk9nW2;3tqTGINh31ag@@1R{Qj? zshid>R;WCGSu-8I_$pxVzHg3i6`dWf(;vsE^J~o%Q9I@opS`bjVk$Yz{CYTJqIfac z%TUmGUvSV-KV0}?tRaFCe=zHwKS7S^ek@Ub)iKSdD(Bjv_Bs#faEEaAhj0wIzZ%1{vOA1)+of;i zSxvw)0knhw%N8gh(~H^EogLPh_B5bwPpV5nUKsSAUH$MGjPjYmp>TaikS`de*7k_{ z&R%5rW|`>mRkRl z7aVUwFW=cpROYqiR#n%*(uv7T_8ElA zGCwA*U*f|E^2jWnqONjmrDD7;g!NKO9yT2;EzIc*oaBXLf>S6-g;1<@hz`he{%fCu z*4ypE@qPiN$+t8WxUsdXx9s;80bf}-T*Q?M;-8?*7SN(%o;wS@!*pa`_7LSOP z*>0^!nADkKSo~4DE=2TD;wAPjmsmnVe%@z&%W`y%N}+#G-D_gRm(zcF(8#K7OS@>_ zsdw*U*6!-GJu~~r5CL`4?gP<^x(8theE3$76-y)@L~F^aE2rRMR^;3z|-05E(teS=7n6`v|3L@_C55CVwSkXA9L7 zo34^)a`kb1KYty2yvq$^NQe)x)I?~uh~p;EUsr2#uw4BM5jUH`l1otZ>1*;>N0Io8 z%kfjQRlQL@+x>+EaQH1jU>27LaWe{JyN;z}|$%dKVm zv+o@)jmo0duSNC%V%Y~Ln+7xTfRCKb@^Y}G!FZ5&55cUjDJne-pJtb<=oQcy;jnnj zF#}O$%HL`V0V+*y_J&N4a|6(~u(t;zZzKeOr{T2<72gh3*ekG=D{OT>4OljuYW?PHqhyJhOS2Yh)X77e~Rc1|JA>k(shb=?-EwOHTI zPd4HD-fWgWom{T#XC^FN9c$jDXRlE#YyQ3{VEX&>i3&{U)9pl%MX!Z|+um~39fENK z7aq?$V=k@j&HXrKt7e?ZEE2!32Fz@FqnTdBtkx-MZPQ)WafIpMX`VJ9JNkS3HyCX< zrfYsnhh`Oj8!0h@S?wItsMKfP?bl#-KkHXbug8jy(3;PYzL@tq%OPKvkLtZG*2LT0 zYFG?_yorENTJNTol>IXk{hP-a^Z4UGd$juNh zuY~_}%ekAo>cwAiyC^D+)-OjJVs)UEE_w9C?FYR_-p=SJz z?O@K}NNQ(z+#`)_Z#7y6a^k7hN;)V7S^ETN@J{Y9?NQUg7I9^#Z8K&FPhVw2hw!XF z2=GDcTeUU@7}N3Y5^{I{6LWFe#suU;Nt~ZqhSxjTw+q)cgkfUsDmo?Wmv$!Z`h!g0 ziUYQ2NAxymx2#&cKh8(1@R$=)fjP&gY=1g#`~MYI<%duIVWal7p>%1zt??Atf`LHW z`~RM%z_I4J%3-GV zA>%bA@x#@dFMEuGnwFS&=)QCvtNSLw8Sb7A@EHk>Iv3>Bn<@S-G9HjB9P7XJ)=Q zyniYPwknBkagBG=irz17HCm@N^O4qFarBAcZ-x|ZSWax&9UJCP0@1WMqoDj|sY1hyV_D^SAZ<9bD`Bw@^n|65C z$IpQ0hPeZ0jcl#jgQ(Ho-yNgs**mkp6l*>W8q}(tKHHjhWcuwp@nt3?H%+UXKuLeX zWV%@4`}V?L^h)3&fy$ka@gY0+UK9k|$U*eG!aN8m7kR097C2uE!vgbgDOcW@$zsa# z+yUTKt(3wuSJVw6On8$YtK}z8*MgSwUL#N!Mz4V(S3oe#r6%gi4Pt;cXoeYW_%UUG z__>8$|5N|u#90X5654W^B~Ms^C=LWbrT>5j`!sw{Wmn$k5!yYeZFdEJ6V}6S{18WWmfyZ9t%qGW4N82o zsRib_>7e={`kjw`ZWx8R!FjE341-vM8Gv*)ac!5>K$UWrtG_$*noL)fUYlfUG-NVud^Y3NvJqJJ-Zgl0p$)SF zuLnubfjr80D5yt<)ekjK&gUfcoJtzMVR+J@4sndl*53#ZSEy}X1$Rj-%|A1m)bGkc9{v9=Ak+PT)z)#Q22B(Dwa1PsPG zFNHTV$$DJ2w_n3aslUs#rapF; zRJk*AC?oAS{m!dw{Cl}3S5))z8m~@0y6j?TToDQVpQ+qpIm-D-UF&p{L#xukX~8 zHav&*cDyP3`sRu-TfOuFnf`?3*INiXN~s~8>u0Bjk=Q4}<`sydH%kWMfqv`{%Qs2a zi**Xc)DtGX>TKIWXGYb5WkEd)sJbd|3)uWnYZ|~RrJJ7A13meA`MHvtpVBL6N_XxM zD#&|vcEIgoPvJmFwWuu5*&Gs(EH zq_rC7o#3O=*~$I&|IR#Mzv?b24Fuwg#MNO_D7E$JcR7QxvSE2ZiI1o4x_wbRXG{Gv z*Lul211uMrnNzQ`-TNkRRw6>n;p<@dX~=E@c>{5kXn3|@-WysFRy&bAd_F%R!8W@i zXdW?sM)mvbR8Lkd{EV-P@GT{hY=Ky+uIaeNEaD&z8!|-(9Q9JFmRg;A&Q{=H2kQDt^av!F#cS`C zEut<~S{YH?xjII%V;3nMx*$3=fn(he1cQ*}KCrhQO%V;*OznlV@M}Do!OAyvnIA(a zZC3yhUQltoxp2H4{Y@ew|5K%>-6?1p;cV(?4ed0XGO(c0o9!!tx43(m)YDx0Ut_=k z7XiyqtJ$)DY@sLY^)+@WbON5)U^?Hl2VzlHGh|I;*lJy_hE~5Ev#jg~ONL0|qtt4* zraRuAy1;!cNVU~*O^A6C27)N90tOb}M;_VoJBm0`^)Av6bJXI%fM>InTHSQ^^$<&P z%DEIQwh^j1B=r*0 z@7(CT+|)PF3=lqX=oPhL95f@b93(;C6Xe-kQdA*S*SExV826yOfut3Uj&GH$3rA<` zQ4Z3ce`k-ll@Y$I)B)0%8NJ7`4Tb=F_+m97b+C7U8E|t1S#3DlQhF+0v<|;k$B-Bz z)_tK=hex&CsR*inZy)MH3e@Fs#uR3)%R!SZy6Y<`@gjAHQ^IS4uAf@&8iLP2fo=!# zlAU|Sr-FC$J>OZ?U*S-Ir0R&)B{{NtyY-la)>zpUtp~hi@#*N^JQbgTFc<-H3~od| zcaTVOB)xsN;vqK)2#W1~;awmycJ^3qSQbg0!${fTF+ zob!6W)GERY^}(FRTwOtp^koX`AFKcx6f)$|*mczODrd)em5^=Hx556pT??P?h!wJR?? zJ-WE_b=BiH(I1u>)4MJ@KuEo(DCfqgMC~6WV#BDlEGXS@Ls9nQj#|^8ZNZ{1*6bbX zxa#?1QMw~cMlsH02+$?*98w&A2kvbaKb^*~n?}|4%c%f^-=FOcMYhP#P-bfGotoDB zKC0%y4og9*QG$y!rG9&r;5=U!pp+-KA6CD}$YMDFltn=@nZ>R3fhfzEBX4@vpyXQv z_!<59qtA^i&J@nRSUL>`b0pPLs1mYpw|+`g$6q(J^tWw=5v@~x*{6P#^VfVx2>a}pv-Vda=X^7Q5?Q^LG(+2_GI~MBy zAYgtBeoRT~gm!CNnP{n5#9q2)rg_4iZ8|E#@xBs*)T<@Sai^JaW`;I#(*J#iAGiPA zp*fiosCEN~{*ycSlS&YzN?mSibXwa5TEDZYU+{l>@_#boZ@78w-3g^>PBl8H4X7Iw z3EK8t5R6PYEjQXh_ZVPpb2^%>W<|^)*_ie&v5l_%bjLn@Y z<9~K|Q5mptDd54Int4Qk_aqz6kE#iNz4wRV%cfqq|4l*&7h#l@_AXUx{1vgU+;;t1 z~AvJctJq3#j?$H=kU4Nws%{EaGh@Sa4+t&NQPiuT~ywv z)XRwK<(<1#E1wW_nHw}sd8MJ47Sf+A&|&!ls=-p0H8$#ULcyQ6bVJ^@y!B&cN7>qX zL|pbr4xW4{w6byOr)D#@S?y{!HMZK(p8d7`zA2_F)g?{pqjSx4k7Khk6-5xLr?zqk zLf0X#kj(1HYlqwwHY>j9tMMo~aX39%v1WCt>g#~VP9f6zCsZmtZ`kXH33UGAcpby} z$+}X#+vIp7BHAyd==dq>sp;fA6GarVRrwmC(f7625G9r40vQ(xdhW8l8g|bhCZe>~ zE_LG`{Djm7Ix*_-++NkR$y7+Ofk|?J>yb|8tp~3M#*TMds8pD1ZhZ8z>#+@UEsQW< zV1RMOK#h%Vrr)U|olwM0hh%^V{yay?1@3Wur6eNvstNM=hX561*Iil9sbv=iA5Lkf zkdRWd`{s1gKP+o*pb}ay*uAEnoCX!~?j7#Xmf?6_DGAblx*m_SwUezs{x7k+-lk0n zUy_RK>BbolLw8C&46WG6{V zXd2MJ@XXDVdSW(ZIab9Y&rEvTb6R+AoRnKShKCqcHn57;e5*R)J1a{@O)WIG9MU2H z9H12=A|rIY6?YW*ly=|>S1-}W!tUCL|ICsA>o_7Wz34g-dV zx(tKh&tw9MX9&qbKkc*p(Ealzv2JFCsh7|ps47)FMrEW}j7qbe9c-x(!Kb2F8F>T9 zn1ba?X&a&5Ey_zqDl&?rK^CvZZFkX}Hyb zIWGeM@|aIg2swiqt$dzq*bQWzE!_618xgmpoG&rHIb4xa6Q*Sba7gY{hB{ zxLAC#fC|_v{jS;>7W%miGoVR`^T4zS1OWq2012~>C2Fnr1hWc-Z_RmZYngFl{ zLDY;&OiCqU2};@?Kbz zzpM*%;q1XFowc~SQ-!FWi5!~@uj+OE6mR<cPW>n&Rq54-RUNO^ z=_a6GJIbchoI5A3pvv;xNTKRO>%DnB`o8I?oa6R}gH(q>V)~)yzUH})b};KL#X}G_ zmhvDg6A#)gyN}IpCS__9!0FL**}AR3cE*UIxAE>xzth08+Rq~yja?q&Z%2f#_*;BO ziAu!~adJ)Av>1PER!Bj;N7neWq5^^QDS3_nB&uFg`jk|Fjq>NjLR-#cfFJKEL>`c$ zla84^j%*HpDNi{EIMpM&3T+LK6FM)S0!xTQ1s}pOiqJmC;AN^SqB^*1 zQo*AooG-nT%d=+<;g_1}Nm8Er;*x7w-tVL$cAAs^HmpmN=56)s9oH zgF)Q^nBMC7VYiCgSX+*UDD~V3`qM%G%0OUAkfdfJxQ>3u0zx6i%>NrMkl&{&F%JiV+LXH5m$49MiJ5(<`Zm=5M@Mf4y|xpPX___pTCAlUhZ|z=i@&u=RWQ7Ln5u zRRU5rtkmuF!cfAJX>l{g&==#f5#@ zUBu!OO$aj?Q%@<{Kykp-{tPumkca^W-4z5zy*%clbq)s1IJ&J<@e(-M?0z!h;{dn+Dn|zvd{B;C z_+{#w{V6+_^4?M-o!n4*H6&#z1ibEl{Xhb~)odx(ykV#$=FaOfV*mG1_j!DGz?=R( z7I?=qzYMC>qZpr=Z|GITQSfNy_B;(z_ZanmqJDsQOoqZ>Fmk%^NMGqrPjXo?F+vyL z^dGz8hoL;P_msVTP%X8q3HmHM_50=bkd$c6vh3QC$P4B5e#(%KhXC0(|F$Nnx>{M! zNtFiUTS?y<-M#7}41qxb3;hXj@PG;PZBW*Zo$e`|A3;A3;4A^IS%6+!?$bUrjZ-!> zRX~2>H#e9)mNLsOWtH)egiEsEgk?qjIQ70J-U)7D=*GF(-K^ktr-{zUrt|xceI~3@1Fz73|*FW~@BpQLtQ{*R-SrtlPM{Iul zXSE6+BBMNFr4er=EWM~nTjskd#ZP%6kjgIsO1)KtxFE}5(B4lLzr!Ldvr`GP_vs@QhJEE&w+YZ8Uv%P8ifh13qwFMG!@G5&W(o!I zPF}TcRQ8c4XkG4+-jjOiDz?1pFC8M?#a(jjYP#R3vSM0z8#Hzd=Mv-xGa<>r!JT<7 z!W<$^$SXQV0T9Ie46wu#y|H|3~{T?k#nyq(k|6|I8)u3 z>C;jkGT>2o^XKB0(u|04noX7wsD8+*FkWmlxVw0qr|*~y=@#i+3QN4#Tx>e526#ow zXql*aon#7bj3PC+0Jk!*!|``}#m5Zb-FP@nmbq5qLsSAF240 zN)#>V6|k_6nVJ)DFU$~IU-fA`9fHp^$2(Gc4AlB*NuyUr>I0^JtlEwiU(;1rQIqTT z`XH=RYzmVpfb9P_&Ns+Eq!#BVHEQH5eMbax%kQD3v`BWYFZ|^XcchlymfEkbN1r_1 z7bpk!z|Gvke$hGpFCyl{aH-qGZx$x#BTn&=k&MNsf}>O?pxT=)-?m90#e{Hn@BhoI ztoI3mg@xnAgC`y|d#YwfGT1Lw8XkxIspR@q*!5P9pZ(q@p>lj3GjQoq;G&)lIMw{D z@uVWl;5^RaIb1fRH{w`2#=buh|Mg+$f5^}ObP3lEpC4k&tH5nRvx~Ms>}ES|dniLz zp$2i{TGQp^gahl1x3@FrDcm za&c{ugvO?o?8QfrZC2YP&{$7|aQ5^IQ%E)ZnVZ>5ZEZ&6r>ygb9m}O&2aKA=E3mG6 zbJAUF6nKF~%tv;h-kLMlr(lf{gsC(sC^oYx?XW9ExsIxfKfq5r{+(3}y>I)jc=Bw0 zXa1vXMdA3QsX?ogb~_}>&Np8cj?ZS?C7*-SeVndWsBXKEv zi7;^mifCU#4MCld1gn4-(cFq?Px+N~f0xqfYgaf8E*>I1ie!A-qw15KkUAI^y`9fF zg>dq7tDA5mL*WhhaO)tW0O~HU%v^Dng4;CPX1eL_KYB1za+=dJ;F(~L16?>WAm-4{Yg@VYDnkg69XvUyn+OWc6hbDC$Tz$2;9IgW)Ypb zG22)PgozE!hNIdCAu|&^J;Irv9`b}3b#~xAnaZ7PYe}N~tHS!h523@Au^fjA-|HjB zDbCxj?1Jnc27e!a(Z!JC6k5j2W$q=I8wPx~_UpU`wlw5=d~$Lx`H`o(@?w#@h65iX zyU#Ugikv^L(xX*sZp*6mMrUYIIAL9GS4Xh7$3LxiS)b|~PQXLoeTgnmNnt24yKts~ z{r4xI;8G+=3<=$oS_(CM2CS#t^GObqFc|n91}iXQVhD+qn(#;8LO>}fR!+y z!zQ-6H!0$%WQfaxLIa4clScK@2kFX`z)t9wELnx_+R0o}}D_cNAX?na|C`N)Nb8&W>vDoSbn1 zhZXo1D@m%Fb?fQNdSrS9C6L}0k?-ashia*dtjTWft$4lpFRJu`rKz-lgP`?SEgf!} zvN1;47YUvL;f|CG*mU+t zj&>p6sygfzqYfTR>ro)vGTt=poaRm8EfaVf@{XYSlhAw9t6}6BR4l!2S%g}ljU&0t-;v;U ztYkQUj`Z`-^$oCb9CeIpp29WUu)DfE>exdL()r_DWsvA!1U}PYs$eJI_rgmB$x|ngl(Y zM0O1q4n&JilQi#v%37RkfoK#$?tN&w5BJj$2lzVH+q|gtm%!}8 zC|%8x#NJ$TIbG#aM{v(3-O>>*8n5?`;x0K|epUU(gbsO=-3YwVbK?hAbGLqwgS#;$ z_$G93J>)dF?3wZV28%0$_KKShcp7xTZ$UKX2bkW62h`qxl1q|*PD;+&dWh@D)l?NA ztw=Y=q*ygPL^fi7?OQ?|?S$l`RDql4M}Ri)mNbUyw+SJf|JcF(r~}jJ^|OTN*$!*9 zp}+YTYG7)BQRY*s7Ajd0ojzPA=Nr>< z_)^6B+B4*{dW0UKA(h=$-}xatzs{F|xuu5#pOXaE@vRJ5TVZYoJNN>_A}j;TE+R;} zPr#;lzgzW;@$ZaH|A{79wl!AkH0+QP3fhzlxtp306LvjE#O1WlQ)8;DvCkB^NPkcu zsy?&3*86(gWaY3y!5FGOB)l@s)x{!xjC8BvVLjt(qhVZSg`;@)aa?ri0H(um`x4CM z<%Nn8Uy46*vu9@a`I`Ew@t$rAsgMGPnyO>;iufWW5VyulZ_wvkBO3w3zQNiS=b4v{ zyET;~u1)4jiw&A7JK1}B9rbEI(r?~pBI)L-myQEN=N2mJS}bKw4U;a8`OY?z);#WT zR6JnJ0KYYk`n(2W=VI{3o>RngX*KWbJZy5Jb7G1{7!Xt($+h%wp(a!9WjxYW)-2bY zXm(ZaO1C}TH?{A$r*WOW#>|~Eyx_kHO+GZ11~~7_?i>-lq~d+0v(IW?*M&)A9-^!G zOg-*O2=ic`6xyFWEzvD!oAt&1O?F#`<-%RN+H`r!?QWRV!08*CPFDk4=ZF``6WSh< zC{LYeYF*U{+(Q~&s^?`1Fkq1W27kT^)sm)GS_@-p&=4}6k>SDD@GnMym8L3{y@*S| z6&5I~zPx^PjghfzZYhge)vwFeq8!9MQ8LbNsdudI6M?5UOt%E5fDNy3tRTRRogI_6 zQC>MoV*Co&1XP6~tDVQ}^zy{jOp?y_m?UoR8rM=o>`dX@gB8Q`4QJ$IxMXUs0P-t;yQii3%3$`mYAV13Bi%kV0+Jt44|>w`b#dRMx=R9}%ilt) zxFXf)2C2oqzN_!qLJoS#0v8{~SXj=Z6@9O(W zB--<(Oa+q)R87RnvPL)zFFR|1^sy!2+>{lQ{Y~FgE?VR3tth~&dSATys={+l0^`CO z>(jwXsmtd1_C;!1onveOq8_&{lX!=8Gyddf!*4WAF`f>}4{~a;htr}N@{~KoIR);1 z;URPD=zO^&*xP-;BhX^?E}m0P{IR0~)lnD!;<^~r8ZcWhO<21=WGwj82o zMPC~g1E2L+_|^!pYFxy*^bAULo+GABSrdb28n?msv7n$0{(k8t%LUt#iYNQH)Cphr?A#W6=sMWR>7{qZ`^!UW^R}mrmCbJ z=Foy5p;Of~ep#=J6lg1qfs|Y8ACe zK8jO>mwy0{rPiqy53yGx3l?!f3I>lDXGa^Wi)X$1Dv}mD zwG+H^c2TW*#fkujdnHAndK1)|Pw98PCnmGxy#`-?s;|T@HN7uNtvBM>XK@$9rol%% zDUFHMVlF&8jy1Y}DC7s1PuuWy&|6Dh)ByXih^L)mPyWd-`rYN9J882w)}pw+Ya#!5 zpeB9btosvyvXiZ^o~)+BOuD#M@0LE+&hMz$|B@^IsTqD5ubOZ?>uzW08K)U!Q4NH$ zuT1uTOK$NimcjgNQoQ7XhaLwNqMdL4HBWCG^5@*k?_)4#>P~a0?G&9X|MPc+a3UV= zuw_I3@n)(~+T;Wqg?vK#dL8@p`)!8LpOZHK(+6)lr?TDt5qI+OMcX#b?WaYp&QtdJ&H+m1ORN%?h#=g*-Xs>3BjlLH<$-50w^7$`c< zot-A6H-wMwcqe%B^)$U{*ujxsPTO_vHRYm=solkFqEmuEpRyp;Jzm9b+$As70Y_@` z%=3k3*Y=fEQl1hxP0$;#Ef7pp#Ea<<%y;FBGFh;+8b&~y`uxG`XHvWdbOq1GMpoS~ z1c%9Jb;=k~6u^WA>Z)|P1|}q|;Xpvn%3L$;VmHarQA;N=TyK(DZE9fNLbexv@~zKgW}RfS-|iMah@XRrWc4`JU41MZ@bT#3pWCNwtuxRjIr1gT zq(#B~Yh{J&+`9*1x~N38CTtCbJ$A0nkJppp+7;r41uA@$^+JE0Nf)jS6%UC;I<;i# z!x`O(GYcup5^wGn>?yx}wUc}`VJ^e0%CDHD*ihu3o>fa(pT^C07zonlVySgh6#Z&E z{8*x5XDaM|_GOng*cnQP&2k?Aw{LDVLMnGP$d_ncNB63To(mI?Z8M zx-@p`vr1J%Pr*YtanoRv{IB4!&iTL-pdVg>ZeO0ewvG=xTO8`NXtD@YTy3o_$f1Ay}sv3W7Dk{09H98$jI z0|(Z58YTvN1fN_49j{Sov?^Bqw$hV=xroUK>~ho+j{4(8i%`e;b~ajEei`#zvZV6xr%DHcy$h>R z%wt4G{k3RRBKZ`tr@)pGrmSiuP{9oC;}O8 zL~EBy!Bom3eUPfjOWX;=y{4C9N2*nNm**(SvIR+7H-*HsV0?TUat?j2>FHE@=hJ!+LT@n%gt?@6LQ+W$$_q#H zjnRL&@a{~~x_nCA^_Ky5N;7-yC+L19;zaL|8(7RkE2Z0DlT`J(<+eu8T0t;@f%?lKL;Y)1LXFp=C_U-9GR z6=xkwzN<-sq)^181~x3^8uh)Q)Bf<5si2`?Z7X@~L$ZI=I#ANvM~O z$S#b%Vp6yki5?L9jdZEdQ^qL)p~fh2uY0p5l3XPNepZcwF6IV=42%>M?Y!icY{FYA zV&Vez%VcdQ7x)PGRzYk@kTW-KRsaynQqAb+wQ%UVm8+o>(?XZOH zlaqXVh6on)SCb2E9EO?l__ui_br8$%mdENt;zx4$^SsG;V~@e_St-@XT9i9%jJ19-tTNekf=-lkd|uEWJ`S2AUS< z<>1j?{sId5#%6{}o9;pe@;&y$&pE}%RaYpFXN<$Owr~^2)|=!6LIm6BsN|*(6r*%e zD@CiI0jGT})BKlgEX|wmi~GFD;A|ppy6Jp|RXq3a%RC5T1I(Zm@NdZ5=I+*78EV1G zbrYUa5)zxYgQGgHqj+Bg;$%!_Pjky$fR@z0SjvbtCk`vVC~(GZHucmMX-H3THPvpT zN0Wmn>-+OiC!Z>xM~*Kk!fWsaD~3m`k5_wtwZngs4_D_En)~`uQp$+bEZh0<4&{|j z12klSSfJEZy(_Y6HVWCnS79xR;S>g;JugA(d&4*uCr?x3z`YVSs2vaNHJLW0^@ z|HFQ?KTKjP_bys2j@MVOiyc<r4EJnndi;}M}LnMf$|-IW%XYu zfxF{Y>T@h%4Rr|h+q6u`nn7UZ=4P7%aWakd0ebKN4^@Gi?xsbv30%}>rv9x=$RtO73zwsW2iiF{9wi%qa~h#GJh zoS`nM7C?s;(3cjB1hmoU<$zw!x^6C@*9#%nYrFFJ;xj^%$&&pA6{9o0$rY-t64wuz z#LqZ+Ui80HuaEM#pXKEpX*3iNpHR!5^?B1TY^HyZ;Iz85lZw>7U34l~f>CI-jm*)R z&UVk_?vM>0HSV}T1BSUSeiwa4{LEYVnz*Kv-9s)!H&S46ce#sM2wi(F?!xRv#JxEo zVxRVG;sK~qlSk65V;|hPfQT#)>Dgen4@D}KKt)Dc2c$*9jD@`tR0W9|FQGlI1$D-k zs=dyZz$F&A^RkK;G7Yhj{f2(pqA^D1oLX2WcYMy&{x;v@8ocFQbiVRB`1k)~2k@(YLZ{_7ILh|fn4H<)xcgUo=2n%Hz zN`T8PPa-dPU*hWej^(8SbLvLs%Nl&uLwJe4WVMAj=R!!1-mG?9ZOz8i%&PwBkF3#d6|R-)WwF2A58-tG((qCag=n2{bjx<0)0 zFw}@9XMghYY-T1OCc2UdKYPAcbihuZ^#IQZ5Xm6kbNJ!6HlI0#MO?=WV5sOol+CLI zXQ2hSu)bsg(1?tGxp=2&8$I8z+(F`!)n#7rJvn>gk=4&ALU8Kc6g}u6+^)zV zHqlMH$o+9$wT>rZa^sHRPW`*_yEtTDt$3VWPnWJs&7jx)&wHyzOwVjp$$y37qh+qF z)o80{_&+p*4b-35R4Y=~YQ~d!$zIPXA1NnRz2xMYP)a658PQ0-o44szN+&S>azg7> zVJ)U2gjHW6>zb*p@^4fJ>eOj zXxA}yN6R8bmSjQmYgtupv-x%qKcq^F2Y(Vi$><5-?|Vo{9w{?%9eF<9ou4Ot zv_okC?5!+9(!RK6){jS499z^Mc}p3&qUbn#HAy307-H;GnzNlqE|0GoTM+p8VD%mi zktAM1xuG(;+R&6#a3c_g_C8c1IsYcsgxdujX!h0g`@z7$zt)~nD;%!O+zhO@BjG2} z4>R4!M6c15?5MA%+QbE4{$A}(?AtUvEN|&;+M<5z*M-pGj8#Yxq^fdbS=eQr+u}s~8$i{#BslPH%Im4~8MW<-#qACJY?b;p zZQypDzGzIH{$St}`t{ft`#5i?5GGF~aZMQ~cbLq9&m@}cnUIj#*`R#ba29E}Dnzh_ z?4HLz#Y-w8R!@X?rZcQF@EOA=g(=zjb)P=x-0za;GJ*O)U|svdeY5mhhV~!xw-K`R z%{?M#kUQBZM_+%LY91UH^8Q4KQeG;-_8c6lyj(c#33pLmy0L*DR|SaDByNh<)!O<`K?yI{R#yedfs;>`PTy|h77ynt4_-GG;kvaEM7JY@^>Ht)3gX(+NS!b3uCL`Os8Z*g@^MzD zoURg8Y)TvNu%h*~$%(6_1Fcq~*0oV2yOSbKo{7s`n0Mv{rC@Iz3ONR==HiZ8gAZDJ zh<&6#lUcRHjtLXhL`kc zL0nWB&aP|o)Pg@VtyI&rsuB1NkY^i7P$#v`I`K;St-5h)`Rp(sH z7{@G3NIKwMoHyQqun|59o&RLrC)%(U$i0vsUpulG9||@W?v8~jTR5?tXbQO`o0_- zt5?>jaLM)g@y;ov!+xF^x2|F7X29jM&gLJ!5aU<69PjappFNEabY~vLY@p@=+!7q& zSN$WOz@m{_$V)HI9^t|t+(0QUfAWsJ!W6`C{$K~PIq)Zci07Tvt23w*IuedxQ_H;fJS^sv@%Ak zCrMDyZujav?Dwe87*#{cV0fucDQE4OKkQuxc}8?|4oTezi?E*HU*vhEkQ%;ZuVSyb zjYsR2#fW<8&lfj5MaZUEA#=kv* z{WvZ;7@A4t4+r=y$1WR&KGEyx?7wYwj&mNf2h%aytk13W6?oAjJwfb_4Uy{4yFic8_S_l$LnQrEV0Kz zEwgn3_5V7Bkmn9i{TPFUjr*VCK8BBmbs1;mnn)>1irE6}OOCaQf%jpAU?=?eMenjhsF-cTq)Zj`#(x*?z*&2upf4S=&4v7 zgPu4<|Bv<7ZP^$UubJ$SKjP;3#)4*nu%tiny~2A~Hp#}MFCTUr2)6ZHwQH-6GIVk{ zr!)*U$}nNZNOhgIX*4-?GE&(mo02Q{tA1C?RIZkCHhk)M13u@$UYPKBv(b(4efN}b zn5HFh&6LbrNnRm+$Qw}5OxnCM=1KKgFkD2WRL(6J^6ep`o(*kpH?%~+x&LF#>9ph# z>*d_II=0x3PIH%I3jk98Z0jJOUh2(<_~b)}ZqTE>3-~bKlps-)=DvMAVdmHue0NMx zp~qyu&dJ~1rG&H=dtzkPb_-#b_>2a+Q|wM*f*qQwbzgrgDTHR=x_vTqj5y&1{KtAs zJE+m+F(T`4L#&OUV%Tevh>Tv2o0n!U&+di`VJ`eRp`J{GPB8(11 z!DT^jZL73noJLz5BM$p06SwQ)TpO33mB-+wX#>oMT)WTU)ZaR}K)XvkiZ#7k3Dr!o zbS3h2HluQdQ)QW2@F(^1Nh&ETUUpZVNNT;CLX$YeUgk&crEvg&0UP-^vl0l|3|zQU)Dz`;DarZZI9yhqD8^Vl&~o#vc!^+1 zyEK^>-@6`SHj57ur=EmuCrwLb+zcs`yy;zrxM^8aDtVIHH_JO6Vc6`pTvu+HA0ki; zxokpw0x%$5zHDhymMg<(C!uv?$XQC%Jcn`|k%%$_r?^({b|iIJcinj92jEX&{ ztCjRU?+2qp&01`_ghbtP4+bxo>NO!gEX{O!xmPwN={k!rBI>>3MBcx}&~7vC(nJzo z&_m4MC?hM9JE#QeiB$;|$aSwny2>?E_0Ivnxiq!lXBCRtepKebyYpO9#zbsFYp=5D zd~@%1YCmMfp?jzR>D@q4;P-UfT9cOSqZZ*y#HhF8v5J8SD?!Qsbdjgi@NUrXn|ir1 z6CiXKo@@^t6HRvExjf6W94NZe^C4NCw@)j`Jnd! z0G154wmdg5x0u}FfqSjO>Rs;aF8adS$Kvy~-~Q6g;a&)|f%w~V^8EKB)1bE^#TbU0 zkJ;lFk+Bn{LO7VNKo!jBKh(i2Ium%`?Dkkvwh=^{1 zaaX`7hn?x-7;2l9@nA_G zF+>9oA#Yn~25NoMq8z4%o(=(*uLjfR)L>a!s*mlA)Ahtbr*V^^Yg55Du4h57^o?zwg~bl^_Qkz zYTC_H6mv5%cyetVo?J!-=RqRte0^u~3Hr(HS(0f0+Au-E7kY*{EDp?mo3)J>wNv90 zO_p<4q7GLc&n`eARV6)VHUd1}#A!Pai0{7>M!?RlqD`K&&Y)l49cbzrm=L)C4Hs*7_(rVp zCirt1!j+qAj>>b13q`JC8L22M#2s*8m@z74t9tGG^x!~VhPCRw{L=D<@4kh}$fN}2 z#o2B_Bf{Q^1UbaZMpdUcH>9{ZAvACI{x;_CeF+@cSWy=G1*3k?B`!Pqw`C8op=FQU z7@ze3#3AIQ?zg77hvv?Gz<4ShHr&r6O1>rkFmGi!sCIL3mfZ1RZn>A?Pv{J;(@8mW z`V(ASC9XSrl4uw>>XqhbRm2&Et{X^5-fi}3NCIBiB>an=@lfz7)|Z~mYW3dk)qQ>U zwyrM_fTOo=6`aYV-fFtKFiYzon(aH@FT;CQrG1=xvu+%9^>(j3*Qea6cT9E;Aty%0 zaM_7k0+nUyTm1!Q>5@+xi9~C`noZhld0a=EVCk^Q-#`Ik-`t3WzD!b9v{?1@)4hL zbs%7YK@;JCHbY9U>?ysIF!XqrAd?Ock#GGG1 z)xKh|kW_v)zB3g)OAfbZ3;P=!S}Eny)ty;GL&lHSE5ZL(G+>M4RJGTFCEO&{QD$(w#><t)$t~&;JA6kBJyOH13_>-A5)#(IYI6pM*R#|tA+4;kb`jU;ZJ0|w~ zORD_7yg0of_awPn9#yX2-e*2+J+mn7;z&JozwT*t^j8WL@R6N_I@;M?0XRlOtv`sV&K6 zqxtQx*mq<;;Y4sRM*E}4%$h${9OcZZZD|EK6 z1Ch8RV^wp7-9HSR&*pBfC3u&nklD%_3*(D%dj|W4rK~8=)K+A#wLgT%yU2AG9fMMr zjWCb-ukKX6=@K{C^ntH>j~l(IY+F4-ixklx3`1L1mf4S0R?3dc3-IA=7t<^V%R{d& zB?=0jWh{kgIAqJe+)XB_$BGW`6LE;&AHw_hMb2Tzqn&=|@LWWxx;Z0h5Rw*M=|<9Q z@OWopG5rM@6vA8%tTR9k)b%j`;8_~&-kz63EFcX%-Q*gDoV zjXucg%|^!p^s@u;!mf9%k0;S zi)^q1ZC@`HI5J}yw#Loi1anz#jn+3BcMWX#H33gz zaUj5}fi=iVuw%;~ny^~yjfKAJ@cz6W>n!@%57hxvYYjtK17BXqeZ*CC#$<@U8JSk7U9*2ZW*Pt-M+ll%*~ z3cKJ!k}qY=^ty}AijGx^1Wkfg7OclXpILx0Zvr0m{Hp&Rk*rLlG_}{Wz1ua%8{fUp ziCI)*b3G*@3-Tw;Ms!-?=9z8T_QnzpnP=;?Y#Ax|!n%5b96PxxrG z%KEm2qE*|lUDo8a2Q#ZMkwstMBP4y1+z@M$pPx&NqR>}TUnSv6LiF-zE@Z+Hh}gxA z4nahA0=p>6Wv3$1DhNxy4mToJ0aTjsyOG|2Oo75V=F6H~cV(GkaZ8PCI&UMc`HOLE z-nhqPu+J0l3F+Fm$@ic>xUUz8 zrqg5nkT-g}>9{i&6;C*SrpiOPS!I!^{>|4#dWn{S7Ln$O4oK+5j!@oYVZJ?OCz)%} zjF+GaRW1spBh#8fl=rwgks{L+J2*XQO-_3OGjdKa4}2-(vcB${qFS)}9V*f%5SlG7 z^s;hb(K2gn#@5a@*9$vKpuyGKMn!+OPTQJ`xy4`G`kbn;`wB|foZfx~v-EV06Y^k%NwW$b9v;~?US!-JZ*li{M(bz0L_wemBPW!VRY zB^8mQ(aN`ylX4tAf`wq!G1aAszvo;f=5MPv^)4TJpLphV?#P8tZ&J#54#zS(oly;hx`jp8 zza{9i$Z1D>e4bsVpZ&z$tsqCw$Z=mC5qA=DEU&`n4)l!`w23X^eXZ^@f-b8HHoPcc zx?hGoQ$#{`3%G`Dxj9U9JnU;Jzny!hMk>BasR1Ri{zAvIe!;IoyG23N2ikaocsaS| zF)=|?ToR;U`0w5xfB6tk!V{Ye&Rc~M=Oo!JlOpBJ!dv&rS?*3-iu3elH%~qiMWGD@ z)+~)4IA$v|taCaCffj*WEF3x8U~WN3b{t_GOTpC*?Kq zM#JDN6i?q3wI&R4wC^B;w-tw@mWgV?0P|76la~(%R#v?0l`~W3a1_9AsD`+ z?of4ZupdY901=2V;pn74Z7&bE^)OB^1 z8_6*seFmEi=31BaMEg2iTrB~Qn|Ea4ee%GZ`0Q+M5Wn#68J@N`7SVuak-Ar6($t9sZlxBB z3%KAHEPvTwD>_`e5>ZmxXm$-ZA=%sg=&rc0H{s&W`Pw-E3LI5scWA1=MeCpuh&NF= z`Q7C&?nJ$1B!PYH6vd1mke;`&b0FnxR#R%a%+Uc zw`eOiFOygWBd@6VWa*zf(BDSpgkH509?>*wLEI2&aGsc{?6{KTbvTY`#LsU#bp$Jd zEOBOBgx=JbKZTz@xj;8qzB^*LqCQ#QTa}EwS!;~4GHR(6CVrW^RBmyxoS*GaM-N_EnEv%CNN>K9t*1WwQHH;G@5U-Z(tTA z*qP4)UM}fbC+#cayB0P?8+7nr075ZeEkhofwEMCLa4QD?yRrP^89I%xF&TS&V7Bbk zMGn8rDl4gFP=qow24|XA?lCV=PSpbx;HcDk#`eTcGw?4#a*i?)3#J{1Pd^7-big)2c0SYbK5JbO%7BQ{ zSwD_%c(3nh+#bx;s~zE9ljy?0KTo0iEZb8PZ7XjV@I>wy;jV34@KU8NfyZNK9orx+-qgDG@6!`O8YJ~v57#w zV+dy9tMS7!)X7FmzETA##gq%GghYDL^_wp+9|^v(@7=s06-{sKn(kY%9`lt6A+}xl zNN-1+<|UF{zg5-7bvUFr$i7+DD_cSMHVD6&v-= zkqS-HEa9}v!RS?*qmq*=y!sGRrEYADi+m$rBisE%Vjd`Z8N-=;W(=;?kUpHlq+O)kUlyRn@h- zq>VS~I2P|f5L#YNnoUna1-A>uOr+F?o1Mam2e_Pmj|=d=?`rQX z*ixLhBL}SoebG5}*2Xd&QU$UyI^5-wU4^uP?Ek94qzD);-_2;yJ670y)2p7;R$g3? zO|D5du_nacsu|}BdN70x&fBRzUD#tftqi-M;C`G~=%C{Ob4re!?6b=UINot4^Gue^ZqJkXO2i9SjrmB>hn(K7jQ_`kebEHa`7x<8Rx202P2WP9BqK z6J8$oY|jzOyx|?Z0Ala*@iRPGNd_rq`%bC9et34lv_h;B>R;-nQ_}Z9=fF#@txp0b zk47U-#zG~1xTGZB$`5GXGfziu70fE1vk~jV&+?TwJao9b<;cytpT~)Cd=F-)Le-nG zgA;rleB}3APEQyJql|E@Iw9xiaT$n~^^wDZ-Z8PV@su!09J%B6qeAZ7uSI$Hcn5vy z4Xf|3inw8>N%y(%?OQ){te(iz^t>h`E56zDea|90Z(DhLojg!x6;!rkbdYCmJ$a|N{_8X5qUp;Q;lqSeq_C_Hz-bGC0UXAodjZi{~a+_%ZA)zLKuE0q|#D_|gV;D`}}BMtyH= zu*Bi*g+)Pt)t}l#X~vq~w!{4~Tt}q_o5Q-HL`>(a`e=c8c@H^Ysm}{a89##LxjC_{ zr&H$JUuP#46tL#0gOH}vYBmqQ4!&Kc-$`lwY}S2uTE&cjQM!G*zK?8@48+NWRo3Gm za!H@$iVbju&FVZTc=7wi3qasLW6OJx=JBv4eCff0;LgB}7KQp0>ScjHM(Vsxrf2tu zX@%if7e1-x>u%%j%q?k(H(CPr*I!_gxDZgM{=hS+YmI*Xy=INXN4h<|z?W}T%-mNhe`pNYE_iv5Z#yk9YKhMBdP9k-6zzy+5 zY7c5nC)yu!ALIe%G0{@I=3#fZmx2@Xdm{i*#Am#&Q2#w-Y2i!n4jkHKH%9SZRs)@_ z_ZW9P2I|7uGGjFNA9|)JhX&qQBg#&cKmv}NIcN%eY(tb~@d-S+<=bJHrLLzVP%>nR{gpBG}Ao~EY*8hj7hX2p=7Lzph{F0;%C%tL&p$z>Y1EUI@T0aF={#z}i7}nUZ?T^RC z!nP9_65=~6M+R=oro|MmN?z* zdoj30H^9j?+9Ts)jj{C4L@mnA8+1IhdnlxLC`6^r5H4daX0uIqf)}0mrCs!y_FrfU zBLIdRIl(A7!I;5Izhr!0Q8vk`4f5jwxmyDbR6oJc@9*zJw0|hk{PV?+?gX#b6Chzt z!IXuX2F~#?#tJhA9=aTD{<}Ksi{lH{KQ){xC+ys(5dV&nP2?haw_7dM}O&5g^Qp2SLNq_LY&H7d8KKw4Xy$xem?j1NQtVy31^tCZ<4}_GJiHcoTS+@ z^g}o2pN}P0{9m1`Yb`?^%$Ts@9rcNejPI$7%?N-iV~F)>6m7zY8FMy{(o9e}kH3Ib zOHc5J2*&>$-InG3JbaJCm*$o#nnOnSg)k;1TV=uT`1S@j@7C58$g{-4lng+_R>$^6 zLdWguIbl@#70AzDH$A{)mwQ+$bSaoqgAk3#c*kVVJEXhkqr`@&sz_#miX|ly>w^B7 z_=h}?=8~w$8@C%RL;C^~5ig$;o`QTnhIS|@F7D~nO!+0v1h7n0RHy@KV98$=c@C`+ zqOQF=&)mLfgptwz^}~SpjU8E^$7$Qdpw>nvY@XwvKeTk7wsD_7EagGxu-h^EB$2fg z{0vsVR=*PZD$8@R}|vSt#Zx?C;E)Tuj2mOW%}=2`R~=u{`VwxIwG|T><)X7-aqRc zF2~q}Fy;Uq1xAnH&I|MFKmY$)24k|BL4~$#tP-r}#zW`I`q+6GVT?s;|3T)TX^6_p zkX>zm>f%@*pf>ieWElY{u_0{BlTo%aRBdebtH4>vPD$9n&ZOY3?fR#42@e?|6g_{& zc+=u40YV)Q+=BA?%PtWT0r9i{dEK&uI{X74jdU#sKAPxe4t%uG9bJ9PjA>?!QS0%l zTcumyS~(lS0;x@losiw$&@)xhk1{&ap4Jxql54x>G*u{+?K)K~gm#@O6&iP)Di_*y zoqA^;;wKmb2%!Dg2myt7_hx<4nE&`p=n@S+qLp^5w&*pzi=C#?`KuF?qT%TZ#nA=n zwZ+khbcK@Wn)KR|=w<-s9oi4kURt^-=-W(RML->NSVlwKi6Mk1^hb`Zce#G%|MJ&R zQFLy4Kyh?Q`bKedReHdjA>^j57?%_WT!!Pi-7&hHV5;0ig)REk@V2ZfsZ4(2m&|#< z89+i>zxn>MU|$P}bwZXdpZJyG+wU$*<>2B2_IGxp0NRqX z(Gi-)=X^s<0X*c__+H#!arc;s?9#nsPF6Ce?qUK`96B0m-+%3w-9jIYk+pLY6BUBZLsoeBty(tnxFIYc8z0j>OdyMoo2;N8 zYAA65z(jOE;dUBi6JyE%fh;syYL7^=fx^q~v$KHQkIV^zY)SyT%aj8X=-s{22vE5A z{hd8P4knUjBXB;Vp2;2tz0)WS19F_T8GV|%7t~^0v5y&qdb-L9I_c~_{46#Mq$^D?AvxBNY4uFc~BaRvPssC3iH>m(?*h-WP$=On)zDIy_ zGF3fPcV{C}^N@`X+zr~~ZOc@M@)!z0Q2uWHmn*T7oE3olnBT&Y%{6Y5ONep3G|5nl zI_@EX!E3KSAgp?qN}EDE?R57z+U>M%UfN3fTjI>pC!2{RT#r!U8EE*3y4i27zEuhp zYqcHRt=MIG@0IvZcVj&)1K8qWxjfKXfY=E8SoUytKj9^5KhI4E`(FjRu`!X7JQFf@ z{#r5}Y%Sl?&SR@S_xC99BRBeVr{qg)nPlTPAKxDc_i_z!34FIjJhmy@k^&5nVSQTX zAR$y2IC(R{gQ}&73p^os|)}xJ{)QeSMo&-${2^UoO{yl=>q!XUzNDXN;Bf;_H8P8+VO%lHg_dz zwag(amU!0EM5`u1_tv>_^;wuvsX8(aEAw@AU&_tDr?!H*LAVU$W21XS2lq7*>!j*b zPGPZHgCI_@!akjaH&$JuN&Y~*QCBlJ)B`)WDRU@Lulec6^$Tz*39J)yqcgL=2&e|cYUb4sf5gL)RW z+VkC{?gPSMSAo+SSRnDnzD%o?uf6LH?sD(G`_8_OiTM@~rqc8Px+x>Y@|4tuyqmB= z7B;^~YH_OtAHZ~(-oh3b~-Ao+rWLeovI{RtNX4Gn%Pl)TNC}5Stes0Vzz1<;uo7iKXGhfrcV{We?NKq_> zdO&;E++285IC&BR-v*;5%^g%ciY!9LhR{z27ngSIPURDaPHyH`l!fp4XKUaun`NHW zkYw_h?3H^RKl)DSx@nx%E!<2|(%zc82`M%nrk`BLhw-oxt^xZz@ zijWA zU4+{D`muSZ^lA4c0S`Pfn?|-19bm0T&u9eI`V~@gM!XvZ6}U7)j2_kU%EE zu)djcs6{uQ_5LZ{)ps_UE?m|uE04#X&Mwe0ca|rUX;PSam5l*UQOSK#9@<|vfDSC$ zFuG2kmNgvxs_BMh-y0iQE1`)5w_x7w+QJ?yqJwlBA-q)H>2;u*d1Ym?+1uPAYa!aa zIF}9;!yx#Z+LV(9U@a9AQXl9;H;Y-vSbDz0rBO&pBoQ+iaw{QRdhqAsawJU&bH93c zPC>%F=fg=!@Y4MgTqX;z{ON7)KDn{^)?x$&J5EqeHJ!gfKOf_EhEdyP+cPG6x};h8 zA|*=o`JJK9f^WqmNUbOL?_UZTPt4G&@~B0M5T9b^e5$?p7YF1Ldn%T8i#nYfQ#9O? z0#t9^SZ$Z9Yj_?IG@w0PkW^F}Y7w*5wyY#NG9(~KjA=Uit4V%Kk4m+elV;u| zYjb10iMEryT&_-*uWphcC2`#7jlGxyF-0kuYp?^aYF^I*2ST-bTPpLwD2gSX)9v)@ zr;&BfY}HL0^u~^J9U{cL8CD7u0Uk(W(sPc|l7naeUTWmvHwLdJ$V#slZVJq=TkbNV zb_~U#c9wgzf>UhAib~DI2?}v;T^&rM{Q9;TjX)lwt>rsW?Q(KzW2E)HHW&WcqWfMq zu{dAvcD7yMhU3nkE|DBH@Ak9&4CI>Mi^&w^g1tx`x+^TnGG*z9uCWAm)o!xvulaG| zejMLZI%GJcm=;<&n6@fpW#@N*$BDYn@zkJPtGi~zAz&*mSfD(TY8IUfe?{m7y9_lS z+N!#^uxons-Ep^YuFsz%k>+M|b8r#ryoyD&+_XdYT8@iKD{?bizuC`v%wENHYodZf z9LisAi+GxG?VmL#N!)kbff)1DJ0A5h?bnT?OIt+YnU(m-Zt;C@BLK#QA3I+c+x0Fp z^RNonq!o&h>MP5|2_6e%?5$rQ58x~UYdQ0hUXgz!KW}3hQuIdLYxn2cf;>Yp-U;KXGN^>*9%xV`UJXN|?9?VrX7~}VV-W`(r{O6Uo3c^(`*%NA19)z?+c?ab$;wB6hsBIb6Vx;O7$J_#m1M`Wi6v~^Y0^o2|3xgz z7`bI><}oG{NXrI+u(9D@x#}#jQ4?#MK9lf;!kC%w877pe;=@v0E*B`Ric8*7bPE9D zINPu{)-B@>2oyiz5!_M)OJOT?g&0U*VzEk8aa2@*t_M%nHVfnMRC#UkD~^k)NqaDI zx>XP|HxBe*1z3SfmMyj1dwpB|!EJ0vKb;17{5j4`PAsGnI&4dV|;zD+f-YZ*Qabec#bNlO5y}Xf2mfKXDN@O z`7mS1*Szl)7Q8eu6!@VD%@3Hu;?DU4Kbx3$Nf5!!nU#*CNh4gcZ%3l%0B1XNxEru-d7X0VaV$5O7G8 z@ky0$%b5Wzn#?V?A1FdTGJy&K9N%M5I@Dq>FtyAKmK9)G&)k5*xrA!XRqF>-|j=U3&)ZLq@6eHJ$Bj5VVs4Gvo#k^ zpArcja#2%P0fFRWfG!3k*nrXaFo%$4gKhVI;r?cSU7oHDM&?7w z0#+OK@3Obn-Lr@0TnKMxk_Z-QkUAYQ?9EB3_+FiRYZ(AI_2nDzmaU!x9e?z?*=&o7?kR)XzsmVa9HjHOcR;~9$|!bi`yL5k+)ig zZq(=|S(N+&xool_+uIa5XLqoRJ39M*kv^{^m(=cd6~6!3Pkb0O9asjm7C_o@!Bk&C z*hWs=-@so8KQTni{Evd>QXz}u0i?J^6DoQH27sI~F!8>ILj|ziK66$NB%k1b#f&lF zxp9R)iyqy%)4=(&ST41eq3=v2RsmpOUQoW$A2VYvoO#}8{0ngZazsk*Nw^m^p?P@c ziej^43&0_l{Hw+QZZY(ZiKMzHK+k96XGkWrQC7p3IGgA9e6|k4+l?{qC)6=G2)Zm; zVVj+*i-Qeqw?%4vrMDbFQ2e|%ZGmz zXN{%l%d#F@|LD+*&c9!o`7?*qSsQoz>vshUkxV8RY)WBj{)F&~Cd7*DksSWLfCaeS z`zHw7@-)06XRpDIiP3g}Cpd*QHU>V*j^*2f874q(Jw9D^=May6%Af82P~c(Jy~-ra z0%aq(PS{#<@@&D8`b;-hsQiBGLKC)P2$xI3KWh>D!`Sm>_He&0crSmv2D}%!j%Avf z39n$&bPLpyDBCc?Ecdm#w$v8=S#QA8Vbb#CJK0geVz#eMKxHo;wmM!g6N!mj5xuYy zUSTBpNBRGUZ+A*D;Y(q`3$lOMLl8}yvwBK(WBz}eD;q-Tu-zOD+Oadc<_iy@Rr=K zA8z?*psPIa@t$tTz(+IP#(|Gk`j>3Bw&iHc zlC{XK%BU+#ivBC(U^;bF3ex}U5W1DN@t 指定的目录、文件的用户属主不属于当前用户,忽略属主判断直接执行。
csv文件大于5G、json文件大于10G、db文件大于8G,忽略文件过大判断直接执行。
配置该参数表示开启强制执行,默认未配置表示关闭。 | 否 | --mode参数说明: diff --git a/profiler/compare_tools/README.md b/profiler/compare_tools/README.md index daca4bb55..0cc18b70d 100644 --- a/profiler/compare_tools/README.md +++ b/profiler/compare_tools/README.md @@ -140,18 +140,18 @@ python performance_compare.py [基准性能数据文件所在路径] [比对性 #### 通用参数说明 -| 参数名 | 说明 | 是否必选 | -| ------------------------------ |--------------------------------------------------------------------------------------------------------------------------| -------- | -| --enable_profiling_compare | 开启总体性能比对。 | 否 | -| --enable_operator_compare | 开启算子性能比对。MindSpore场景暂不支持。该开关较耗时,建议只采集一个step的性能数据。 | 否 | -| --enable_communication_compare | 开启通信性能比对。 | 否 | -| --enable_memory_compare | 开启算子内存比对。MindSpore场景暂不支持。该开关较耗时,建议只采集一个step的性能数据。 | 否 | -| --enable_kernel_compare | 开启kernel性能比对。仅针对NPU与NPU比对的场景。需要使用性能数据中的kernel_details.csv文件。 | 否 | -| --enable_api_compare | 开启API性能比对。需要使用性能数据中的trace_view.csv文件。 | 否 | -| --disable_details | 隐藏明细比对,只进行统计级比对。 | 否 | +| 参数名 | 说明 | 是否必选 | +| ------------------------------ | ------------------------------------------------------------ | -------- | +| --enable_profiling_compare | 开启总体性能比对。 | 否 | +| --enable_operator_compare | 开启算子性能比对。MindSpore场景暂不支持。该开关较耗时,建议只采集一个step的性能数据。 | 否 | +| --enable_communication_compare | 开启通信性能比对。 | 否 | +| --enable_memory_compare | 开启算子内存比对。MindSpore场景暂不支持。该开关较耗时,建议只采集一个step的性能数据。 | 否 | +| --enable_kernel_compare | 开启kernel性能比对。仅针对NPU与NPU比对的场景。需要使用性能数据中的kernel_details.csv文件。 | 否 | +| --enable_api_compare | 开启API性能比对。需要使用性能数据中的trace_view.csv文件。 | 否 | +| --disable_details | 隐藏明细比对,只进行统计级比对。 | 否 | | --base_step | 基准性能数据step ID,配置后使用基准性能数据对应step的数据进行比对。为整数,需配置实际数据存在的step ID,默认未配置,比对所有性能数据,需要与--comparison_step同时配置。配置示例:--base_step=1。 | 否 | | --comparison_step | 比对性能数据step ID,配置后使用比对性能数据对应step的数据进行比对。为整数,需配置实际数据存在的step ID,默认未配置,比对所有性能数据,需要与--base_step同时配置。配置示例:--comparison_step=1。 | 否 | -| --force | 强制跳过用户属主(文件是否属于当前用户)及文件大小(csv文件小于5G,json文件小于10G,db文件小于8G)校验开关。配置示例:--force | 否 | +| --force | 强制执行compare。配置后可强制跳过如下情况:
指定的目录、文件的用户属主不属于当前用户,忽略属主判断直接执行。
csv文件大于5G、json文件大于10G、db文件大于8G,忽略文件过大判断直接执行。
配置该参数表示开启强制执行,默认未配置表示关闭。 | 否 | 说明:以上开关均不设置的情况下,**工具默认开启所有的性能比对**,当用户设置了以上开关,则按照用户设置的开关进行性能比对,示例如下: -- Gitee