配置
在第一部分,我们将介绍配置 logback 的各种方法,给出了很多配置脚本例子。在第二
部分,我们将介绍 Joran,它是一个通用配置框架,你可以在自己的项目里使用 Joran
一.Logback里的配置
把记录请求插入程序代码需要相当多的计划和努力。 有观察显示大约 4%的代码是记录。
所以即使是一个中等规模的应用程序也会包含数以千计的记录语句。 考虑到数量庞大, 我们
需要使用工具来管理记录语句。
Logback 可以通过编程式配置,或用 XML 格式的配置文件进行配置。
Logback 采取下面的步骤进行自我配置:
1. 尝试在 classpath 下查找文件 logback-test.xml;
2. 如果文件不存在,则查找文件 logback.xml;
3. 如果两个文件都不存在,logback 用 BasicConfigurator 自动对自己进行配置,这会
导致记录输出到控制台。
第三步也是最后一步是为了在缺少配置文件时提供默认(但基本的)记录功能。
二,自动配置
最简单的配置方法就是使用默认配置。
BasicConfigurator 用法的简单例子:
package test02; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class Foo {
static final Logger logger=LoggerFactory.getLogger(Foo.class);
public void doIt(){
logger.debug("Did it again!");
}
}
package test02; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class MyApp1 {
final static Logger logger=LoggerFactory.getLogger(MyApp1.class);
public static void main(String[] args) {
logger.info("Entering application.");
Foo foo=new Foo();
foo.doIt();
logger.info("Exiting application");
}
}
假设配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用
BasicConfigurator , 创 建一 个 最小 化配 置 。最 小化 配置 由 一个 关联 到 根 logger 的
ConsoleAppender 组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}
- %msg%n 的 PatternLayoutEncoder 进行格式化。还有,根 logger 默认级别是 DEBUG。
运行结果:
MyApp1 程序通过调用 org.slf4j.LoggerFactory 类和 org.slf4j.Logger 类连接到 logback,
取得想 要的 logger, 然后 继续 。注 意 Foo 类 对 logback 唯 一的 依赖 是通 过引入
org.slf4j.LoggerFactory 和 org.slf4j.Logger。
三.用用 logback-test.xml 或 或 logback.xml 自动 配置
前面提到过, 如果 classpath 里有 logback-test.xml 或 logback.xml, logback 会试图用它进
行自我配置。下面的配置文件与刚才的 BasicConfigurator 等效
在classpath下创建logback.xml文件内容如下:
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder
by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender> <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
运行结果:
四,自动打印警告和错误消息
当解析配置文件有警告或出错时,logback 会在控制台上自动打印状态数据。如果没有
警告或错误, 你还是想检查 logback 的内部状态的话, 可以调用 StatusPrinter 的 print()方法。
MyApp2 程序等价于 MyApp1,只是多了两行打印内部状态数据的代码。
示例:打印 logback 的内部状态信息
package test02; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter; public class MyApp2 {
final static Logger logger = LoggerFactory.getLogger(MyApp2.class); public static void main(String[] args) {
// assume SLF4J is bound to logback in the current environment
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
// print logback's internal status
StatusPrinter.print(lc); logger.info("Entering application.");
Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
}
}
运行结果:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABG8AAAF8CAIAAAD+SwE0AAAgAElEQVR4nOy9+7cdt3XnqT9mVk9unT9gdBlSNK1b1IuKFUti25J94QfTkcR7+XDiIBad0FE7ifkQEq94FEqWZLdU3fGsyRp3ennFZp04ybSnneS3/EnzA6pQeGwAu+pU1alzz/ezsMhz6haAjY2NxwZQdZ74D79xgICAgICAgICAgICAgNA3PPH5V68iICAgICAgICAgICAg9A1P/OZTFxEQEBAQEBAQEBAQEBD6BnhTCAgICAgICAgICAgIQ8IT5y5cREBAQEBAQEBAQEBAQOgbHG/qq1/7ejpsXVwEBAQEBAQEBAQEBISFBHhTCAgICAgICAgICAgIQ4LvTSVuhTeFgICAgICAgICAgIBgAuFNPXflxTCcgzeFgICAgICAgICAgIBghSfOXXjKhK9+7evnLjz12fJyGM5deOrFz71k32yHw/MvXr//6NH90xfOX0hfpCPe+VLshmx47U4mCwQEBAQEBAQEBAQEhCkC7U098+a308FL5fD8i9fv3793/9Hbr1ve1Ot3Ht2/fy/tTV05vXf//r1H969f6e0OHV45vffo0dt37sCbQkBAQEBAQEBAQECYPzxxeP4pE77yta8fnn/q0tHly29+Ox3sWIfnn3ry3IvX792/fnLn0b3T589daK88evvk9N690+cOr1y/9+jeyYvNza/feXTnS/rzF+88unfy4vMn97u/nvvS24/ufPH1O++///7777+vr5MXu9TaTBEQEBAQEBAQEBAQEGYLhDd1eP6p0F+yQ9SbuvLi9XuP3n79wqFxcq6c3rt3+vy5C7bP88U77T3nvvT2o/vXr1x48srpvUd3vnjOXHyk3S39+e3XL5AXm6zhTSEgICAgICAgICAgbCP43tRXvvb1K597SftLv/vn74fhMOVNXXj+5P6je6fPn2vcqieNN2UcJ73LdO7C4fmnnj+53zpIlhtm3XDYbl6RF5us4U0hICAgICAgICAgIGwjPEFeHexNNRtHd+48enTni+c6b+rw/FP6OJ851Kc9qPctHnV+F7wpBAQEBAQEBAQEBISlh5G9qcPzTz1/cr973snypp68cnrv3p2329uefL3xuNoUnEN9zT7VldN7jywnzb3YRIQ3hYCAgICAgICAgICwjfDE4fkLYbj85p3D8xd+988fhcH81Q5Pnrty/d7961fOH56/8OS5199+dOeL584fnr/w5JWTe/dOntefz125fu/Rozuv6yhfvPPo3skVO5HnT+4/uvO6jv72nWbb6u3XuzT9i1dO7j3qdrdMyggICAgICAgICAgICDOElDcVC+m/JsIX7zzSjlAi2M5Y+iICAgICAgICAgICAsIWwxNP/uaFMFx+4046kLHS4f+4cnLv0Z0vnDufue3c628Ht5EXERAQEBAQEBAQEBAQthhob2r08IU7jx49uv/Wlbw7BG8KAQEBAQEBAQEBAWEnwkzeFAICAgICAgICAgICwhkL8KYQEBAQEBAQEBAQEBCGBHhTCAgICAgICAgICAgIQ8ITT/7meQQEBAQEBAQEBAQEBIS+4Yn/7T/87wgICAgICAgICAgICAh9wxPnL17S4Td+4zfM53HDqg/nAACT0asxAgAAAACANPCmANgjJupHAAAAAAD2E3hTAOwRE/UjAAAAAAD7CbwpAPaIifoRAAAAAID9BN4UAHvERP0IAAAAAMB+skRv6vDw6u0Ht682/x5y5oiHh1evXXt24onoQpmu7GdVq2OVa1L9DGgFHCbqRwAAAAAA9pMlelPPXrt7++qh/ldPAa/efvDw4cOHDx8+uH01Nk28erubdB4eXr39oIny8OFDk8628OQxpTi05srmngf9Z8922YnsNpiOeymHYts5Pnhw+9UnX9UfvFiHTX1GxTi8ejtbX4eHz167++Dhw4cP7l57NpLU4bPX7gZqDHMPrYWSOe/JMPUzgLAVjMJE/QgAAAAAwH4yxJt6+dWrL796dSJv6vDw2atXn9X/2tNK/fnqtdQ0+tpVb35/++qhnoGPubo/DHuGrUuYva1H4m7ZN0mKkzJ9p1F43NeKCXN4ePX2g7vXnj0817hD9J3GEg6fvXab2hQylX3u3DktRSz3mLVwSurkyNZPv2SDVjAWE/UjAAAAAAD7SW9v6uVXr56cnJycnPAdql4ChdNKck+DmrI/e+3a1fCGhXlTmVn7QG/KLfsmSXFSjtwZ9aaywhwePnvtbutNHV69TW092ZYQv8fb6yM+k+Ua7k2x9bMQJupHAAAAAAD2k37elHalbt68efPmTb5D1Usgb/LXa5r77LXbekbeRnxgTo51GxTPXrtr7VQcNl/vdhHbo2IPHz68f/9bb1Oxnr1210357t27D3Kn1PyDfPSeSTjvDyTszj1aHoVddjKpQOYHDx8+vHvtWf357rVnvXtIrZJim0N6D1xvSqf2IO5ihfp5cPf27ciBwLR31N7T7U09e+3ug+T9gbXcvn37gSm7V0zz9fZtv8qy+hms+SmYqB8BAAAAANhPenhTxpW6devWrVu3+A5VL4G8yV8vb8p+K0D0vJnlgZgtEfO/2QBxd1q8WM4mzKtPvnr7wd1rz2a2nsi9qYiQ3gM/WrJmNybuSPhvRCDdj3DLzio7vbmUS9mS0In+7LW7javAqcdG789evXrtNvl0HMebOme5dnevXUvfH1hL6wK2dR3qobmnn36Ga34KJupHAAAAAAD2E6439flXXr1+/fqNGzduWty4ceP69euff+XV+U/6xTBvBcg6Kueome65YJeAnohbrzp49clXLTcp601lzr+RM3jvZRLt7sddbzOKeheFlVTweoarlhcYuyebMuEttJt1D/yCpJ+b4uw7ZU76OffH/aKwXKQlUHVB+zzTaX50JupHAAAAAAD2E5Y3pV2p09PTmwGnp6dZh6qXQOH8zz5JlXgLhca8FYDnTYV7U719sIm9Kd+ZNDsh5JnA2JsVaG9BnyEMXI6eKVs6tHbzbl89NO+BiBXfTbBxLVhvobh6+27k1eT2OcPszlhoLbm9qQH62UjzozNRPwIAAAAAsJ/0fgvF6enpjRs3bty4cXp6OsNbKM61D8N4T5WkdjCuXY09pBSu/aeeSmrf903Esl7nff+Pb30z502RuXsX7W0oR3Kza9GdRaTfF2+V3TlRFsps5vH29kjsHpOyWxw/Zb0dpZ800/Jfa5+bCtUYezzs4cOHpi4i3m/mDemmBrNVb5fr8PDqtbvhniRROw+aWvZ23vL6Gab5BL08f3Nlon4EAAAAAGA/6e1NnZycnJ6enp6enpyczONN9WWTn+jRp9Ris/nlo8tuHMLBeoilrD8v5DWJozDWDzrtin4m6kcAAAAAAPaT3t7UW2+9pd+Q/tZbby3Tm9oQ89zUDC9Y2y2s/Rn/ka3tyhNu6G1XnoXoh2SifgQAAAAAYD+BNwXAHjFRPwIAAAAAsJ8M8aauX79+/fp1eFMA7BwT9SMAAAAAAPtJb2/qzTff1N7Um2++OYU3BQAAAAAAAAA7QW9vakDYdhkBAAAAAAAAYHzgTQEAAAAAAADAEOBNAQAAAAAAAMAQ4E0BAAAAAAAAwBDgTW2ZohCqVqIoti0IAAAAAAAAoB/wprYMvCkABlAUQtX1er2uF9B8FiUMmBNUvQGqAADsLYvzpopSVnW9Xq/X67USTY9cFKWsUh10Kat1Cz+WQTs06SudhEUpq3q9XteVLIuCvELKE0kt6k2ZwUlT1+r44FjVdV1Xsmz+9Pjxhx/Z9yhBytM3ayZawnnGzmFD9TAJN4k11mSib+3MP5URqratbmZI/XAqrhDKNKisonppdZSVkb5aTUiY0Eb7p64nqWt1fHDk9RtGmKw8nlaZqpizA5kIu6TL76NmAOuDAIA9ZHHelFStiyKUNTCnho2iEMo4NqWseLG66EJVVWX7POEVG+2i6byULMMrpDzR3HNjj3eDLlelcwkmLqUQZdFI0RRElunib8jMY+eA7IZJOLhcW5xMzJm1sfnVaiVkymn3GKs6Yumk0y8KoepKt47Rc99c/6NrNbtYY/ckXr9RFLo7af8qREyeYVrNSrgT8C2zVyLTxZqaZUoFAACTsjhvyl3nIz5rorOHUlbtGionVlGUUgp7EhNecdK39ru013R0cORdsecctjwkg7wppaQsfW/KfPUl5M/JBgBvaqyImzNb1vxdXyJubn2BGWsDb2oMX44qxYb630irA72pric5jvRjnEJtUvBdn3zDm/JYplQAADApi/OmDPa+CntEr+2zbZxYejnW9p3CK0Eujo93fHAc9wDr9Fk7O0p4ro/0JJuvQsrSjxiescmuTNeetLVSKndQqj2K2Z4qFKpWStXr9TqxD6YPAtW13vMzu3aNgvQ93RmnuNIi81onHfuwaHs8spHQquXKPxdKlUsUhb4zphMvFilhmFdYUu8KubMa5pVVDkc/Qjvg1JXGfI0wzUXH5mN5kRZFHoUiYinRXiQsPGoJwRE+r+x2EzP32LVjqT1sHf7+cGgVvU7t8j0fui6SEpLaoLNre5JkP5Zd7nGNh9e3pCUMrY7fb6Q11p6XplN22nKQV1SN6TW7ZfRR6/ZkOEeroQ51D68/f/oHN7orTd/ONRgAADh7LNSb8rZ0+B20vpEZK3ZUb+UeuXGisL2pUB5ahkF7U6IohZCRvSnuTIicI7ZzytgMzJykbNbR2bHMqGw20PRhovYvvCoOZA7TsQVzJQzycuUJy9VM6mNeYhgrXl9EprFCxUvq55VWDls/5JW2vmzvLrlfEalT3zaiNdjlVcpKT72TvlMinUgpetVOuh1xqqwvfbSakTDURjy7picZ7E1x9BNaAltCb4GMtMyszZOVG6bs9QCE/Qwq+9b7KE7ZQwndK3bmnoTtlZhCAADgzLNEb6oQytud6OFN9VpVLYWqugVjJYrwSpB+z5N+PZ2l7A3deqRQlTvcxiRkzgMS0/2EtL1iMeas/VaCyXS8NV06L7PKm/JwqqrKPbDHmFJ7eZEljVxJuRMceTj6iWgs3G2gbSyRF2/e7+fVaswxA958nZg1+innamer3tS4WuW2St2TjHvSb5jXykuWrFNvBzKTF6dCybxGKftqxj4qkVcocFpReljW303Kql3GSygEAADOPIvzpvQSWPtZcvwiZ+y3PDF+tx7uRMX2puw/Fe1ZRO9KTJ6o8IO8Kfd9G04KoYT9Uk7Nb5pcV+0bL9ix8ntTUpZZhTDWfeNzBca6r1uuWonmlogwfiyOVsOSkmWnSurnlVaOkNrV5+rHLVfmHvPGglX7voS+uyiFEK3mw9yje1M6VsYSujrNODypeWSbTkRFvjzkbX3pp9W4hKE2wrzCdMh+YzJvqoeE1hXCMoPWlNdYJGWvB4huAvcs+3b7KGZ7z+xNrVrvLjhL759mhzcFANhDentT1y2m8Kacpwus80LppybM8lvmCQ2qo08v1cfGXeeYfnAllCdGbmmWeEN6m2wpK++KM/O25UkkTj2aIhKvQyzapx3MGXovFvlQTZF/pqWROXwqIKYNMp2V/RyF8VWq4AmEVp7OzCLlku0zCely2bF8Cd28jtr3UFslJcseVKuVV1Y/XVI5/ZBXunXxSh4lbWwdPNfhPWsRecinrt2nU+y86rqSwnmug4gVNkz9/IZerO9mz11DoHc2AkvQjVen4/8CQVweUqS+ZLWqr3AkDLXhZiS8nsTM140egtsyPYnd4jh9Sx8JrVr269RvO3yN+Sm77SvMK158f9AhW9O2+ig7L3K8ICUMr6yoHw4Jlx3hTQEA9pDe3tTp6enNmzdv3rx5eno63XNTy8HeaJoq/b0Ze2YobNHuBs6T3c4R6uf44HgXNcaZ6O+nMGBOBlT9nH3UpHl5gyNaAQBgb+ntTd28efP27du3b9++efPmmfemzEGHKbPYmfnrhsw21pbsn07eT0L9QGMAzMmcLW6KvJqN2aE/MgYAAGeM3t7UjRs3bt26devWrRs3bpx5bwoAAAAAAAAAYuCkHwAAAAAAAAAMobc3dXJyor2pk5MTeFMAAAAAAACAvYXlTX3+5VfeeOONN95446233jo5Oblx48aNGzdOTk7eeustff3zL78CbwoAAAAAAACwV3D3pl5+5dXr16+fnJycnJycnp6enp7qz9evX3/5lVexNwUAAAAAAADYN3qc9Hvl1asnAa+8ehUn/QAAAAAAAAB7SL/npl5+5VXblcruSsGbAgAAAAAAAJxVer+FQh/54xzwgzfFYX9+bwoAAAAAAIAzRm9vSjtUfFcK3lQaeFMADGC2H4PeOWHAnKDqewF1AQDOJEO8qb6hl0BFKau69n64vShKWaU6X/Ln3rOxDNqhSV/pJCxKWdXr9bquZFkU5BX+z88nvCkz8GjqWh0fHLe/QN/86fHjDz+y71GClKdv1ky0hPOMi8OG4WESbhJrrIlC39qZf5oiVG1b3cyQ+uFUXCGUaVBZRfXS6igrI321mpAwoY32T11PUtfq+ODI6zeMMFl5PK0yVTFnBzIRdkmX30fNSc4ylys5AAD0ZXHelFStiyKUNTCnho2iEMo4NqWseLG66EJVVWX7POEVG+2i6byULMMrpDzR3HPjineDLlelcwkmLqUQZdFI0RRElunib8jM4+KA7IZJOLhcW5wozJm1sfnVaiVkymn3GKs6Yumk0y8KoepKt47Rc99c/6NrNbtYY/ckXr9RFLo7af8qREyeYVrNSrgT8C2zVyIjxpq5A+Sks+uVDgAAHovzptx1PuKzJjp7KGXVrqFyYhVFKaWwJzHhFSd9a79Le01HB0feFXvOYctDMsibUkrK0vemzFdfQv6cbADwpsaKuDmzZc3f9SXi5tYXmLE28KbG8OWoUmyo/420OtCb6nqS40g/xinUJgXf9Yn1DnhTI7W4YcCbAgDsA4vzpgz2vgp7RK/ts22cWHo51vadwitBLo6Pd3xwHPcA6/RZOztKeK6P9CSbr0LK0o8YnrHJrkzXnrS1Uip3UKo9itmeKhSqVkrV6/U6sQ+mDwLVtd7zM7t2jYL0Pd0Zp7jSIvNaJx37sGh7PLKR0Krlyj8XSpVLFIW+M6YTLxYpYZhXWFLvCrmzGuaVVQ5HP0I74NSVxnyNMM1Fx+ZjeZEWRR7+IWIp0V4kLDxqCcERPq/sdhMz99i1Y6k9bB3+/nBoFdnmFrbubPXFtJqWkNQGnV3bkyT7sexyj2s8vL4lLWFodfx+I62x9rw0nbLTloO8ompMr9nN0kf5p74TbSenw+yRxbCdHh8cq7qqqvCUPrwpAMDZZ6HelLelw+989Y3MWLGjeiv3yI0The1NhfLQMgzamxJFKYSM7E1xZ0LkHLGdU8YGUXOSsllHZ8cyMxuzgaYPE7V/GXRqhUrHFsyVMMjLlScsVzNZiHmJYax4fRGZxgoVL6mfV1o5bP2QV9r6sr275H5FpE5924jWYJdXKSs99U76Tol0IqXoVTvpdjTFHLGPVjMShtqIZ9f0JIO9KY5+QktgS+gtkJGWmbV5snLDlL0egLCfQWXfZh+VkieuQ7JcQbJOOy0KoZrH8LrBKJYOvCkAwBljid5U0y0POjvRb1W1FKrqFvOUKMIrQfo9T/r1dJayN3TrkUJV7nAbk5A5D0hM9xPS9orFmLP2Wwkm0/HWdOm8zCpvysOpqir3wB5jouDlRZY0ciXlTnDk4egnorFwt4G2sURevHm/n1erMccMePN1Yobqp5yrna16U+NqldsqdU8y7km/YV4rL1myTr0dyExenAol8xql7KsZ+6iIPBkdkuUiUrbaaXs/vCkAwD6yOG9Kr7+1nyXHL3LGfssT43fZ4U5UbG/K/lPRnkX0rsTkiQo/yJty37fhpBBK2C/l1PymyXXVvvGCHSu/NyVlmVUIY9037lEw1n3dctVKNLdEhPFjcbQalpQsO1VSP6+0coTUrj5XP265MveYNxas2vcl9N1FKYRoNR/mHt2b0rEyltDVaWYal5pwW8+NpIyqlYe8rS/9tBqXMNRGmFeYDtlvTOZN9ZDQukJYZtCa8hqLpOz1ANFN4J5l32YftWK1uFT/Y1u4m2y4NwVvCgCwpyzOm3KeLoif4fa6Y7PUl3lCg+rE00v1sXHXOaYfXAnliZFbmiXekN4mW8rKu+LMvG15EolTx+tF4nWIRfu0Q/s2MD8W+VBNkX+mpZE5fCogpg0ynZX9DIDxVargCYRWns7MIuWS7XNT6XLZsXwJ3byO2vdQWyUlyx5Uq5VXVj9dUjn9kFe6dfFKHiVtbB0812E/r0JaVLMQ7j6dYudV15UUzjMtRKywYepn8/RifTd77hoCvSofWIJuvDod8lkUUh5SpL5ktaqvcCQMteFmJLyexMzXjR6C2zI9id3iOH1LHwmtWvbr1G87fI35KbvtK8wrXnx/0CFb0wx9VLqOyBYX06EXi+xt7Hbado+dN2XGpkjbgTcFADg7LM6bWhr2RtNU6e/NuDJDYYtCqODMz3TZ7RyhfvTj4zunMc5Efz+FAXMyoOr3uY9CSwEAnEngTaUwBy+mzGJfRtPZxtGS/dPJ+0moH2gMgDlBiwMAgLMEvCkAAAAAAAAAGAK8KQAAAAAAAAAYQt6bepTk/MVLL33y7y998u+Xb9+DNwUAAAAAAADYH8bYm7pUap8K3hQAAAAAAABgf9jUm7pQPv/Cvb+FNwUAAAAAAADYNzbypp567qUX//LvtR8FbwoAAAAAAACwV+S9qcu37+kno7xnqM5fvPTCn/9E/+mlT/798q3vwZsCAAAAAAAA7A95b0r7URcuHRF7U5dfeOHh3yV2peBNZdmf35sCAAAAAADgjMH1pp7/0/924enLxHNTT19+/k//K7ypwcCbAmAAs/0Y9M4Jc5Y4k4qdtFDza6z9ift+eQ2LNYw581oa+1P2sUq6XY0trb6WJs+GTNo9cr2plz759xce/t1Tl18g7rn09IjeVFHKqq69H4kvilJWqcKTPy2fjWXQDk36SidhUcqqXq/XdWtk4RVOOm1qUW/KVLymrtXxwbGq67quZNn86fHjDz+y71EiLQ8zayZawnmG7WHNYJiEm8Qaq6H2rZ35Z1FC1bbVzQypH07FFUKZBpVVVC+tbtig/Pa+sVbnbJ4TYat0+T1ALB1S5onW0eh24dr85lq1EaquZGk+M61Xx7L1PJ252hIWRZOzfUM2a05lLXNh1NazPZcwcvZSu5dOem4TiT6VirySjmLP8xPLfVvrSptodd/6XsZzU7e+Zx6OeuHPfxI+PTXu701J1booQjE72aIQyjg2pax6ds2FUFVV2f1CeMVGu2g6LyVL8gonnU749OTPvUGXq7Vvf2gshSgLLUWjw6n7hZmHkAHZDZNwcLm2OKbOmbWx+dVqJWSPtauxqiOWTjp9ci41Vu4jLU84bXlwUmOJtF349d4rkeli8ZOaqCARjWVsfpTujt8nBO6cP5CNiD+ACrVer8NhcZ6Wst3BaFifGbvZzLX6StULpmzMkvbNbjqrGNYnbHe6tc99LwfuO/1e+uTfX/zLv3/quZeovakxf28q7GTJwkf7hVJW7aoYJ1ZRlFIKexgIrzjpW/td2os7OjjyrnQbVvF0sgWJ3aC/KilLfxAyX30JJ92lhTc1VsTNmS1r/q4vEXfQGBzG2sCbGsOXo0oxnjc17ViyQ8CbcqIw2s4wjQ2+R0u0ivcJ6Vj2DRPZqp2X/lopFR5emsmbGqn3Y+KVfSe9KV4uzJJm8dOZrIxkyl7uRKx5+/PNtXpm+l4OXG/qhXt/e6F8nnhuarLfm7L3Vdh9fW2fbePE0ts4ts8TXglycXy844Nj0utLpxMmGNuLp5cHhJSlHzFyioPWgLd3Z74qlTso1R7FbAdRoWqlVE0u+HWxhFqv13Wt9+oKk05tLZoKc0ok7gFG5rVOOvZh0fZ4ZCOhVcuVfy6UKpcoCn1nTCdeLFLCMK+wpN4Vcmc1zCurHI5+2nGRuNI0JyNMc9Gx+VhepEV5thqNpUR7kbDwqCUER/i8sttNrO7aaVc7ltrD1uFlTRwhyDY38qQNeVtGP5aE7elfv+WG2ggzsuuU3yqZ8pApOy0lyCuikNyK2JZ6gNBWjw+OVV1VVXhSfciI7kkYs7q0xkKbp/sWhlapvJqHKjjFIWPZEe0UuFbn2hgRy81r1Zy9dwWwWgpZg5yxktQq2asTFeGWglPvHG2EZR/QZybk8fvMXE8SqijRcq026JedU8sDeol2JdoX2MudHi8ifR05nkbrNCzFNLMLUhsTaXVH+95hsH9v6lIZXpzu96bsLaZVr55aqITlhbnEjupt6E1l0+EXjfamilIIGdmbYnlTkZTrto+IzfbMScpmJZIdy/T7TrfV/YVXxYHMYTq2YK6EQV6uPGG5msYa8xLDWPH6IjKNFSpeUj+vtHLY+iGvtPVle3ddP0sKTNapbxvRGuzyKmWlpypJ3ymRTqQUvWon3Y4m6qO9thzXasTCybInPTd3+Yms96xF0fIEKXvti6iduEIY9b7FHqC11aIQqnmo1avE3tbCtMMBGuun1XTttHcxZQtjkSVNWV2kR4oJEOTVfNf/+Sm3c7JsDfJ6Nk6vHi0Fq890e1pvFdIreyqdTM/PGb8iPUmkriN12mM8TdQyT2N+L8FLh9nXZcZTsiCUrU4yu+D082NpdRf73sHkvalHEc5P9ntTjVpycxc6bp+xpyiFqroFYyWK8EqQfsk56ZdNh1+0WPsphaqo9sM/6ZdtmRxpe8VizFn7rVWT6VBraVS/GdnQs1Kuqiq1U8dsqF5eZEkjVzKjSFYejn4iGgvXs2kbS+TFmxn4ebUay62K8cY5P+Vc7TBnsRP10ZwaHPaBnRepMW9VtXemzLx6KSSmn9WMPcDKtdU2kXFG9Ei/MbwT6KnVfO0I5+0O0VWeRKxVrHYIq0v1SLbY3oq7k5e9cE7N7dq10UwN9uklevfq2Vqwa6IAACAASURBVHpnNnMRvM9gYJ/JaimsWUFYxbw6zWh1QElXkV2ddDocbYQpM0eiWLvoJQ+pn2xrmk6rO9r3DoO9N0WFKX5vqrROapZSckaRorA8ftF5YnyVhTtIiT2lbiOrPYsYXuGk0wmftpiYBRt/PkghIQ8r5dQMrMl11T4lz46V35uSzWJhrq4dmfN7XI7GcqsjbrlqJZpbIsL4sThaDUtKlp0qqZ9XWjlCalefqx+3XJl7zJtOVu0T55xdC6fUQrSaD3OP7k3pWBlL6Oo0042mXII2nYiKfHnI2/oSqYuIVoMegG5f0VbJqvfAVnvI46bstS/W5Jsx719AD+Csj44zonPazjCNsbWaqR1On8AWz2u5pNXlixD2q/49bVZdpm5LGdGbSvfqbe/H8kOoPrN3rx6p5Uyfmeghk3XB3JvK9BKkxrK1nCnpII159dVfG9yUmdpI1E52dsHr50fW6g71vYPZyJs6P8HvTTlPF1i72Gv/jKmjDuMQZ57QoJSYXqqPWfnaP2BKvJE8TDkkUa+mCKZo+pmEtlClrLwrzsw7lIdMnHo0RSReh1i0J60rWZKxyIdqivwzLY3M6+DsbEwbZDor+wSw6U2q4JxuK09nZpFyyfbkbrpcdixfQjevo4OjoKRk2YNqtfLK6qdLKqcf8kq3elTJo6SNrYPTz/ZpftKi9J9q9/kZO6+6rqRwTqITsaip0nq9bpa0uvl91xBsFcVqRw8NJh3/Fwji8pAi9YKsdLIGSQk9PYfa4Odlacy3zJ7y+LWztp6u9PKK68Tv0hfSAzQGYNlqOBc3/XPEflLWEkq4oqwuoTFPaVRXX6S1GmTtjLmeGHSfkIu1Itazo1bH7JF0LC8vU1I9S+s0YLWUx48//CiYk3HGynAgJkth12C0DTLqPd7T0npOj02JPtOT5/Gn775H7YRwei3COON5Bbs0dWys5JY010uQlkloPqkNMmWypF7KZO4TzS5CeabT6o72vcPY1JvihHElnpmimPa1eBPV6zKZobBm0XGe7HaOUD/towI7prHYKA5hzhIDFLv8HmBSa5nHFM1S8wyxhjFnXktjsWVPbJUPTHBoSb1e4t3H/+e7I2lsQP+ztPoaS6v71vfCm0oxg5Uv0+amYLYZZ0n9lDMwhPqBxsBZAvYMwHKwhv4F+QzT9RL73P/sc9nhTQEAAAAAAADAEOBNAQAAAAAAAMAQ4E0BAAAAAAAAwBDgTQEAAAAAAADAEGhv6rkrL936g2+9/Z3vDgs3fk8+/czz8KYAAAAAAAAAZxjam7r1B9/68teuvfral4aF18RXT77xTXhTAAAAAAAAgDMM7U29/Z3vDnaldHj7O9+FNwUAAAAAAAA4w8Cb2jL783tTAAAAAAAAnDE28qZ+cP2///WN//GD6/8d3tRg4E0BAAAAAACwo+S9qT+PcHrr9iffWv9ff/LPn3xrfXrr9rfu3BnFmypKWdW191PKRVHKKuVykD/AnI1l0A5N+konYVHKql6v13Uly6LQN5vc9UVTijrnKSW8KfML4k3KtTo+OFZ1XdeVLJs/PX784Uf2PUqQEvbNmomWMFvGUbB+T71HdsMk3CRWXwmTqQ1JZ+H++VjimUanbb6HAEKZBiWKYk51DcurKISqK1kOiDWfGSSazJy9BB9bP8uUEAAAwK6wkTf1N3f/8e/u/fpv7v7jiN6UVI0DUAhlTXdSQ11RCNW6DUUpK16sLrpQVVXZvlN4xUa7aDovJcuiKKUUrSRl2fpSzT1CpWd72UmPd4MuVyVLc92+oRSiLBq5moLIMl38DdnGpG2AkzNsCnsGnZmZmUgbpg2uVishU0sGlDy9PZNhjFV27f6lG/ISrC63MDSVeGHi0/US0xVkNGtZgCUAAMC+sZE3VX37l//Pn/1/1bd/OaI35a4XEp81sTFDb0fF7qGulFIKe3IWXnHSt/a7bC+u+aue2SUlDxIc4E0pJWXpe1Pma0rC0YE3NVbEM4lZ3RgzTfaeMxV3xp2okcpeyqpSqkrvM0+g575szZsKyj5AG1xvajI9j5XyEiwBAAD2DZY3FXtu6pM/rP/vd/7fT/6wfvW1L43lTRnsfRXOUNdsRllzDk4svY1j+07hlSAX2lMym1T23lQpq/T+mLvF5Jzri+QiVK2EkLL0I4Ynl7LHCN1c6rpWSmU29LpDjM2pQqFqpVSdXj7X6+t1rff8zC5iU2H6nu7sVnziSPjDQTr2YdH2eGQjoVXLlX8ulCqXKAp9Z0wnXixSwjCvsKTeFXJnNcwroh8noq2f7q/NxXZL05KQbwk8HTpHHxPl8iRM5J5aSUmmYzexxL63bT/6JG3drFbU1mnblA7HLbtQOjPCwqfXM9EjEXe6hydXQau0ewnbxoTXC7ktl8yOqWeiiq36IpoJQ0LyKG/Y/4Q6DPVM6Sd/SDjsN4alAwAAYFy43tTvvPHWtTfe/PrvvvGa+Opr4itfPP7KF750/KNv/uInd//pR9/8xauvfen01u0RvSl7i2nVZ2nTPlmX3/YppZLlKji8t3KPEjlREt6UkN10p51eVFJOsTclilIIGdmb4u6MkWcI25lEbIJlTlI2+wPsWJW9a9ddMX8ZdNKGSscWzJUwyMuVJyyXEkUpqzrmJYax4vVFZBorVLykfl5ZFUX0TC86EBpj7DYkdEgWjVGDmdwj6mKlw5OHri9PP2kdjlV28zf9X8wSptAzk1TrbvfG2W2QbiBhoXrq2a+v2D1pCVNaLaKnABJ1av4nSxErO615djoAAABGZ4g39Y0vf/fe8X/7/n/6249//+f/9c4/fPz7P//+f/rbe8f/7dZr74ziTRVCpUe+VFy2L7FarYpSqKpbfFWiCK8E6UfP0QlFzfys8TIrMOeGbs9EqCoY7NMSMlPmzGbCKz1n3rGZSnSVly8ztXod5OW+JiRSrqqqcg/s5bygMC+ypJErREljmiEF4PhyCW1kvPGcDmltsL3NuDdF+JN9bCzjymbth6PDscrubNfE1x2m0DOTmLcZ7AHmcw93O4nsNtBzQmPD7CcsKVs/ecuMJEXsRKW1AQAAYGp6e1Nf/Z3ffe34K3evff+Dmz/78Td/8Ymsf/zNX3xw82d/9tajq699eXNvSq+7tp8lZ4RwVuYsT4w/roQ7UbG9KftPRfwsYufztCvKMQZ7U+77NvzpYChhj5RTfpF1iFGI2AouFSu/NyWbpfdcXZNrw/E9Lkdjub0pt1y1Es0tEWH8WBythiUly06V1M8rq6J++ukzz+bo0LlNiHi5aAkTuZv3rKzat1Aw0xkw8+a0uHRem5TddGjWp/n0zMFJubMEdhuMa5XKq5+e9ZV+3lRcQirlzEYxKXN6b8qUIkwn6DeSywqRdAAAAIzOEG/qK9d+57Xjr91/66OPf+/nP/r9n3/8ez//3psfnd78xkhvoQjeNt6uwIXH3M1Xs6gZOz1PxvLiKuqhGmrmVIbvHw9vE2qqN6S3yZay8q44M29Pwlji1CMBIvE6xKI7xFiSsfRzSv4Yn3+yopF5HTy5FNMGmc7KfrrA+CpV8IRPK09nZpFyyfa5qXS57Fi+hG5eRwdHQUnJsgfVauWVsBxfb8HTMqFZ2hI+/vTd93rWKalDz9JS5YpKGM3d1pgSvdIhnpvy5PHsZ9V2CHqr0vwmQUKH7oLO8LKbvLRX34k9jZ6HO1RaNr2V23kgXRdEtkFbq2bhwtN8LK+Enj1txAcCf4OLI2GYl1dSX9qInsmnrcJSuEn5vUQs93Q6AAAARmegN/Xlr3799S9//cEbP/7hzZ/df+O/fOH1r3ovqzgzv95bFNO+Fm/DheHdYobCmiX8ebJbIPZSOugL7GdbQPMAAAB2lOHe1Je+8rXXv3ztnWt//frrXw9f/Xc2vClzFGPKLPZl3hDbGBmdkvop5zOPpd6Zfk/prLKf9rMEoHkAAAC7yEbe1GvHX7n6+pe/8KXjs+pNAQAAAAAAAECMjX5vyg7wpgAAAAAAAAB7BcubYgJvCgAAAAAAALA/5L2pYQHeFAAAAAAAAOBsA28KAAAAAAAAAIYwiTf18he+CG8KAAAAAAAAcLahvamT2998/StfG+xKvfjbr5x845vwpgAAAAAAAABnGNqbevqZ59+69Xtvf+e7w8LJN7759DPPw5visD+/NwUAAAAAAMAZg/amxg3bLuOigTcFAADgTDLbj7YDEANGCGZgcd5UUcqqrtfr9Xq9VqKx+6IoZZVqBqWs1i38WAbt0KSvdBIWpazq9XpdV7IsitVqVQjl5W5KkW29CW/KdAGaulbHB8eqruu6kmXzp8ePP/zIvkcJUsK+WTPREs7TQw3rEIdJOGe5cmIst/cfS7yiEKquZDlJMQdU5TB55qwsW8KF2KrHdk134Q0nxnRVaUao+e0kXRcYQaZDqNqeFYwCX4dL69VXO9stgF1hcd6UVJ2LoltLtuUUhVDGsSllxYvVRReqqirbdwqv2GgXTeelZOnMbEpZ1er44EgL0ZQi2ZdlW7h3gy5X1eRrStrcUApRFo1cTUFkmS7+hszcQw3IbpiE6Hk9plOInupNZ6h9JefIs2VvwZVwsDCciLN7iTM11WU28Cmk4sxrJ2zdPQe4qdmTEcTMUlarlZCpRdUBsPqNhfXqw6IAwGdx3pQxd9v0w2YQaxh6Oyp2D3WllFLYXU94xUnf2u/SXtzRwZGsrHXiSh4dHCckDxIc4E0pJWXpe1Pmqy/huD1pX/m3nt0ujoULxKxTjJ5yKatKqWoyQ+1blRx5ptMGB0/C4d4UoxRzlnRYXnPGmprJvKmt1TK8qZ4CjgD/VM7Q9PNFW1qvPiwKAHwW500Z7H0V9hpqbZ9t47V5JcvC9p3CK0EuvqfUZq1UZfyZZm+qlFV6f8xLxD7XR/pjzVchZelHtLby8r6ct3dnviqV2dDrDjE2pwqFqpVSdXohSq9U1bXe8+sOQ9bWoml3MiHeBRP+cJCOfVi0PR7ZSGjVcuWfC6XKJYpC3xnTiRfLk6dTcnMxWvZISZ264KRsl4tfpzxt1IFZ+smSEmZzF0oXw4+lLSq8ws8rPODE0aEtz5zaiPUAaY2t3Dbo1aBfUktOzqEd8p6s9TL7Fq+9k3ll7ZlZF56FDytXQp5t2SqhfLcUtlFlDc8zjEqWWip9njxdrpjGYj02RhAy1opX72nNp9aac3YY6pDQD0OHS+vVE2oBYBQW6k3ZW0yrPs1A38iMpY/ErYLDeyt3o9yJQvkqzUJQKYRscjcNvpJyir0pYTIj9qZY3lQk5bqdJcTGXXOSsik0O5bp6YzDWcnS+guvigOZw3RswVwJg7xcecJyKVGUsqpjYzwViyyX5+Rb2mA/2MZLOSwXp3by2gg1z6uLHrah/1vZdhim49Syo8Mwr5TVubHI2rHkmU8bHHgai7Yvfv/ALBcvVlg7RNaRvi5jz4y6yJed0ypT8mzDVhO2YdfOoFpuxehTLl7KGEG8co0/gkQaV75HoppS3qIoW11Wr55QCwBj0cOb+usIo3tThVBeS+jhTfWZKxSlUFW3GKw9Iu9KkH4ZnPRLnetLzzlYQkbGuVKoiuoB+Sf9OHOOrLS9YiU+tLf1W+kk06HWoYO8zIpgdBQRqq6qKrkMzNBG5J7ManGYPiflRLnSZpbVRrqw2bKnbMNeBo7OVOhZrK3DDWNx5JlBGxw20FjGo6Cz699LMGOF7T1RHQl7ztZFmE5EwnyrzMozp60m1L5hLa/a9UR9lUyZq7GIJaRlzpYLI0hC8+RJv2E65FgUYasL69Vj2gZgRPLe1FMvf+3obpX2po7uVk+9/LVRvCm9VtN+lpzxoCist1CIzhPjN55wJyq2N2X/qc1W6OWT1cp7B4YSRbc2EyMrZLT3D/KKSdg75dSoVnaHGIWIrXlTsfIri7JbxOKPzfkVSkdjuZVFt1y1Es0tEWHCWBx5iKEuW9h+Je0zg+dow7lNiMiYytoP8XNvG2zRfYrXV7B+nCtFK093JTftJuSZTxsceBqL595qgyxFyjyEIFtuOla8doj2HuTFn/+l6yIfi9MqU/Jsw1YpCTfdm3J1WIeDaaJc6ZQtCTGC2OWaZAQxb6JatW+h4PRIoQ7Ze1PZXnT7LQXeFJiUvDf14vu//twP/yW9+/S5H/7Li+//ehRvynlywNq39ZZhvIZhFpMS5+nDWF5cRR2JjvRl7hvSu2WqblVMqKnekN4mW8rKu+KMWLaEicSphyhE4nWIRXeIsSRjHVubdWGs2MlvI/M6OHce0waZzso++W1GiCo442691N709mS5ZHvqPV2uKn7yOzSDzmCSZ1R8DXBStsr1+NN33+tZO6Q2PJupI88OJSWkczf36DmHZ+Tr4CmXNfmUQrM/TFhvk6ZeIO58CTJWEZNHTKaNAeN6TGOEhQftQndrtja8UqQzrannOtJCJvoW/eJTu73TeeXsOSwFXReBhcfKlek23XSOtmer0cry+9VOHsZOuGMJ9pJitlxMv9rWIUYQTxthDQ4eQWxtkH0Cv1WSsUgdera6kF49YYoAjEjem/r8j/716if/9sKj/1X+1a/I8MKj/3X1k3/7/I/+ddy3UCyEopj2tXh71cJnKKxZDJsnu0mxtxH2h8Ta8BalAiDkDNuqN/ANLlfMHxguFUaQHWS7LWVcIwSAJO9N/fbHv/6P1b++/ON/+e2Pf02Gl3/8L/+x+tff/nicvalFYbaVp8xiX/rr2Xq0kvop5x3CUtS0trdAQiPBQAiWyVm11WaTyn+ebfvlwgiyo5zVlgKATd6buvLBr175L7/Ohisf/OrseVMAAAAAAAAAECPvTT333j//1g//Z/q5qd/64f987r1/hjcFAAAAAAAA2B/y3lT5/V8+81f/eL59p5/9J3Plmb/6x/L7v4Q3BQAAAAAAANgf8t7UZ99df/bd9Wff+GPjO/30pz/96U9/arypz77xx/oeeFMAAAAAAACA/aH3r/emr8CbAgAAAAAAAOwJQ7wpb28K3hQAAAAAAABgD8HeFAAAAAAAAAAMobc3FQJvahP25/emAAAAAAAAOGPAm9oy8KYAAGDrbPEXRfFjpgAAsNP08KYGh14CFaWs6tr7GfKiKGWVGmbIHy/PxjJohyZ9pZOwKGVVr9frupKl/mHvVubup76FYv6YesKbMkOspq7V8cFx+yv1zZ8eP/7wI/seJUgJ+2bNREs4zwxg2IRjmIRzlisnxnJnV2OJVxRC1ZUsJynmgKocJs88ldUWp+sB+EVbuDlpttj0PP3YI5HuV4Vyelq7f9Y3rIK+1y6O+fxHyu+xSQEAAADsCovzpqRqXRShvEEoNswUhVCOY8OK1UUXqqoq2+cJr9hoF03npWRZtFk2MjejbDMbM/JEc8+NoP4YXwhV65G6uW7fUApRFo1cTUFkmS7+hsw8AxiQ3TAJMbPxmE4heulhOkPtKzlHni2aR9gDzC/DpGyrXHa+nkctpDw6OBKi07nuabuvstIGE/a9Xkd9TKWz3YIDAADYkMV5U+54RnzWxAYevR0Vu4e6UkopjINEXnHSt/a7tBd3dHDsyXl8cCSr1puyPD2SQd6UUlKWvjdlvvoSJnLfHHhTe0J2XWAwpawqparJDLVvVXLkmU4bWcIeYH4ZJmUx3hQ1vlC9sSgad+ro4Cjse8llLzJ99DkAALCjLM6bMtj7KpxhptmMsuZAnFh6KdH2ncIrQS6h79TsTZWycvbTKqVyRw3dsdY510eOu81XIWXpR6x5Y7ajLufOuq6VUpkNve5YY3OqUKhaKVWnl/P1en9d6z2/7nhkbS8AtwdgEgcUCX84SMc5otMcj2wktGq58s+FUuXSq86J81ReLE+eTsnNxWjZIyV16oKTsl0ufp3ytFEHZuknS0qYzV0oXQw/lrao8Ao/L3PgltR8TIe2PHNqI9YDULc5PQBV71VVOeelme3dazukADEb21Z9pSU0Nta3bymoXKLeVDMW+CtrAt4UAADsAQv1puwtplWfYUbfyIylj8StgsN79hU/CjUimklAJaWZgjfHOGQnDy3DoL0pYZIm9qZY3lQk5bY80ZmcOUnZFJEdy8yHzAZa1RyTdFdwE7qiZA7TsQVzJQzycuUJy6VEUcqqjnmJVCyyXJ6Tb2mDvW/JS5mcwGVrJ6+NUPO8uuhhG+asVKS+vCu+DsO8UlbnxiJrx5JnPm1wiPcA9py+an2taG8Q0ZjfhzCsZZv1xZawd99iXbT8anhTAAAAApboTbXjV/5cHxGX7UusVquiFKrqFoO1/+NdCdJPnaNrz3sQYypHYM4N3Z6JUBU1V+Cf9EvPDNJzqfBK/xkYOcPg7NhkZPZWpum83BeHRMpVVVXugb2cNiL3ZJb/w/SZc8RYuTJ+dU4b6cJmy56yDXszJOrr0jN4W4cbxuLIM4M2OIQ9gFeD7Zye401l2g4tQM7G5qwvjoSrQX0LeT2qQ5z0AwCAPWZx3pReB24/S45PYvsMtifGH5zCnajY3pT9pyJ4zrhdSm2WXVerid5C0Y7fkRlGKGG/lFN+UffKDe857Fys/N6UdJXJkzm/x+XNeNJ7U265aiWaWyLChLE48pTMV026068+Je3lzzC04dwmRGRmGZUwlXvbYIvuU7y+gh3IXClaeborKRcoIs982uCQ6AH0h8HeFEewlI1to76YEvbtW/TTs831+Jji9fyr6OjglCsmCbwpAADYURbnTTlPDlinO7yFfG/gMUuq3mJkOpYXV1EP1URmw/77x4Vyl0K7xdHMq5Zz01ziDeltRqWsvCv2TC7zhnRPP+5XkXgdYtEdayzJWPZxlzBW7NkhI/M6eHIppg0ynZX9jISZS1XBc0HWK+zNHJ4sl2yfm0qXK/F8SLgH1ZlH8pSjrwFOyla5Hn/67ns9a4fUhmczdeTZoaSEdO7mHu21eka+dp/58WvQ0uGR0wo6623S1FuMnQdCxipi8ojJtDFg3uymY+1C+/Xue1PM9u61HVoG11qOtldfUS35Eh55fUtct13KwnqPuVcuT4d2smTfS+2WU40X3hQAAOwmi/Omloa98TVV+nszgs5QWLMSPE92k5Ld2DyTJPbctijVPjCs7ZyZ+oo5OWc7awAAAJsDbyqFOXwyZRY7OfMYwGwzhpL6KecdwlLUtLa3QEIjwURzTvq2HdQXAAAA0M+beuG3XnrnP3/3/ffff//999/5z9+98rmXzrY3BQAAAAAAAAAx+nlT9+7ff+v6yWeePvrM00dvXj+5f/8BvCkAAAAAAADAfsLypi4/9/yfvPPOBx988MOADz744E/eeefyc8/DmwIAAAAAAADsFXlvKvSgYsCbAgAAAAAAAOwPrL2pz177w8/+zrdS4dofYm8KAAAAAAAAsFewvKnP/fU/vPLDf06Ez/31P8CbAgAAAAAAAOwVLG/q6o9/9eWf/FsiXP3xr+BNAQAAAAAAAPYKljf1yse/On/x0it/8ZPX/+bfzl+89LL6ycvqJ+cvXnr9b/7tlb/4ibkB3tQA9uf3pgAAAAAAADhjsLypK+/98vzFS1f+7NOXP/7V+YuXXvjTT17400/OX7z08se/uvJnn5ob4E0NAN4UAACAicDvKQOwcGZupIvqExYlzCawvKlnvl+fv3jpmXd+/OKjfzp/8dLl7/zo8nd+dP7ipRcf/dMz7/zY3DCKN1WUsqrr9Xq9Xq+VaDRbFKWsUoouZbVu4ccyaIcmfcUR0k25KEpZ1ev1uq5kWRTGODRpE0l4U2E6xwfHqq7rupJl86fHjz/8yL5HiVCeAVkz0RIuuf0Pk3DOcuXEWG7/Mp79dPY8us69qhSqtlvK4ASH2WHYR22LWB9VFELVlSw3FW+sdCIpj2MknGZeCMXpxu0ElzYtSGsMffjmEiZT26YlbFi52+215mxNfn84dHTwEhxkfpkovXqkTTIazHRlXzgsb+pI/eL8xUtHdz9+7ge/PH/x0tEffXT0Rx+dv3jpuR/88ujux+aGUbwpqRoHoBBK10e2bopCqNZtKEpZ8WJ10YWqqsruKcIrfnZuytq10rkrWfYyi+zN3g0698rKxb6hFKIsGimagsiSI8ZgZm4DA7IbJuEZaNvjMpFCQnseXR5zp2mnq9VKyNRCw4i5h1FMHzU4917Z9bpHD9WbdxpjpTM1DE+jt09IaHVQXYxF3yFmapbfh5+lzn/DsjB7rWE2z899k0SYiYfzqHHTHyXKqKtdE1r4bG18IoYJw/KmLj34+/MXLz397Q8vf399/uKlS3c+vHTnw/MXL13+/vrpb39obhjFmzJlsMvDb6t6xhS7h7pSSinsaVZ4JcSVrdun0n7d0cHxxN6UUlKWvjdlvvrybN4vbCL/1rODNzUKE/kAoT2PLo/O4vjgiLlTzcp9+d4UI5ewFKWsKqWqjTuNsdKZGoY3NULXwaqLyawC3lRPAc9U5z+TNxX8dRR7ntabciX05lEjpD+VN7UDu6Y7700Nsl6WN3Xxz/5OO1Glenz+4qXPfOuDz3zrg/MXL5XqsXar9A3jPjdl76uw1/Zq+2wbJ5bexrF9p/BKJK+o13d8cKxqpZR/XjGdVPLsTdDmhZSlH9Hayot6ob66nDvrulZK5Y6+tEcx6+ZUoTCFTSxF67XqutZ7fmYXsakwfY8wp7Dik7DITMVJxz4sWrvVYdVy5Z8LpcqlNzQSu+peLE+eTsnNxWjZIyV16oKTsl0ufp3ytFEHZuknS0qYzj20Z1I/nm2Qh0AIS7AORRxH1jgCmauqqkkd2haetsMmlhKFVTt2A7dTTthGNPecJVB9QpNC2xL9vsLoWYlSVrRlxvqokDCdsHXbV46aM8x6NlO39eXURWh1MRvzegC65QYHZjz7sQubbl+CkMrrsTMHlrL1pU90py2BTDmUZxXp69CH1/F12DCvtD2bPorsIe28YvKke9H0uGPXV8zCY/0PVVn+TMbTRmx0SPTPYe7tUwxOSckJ3WtHKAAAIABJREFUTNgGiZ6NzMuqkazMW9E8Y3HH75EG1CmZ0datjjNZNX3UEkbPUE6WN3XhGz+4+L2fPf3uL47U44vf+9lnH/78sw9/fvF7PztSj59+9xcXv/ezC9/4wbjelL3FlFa0H1GoRJ8Y5qJkuQqO6tlX6IhJb0pXgNAJCrXhw0u0N1WUQsjI3hTLm4qkXLc9VMyszUnKZgeMHcvYro7VXjF/4VVxIHOYji2YK2GQlytPWK5mOhybYVCxyHJ5Tr6lDbZt8FIOy8Wpnbw2Qs3z6oKfu23Pvn7I6NHcu1iO1ZHelCfz0cGxah7i8hqUYz/s3PVwlFZgxDZCHToWHuqn9vqZSL/BKoX+L2aWWcJ0ssazCuzwmKqLSLkcGwt7gISERI9ktcqoDuMfmIWlRMrUF8cSeCmjD/fKlenr0tVNFoqp+YyeI70ob9zJWzjZb6Qri9RG+rZ0uYLxyytpPneqpUQtMyGzN4+KyDOt5vvPBvOzgn7pbM/qGJPVsAfY5ugZwvKmzl++8pk/eO/yX/zime+vy794fPkv68t/WZd/8fiZ768vq59/5g/eO3/5yojeVBF4IMxu2rszb5qlUO3aZ7PUEVxh5FImTtb1bR7ZG8zXUqgq6CCy8nBS5sy8wys95+ux3q3fOiuZDrVyFuRlVllSvXZVVT0XeLjjbmbhPEyfk3KiXJmuKqeNdGGzZefYhmvPwQpcYBtU7k4sL3fypF9wz7E1oPaYMdMyN7O46Npbv7mCO7MkS5quL90v6Ku0DlszSO8tZCHTidSgtxeUqYuI5jM9ACEhQ6t0BTHaF6eiEyKZK159MWXOpow+PK12WkVuXmRJeX0UxwxS/Vi8pOP0Gyz90NrIjg6Z3IeNcStuS+H04cNG89E0n60R/pibqNNetbOQss8sD2f0DOF5U5uFdL16aP+3/SxjbdUvuRmzhXLH77xhraidKP7elH1zKwgtDyep7A2dWZiVgkjFG3l6p5waU5tcV+2TmuxY+XVNGVnGTsqcXx91NJZb13TLVSvR3BIRJozFkSe6MJkobL+S9ulkOdpwbhMiMhqxVgSjuXf27OuHtA1PHiqWJU+tRFGYt7Os2rdQUHtTKupNZXZ1wtw5e1NxmT0dBiv3iXTi9ZU6C206q6L9FNYXhzCdsAbJK7YlDPameHNE3zbIVsnPy6RDVkdYF5RImfriWEI6Zavs6MPtckX7Oj/3pPUm+qhEXpQ82V6dM+7kLZzXUvKjzCpqven+ucf4pW8QsnsoPcjdbinJXjQ6gnQJtqPD3JrvPxvMtx12Olu2OmankZtZzTd6hizOm3LO5Vs7cd7ym6cCs5SVOblLKS5cyCz9g7mh9r2FmdJ7I3nRHR7NTEpyE03iDelt1qWsvCtOr51eYPZK4X4V4YHvLmJbtMZvDGLRR6ryTyk0Mq+DU+8xbZDprOzz62acq4IT9q08nZlFyiXbM/fpclXxU7nhynG3upbsAX0NcFK2yvX403ff61k7pDY8m6kjT1IlJaRzd++x9lR9/fi2EcoTxjLlapanm+2p4NcXfJn9GbxteG2HELXDtfMUUCWF81RAtoOi2oWTe1jSI6oHIPWzstdZ4n2Lnn2SCXIwKdvp2Jqv3V9xsOtUd7y6vh4//vCjeF2key2vB6DldG2jnWl5rTLYrQpaSiAz/VxZWBcx1ZH1tWJYAvMMwmqFPjzah0cldPM6Ytgz3UO6/So9k4u27s7C0+OOnVfMwsl+I1ZfiVHG33zm9c9h7qEdeq2pUyyVu7f8HWrDbqf+BmPTZ9R2RrG+ZSLNk/r3oHskxqwgklR0TjKz1fUtuz0Kb2X0jLE4b2ppFMW0r8VjriWcDWYobFEI5bSlHdatvZAGtsV2rWjE3KfuyhbCmekBvPoaXBb+HIudGvpwsCDOQM82biNdWnabCzOsH5h59IQ3lcJsEE6Zxb6MFrM14JL6KecdwlLUtLYHsmx31Bkr92aZbW/M6Wz0AOEzOVuf/aAPB4ti33q2/WRYtzP/6AlvCgAAAAAAAACGAG8KAAAAAAAAAIYAbwoAAAAAAAAAhgBvCgAAAAAAAACGAG8KAAAAAAAAAIYAbwoAAAAAAAAAhgBvCgAAAAAAAACGAG9qy+zP700BAAAAAABwxoA3tWXgTQEAAAAAALCjLM6bKkpZ1bX3I+hFUcoq5XKQP52ejWXQDk36iiNkkLJQ9Xq9rpVobhCK+VPuCW/K/Jazpq7V8cFx+6vMzZ8eP/7wI/seJVrx6vV6XVeyjBd/c0eu/ZXoObzBTX4Pu6+Em8Ta/Le3rdSGpLNw/3wsqzM2X8lyw3TmMeA2x/xPqlOxZmliVt9rurKBSY1Xy6P8kv3gdExPHkYn7TDse8MrerBI6Hl+y9wcWxvtMOSOX0qEGrN7Wudza4ob2iEAAMzD4rwpqdpBSKiwkyWjFIVQZugqZcWL1UUXqqoq2+cJr/jZuSk3rlU7gbDnTEaeaO65aYd3g869HYdMds0NpRBlUZRSNbkLNXiuyWTmufuA7IZJeFadmZmZSBud8efaV1qeua1XqKz7ty378Tw9IaMLMaGE08k8VsobdAIp7ze0w7Dv9a4Uhe6km4j6y4gyj8UmPW0pq9a39MemUGPhQNbE155n3A4BAGA5LM6bMp2v3RHzx2+9aRS7h7pSSim0OxS7EuLK1vT9TprtFdvTyybFuUF/VVKW/iBkvnb7ZtncNwfe1FgRzyR9vR1usoO9Kff+mSurlFWlVJXuEKbRWBa+KkIJp5N5Ad4Uq3PWGjg+OPL63qPgShkZ0caSeSwG1GnoDnljU/Ke5sPxwZE3ngIAwPJZnDdlsPdV2GNPbZ9t48TSC4e27xReieTlDA+yPWqoY7XCKJU7auiOJc65PtKTbL4KKUs/orWVF/VCfXU5d9Z1rZTKbOh5ZzAa707V6UV3vSpf13rPz+zaNRWm7zEHYBIHFAl/OEjHObDUHI9sJLRq2amvWLn0OmviyE14IiWUMMwrLKl3hdxZ5Zx+CSPa+un+2lxsl40tCfmWwNOhc2ApUS5PwnTudmPxcg8twVyJyBOc4MpZlH0SybuS1rNQ+hKR8qQai/Ut/m2utH10mJI5JmGow4jkmbLbZ8aaLZGwBjkjSKSkOfE6Owz7Xt35cNYH+5Y9psNhlhkrV6wnSQscDmqEtQSOZagxAADYFRbqTdlbTKte66ZCJea1YS6qOYzR+E7hFTqiPy5ao7g+zKEXJEshZCdPNinODe3XNmlib4o7ZlMp196cIIhizme0xxu5scxYbjbQWk25K5QJXVEyh+nYgrkSRlZDW3nCcilRlLKqY15iGCteX0SmsULFS+rnlVVRRM/0ogOhsYw3ntEhWTRGDfJzF92RWtoSnCuJ2nHrNGtR5JXWwqN6bu6xzkHNpzE+BanV5L4KQ2ZfwlCHcWGoshs92yr06j0pc5BR3lri4jUam9Sbms4yh+WeiBJ8IAoe35s6jnliAACwWJboTZmxqbvC96b6jFhFKVTVLdlq/8e7wsjFnwnFRtBsUpwbzNdSKO/ceXsD96Rfdt7PkbZXrLRr0a6bsh5USOReEvuEQV5mTyDl4VRVld0hyXhBYV5kSSNXUvN+joo4vlxCG5mZbk6HtDbY3ibHovRcmp8Ow5vKW1R4xcz8UhZlbxrEVxAm0lgvPL/a258Z6k3ltZqQxPrqy6OHC31f7B5+N9tvBHHtMOx7RzzpN51lDs49qsP4GlnWeu2TfmPZMwAATM3ivCkzPVqtVqWUnFHNGaUsT4zfF4c7Ufy9qZX1AkA9ihwdHOuF2ObKNN5U+BRvKHyRfAvFoPGyyXUVPlWciZXfm5LBg8sMmfN7XNnV0FaesFy1Es0tEWH8WBythiUly06V1M8rq6J++hnkzyR06NwmRLxctITs3M0mRY+9KS2P35Clnv5yNeZaQu4eI6kj80way6KfFw1EJTZCExLGZR7o+FFlD+TRJ9C6Kk7JnCr+8L2prk7DvpfsjQd5Uz3asluuzD2ZojUtpcfelLX72uWl3ycR6Y3blJscmy4X3hQAYFdYnDflnO+3Tib4Z7jdftYsyCVO84exvLjk8l5kxPK2GsrmHbjOq/ycKzFyU0biDelt1qWsvCvOzNs+m55I3H5xYvtVJF6HWLSvDDbPKnixyIPvRfCi4eAphUbmdfDkUkwbZDor+xkk46tUwRM+1ivszSEdslyyfW4qXS47li+hm9fRwVFQUrLsQbVaeSUsx9ebpR8yWU/Cx5+++17POiV16FlaqlxRCencvURKWYXPh4Qph/J49dUpP2dR5JWuybfrKc5f27x0tp1xTqOxYRNQYb25W4XPwvmnQ+vaP4xNyxyTMNShY13J9u7JY9azQplNXSTyCrXqCZCW0LbD47Z1J96QHmuGzLKPa5kJvFomWxMpc817Qzo54DapWW0kLSQAACyBxXlTS6Mopn0t3l4tv81QWLPSOU92CyS7HQp6EVrU8cHxntvY5qCdbg4sEwAAFgK8qRTh288nyGJfxrzsiuxYlNRPOZ95LPVOa7F7SGhR+2lj4wIdbg4sEwAAlgC8KQAAAAAAAAAYArwpAAAAAAAAABgCvCkAAAAAAAAAGAK8KQAAAAAAAAAYArwpAAAAAAAAABgCvCkAAAAAAAAAGAK8KQAAAAAAAAAYArypLbM/vzcFAAAAAADAGQPe1JaBNwUAACDLbD+Avqisx2WigpwZ/QAAhrE4b6ooZVXX3k+5F0Upq1QnRf4AfDaWQTs06SuOkEHKQtXr9bpWorlBKOYP0ie8KdNBa+paHR8cq7qu60qWzZ8eP/7wI/seJVrx6vV6XVeyjBd/c0dOSzjP+DFsuBom4Zzlyomx3LF5LPGKQqi6kuUkxexVlV6Lq2SZurlt4zrxYaWYs4qn0HNMvQs3Xc1CmrkhK4+nVXus1D2/HobMFdueu7HJHR3sTM3nP1L+mEIKMFaR53RC7CKQ7T0cPcMrYi79AAB2hcV5U1K1XZhQXhefGmNMx1fKiheriy5UVVW2zxNe8bNzU25cq7YntWctRp5o7rn+1x9BC6Fq3avb2TU3lEKURVFK1eQuVHpGuDkzjx8DshsmIcZFj+kUot2S6Qy1l+Rds0q23NAz4ZRiu0YVShjKM1v7WghLEz4tT+AJdBYopDw6OBKiGxf0WNB9lZWu+nB08IaSYyodjnicG0aJsgnUeOq091A/3pVWJUP0AwA4qyzOm3JHC+KzJtZt6U2j2D3UlVJKod2h2JUQVzY9TrlptldsTy+bFOcG/VVJWfrelPna7Ztlc98ceFN7QnZdYDClrCqlqskMdTJvyvkrpxTT6ZBDKGEozwAJd7qlLE34nt4UNQImvIVKHh0chaMDuTBHpp8frRZvP2lv6jjQD6mxmNhLMycAwGwszpsy2PsqnE6q2TKy5wqMWHrZyfadwiuRvJxRR7ZHDXWsVhilckcN3ZHMOddHjmrNVyFl6UeseSOioy73zENdK6UyG3rmeEl7qlCoWilVpxfm9bp4Xes9P7Nr11SYvsccn0gcUCT84SAd5wBMczyykdCqZae+YuXSa7qJgyheLE+eTsnNxWjZIyV16oKTsl0ufp3ytFEHZuknS0qYzV0oXQw/lrao8Ao/r8I9jMfRod0MPW2Y+nIOULUp26WYU4exfiOt54Q8XiLMlmLXDrNv8dopKXbMnrdiG6Tmw5QDmauqylgUKU+krsMOIbViGOw7HYejw1jeFGk/2b6OzijXq7f+D3El0/cS+qnd+nLuJDU2TD8AgDPMQr0pe4tp1aeT0jcyY+lN/VV7VI+8Qkf0e9W6mUa0c8Jme6gUQnbyZJPi3NB+bZMm9qZY3lQk5dobUYIo5iRle7yRG8uMcKrdQGs15a6PJnRFyRymYwvmShjk5coTlkuJopRVHfMSqVhkuTwn39IGe9+SlzI5PcrWTl4boeZ5ddHDNsxJpEh9eVd8HYZ5pazOjUXpUHSHdan6ipXdKsV8OuQQSsiTh9lSfAmzfUvYTimZ4/a8DduISOilHHovVbvylcjLlyeeHTmDt7yO7XlTVO6+PXMKxevVySv5Gozop9EhvCkAwDCW6E2Znq27wvem2L7EarUqSqGqbllX+z/eFUYu/mwp1v9mk+LcYL6WQlXBEEjIw97nIcfUrLS9YjHGb86OTUbmktgnDPIy6+sR4fUcpap6PBSeLql7T2ZJPkyfk3KiXJlZWk4b6cJmy56yDXuBOerr0rNqZ1l6s1hhobTTEKsvv+zxUsygQw6hhBx5VtyWkpmLc9ppWuxRanlD2yDEy/Ut7VjgeVN5CdPZJa5HNT/PSb/JxpTQWqh+Pl+D0fHUPDaFk34AgP4szpsyk5jValVKyfFJnD7O8sT4XVu4E8Xfm1pZLwBsR6xjvWDZXJnGm+rWiIMUuq225FsoBo18Ta6r9o0X7Fj5vSnpPhLNkzm/x+XNJ9J7U265aiWaWyLChLE48nQDdhp3ctOnpL38GYY2nNuEiMzbohKmcm8bbNF9itdXsFadK0UrT3cl5zw46ejMiPryy06UYj4dcgglTMujr7BbSm9vapivsl3b6CdhIVTUmwrz8uVJZ9dEkd0rZGOjnu0tVN5BDOctFH7uG3pTrf303pvSr9Pg93WuDvM1mLTMyj7kX3RvoSDGU3hTAACbxXlTzjMA1n69fxrb7bbMMlX6GQCys0svekX6ce95g7J5g6rzKj/nSozcNJd4Q3qbdSkr74o9J8u8Id0rhftVJF6HWLTn+81zC14se2sujBV7dsjIvA6eXIppg0xnZT9/1RZNVsGzH9Yr7M0cniyXbJ+bSpcr8cyGVzuOeSRPOfoa4KRslevxp+++17N2SG14NlNHngJKSkjnbu7RXqtn5OSqswqf3mnXL0LrbdLUW4zdGgQZi+g0SlmFseweyRPYLoWYTIcD5mqknu0i1/6x6u4Kv6W4tZzvW7x2Skvu5n60PdtIaJVM2WqDvje1CnoAU1JbnkiOluNhvafb00b4EGAdeUO6vhjb50k/lJVQS009R5rQYVfLumnkenXyCqcGA5/fb+/HB0fZN6Rvoh8AwJlkcd7U0iiKaV+Lt1f97wyFJZfep8tuUrIbm2cSzjo02HWGtdM9t43YJP5sZ72irKV9IK13Pz9RQbarHwDA1oE3lSJ8+/kEWezLbGC28aakfsp5h7AUNa3tLRBq4xfTlLNJ33YK29hnQmvZ9X4eAHCWgDcFAAAAAAAAAEOANwUAAAAAAAAAQ4A3BQAAAAAAAABDgDcFAAAAAAAAAEOANwUAAAAAAAAAQ4A3BQAAAAAAAABDgDcFAAAAAAAAAEOAN7Vl9uf3pgAAAAAAADhjwJvaMvCmAAAAAAAA2FEW500Vpazq2vuB86IoZZVyOcifRc/GMmiHJn3FETJIWah6vV7XSjQ3CMX8mfaEN1UUQrWqWK/Xda2OD45VXdd1JcvmT48ff/iRfY8SrXj1er2uK1nGi7+5I6clrGfxBo02emU3TMJNYvWVMJnakHQW7p+PJZ5ucXaj4wrQtk1dTXOqa1heRSFUXclyQKzJy+X3Ucm6GNis3PraWORoysu3BAAAAMtkcd6UVI0DUAhlDXKpMbgohGrdhqKUFS9WF12oqqpsnye84mfnpty4Vu0Aac9+jDzR3HPDqneDzr2SpZtdc0MpRFkUpVRN7kJVskwXf0NmnhYMyG6DKewZdGZmZiJt6BanPwuZWjKg5OntmQxjrLLrSX+6IW/R6sL+h3kzO/FJ6msXLQEAAMAyWZw3ZUYdewQKR6PY+KQ3jWL3UFdKKYU9OQuvhLiylbJyRmX7iu3pZZPi3KC/KilL35syX7t9s2zumwNvaqyIZ5LsasKQNNl7zlTcGfcfRip7KatKqSrdjUygZyZe/8O7uZc3NUm5dtESAAAALJPFeVMGe1+FM/I1W0bWnIMTS2/j2L5TeCWSl+PpyfaooY7VCqNUbtrnbjE55/pIT7L5KqQs/YjheZXsMUI3l7qulVKZDT1zFLM9VShUrZSq08vnen29rvWen9m1aypM39Od3YpPHAl/OEjHPizaHo9sJLRq2amvWLlEUeg7YzrxYpEShnmFJfWukDurYV4R/TgRbf10f20utlsKloR8S+Dp0Dn6mCiXJ2Ei99RKSjIdu4kl9r1t+9EnaevGW6it07YpHY5bdqF0ZoSFT69nokeK3eap1EuZc2DPa8thfSViOW3wjFoCAACAZbJQb8reYlr1WUfUNzJj6SNxK+vgUHiFjuh7LLV2JNpNqXbxvBRCdvJkk+Lc0H5tkyb2pljeVCTl2j6ySEUxJynb443cWGaWYDbQWk11/kPvtW0qHVswV8IgL1eesFxKFKWs6piXGMaK1xeRaaxQ8ZL6eWVVFNEzvehAaCzjjWd0SBaNUYOZ3CPqYqXDk4euL08/aR2OVXbzN/1fzBKm0DOTcG8qUQpWL9H+H6vrIJbXcs+mJQyrHQAAADOwRG+qEMrbnejhTbF9idVqVZRCVd3iq/Z/vCuMXPw5jd4M4cow0JvSkhKzc/5Jv+y8nyNtr1hp16JdkU09zMCRmVobDvIy69kpD6eqqtwDezkvKMyLLGnkClHSmGZIATi+XEIbGW88p0NaG2xvM+5NEf5kHxvLuLJZ++HocKyyOxut8XWHKfTMhNMnDOslyMTHyn3nLIFZHQAAAOZncd6UXmlsP0vOmGr7DLYnxh+Hwp0o/t7UynoBoF5ZPDo41suKzZVpvCn3fRv+JKDJPfkWikHeVJPrqn3inB0rvzclm6X3XF3n13QjsyvG3pRbrlqJ5paIMH4sjlbDkpJlp0rq55VVUT/9bDb3TWujECJeLlrCRO7mPSur9i0UzHT481raflK+dzSvTcpuOjTr03x65mBHb+uCtI0292wvMWhvatW13LNpCcNqBwAAwAwszptyTupbZx68o/PeGGMWEcOT8YlYXlxFPVQTGS+9pceyeSO58yo/50qM3ISVeEN6m3UpK++KM/M2Cozn6z/t0H4VidchFu3zD+17Bf1Y9tZcGKtTmv+MRCOz+zSIV3fUc2VuOiv7GSTjq1TBEz7WK+zNowpkuWT73FS6XHYsX0I3r6ODo6CkZNmDarXySliOr7fgeQwvWU/Cx5+++17POiV16FlaqlxRCaO52xpTolc6xNMynjye/azaDkFvVZrfJEjo0F3QGV52k5f26juxp9HzgCm7b/PN8gORciO/3u6N9S3DnpsKtHH2LCHWBgEAACyBxXlTS8Pe+Joq/b0ZI2corFnCnye7BZLdDgUJYD9AA0sAAADABN5UivDt5xNksS/jdGxjZHRK6qeczzyWemf6FZ2zyn7aDwiBJQAAAOAAbwoAAAAAAAAAhgBvCgAAAAAAAACGAG8KAAAAAAAAAIYAbwoAAAAAAAAAhgBvCgAAAAAAAACGAG8KAAAAAAAAAIYAbwoAAAAAAAAAhgBvasvsz+9NAQAAAAAAcMaAN7Vl4E0BAAAAAACwoyzOmypKWdW19/PzRVHKKuVykD9an41l0A5N+oojpJuyULXJva5kWRRFUcqqNl9T5Y17U0UhVG2lXKvjg2NV13VdybL50+PHH35k36NEK14+980dOS1hPYs3aLTRK7thEm4Sq6+EydSGpDOPfx4a54g5mgal7bmHVELZ8ixtqUKXy9ZVuo9i2iHZZ26SYDq6qfRKlj3jTlIXS6vlrbPFVrATdeHpZ/NYYc8fuzLPSJRMbem1A8COsjhvSqrGASiEsgaDVIdSFEK1bkNRyooXq4suVFVV9iwkvOJnZ6VcFKWUov1TWZbFarXSUyQtj0rOObIdnHeDzr2Spblu31AKURY6z0aHvWY8A5i5gx6Q3TAJF+7MLIQpCmvazmq1EjKzGBEIU2nLn5oBBe/6hEZMVh/F6B/KsM8cV3Iyuulph6UzhWw7xMS+5XJbwdYZph9OrFAb1Ng930g0jF2sUwCWwOK8KdV5KYL8rIm1eb3UG7uHulJKKewJXHglJJq7nv1Z6822p9crqdgN+quSsvS9KfO1R+6bs/y+Ht7UdIxeWP5+8gzCpPLq6UuYcgVrMf2af/oGjgYW7U1NkOYyma6kS24FS2C64eCMeFM7WKcALIHFeVMGe1+F3ZfV9tk2Tiy9rmv7TuGVSF7hdn+zSdVrfuNuMRFHp+geWUhZ+hHDcx3ZY4ThOQSlcovl7bGi9lShULVSqk6f/NHHJOpa7/mZXcSmwvQ93fmuuAdIjFhBOvbBp/Z4ZCOhVcuVfy6UKpcoCn1nTCdeLFLCMK+wpN4VctcizCuiHyeirZ/ur83FdkvTkpBvCWFhN88rtUoSpGxLaDefxJ62bRv6lGzdrETU1knalMx2Xnw9ayMUzRK3TLRQKi/fekObb67bfWZomckDTsyjm/ZtCXmoNujXBWnzvbQa8U4J6/XkybZlK9mobcSshW+rvXraXilvpRUk8krITMLpM0PCe2IyO2JHWlNXBCoWMYLwvKnRRyJbq2trFPbKxWkpTMsEAIQs1Juyt5hWfZZn9I3MWOYYXngwb4g3JaTVbU2y9mx9LYWQkb0pbu5UynU7x43NpcxJSmetnRHLjKaq3UCrZGn9hVfFgcxhOrZgroRBXq48YbmUKEpZ1TEvMYwVry8i01ih4iX188qqKKJnetGB0Fi/jZER8jJeR6BnImVPQsZshrQNQp60zJGUU2V3G2lfa/Gs12pNtpzOtnxoz34bjNVpGqsgZpbmyxPqOVHSmDlFUvZrJ5KyYxukPEG5Yj1A1ja8K7TMWVtlyLP0VpCqwaTMERtL9ZmJWIl0UhIWqXMc2XbK08Z0I1G8l2j/T8nTxzIBACRL9KbakToz3aTj9hqxSqGqbjlWiSK8ks3FIJQ9rbRkmOCkXyspMdLwc+eMEFlpe8VKD5PNEJ48ns6RmVzd9/My638pD6eqqtQaKmdGGOZFljRyJTP7zErFnJfEtNHTmxohr+NOa/7gAAAW5klEQVSDo9BX7GM/qdnMimEbHJkTtRNLp22Vpfd6mKy1xGa6/vq622cOa6ccuv5HVnW3dj545T5r8+FOS6bFcfqERLkSGuMYWELmnt5UD3kW0go4dcG0Q06fGVEavUeabLmZTUu6pGNoI0xnw5Gol20Ms0wAAMnivCkzSK9Wq1JKTgu3fQZ7VsHvF8KdqL57U96VbrMr9x6Iwd6U+74Nf7Dk5D7Im2pyXbVvvGDHyu9NSVlmFUJNUjN7XI7GciuCbrlqJZpbIsL4sThaDUtKlp0qqZ9XVkX99NNzxjNRXuYdKqv2LRSJlHvNIzO2kZsxk3kVQsTsOdYqYwrM6CfYfbVT9vpMyp4tCcfwpgrT1QbyMH2ehM1bWh2Scl8zXqV7NoZtuOn0th+ePEtvBVReLJmDsuf7TDJW2K8yPIrMVn9ah8M0P8FIRPYSnL2p3pYJACBZnDflnN1PnKcPvBd/sZYRy4urqKPMkS4yk/Kkb0hvsy5l5V3pkbtXCverSLxqrGifvmjfK+jHog9rBc9sBKe6G5nD8+IxbZDprOzT82YkroKV8laezswi5ZLtafV0uexY4b6BndfRwVFQUrLsQbVaeSUsx9ebpR8yWU/Cx5+++16uTsPp16h5dfpR1JM5casjnhjxBPBsY9U2dr34a35vICGzu1hT1/FnWsJ0BOdJId9ajgnrNevZlTyyCu6I51qLudIscw9yqDyBS1nVnRk4HU7YBoNnbHybt7PwtOqVNOh48/1YWO9E6QKNpW0jauFRmZ1+1SspR56FtwLannMyp0eZVo1+n0kZJ2FRYWuKPTdlFypIWRCxqH7M3HPstcpRR6JIn595mpE/4mctEwAQsjhvamkUxbSvxeOsm54ZZiisWTKfJ7sFsuHmAxMzIVPxLdylAduYh6XpeWnybBdo4+yBegRg68CbSmG2yafMYl/6wdhS7uiU1E85n3ks9U5rsTvNftrG/CxNz0uTZ7tAG2eJ2QZWAEACeFMAAAAAAAAAMAR4UwAAAAAAAAAwBHhTAAAAAAAAADAEeFMAAAAAAAAAMAR4UwAAAAAAAAAwBHhTAAAAAAAAADAEeFMAAAAAAAAAMAR4UwAAAAAAAAAwBHhTAAAAAAAAADAEeFMAAAAAAAAAMAR4UwAAAAAAAAAwBHhTAAAAAAAAADAEeFMAAAAAAAAAMAR4UwAAAAAAAAAwBHhTAAAAAAAAADAEeFMAAAAAAAAAMAR4UwAAAAAAAAAwBHhTAAAAAAAAADAEeFMAAAAAAAAAMAR4UwAAAAAAAAAwBHhTAAAAAAAAADAEeFMAAAAAAAAAMAR4UwAAAAAAAAAwBHhTAAAAAAAAADAEeFMAAAAAAAAAMAR4UwAAAAAAAAAwBHhTAAAAAAAAADAEeFNLpyiEquv1el3XShTFwpMFAAAAAABgf9hJb6ooZVXX6/V6vV4r0XgCRVHKKuUYlLJat/BjGYSqTazYFUdIN2WhapN7Xcmjg2NVW1fiLk1R6Hz6OTzMWInbjLtlJDw+OFZ1XdeVLJs/PX784Uf2PUq0Ba91Mcsp/TQt4SjeIClz2jaa3CtZanPM1GAly741yLXMeApuDSoxOKl4+ltwxWMLAWPJs61yAQAAAGAX2T1vqihKqZopbyGUnlFlJ9ZFIVQ7US5KWfFiddGFqqrK9p3CK352VspFUUopjPxlWfBnbJPO7bKJezfoclWyNNftG0ohyrZ6VlpFspxCbL78TLTjslqttPQrhqtm3ZC7U6j1et1LFWM5imHtZG/bFeA7AQAAAGAJ7KI31c1+Yp/DO50USlkpEbuHulJKKcyEm7ySltO5LqTcbW9KKSlL35syX7sdFduDnYhRlBOTOZ243nGqqkoKWVVVFb+zlFWlVNVTFSMVzamd6G3t+sImec3MaN7UDpYdAAAAAMthcd4UebosdiLO3v3gzK6s01kFP5bebLF9p/BKJC8/ZbNJ1bglyj+vmE6nncH7scwhxmaDxd8Za74q5W93DPOmhJCytL2p7thV2r9N5tJIaG/jeOVaWYc821OFTRb6ztr6TMbq5NSn87QpsP3zUDNK1UqpSkpl2WolS70fpfMSqlailJXJyylprOyM3PMnRana8S2BPDgX6KeudSFau2LaWKj5UEi7vgbrh9zN86wltKiw7Il0PG2ErQkAAAAAe8jivCk+9hbTqtfcXag6vjcV5qKPfoWHwYZ4U0Ka52eKQgjRnleMb1yE3lTryfhn7RKeQNGdiaS8o77eVFEKISN7U0O8KUdC43cQBTRnNJvdJCOPrOqqO6EXxgqvtDPj5hm2gd6UEGq9XisRZNqVovmk/4uX1LnSV3u56vMK5VtCUMuOfoyEnpVmbSzUfFxCr7qH6IcqBWktGSuNaiOUB6cEAQAAgL1nV72p0AMZdnaO4U0JVXWbAEoU4ZVsLgahiLxYs3ZH2mCKbNbgU94UMa8d6k1pHZAJDjzpR8903XJFJr5VVdH7IeZibEei3f88GnrST2/XGP+2ycvUjS2MecVFxH/YyBfNajWjZ8ovcrbyyKUBho2F+4SEkJFa7qsfjm1nWwqnXLHWBAAAAIA9ZCe9Kb3m3H6W3J0EM0u2PDH+fCjcieq7N+XPBSl50umQ3hR7fjymN+W+ycNJodvE6/MWCmpXJ7o3tWrfqdDtEohmv5Ez5Q1fl0fKzPNydT36mz91ULlF9yle0qn2porVatU8r5e0lkIIe0+JTCd2cZizkfJVeuontje1cqwlU/ZIOuHeFLwpAAAAAKxWu+hN2Qvn7np/8OyHO9cxy+SZJ0aoGVK4xB487BFO7DIpF0K18qRen83am2qTWruvX7cfcWm/iuBxF3o66OvZei6orpUoSll5V5xZrKmaAdVqlOyVS3si+qt5okbnLq3npsJYQvmP7nR7FN15PEfmsAYjzoN2531L8zbBtL/nqZHcK1OR53kG4Ndg43QmLKE2ixS2fo7oWhYcGws1T8gZsd6YfkLLDATw7afzkAPb8MpOpxM8N+WV9Ng6LAoAAACAvWL3vKl9Y5SJ9WzJbibPJJKYTaFJc3GyS7qR2U2VM8Mwze+PfgAAAABwBoA3BbbP1K4d+cPNo9NsceR3GomXyC3HrR2XvprfN/0AAAAAYNeBNwUAAAAAAAAAQ4A3BQAAAAAAAABDgDcFAAAAAAAAAEOANwUAAAAAAAAAQ4A3BQAAAAAAAABDgDcFAAAAAAAAAEOANwUAAAAAAAAAQ4A3BQAAAAAAAABDgDe1dCb69VL8KCoAAAAAAAAbspPeVFHKqq7X6/V6vVai8QSKopRVyjEoZbVu4ccyCFWbWLErjpBuykLVJve6kmVRFEKF8lDp6Hz6OTzMWInbjLu1Xq9rJbwr+qJ3pZKlvqI9NOdzW2U6qVGw0984qVJWtaka62I08VAbG8qQFM+vC+u6L2FWLcMsahicvOaUBwAAAABgXHbPmyqKUqpmylsIFU7cI7GEaifKRSkrXqwuulBVVdk+T3jFz85KuShKKYWRv9S+VF3J0pEnntRUc8104uavpawqWXr3l0KUjQ6Nv2S06n7Q8YtitVoJ2bkrU8vPR7tNq9VKG9eK56qF2thQjARhXXBu7pv4xmIOAd4UAAAAAHaXXfSmurlX7HN4p5NCKSslYvdQV0ophZlwk1fScjrXtT/Rehgr19PjpzMKTG/KuEPtFULtwT3Nh+ODI1PSmeVnJ9LtQTledy7xUBvTQbqm2Zu5iSf9+amBNwUAAACA3WVx3pRzeqpWxwfH3hXHzxHKrNOzzxTV7mmufCy9F2b7TuGVSF7hKSx7k0oLo1TyqGHgMVZV5Z9yNIcYmw0Wf2es+aqUv9nC9aacD87TVt2VwAlpvaljbr3USqlanxgky7WyDnlahw+bHRsjVSKWuUdfqc2ZS55/TortmaWdcuwKmQhp4dm6CFsEIx0nFvMJOo5Wh9khvCkAAAAA7C6L86b42FtMqz5zMn0jM5Y5+hUeBhviTQlpptTNhkgphOzkSafTng90tkTCeXaYe9GdiQyv9/Wm+u5NHcc8sSAv6ygbeWKwO03YKK/9Uymr2juL6MYKr7R+VCWPLH+vvzflaaNNuSuFfyWWWhpeLVvl6nN2lF3StFYH2iG8KQAAAADsLrvqTbWPHfWYEZJ3Mrwpoapu60D7P96VbC4GoXrP2qk7g0m82bFJzWL9mS4/69DDIe6JfLBP+iWyo+fibrkiuVdVVYe7Q7Y2yD0Ta//zaLOTfj208f+3d0dXbupqGEDrCW7j0EZUBl2ognvf1MTFzd0HMBZIYKzYOXay90tmiAFJMGvpm18wzZmhutLv5FU+3+yjBjwa1epnzrRQmgIAvtdXpqmpQnH7ejibSZY5aJbEzs/kykrUs7WpYgY5LsWuk2+hqKap0zWB9jRVfQvF/PxXPXHdqjFZHeL4dA9rXHlt6rJ6B8YYQ+UUB9GifFnfvfD4zNrRnSO/tzaVv4Vitzb15HtN7mMVwsmseyZJ1lr4mmwJAPAhvi9N5YWF5XGd6iqyzYxt+VV65ZmfRwGj/DV8vmVnZvngyNkv8o9e0nCqNpW9bH2cl65tSjrLt6F4lOUg3jz3hvTq4MxHC/H4yZz8UJu9Vhf6tmV5G/t02CF7bqrcK8TV4z2rwb9nnvLpr4dllsrCxWefmzqjvBZ7DZjHeSrX1UZ7t9nTjXGw4vTMqDbdh5IVAPC9vi9N/W32pr+fedhfa89bWrLUyt56lr+NUQUAuEhTfIJ3R7vqH27mFxlVAABpCgAAoIU0BQAA0EKaAgAAaCFNAQAAtJCmAAAAWkhTAAAALaQpAACAFtIUAABAC2nq073pL9u++w/mAgDAH+8r01TXD2kcr9fr9XqNYU4CXdcP6SgY9EO63pzfaxHiuOy1t2XVyPWRQxyXs49p6LuuC7FsT+0403meCzwn9zr42BK35jaP8eePn3EcxzEN/fxf//vff/6bfyaGW8fHpZtPNfspUwtfkgarbT6+N+azp6Gfbsf9ZnRdiGMa+mev4Nk7c/8I6ysYw+EnH5yr7T78dXux/1Xt+bf6BQD8Gb4vTXVdP8R5ytuFOM2xHk6suy7E20S564d0bq/77iGmlPLMU27Zni47ctf1wxCW9vdTlrrNsJf27B/qXbO9hwfffGDqVxr6ZXv+gT6E/nZ5LtMQDf07mn2+/SdNweVyuUytv5yIatkHHn0yxOv1+tRQvCoollenYcdPIDsBAJ/pG9PUfT6093X5ydUR+iHFsPeZ2pZ+GMIy4a5uOW7nansYhr7run5ItzSVJb3zx3mJpjQV4zD02zS1fHuvqBz36/e0/9xB6m0+PviUh1NKQxhSSgd5uB9SijE9ORQv6trq6jyx42HC//1elqY+rF8AwLf7uDRVXV2Wb1nlnKz6cXq10rhezfV4r6nYkmencsvOubZHXheppsbEeLigq0iMKaXtKsdlEeNcYNlWxuZvY9yWO9rSVAjD0Odp6r4Q6zjfHp5lbmFextn065It8rytKpxPMX1yzL6u7nVv57Q6b1lzeS6flyMT4xhjTMMQs3s1Df1Uj5rOFeIYwxyey57u9f3E2Xd/LsqPrUq4Mdy6X6/QlovrTt5R5TiXTcqvTvNoVGt3m3ujvH8e9is/TnZv1H92AAAuH5imzstLTJen5u4hjvu1qfIs09KvcjFYS5oKw/L8zFwQ6UMY7u05Ps5tfeCmHFRZdFedfd7mr0U6ejZNLY2u1KZa0tSqhUvuqHRwWaM5D97SniGN6b5Cr9yr3HKbK6fhnx8/m9NUCPF6vcZQnPTei/mr6Z/9nq62PDt6jy5f3ql+SFM4OLoNHm4p76hynPfbs7m4LaNRtGfv3nhwT9aOk4a+1h6rBAGAwremqTlWND2V/tSMv+tDTPciwJR/NlsenmURYuusffXJYoq8/Fb+KE1VZrqtaWoag+oBG1f61ee+637tTIVTSvUKybJxr0Zxq3/+07rSL4Y5x90/OfV/+j5vzPKKi51E8UtZ9OGorjbObX4iO5Vbqm0uq4KVJu1c02dH48yd/PDn4ky/9n52AAAuX5qmpt9C374ezmaSZZacJbHzM6SyEvVsbaqYHeYT7vY0dbo29co0tX6Tx+oI9yLeM2+hqFV1dmtTl9s7Fe51g1u98cwkuHxdXrXN51LudF9tr+xY3Gzd/av9nr6rNtVdLpf5eb0na1NdCCfvqDMNPsoqT47GXm3qsro3dn8u9vtVrU1JUwBA3felqbywsP59//Y1ypvZz/KL881TE8d7bfaNtUeVdqZ6D46c/eL86PXZp2pT2cvWx3np2vZpmdu3oXgApj5B3I5z9lzQ7cmbzZbVvHa5NA2XdRnkTb/y18ovz9hMZx+y56bKvULcPsxzH/z7erxVm8sruBMnpji/vdM2RbAp722GsVoriztP+DTYXsE5dI7jmIawfW6qPNf84XtGfXxHleNcadXOvbo3GuV9uNfm/N7Yu3+O+zXvVTw3tenpz2xpKADwl/u+NPW3ecnE+rcd9tfa85aWLEWht55ldbrDGHlmWd03ahvnP3U0AIC/hDTFv+/d0a76h5tf7l75eVBprLxW7nNi7a94dpz/7NEAAP4G0hQAAEALaQoAAKCFNAUAANBCmgIAAGghTQEAALSQpgAAAFpIUwAAAC2kKQAAgBbSFAAAQAtpCgAAoIU0BQAA0EKaAgAAaCFNAQAAtJCmAAAAWkhTAAAALaQpAACAFtIUAABAC2kKAACghTQFAADQQpoCAABoIU0BAAC0kKYAAABaSFMAAAAtpCkAAIAW0hQAAEALaQoAAKCFNAUAANBCmgIAAGjxcWkqjuP1JobuTd1+Vhfi1KRxjKHrui7EMYbuqHnHn+m6EMdxfHSQhg+//Oy/eK5XHPyJpnZdP6Txer2Oaejf0yQAAJh8XJpapuZdP6S3zdGfb1Ia+he35KkQ8uuJZXOE90eglx38qaP1Q5pCeNcPcehf0gAAAKiSpp5o0r942BekqfV4vjdNvfTanW9q101hqpv3Up4CAOCdPjNNjctKv/tCr35I2Yqvbv72XjKatlyv1zGGfEv+mRDnIy/LwMotB+3JlvllLbl9G2NlY54BNueaQkKM4/V6TbcqSqVf60WGtealoQ9xHGPo+mEoW5j3Yt3C7dkr3c/aMx82hi67FmfOdXDk4+tV9r38TDEaqw5+QhoHAOBP9ZlpajUJnufrWdrpun5Iaejv/94rWbfqRPZ/c41i58iPJ9wPd5xaeMt+9dn8Xr/yvWptzrbsNDXEMYYQxzGldE8mTW0uOl5tzxQcH3btMEodXK/VNV31vWzPwZWSpgAAeLdvSVP1LeUX68+M28rGXEjJqh/FloYmVZuxGwtv59rpRVkHe/Dei35IKaVpr3uNq6nNtY4XY9gPaT1cTWnqiWt6MD7FYa30AwDg9/nSNLVbm7pcLn0Ity3b4wxDf1lP3Ddb2pp0Jk1Vz158UbY56+le5gnxer2mGNM4Lm9BPIorIZzMaTvteaI2NZ1r58jl9dqpTS11rKI9pftbKEI8WMEIAAC/7uPSVO3xnspDOAfP2GyeQcqeU5rfnb08q1NuKe09N7Xz7fwQ0c8fP4uOrM5V3ev27o3VC76nfo0ppeJBrKyb06NTedWrNmjLg087Z690P2vPPz9+zrW1sH1u6uBcexd673qV1zTvezk+xfXyhnQAAH6Tj0tTAAAAX0GaAgAAaCFNAQAAtJCmAAAAWkhTAAAALaQpAACAFtIUAABAC2kKAACghTQFAADQQpoCAABoIU0BAAC0kKYAAABaSFMAAAAtpCkAAIAW0hQAAEALaQoAAKCFNAUAANBCmgIAAGjxf29t8R+Caa3RAAAAAElFTkSuQmCC" alt="" width="906" height="303" />
在输出的最后面,你可以看到上例输出的内容。你也应当注意到 logback 的内部消息,
也就是 Status 对象,它可以方便地访问 logback 的内部状态。
可以不用从代码里调用 StatusPrinter,而是在配置文件里进行相关配置,即使没有出现
错误。方法是,设置 configuration 元素的 debug 属性为 true。请注意 debug 属性只与状态数
据有关,它不影响 logback 的配置,更不会影响记录级别。
现在我将MyApp2修改成:
package package01;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by Administrator on 2016/7/15.
*/
public class MyApp1 {
final static Logger logger= LoggerFactory.getLogger(MyApp1.class);
public static void main(String[] args) {
//LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
// print logback's internal status
//StatusPrinter.print(lc);
logger.info("Entering application."); Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
}
}
然后将我的logback.xml中的debug属性打开:
<configuration debug="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{--HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender> <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
再运行:
aaarticlea/png;base64,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" alt="" width="1031" height="296" />
发现结果是一样的.
把 configuration 元素的 debug 属性设为 true 后,会输出状态信息,但是前提是:
1. 找到了配置文件;
2. 配置文件是格式化良好的 XML。
如果其中任一条件未满足,Joran 就会因为配置文件不可读而无法读取 debug 属性。如
果找到了配置文件,但却不是格式化良好的,那么 logback 会检测出错误并把内部状态打印
到控制台。然而,如果找不到配置文件,由于这不是个严重的错误,logback 不会自动打印
状态数据。使用编程式的主动调用 StatusPrinter.print()可以确保始终打印状态信息,如
MyApp2。
随便说一下:debug属性设为true等效于加了一个OnConsoleStatusListener
的Listener
<configuration>
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender> <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
五.把默认配置文件的位置作为系统属性进行指定
设置名为 logback.configurationFile 的系统属性,把默认配置文件的位置作为属性值,这
种方法也可以。属性值即配置文件位置可以是个 URL、classpath 里的一个资源,或者是程
序外部的文件路径。
java -Dlogback.configurationFile=/path/to/config.xml package01.MyApp1
六.配置文件修改后自动重新加载
如果设置成自动重新加载,logback-classic 会扫描配置文件里的变化,并且当发生变化
后进行重新配置。设置访方法是设 configuration 元素的 scan 属性为 true。
示例:扫描配置文件的变化并自动重新配置
<configuration scan="true">
...
</configuration>
默认情况下, 每隔一分钟扫描一次。 configuration 元素的 scanPeriod 属性控制扫描周期,
其值可以带时间单位,包括:milliseconds、seconds、minutes 和 hours。
示例:指定不同的扫描周期
<configuration scan="true" scanPeriod="30 seconds">
...
</configuration>
如果没写明时间单位,则默认为毫秒。
内部实现是这样的, 当设置扫描属性为 true 时, 会安装一个叫 ReconfigureOnChangeFilter
的 TurboFilter。每次调用 logger 的打印方法时,都会进行扫描。比如,当名为 myLogger 的
logger执行 “myLogger.debug("hello");” 时, 如果scan属性为true, 则ReconfigureOnChangeFilter
会被调用。而且,即使 myLogger 的 debug 级别被禁用了,仍然会调用上述过滤器。
考虑到在任何 logger 在每次被调用时都要调用 ReconfigureOnChangeFilter,这个过滤器
的性能就变得十分关键了。 为提高性能, 不会在每个 logger 被调用时去检查是否需要扫描,
而是每隔 16 次记录操作进行一次检查。 简言之, 当配置文件改变后, 它会被延时重新加载,
延时时间由扫描间隔时间和一些 logger 调用所决定。
七.直接调用 JoranConfigurator
Logback 依赖 Joran,Joran 是 logback-core 的一部分,是个配置类库。Logback 的默认配
置机制是调用JoranConfigurator对classpath上的默认配置文件进行处理。 不管出于什么理由,
如果你想重新实现 logback 的默认配置机制的话,你可以直接调用 JoranConfigurator。下面
没的程序 MyApp3 就调用了 JoranConfigurator 对作为参数传入的配置文件进行处理。
示例:直接调用 JoranConfigurator
package package01;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.util.StatusPrinter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Created by Administrator on 2016/7/15.
*/
public class MyApp3 {
final static Logger logger= LoggerFactory.getLogger(MyApp3.class);
public static void main(String[] args) {
LoggerContext context= (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator=new JoranConfigurator();
configurator.setContext(context);
context.reset();
try {
configurator.doConfigure(args[0]);
} catch (JoranException e) {
e.printStackTrace();
}
StatusPrinter.printInCaseOfErrorsOrWarnings(context);
logger.info("Entering application."); Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
}
}
运行结果:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABHkAAAFnCAIAAAC96gLDAAAgAElEQVR4nOy9+7cdR3Xv6z8nu/un+1vEEIgtrRYykszDtsIZ4ezCRJwD1svikYKbgGKfxAEkFWEE22Asw7XrGJ3hjMvJHYzA7hWS3MM9JPktf9L9obqq6zHr0b261+q11/czakhr9e6qmnPWc1ZV93rm0qe+gICAgICAgICAgICAgDBteObSc19AQEBAQEBAQEBAQEBAmDY8o/770q2vp8POBUVAQEBAQEBAQEBAQNij8Iz6D74WAgICAgICAgICAgLChOEZ9V/am4KvhYCAgICAgICAgICAMCg8o/5T3tRn/tOXw3AJvhYCAgICAgICAgICAsLA8Myl59il59iXbn3t0nPsky/8SRguPcde+PxX1G1huHj93qtP2/bp489dP0lfpCO+9Z3YDdlw561MFggICAgICAgICAgICLsKvq919auP0sGLf/H6vVeffviLp+0bX7N8ra89aZ9++Iu0r/XFx794+uEv2g9f/eJgZ+niFx//om3feOsJfC0EBAQEBAQEBAQEhGWGZy5eZxevsy+9/LWL19mzz//J1fuP0kHdb8LxtXuvPv3w1deftE8ff+7aib7SvvH64w+ePv6jq3dffdp+8Pq97uavPmnf+o76fOet9oPX733u9Q/7v177zhvtkztffbJer9frtbpOXuxT05kiICAgICAgICAgICAsKji+1sXrLPSm7BD1tV669+rT9o2vnlw0LtBLjz94+vhz105sj+jOW/qea995o/3w1ZdOjl96/EH75M41c7FVzpj6/MZXT8iLXdbwtRAQEBAQEBAQEBAQlhp6X+tLL3/t+T/+ivKmbv/gf4ThYsrXOvnc6x+2Tx9/7lrndB0bX8u4VWqH6trJxevsc69/qN0ny0mzbrioN77Ii13W8LUQEBAQEBAQEBAQEJYanvG+j/a1uk2nt5607ZM713pf6+J1pg4KmuOCyr9aW7S9VwZfCwEBAQEBAQEBAQHhLITJfK2L19nnXv+wf87K8rWOX3r8wdMnb+jbjr/a+WM6Bee4YLfH9dLjD1rLhXMvdhHhayEgICAgICAgICAgLDU8c/H6iR2u3n908fpJxNfq/mqH42t3X3364asvff7i9ZPja99+o33nzrXPX7xu9rU+r+9p27e+raLceav94PW7diKf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" alt="" width="1008" height="316" />
本程序直接取得 LoggerContext,创建新 JoranConfigurator 并设置它要操作的上下文,
重置 logger 上下文,最后要求配置器用参数中的配置文件对上下文进行配置。同时打印了
内部状态数据。
八.让包数据生效
在1.1.4的版本去,默认情况下将数据给禁止了.
如果需要,logback可以将有关包数据的堆栈跟踪行信息给输出来.包数据包含了Jar文件的名称,版本,堆栈跟踪行的来源.当我们包数据标识软件版本问题的时候,包数据信息就很有用了.然而却要付出很大的性能代价,特别是对一些异常发生频率较高的应用程序.下面是一段相关的包数据信息:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABKQAAAEaCAIAAACguRglAAAgAElEQVR4nO2d2YHrIAxFpxu343rcD+W4psxHEhvtLN5zz9d7sQEhhJCAZP5eAAAAAAAAAAAex9/ZAgAAAAAAAAAA2B4kewAAAAAAAADwQJDsAQAAAAAAAMADQbIHAAAAAAAAAA8EyR4AAAAAAAAAPBAkewAAAAAAAADwQJDsAQAAAAAAAMADQbIHAAAAAAAAAA8EyR4AAAAAAAAAPBAkewAAAAAAAADwQJDsAQCAxjwNf2M6W4pC0vg3TPPZUhRyK2H3ASrYiVvNWgAAOILyZC+Nf3+eD52n4a929Urj3wel4DwN9sMYQ572Wt2Sdk/WYm9ql6Gl/Lfi9wcXixPWXhr9WxRUIfiqVFW5S5tY2belZawElzTTSm4VNt4qebiNsJn7lpbgPoy4jQquReycCmbtQc4pXBUBAOAYSpK9t3sdpml0fFYa/4ZhqHGfaVx94DwNMpBfGktewzXytNfqlUxjvm7wNXyehi5Pr5ZPo6/p6PleGJ3NdVIhGntVr7xev2YO+X3wqS8L5YZp1srxoCNP7O+/vPcb0VlmeEP4ntDZeTKRp8H7PmPgc8c1T2w5cR/ei/uN152cU28IAAAAvdRc43Syo/e6V+U+ZSRPo+a8qWpvqcvTXmtNyV7Z/ere3CrZ4x+msUkhRjzVrl9NSfM0DEO+MUyrFzJkH9CcX2xf3I87xVOPgDrYS5z8pLHWr6/FdhLpQHg3iOdyH96M+43XnZwTkj0AwNlskux9wxLdfX4PBn3HOk8TTQj+nHX1tew8qwKZ8oS1mpSX5FraMdlT744q5095OvL3N6b8HVZ3vqFv6dw5dyjKTBtXWaPY5snemNiWfVGyp4Tmm0Xr2XANUyrvL7WPZfTLm60Xn1oWrYFYZn6m/7k2QOSkqsuLlvVguajFz2dZleTMlubqsrmPCqfF93xfoyYiZ16x8tiuCJ25lrD6zbYSYdUhkRKolkCPsZdXHP/jCKtVKo7MyWgeET67nqvdrQU3EYnFTkW1FujHct7ReBV1pLHUMM3KXVh6yG1+LcA1SSsuyGotGi8unFhyS4SVSxT1xcrEDGcmAADUsEGyt8a07cmeUnWQWdjJnitPnK9YRCW/z/3v7NWHz1b+NAws3KNLhdHQ++TKOIBiX3aglboPI2H59aeG1cvq0g7JXi6ikezxVouONFtgJ4TRN2dXSKpZf8n6VZ/sUVHZ12JYmkzeXc5Es+/ZZkZCk+aKI9P3LFm1JW32/ca6G5KkE9J2Q9a4b0y0b8oN73ITsJO9ImHlePnCekPCei+mrPQNLIOIhsiYfI6LoaN5zLknvX/OFhz3YVHlxnJJLbY8hbT1EznvLU65qkaEGZTtKa0v4HkSa7W5zsmH7/DZTRvCFt53WYuGMxMAAOroTvZy/9Z8ZKP+kEp20pem4np9eVprLS8ZfDu8PkYx8ideDX3NS/a4eNmevCiUny04DyNh7WRP+x6cKrrXo+2TvVVPItnTt1utwK13jW6tQd1M3jfZUxOjbw3KKOWphLSyxUjcklEH/FkSK0Xtk9gGWPtZNksceb1T5EhYNdmzhQ0Vm//PflIoSsEbwUes+8VbRsUuRmWd8e9zM77FYz8sEMzYxGzzZ45+QmVvcqWxqhKirdrMrb6I65xC8sbcYdYf1iZ7HS4PAABUepM9em7VcHalRzDMt5W7Olee5lrrSrphSLXXLsqf+Ec1qVGW32jDa4bcxWvSFtc43d3UHZK9JRg492SvuYa+rKOpQLBXICPu7IdxnGRPk6JQslgJUUWVyZ70PnJbwJXXLVb/RV1XWHdItOdlwXnZC66w+mdi6I6/3eZ2a6v5RY2o5lzY0k/svBuTPW7vbf5CiMctb4Nkr9MfahtT5cLWJnvRzAQAgFo2+oGW7wubZHqv12uexu78QJZqr7Wq5CHJnvJlu8KTPf5k95O99hzba6qnOrtSGl2Kr8jZ28HKoG9x02y7k72aneymtmtP9rSGNj/Zc2fJ5sle5wlJ4GA3TvYCLSpR7fLBSSd7Jyd77gyqn15FxlJRraOfXU72xBlkw7XvMYmB5F7zCid7S3u8UJmwG5zsAQBAFwcke9Z39sS1k/x/Ye4yOz/QYhaLM6LPplrNRqjy9RX6X/PdIqxkj221i19ByCMz/l3wortabMDdh66wNFfe9lxvz2TvPXhDWbL3HhNy22eTvVgeUjH7epkmy6M5ZQ5axq7WwIWS9c3yi0H0oEjs35ec7Ak5lDHQ5ZGd9hIYq6NVyZ4UTl7Ls7V+bLLnDkmcecmfXaF+Tvc/bmd8F3NusufO57bJbqggMvbC6qqcdzxeWnvid4kqdTBPg/gFGtZh8zvKtUuC75wKSOPfOMn7HCXC6ksUze7Eem7OTAAAqKf87+z5dxXWd5QYwQzEvHsK+RURxc8FyZ4lT1CrE4l5Jf1a867WxydipZij3xnkjYokmty+4auXOSDOQ/X6mpaRGFoPcKPc+mRPmt6SdHDhSeBDy2ki5XrYLhIN7nWZJpvLO2g/oK+XLPiOk5FciYlA9ySYlSznS1nHVl9BvAYVSd1j0ORJ4yKD6Ibr1Cx7Xgp9dvk/H1NfFFzGNLTOmlTzQ/0Fa7xKhFWHJP80nwesZdKu4fXFs8C4LBdDrST7774RsDufWye7qwJheWU1x/pxPfvLHK/ynoyJ70AW1qAcwuWCJvJbKp7yolXIdU4xakbvCVshz+JbLENApgcA6KLmZA+cwbZ3Op53Q+R5PdqJTX6E4Vb8Xo8BAAAAAChI9q7OssW3SeD6pNRo0cxjerQrv5f6/F6PAQAAAAAoSPZ+iL77pOCu/OK4R/e1AQAAAAB+ASR7AAAAAAAAAPBAkOwBAAAAAAAAwANBsgcAAAAAAAAADwTJHgAAAAAAAAA8ECR7AAAAAAAAAPBAkOwBAAAAAAAAwANBsgcAAAAAAAAAD6Qq2Usj/mTVQ/iNoZynYYc/LLdPre1cTR4AAAAAAHARbpnsLX8k+hLS3JKrDOXr9cr/6LeUKfvj2PUJzROSvdjYC+R5a/E6Iw4AAAAAAI7gztc403iB6HVNVHLOPmi5hGrKIKlKGqnq8px0nobbdGp7+kf0RjYBAAAAAAA2AcleP/M0kAyF//8ErqKaGKm8cZWcdyONZyv2NJDsAQAAAACAWgqSPXZ2xSLG7JodPdFid/PkdTxSb0scqkavpjzLTbb1DZY5UBHf4pUkF06y9+3jW1D6PynvmEiXiILWFpSO/FmlFOX61wJzcbIXYuWtVdcNpZspy2SvtHJXTtLNYZr6a3X1E80E02RzAmNXS2WmMCYkewAAAAAAP0ftyZ4fMfJvD7Fbec6RV8t3yOLoVcozDOsnpE3y6jwNw1B8aXDpltq/vGJFPzyL+zbKLi3O00AzurwjvKIS1WhvMPFYpY7ysgLVeTvXD89cl/+VZ9+kcj0ppaqrF1mt1dFP8UywvoDnjahWGzUYfGcPAAAAAOAX2TbZqzunqam4sQiTx47ARbxckX3SwznjhWGaWELmXvdUnuUfSelogaZkL/jIT196WE+g5AHUqtz3udkGyV73D6yYKWRpelebudUXkR/99lceAQAAAAB+kv5kj18bZDHmUkCEn/T2WsO5gx7/evKwElk8rvVrm5O9VaqaFvTffclOufxUrSXZM86HsgTTUt6WuPlc9Y6AUVvRxcnaWiP92DMhmEJa7ZE8Zbk8AAAAAAB4NJ3JHj9hss8Y5EEH/93FLZK9QB47HtdS0epkz37+N0yzuGtZebKXIzOtI072Dkj2vFobzqZKjgLrq21L9oyZUDCFlNojeXCyBwAAAAAAOpM9FkCmUTuWmKdB/ggGjXjJt9XIS97Ji3o45crjxePii1zWd9KEPFqimH/9j30tj34rTvx4yvcD5WSIfX+NdtVMwudpUHRofGeP/+EDO4FU0rKm7+yx8tZgsy8tFmKcVvLs6phkT50JRVNI1h7Ko3z/Et/ZAwAAAAD4MXqvcZILccOU1B+CUIN49luT2s9v6MmVdsORZjaqPOyXC8l3wUTZYZr1c0Mhj37f8vMO++VL7Ycwnd8kZfdcRW6XF7VklQUd5fEm+Q98eMpbK69MKQxBhTg1x4j8hjCpQDwsrdmptUw/+kxwp5A3Xm4v2fPFXPa4egsAAAAAAK7Jxj/Q8hyufevtZ4YBAAAAAAAA0EhlsrfTr3Jcj2vnekj2AAAAAAAAAAGVf1T92SlG3tPr5rTG3z0HAAAAAAAAgIzaa5wAAAAAAAAAAG4Akj0AAAAAAAAAeCBI9gAAAAAAAADggSDZAwAAAAAAAIAHgmQPAAAAAAAAAB4Ikj0AAAAAAAAAeCBI9gCoY56GC/9lDgaEBT3cakhOEfZWGgLd/MzfGgYAPIhHJXvvv0B3o789t/7JvK2Wj/efCtxjMdqo5v0EPIxbRXcQ9sfYOBa91ZD8erK3/qFYZRFcFxv+cJ6GrkVzqbm8lu1XvoPo1VVFO7fUDwDgmpya7M3TsLkrS+ONkr0P2+phD61uWvN+Aj6PNXz7u0RwlMtTPdEw8D4b6IfHorCfnyGN6+DO00DVSzJSuR/Qt0PQPi63G9GDBb6dfgAAFwXJ3gVAsgdsaPx+iXOEeRrGVD+MGHiffv1oQTvs5ydgC58Y9VxzUpFdB1a/k+wdfYXzbvoBAFyVfZM9sq8sdhp79pyzmocpZS4xjcM0u9dZSiodpplfOMwlFrVmD4dpqs03LZfuNZk9GxOR9V0bfa7Xqak8fz4mGkF85bQvBNkdzPpBu0sE+tb3vZA7jXQ0bCMqlGRRVGZALAxaPpM3afTLR0XCkqlQtYDzOGxVX97Mt/711XZh1SGhEn30U2w/0XwPrnXl2stekKNZM/PMIaED75mB3qLqnKg7ye2sRD9l9qPGorCfPeyHCySPylQVcLcsVqrIP3+LRILO08TMh/RbXcFa8wozJfEWE7tkxRIlF9vcr0+09mAKOSXXhnW1fyRSFtr3cqe2aQdHgX4AAKCaA0/20shdWqMrY3dU0pj7URlTFTZBxEvj3zAMNPBhQQL97/q/NFZfUDKXPKtJ8myeBi7rMNDnzlryx5fD9f/zNNCuLHLKoXSglbIUmoWn+buLIjM5stf9IXFQ9MV689Hgt745JZFo86Z8YVmU4IyIIa8erH9aHoZsnFJKonidsM6QLC0ugamMtErsx+urGoWxcJn+NxvN8vkeDUneKBXA14/nnHjveG7mBc0l9qNPS9jPHvYTN2sJILptX0ZRxSlJ9pSsP9oZq/Lpomql+8FgOiW52PakYYst0ew8DXTJ9KaQU1JvWQipJZDvuZUtaKaGjWdI9gAA23DkNU6xqLW5Mv+iJvPI5mYcQ4pCoz1RSfZRz6ao0bjfpHifLBWKOKbKSE3hcMzTMKbaZFa2nQ2R18v1Wf6vNaT0hiToRaCfaEDV+NcRVnm/wvSZCfOQIwrSaoUNFZv/jzwpsx/vhUJN5R+xsWqf7+qs+hsnmQV6+nFtsDXZK7Qfw2xhPzvYT51gXCf5/92yTSukOqLkpC9N6p5A6ypmGGNBbQVvsVdcMW1bjgwjTnVbLIPV6l0C1R0Hkj0AwDbsm+zRCxkiSWhyZeEuKo/bi1y0G6KEixntZ3WfyoM5K54Koof8I/6TDfmCF6933p0Tq4wtDbcPIlJt/lRqTrG2o4rq41+tl6VaZEryhn4DYd0h0Z4bkXuhKDXCqp/JoSuc7yVDomzx+/rxe9ia7BXaj53swX7MzxrtJ2q2eOUT4tn+uQjzdDdycBsne2U7b/aZoK0Cd7G17kbGUyi4Vdn0bT2mBFpHYCLfd5DsAQA2YMdkT7mAccjJXlOypy7XhSd7sqrKeKH7ZI9fQjEDOh4KNJzs1YYFtSd7SsHNT/aCgHfrZK9vyQ7saeNgPahPM73vB2edzLQE6wVD8rmGNrOjvSr34zfacbJnSawH+rAf86M9kr145ft+xJtz/XOMeT41T6N5tBiVjdn0ZK9OBe540Uv/lYrkM7NFOXayV2IiLyR7AICt2DHZU/axZLJHv2xX5lC5oyT773Gy99nC83eA00j22rwwjTehNPnZxHPSQ+nS3chQfHFB/LAC/f968CA6mTfCF1r5lQi9orw+bbOV1vFnf5Uil9ZP9sLI2ZSHSeAHoCq18a8inAitbBM5OFj3hiSKnGP7Cea7qvnK3xksnu/ekIiv6TmbKaRbgXMi0R6XytZPbD/6a6q8vAzsx3q4NBScsLFK4pXv8xL/HZDIP2fyqBXamxJUwkN+oCUYTKNkoAJ3sVVuKBtLJpfPLRkf62mT+V3OSvaKTATJHgBgK3a9xkluRry/7eX8NmSNV9Ovcqyfvh3n2j7z3HpzubjDNIvV0rhyQZ+oNeuRvCjICttN0oe5rIuOs86I2HMtmFhiyMZMPliOqjSpijQ7JpaNshs2YyINjCkPb0ig4+rHlmeehq8MQkHKkPAsmjGmFmH1O3jK51Q59KlyNcntSbmw2pDkn2YRvvOR/6u13o0m/pzKw7Y51oYq57s1JFRF/L+2fvR6LX+3zFHLl4gNCFVYihbRmqVgP332Q8Ry1K6ufG+h3Q6q/tlK9pTBVHeTdL22Hl0Z3VeFEjt+xni5KnAXW64Df701Vz1eMtaNtXOTiSiWzBITQbIHANiIU//O3rW50V/s61qqfw0soOCxwBOcwe1dStM30hZu332XPt308WzNAgCOA8meyX2SPUR4NWABBQ/mzNj0R7m7/+2Vfzm1urUWrsWiU0xmAMAGINlToLcOz5bG4BZCXg5oDQDQjXEPHAAAALgcSPYAAAAAAAAA4IEg2QMAAAAAAACAB4JkDwAAAAAAAAAeCJI9AAAAAAAAAHggSPYAAAAAAAAA4IEg2QMAAAAAAACAB4JkDwAAAAAAAAAeCJI9ACRpxF8IBuAM5mnAX64DIAKLFACgFCR7l+T9t78R8ZwG1lEAzuFeyR756+pH+ox5GuCifpqrLVLzNKhT4B3NWPPDKvVKY48byOdlRTVp3CPumqdhj6H69rFa4HVEasXKSjao6eC49lL66dPcFpya7M3TcJ9F/WjOUc5OrabxUqvSheTJXMAJAWMTlvJI2HuProAmyEg3rKSH2oWcYRt6uPMyLhIKy6l3+XTZXGl2HS+wH2n8GwY+HdKYLwM0Pf1Y7TgZk6hrcpk55A6lQtK4tRmTWVJXcy5MXX/zt5s0dVyyd1X9bG8J5SDZuypI9nbkUvJQnV//XMNTHt2NvdrWM9iUNA7TXD+Vjp98NGrccob1nT60o8TBVK2Xn3reSrPfeIG9eBtcNLfVUbeTuo7p9fBkr7lm3kOajde0tdNx5bZcTT/PTfZIek36rWxF1h62q8Xyg9ulDXUHdEw1+wxWT5YqrENa2lHV0WVPM185T8OYqLymQHXGk1U6TNPSYjAknwaHaV4bfxelauRH53Kjls8AQ54I27hEtblmI3mW59Zmo1bs/fEwzevz8jHhCyBdMP1rYvSGDLNGa0iEGoSs1pCEg8lX57Uvtv3IfhobYt+HKVdYcI0un5cTjzS8h6Y8gYsxUCxEtbvb6GcZWzW+M+QJ7CeYPc2Tj0eT+Yxz9OMOieIuzRWuyH4+c3b6HHck7xKSFh6zcWBexZ3vdJlh+uSTn6WUdq2m/YSLvz1e0eTzZ4m52Lb6w/ChLU80303YHLIX0z9t/f6WkJFFtJ5+37Ae2c6AvFZozazeesy0TVgfMy1Vu+vDYUrKbFleFeGD4vKogVnylNGUzAjnWVYBayuNpSYrVasapuz++mxM1mXgeXGYBTKXybqjfp6b7BHkvG08RpJ3AWS9wzCsszil5WA1X+PlnYNWAUhNzoYH36OkF8Spe5IrLWmCx0jFPSH+VmxbBEOSxmHIhEwp6cXsmL9SnlK4cXma9eVx3mDDx673v3WT5bilHaHKowWZImmT5FV+icYbksB+giEpP9kT7zr2Y2uWiUfcpasf2s95Goof+iP9Ml2MD7UQrdq76OeV2xcfc0+eTyf9mWFt/zdPPjt58PWz1iyH5KWVLxP2ZdnPquVVaVokrJ51EbXSN9z5zpfFv2EYchs1NRl4kWL7kXjJ+cuefJGJmEtCjz90HoZWEBhXAf5cUuINpkdrCNTly0z21rcNeb7Rvi6sk+ypll6Enuwpfl5mXp4wLK97/4uVkpWYIX4kT0hf8qDs33jkHfvmXtVtuxJr+l+yvK8/1JJlZ7fgUvr5kWRPOoKmZE8pxD/SPYQo2L5r5Kyr8rkpg9997gEzR12gAq9az9bCZM888GpM9tq9OZeMDolfZ1OyF3zEdGOEgQp034snR2aTspN8Q8AaksB+oiEpT/bEKm7Yj6tZv7maIRGi2itENPhNZhtvd91EPy9hMDTv8udWU7LXNfmYHa5PC2a5rwZ9lrfaz5yfYK3/Uirzz2jl2YE937VVmaQvVrIXrULB8lqR7Gm7CbVaD5pr9ofOw27jKiCYS0pkZA5tVcWskWybpSb5XD/29oLbNKSnbfkkMZMvP9lTnrYne548NC4wXupIHqrOk6VQwzQ1te1LrDxNPV/0u5p+npvscXPdItnT3Il/g8UsWOnQjJ4ES4V9Sh06RitYV28G1G0/WM4jTPbMvbnGZC+Qx8EZkv54U3lDUw0daCs5D8gqYauh6u6/OgpiiR778YckSPZ0Y/eKupoNojRbP1IeOf/N7rsjHUhlEkd/99APf0TqjDXTkuz1TT6mh+XVWD+RtOosb7afzmRv+UymvgrLoUSQslnJXrwKucZVYbdlRX2tVzgt2Wq0ZKoPC6ygJgKxRHcnrZTW3isMgjUTOYlqJ8yByZ4irtiE8ZM9w0E3JnuRPCGtyUNTJqNUUV9eSCwNSEn2WvOjq+nnocme2MY58mSvZDHwfAwv6fREqSb/gpidhvrdrzuZaYULf0Ky58rjvOcPia+gfU72+pO9F9NAkCTLsKMo2auzHzEkNdc4xWO16JYnVw6ucPnDopOZlmQv2lu5iX5kvSTT6N1paTrZC5I9vckC/TQke832U5rsqScktIVcMNdY1XShJNmrnALK8ZyX7NXsg+qi0o8qT/YcXOHyh0Une9sme268QT5StkO2SEMLJn9VsmecBRbgpm2rMCy3OD7Z8+UJaUoemq9gijoajIRKzI/trJO9Q5O9HfXz0GRP3OhSv0xMRr3MdJyvESyfqOoU1+vNY35hbU5PZv4VTnOhFgPNfXOuAzd/Ei5TbIB9tkuUTVFXecGQmL6cphJChbl4c37pOpLn1TQkvmY9edye+iltnOwZvlypNhdOjuv3bRHe8T6aQ+LZTzgknvLakj1fs3zBz9sM9COs0FYBb9LdvIg3arTJJ1yOlzPxCq+kHz+M9eT51ORPPlW5PZPPjiZd/Wg1Mwx7b7Sf0mRP/dC7KBrMd+5KqXFl2Qu1ancVco1LkY8tqQ3JXmgi9pLQ7A+jh74VxMYVhZy0gijeWF/iPzITB2svOf6hPO8i1FPpJ+FWpc0He3ofuEb0tIx6Jy+J0+rVnD/t+Pp2LE+Elzxokdj3w2gY/VdMy1SbdCRmHbZiPa9Gv8mL6eepyd6aIH86zpP416rZyjSaVCwmC0VOuuVzNWZRZfF6Mk8D+dlMW6DvDzkJhyxkXT8dE6mF+iGjl9lzJdmj6tHWAu0hVbksmhUbkzIZsvJseQrkaRkSR7OBPEo37fs8bBlYxVTGy+pJ1qCxvcVEskpLg3aHxLaf8iHxCyoe26nX0qz21K3ZsVltMKwmTXkiF5O9I0ONYZrZkN1OP9SqeOPKR+pOSqFmHedePPloR6wQVmnQH5JgwOrtZ6lwmOYsDtFjGRYf03Ut/1AZNqEGtnixHGXt6LD84CnbRdJqDebXq3ClUbcwy3riOv2g5lJ/GDhLW55ovmfv1OyehfHGt15vThrBWhDiEjsxRKobzXDv0MNO9nylcxXOhqSmIWQ/12mGI8baHgy23xNZeFZGXy1nBFdeyGVvntkPs1oMt5795uYwzbqwxtontlEuqZ/nJnsXJ9g/rKjmpMEDgNB9KwjsCYYHbEZHHByABe0+PNqldAVo9Ydk4BDOTHfOB8neKWyU62FtBFfh0Uv//cHwgO3Yav3SKsaCdg/2y/gvQF/nGi+NgZ352VxPvcN1KL+W7OUnrVuofOv6AGgBdnhx7MtMAFwEGOkNKLksBsCFML92BY7k15I9AAAAAAAAAPgJkOwBAAAAAAAAwANBsgcAAAAAAAAADwTJHgAAAAAAAAA8ECR7AAAAAAAAAPBAkOwBAAAAAAAAwANBsgcAAAAAAAAADwTJHgCSNOJvGAEAQMw8DfjrWeBWYIUHPwaSvUvy/iuUWD9PA0sBAIXM04DJ8stcKNlb/36zYpLZH403xFXf6LXvpdInz5I0NkUs7ni5xIMZNXzocFxJP99Kn2yPQHBqsjdPw0WWiAtyjnJ2ajWN1/Ir15FndeatTv1wLOVlq8tdugI2II1ZNAF7BqeRxjWwnaeBjNc8DVnUq6Wn9A1eccey2LSo7rMS71Hre8oP01StJG+84qLL2xffbLqqfq4TBIFDQLJ3VZDs7cil5KE6v9AuuYGnPBoV4Xz0+chIAvYMToENpJ8D8FH3V76ufOLhyd6X6oy4arzcoq80XtvHvF7X08+lgiCwP/sme2Sblxsu3wGumQl5xaTYt94xZW2QCxlZsYrLklZPliqyF1SBrC7mz8eUzb95GsZkH8UTgep8SFbpME1Li8GQfBocpplfA6BqzEdACCr058gTYRuXqDbXbCTP8lyVI680e+H98TDN6/PyMeELMHXCZFiETPSWB7NGa0iEGoSs1pCEg8kXtLUvtv3IfkrVZw0PU8oV5uuHzMuJRzreQ1OewMUYKBai2t1t9LNWzyuFPfN+XmG8NrZnLqksY/pndjNNrHHRkrm8EQg5T5P5gjDbKPLt2bMwMyxjvPyV2B6vxceQ2gvXd0eeQvqOP/3xkm3VDd/6HvWkrVAAACAASURBVOk/K+SFFNF8X14xBbmafpDs/RgHnuzJbdHGbSZakXK8PU/DMKxXMuaU5u+b+T2OYWjcrRMCkJqc83a+YuTH9B9vnCd7zHOTJnhcUbHnwy5d8ZXfG5I0DkMmZEpJL2bHSJXylMKNy9OsL4/zBhs+2sZHN1mOW9oRqjxakCmSNkleTeMfN0NzSAL7CYak/CREvOvYj61ZJh758oOrH9pPfkvLe+iP9Mt0MT7UQrRq76Kf/CXtOhzs+VrjtY89swr8hUP45/x1u7SaZJUke0Zo/Y3T2bO3AN5WXceprt67YH7FJ43qeAWnQU6tRfPdoy+ZqSydD0fFpj2rwxtRbcCt+Z7LsVOyt71+kOz9GEde4xTGtdX1Bv6RvgsnCra7b9ITpTVzGs1sDzdw58byWKACr1rPaVSu2Vax8mSvZ8eUSkaHxK+zKdkLPmK6KXfOdMuVB5Nmk7KTfEPAGpLAfqIhKQ+Olf1z1X5czfrN1QyJENV6GA9+k9nG21030Y//Euz5auO1kz3nRC7XvTXpqaQpSAhtV0s+R2JRvHyHhvQuBDKG0YEuTXuy58ijHQpqyUOzCbWEYqtQwzQ3WonbqDprOu5xX00/SPZ+jH2TPe4ktkj2Cg6kLefKC1ZYu9OTINTgN4XKljg3uFEuH3k7Sm5X1B1OE+e3DBqTvUAeB2dIwoFtSfY01dCB9vauHbJK2BquLrJfHQURXI/9+EMSBMe6sXtFXc16FunqR8oj57/ZfXekA6lM4pj7Hvqhr2jJHuz5SuO1lz079SmdMVdfbRfW1XpAWWRM0yDlissogpVtk71gMMNkT3/anuwVzXeP1mSmK4Na6mioQjt9cE22Lz+6mn6Q7P0YOyZ7wjseebKnX5ugnyrbd2aTTk+UavIviNm+ts6d+zvZrVQtBvske648znv+kJxxstef7L2YBuq2vPlFnG3sRznOKD0JUR6rRbc8CXFwhcsfFp2ENJ03BHsrN9HPihYCw56vNl472XOOTB7DFeBTRN5c7ZGsODJmZiCbZcne5tc4GXwwT0j2XHn2KPHaJpMpj+R423mpEpM9PtnbUT9I9n6MHZM9cQNG/WUOcgJWZnyBP3N30vJzNX3rRtlL9Hvy3g6iL3z+JxcU8asCPEHIv09t50/Cbwif8NmkUvYLo8XAGxLTP9DQS6gwF2/Ovw4QyfNqGhJfs548bk/9lDZO9tSeqNXmwslxXU80hHXRPppD4tlPOCSe8tqCY1+zfBXO2wz0I6zQVgFv0t28iEMx8+SFDhl75S76IfVFZxKw59PHax97diqIF//Xp7OTu5qLJTOXR3Ha5vSa5RclxdxbK1RjiuZLeKpyo/nlr8TmeOWSJ/kdMrvWwvnuYJew7McZr0zE4GyXjWzQJK2cmVposuG3/LwmL6UfvTrwZHa9xkmuBYwpye+J5ufmFa6F3vPgU5QifN36efnk8XoyTwP52UxboGFK9FdXeM3MTS91rbXQqMToZfZcCcSoeqyFlD9UrkpZIzkmxe1l5fl2mi9Py5A4mg3kUbpp3wejoUQmvzJeVk+yBtlGRBbimQrKnwmDdofEtp/yIfELiuibY3qCyGzdmh2b1QbDatKUJ3Ix2Tsy2RummQ3ZXfWTN21MINizqbxn2DN7xemGuvh/XlL2vnJR5JJpJXvKkIis3tC5aFkRqj0ytpI9X+nGShyO11rxsPz2rxGRmMtlMNh+T6T6dPsJx2t9pzRKiZrkldv2wU027qSZ7F1SP0r3wcM59e/snUyXAyfVtG75AbAlcN+X5qHDU38GUF7zIxX2RJ69CvaZ+LN1c19+3L38ePd/jx9O9jbK9eDKwVWA+740Tx2erTyp4KkKex67mcAV6O3ccszyXBXdkf02qa7O98wQ9vhT/FqyF93kOLs+AFqAHV6c/F4N1tgQ2PP1sb66AMBVMS7RA/B8fi3ZAwAAAAAAAICfAMkeAAAAAAAAADwQJHsAAAAAAAAA8ECQ7AEAAAAAAADAA0GyBwAAAAAAAAAPBMkeAAAAAAAAADwQJHsAAAAAAAAA8ECQ7AEgSeND/gzPPA34G1hgH2BcXTzGyYBfATMegJuCZO+SvP/2J7zqaTwmDnvC6rz8JdxzhuT9x6PvYg5pPG68YVy9TV/KquZpUNWw/iVq+dB51muJS9V3NzEHS+UlxZqU015yKX7kcFxJP8ujB9sjeDCnJnvzNGDeWJyjnJ1aTeOloppLybOGSw3L2hlWkq2Hw5SOE6Bl0LbST2nb+WBuGxmU9WSeBiLo7YwrE3hMB07TM43rIqTxbxgGpoY05obD0tM0rvY9TwO3MG6M1fJcZkh2MMSPFx2naiURTedDEJOPX+fo7M1V9fOwSQ9+ByR7VwXJ3o5cTZ6P4uu1f7iV0K3dNB640XmHZO/Fg4TNtsKLemIcptzFuEgu0bip39z0ZTKLc3jrPlID6TJ7WYmOuw73LjQkO64X1TkX72KFjnk30nh9+72afh416cEvsW+yR/a5+cLAt8BrloW8YlLsW++Y1GN3ekhfcVnS6slSBdmRVgSyupg/J1vZ3wDNKEoEqvM+5GRmWloMhuTT4DDNa+PvolSN+QgIQYX+HHkibOMS1eaajeTxr3XllbKQ/u9vmOb1efWYfExWKZeJnB2lRVMoEMXoiTRovv7R/1OJHauM7Gf5v2nzesRF1JC/sJ2LGRNv2/Q/LxmdEA0ZWlfanNZixT3xcj3DuIxZ0mlchn4C4xICUq23GBc3JvPWoW5cZpMdxsUckO0MNd2ZHYv94fcN69FHea77dQPneZrEs56bqpYsD1m/1tJ9iWSaiovLZKasaa5aagNeiBPEY28hTKv81HAp/SDZAzflwJM96fcb5w2tyLg+MgyLU5lTWgKYpb33O21uRAhAalIEymXNe0zvGNCtbPZNIb7pzcPa4p6Q9Zpe0nmFQ5LGYciETCnpxXhQ4KwqvjylcOPyNOvL47zBho/dEHnrJosRKjqSB9kimRK5WNZoPIXMEN/sCTVo9qpv3ZFVWvbDDUYVWhsSVk5c2mlzMVR0NhMj/2Mne779kHLzNNT3xLA527iCWdJoXK5+XONy7lx1GBfvtjr5lQ/DJjeI+3xHpKwX4SxZ3rT2EtTOfz815PnG6Y6weh7Yc7Bt5t+PWr/6kpnK0rlZtP4ugK9ibcCNeGyVab9kb3v9INkDN+XIa5zCYzbNG6UQ/0hfYZR949ZdR9ITpTVzbeC7/L7X5OnLaCxNYV30Rc/Bh4uleeDVuFj2RANUMjokfp1NyV7wkfw+S3G/aDU1WWlbPO73RKZ34hRE2+QusUp7ypFXrTCvdkg2czGZDsJuMn2tdlBnP7FQyhuayZnGFdbYZFzBR5Fx0ZPGqoZsBebdNjolByducvdkT1vZollSVjFrJNujqkk+s9Zs1Tcf7amy3Gj90o4a1eShVUEta+cq1DDNWwVgweOuNf5q+kGyB27Kvsked3dbJHv6/n7B9p4sWLkgGj0JggJ+DaRwsfbWH+Vmib/r6nRFRrXBzqjaSsfOqC+PgzMk4cC2JHuR55c3/Qr7IoKCMDL1hQrfCHoiQ1pbWdlZTIlVenrPD6CMiFIZEq3NqpPPooayj0L/w4TKc+ggcnAv4jUme45xhZOgybgC/VQYV36U1mlca6vWS9rqEDW5S7Jnrxe0gGg8WGxN5CTySipuzc3ntk72nrN+rcWbFLTFLmnTVxGligOT7ZsnV9MPkj1wU3ZM9sRsO/JkT79RIlbHMjfi90SpJv+CmJ2Ghid71vqzob/hwp+wWLryOO/5Q3LGyV5bsqfZpZVBxoWL3ghP9sx43NkxKbFKtzufCkzFlQ2JWmcdm57sucKWXg/T21WKhCmindRLdjrZs4xLVfvnk27jej+03UvZ5s6r8o0Q6TQid6zPknixbZJHe4G3E51Hb3yNU9R/y/Wrp8Rrm0ymNY1iuio32Tauph8ke+Cm7JjsUYc5K7+tRqZk+XX38EfA7KMBdr1e/dtAcm/K78l7Z089TZjFjS5atfZNMyuo5MILEdXrUEoE4yovGBJz0aOpqFBhLt6cfx0pkufVNCS+Zj153J76IUGc7Kk9iYNj+csQZMMgmELqZHB74id7UtF5+4FVhofZ3i8cGEMi7Z5ZhqcfdUh4JcxVBP7Hjk6qprSS7IXOUgxAYFzBLGk0Llc/frInfgWFWF6XcaWR/OhNIHRRk23G5TQbrRfrS3yWxIvtIo+7yMqfqBDf6qQTg8qrraetB3tF8/0G61eAU8KwH+nitDeCkZ71714XmKy7taWarJ8ftX9n7wT9INkDt2XXa5zkeH9MyjdeZ/0bGlUVi1XOuZOSPR/U35k2/IfXk3kayM9m2gINU2K/9cBqXh6sn46J1EKXHKOX2XMl2aPq0WIJ7aFyqckayTEpDlz/nleBPC1D4mg2kEe7uyUSe/lg/dwaL70na3PfFxW5aKPGwsWfKTPBeU6zuewjZoivNA7TZCvWtsrIfta33IFWWmXPC/VjDolSbJhmal6m/2FPrFmpPebdVANdT3efSth2FqlLMS5/ljQal6Uf37jmaRgnx9Y7jUsN36rme7F+aOU1R03hevGtV9mdIr1XFtsgrJbmIkVyLVaXtD0ytn4jyx/ny61fBlGo8jLsR5t7pclM7EGqkz3fZAs6aVnlNfWDZA/cllP/zt7JNF0QUKvB7AcAnM9GPg0cRONty3vQaYyP1s19+fF458e7D+7LDyd7W8VFmP0AgIvQdZgCjuXRg9XbueUw7bkquiG/u520nPvBHsEd+bVkL7/NscWc3bo+AAAAjyVfMn40bAb3wvqSCgDgNvxasgcAAAAAAAAAPwGSPQAAAAAAAAB4IEj2AAAAAAAAAOCBINkDAAAAAAAAgAeCZA8AAAAAAAAAHgiSPQAAAAAAAAB4IEj2AAAAAAAAAOCB3DrZSyP+UBEAvwFm+6PAcAIAAACHgGTvgSx/tvcY7bybw99aPZ71j93+gPZ3ne3zNPygKznTfi7kvNc/cy7VsD7TpLUVmMYeneZ/xfrUqZ0LUj9caTxe/LfE9bI2qny1j1Y15TUUN/wp1N5NraU+q2tVfBd3UF725CoeD/wipyZ78zT8QJB6GmlscmctQxIVc0VpkdNlWQHG9Mp8bSbhTvJkS8+YNu+WSdOgYfJl0NAc9rNXoQuSJ5085c+TlXkaWKw2T0P+lGmja/tgnoZLRYZt8pzSi6acg0iaxorMoeplvXRd8TypqOsmyUtFm+0qIIIdONz3Ut7VpjT4OZDsPZefTfZknbyJPeQhRxWHuvafDtY3QInLYT+7FLoe3kCzZ8xMxNNR2FBzFnC1yPBGyV4LLDyfp6E4iehI9t6Zx/EmoorcoYJTuJ3ybjMZwFPZN9kj2yF84fzj1LhXc3+GVqxt179LZO99XioQ1tzpdyHH+NNIAwaz//ldg+9r76JhT5Ya/JtHrJsdQ/KO/HRB5D2XrFX74bJP2HYJwo7h9pJHBL+pcKTzuyGGpX3+b10pM+Jus8mekX6dYM/RteSs1WFKuTL8/di1P6Ji2M8+9uM7b9MFdzhvKrO24Z697maw8zRRJfBhUGLAxujOjAy5gZkOXB+vYUq56vLauGJJFZY8BU0G4yLhXfxWm523kxNwvWRVGsCum6axWNiOZK/vTHCPfKVNBcLnmW5LsSnNKkUvFTXdT3lI9sDJHHiyJ5e+DTaH/V30/KLNR4TRWa9JvUzY/IOqRZy0mcZswrMgU94Ter3SOAz5BYGU1orCnmi6YeXElyraT/Zy/6Zor+Uk5N17qr3ioHKHkxlfHke6eKTnaRiGdT9wTsm8WSaF0wYtbLJ18l3Lnnkr+VpcIM/3cyWYgP3sYz8ZvvPmTqTDeb/sqPFVmiPwczol2dPiu45DH2UH4o/b+ve/0gHzziyx9brDkuV3bH+kJFItbLIvvmVVfIeKJIDSyfQkAvneSQH+7kVUMMtba/W0cb4iqm7SoS+U8tSySvpcnQk3Ux6SPXAyR17jFGv77vGCv/1aG7Gl8e9vnIyQ0ZHA8A1K75Xdfauxgp6oXQg+ak/2vMCsOThu3h5wtxt3kyffz6Z7mNFIO3FhLo7e/xJL0mRtTeuvY8/eQJZpxZAJ9rOT/ViSFTzuct5OM1N+sjepfVJspCDZaz/aUyPD3Dq0I1E/0TLC5m/hzwOe+tnylDbpHLNSdGuizciMskiy4ibpyXgJc35lj2rPb5LebqhPBfbKV+pVUC6UYTP13bih8pDsgZPZN9nj7u6IZM+5OEAKiMYDYZdXakWm9bItVEF5UGn3xCysLj9RXFnYR5bcbZPslWSrJXVudjJTLE9+FFIw0p7e12dGa0rhuMnmyXche3Y7USLP570wiYT9bGc/eSPqYZE9WF3Ou0gG4zaEvhaEdyK2TfZeyrC8mzT8etFNzKX4mIyTMrVwZ5Nh5/U6lVBbftR6steV5lS3rZ6oVrS8S77Sq4ISO9ni8PeGykOyB05mx2RPbDYfcLLHV1d7g1peCorSk881qzwKqyfb/y3pvRtU6j1xC4e50sWSPd6zipO9XYJ1Wx4pmfdM4L/ylkg7O7AKx01uMPlep9tz5cme9d5h1zhhP1KsrMLQaTQ7b0cGP2Wz87U4TXSOWwMKIsNPaPl+qSDYdavMr8Vp1ZSen1X3QpfEDONlMtommSFrzS6BTkXbyqXcc/OVDVTAhPIHUylQzP2Uh2QPnMyOyR5dkTVbJ4uhuK5d2AiLF/L/6hNzngb+uxKxsHTN12/1aHOdB1jk/yL4q/uum94Tv7AI+FhAEg3JZ2s5ig1lske+2iW+V68/FEu7eY5bH6xvLY+opW6kg9A5jX/jZL6iFo6aDEb6JvYsAup8HGJ51D4pbcF+NrIf1gTz1vGpUJPzzuTR+pm9yzTBuiytYHnZUmFjdGetlkyctUP8qEPE2UGwuR7AFB9LxE1SsyiKdtVsQd59/H4gZFheqkr2eLX2O8pySM2nomnpG+R2jy1VnLzbuxRKpSUqcOVRhAoGM+yF12SoPFcFXrN+L/uUh2QPnMeu1zjJpZPv12nlXPdWmbgJNcb4++yyJPVKeNJ+CsEWli2E+rpoB8d/BNoue8z3qryiZk+0G1giRrBr9YdEc9hrhUw/Rqva+Ywh6TDNubhmyTJ5eByypTzzNIyTccGRq5WUFBZi3qMKbYu1ahuXfK5tiWiFLmjPrFHTv+iK/bylmyrsx6u1xX6YmpQjmbVGZb14VTtvJo+2yOSFjSE2dJBpQDfm1rNPO7lypOHyfh+r42wkFs5qqrVrNanXUBbqUrNaWhimmZ5ARrLYA+M0aAurWyNvtTKaz5tWdzbk56q0RcKqCnq/U6YCVR75Bt8SWpvKB7PIKt3My1eeqoIS5em93EZ5SPbAeZz6d/Y2oOqr+OBeXG1wryYP2IqOuLyqFdhPzqP1oZ0X1xRGZKjQdEMTHAbs1gSqASdz82TvmCANnMPVgsGryQM2oys0LwX2Q3i08+7rXPeNl4eCZO/SIKHRyCYzdAPO44bJnn+vDzwD/44G5AH3Avbzer3gvEEzfRcmwU7QS4wYFQAuyg2TPQAAAAAAAAAAEUj2AAAAAAAAAOCBINkDAAAAAAAAgAeCZA8AAAAAAAAAHgiSPQAAAAAAAAB4IEj2AAAAAAAAAOCBINkDknka8NeMAADgJNKI37FvBevXKcBkAbguSPauyPtv15znOLFY6qx/U+jR2ln+otVFlu5ied4v7jk2B81M0cxGlneBv2N+V+M62idfJXKmf0dN2p9nmeufxhNd6bXEpWqtllutX5mCa2Ru/vvyzl8+d8arUKSjTfYeyvs+usSEBr/KqcnePA23cck7YasgjfdyDe5g3q0zPk12227s2YI2TOm4OdMyaFYvaWy29KiqK0XyHOBTDjJmrZm+3s3TYMYhf39/Yzpwmt7SuJ7lxspwTS7PqviLafzLn/FIVzPGCjYfilPWr3ka6pOOt7kP01SbL39mxjipqg/G63rcTXm/6D3AhUCydy5I9m7Ikcke3aRu3pFsYct4XFZXXzuSvb7eycMUshXvbFrvwC2N61lurAzP5Jg+5mlc/yueiRi563DvCclep69q1p+aZ8fjdS3up7xf9B7gQuyb7GXbxiyO4JdDKndi84pJsW+9Y1K3eOmpf8mtr+/tnWn89uHTNgsu6uUJVPB2DdbdAFOzS63fD78fxI4murBD2swfuj0hpZi8HcLyuseJOn9TWGdI+J0QS/nGOtOmn7CLXtt2L4mZ0mskrFvmTRh9cSKdUS3PECmIx/Pi1j0Z9XNy8DlvoJ+INA7T7NiG3uRyDdC+90ZO2SqSPXNIeO2srKiNNtmivNIpZAxm8xQKjMv0z4E87pDsYVzMWwqlGc/CKW2vxB++BxdCOU5QzR958fc8Tdotz+bwVxmvu61fvcH/tvmKeEeOlymGY7KmP3wVzZLvQdzmmdMJykOyB07lwJM96dobN2doRcYNkWE94p9Tmr9vLu293ymN7vJFdImYv3W1yvN5ZJ/sDXlN+UUBKR+PuvmFmmo9Kws5b6MoA/pKYGm6XVgiEb3SEQprDwn35aUhd59+bJwLNXEvP0a0fJxSFsKwcEf7xo22hclibJlJtxy+MCvQbd2Qhx985tdpmvXjIVoxDZY/ezen+g0q3ZIZygpFW9GQrJ+L+hyf0qG8kilkBOvNU8gzrtA/2/LYQ7KXcQUykadiwzGc0nrJz+tmsmeF8sEaQVs0NilaT2eiyPkW69eYMvVWa2LHfKW5an9YtAH3Z4mV7N1ReUj2wKkceY1TGHtT/KsUUhx7yRZl8cbiKnj+r/WArk0eqzemdG5iyDeySZTS4GRYY3EvGxfLdmHt4esbklxW8yQlql9+1JjsvSXSgq0SKQp1ZB2zKNlB8JEfYhob5E0tGR+tK22ffhxkVG3WwRpkzWUVSWHVapU+lSnKNPg8lqfnkB3Ki6eQImPXFLKNq2yyFsmTDcluxuXL5D4umNJlFbsi/dlDa8wEz06aNVSZ7J2xftE0WcyxNP6N42htTRWwV76y8YEra1k5b21o7Y7KQ7IHTmXfZI+7uy2SPX1/391xtAqWzj432WuWJ3jkB3GxZrMLPI0nSvy8QFIY5geabhbWupsUC+tKuz6zLw4qS1aPforJzmIKehkEKZ9nlmRq/Ku16ScJRnXUmLWT0jitcUO4Xv2Y+F/Q4M2ykz3jLKY8ZZMJSDAk63uB/eWnHZ3KC6eQnqa3TyHbuAr8syWP89JuxuVKEHh9Z0pHJYvJa1aSPe3cuTBPqqMy2bvg+rXcF1rrGauUsUu+0rlDEU/rgs2qonbupzwke+BUdkz2lAsOx53slZzHFG8HbXCy15LsmV+xiTW7+J22Yz0pWDxU7Ytlv7CfOuxjEoH/yltcU5zCw4LaN2xJ1E9KKoyClDE5y15hAqLVWVBd/t+jTvYimcpwkj2+2ouQ00r2Nj3ZM6SO99rWT7qVF0yhssydsdVOwj4ne5FM9YhD89Dr61O6pGQp3vGhqDbIHAo2IEz6T/b8AlWtta1f0lmcna90n0UrHi7aY220xRsqD8keOJUdkz06nWblt96Isxd7NU7F3s76yzuq4N/v0XIkuf3kJnsd8rw8FdBvBhFfEmv2W/Oou7TPPm+wEItLSe4tJXcw83dn5ReTPWHVIZHy8MH1r1QFi38axS++UGnlky79mEMiXsybCXsZrC/zNAzTZL5iHC1JuZkxGr30IkOuUXUp1s9o+Pex/rbTj2l51nzXDvnKkj2uR907WWeg7pBorS3v2RdSN1CeM4WswWydQp5xhf7ZkMcfkk79FLhgVkGp15dTuqTkrH9nLz/tfdfEva55zifuLFsbkk1UJnsnrl9uJ8zvmX+lUMbE7BERxzEuawYUjJcnjywV+UOjHdGk+oavvGh+2coLetmqPCR74GR2vcZJTvDHxNOXF71dUuEo6dUAvpDZVzXy58M0l/iztcRny/Qv/03OT/lmeQwVzPKX+0TIH2j2pazMvM2qZE90xooX9MHMJLZct3nApNbIr4fozl4+LRiSlwhyrJLeYNfpx0z2vj8Eq9ZqN6ncW9ITgFCxvFX23LMSEjxlH9FJpfTEac99PqZl6mygH8Xy1grfdbGO0QaHKa3SsD7ziljZ4ft7n+xlXdxgSNa3uPMdJ+fH8jqNS5tC0WA2TaHYuEz/XCMPHZJe/dQnez1ev3gldnbb1G7kSuCpnqPX7yut53oNyd5p65eLpb68zQIHreSeiqDe0lcwXvXJnucPa1ywMdSe8qz5FTdq9LJXeUj2wMmc+nf2Tqby1sXt6HIuJfeUtgSeEIB9ebrDexqP9omdxtiQ7O3Ko8eqHKjBBroBp/LDyd7DQ5++1e5g5Ry9NAPwi3QdpoBjefRg9XZuOUwx765g/TqeR5tsO19jfXK8CS7PryV77pWUR8CuG1R0kpQ8RjntwgIAwMPI1yeEhnVg/ToFmCwAd+DXkj0AAAAAAAAA+AmQ7AEAAAAAAADAA0GyBwAAAAAAAAAPBMkeAAAAAAAAADwQJHsAAAAAAAAA8ECQ7AEAAAAAAADAA0GyBwAAAAAAAAAPBMkeAGBL5mn4zb84lZFG/M0pcLOZAKP9KQ7+w/MAgDN5VLL3/hOnN3Jg699k3SokeP+F0z0CjI1q3k9AQNneuCoaVpo8TZ4CNvccetx8ugrSeEHl787yZ5+PXhqMmXCaPAFXS/bmabB1pD7ste9lgpbr4aqDGXKUL/gq6G76AeBZnJrszdOwubtJ4/2cyrZ62EOrm9a8n4Axy9L8jrfX6Hv/tYg0fZyZNmnbEi/TF6GiBUueM63i9XoVe44bqyDfyueWzybGnpCm03HD3jLnzCHJ9JVT04Ilzx2XsD1I498wWIdPxsPO06r2GXi7QTtY4NvpB4CHgWTvAiDZOxLR/BHykE1zd8d6azZN9t7PWDpQt0V892Tv/eodxSVjQAAAIABJREFUVaBIzXp8gPOkh11pPPCUc9Nk76UkFpWZBpI9j7fHNHThPOw6sPqZZO/wK5w30w8Aj2PfZI9sf5LJru2P17jZrGa6O5zGYZrXp1UehhZjFw5zibUNxfXZVOvXnODPbDJ7NiYi67s2+lyvU1N5/pwfQH3lXN8p7Cg9RqDdJQJ96/teq5tGOhq2EZWrPEz2nMEkBi3i/UUOcXNFtEkUq6qAPiLHkGN6cWM1x9syLrMnypEFFcnJdEquKSryRM6gST8F0NMsFo54xuUlewXXuhpU4FheqQpkFBwme7mCJip0qzy8CaqLpvlVOhP0eNM0rnBIvGSvZCYo8kSTr9X/eLA2WRlzvQi1bi/+tAonmzPGzH3YdRm15CBXP422BHVV4Mwv76HjD9ljKxgxM2JtSJY77oZRRyGFrR8AwGEceLInnXDjPto8DXlNdHeYpmgV35An4vFLIqyeNPJ1j25Wb5HseU2SZ/M0cFmHgT63BOLqof0SB1CLnFXrKa2UpdBs1cnfXRSZyZG97g+JQ5Ds2YPJgjtNr2kchkxpKeVmaS6DzhgsDQ/D8vGc0qwWtexIfBj2pOhkz3zJndfVx1od+nGgfebf2QuMK1aBq8FqFcSWF6tAmbN+skcanaeB+p9WeXxv1DO/wpmgDUlkXEUne/ZL7kyoPdnr0U8pfkyurBeh1pc3VeWbSdDnUz0hth8qQtZgrsRmvLF+Gq2IXAXO/HIfBiZbEIw4x3rWkLwNK1uarQos7SPZA+BcjrzGKeZ7W7Lnuw25/hQ5GSlK7tDUJSdPArq/Fl6yeCwfKedEdqBqVKa0HA7HPA1jqk1mZdvkGMTu5fos/9e6b+wNSdgL8wN7MPXzGGcgZHl9hzzsSKFMZuwTii0+CpI9d79+42SvSz8msrXcU0RtxirYNNkrGMJQBdoLfrJn23KvPLr6+uZXwUwocxn6ZQajyeg8Y8tkr9f/FBH4UGWYI62XVcwasRcI9+H342YlFK7ECgVvsVdcMe2HgckW+MKWi65MHqcKw+SR7AFwLvsme/wmzBbJXlBIXsYqcjKuCzUOR9gZWLTw25TF4/nBmrdHH9TGbwoVLtafatwA1yhjS8Ptg4jkJnvhkFRIxD6wBlP/SYbyEzHa4regq4KCjtk7AHbhuCfXOdnr1Y/ZiZ75fvDJXoHllWzUVCZ7rF09122WJ6tq2b7pm1/hTJCFY+O60Mnehv7HRt2as2eep/Vg8TeRg0J3BFwFfCTeMNkrtGRV84EK3FuexsMik7WHqzwicrtHk73ARLQKAAAHs2OyJ8KLg072mpK9vp1+s2AZ3Sd7/NKHmQsqV0lqT/ZqD1JqT/aUgpuf7PEIye7OTL6GE/a6eFN+/aRA6pLkyexEU/xSlOx1yVv8ea9+SotUnuxFDe58slf/inqNM/gSmvFyhzzOPlXH/CJtOt9HqncZRcleW/ENTvaKqywmOH2ynYm8URMs/k3ylDxsOOfPy252slepAtenFC6ZkqrFzsFO9gpMRKkAAHAwOyZ71K3Myi8QEndYfj2Qe9E5v9IeJ3uffSh/mzuNfD+N+W3zCyxak5/NNic9lP7Ra1L8R+79qRc7mGji2wfccbMxIUdySmd0zdJK39KZysuk9ZM9Xz+ePOxVak3uYIomRABtx2niJ0eWFx0VrB84C/Q8Dd6PAqmFo57k/+XC75fs6c6gVz+6FbBKKua7/K/ealOyZ/jD0PIKMgFFaKpaWid/3fY/NfIIL5/X1Dy/8u7YM0ErHBmXt0Ttl+wZk69XP5Y/NCuI1ov1Ja71ePFf5HF12JDs9VxltVZiO96wZQlUUDW/vHiDyBcEI6HJOt/Z02dtkYnICgAAB7PrNU5yvP/+tpfzQ041G076VYX107djWdtnkZreXC7uwH/YmbZoP1Fr1pM99UYGXx/UJunDXNZFx1lnxEK1FkwsMWRjJh+86+KKrtHsmFg2yi6BjIk08Nk1/st/k3M9CrD148pj210wmOwxjY05JIUcJ+d2jaYCXRyzn0ocLwSyjUvWan6vqlg59JVIHm9Q+vRjWkFeePj+hK8ub6kKNDPIs9Z2FZjjVWYiH9ncqSnCda/SRnnS+P2JXbXaxvlFhDa2fMzOmMYlReK7A4XKoYUjebxB6dNPdbJXsF5867Ua+4qiLP5BsrdWYLt2XZjWcz1/G0ZVrDuYrgrc+RVMPttk/fUr1o02JHQxFot/kYkg2QPgZE79O3vX5kbuqWCPGQDw28BNgIAbLXoqnSZeclX2tpw6/e9uWADcHSR7JvdxTwjiAAAxXcce4PHc3T565V9OqbCebsb3GBIqBeBMkOwp0FuHZ0tjcAshAQAAXBf27YWzxQEAALA5SPYAAAAAAAAA4IEg2QMAAAAAAACAB4JkDwAAAAAAAAAeCJI9AAAAAAAAAHggSPYAAAAAAAAA4IEg2QMAAAAAAACAB4JkDwAAAAAAAAAeCJI9IJmnAX+7DwCXNOLPkjmk8UZ/tu1WwoKbgfUUAHAySPauyDwNp/6FWyxOOu9xefyfsV/+zPLd4t+34OvY7Dde+V+i3tsYeK8OqGmLJvfMnzZ3kLqwp8/3NJ7uae7qDISJnDiYl1pP52mwB7Pp4apZRb/zNPRYTuZolWqa/NQ8DbYxp3E3+8jVVKySb6F6mbySvlYjtluQyjlYeR8FqS3ZysueXGa6Z5ya7M3TcEWdHImtgrudG7iDebfO+DTZbbuxZ35umNJxc6Zl0KxeLm5wTK+sR9t3RRNgaz9D4hcZj+fr0pg2sf3tesBroitX9vTyzrlQrzwSbViNLVXsrSItTibxxIFu9ZbOQBP68na9Hx9Nj5OWf7U/jFTatWORRs8ymtIOr0o32e2gZXeqfUPRL5n3v6m/Ryd7hyqPrBeyzQLl+SZ7Ikj2zgXJ3g05Mtmjm8KH+pEt4ztZ3U4mcUCyF1i6PFq8arLHtrjpGn5551xhQCLcrIs/T0r2pJDk/HGvuNQS5obOAMmeinvY1vAwUmnP4d4OK97xyV4ae1aBdhVoJXkP03jxQ/uTlKdaQpHyfjTZI+k1UYq231qhn7xifmlg+VDZMsyaHVPRDsU3XJvGbx+0E94WeQIVvBeqtWJqU6Zml1q/H34/iKeLexuDt5k/dHtCSjF5O4TldY8TXXHsnR17SKh1vEzlG4tbm37CLnptO/tXuZl+X3tXxbrFe202rXRGtTxDJDe+M+15maPmdTJy8DlrY1M7Xp7y3k+t0Zunkassj3Rsfyi6Qs9t5mkYkzlQ/makqR+lG1l+4Tfp9sQcqngwXegtGWZP3j0fL9krEEWxn3BKt/gf0VsZp3kztMWeS12e4QyaXZ7nDGhZ6dQ9+3FNRFdipLzS8RIE62ng8swhcvTDWra91LHJXs81VjVyltZleyczTuNl1SsAwzTzmxq0mgIH1ptAbp/siclWVLurdf5QjwyGKfkrir56naE8M9kLlfejyR5Bfi2icZONVsT0//loGIZ1Fqc0f9/Md7WHoXDDacnfMwOg4UKTPJ9H9snekNfkXCZnmhWuteUeBReMuXnZy8aTvXZhiUTzNPzRwXWFtYeEL2el8UKffmwU2Yub/BrR8nFKWQrOYjMpnNZ1Vk4Y5Sab+dKes6kqjzrZwac0n6bxcpRn7klUjTH3h8qZINsVyZNG4hjsIXH0E5ymeE0GPVk+1gNDczA96AAx4Xg93CwXFdl99rRRfbLX4X9ymdU9Y/tIotWeS1ye9mGPyyt2BtxCHPvxTcQTaovxCghcg+IMQv+8yKr15+Bkzwjzv3jewyeOnNkb4n6CEKnlZI8fL9XmSHmWUxsGbJvsyRfav7dnVq08XYxk3XFW8nA1rT9FeXGWaSkPyd5L8ehN8a++zSr24mTFyr5ooZWvguf/WvfZ2uSxemNK5yaG3J2RVa9hMrPG4l42JnvtwtrD1zckuax6pwrqlx81JntvibSVtESKQh1Z2/aKHws+cuM7ti/omYSzeTGTo7LwEEcXqk95rEt5uFkxxvw4wykq4/Fsq8kZEk8/cbLnhZ92T/xPncH0kOrxzYB+VLATv2Wy1+d//BfywJrqscOeY5en6KfL5ZU7A1mnYT++iVSIrX1UvithELkG9wZHi3H6smya7FE0M2tXX2Wyp4ToooaWZI9ldyz3o9kum53Lw+9+U20qsFeyJ6+sbFa1okZr88XnPOUFyZ6jvB9N9vgk2CLZ088byGd6vVrgs0Gy1yxP8MgPYGLNrjFdq60LBykoDPMDTTcLa12EiYV1pV2fGWIrhTv1U0y2t1/QyyDJ/jyzJFPjO61NP+g0qpMJXaHm3PjO2rivH69i95DVHo2x00u/MV7xOk/cIXH1Eyd7RpNBT7ISerJnDKaL6w3DMT/4ZK/T/3xfiFzhnB1AddpzbBXqtkHQZKsz4DU7CWRmP2V7U43OoNt7q6moO4Vs/+zpp1CWHZM9w+sck+zpQ6lck61N9vJ0jyZ+ZV1gmWFN0rNLsteV6alVB/s31d3Oaj1DeV5LvvJ+MdkTE/zIk72S85jSQGOLk72WZE+5bb00GWh22V8r7mMgWDxU7clev7CfOkpj7vCVt7imOIU5Ru0btiTqJyUVRkn2mJwEuzB60uosqI7tXDj27OQHW57sRQJr7fP/BnsITi99gZzMyx0SVz+t+WWR/7E+bUz2/GObgpO9aLR3Ptmrf6XkZsf6SbczCFxe2ckeo8kZ8H77C5G786P2ps0ZbJ3slUwh3T8H+imU5eBk77BrnCXJQGOytyQe01iXJM3kKyZXSPa+yUqHSdOqZ+Va/TbJ3mnKM1sKlfeLyZ6yFWyfP71VVJt7fWspTCKJRPwWdvap/UsVSrLXIc/LUwG/w5z5y1iz35pHPcr5bCrWxHoyYErONwX5YObvsukbCqsOiZSHD64rbLREplH84guVVj7p0o85JNrV9rwWv5dxPD9MU9VhhzBuFrU4vXTjO8+evfwgie/LFn5nr115fEde7CAJu3xXE81a3n6uPSfz8ofE148yK8wdE+LwCvxPc7Knz3emV7nhazuDPZM923l3+R+1DuE4+Uzocga+y1MLd7g80xkwgxCBk2M/vokYFZT1JN6LqVxPS5dw4Z8j/eTyOEHHhsnePInf9FWy6dbotzLZk8PO8xA+j5TiNFQR6q5Pk5grt35XyNxnCZJT78ccVEcaHum58ihVa6lfZbJnNhkpr14FRSVVecuV92PJXjY13irl6cuLBk4V6qEnxtxrUkQ0s36uH4jRKtcSn122T5XENpvlMVSwOCgqb41mX7rbJW1WJXuiM6rXNwczk1ht1hbWTvY8vZrCFgzJS6xgVklvsOv0YyZ73x+CVWu1mxSXKswtvkixvFX23LMSuhisH9FJxesk9rw8WTImu+6/v+/vRw7T3DNeRcoz4z9ar1WtNmuTOtKm8pQ3FFlN/ShFs3TObdLriWM/8WC+zPlO9TpMM1WfqXQ2yqxaz9gj+3l5U7rT/3xk44vlOJHShU0W27O5+WmJ2+TyAmdA6vz+NgMzGMt+bBNpdgYl49W4eZoLUr6EO/phrwQLeEU/IyVQH6P03Y2OPaqTPU1aLxoxsyF1qI3txMJ+mBpSR1+be7qwxn6ZVlJ9ZMQAXjeF1kmAR35QRZ16RpO6nbjKq1aBX1KVVo3z3Z78XLJ3cXp80B0o/UqiSsHW86Z0CQvA4Rw9Q8Cv8fQF6pf4YW9RcK7uFq5O9vbDOC3+QS6b0ZzPZVXzw8new5fSvtXlYOX88FIIAAAqXXEyuA4PDzYcOnse3Qg6MrRuPtZ7HpdNaE4lM9Yr6ubXkj3/NP0J+NeWikse6T4fPiIAAAB+ixPW0x/B/NrMXjR+3ehZHK51sC2/luwBAAAAAAAAwE+AZA8AAAAAAAAAHgiSPQAAAAAAAAB4IEj2AAAAAAAAAOCBINkDAAAAAAAAgAeCZA8AAAAAAAAAHgiSPQAAAAAAAAB4IEj2gGSeBvwdFQAAuBtw3h1AeWcArQOwO0j2rsj7b3gO03xi+3C+kvVvqz5aO8tfTz3PAtt4C76OzcHjddC0Fc1sM17zNJw93redX2JITuzJhZx39reoDYnsN9Kol+o106VFtZYLKS9m/SvXNRqZp6HRU9gl44EOKz5a60crz7JnV3nLo9vYJLgupyZ78zT8uhHbKkjj2aFXHe5g3q0zPk12227s2WIwTOm4OdMyaFYvl6V1TK9d1zBNgCP9zEGWrjXT13Qa5WisAdHfmI6bw1vOLxbbf3u0Q1c0/fzwCjdPQza/tXCevrHyHqNhmhSL/DzvUOr2Q+JNjN0MII31RvyZC+NUnS+7JedpWEVJ4w0yk2OV59pzifJ+2IuADUGydy5I9m7IkckejZLs7cEd2DLZk9XtZBJI9ppQzkvSmAVE7TvabcJsOb/Yk72sAcmeC1dPrBozqes63HtEstfnZdr1p5XkXezLxQ/gLOVpiilSHrwI2IJ9k71sZ5iFCtlpRbZ53FQxKfatd0zq+QE9Mee3vjS+F3Sm8duHT9sscq2XJ1DB2yVZlw1MzYpbKt8PYg/FBeKKIW2y8MnuCSnF5O0Qltc9TtQjmsI6Q8LvU1jKN5xvm37CLnpt270kZkrPM1i3zFsk+qJIOqNaniGSm+yZ9rzMUfOuIjn4nCuSvSblRaRxmObGWfsW3zAQcspWkeyZ48VeUtTqmcON5peb7NGy4kHnkOg9cYYkWL9sAudtWV44JKZ+WNXB7BAGVhBx21lDz7U/w0F4yrPHq2hx0yqmNx2yDwrHuiv43zbZ46SpsO5Gk82eOf75exC3eea0bbIn3tGUh2QPbMGBJ3tkp/j1ejUbMa2InIMvHw3DekVkTmlZt/J7JcNQOG2XU/9sfzubua3yfB7ZJ3tDXpNzP4JpViyFLXttXDDm42QvG0/22oUlEolLQ76w9pBwX14awvXpx0aRvbjJrxEtH6eUBRvhaYeeULAETkb6/Sd70p6zqSqPOtnBZ7x9+q20VXkeVAQvKuX+8N2c6lSodEsaIiqsHy9HTMfh3Gt+lZ/scT10D4nWVjwkznpRRuBrlPlVNjNNO7GTPSOJeUto59GfoqVzp4LQDweHLXK8Gk/2eB/Kswi2D1ytiR2Tveaq60z285njn81k7zzlhZGNVTWSPbAFR17jFE6xyYiVQkpiUrKlU7xirILn/1oP6NrksXpjSucmhvwEgQQiDd4pjpDKYyh/PWwV1h6+viHJZTV35qP65UcdHjvb46S7CqEUhTrSh0f5NPzID26MPfCgZTZWuYlIeUruyhR+1BRRyizayWn5KQE7OstSRiUdKEn2yj4ye5rvvdtHZdpHV5pf8ojFnIisku4hUYQqGBJvi6CIyNfI9SIaksKKnRbFkdg4EnWGGxVMjlYN1SZ78Xi1XuMU21b5ZqU4FKRbmeOYO8FKXeyV7PXYba3Jvhr984nK85tqChIBKGffZI87rS2SvYILTHq9WmC4QbLXLE/wyF9kYs1+PUfjFXoZ9igUhvmBppuFtS56xMJGi/AiTulOW6d+isn2lQt6GSTZn2eWZLKwGoREeYBRnUzoCjWXrbZlWUHbeJW7B6+XNDRwZ63M/dYjpcKUrX68lrairuYnWTebX35WyGt2Av36IVFzwnBIul1F3Ky5EoteePqplIm5aGYwoxLMn5/sFYxX+3f21nlXk0LM4odt0liljF2Svc4dimqTbfTPJyqv2Z6R7IEt2DHZEwZ85MleyX5x8bTd4GSvJdnTr768SjS7rCPNrqn6XKo92esX9lOHve0uiBZhV5zCHKP2DVsS9ZOSCqMke0zOGlQY0Gp1FlTHdi4ce7aTvU1P9iKBy7CTvWjW2pnFpid7Gkqsobb5+eRm88txZcpVurJkb9OTvfKuFCJ7XLBeaEMS6KdSJnZK2pHsHXiNMx6vjh9o+Y5M3SanMp4nJ3udmd6rw2QbGrpYshcqD8ke2IIdkz1q27Pyc27EysVen1Oxs3n++cQ4quDf79FyJLl96SZ7HfK8PBXw7x9l61us2W/No+5fPptmnrqFzMJVed8U5IOZvyv31nxh1SGR8vDBdYWN/GcaxS++UGnlky79mEMiXsybCXsZrIfzNAzTZL5iHFVIuZkxGr20c5vAnp1kj/X4rcSSZK9bedYUsp1BNGvtzIIrWXddTeNlvSZnKVf7feaXnezJBKT0ZK9wSLSexEMSZcrhCZvIVwrWC21IIv1k8miHyt5JntCmLpFpILvdF9S2av3x8ha3MMRJ4x+5VljcCWcyRuu7k68ExmXtaMSXvCvjjRKTLfHPRvTjKa9FBUUlVXuOlYdkD2zDrtc4yQ2QMfH05bVMydr7IfRqCfcKFB6DZJ/rB2K0yrXEZwfuL/9Nzk/5ZnkMFczyl+CcXwFTNft5SVdqS7InOiNKu4Opf++sRFg72fP0agpbMCQvEatYJb3BrtOPmex9fwhWrdVuUrn3pqhX07p2Y06EfHatai/XMmN68UnF6yT2vDx5i8Aq4mXHtEydnvEqUJ42XmuFurB2L5lCeEVM2OH7e59UQ3pfovFaqheWNU5EQbTgTeaXOSSf0qTOYUqa9dQPSdQTc0hKlFef7JWtF9qQOPphdWtOnc5MVUztcTj72g9XXg3JnpSoanGLQhxV7QWsberpl/KgwLoM43JKarben+z5Jlvun42h9pRXr4KgpCNtifKQ7IFtOPXv7J1M15pxA9quOXw42sF0CQsA6KPuJhm4Ms+ODvsstSXZ25Nnj1UxUIMNdAO24IeTvYfnen0e4mDlwJ0BcC4P94c/xKNHsrdzy2GKUcvBysMm5+v1erjJtrMYK6Ij0M2vJXvRzZL7w24GVHSSlDxGOe3CAgAAeHOC834OJyiP3u37yUQHJgvAgfxasgcAAAAAAAAAPwGSPQAAAAAAAAB4IEj2AAAAAAAAAOCBINkDAAAAAAAAgAeCZA8AAAAAAAAAHgiSPQAAAAAAAAB4IEj2AAAAAAAAAOCBINkDknka8IdvAABgP9L4m39gbROgvDNAZADATUGyd0Xef270vLXsuS79/bdsH9C3s03kwRxjI2IA178x3NV0GvtFh3EdwtXylXkajFFPo2aW9A+Diz8O3muJS/VqLVdTnkf258NrNGKPR4Q+XsuT9j/kfkJk0Kg8WwUl7enKcZS3SPmA2AI8k1OTvXkafn1q2CpI423WstfrFQzmlTpzJavLFrJhmkn4VCCjp9Ws5q0XoLzqMW01tvsMS2OtB9mIprq+pudpWKq8pXFlQg7TvNU47ON/ruRJNiCNf8MwMEW9x2OYJiVzY1oV6siNsUmejQfNHa+9BnOehvo58plg41StQW+8XmlcRZmn4frZcpPyXBWErZlaL1HewzwCeBRI9s4Fyd7hXMvqNGlKtVXwXhqHad5S+/mSt+kREJK9DZpmhyk3My4WQm14wopkL+R9UmYqKj6m01K7rsO9JyR7nbW2p8ua5mVyfp1VWaNTec3GpyqmSHmP8gjgYeyb7JF7Hnyu8CsgNTMzr5gU+9Y7JvVknV4JKIkmvuHsNH778Gmb31iplidQwdu5WBcHTM0utX4//H4Q+3UuEFcMaZPFlHZP5F2fVZRWYb91rq+JsTaF/Thk63II7YuS1vDzkvBhwHcRyTYxybpCBOJG4JlIVpNSoSHsMiX0Y6B5GpX7K4a0fpukVt8Z2CqghkD/1+Ni5mkYU62JaNrjQ0LVWpHs2fZMX6KPIuNyam0zLtd+AuNKo3ZR0LCTYuPy/A+vVPekYxL/6zEuJhDTq2lcbCSkcdqLLa3CeiQHk70Q9E8t2nPZUqvQV17jEuU97FhPjS7UsG2yJyqfyt2hY+m2PwzjsY+kujp7lbdtsife0ZSHZA9clwNP9qTfb5watCLlRH2ehmFYz//nlObvm7mDl3dW7AazFXYJLLO8okmezyP7ZG/Ia6JHKlw+HqWQN1u8HheMOUDZy8aTvVZhlRrXj1xhP6NBlnpDOibce0jWD8iQuA8dvnpL4zCOw2dRzONjnk3kTfgmslbEleoJy2dGpp9gwgp18d2LrE3hDcy6XRXQRoUxdZzs/dEUuNR+qfa4yxHbE2XJXjj5LDFd4/JrbTYux37ch0Fs12VcpTkM72Re0WbrF23f6zQ3roKD2/VNK1NyU7L2ZE8vKWdkOWGw7x+2VC5R9sP29ZTvK7aswnslez2pkFNQG3An/nnZVtmtvB2TPatqJHvguhx5jVM476apoRRSEhNlLoqCxbuOq+D5v9Y93jZ5rN6Y0rmJIT/3o8lN/YLBGot72ZjstQr7bW49s1gF8IVVRsMUj9bkDklzLPg+0MiuxGXSuClt1GT+HyaLV9LRj98jX1jeJl8vrbqDWr8Sv8/etTSpMdnjJ4hWNXIasMOoLPFjdajGXuBP9I9UN+MYV1Brs3G588t56Mf2fcZl1V1gXGl8f4unMC+vJM5w7Unilq04FsnHpDnZszXcfLRXmex1LlHeQ3uJUs6N6QbJOK6Kq1+J90r2eg5c4x0/ZRga0q5u5e2V7Plbf0j2wEXZN9lbt2XUWxdNU0O/3MG3+JR6ZcH6r68oyV6zPMEjPw6JNZvd7mkMd/mWt7esdSR7jcK+bxTO0/BZEWje5QgbB7nWlRV3SAriRp00DssvUaRxmBLNSxWcyIymgk09cfRTHS1Rxbr5k1F3oIKsti2/Mc+LUWEdE1Hiy0oDUSSOJ9+3pKIX07iCWpuNy51fzsPIR/QYl1F3mXGt+0kFQlWiLUquMPY0DZYEE6kE49TY66uXJB6U7HUuUdHDlvVUeCXlGrzLLsleT6b30hQVmGzjPOlW3i7Jnq88JHvguuyY7InY48iTPaVebXU87GSvJdlTgo6lyTCW+Til5tWiZlM0fiNYt5uETeOY5u9VjzHRTNgRVmllKctduTjZs4YkeOgxT8M4ZdnUZMewjEAeVpQdhJglPf3UDjJtsyXZK8iY58+xi3Zxdvs0q95+AAANuElEQVRkzzcRJ9nb9GRPRQlEHOMKam02Ls9+gslXd1JVYVwVJ3vijb/PVpKaXW+c7AXGlX0kb3SW9bhOHiKZe1JkFGs71Akq1V/oXKLi6dCwnsrxPDvZ68z0Xto2cKHJ1tKrvO2TvVB5SPbAddkx2aNzbVb+eglZCay9ea1i7l0Kk0giURq1PczPJhUt7iZ7HfK8PBUk9usxmaOJNfutedT93Wcz11O3kFm4Tu+bgnww83e1jXJPWHVI3g+GIbvLydozhZ3Zl6UywdnQJfaneoTJsPzJfuj2JG+G90QYU65mx0RKDmYMYd/6oQZGzm3EF1isdIafh0XJnm4/rgqYPEK6yMUYQ2L3JDARJ9njwukOSHcW0eSzXvONy6212bhc+/GNSwkc82tc7cZl+h/fuKg8QueNxkVfYT7UNa71pUleNo2XhGT/QIsuj9lAaamu3KL2O3t9S1Q0mN4S5cpIfFXhkvCyS2TieIOpjhfTh75HHJksnYglJuunQI5V9inPNtlAebrWY+Uh2QNXZtdrnOR4f0w8fHgtsy50MF7FYpVz7qRkzwf1d6aF/1hLfPZT//Lf5FwPhNrkMVSw5CNU3hrNvpZNaYWWZE90Rtvotgczk9jy64awpkunWRp7wRB20VQmD98hzwolkhh+vvqkq8B96PaERBayJ+ySTB64GyaSfUTeXj/yhJ2ngfwSpX6tTe+m9YjOouy/PNzSm9RVkH3+rob9N6rVGpK1NVVYx0QsedjEXt7J5q3iKTxPUhyS+8Zl1NplXK79hMZlutJO47L9j2FcZq2WuygzLvGKzB8zQan/yev1HKy1JPjJ3lqBoTezo26u1x78Vid7nUtUFIzYS5SLnDCsTuVBHDdYS7gzXsqj/mTPN9mC+Me3yhblxSZrKM+TtkR5SPbAlTn17+ydjL1t9gwab/K8OdptdQl7EFv9IsL5eMJiwboxF/Bprv3AuCi38hq1dBpjQ7K3K48eq3IwhW2gG3BdfjjZu0BctCd9fudg5dzDSSLZA5en6zBlC5DslXP6YO1Jb+eWwxSjlmOVB8t98/CwqZXlVBBGAi7KryV7+Wn8M6clu4tQ0UnvdtVOtAt7NOwCXsXDq+EK+/z5AfbEtR8Y1+tFtXB5Z3E1jlfefZao/TghMgAAbMuvJXsAAAAAAAAA8BMg2QMAAAAAAACAB4JkDwAAAAAAAAAeCJI9AAAAAAAAAHggSPYAAAAAAAAA4IEg2QMAAAAAAACAB4JkD0jmacAvLAPwE2C2A3BFTpmZcAcdQHlnAK0XgWTvirz/rs15f4Tp8pPn/eeWdheRN7P+vaFLa+dnufp4ufKcJuxhs/0gtyaaWf44W1fT+GvS7YghudXM3MZ+GqX65WRv/auKiuazP/5XM2a903hpVq3lQsqLcdVrMk9D40ywS/pjWVTx0Vo/WnlptJTjKG95NKbXycnePA23mRg7YasgjfcKLdzB3KEzBxmP1szBdpv/SdsxbaXLfTph1bq4xjG9uA/aXYDtu9o3JK482wt7KU9ykDBaM31Np9H9K/HDNG81cvuoyJCOxa7fHu0ggdatPYy9Z0iOXcQQ/3ikcV0f5mkgJjlPQ7Z4iFg/jevbctS0mVzOsf55NxNJY/0k//iKcarOl92SZHDzUb8sxyrv7dKGadLstkR5XyNCsncuSPZ2aW/fZo60Wzp/NzwbOTbZewkb2Mm+Dxiv7iFBsndKMz1Ny/MAFn9ueNfg0GRPPtnLu+2f7PUPCZK9y8C07R/IkZe5WtPItNx1uPeIZK/PlNv1p5WUw3XxbO8s5WmKKVLeMclets3G4qF8a7zhADevmBT71jsm9fyAnniWrAbfWG4av334tM0i13p5AhW8Tco6LDY1K24ZfD+ILYwLxBVD2mThgd0TUorJ2yHs24LNE2xTP8uYe/c8soIVyYOpnxexmZrN83kaFd+oXodSbkm9xZcCRZOPPFftXDsGiGp1k737jFc4JLYzCORpFZY9Hqa0VOFNvld4ma7JuALSOExzo1dzm8zKGmet+iJtGzt9iT0SESRfaA3l+fYcjFeBC9ZOzoOZ6SZ7tKx40DkkurE7Q+Kt761DEsqzVNZgP/QOwFJFuQv2L0r8sZhh0bXbTb3npjAve2byBVjMbNN+WNWRoPM0eS6TTiLuVbQlozWhMBYYT3nxeqoptyyq+n7y/aCkW70Z5LbJHidNhXU3mmz2zInHvgdxZubUyrbJnnhHU94JJ3v52ToVoqsifsL//mgY1nP+OaXF7+RH/8NQqPbl1HZeb9xmmm+V5/PIPtkb8pqc822mWe1WQ7WeuWDMRmUvGzdFm4VlJyrSukiVTPZs6KkAVMvGboDh7339fEd0+TilsJvBBGG6Yxbybk43Uq9uNgDc7vJG5aK5ycnelccr8lmhM4jqqBdWO9BwsuyyJvuMy4YOkRd18UqdJqkGmGfIK1A+c409q5HvBrgddpXn2bNXd2Sy9PJa+WLrJntet/qHRGsrHhJ9Pe0ZEk+erEit/Sh3ANgIBkud+obrYiLjKiIQTPHPZZ5dFack2TOCAj3Dkcmetg3RGHHHg8ZfCO258WSP96E8i2DnCNWa2DHZa666zmQ/nznxmJnsnae8MDK2qj4h2ZNG3ZTsKYWUxKTEkRfP+FXw/F/rtmmbPFZvTOncxJC7N7LQNlhXHAGUxwi+P2sUVi4x9lSgzbPhyCsqu+BfMOTaR/UrjD9BFKXmH7HmeEesuoNaP0U/Z91FedUqgLGHGchwqfHyh6Sxpa4qwlyuKdnrMy5PGL514OT8Zi5DK5Lyq9UWWLb+kWIJvk79ah179uouNNm/carcYZjFEYI5lqyS7iFRhCr0P1YUZlE20rWLmPtRdVpQ9EbwUWRcRcQ7WrbFVu9khYTrpjDDMNlrTII/RatGNbaa1mucYtuTGIF9KjhPwzCO+SJaqYu9kr2OUak22Vdjxn+i8vymCpKMfZM9bnRbJHsFF3T0erXAcINkr1me4FEcMPiaXS+3NE0guawrFG9TuppuE9bfQPP0I7NUZ3nWuqWGKJF+ys3Nb7xYMhkrlyR76jqh39DSeuMme84Sd5vxqs6/lc9qh9UVNnaiLclep3EVC0OXPter2U0Wp2zKQJQYe22yFyjPtme37hKT/XTJmNhlG46B53cC2fohUXPCcEhK1/egSO02TK39tJ2oR28Elh0ZVxHxsJiRnBDPs58CyiJy0s34GueByV6BPbd/Z29VTs04SxehXIAOKtg+2evJ9F4NJtsSj71OVZ6zyPrKOyDZEwIcebKn1Cs+LVb7Bid7LcmecntlaTLQ7OIHmk3LjwDiAlwaV4oWYZ1kL9CPsx5ueVIkaHAuPTvNbclegZTz5+RAuwnVlOzdarxqM7XaxquFPelkb/NkL/JqdpPqQl+S7JVOSWUtdUuGG3UtyV6ByX5m5HeCFhZ3XL1yVaws2SscksJkJi4VljzsZK+wsqIXGvzJHsleWbyhreCB/UQUn72QdgtClwOvccb23J7sLSNTt6OvjOfJyV5npvfqMNmGhi6W7IXKOyDZU45a7PMn+6xAq9jZHP58YsSx/Ps9Wo4kt5/cZK9DnpenAv79o8w/xZr91jzq9vHZ9PDULWQWpuZ9U5APZv6u3BvxhVWHxE32Av1466H8PkTpXcVIP3FkoA6J4luWlxwVyOaUZE8fL2G/5E0qj5DOsQI7dr/ZeHlDEjsDS552Ybk8fIJFk09vssu4bHu29RN5NadJpgHdtavj6Ru7/dpLDWTNXIf0LU72jPHyTZbKI6zZnpl2cMxES8G3QeuHRLO8eEjM+dM8JGHN7xK19sPlYctiHP8YzsBxMXGyZ6ynTrNF8UYa/8ZJ7nK79pPJo1ZIC5N0jn9LmalkzKaFERs15hbVKXxoz55/Dk0kjX/kWmFxJ4jjKHTeVo+IOJ5xWcsh67KyQFXGqyUmWxKPGdGzp7wWFRSVtDxWoLxDkr1F+O/BNU9fXotKa8/36dUAPqoU4f3Xz/UDMVrlWuKzg/KX/ybnp3yzPIYK5u/32am8NZp9Lfu8Ci3JnuiMmpeYg5lJrDZrC6tNgbW2MZGWtQEh+lmevN9kFfGy39/7HKZZHUxvsNlqZJfLC2u6ofVa9kweUauV+gnGi8krVcOUF9ZqjtfnjbuNlzMkVc6AT/kWYeXTwslX12SbcRnWqg+mbQVxk7mww/f3PqkFGeqzjJ2gL9HmUNvKi+3ZHC85ZErv9fklCkuz06c0aXCYkja76ocksjxzSOL1tGFIAnn67Ic8LV0y6/SzPqgxropkryzeYBmY0hNiP6xuIyW1lM7dPu/B+lSZtk68HVOd7MnOVAVHUYisqr0AT0NGMFIQzdo781ZJzdb7kz3fZMvjMWOoPeXVqyAo6UhboryDkr2L0zXnb0DbMfWH0KdtTJewAACwJ+q+KgAP5OjF/1j6ZnJLsrcnzx6rYqAGGyR7T8/1+qz/YOVgqgIArszD1wsAPjza0ns7txymGLUcrDxskr9er4ebbDuLsf5ksucf/j8BdrJb0UlS8hjltAsLAAAAgH5OWPyfwwnKo3f7fjLRgclW8mvJHgAAAAAAAAD8BEj2AAAAAAAAAOCBINkDAAAAAAAAgAeCZA8AAAAAAAAAHgiSPQAAAAAAAAB4IEj2AAAAAAAAAOCBINkDAAAAAAAAgAeCZA8AAAAAAAAAHsg/yxFQBbTW4i8AAAAASUVORK5CYII=" alt="" width="889" height="211" />
启用包数据显示的方式,一个是通过配置文件,二个是通过API分别如下:
配置文件:
<configuration packagingData="true">
...
</configuration>
LoggerContext中的setPackagingDataEnabled(true)方法:
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.setPackagingDataEnabled(true);
九:查看状态消息
Logback 把内部数据放在一个 StatusManager 对象里,并通过 LoggerContext 访问。
StatusManager 通过 logback 上下文来访问所有数据对象。 为把内存占用保持在合理的范
围内,默认的 StatusManager 实现将状态消息按头和尾两部分存储。头部存储开始的 H 条状
态消息,尾部存储后面的 T 条消息。现在的 H=T=150,将来或许会改变。
Logback-classic 带了一个叫 ViewStatusMessagesServlet 的 Servlet, 它以 HTML 表格的格
式打印与当前 LoggerContext 关联的 StatusManager 的内容。示例如下。
要加到自己的 web 应用程序里,可以在 WEB-INF/web.xml 里添加如下内容
<servlet>
<servlet-name>ViewStatusMessages</servlet-name>
<servlet-class>ch.qos.logback.classic.ViewStatusMessagesServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>ViewStatusMessages</servlet-name>
<url-pattern>/lbClassicStatus</url-pattern>
</servlet-mapping>
访问地址是 http://host/yourWebapp/lbClassicStatus
十:监听状态消息
你也可以为 StatusManager 附加一个 StatusListener, 这样就能立即对状态消息作出响应,
尤其对那些 logback 配置完成之后的消息。注册一个状态监听器可以方便地实现对 logback
内部状态的无人监管。
Logback 带了一个叫 OnConsoleStatusListener 的 StatusListener 实现,可以把状态消息打
印到控制台。
下例演示了如何为 StautsManager 注册一个 OnConsoleStatusListener 实例。
package package01;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.status.OnConsoleStatusListener;
import ch.qos.logback.core.status.StatusManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by Administrator on 2016/7/15.
*/
public class MyApp1 {
final static Logger logger= LoggerFactory.getLogger(MyApp1.class);
public static void main(String[] args) {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusManager manager=lc.getStatusManager();
OnConsoleStatusListener listener=new OnConsoleStatusListener();
manager.add(listener);
// print logback's internal status
//StatusPrinter.print(lc);
logger.info("Entering application."); Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
}
}
还可以通过设置 Java 系统属性“logback.statusListenerClass”注册状态监听器,例如,
java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener ..
十一.终止logback-classic
为了释放logback-classic所用的资源,终止logback context是一个很好我办法.终止context会将所有context定义的依赖于loggers的appenders给关闭掉,而且还停止所有的活动的线程
import org.sflf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
... // assume SLF4J is bound to logback-classic in the current environment
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.stop();
如果是在web应用中,上面的代码可以用ServletContextListener
中的contextDestroyed的方法的执行.
也可以通过Shutdown hook来终止
使用一个JVM的shutdown hook是一个便捷的方法来关掉logback
<configuration debug="true">
<!-- in the absence of the class attribute, assume
ch.qos.logback.core.hook.DelayingShutdownHook -->
<shutdownHook/>
....
</configuration>
提示:查看API文档可以发现.通过public void setDelay(Duration delay)--------> public Duration(long millis)来设置关闭的延迟时间
十二.配置文件语法
到目前为止,正如你已经在这份手册里看到的不少例子,logback 允许你重新定义记录
行为而不必重新编译你的代码。实际上,你可以轻易地配置 logback,比如禁用程序里某些
地方的记录功能,或者直接输出到一个 UNIX 系统守护进程、数据库、日志查看器,或把记
录事件发送到远程 logback 服务器,远程 logback 服务器按照其本地策略进行记录,比如把
记录时间发送到第二个 logback 服务器。
本节剩余部分介绍配置文件的语法。
Logback 配置文件的语法非常灵活。正因为灵活,所以无法用 DTD 或 XML schema 进
行定义。尽管如此,可以这样描述配置文件的基本结构:以<configuration>开头,后面有零
个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素。如下图所
示:
aaarticlea/png;base64,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" alt="" />
标记名大小写敏感性
从 logback 0.9.17 版起, 标记名不区分大小些。 比如, <logger>、 <Logger>和<LOGGER>
都是合法元素且表示同一个意思。 按照隐式规则, 标记名除了首字母外要区分大小写。 因此,
<xyz>与<Xyz>等价,但不等价于<xYz>。隐式规则一般遵循 Java 世界里常用的驼峰命名规
则。因为很难确定一个标记什么时候与显式动作相关,什么时候又与隐式动作相关,所以很
难说 XML 标记是否是大小写敏感。如果你不确定标记名的大小写,就用驼峰命名法,基本
不会错。
配置 logger ,或<logger>
Logger 是用<logger>元素配置的。<logger>元素有且仅有一个 name 属性、一个可选的
level 属性和一个可选的 additivity 属性。
Level 属性的值大小写无关,其值为下面其中一个字符串:TRACE、DEBUG、INFO、
WARN、ERROR、ALL 和 OFF。还可以是一个特殊的字符串“INHERITED”或其同义词
“NULL” ,表示强制继承上级的级别。
<logger>元素可以包含零个或多个<appender-ref>元素,表示这个 appender 会被添加到
该 logger。强调一下,每个用<logger>元素声明的 logger,首先会移除所有 appender,然后
才添加引用了的 appender, 所以如果 logger 没有引用任何 appender, 就会失去所有 appender。
配置根 logger ,或<root> 元素
<root>元素配置根 logger。该元素有一个 level 属性。没有 name 属性,因为已经被命名
为“ROOT” 。
Level 属性的值大小写无关,其值为下面其中一个字符串:TRACE、DEBUG、INFO、
WARN、ERROR、ALL 和 OFF。注意不能设置为“INHERITED” 或“NULL” 。
<logger>元素可以包含零个或多个<appender-ref>元素。 与<logger>元素类似, 声明<root>
元素后,会先关闭然后移除全部当前 appender,只引用声明了的 appender。如果 root 元素没
有引用任何 appender,就会失去所有 appender。
示例一:
假设我们不想看到“package01”包里的任何组件的任何 DEBUG 信息,可以
设置如下:
示例:设置 logger 级别
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<!--
encoders are assigned by default the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder
-->
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="package01" level="INFO" />
<!-- Strictly speaking, the level attribute is not necessary since
-->
<!-- the level of the root level is set to DEBUG by default. -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
package package01; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Created by Administrator on 2016/7/15.
*/
public class MyApp1 {
final static Logger logger= LoggerFactory.getLogger(MyApp1.class); public static void main(String[] args) {
logger.info("Entering application.");
Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
} }
运行结果:
aaarticlea/png;base64,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" alt="" />
你 可 以为 任意 数 量的 logger 设 置级 别。 下面 的 配置 文件 里, 我 们为 logger
“package01”设置级别为 INFO,同时设置 logger“package01.Foo”
级别为 DEBUG。
示例二:
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned by default the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="package01" level="INFO" />
<logger name="package01.Foo" level="DEBUG" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
package package01; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Created by Administrator on 2016/7/15.
*/
public class MyApp1 {
final static Logger logger= LoggerFactory.getLogger(MyApp1.class); public static void main(String[] args) {
logger.info("Entering application.");
Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
} }
运行结果:
aaarticlea/png;base64,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" alt="" />
注意, 基本选择规则依赖于被调用的logger的有效级别, 而不是 appender所关联的 logger
的级别。 Logback 首先判断记录语句是否被启用, 如果启用, 则调用logger 等级里的 appender,
无视 logger 的级别。配置文件 sample4.xml 演示了这一点。
示例三:
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned by default the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="package01" level="INFO" /> <root level="OFF">
<appender-ref ref="STDOUT" />
</root>
</configuration>
package package01; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Created by Administrator on 2016/7/15.
*/
public class MyApp1 {
final static Logger logger= LoggerFactory.getLogger(MyApp1.class); public static void main(String[] args) {
logger.info("Entering application.");
Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
} }
运行结果:
aaarticlea/png;base64,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" alt="" />
十三.配置 Appender
Appender 用<appender>元素配置,该元素必要属性 name 和 class。
name 属性指定 appender 的名称,class 属性指定 appender 类的全限定名。
<appender>元素可以包含零个或多个<layout>元素、零个或多个<encoder>元素和零个或
多个<filter>元素。 除了这三个常用元素之外, 还可以包含 appender 类的任意数量的 javabean
属性。下图演示了常用结构,注意对 javabean 属性的支持在图中不可见。
aaarticlea/png;base64,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" alt="" />
<layout>元素的 class 属性是必要的,表示将被实例化的 layout 类的全限定名。和
<appender>元素一样, <layout>元素可以包含 layout 的的 javabean 属性。因为太常用了,所
以当当 layout 是 PatternLayout 时,可以省略 class 属性。
<encoder>元素 class 属性是必要的,表示将被实例化的 encoder 类的全限定名。因为太
常用了,所以当当 encoder 是 PatternLayoutEncoder 时,可以省略 class 属性。
记录输出到多个 appender 很简单,先定义各种 appender,然后在 logger 里进行引用,
就行了。如下面的配置文件所示:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
<!--
encoders are assigned by default the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder
-->
<encoder>
<pattern>%date %level [%thread] %logger{10}
[%file:%line] %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
该配置文件定义了两个 appender,分别是“FILE”和“STDOUT” 。
“ FILE” 这 个 appender 把 记 录 输 出 到 文 件 “ myapp.log ” , 它 的 encoder 是
PatternLayoutEncoder,输出了日期、级别、线程名、logger 名、文件名及记录请求的行号、
消息和行分隔符。
“STDOUT”这个 appender 把记录输出到控制台,它的 encoder 只是输出消息和行分隔
符。
注意每个 appender 都有自己的 encoder。Encoder 通常不能被多个 appender 共享,layout
也是。所以,logback 的配置文件里没有共享 encoder 或 layout 的语法。
Appender累积
默认情况下,appender 是可累积的:logger 会把记录输出到它自身的 appender 和它所有
祖先的 appender。因此,把同一 appender 关联到多个 logger 会导致重复输出。
示例:重复的 appender
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="package01">
<appender-ref ref="STDOUT" />
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
执行代码:
package package01; import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Created by Administrator on 2016/7/15.
*/
public class MyApp1 {
final static Logger logger= LoggerFactory.getLogger(MyApp1.class); public static void main(String[] args) {
// assume SLF4J is bound to logback in the current environment
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
// print logback's internal status
StatusPrinter.print(lc); logger.info("Entering application.");
Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
} }
运行结果:
aaarticlea/png;base64,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" alt="" />
看到重复输出了吧?名为 STDOUT 的 appender 被关联给两个 logger,分别是根和
package01。由于根 logger 是所有 logger 的祖先,package01 是
package01.MyApp1 和 package01.Foo 之父,所以这两个 logger 的记录
请求会被输出两次。一次是因为 STDOUT 被关联到 package01,一次是因为被关
联到根 logger。
Appender 的叠加性对新手来说并不是陷阱,反而是非常方便的。举例来说,你可以让
某些系统里所有 logger 的记录信息出现在控制台,却让某些特定 logger 的记录信息发到一
个特定的 appender。
示例:重复的 appender
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
<!--
encoders are assigned by default the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder
-->
<encoder>
<pattern>%date %level [%thread] %logger{10}
[%file:%line] %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<logger name="package01">
<appender-ref ref="FILE" />
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
package package01; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Created by Administrator on 2016/7/15.
*/
public class MyApp1 {
final static Logger logger= LoggerFactory.getLogger(MyApp1.class); public static void main(String[] args) {
logger.info("Entering application.");
Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
} }
本例中,控制台 appender 会输出所有消息(出自系统里的所有 logger) ,但是只有来自
package01 这个 logger 的消息会输出到文件 myApp.log。
覆盖默认的累积行为
如果你觉得默认的累积行为不合适, 可以设置叠加性标识为 false 以关闭它。 这样的话,
logger 树里的某个分支可以输出到与其他 logger 不同的 appender
示例:叠加性标识
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>foo.log</file>
<encoder>
<Pattern>
%date %level [%thread] %logger{10} [%file : %line] %msg%n
</Pattern>
</encoder>
</appender>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%msg%n</Pattern>
</encoder>
</appender>
<logger name="package01.Foo" additivity="false">
<appender-ref ref="FILE" />
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
本例中,logger“package01.Foo”关联 appender“FILE” ,它的叠加性标记为
false,这样它的记录输出仅会被发送到 appender“FILE” ,不会被发送到更高 logger 等级关
联的 appender。其他 logger 不受此影响。
用 additivityFlag.xml 配 置 MyApp1 , 运 行 后 , 控 制 台 上 由 输 出 由
“package01.MyApp1”产生的记录。而 logger“ package01.Foo”将且
仅仅将输出到文件 foo.log。
设置上下文名称
每个 logger 都关联到 logger 上下文。默认情况下,logger 上下文名为“default” 。但是
你可以借助配置指令<contextName>设置成其他名字。注意一旦设置 logger 上下文名称后,
不能再改。设置上下文名称后,可以方便地区分来自不同应用程序的记录。
<configuration>
<contextName>myAppName</contextName>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d %contextName [%t] %level %logger{36}
- %msg%n</Pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
本例演示了 logger 上下文的命名方法:在 layout 模式里添加“%contextName”就会输
出上下文的名称。
变量替换
原则上,指定变量的地方就能够发生变量替换。变量替换的语法与 Unix shell 中的变量
替换相似。位于“${”与“}”之间的字符串是键(key) ,取代键的值可以在同一配置文件
里指定, 也可以在外部文件或通过系统属性进行指定。 例如, 如果设系统属性 “java.home.dir”
为“/home/xyz” ,那么每次当${java.home.dir}出现时都会被解释为“/home/xyz” 。Logback
自动定义了一个常用变量“${HOSTNAME}” 。
属性被插入 logger 上下文
注意通过<property>元素定义的值实际上会被插入 logger 上下文。换句话说,这些值变
成了 logger 上下文的属性。所以,它们对所有记录事件都可用,包括通过序列化方式被发
送到远程主机的记录事件。
下面的例子在配置文件的开头声明了一个变量又名替换属性,它代表输出文件的位置,
然后在后面的配置文件里使用它。
示例:简单变量替换
<configuration>
<property name="USER_HOME" value="/home/sebastien" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
下一个例子用系统属性实现了同样的功能。属性没有在配置文件里声明,因此 logback
会从系统属性里找。Java 系统属性用下面的命令行进行设置:
java -DUSER_HOME="/home/sebastien" MyApp2
示例:系统变量替换
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
当需要很多变量时,更方便的做法是在一个单独的文件里声明所有变量,如下例所示。
示例:文件变量替换
<configuration>
<property
file="src/main/java/chapters/configuration/variables1.properties" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
这个配置文件包含对文件“variables1.properties”的引用,该文件里的变量会被读入
logback 配置文件的上下文里。
文件“variables1.properties”内容类似于:
示例:变量文件
USER_HOME=/home/sebastien
还可以不引用文件,而是引用 class path 上的资源
<configuration>
<property resource="resource1.properties" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
嵌套变量替换
Logback 支持嵌套变量替换。这里的嵌套是指变量的值里包含对其他变量的引用。假设
你希望用变量指定目的地目录和文件名,然后用一个变量“destination”组合这两个变量,
如下面所示。
示例:嵌套变量替换variables2.properties
USER_HOME=/home/sebastien
fileName=myApp.log
destination=${USER_HOME}/${fileName}
注意在上面的属性文件里, “destination” 由另外两个变量 “USER_HOME” 和 “fileName”
组合而成。
<configuration>
<property
file="src/main/java/chapters/configuration/variables2.properties" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${destination} </file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
变量的默认替换值
在某些特定情况下,最好给变量一个默认值,以免变量未被声明或值为 null。Bash shell
用“:-”指定默认值。例如,假设“aKey”未被声明,那么“${aKey:-golden}”将被解释为
“golden” 。
HOSTNAME
HOSTNNAME 属性因为很常用,所以在配置过程中被自动定义。
设置时间戳
元素 timestamp 可以定义表示一个当前日期和时间的属性。
在运行中定义属性
可以配置文件里用<define>元素定义属性。 <define>元素有两个必要属性: name 和 class。
name 属性代表属性的名称, class 属性代表 PropertyDefiner 接口的任意实现。 PropertyDefiner
接口的 getPropertyV alue()方法返回的值就是属性值。
如下例。
<configuration>
<define name="rootLevel"
class="a.class.implementing.PropertyDefiner">
<aProperty>of a.class.implementing.PropertyDefiner</aProperty>
</define>
<root level="${rootLevel}" />
</configuration>
Logback 目前还没有提供 PropertyDefiner 接口的具体实现, 只是为动态定义属性提供了
一种方法。
配置文件里的条件 化处理
开发者经常需要针对不同的环境在不同的配置文件里换来换去, 比如开发、 测试和生产
环境。这些配置文件大同小异。为避免重复劳动,logback 支持在配置文件里进行条件化处
理,用<if>、<then>和<else>这些元素可以让一个配置文件适用于多个环境。
条件语句一般格式如下。
<configuration>
<!-- if-then form -->
<if condition="some conditional expression">
<then>
...
</then>
</if>
<!-- if-then-else form -->
<if condition="some conditional expression">
<then>
...
</then>
<else>
...
</else>
</if>
</configuration>
其中“condition”是 java 表达式,只允许访问上下文属性和系统属性。对于作为参数传
入的键,property()方法或其等价的 p()方法将返回属性的字符串值。例如,想访问属性键为
“k” 的值, 你可以用 property("k")或等价的 p("k")。 如果键为 “k” 的属性未被定义, property
方法将返回空字符串而不是 null,这样避免了检查 null 值。
下一个例子里,ConsoleAppender 被关联到根 logger,但是前提条件是 HOSTNAME 属
性的值是“torino” 。注意名为“FILE”的 FileAppender 在任何情况下都被关联到根 logger。
<configuration>
<if condition='property("HOSTNAME").contains("torino")'>
<then>
<appender name="CON"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root>
<appender-ref ref="CON" />
</root>
</then>
</if>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${randomOutputDir}/conditional.log</file>
<encoder>
<pattern>%d %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="ERROR">
<appender-ref ref="FILE" />
</root>
</configuration>
<configuration>元素之内的任何地方都支持条件化处理。 也支持嵌套的 if-then-else 语句。
然而,加入过多的条件语句会导致 XML 文件非常难读。
从JNDI获取变量
在某些特定情况下, 你也许利用 JNDI 里存储的 env 项, <insertFromJNDI>指令会从JNDI
里取得 env 项,然后用 as 属性把它们作为变量。
示例:通过 JNDI 取得 env 项并作为属性插入
<configuration>
<insertFromJNDI env-entry-name="java:comp/env/appName"
as="appName" />
<contextName>${appName}</contextName>
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %contextName %level %msg %logger{50}%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
本例中,env 项“java:comp/env/appName”被作为“appName”属性插入到配置文件。
注意先是<insertFromJNDI>指令插入的“appName”属性,然后<contextName>指令把
“appName”的值设成“contextName” 。
文件包含
Joran 支持在配置文件里包含其他文件。方法是声明<include>元素,如下所示:
示例:文件包含
<configuration>
<include
file="src/main/java/chapters/configuration/includedConfig.xml" />
<root level="DEBUG">
<appender-ref ref="includedConsole" />
</root>
</configuration>
被包含的文件必须把它的元素嵌套在<included>元素里。例如,可以这样声明
ConsoleAppender:
示例:文件包含includedConfig.xml
<included>
<appender name="includedConsole"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>"%d - %m%n"</pattern>
</encoder>
</appender>
</included>
请再次注意<included>元素是必需的
被包含的内容可以是文件、资源或 URL。
1. 作为文件
用“file”属性包含一个文件。可以用相对路径,但是需要注意,当前目录是由应
用程序决定的,与配置文件的路径必要的联系。
2. 作为资源
用“resource”属性包含一个资源,也就是在 class path 上的文件。
<include resource="includedConfig.xml" />
3. 作为 URL
用“url”属性包括一个 URL。
<include url="http://some.host.com/includedConfig.xml" />